1616 lines
6.6 MiB
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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([["main"],{
/***/ "(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js":
/*!*****************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_base.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 */ _: () => (/* binding */ _class_private_field_loose_base)\n/* harmony export */ });\nfunction _class_private_field_loose_base(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError(\"attempted to use private field on non-instance\");\n }\n\n return receiver;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjE1L25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDZ0QiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMTUvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlKHJlY2VpdmVyLCBwcml2YXRlS2V5KSB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjZWl2ZXIsIHByaXZhdGVLZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gdXNlIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xuICAgIH1cblxuICAgIHJldHVybiByZWNlaXZlcjtcbn1cbmV4cG9ydCB7IF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UgYXMgXyB9O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js":
/*!****************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_key.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 */ _: () => (/* binding */ _class_private_field_loose_key)\n/* harmony export */ });\nvar id = 0;\n\nfunction _class_private_field_loose_key(name) {\n return \"__private_\" + id++ + \"_\" + name;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjE1L25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQytDIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjE1L25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaWQgPSAwO1xuXG5mdW5jdGlvbiBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXkobmFtZSkge1xuICAgIHJldHVybiBcIl9fcHJpdmF0ZV9cIiArIGlkKysgKyBcIl9cIiArIG5hbWU7XG59XG5leHBvcnQgeyBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXkgYXMgXyB9O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js":
/*!**********************************************************************************************************!*\
!*** ./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.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 */ _: () => (/* binding */ _interop_require_default)\n/* harmony export */ });\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjE1L25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDeUMiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMTUvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTtcbn1cbmV4cG9ydCB7IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCBhcyBfIH07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js":
/*!***********************************************************************************************************!*\
!*** ./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.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 */ _: () => (/* binding */ _interop_require_wildcard)\n/* harmony export */ });\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = { __proto__: null };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjE1L25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLHVGQUF1Rjs7QUFFdkY7O0FBRUE7O0FBRUEsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDMEMiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMTUvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApIHtcbiAgICBpZiAodHlwZW9mIFdlYWtNYXAgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgY2FjaGVCYWJlbEludGVyb3AgPSBuZXcgV2Vha01hcCgpO1xuICAgIHZhciBjYWNoZU5vZGVJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24obm9kZUludGVyb3ApIHtcbiAgICAgICAgcmV0dXJuIG5vZGVJbnRlcm9wID8gY2FjaGVOb2RlSW50ZXJvcCA6IGNhY2hlQmFiZWxJbnRlcm9wO1xuICAgIH0pKG5vZGVJbnRlcm9wKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQob2JqLCBub2RlSW50ZXJvcCkge1xuICAgIGlmICghbm9kZUludGVyb3AgJiYgb2JqICYmIG9iai5fX2VzTW9kdWxlKSByZXR1cm4gb2JqO1xuICAgIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB7IGRlZmF1bHQ6IG9iaiB9O1xuXG4gICAgdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTtcblxuICAgIGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgcmV0dXJuIGNhY2hlLmdldChvYmopO1xuXG4gICAgdmFyIG5ld09iaiA9IHsgX19wcm90b19fOiBudWxsIH07XG4gICAgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoa2V5ICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7XG4gICAgICAgICAgICBlbHNlIG5ld09ialtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZXdPYmouZGVmYXVsdCA9IG9iajtcblxuICAgIGlmIChjYWNoZSkgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTtcblxuICAgIHJldHVybiBuZXdPYmo7XG59XG5leHBvcnQgeyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIGFzIF8gfTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/deployment-id.js":
/*!**********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/deployment-id.js ***!
\**********************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getDeploymentIdQueryOrEmptyString\", ({\n enumerable: true,\n get: function() {\n return getDeploymentIdQueryOrEmptyString;\n }\n}));\nfunction getDeploymentIdQueryOrEmptyString() {\n if (false) {}\n return '';\n}\n\n//# sourceMappingURL=deployment-id.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvZGVwbG95bWVudC1pZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLHFFQUFvRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0EsUUFBUSxLQUE4QixFQUFFLEVBRW5DO0FBQ0w7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS41LjRfcmVhY3QtZG9tQDE5LjEuMF9yZWFjdEAxOS4xLjBfX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL2RlcGxveW1lbnQtaWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmdcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZztcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZygpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgICAgIHJldHVybiBgP2RwbD0ke3Byb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRH1gO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlcGxveW1lbnQtaWQuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/deployment-id.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/polyfills/polyfill-module.js":
/*!**********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/polyfills/polyfill-module.js ***!
\**********************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
eval(__webpack_require__.ts("\"trimStart\"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),\"trimEnd\"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),\"description\"in Symbol.prototype||Object.defineProperty(Symbol.prototype,\"description\",{configurable:!0,get:function(){var t=/\\((.*)\\)/.exec(this.toString());return t?t[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(t,r){return r=this.concat.apply([],this),t>1&&r.some(Array.isArray)?r.flat(t-1):r},Array.prototype.flatMap=function(t,r){return this.map(t,r).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(t){if(\"function\"!=typeof t)return this.then(t,t);var r=this.constructor||Promise;return this.then(function(n){return r.resolve(t()).then(function(){return n})},function(n){return r.resolve(t()).then(function(){throw n})})}),Object.fromEntries||(Object.fromEntries=function(t){return Array.from(t).reduce(function(t,r){return t[r[0]]=r[1],t},{})}),Array.prototype.at||(Array.prototype.at=function(t){var r=Math.trunc(t)||0;if(r<0&&(r+=this.length),!(r<0||r>=this.length))return this[r]}),Object.hasOwn||(Object.hasOwn=function(t,r){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");return Object.prototype.hasOwnProperty.call(Object(t),r)}),\"canParse\"in URL||(URL.canParse=function(t,r){try{return!!new URL(t,r)}catch(t){return!1}});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3BvbHlmaWxsLW1vZHVsZS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtUUFBbVEsK0JBQStCLHVDQUF1QyxzQkFBc0IsNERBQTRELDZFQUE2RSx1Q0FBdUMsNEJBQTRCLG9FQUFvRSw4Q0FBOEMsZ0NBQWdDLDZCQUE2QixzQ0FBc0MsU0FBUyxFQUFFLGFBQWEsc0NBQXNDLFFBQVEsRUFBRSxFQUFFLHNEQUFzRCwwQ0FBMEMsc0JBQXNCLEdBQUcsRUFBRSxzREFBc0QsdUJBQXVCLCtEQUErRCw4Q0FBOEMsNkVBQTZFLHlEQUF5RCxnREFBZ0QsSUFBSSxxQkFBcUIsU0FBUyxVQUFVIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3BvbHlmaWxsLW1vZHVsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInRyaW1TdGFydFwiaW4gU3RyaW5nLnByb3RvdHlwZXx8KFN0cmluZy5wcm90b3R5cGUudHJpbVN0YXJ0PVN0cmluZy5wcm90b3R5cGUudHJpbUxlZnQpLFwidHJpbUVuZFwiaW4gU3RyaW5nLnByb3RvdHlwZXx8KFN0cmluZy5wcm90b3R5cGUudHJpbUVuZD1TdHJpbmcucHJvdG90eXBlLnRyaW1SaWdodCksXCJkZXNjcmlwdGlvblwiaW4gU3ltYm9sLnByb3RvdHlwZXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsXCJkZXNjcmlwdGlvblwiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9L1xcKCguKilcXCkvLmV4ZWModGhpcy50b1N0cmluZygpKTtyZXR1cm4gdD90WzFdOnZvaWQgMH19KSxBcnJheS5wcm90b3R5cGUuZmxhdHx8KEFycmF5LnByb3RvdHlwZS5mbGF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIHI9dGhpcy5jb25jYXQuYXBwbHkoW10sdGhpcyksdD4xJiZyLnNvbWUoQXJyYXkuaXNBcnJheSk/ci5mbGF0KHQtMSk6cn0sQXJyYXkucHJvdG90eXBlLmZsYXRNYXA9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5tYXAodCxyKS5mbGF0KCl9KSxQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5fHwoUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXJldHVybiB0aGlzLnRoZW4odCx0KTt2YXIgcj10aGlzLmNvbnN0cnVjdG9yfHxQcm9taXNlO3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIHIucmVzb2x2ZSh0KCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSxmdW5jdGlvbihuKXtyZXR1cm4gci5yZXNvbHZlKHQoKSkudGhlbihmdW5jdGlvbigpe3Rocm93IG59KX0pfSksT2JqZWN0LmZyb21FbnRyaWVzfHwoT2JqZWN0LmZyb21FbnRyaWVzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5mcm9tKHQpLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiB0W3JbMF1dPXJbMV0sdH0se30pfSksQXJyYXkucHJvdG90eXBlLmF0fHwoQXJyYXkucHJvdG90eXBlLmF0PWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgudHJ1bmModCl8fDA7aWYocjwwJiYocis9dGhpcy5sZW5ndGgpLCEocjwwfHxyPj10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXNbcl19KSxPYmplY3QuaGFzT3dufHwoT2JqZWN0Lmhhc093bj1mdW5jdGlvbih0LHIpe2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdFwiKTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE9iamVjdCh0KSxyKX0pLFwiY2FuUGFyc2VcImluIFVSTHx8KFVSTC5jYW5QYXJzZT1mdW5jdGlvbih0LHIpe3RyeXtyZXR1cm4hIW5ldyBVUkwodCxyKX1jYXRjaCh0KXtyZXR1cm4hMX19KTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/polyfills/polyfill-module.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/polyfills/process.js":
/*!**************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/polyfills/process.js ***!
\**************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nvar _global_process, _global_process1;\nmodule.exports = ((_global_process = __webpack_require__.g.process) == null ? void 0 : _global_process.env) && typeof ((_global_process1 = __webpack_require__.g.process) == null ? void 0 : _global_process1.env) === 'object' ? __webpack_require__.g.process : __webpack_require__(/*! next/dist/compiled/process */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/process/browser.js\");\n\n//# sourceMappingURL=process.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLHFDQUFxQyxxQkFBTSxpRkFBaUYscUJBQU0sa0VBQWtFLHFCQUFNLFdBQVcsbUJBQU8sQ0FBQyx1TEFBNEI7O0FBRXpQIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX2dsb2JhbF9wcm9jZXNzLCBfZ2xvYmFsX3Byb2Nlc3MxO1xubW9kdWxlLmV4cG9ydHMgPSAoKF9nbG9iYWxfcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzKSA9PSBudWxsID8gdm9pZCAwIDogX2dsb2JhbF9wcm9jZXNzLmVudikgJiYgdHlwZW9mICgoX2dsb2JhbF9wcm9jZXNzMSA9IGdsb2JhbC5wcm9jZXNzKSA9PSBudWxsID8gdm9pZCAwIDogX2dsb2JhbF9wcm9jZXNzMS5lbnYpID09PSAnb2JqZWN0JyA/IGdsb2JhbC5wcm9jZXNzIDogcmVxdWlyZSgnbmV4dC9kaXN0L2NvbXBpbGVkL3Byb2Nlc3MnKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvY2Vzcy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/polyfills/process.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/add-base-path.js":
/*!***********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/add-base-path.js ***!
\***********************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addBasePath\", ({\n enumerable: true,\n get: function() {\n return addBasePath;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ../shared/lib/router/utils/add-path-prefix */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst basePath = false || '';\nfunction addBasePath(path, required) {\n return (0, _normalizetrailingslash.normalizePathTrailingSlash)( false ? 0 : (0, _addpathprefix.addPathPrefix)(path, basePath));\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=add-base-path.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FkZC1iYXNlLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OzsrQ0FLZ0JBOzs7ZUFBQUE7OzsyQ0FMYztvREFDYTtBQUUzQyxNQUFNQyxXQUFZQyxNQUFrQyxJQUFlO0FBRTVELFNBQVNGLFlBQVlLLElBQVksRUFBRUMsUUFBa0I7SUFDMUQsT0FBT0MsQ0FBQUEsR0FBQUEsd0JBQUFBLDBCQUFBQSxFQUNMTCxNQUF1REksR0FDbkRELENBQUlBLEdBQ0pJLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNKLE1BQU1KO0FBRTVCIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC9hZGQtYmFzZS1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZFBhdGhQcmVmaXggfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtcGF0aC1wcmVmaXgnXG5pbXBvcnQgeyBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCB9IGZyb20gJy4vbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoJ1xuXG5jb25zdCBiYXNlUGF0aCA9IChwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIIGFzIHN0cmluZykgfHwgJydcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEJhc2VQYXRoKHBhdGg6IHN0cmluZywgcmVxdWlyZWQ/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoKFxuICAgIHByb2Nlc3MuZW52Ll9fTkVYVF9NQU5VQUxfQ0xJRU5UX0JBU0VfUEFUSCAmJiAhcmVxdWlyZWRcbiAgICAgID8gcGF0aFxuICAgICAgOiBhZGRQYXRoUHJlZml4KHBhdGgsIGJhc2VQYXRoKVxuICApXG59XG4iXSwibmFtZXMiOlsiYWRkQmFzZVBhdGgiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsInJlcXVpcmVkIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJfX05FWFRfTUFOVUFMX0NMSUVOVF9CQVNFX1BBVEgiLCJhZGRQYXRoUHJlZml4Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/add-base-path.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/add-locale.js":
/*!********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/add-locale.js ***!
\********************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n enumerable: true,\n get: function() {\n return addLocale;\n }\n}));\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst addLocale = function(path) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (false) {}\n return path;\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=add-locale.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FkZC1sb2NhbGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs2Q0FHYUE7OztlQUFBQTs7O29EQUY4QjtBQUVwQyxNQUFNQSxZQUF1QixTQUFDQyxJQUFBQTtxQ0FBU0MsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsSUFBQUEsT0FBQUEsSUFBQUEsSUFBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7UUFBQUEsSUFBQUEsQ0FBQUEsT0FBQUEsRUFBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O0lBQzVDLElBQUlDLEtBQStCLEVBQUUsRUFNcEM7SUFDRCxPQUFPRjtBQUNUIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC9hZGQtbG9jYWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgYWRkTG9jYWxlIGFzIEZuIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLWxvY2FsZSdcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2gnXG5cbmV4cG9ydCBjb25zdCBhZGRMb2NhbGU6IHR5cGVvZiBGbiA9IChwYXRoLCAuLi5hcmdzKSA9PiB7XG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoKFxuICAgICAgKFxuICAgICAgICByZXF1aXJlKCcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtbG9jYWxlJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLWxvY2FsZScpXG4gICAgICApLmFkZExvY2FsZShwYXRoLCAuLi5hcmdzKVxuICAgIClcbiAgfVxuICByZXR1cm4gcGF0aFxufVxuIl0sIm5hbWVzIjpbImFkZExvY2FsZSIsInBhdGgiLCJhcmdzIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9JMThOX1NVUFBPUlQiLCJub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCIsInJlcXVpcmUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/add-locale.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js":
/*!**************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.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 HTTPAccessErrorStatus: function() {\n return HTTPAccessErrorStatus;\n },\n HTTP_ERROR_FALLBACK_ERROR_CODE: function() {\n return HTTP_ERROR_FALLBACK_ERROR_CODE;\n },\n getAccessFallbackErrorTypeByStatus: function() {\n return getAccessFallbackErrorTypeByStatus;\n },\n getAccessFallbackHTTPStatus: function() {\n return getAccessFallbackHTTPStatus;\n },\n isHTTPAccessFallbackError: function() {\n return isHTTPAccessFallbackError;\n }\n});\nconst HTTPAccessErrorStatus = {\n NOT_FOUND: 404,\n FORBIDDEN: 403,\n UNAUTHORIZED: 401\n};\nconst ALLOWED_CODES = new Set(Object.values(HTTPAccessErrorStatus));\nconst HTTP_ERROR_FALLBACK_ERROR_CODE = 'NEXT_HTTP_ERROR_FALLBACK';\nfunction isHTTPAccessFallbackError(error) {\n if (typeof error !== 'object' || error === null || !('digest' in error) || typeof error.digest !== 'string') {\n return false;\n }\n const [prefix, httpStatus] = error.digest.split(';');\n return prefix === HTTP_ERROR_FALLBACK_ERROR_CODE && ALLOWED_CODES.has(Number(httpStatus));\n}\nfunction getAccessFallbackHTTPStatus(error) {\n const httpStatus = error.digest.split(';')[1];\n return Number(httpStatus);\n}\nfunction getAccessFallbackErrorTypeByStatus(status) {\n switch(status){\n case 401:\n return 'unauthorized';\n case 403:\n return 'forbidden';\n case 404:\n return 'not-found';\n default:\n return;\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=http-access-fallback.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaHR0cC1hY2Nlc3MtZmFsbGJhY2svaHR0cC1hY2Nlc3MtZmFsbGJhY2suanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQWFBLHFCQUFxQjtlQUFyQkE7O0lBUUFDLDhCQUE4QjtlQUE5QkE7O0lBdUNHQyxrQ0FBa0M7ZUFBbENBOztJQVBBQywyQkFBMkI7ZUFBM0JBOztJQW5CQUMseUJBQXlCO2VBQXpCQTs7O0FBckJULE1BQU1KLHdCQUF3QjtJQUNuQ0ssV0FBVztJQUNYQyxXQUFXO0lBQ1hDLGNBQWM7QUFDaEI7QUFFQSxNQUFNQyxnQkFBZ0IsSUFBSUMsSUFBSUMsT0FBT0MsTUFBTSxDQUFDWDtBQUVyQyxNQUFNQyxpQ0FBaUM7QUFhdkMsU0FBU0csMEJBQ2RRLEtBQWM7SUFFZCxJQUNFLE9BQU9BLFVBQVUsWUFDakJBLFVBQVUsUUFDVixDQUFFLGFBQVlBLEtBQUFBLENBQUksSUFDbEIsT0FBT0EsTUFBTUMsTUFBTSxLQUFLLFVBQ3hCO1FBQ0EsT0FBTztJQUNUO0lBQ0EsTUFBTSxDQUFDQyxRQUFRQyxXQUFXLEdBQUdILE1BQU1DLE1BQU0sQ0FBQ0csS0FBSyxDQUFDO0lBRWhELE9BQ0VGLFdBQVdiLGtDQUNYTyxjQUFjUyxHQUFHLENBQUNDLE9BQU9IO0FBRTdCO0FBRU8sU0FBU1osNEJBQ2RTLEtBQThCO0lBRTlCLE1BQU1HLGFBQWFILE1BQU1DLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQzdDLE9BQU9FLE9BQU9IO0FBQ2hCO0FBRU8sU0FBU2IsbUNBQ2RpQixNQUFjO0lBRWQsT0FBUUE7UUFDTixLQUFLO1lBQ0gsT0FBTztRQUNULEtBQUs7WUFDSCxPQUFPO1FBQ1QsS0FBSztZQUNILE9BQU87UUFDVDtZQUNFO0lBQ0o7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL2h0dHAtYWNjZXNzLWZhbGxiYWNrL2h0dHAtYWNjZXNzLWZhbGxiYWNrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBIVFRQQWNjZXNzRXJyb3JTdGF0dXMgPSB7XG4gIE5PVF9GT1VORDogNDA0LFxuICBGT1JCSURERU46IDQwMyxcbiAgVU5BVVRIT1JJWkVEOiA0MDEsXG59XG5cbmNvbnN0IEFMTE9XRURfQ09ERVMgPSBuZXcgU2V0KE9iamVjdC52YWx1ZXMoSFRUUEFjY2Vzc0Vycm9yU3RhdHVzKSlcblxuZXhwb3J0IGNvbnN0IEhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERSA9ICdORVhUX0hUVFBfRVJST1JfRkFMTEJBQ0snXG5cbmV4cG9ydCB0eXBlIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yID0gRXJyb3IgJiB7XG4gIGRpZ2VzdDogYCR7dHlwZW9mIEhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERX07JHtzdHJpbmd9YFxufVxuXG4vKipcbiAqIENoZWNrcyBhbiBlcnJvciB0byBkZXRlcm1pbmUgaWYgaXQncyBhbiBlcnJvciBnZW5lcmF0ZWQgYnlcbiAqIHRoZSBIVFRQIG5hdmlnYXRpb24gQVBJcyBgbm90Rm91bmQoKWAsIGBmb3JiaWRkZW4oKWAgb3IgYHVuYXV0aG9yaXplZCgpYC5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgdGhlIGVycm9yIHRoYXQgbWF5IHJlZmVyZW5jZSBhIEhUVFAgYWNjZXNzIGVycm9yXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBlcnJvciBpcyBhIEhUVFAgYWNjZXNzIGVycm9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0hUVFBBY2Nlc3NGYWxsYmFja0Vycm9yKFxuICBlcnJvcjogdW5rbm93blxuKTogZXJyb3IgaXMgSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3Ige1xuICBpZiAoXG4gICAgdHlwZW9mIGVycm9yICE9PSAnb2JqZWN0JyB8fFxuICAgIGVycm9yID09PSBudWxsIHx8XG4gICAgISgnZGlnZXN0JyBpbiBlcnJvcikgfHxcbiAgICB0eXBlb2YgZXJyb3IuZGlnZXN0ICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjb25zdCBbcHJlZml4LCBodHRwU3RhdHVzXSA9IGVycm9yLmRpZ2VzdC5zcGxpdCgnOycpXG5cbiAgcmV0dXJuIChcbiAgICBwcmVmaXggPT09IEhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERSAmJlxuICAgIEFMTE9XRURfQ09ERVMuaGFzKE51bWJlcihodHRwU3RhdHVzKSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWNjZXNzRmFsbGJhY2tIVFRQU3RhdHVzKFxuICBlcnJvcjogSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3Jcbik6IG51bWJlciB7XG4gIGNvbnN0IGh0dHBTdGF0dXMgPSBlcnJvci5kaWdlc3Quc3BsaXQoJzsnKVsxXVxuICByZXR1cm4gTnVtYmVyKGh0dHBTdGF0dXMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY2Nlc3NGYWxsYmFja0Vycm9yVHlwZUJ5U3RhdHVzKFxuICBzdGF0dXM6IG51bWJlclxuKTogJ25vdC1mb3VuZCcgfCAnZm9yYmlkZGVuJyB8ICd1bmF1dGhvcml6ZWQnIHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlIDQwMTpcbiAgICAgIHJldHVybiAndW5hdXRob3JpemVkJ1xuICAgIGNhc2UgNDAzOlxuICAgICAgcmV0dXJuICdmb3JiaWRkZW4nXG4gICAgY2FzZSA0MDQ6XG4gICAgICByZXR1cm4gJ25vdC1mb3VuZCdcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJIVFRQQWNjZXNzRXJyb3JTdGF0dXMiLCJIVFRQX0VSUk9SX0ZBTExCQUNLX0VSUk9SX0NPREUiLCJnZXRBY2Nlc3NGYWxsYmFja0Vycm9yVHlwZUJ5U3RhdHVzIiwiZ2V0QWNjZXNzRmFsbGJhY2tIVFRQU3RhdHVzIiwiaXNIVFRQQWNjZXNzRmFsbGJhY2tFcnJvciIsIk5PVF9GT1VORCIsIkZPUkJJRERFTiIsIlVOQVVUSE9SSVpFRCIsIkFMTE9XRURfQ09ERVMiLCJTZXQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJlcnJvciIsImRpZ2VzdCIsInByZWZpeCIsImh0dHBTdGF0dXMiLCJzcGxpdCIsImhhcyIsIk51bWJlciIsInN0YXR1cyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/is-next-router-error.js":
/*!*****************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/is-next-router-error.js ***!
\*****************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isNextRouterError\", ({\n enumerable: true,\n get: function() {\n return isNextRouterError;\n }\n}));\nconst _httpaccessfallback = __webpack_require__(/*! ./http-access-fallback/http-access-fallback */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\");\nconst _redirecterror = __webpack_require__(/*! ./redirect-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/redirect-error.js\");\nfunction isNextRouterError(error) {\n return (0, _redirecterror.isRedirectError)(error) || (0, _httpaccessfallback.isHTTPAccessFallbackError)(error);\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=is-next-router-error.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaXMtbmV4dC1yb3V0ZXItZXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7OztxREFXZ0JBOzs7ZUFBQUE7OztnREFSVDsyQ0FDNkM7QUFPN0MsU0FBU0Esa0JBQ2RDLEtBQWM7SUFFZCxPQUFPQyxDQUFBQSxHQUFBQSxlQUFBQSxlQUFBQSxFQUFnQkQsVUFBVUUsQ0FBQUEsR0FBQUEsb0JBQUFBLHlCQUFBQSxFQUEwQkY7QUFDN0QiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL3NyYy9jbGllbnQvY29tcG9uZW50cy9pcy1uZXh0LXJvdXRlci1lcnJvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBpc0hUVFBBY2Nlc3NGYWxsYmFja0Vycm9yLFxuICB0eXBlIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yLFxufSBmcm9tICcuL2h0dHAtYWNjZXNzLWZhbGxiYWNrL2h0dHAtYWNjZXNzLWZhbGxiYWNrJ1xuaW1wb3J0IHsgaXNSZWRpcmVjdEVycm9yLCB0eXBlIFJlZGlyZWN0RXJyb3IgfSBmcm9tICcuL3JlZGlyZWN0LWVycm9yJ1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXJyb3IgaXMgYSBuYXZpZ2F0aW9uIHNpZ25hbCBlcnJvci4gVGhlc2UgZXJyb3JzIGFyZVxuICogdGhyb3duIGJ5IHVzZXIgY29kZSB0byBwZXJmb3JtIG5hdmlnYXRpb24gb3BlcmF0aW9ucyBhbmQgaW50ZXJydXB0IHRoZSBSZWFjdFxuICogcmVuZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOZXh0Um91dGVyRXJyb3IoXG4gIGVycm9yOiB1bmtub3duXG4pOiBlcnJvciBpcyBSZWRpcmVjdEVycm9yIHwgSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3Ige1xuICByZXR1cm4gaXNSZWRpcmVjdEVycm9yKGVycm9yKSB8fCBpc0hUVFBBY2Nlc3NGYWxsYmFja0Vycm9yKGVycm9yKVxufVxuIl0sIm5hbWVzIjpbImlzTmV4dFJvdXRlckVycm9yIiwiZXJyb3IiLCJpc1JlZGlyZWN0RXJyb3IiLCJpc0hUVFBBY2Nlc3NGYWxsYmFja0Vycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/is-next-router-error.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/redirect-error.js":
/*!***********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/redirect-error.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 REDIRECT_ERROR_CODE: function() {\n return REDIRECT_ERROR_CODE;\n },\n RedirectType: function() {\n return RedirectType;\n },\n isRedirectError: function() {\n return isRedirectError;\n }\n});\nconst _redirectstatuscode = __webpack_require__(/*! ./redirect-status-code */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/redirect-status-code.js\");\nconst REDIRECT_ERROR_CODE = 'NEXT_REDIRECT';\nvar RedirectType = /*#__PURE__*/ function(RedirectType) {\n RedirectType[\"push\"] = \"push\";\n RedirectType[\"replace\"] = \"replace\";\n return RedirectType;\n}({});\nfunction isRedirectError(error) {\n if (typeof error !== 'object' || error === null || !('digest' in error) || typeof error.digest !== 'string') {\n return false;\n }\n const digest = error.digest.split(';');\n const [errorCode, type] = digest;\n const destination = digest.slice(2, -2).join(';');\n const status = digest.at(-2);\n const statusCode = Number(status);\n return errorCode === REDIRECT_ERROR_CODE && (type === 'replace' || type === 'push') && typeof destination === 'string' && !isNaN(statusCode) && statusCode in _redirectstatuscode.RedirectStatusCode;\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=redirect-error.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3QtZXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBRWFBLG1CQUFtQjtlQUFuQkE7O0lBRURDLFlBQVk7ZUFBWkE7O0lBZ0JJQyxlQUFlO2VBQWZBOzs7Z0RBcEJtQjtBQUU1QixNQUFNRixzQkFBc0I7QUFFNUIsSUFBS0MsZUFBQUEsV0FBQUEsR0FBQUEsU0FBQUEsWUFBQUE7OztXQUFBQTs7QUFnQkwsU0FBU0MsZ0JBQWdCQyxLQUFjO0lBQzVDLElBQ0UsT0FBT0EsVUFBVSxZQUNqQkEsVUFBVSxRQUNWLENBQUUsYUFBWUEsS0FBQUEsQ0FBSSxJQUNsQixPQUFPQSxNQUFNQyxNQUFNLEtBQUssVUFDeEI7UUFDQSxPQUFPO0lBQ1Q7SUFFQSxNQUFNQSxTQUFTRCxNQUFNQyxNQUFNLENBQUNDLEtBQUssQ0FBQztJQUNsQyxNQUFNLENBQUNDLFdBQVdDLEtBQUssR0FBR0g7SUFDMUIsTUFBTUksY0FBY0osT0FBT0ssS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHQyxJQUFJLENBQUM7SUFDN0MsTUFBTUMsU0FBU1AsT0FBT1EsRUFBRSxDQUFDLENBQUM7SUFFMUIsTUFBTUMsYUFBYUMsT0FBT0g7SUFFMUIsT0FDRUwsY0FBY04sdUJBQ2JPLENBQUFBLFNBQVMsYUFBYUEsU0FBUyxPQUFLLElBQ3JDLE9BQU9DLGdCQUFnQixZQUN2QixDQUFDTyxNQUFNRixlQUNQQSxjQUFjRyxvQkFBQUEsa0JBQWtCO0FBRXBDIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3QtZXJyb3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVkaXJlY3RTdGF0dXNDb2RlIH0gZnJvbSAnLi9yZWRpcmVjdC1zdGF0dXMtY29kZSdcblxuZXhwb3J0IGNvbnN0IFJFRElSRUNUX0VSUk9SX0NPREUgPSAnTkVYVF9SRURJUkVDVCdcblxuZXhwb3J0IGVudW0gUmVkaXJlY3RUeXBlIHtcbiAgcHVzaCA9ICdwdXNoJyxcbiAgcmVwbGFjZSA9ICdyZXBsYWNlJyxcbn1cblxuZXhwb3J0IHR5cGUgUmVkaXJlY3RFcnJvciA9IEVycm9yICYge1xuICBkaWdlc3Q6IGAke3R5cGVvZiBSRURJUkVDVF9FUlJPUl9DT0RFfTske1JlZGlyZWN0VHlwZX07JHtzdHJpbmd9OyR7UmVkaXJlY3RTdGF0dXNDb2RlfTtgXG59XG5cbi8qKlxuICogQ2hlY2tzIGFuIGVycm9yIHRvIGRldGVybWluZSBpZiBpdCdzIGFuIGVycm9yIGdlbmVyYXRlZCBieSB0aGVcbiAqIGByZWRpcmVjdCh1cmwpYCBoZWxwZXIuXG4gKlxuICogQHBhcmFtIGVycm9yIHRoZSBlcnJvciB0aGF0IG1heSByZWZlcmVuY2UgYSByZWRpcmVjdCBlcnJvclxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZXJyb3IgaXMgYSByZWRpcmVjdCBlcnJvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWRpcmVjdEVycm9yKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgUmVkaXJlY3RFcnJvciB7XG4gIGlmIChcbiAgICB0eXBlb2YgZXJyb3IgIT09ICdvYmplY3QnIHx8XG4gICAgZXJyb3IgPT09IG51bGwgfHxcbiAgICAhKCdkaWdlc3QnIGluIGVycm9yKSB8fFxuICAgIHR5cGVvZiBlcnJvci5kaWdlc3QgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgZGlnZXN0ID0gZXJyb3IuZGlnZXN0LnNwbGl0KCc7JylcbiAgY29uc3QgW2Vycm9yQ29kZSwgdHlwZV0gPSBkaWdlc3RcbiAgY29uc3QgZGVzdGluYXRpb24gPSBkaWdlc3Quc2xpY2UoMiwgLTIpLmpvaW4oJzsnKVxuICBjb25zdCBzdGF0dXMgPSBkaWdlc3QuYXQoLTIpXG5cbiAgY29uc3Qgc3RhdHVzQ29kZSA9IE51bWJlcihzdGF0dXMpXG5cbiAgcmV0dXJuIChcbiAgICBlcnJvckNvZGUgPT09IFJFRElSRUNUX0VSUk9SX0NPREUgJiZcbiAgICAodHlwZSA9PT0gJ3JlcGxhY2UnIHx8IHR5cGUgPT09ICdwdXNoJykgJiZcbiAgICB0eXBlb2YgZGVzdGluYXRpb24gPT09ICdzdHJpbmcnICYmXG4gICAgIWlzTmFOKHN0YXR1c0NvZGUpICYmXG4gICAgc3RhdHVzQ29kZSBpbiBSZWRpcmVjdFN0YXR1c0NvZGVcbiAgKVxufVxuIl0sIm5hbWVzIjpbIlJFRElSRUNUX0VSUk9SX0NPREUiLCJSZWRpcmVjdFR5cGUiLCJpc1JlZGlyZWN0RXJyb3IiLCJlcnJvciIsImRpZ2VzdCIsInNwbGl0IiwiZXJyb3JDb2RlIiwidHlwZSIsImRlc3RpbmF0aW9uIiwic2xpY2UiLCJqb2luIiwic3RhdHVzIiwiYXQiLCJzdGF0dXNDb2RlIiwiTnVtYmVyIiwiaXNOYU4iLCJSZWRpcmVjdFN0YXR1c0NvZGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/redirect-error.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/redirect-status-code.js":
/*!*****************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/redirect-status-code.js ***!
\*****************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RedirectStatusCode\", ({\n enumerable: true,\n get: function() {\n return RedirectStatusCode;\n }\n}));\nvar RedirectStatusCode = /*#__PURE__*/ function(RedirectStatusCode) {\n RedirectStatusCode[RedirectStatusCode[\"SeeOther\"] = 303] = \"SeeOther\";\n RedirectStatusCode[RedirectStatusCode[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n RedirectStatusCode[RedirectStatusCode[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n return RedirectStatusCode;\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=redirect-status-code.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3Qtc3RhdHVzLWNvZGUuanMiLCJtYXBwaW5ncyI6Ijs7OztzREFBWUE7OztlQUFBQTs7O0FBQUwsSUFBS0EscUJBQUFBLFdBQUFBLEdBQUFBLFNBQUFBLGtCQUFBQTs7OztXQUFBQSIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvc3JjL2NsaWVudC9jb21wb25lbnRzL3JlZGlyZWN0LXN0YXR1cy1jb2RlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFJlZGlyZWN0U3RhdHVzQ29kZSB7XG4gIFNlZU90aGVyID0gMzAzLFxuICBUZW1wb3JhcnlSZWRpcmVjdCA9IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3QgPSAzMDgsXG59XG4iXSwibmFtZXMiOlsiUmVkaXJlY3RTdGF0dXNDb2RlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/redirect-status-code.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/detect-domain-locale.js":
/*!******************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/detect-domain-locale.js ***!
\******************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"detectDomainLocale\", ({\n enumerable: true,\n get: function() {\n return detectDomainLocale;\n }\n}));\nconst detectDomainLocale = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (false) {}\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=detect-domain-locale.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2RldGVjdC1kb21haW4tbG9jYWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7c0RBRWFBOzs7ZUFBQUE7OztBQUFOLE1BQU1BLHFCQUFnQztxQ0FBSUMsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7UUFBQUEsSUFBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O0lBQy9DLElBQUlDLEtBQStCLEVBQUUsRUFJcEM7QUFDSCIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvZGV0ZWN0LWRvbWFpbi1sb2NhbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBkZXRlY3REb21haW5Mb2NhbGUgYXMgRm4gfSBmcm9tICcuLi9zaGFyZWQvbGliL2kxOG4vZGV0ZWN0LWRvbWFpbi1sb2NhbGUnXG5cbmV4cG9ydCBjb25zdCBkZXRlY3REb21haW5Mb2NhbGU6IHR5cGVvZiBGbiA9ICguLi5hcmdzKSA9PiB7XG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHJlcXVpcmUoJy4uL3NoYXJlZC9saWIvaTE4bi9kZXRlY3QtZG9tYWluLWxvY2FsZScpIGFzIHR5cGVvZiBpbXBvcnQoJy4uL3NoYXJlZC9saWIvaTE4bi9kZXRlY3QtZG9tYWluLWxvY2FsZScpXG4gICAgKS5kZXRlY3REb21haW5Mb2NhbGUoLi4uYXJncylcbiAgfVxufVxuIl0sIm5hbWVzIjpbImRldGVjdERvbWFpbkxvY2FsZSIsImFyZ3MiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0kxOE5fU1VQUE9SVCIsInJlcXVpcmUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/detect-domain-locale.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/fouc.js":
/*!******************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/fouc.js ***!
\******************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// This wrapper function is used to safely select the best available function\n// to schedule removal of the no-FOUC styles workaround. requestAnimationFrame\n// is the ideal choice, but when used in iframes, there are no guarantees that\n// the callback will actually be called, which could stall the promise returned\n// from displayContent.\n//\n// See: https://www.vector-logic.com/blog/posts/on-request-animation-frame-and-embedded-iframes\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"displayContent\", ({\n enumerable: true,\n get: function() {\n return displayContent;\n }\n}));\nconst safeCallbackQueue = (callback)=>{\n if (window.requestAnimationFrame && window.self === window.top) {\n window.requestAnimationFrame(callback);\n } else {\n window.setTimeout(callback);\n }\n};\nfunction displayContent() {\n return new Promise((resolve)=>{\n safeCallbackQueue(function() {\n for(var x = document.querySelectorAll('[data-next-hide-fouc]'), i = x.length; i--;){\n x[i].parentNode.removeChild(x[i]);\n }\n resolve();\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=fouc.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9mb3VjLmpzIiwibWFwcGluZ3MiOiJBQUFBLDZFQUE2RTtBQUM3RSw4RUFBOEU7QUFDOUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSx1QkFBdUI7QUFDdkIsRUFBRTtBQUNGLCtGQUErRjs7Ozs7a0RBWS9FQTs7O2VBQUFBOzs7QUFYaEIsTUFBTUMsb0JBQW9CLENBQUNDO0lBQ3pCLElBQUlDLE9BQU9DLHFCQUFxQixJQUFJRCxPQUFPRSxJQUFJLEtBQUtGLE9BQU9HLEdBQUcsRUFBRTtRQUM5REgsT0FBT0MscUJBQXFCLENBQUNGO0lBQy9CLE9BQU87UUFDTEMsT0FBT0ksVUFBVSxDQUFDTDtJQUNwQjtBQUNGO0FBS08sU0FBU0Y7SUFDZCxPQUFPLElBQUlRLFFBQVEsQ0FBQ0M7UUFDbEJSLGtCQUFrQjtZQUNoQixJQUNFLElBQUlTLElBQUlDLFNBQVNDLGdCQUFnQixDQUFDLDBCQUNoQ0MsSUFBSUgsRUFBRUksTUFBTSxFQUNkRCxLQUVBO2dCQUNBSCxDQUFDLENBQUNHLEVBQUUsQ0FBQ0UsVUFBVSxDQUFFQyxXQUFXLENBQUNOLENBQUMsQ0FBQ0csRUFBRTtZQUNuQztZQUNBSjtRQUNGO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvc3JjL2NsaWVudC9kZXYvZm91Yy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gaXMgdXNlZCB0byBzYWZlbHkgc2VsZWN0IHRoZSBiZXN0IGF2YWlsYWJsZSBmdW5jdGlvblxuLy8gdG8gc2NoZWR1bGUgcmVtb3ZhbCBvZiB0aGUgbm8tRk9VQyBzdHlsZXMgd29ya2Fyb3VuZC4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4vLyBpcyB0aGUgaWRlYWwgY2hvaWNlLCBidXQgd2hlbiB1c2VkIGluIGlmcmFtZXMsIHRoZXJlIGFyZSBubyBndWFyYW50ZWVzIHRoYXRcbi8vIHRoZSBjYWxsYmFjayB3aWxsIGFjdHVhbGx5IGJlIGNhbGxlZCwgd2hpY2ggY291bGQgc3RhbGwgdGhlIHByb21pc2UgcmV0dXJuZWRcbi8vIGZyb20gZGlzcGxheUNvbnRlbnQuXG4vL1xuLy8gU2VlOiBodHRwczovL3d3dy52ZWN0b3ItbG9naWMuY29tL2Jsb2cvcG9zdHMvb24tcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtYW5kLWVtYmVkZGVkLWlmcmFtZXNcbmNvbnN0IHNhZmVDYWxsYmFja1F1ZXVlID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG4gIGlmICh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICYmIHdpbmRvdy5zZWxmID09PSB3aW5kb3cudG9wKSB7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjaylcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cuc2V0VGltZW91dChjYWxsYmFjaylcbiAgfVxufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVtb3ZlIE5leHQuanMnIG5vLUZPVUMgc3R5bGVzIHdvcmthcm91bmQgZm9yIHVzaW5nXG4vLyBgc3R5bGUtbG9hZGVyYCBpbiBkZXZlbG9wbWVudC4gSXQgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGh5ZHJhdGlvbiwgb3IgZWxzZVxuLy8gcmVuZGVyaW5nIHdvbid0IGhhdmUgdGhlIGNvcnJlY3QgY29tcHV0ZWQgdmFsdWVzIGluIGVmZmVjdHMuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheUNvbnRlbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNhZmVDYWxsYmFja1F1ZXVlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciB4ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbmV4dC1oaWRlLWZvdWNdJyksXG4gICAgICAgICAgaSA9IHgubGVuZ3RoO1xuICAgICAgICBpLS07XG5cbiAgICAgICkge1xuICAgICAgICB4W2ldLnBhcmVudE5vZGUhLnJlbW92ZUNoaWxkKHhbaV0pXG4gICAgICB9XG4gICAgICByZXNvbHZlKClcbiAgICB9KVxuICB9KVxufVxuIl0sIm5hbWVzIjpbImRpc3BsYXlDb250ZW50Iiwic2FmZUNhbGxiYWNrUXVldWUiLCJjYWxsYmFjayIsIndpbmRvdyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNlbGYiLCJ0b3AiLCJzZXRUaW1lb3V0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJ4IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaSIsImxlbmd0aCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/fouc.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-middleware-client.js":
/*!***********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-middleware-client.js ***!
\***********************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _hotreloaderpages = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./hot-reloader/pages/hot-reloader-pages */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js\"));\nconst _websocket = __webpack_require__(/*! ./hot-reloader/pages/websocket */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js\");\nlet reloading = false;\nconst _default = ()=>{\n const devClient = (0, _hotreloaderpages.default)();\n devClient.subscribeToHmrEvent((obj)=>{\n var _window_next;\n if (reloading) return;\n // Retrieve the router if it's available\n const router = (_window_next = window.next) == null ? void 0 : _window_next.router;\n // Determine if we're on an error page or the router is not initialized\n const isOnErrorPage = !router || router.pathname === '/404' || router.pathname === '/_error';\n switch(obj.action){\n case 'reloadPage':\n {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-reload-page',\n clientId: window.__nextDevClientId\n }));\n reloading = true;\n return window.location.reload();\n }\n case 'removedPage':\n {\n const [page] = obj.data;\n // Check if the removed page is the current page\n const isCurrentPage = page === (router == null ? void 0 : router.pathname);\n // We enter here if the removed page is currently being viewed\n // or if we happen to be on an error page.\n if (isCurrentPage || isOnErrorPage) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-removed-page',\n clientId: window.__nextDevClientId,\n page\n }));\n return window.location.reload();\n }\n return;\n }\n case 'addedPage':\n {\n var _router_components;\n const [page] = obj.data;\n // Check if the added page is the current page\n const isCurrentPage = page === (router == null ? void 0 : router.pathname);\n // Check if the page component is not yet loaded\n const isPageNotLoaded = typeof (router == null ? void 0 : (_router_components = router.components) == null ? void 0 : _router_components[page]) === 'undefined';\n // We enter this block if the newly added page is the one currently being viewed\n // but hasn't been loaded yet, or if we're on an error page.\n if (isCurrentPage && isPageNotLoaded || isOnErrorPage) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-added-page',\n clientId: window.__nextDevClientId,\n page\n }));\n return window.location.reload();\n }\n return;\n }\n case 'serverError':\n case 'devPagesManifestUpdate':\n case 'isrManifest':\n case 'building':\n case 'finishBuilding':\n {\n return;\n }\n default:\n {\n throw Object.defineProperty(new Error('Unexpected action ' + obj.action), \"__NEXT_ERROR_CODE\", {\n value: \"E59\",\n enumerable: false,\n configurable: true\n });\n }\n }\n });\n return devClient;\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=hot-middleware-client.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtbWlkZGxld2FyZS1jbGllbnQuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FzQkE7OztlQUFBOzs7O3VGQWxCb0I7dUNBQ1E7QUFlNUIsSUFBSUEsWUFBWTtNQUVoQixXQUFlO0lBQ2IsTUFBTUMsWUFBWUMsQ0FBQUEsR0FBQUEsa0JBQUFBLE9BQUFBO0lBRWxCRCxVQUFVRSxtQkFBbUIsQ0FBQyxDQUFDQztZQUlkQztRQUhmLElBQUlMLFdBQVc7UUFFZix3Q0FBd0M7UUFDeEMsTUFBTU0sU0FBQUEsQ0FBU0QsZUFBQUEsT0FBT0UsSUFBQUEsS0FBSSxnQkFBWEYsYUFBYUMsTUFBTTtRQUVsQyx1RUFBdUU7UUFDdkUsTUFBTUUsZ0JBQ0osQ0FBQ0YsVUFBVUEsT0FBT0csUUFBUSxLQUFLLFVBQVVILE9BQU9HLFFBQVEsS0FBSztRQUUvRCxPQUFRTCxJQUFJTSxNQUFNO1lBQ2hCLEtBQUs7Z0JBQWM7b0JBQ2pCQyxDQUFBQSxHQUFBQSxXQUFBQSxXQUFBQSxFQUNFQyxLQUFLQyxTQUFTLENBQUM7d0JBQ2JDLE9BQU87d0JBQ1BDLFVBQVVWLE9BQU9XLGlCQUFpQjtvQkFDcEM7b0JBRUZoQixZQUFZO29CQUNaLE9BQU9LLE9BQU9ZLFFBQVEsQ0FBQ0MsTUFBTTtnQkFDL0I7WUFDQSxLQUFLO2dCQUFlO29CQUNsQixNQUFNLENBQUNDLEtBQUssR0FBR2YsSUFBSWdCLElBQUk7b0JBRXZCLGdEQUFnRDtvQkFDaEQsTUFBTUMsZ0JBQWdCRixVQUFTYixVQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxPQUFRRyxRQUFBQTtvQkFFdkMsOERBQThEO29CQUM5RCwwQ0FBMEM7b0JBQzFDLElBQUlZLGlCQUFpQmIsZUFBZTt3QkFDbENHLENBQUFBLEdBQUFBLFdBQUFBLFdBQUFBLEVBQ0VDLEtBQUtDLFNBQVMsQ0FBQzs0QkFDYkMsT0FBTzs0QkFDUEMsVUFBVVYsT0FBT1csaUJBQWlCOzRCQUNsQ0c7d0JBQ0Y7d0JBRUYsT0FBT2QsT0FBT1ksUUFBUSxDQUFDQyxNQUFNO29CQUMvQjtvQkFDQTtnQkFDRjtZQUNBLEtBQUs7Z0JBQWE7d0JBUVBaO29CQVBULE1BQU0sQ0FBQ2EsS0FBSyxHQUFHZixJQUFJZ0IsSUFBSTtvQkFFdkIsOENBQThDO29CQUM5QyxNQUFNQyxnQkFBZ0JGLFNBQVNiLFdBQUFBLE9BQUFBLEtBQUFBLElBQUFBLE9BQVFHLFFBQUFBO29CQUV2QyxnREFBZ0Q7b0JBQ2hELE1BQU1hLGtCQUNKLFFBQU9oQixVQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxxQkFBQUEsT0FBUWlCLFVBQUFBLEtBQVUsZ0JBQWxCakIsa0JBQW9CLENBQUNhLEtBQUFBLE1BQVU7b0JBRXhDLGdGQUFnRjtvQkFDaEYsNERBQTREO29CQUM1RCxJQUFLRSxpQkFBaUJDLG1CQUFvQmQsZUFBZTt3QkFDdkRHLENBQUFBLEdBQUFBLFdBQUFBLFdBQUFBLEVBQ0VDLEtBQUtDLFNBQVMsQ0FBQzs0QkFDYkMsT0FBTzs0QkFDUEMsVUFBVVYsT0FBT1csaUJBQWlCOzRCQUNsQ0c7d0JBQ0Y7d0JBRUYsT0FBT2QsT0FBT1ksUUFBUSxDQUFDQyxNQUFNO29CQUMvQjtvQkFDQTtnQkFDRjtZQUNBLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO2dCQUFrQjtvQkFDckI7Z0JBQ0Y7WUFDQTtnQkFBUztvQkFDUCxNQUFNLHFCQUE0QyxDQUE1QyxJQUFJTSxNQUFNLHVCQUF1QnBCLElBQUlNLE1BQU0sR0FBM0M7K0JBQUE7b0NBQUE7c0NBQUE7b0JBQTJDO2dCQUNuRDtRQUNGO0lBQ0Y7SUFFQSxPQUFPVDtBQUNUIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvY2xpZW50L2Rldi9ob3QtbWlkZGxld2FyZS1jbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBOZXh0Um91dGVyLFxuICBQcml2YXRlUm91dGVJbmZvLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL3JvdXRlci9yb3V0ZXInXG5pbXBvcnQgY29ubmVjdCBmcm9tICcuL2hvdC1yZWxvYWRlci9wYWdlcy9ob3QtcmVsb2FkZXItcGFnZXMnXG5pbXBvcnQgeyBzZW5kTWVzc2FnZSB9IGZyb20gJy4vaG90LXJlbG9hZGVyL3BhZ2VzL3dlYnNvY2tldCdcblxuLy8gRGVmaW5lIGEgbG9jYWwgdHlwZSBmb3IgdGhlIHdpbmRvdy5uZXh0IG9iamVjdFxuaW50ZXJmYWNlIE5leHRXaW5kb3cge1xuICBuZXh0Pzoge1xuICAgIHJvdXRlcj86IE5leHRSb3V0ZXIgJiB7XG4gICAgICBjb21wb25lbnRzOiB7IFtwYXRobmFtZTogc3RyaW5nXTogUHJpdmF0ZVJvdXRlSW5mbyB9XG4gICAgfVxuICB9XG4gIF9fbmV4dERldkNsaWVudElkPzogc3RyaW5nXG4gIGxvY2F0aW9uOiBMb2NhdGlvblxufVxuXG5kZWNsYXJlIGNvbnN0IHdpbmRvdzogTmV4dFdpbmRvd1xuXG5sZXQgcmVsb2FkaW5nID0gZmFsc2VcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBkZXZDbGllbnQgPSBjb25uZWN0KClcblxuICBkZXZDbGllbnQuc3Vic2NyaWJlVG9IbXJFdmVudCgob2JqOiBhbnkpID0+IHtcbiAgICBpZiAocmVsb2FkaW5nKSByZXR1cm5cblxuICAgIC8vIFJldHJpZXZlIHRoZSByb3V0ZXIgaWYgaXQncyBhdmFpbGFibGVcbiAgICBjb25zdCByb3V0ZXIgPSB3aW5kb3cubmV4dD8ucm91dGVyXG5cbiAgICAvLyBEZXRlcm1pbmUgaWYgd2UncmUgb24gYW4gZXJyb3IgcGFnZSBvciB0aGUgcm91dGVyIGlzIG5vdCBpbml0aWFsaXplZFxuICAgIGNvbnN0IGlzT25FcnJvclBhZ2UgPVxuICAgICAgIXJvdXRlciB8fCByb3V0ZXIucGF0aG5hbWUgPT09ICcvNDA0JyB8fCByb3V0ZXIucGF0aG5hbWUgPT09ICcvX2Vycm9yJ1xuXG4gICAgc3dpdGNoIChvYmouYWN0aW9uKSB7XG4gICAgICBjYXNlICdyZWxvYWRQYWdlJzoge1xuICAgICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ2NsaWVudC1yZWxvYWQtcGFnZScsXG4gICAgICAgICAgICBjbGllbnRJZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmVsb2FkaW5nID0gdHJ1ZVxuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICB9XG4gICAgICBjYXNlICdyZW1vdmVkUGFnZSc6IHtcbiAgICAgICAgY29uc3QgW3BhZ2VdID0gb2JqLmRhdGFcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVtb3ZlZCBwYWdlIGlzIHRoZSBjdXJyZW50IHBhZ2VcbiAgICAgICAgY29uc3QgaXNDdXJyZW50UGFnZSA9IHBhZ2UgPT09IHJvdXRlcj8ucGF0aG5hbWVcblxuICAgICAgICAvLyBXZSBlbnRlciBoZXJlIGlmIHRoZSByZW1vdmVkIHBhZ2UgaXMgY3VycmVudGx5IGJlaW5nIHZpZXdlZFxuICAgICAgICAvLyBvciBpZiB3ZSBoYXBwZW4gdG8gYmUgb24gYW4gZXJyb3IgcGFnZS5cbiAgICAgICAgaWYgKGlzQ3VycmVudFBhZ2UgfHwgaXNPbkVycm9yUGFnZSkge1xuICAgICAgICAgIHNlbmRNZXNzYWdlKFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICBldmVudDogJ2NsaWVudC1yZW1vdmVkLXBhZ2UnLFxuICAgICAgICAgICAgICBjbGllbnRJZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkLFxuICAgICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY2FzZSAnYWRkZWRQYWdlJzoge1xuICAgICAgICBjb25zdCBbcGFnZV0gPSBvYmouZGF0YVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBhZGRlZCBwYWdlIGlzIHRoZSBjdXJyZW50IHBhZ2VcbiAgICAgICAgY29uc3QgaXNDdXJyZW50UGFnZSA9IHBhZ2UgPT09IHJvdXRlcj8ucGF0aG5hbWVcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcGFnZSBjb21wb25lbnQgaXMgbm90IHlldCBsb2FkZWRcbiAgICAgICAgY29uc3QgaXNQYWdlTm90TG9hZGVkID1cbiAgICAgICAgICB0eXBlb2Ygcm91dGVyPy5jb21wb25lbnRzPy5bcGFnZV0gPT09ICd1bmRlZmluZWQnXG5cbiAgICAgICAgLy8gV2UgZW50ZXIgdGhpcyBibG9jayBpZiB0aGUgbmV3bHkgYWRkZWQgcGFnZSBpcyB0aGUgb25lIGN1cnJlbnRseSBiZWluZyB2aWV3ZWRcbiAgICAgICAgLy8gYnV0IGhhc24ndCBiZWVuIGxvYWRlZCB5ZXQsIG9yIGlmIHdlJ3JlIG9uIGFuIGVycm9yIHBhZ2UuXG4gICAgICAgIGlmICgoaXNDdXJyZW50UGFnZSAmJiBpc1BhZ2VOb3RMb2FkZWQpIHx8IGlzT25FcnJvclBhZ2UpIHtcbiAgICAgICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgZXZlbnQ6ICdjbGllbnQtYWRkZWQtcGFnZScsXG4gICAgICAgICAgICAgIGNsaWVudElkOiB3aW5kb3cuX19uZXh0RGV2Q2xpZW50SWQsXG4gICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjYXNlICdzZXJ2ZXJFcnJvcic6XG4gICAgICBjYXNlICdkZXZQYWdlc01hbmlmZXN0VXBkYXRlJzpcbiAgICAgIGNhc2UgJ2lzck1hbmlmZXN0JzpcbiAgICAgIGNhc2UgJ2J1aWxkaW5nJzpcbiAgICAgIGNhc2UgJ2ZpbmlzaEJ1aWxkaW5nJzoge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGFjdGlvbiAnICsgb2JqLmFjdGlvbilcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGRldkNsaWVudFxufVxuIl0sIm5hbWVzIjpbInJlbG9hZGluZyIsImRldkNsaWVudCIsImNvbm5lY3QiLCJzdWJzY3JpYmVUb0htckV2ZW50Iiwib2JqIiwid2luZG93Iiwicm91dGVyIiwibmV4dCIsImlzT25FcnJvclBhZ2UiLCJwYXRobmFtZSIsImFjdGlvbiIsInNlbmRNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiY2xpZW50SWQiLCJfX25leHREZXZDbGllbnRJZCIsImxvY2F0aW9uIiwicmVsb2FkIiwicGFnZSIsImRhdGEiLCJpc0N1cnJlbnRQYWdlIiwiaXNQYWdlTm90TG9hZGVkIiwiY29tcG9uZW50cyIsIkVycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-middleware-client.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js":
/*!*****************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js ***!
\*****************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSocketUrl\", ({\n enumerable: true,\n get: function() {\n return getSocketUrl;\n }\n}));\nconst _normalizedassetprefix = __webpack_require__(/*! ../../../shared/lib/normalized-asset-prefix */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/normalized-asset-prefix.js\");\nfunction getSocketProtocol(assetPrefix) {\n let protocol = window.location.protocol;\n try {\n // assetPrefix is a url\n protocol = new URL(assetPrefix).protocol;\n } catch (e) {}\n return protocol === 'http:' ? 'ws:' : 'wss:';\n}\nfunction getSocketUrl(assetPrefix) {\n const prefix = (0, _normalizedassetprefix.normalizedAssetPrefix)(assetPrefix);\n const protocol = getSocketProtocol(assetPrefix || '');\n if (URL.canParse(prefix)) {\n // since normalized asset prefix is ensured to be a URL format,\n // we can safely replace the protocol\n return prefix.replace(/^http/, 'ws');\n }\n const { hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? \":\" + port : '') + prefix;\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=get-socket-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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvZ2V0LXNvY2tldC11cmwuanMiLCJtYXBwaW5ncyI6Ijs7OztnREFhZ0JBOzs7ZUFBQUE7OzttREFic0I7QUFFdEMsU0FBU0Msa0JBQWtCQyxXQUFtQjtJQUM1QyxJQUFJQyxXQUFXQyxPQUFPQyxRQUFRLENBQUNGLFFBQVE7SUFFdkMsSUFBSTtRQUNGLHVCQUF1QjtRQUN2QkEsV0FBVyxJQUFJRyxJQUFJSixhQUFhQyxRQUFRO0lBQzFDLEVBQUUsVUFBTSxDQUFDO0lBRVQsT0FBT0EsYUFBYSxVQUFVLFFBQVE7QUFDeEM7QUFFTyxTQUFTSCxhQUFhRSxXQUErQjtJQUMxRCxNQUFNSyxTQUFTQyxDQUFBQSxHQUFBQSx1QkFBQUEscUJBQUFBLEVBQXNCTjtJQUNyQyxNQUFNQyxXQUFXRixrQkFBa0JDLGVBQWU7SUFFbEQsSUFBSUksSUFBSUcsUUFBUSxDQUFDRixTQUFTO1FBQ3hCLCtEQUErRDtRQUMvRCxxQ0FBcUM7UUFDckMsT0FBT0EsT0FBT0csT0FBTyxDQUFDLFNBQVM7SUFDakM7SUFFQSxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFLEdBQUdSLE9BQU9DLFFBQVE7SUFDMUMsT0FBVUYsV0FBUyxPQUFJUSxXQUFXQyxDQUFBQSxPQUFRLE1BQUdBLE9BQVMsR0FBQyxHQUFJTDtBQUM3RCIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9kZXYvaG90LXJlbG9hZGVyL2dldC1zb2NrZXQtdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vcm1hbGl6ZWRBc3NldFByZWZpeCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvbm9ybWFsaXplZC1hc3NldC1wcmVmaXgnXG5cbmZ1bmN0aW9uIGdldFNvY2tldFByb3RvY29sKGFzc2V0UHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2xcblxuICB0cnkge1xuICAgIC8vIGFzc2V0UHJlZml4IGlzIGEgdXJsXG4gICAgcHJvdG9jb2wgPSBuZXcgVVJMKGFzc2V0UHJlZml4KS5wcm90b2NvbFxuICB9IGNhdGNoIHt9XG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cDonID8gJ3dzOicgOiAnd3NzOidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvY2tldFVybChhc3NldFByZWZpeDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3QgcHJlZml4ID0gbm9ybWFsaXplZEFzc2V0UHJlZml4KGFzc2V0UHJlZml4KVxuICBjb25zdCBwcm90b2NvbCA9IGdldFNvY2tldFByb3RvY29sKGFzc2V0UHJlZml4IHx8ICcnKVxuXG4gIGlmIChVUkwuY2FuUGFyc2UocHJlZml4KSkge1xuICAgIC8vIHNpbmNlIG5vcm1hbGl6ZWQgYXNzZXQgcHJlZml4IGlzIGVuc3VyZWQgdG8gYmUgYSBVUkwgZm9ybWF0LFxuICAgIC8vIHdlIGNhbiBzYWZlbHkgcmVwbGFjZSB0aGUgcHJvdG9jb2xcbiAgICByZXR1cm4gcHJlZml4LnJlcGxhY2UoL15odHRwLywgJ3dzJylcbiAgfVxuXG4gIGNvbnN0IHsgaG9zdG5hbWUsIHBvcnQgfSA9IHdpbmRvdy5sb2NhdGlvblxuICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30ke3ByZWZpeH1gXG59XG4iXSwibmFtZXMiOlsiZ2V0U29ja2V0VXJsIiwiZ2V0U29ja2V0UHJvdG9jb2wiLCJhc3NldFByZWZpeCIsInByb3RvY29sIiwid2luZG93IiwibG9jYXRpb24iLCJVUkwiLCJwcmVmaXgiLCJub3JtYWxpemVkQXNzZXRQcmVmaXgiLCJjYW5QYXJzZSIsInJlcGxhY2UiLCJob3N0bmFtZSIsInBvcnQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js":
/*!***************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js ***!
\***************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// TODO: Remove use of `any` type. Fix no-use-before-define violations.\n/* eslint-disable @typescript-eslint/no-use-before-define */ /**\n * MIT License\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */ /// <reference types=\"webpack/module.d.ts\" />\n// This file is a modified version of the Create React App HMR dev client that\n// can be found here:\n// https://github.com/facebook/create-react-app/blob/v3.4.1/packages/react-dev-utils/webpackHotDevClient.js\n/// <reference types=\"webpack/module.d.ts\" />\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 default: function() {\n return connect;\n },\n handleStaticIndicator: function() {\n return handleStaticIndicator;\n },\n performFullReload: function() {\n return performFullReload;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/next-devtools/index.js\");\nconst _pagesdevoverlaysetup = __webpack_require__(/*! ../../../../next-devtools/userspace/pages/pages-dev-overlay-setup */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/strip-ansi/index.js\"));\nconst _websocket = __webpack_require__(/*! ./websocket */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js\");\nconst _formatwebpackmessages = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../../shared/lib/format-webpack-messages */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/format-webpack-messages.js\"));\nconst _hotreloadertypes = __webpack_require__(/*! ../../../../server/dev/hot-reloader-types */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _shared = __webpack_require__(/*! ../shared */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/shared.js\");\nconst _runtimeerrorhandler = __webpack_require__(/*! ../../runtime-error-handler */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/runtime-error-handler.js\");\nconst _reporthmrlatency = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../report-hmr-latency */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/report-hmr-latency.js\"));\nconst _turbopackhotreloadercommon = __webpack_require__(/*! ../turbopack-hot-reloader-common */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js\");\nwindow.__nextDevClientId = Math.round(Math.random() * 100 + Date.now());\nlet customHmrEventHandler;\nlet turbopackMessageListeners = [];\nfunction connect() {\n (0, _pagesdevoverlaysetup.register)();\n (0, _websocket.addMessageListener)((payload)=>{\n if (!('action' in payload)) {\n return;\n }\n try {\n processMessage(payload);\n } catch (err) {\n (0, _shared.reportInvalidHmrMessage)(payload, err);\n }\n });\n return {\n subscribeToHmrEvent (handler) {\n customHmrEventHandler = handler;\n },\n onUnrecoverableError () {\n _runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError = true;\n },\n addTurbopackMessageListener (cb) {\n turbopackMessageListeners.push(cb);\n },\n sendTurbopackMessage (msg) {\n (0, _websocket.sendMessage)(msg);\n },\n handleUpdateError (err) {\n performFullReload(err);\n }\n };\n}\n// Remember some state related to hot module replacement.\nvar isFirstCompilation = true;\nvar mostRecentCompilationHash = null;\nvar hasCompileErrors = false;\nfunction clearOutdatedErrors() {\n // Clean up outdated compile errors, if any.\n if (typeof console !== 'undefined' && typeof console.clear === 'function') {\n if (hasCompileErrors) {\n console.clear();\n }\n }\n}\n// Successful compilation.\nfunction handleSuccess() {\n clearOutdatedErrors();\n hasCompileErrors = false;\n if (false) {} else {\n const isHotUpdate = !isFirstCompilation || window.__NEXT_DATA__.page !== '/_error' && isUpdateAvailable();\n // Attempt to apply hot updates or reload.\n if (isHotUpdate) {\n tryApplyUpdatesWebpack();\n }\n }\n isFirstCompilation = false;\n}\n// Compilation with warnings (e.g. ESLint).\nfunction handleWarnings(warnings) {\n clearOutdatedErrors();\n const isHotUpdate = !isFirstCompilation;\n isFirstCompilation = false;\n hasCompileErrors = false;\n function printWarnings() {\n // Print warnings to the console.\n const formatted = (0, _formatwebpackmessages.default)({\n warnings: warnings,\n errors: []\n });\n if (typeof console !== 'undefined' && typeof console.warn === 'function') {\n var _formatted_warnings;\n for(let i = 0; i < ((_formatted_warnings = formatted.warnings) == null ? void 0 : _formatted_warnings.length); i++){\n if (i === 5) {\n console.warn('There were more warnings in other files.\\n' + 'You can find a complete log in the terminal.');\n break;\n }\n console.warn((0, _stripansi.default)(formatted.warnings[i]));\n }\n }\n }\n printWarnings();\n // Attempt to apply hot updates or reload.\n if (isHotUpdate) {\n tryApplyUpdatesWebpack();\n }\n}\n// Compilation with errors (e.g. syntax error or missing modules).\nfunction handleErrors(errors) {\n clearOutdatedErrors();\n isFirstCompilation = false;\n hasCompileErrors = true;\n // \"Massage\" webpack messages.\n var formatted = (0, _formatwebpackmessages.default)({\n errors: errors,\n warnings: []\n });\n // Only show the first error.\n _nextdevtools.dispatcher.onBuildError(formatted.errors[0]);\n // Also log them to the console.\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n for(var i = 0; i < formatted.errors.length; i++){\n console.error((0, _stripansi.default)(formatted.errors[i]));\n }\n }\n // Do not attempt to reload now.\n // We will reload on next success instead.\n if (false) {}\n}\nlet webpackStartMsSinceEpoch = null;\nconst turbopackHmr = false ? 0 : null;\nlet isrManifest = {};\n// There is a newer version of the code available.\nfunction handleAvailableHash(hash) {\n // Update last known compilation hash.\n mostRecentCompilationHash = hash;\n}\nfunction handleStaticIndicator() {\n if (true) {\n var _window_next_router_components__app;\n const routeInfo = window.next.router.components[window.next.router.pathname];\n const pageComponent = routeInfo == null ? void 0 : routeInfo.Component;\n const appComponent = (_window_next_router_components__app = window.next.router.components['/_app']) == null ? void 0 : _window_next_router_components__app.Component;\n const isDynamicPage = Boolean(pageComponent == null ? void 0 : pageComponent.getInitialProps) || Boolean(routeInfo == null ? void 0 : routeInfo.__N_SSP);\n const hasAppGetInitialProps = Boolean(appComponent == null ? void 0 : appComponent.getInitialProps) && (appComponent == null ? void 0 : appComponent.getInitialProps) !== (appComponent == null ? void 0 : appComponent.origGetInitialProps);\n const isPageStatic = window.location.pathname in isrManifest || !isDynamicPage && !hasAppGetInitialProps;\n _nextdevtools.dispatcher.onStaticIndicator(isPageStatic);\n }\n}\n/** Handles messages from the server for the Pages Router. */ function processMessage(obj) {\n if (!('action' in obj)) {\n return;\n }\n switch(obj.action){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.ISR_MANIFEST:\n {\n isrManifest = obj.data;\n handleStaticIndicator();\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILDING:\n {\n _nextdevtools.dispatcher.buildingIndicatorShow();\n if (false) {} else {\n webpackStartMsSinceEpoch = Date.now();\n console.log('[Fast Refresh] rebuilding');\n }\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SYNC:\n {\n _nextdevtools.dispatcher.buildingIndicatorHide();\n if (obj.hash) handleAvailableHash(obj.hash);\n const { errors, warnings } = obj;\n // Is undefined when it's a 'built' event\n if ('versionInfo' in obj) _nextdevtools.dispatcher.onVersionInfo(obj.versionInfo);\n if ('devIndicator' in obj) _nextdevtools.dispatcher.onDevIndicator(obj.devIndicator);\n if ('devToolsConfig' in obj) _nextdevtools.dispatcher.onDevToolsConfig(obj.devToolsConfig);\n const hasErrors = Boolean(errors && errors.length);\n if (hasErrors) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-error',\n errorCount: errors.length,\n clientId: window.__nextDevClientId\n }));\n return handleErrors(errors);\n }\n // NOTE: Turbopack does not currently send warnings\n const hasWarnings = Boolean(warnings && warnings.length);\n if (hasWarnings) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-warning',\n warningCount: warnings.length,\n clientId: window.__nextDevClientId\n }));\n return handleWarnings(warnings);\n }\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-success',\n clientId: window.__nextDevClientId\n }));\n return handleSuccess();\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES:\n {\n turbopackHmr == null ? void 0 : turbopackHmr.onServerComponentChanges();\n if (hasCompileErrors || _runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n window.location.reload();\n }\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ERROR:\n {\n const { errorJSON } = obj;\n if (errorJSON) {\n const { message, stack } = JSON.parse(errorJSON);\n const error = Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n error.stack = stack;\n handleErrors([\n error\n ]);\n }\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED:\n {\n for (const listener of turbopackMessageListeners){\n listener({\n type: _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED,\n data: obj.data\n });\n }\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE:\n {\n turbopackHmr.onTurbopackMessage(obj);\n _nextdevtools.dispatcher.onBeforeRefresh();\n for (const listener of turbopackMessageListeners){\n listener({\n type: _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE,\n data: obj.data\n });\n }\n if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n performFullReload(null);\n }\n _nextdevtools.dispatcher.onRefresh();\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.ADDED_PAGE:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.REMOVED_PAGE:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.DEV_PAGES_MANIFEST_UPDATE:\n if (customHmrEventHandler) {\n customHmrEventHandler(obj);\n }\n break;\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.DEVTOOLS_CONFIG:\n _nextdevtools.dispatcher.onDevToolsConfig(obj.data);\n break;\n default:\n obj;\n }\n}\n// Is there a newer version of this code available?\nfunction isUpdateAvailable() {\n /* globals __webpack_hash__ */ // __webpack_hash__ is the hash of the current compilation.\n // It's a global variable injected by Webpack.\n return mostRecentCompilationHash !== __webpack_require__.h();\n}\n// Webpack disallows updates in other states.\nfunction canApplyUpdates() {\n return module.hot.status() === 'idle';\n}\nfunction afterApplyUpdates(fn) {\n if (canApplyUpdates()) {\n fn();\n } else {\n function handler(status) {\n if (status === 'idle') {\n module.hot.removeStatusHandler(handler);\n fn();\n }\n }\n module.hot.addStatusHandler(handler);\n }\n}\n// Attempt to update code on the fly, fall back to a hard reload.\nfunction tryApplyUpdatesWebpack() {\n if (false) {}\n if (!isUpdateAvailable() || !canApplyUpdates()) {\n _nextdevtools.dispatcher.onBuildOk();\n return;\n }\n function handleApplyUpdates(err, updatedModules) {\n if (err || _runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError || updatedModules == null) {\n if (err) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD);\n } else if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n }\n performFullReload(err);\n return;\n }\n _nextdevtools.dispatcher.onBuildOk();\n if (isUpdateAvailable()) {\n // While we were updating, there was a new update! Do it again.\n tryApplyUpdatesWebpack();\n return;\n }\n _nextdevtools.dispatcher.onRefresh();\n (0, _reporthmrlatency.default)(_websocket.sendMessage, updatedModules, webpackStartMsSinceEpoch, Date.now());\n if (false) {}\n }\n // https://webpack.js.org/api/hot-module-replacement/#check\n module.hot.check(/* autoApply */ false).then((updatedModules)=>{\n if (updatedModules == null) {\n return null;\n }\n // We should always handle an update, even if updatedModules is empty (but\n // non-null) for any reason. That's what webpack would normally do:\n // https://github.com/webpack/webpack/blob/3aa6b6bc3a64/lib/hmr/HotModuleReplacement.runtime.js#L296-L298\n _nextdevtools.dispatcher.onBeforeRefresh();\n // https://webpack.js.org/api/hot-module-replacement/#apply\n return module.hot.apply();\n }).then((updatedModules)=>{\n handleApplyUpdates(null, updatedModules);\n }, (err)=>{\n handleApplyUpdates(err, null);\n });\n}\nfunction performFullReload(err) {\n const stackTrace = err && (err.stack && err.stack.split('\\n').slice(0, 5).join('\\n') || err.message || err + '');\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-full-reload',\n stackTrace,\n hadRuntimeError: !!_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError,\n dependencyChain: err ? err.dependencyChain : undefined\n }));\n window.location.reload();\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=hot-reloader-pages.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvcGFnZXMvaG90LXJlbG9hZGVyLXBhZ2VzLmpzIiwibWFwcGluZ3MiOiJBQUFBLHVFQUF1RTtBQUN2RSwwREFBMEQsR0FDMUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQkMsR0FFRCw2Q0FBNkM7QUFFN0MsOEVBQThFO0FBQzlFLHFCQUFxQjtBQUNyQiwyR0FBMkc7QUFFM0csNkNBQTZDOzs7Ozs7Ozs7Ozs7O0lBd0M3QyxPQWdDQztlQWhDdUJBOztJQWtLUkMscUJBQXFCO2VBQXJCQTs7SUE0UEFDLGlCQUFpQjtlQUFqQkE7Ozs7MENBcGNXO2tEQUNGO2dGQUNIO3VDQUMwQjs0RkFDZDs4Q0FDVTtvQ0FTckM7aURBQzZCO3VGQUNQO3dEQUNBO0FBaUI3QkMsT0FBT0MsaUJBQWlCLEdBQUdDLEtBQUtDLEtBQUssQ0FBQ0QsS0FBS0UsTUFBTSxLQUFLLE1BQU1DLEtBQUtDLEdBQUc7QUFFcEUsSUFBSUM7QUFDSixJQUFJQyw0QkFBc0UsRUFBRTtBQUM3RCxTQUFTWDtJQUN0QlksQ0FBQUEsR0FBQUEsc0JBQUFBLFFBQUFBO0lBRUFDLENBQUFBLEdBQUFBLFdBQUFBLGtCQUFBQSxFQUFtQixDQUFDQztRQUNsQixJQUFJLENBQUUsYUFBWUEsT0FBQUEsQ0FBTSxFQUFJO1lBQzFCO1FBQ0Y7UUFFQSxJQUFJO1lBQ0ZDLGVBQWVEO1FBQ2pCLEVBQUUsT0FBT0UsS0FBYztZQUNyQkMsQ0FBQUEsR0FBQUEsUUFBQUEsdUJBQUFBLEVBQXdCSCxTQUFTRTtRQUNuQztJQUNGO0lBRUEsT0FBTztRQUNMRSxxQkFBb0JDLE9BQVk7WUFDOUJULHdCQUF3QlM7UUFDMUI7UUFDQUM7WUFDRUMscUJBQUFBLG1CQUFtQixDQUFD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MkcsVUFBVSxDQUNQUyxLQUFLLENBQUMsYUFBYSxHQUFHLE9BQ3RCQyxJQUFJLENBQUMsQ0FBQzlHO1FBQ0wsSUFBSUEsa0JBQWtCLE1BQU07WUFDMUIsT0FBTztRQUNUO1FBRUEsMEVBQTBFO1FBQzFFLG1FQUFtRTtRQUNuRSx5R0FBeUc7UUFDekdJLGNBQUFBLFVBQVUsQ0FBQ3NGLGVBQWU7UUFDMUIsMkRBQTJEO1FBQzNELE9BQU9VLFVBQVUsQ0FBQ1csS0FBSztJQUN6QixHQUNDRCxJQUFJLENBQ0gsQ0FBQzlHO1FBQ0MyRyxtQkFBbUIsTUFBTTNHO0lBQzNCLEdBQ0EsQ0FBQzVCO1FBQ0N1SSxtQkFBbUJ2SSxLQUFLO0lBQzFCO0FBRU47QUFFTyxTQUFTZCxrQkFBa0JjLEdBQVE7SUFDeEMsTUFBTTRJLGFBQ0o1SSxPQUNDLENBQUNBLElBQUk4RyxLQUFLLElBQUk5RyxJQUFJOEcsS0FBSyxDQUFDK0IsS0FBSyxDQUFDLE1BQU1DLEtBQUssQ0FBQyxHQUFHLEdBQUdDLElBQUksQ0FBQyxTQUNwRC9JLElBQUk2RyxPQUFPLElBQ1g3RyxNQUFNLEdBQUM7SUFFWFksQ0FBQUEsR0FBQUEsV0FBQUEsV0FBQUEsRUFDRXFGLEtBQUtDLFNBQVMsQ0FBQztRQUNiQyxPQUFPO1FBQ1B5QztRQUNBdEksaUJBQWlCLENBQUMsQ0FBQ0QscUJBQUFBLG1CQUFtQixDQUFDQyxlQUFlO1FBQ3REMEksaUJBQWlCaEosTUFBTUEsSUFBSWdKLGVBQWUsR0FBR0M7SUFDL0M7SUFHRjlKLE9BQU95RixRQUFRLENBQUM4QixNQUFNO0FBQ3hCIiwic291cmNlcyI6WyIvc3JjL2NsaWVudC9kZXYvaG90LXJlbG9hZGVyL3BhZ2VzL2hvdC1yZWxvYWRlci1wYWdlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPOiBSZW1vdmUgdXNlIG9mIGBhbnlgIHR5cGUuIEZpeCBuby11c2UtYmVmb3JlLWRlZmluZSB2aW9sYXRpb25zLlxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKipcbiAqIE1JVCBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cIndlYnBhY2svbW9kdWxlLmQudHNcIiAvPlxuXG4vLyBUaGlzIGZpbGUgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBDcmVhdGUgUmVhY3QgQXBwIEhNUiBkZXYgY2xpZW50IHRoYXRcbi8vIGNhbiBiZSBmb3VuZCBoZXJlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2NyZWF0ZS1yZWFjdC1hcHAvYmxvYi92My40LjEvcGFja2FnZXMvcmVhY3QtZGV2LXV0aWxzL3dlYnBhY2tIb3REZXZDbGllbnQuanNcblxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJ3ZWJwYWNrL21vZHVsZS5kLnRzXCIgLz5cblxuaW1wb3J0IHsgZGlzcGF0Y2hlciB9IGZyb20gJ25leHQvZGlzdC9jb21waWxlZC9uZXh0LWRldnRvb2xzJ1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9wYWdlcy9wYWdlcy1kZXYtb3ZlcmxheS1zZXR1cCdcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnbmV4dC9kaXN0L2NvbXBpbGVkL3N0cmlwLWFuc2knXG5pbXBvcnQgeyBhZGRNZXNzYWdlTGlzdGVuZXIsIHNlbmRNZXNzYWdlIH0gZnJvbSAnLi93ZWJzb2NrZXQnXG5pbXBvcnQgZm9ybWF0V2VicGFja01lc3NhZ2VzIGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9saWIvZm9ybWF0LXdlYnBhY2stbWVzc2FnZXMnXG5pbXBvcnQgeyBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2ZXIvZGV2L2hvdC1yZWxvYWRlci10eXBlcydcbmltcG9ydCB0eXBlIHtcbiAgSE1SX0FDVElPTl9UWVBFUyxcbiAgVHVyYm9wYWNrTXNnVG9Ccm93c2VyLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2ZXIvZGV2L2hvdC1yZWxvYWRlci10eXBlcydcbmltcG9ydCB7XG4gIFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQUQsXG4gIFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUixcbiAgcmVwb3J0SW52YWxpZEhtck1lc3NhZ2UsXG59IGZyb20gJy4uL3NoYXJlZCdcbmltcG9ydCB7IFJ1bnRpbWVFcnJvckhhbmRsZXIgfSBmcm9tICcuLi8uLi9ydW50aW1lLWVycm9yLWhhbmRsZXInXG5pbXBvcnQgcmVwb3J0SG1yTGF0ZW5jeSBmcm9tICcuLi8uLi9yZXBvcnQtaG1yLWxhdGVuY3knXG5pbXBvcnQgeyBUdXJib3BhY2tIbXIgfSBmcm9tICcuLi90dXJib3BhY2staG90LXJlbG9hZGVyLWNvbW1vbidcblxuLy8gVGhpcyBhbHRlcm5hdGl2ZSBXZWJwYWNrRGV2U2VydmVyIGNvbWJpbmVzIHRoZSBmdW5jdGlvbmFsaXR5IG9mOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay1kZXYtc2VydmVyL2Jsb2Ivd2VicGFjay0xL2NsaWVudC9pbmRleC5qc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay9ibG9iL3dlYnBhY2stMS9ob3QvZGV2LXNlcnZlci5qc1xuXG4vLyBJdCBvbmx5IHN1cHBvcnRzIHRoZWlyIHNpbXBsZXN0IGNvbmZpZ3VyYXRpb24gKGhvdCB1cGRhdGVzIG9uIHNhbWUgc2VydmVyKS5cbi8vIEl0IG1ha2VzIHNvbWUgb3BpbmlvbmF0ZWQgY2hvaWNlcyBvbiB0b3AsIGxpa2UgYWRkaW5nIGEgc3ludGF4IGVycm9yIG92ZXJsYXlcbi8vIHRoYXQgbG9va3Mgc2ltaWxhciB0byBvdXIgY29uc29sZSBvdXRwdXQuIFRoZSBlcnJvciBvdmVybGF5IGlzIGluc3BpcmVkIGJ5OlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dsZW5qYW1pbi93ZWJwYWNrLWhvdC1taWRkbGV3YXJlXG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19uZXh0RGV2Q2xpZW50SWQ6IG51bWJlclxuICB9XG59XG5cbndpbmRvdy5fX25leHREZXZDbGllbnRJZCA9IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMCArIERhdGUubm93KCkpXG5cbmxldCBjdXN0b21IbXJFdmVudEhhbmRsZXI6IGFueVxubGV0IHR1cmJvcGFja01lc3NhZ2VMaXN0ZW5lcnM6ICgobXNnOiBUdXJib3BhY2tNc2dUb0Jyb3dzZXIpID0+IHZvaWQpW10gPSBbXVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29ubmVjdCgpIHtcbiAgcmVnaXN0ZXIoKVxuXG4gIGFkZE1lc3NhZ2VMaXN0ZW5lcigocGF5bG9hZCkgPT4ge1xuICAgIGlmICghKCdhY3Rpb24nIGluIHBheWxvYWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvY2Vzc01lc3NhZ2UocGF5bG9hZClcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIHJlcG9ydEludmFsaWRIbXJNZXNzYWdlKHBheWxvYWQsIGVycilcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBzdWJzY3JpYmVUb0htckV2ZW50KGhhbmRsZXI6IGFueSkge1xuICAgICAgY3VzdG9tSG1yRXZlbnRIYW5kbGVyID0gaGFuZGxlclxuICAgIH0sXG4gICAgb25VbnJlY292ZXJhYmxlRXJyb3IoKSB7XG4gICAgICBSdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvciA9IHRydWVcbiAgICB9LFxuICAgIGFkZFR1cmJvcGFja01lc3NhZ2VMaXN0ZW5lcihjYjogKG1zZzogVHVyYm9wYWNrTXNnVG9Ccm93c2VyKSA9PiB2b2lkKSB7XG4gICAgICB0dXJib3BhY2tNZXNzYWdlTGlzdGVuZXJzLnB1c2goY2IpXG4gICAgfSxcbiAgICBzZW5kVHVyYm9wYWNrTWVzc2FnZShtc2c6IHN0cmluZykge1xuICAgICAgc2VuZE1lc3NhZ2UobXNnKVxuICAgIH0sXG4gICAgaGFuZGxlVXBkYXRlRXJyb3IoZXJyOiB1bmtub3duKSB7XG4gICAgICBwZXJmb3JtRnVsbFJlbG9hZChlcnIpXG4gICAgfSxcbiAgfVxufVxuXG4vLyBSZW1lbWJlciBzb21lIHN0YXRlIHJlbGF0ZWQgdG8gaG90IG1vZHVsZSByZXBsYWNlbWVudC5cbnZhciBpc0ZpcnN0Q29tcGlsYXRpb24gPSB0cnVlXG52YXIgbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbnZhciBoYXNDb21waWxlRXJyb3JzID0gZmFsc2VcblxuZnVuY3Rpb24gY2xlYXJPdXRkYXRlZEVycm9ycygpIHtcbiAgLy8gQ2xlYW4gdXAgb3V0ZGF0ZWQgY29tcGlsZSBlcnJvcnMsIGlmIGFueS5cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5jbGVhciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChoYXNDb21waWxlRXJyb3JzKSB7XG4gICAgICBjb25zb2xlLmNsZWFyKClcbiAgICB9XG4gIH1cbn1cblxuLy8gU3VjY2Vzc2Z1bCBjb21waWxhdGlvbi5cbmZ1bmN0aW9uIGhhbmRsZVN1Y2Nlc3MoKSB7XG4gIGNsZWFyT3V0ZGF0ZWRFcnJvcnMoKVxuICBoYXNDb21waWxlRXJyb3JzID0gZmFsc2VcblxuICBpZiAocHJvY2Vzcy5lbnYuVFVSQk9QQUNLKSB7XG4gICAgY29uc3QgaG1yVXBkYXRlID0gdHVyYm9wYWNrSG1yIS5vbkJ1aWx0KClcbiAgICBpZiAoaG1yVXBkYXRlICE9IG51bGwpIHtcbiAgICAgIHJlcG9ydEhtckxhdGVuY3koXG4gICAgICAgIHNlbmRNZXNzYWdlLFxuICAgICAgICBbLi4uaG1yVXBkYXRlLnVwZGF0ZWRNb2R1bGVzXSxcbiAgICAgICAgaG1yVXBkYXRlLnN0YXJ0TXNTaW5jZUVwb2NoLFxuICAgICAgICBobXJVcGRhdGUuZW5kTXNTaW5jZUVwb2NoLFxuICAgICAgICBobXJVcGRhdGUuaGFzVXBkYXRlc1xuICAgICAgKVxuICAgIH1cbiAgICBkaXNwYXRjaGVyLm9uQnVpbGRPaygpXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaXNIb3RVcGRhdGUgPVxuICAgICAgIWlzRmlyc3RDb21waWxhdGlvbiB8fFxuICAgICAgKHdpbmRvdy5fX05FWFRfREFUQV9fLnBhZ2UgIT09ICcvX2Vycm9yJyAmJiBpc1VwZGF0ZUF2YWlsYWJsZSgpKVxuXG4gICAgLy8gQXR0ZW1wdCB0byBhcHBseSBob3QgdXBkYXRlcyBvciByZWxvYWQuXG4gICAgaWYgKGlzSG90VXBkYXRlKSB7XG4gICAgICB0cnlBcHBseVVwZGF0ZXNXZWJwYWNrKClcbiAgICB9XG4gIH1cblxuICBpc0ZpcnN0Q29tcGlsYXRpb24gPSBmYWxzZVxufVxuXG4vLyBDb21waWxhdGlvbiB3aXRoIHdhcm5pbmdzIChlLmcuIEVTTGludCkuXG5mdW5jdGlvbiBoYW5kbGVXYXJuaW5ncyh3YXJuaW5nczogYW55KSB7XG4gIGNsZWFyT3V0ZGF0ZWRFcnJvcnMoKVxuXG4gIGNvbnN0IGlzSG90VXBkYXRlID0gIWlzRmlyc3RDb21waWxhdGlvblxuICBpc0ZpcnN0Q29tcGlsYXRpb24gPSBmYWxzZVxuICBoYXNDb21waWxlRXJyb3JzID0gZmFsc2VcblxuICBmdW5jdGlvbiBwcmludFdhcm5pbmdzKCkge1xuICAgIC8vIFByaW50IHdhcm5pbmdzIHRvIHRoZSBjb25zb2xlLlxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFdlYnBhY2tNZXNzYWdlcyh7XG4gICAgICB3YXJuaW5nczogd2FybmluZ3MsXG4gICAgICBlcnJvcnM6IFtdLFxuICAgIH0pXG5cbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLndhcm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkLndhcm5pbmdzPy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA9PT0gNSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdUaGVyZSB3ZXJlIG1vcmUgd2FybmluZ3MgaW4gb3RoZXIgZmlsZXMuXFxuJyArXG4gICAgICAgICAgICAgICdZb3UgY2FuIGZpbmQgYSBjb21wbGV0ZSBsb2cgaW4gdGhlIHRlcm1pbmFsLidcbiAgICAgICAgICApXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLndhcm4oc3RyaXBBbnNpKGZvcm1hdHRlZC53YXJuaW5nc1tpXSkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpbnRXYXJuaW5ncygpXG5cbiAgLy8gQXR0ZW1wdCB0byBhcHBseSBob3QgdXBkYXRlcyBvciByZWxvYWQuXG4gIGlmIChpc0hvdFVwZGF0ZSkge1xuICAgIHRyeUFwcGx5VXBkYXRlc1dlYnBhY2soKVxuICB9XG59XG5cbi8vIENvbXBpbGF0aW9uIHdpdGggZXJyb3JzIChlLmcuIHN5bnRheCBlcnJvciBvciBtaXNzaW5nIG1vZHVsZXMpLlxuZnVuY3Rpb24gaGFuZGxlRXJyb3JzKGVycm9yczogYW55KSB7XG4gIGNsZWFyT3V0ZGF0ZWRFcnJvcnMoKVxuXG4gIGlzRmlyc3RDb21waWxhdGlvbiA9IGZhbHNlXG4gIGhhc0NvbXBpbGVFcnJvcnMgPSB0cnVlXG5cbiAgLy8gXCJNYXNzYWdlXCIgd2VicGFjayBtZXNzYWdlcy5cbiAgdmFyIGZvcm1hdHRlZCA9IGZvcm1hdFdlYnBhY2tNZXNzYWdlcyh7XG4gICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgd2FybmluZ3M6IFtdLFxuICB9KVxuXG4gIC8vIE9ubHkgc2hvdyB0aGUgZmlyc3QgZXJyb3IuXG5cbiAgZGlzcGF0Y2hlci5vbkJ1aWxkRXJyb3IoZm9ybWF0dGVkLmVycm9yc1swXSlcblxuICAvLyBBbHNvIGxvZyB0aGVtIHRvIHRoZSBjb25zb2xlLlxuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JtYXR0ZWQuZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHN0cmlwQW5zaShmb3JtYXR0ZWQuZXJyb3JzW2ldKSlcbiAgICB9XG4gIH1cblxuICAvLyBEbyBub3QgYXR0ZW1wdCB0byByZWxvYWQgbm93LlxuICAvLyBXZSB3aWxsIHJlbG9hZCBvbiBuZXh0IHN1Y2Nlc3MgaW5zdGVhZC5cbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICBpZiAoc2VsZi5fX05FWFRfSE1SX0NCKSB7XG4gICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IoZm9ybWF0dGVkLmVycm9yc1swXSlcbiAgICAgIHNlbGYuX19ORVhUX0hNUl9DQiA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxubGV0IHdlYnBhY2tTdGFydE1zU2luY2VFcG9jaDogbnVtYmVyIHwgbnVsbCA9IG51bGxcbmNvbnN0IHR1cmJvcGFja0htcjogVHVyYm9wYWNrSG1yIHwgbnVsbCA9IHByb2Nlc3MuZW52LlRVUkJPUEFDS1xuICA/IG5ldyBUdXJib3BhY2tIbXIoKVxuICA6IG51bGxcbmxldCBpc3JNYW5pZmVzdDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fVxuXG4vLyBUaGVyZSBpcyBhIG5ld2VyIHZlcnNpb24gb2YgdGhlIGNvZGUgYXZhaWxhYmxlLlxuZnVuY3Rpb24gaGFuZGxlQXZhaWxhYmxlSGFzaChoYXNoOiBzdHJpbmcpIHtcbiAgLy8gVXBkYXRlIGxhc3Qga25vd24gY29tcGlsYXRpb24gaGFzaC5cbiAgbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCA9IGhhc2hcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVN0YXRpY0luZGljYXRvcigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9ERVZfSU5ESUNBVE9SKSB7XG4gICAgY29uc3Qgcm91dGVJbmZvID0gd2luZG93Lm5leHQucm91dGVyLmNvbXBvbmVudHNbd2luZG93Lm5leHQucm91dGVyLnBhdGhuYW1lXVxuICAgIGNvbnN0IHBhZ2VDb21wb25lbnQgPSByb3V0ZUluZm8/LkNvbXBvbmVudFxuICAgIGNvbnN0IGFwcENvbXBvbmVudCA9IHdpbmRvdy5uZXh0LnJvdXRlci5jb21wb25lbnRzWycvX2FwcCddPy5Db21wb25lbnRcbiAgICBjb25zdCBpc0R5bmFtaWNQYWdlID1cbiAgICAgIEJvb2xlYW4ocGFnZUNvbXBvbmVudD8uZ2V0SW5pdGlhbFByb3BzKSB8fCBCb29sZWFuKHJvdXRlSW5mbz8uX19OX1NTUClcbiAgICBjb25zdCBoYXNBcHBHZXRJbml0aWFsUHJvcHMgPVxuICAgICAgQm9vbGVhbihhcHBDb21wb25lbnQ/LmdldEluaXRpYWxQcm9wcykgJiZcbiAgICAgIGFwcENvbXBvbmVudD8uZ2V0SW5pdGlhbFByb3BzICE9PSBhcHBDb21wb25lbnQ/Lm9yaWdHZXRJbml0aWFsUHJvcHNcblxuICAgIGNvbnN0IGlzUGFnZVN0YXRpYyA9XG4gICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgaW4gaXNyTWFuaWZlc3QgfHxcbiAgICAgICghaXNEeW5hbWljUGFnZSAmJiAhaGFzQXBwR2V0SW5pdGlhbFByb3BzKVxuXG4gICAgZGlzcGF0Y2hlci5vblN0YXRpY0luZGljYXRvcihpc1BhZ2VTdGF0aWMpXG4gIH1cbn1cblxuLyoqIEhhbmRsZXMgbWVzc2FnZXMgZnJvbSB0aGUgc2VydmVyIGZvciB0aGUgUGFnZXMgUm91dGVyLiAqL1xuZnVuY3Rpb24gcHJvY2Vzc01lc3NhZ2Uob2JqOiBITVJfQUNUSU9OX1RZUEVTKSB7XG4gIGlmICghKCdhY3Rpb24nIGluIG9iaikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHN3aXRjaCAob2JqLmFjdGlvbikge1xuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLklTUl9NQU5JRkVTVDoge1xuICAgICAgaXNyTWFuaWZlc3QgPSBvYmouZGF0YVxuICAgICAgaGFuZGxlU3RhdGljSW5kaWNhdG9yKClcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkJVSUxESU5HOiB7XG4gICAgICBkaXNwYXRjaGVyLmJ1aWxkaW5nSW5kaWNhdG9yU2hvdygpXG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5UVVJCT1BBQ0spIHtcbiAgICAgICAgdHVyYm9wYWNrSG1yIS5vbkJ1aWxkaW5nKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdlYnBhY2tTdGFydE1zU2luY2VFcG9jaCA9IERhdGUubm93KClcbiAgICAgICAgY29uc29sZS5sb2coJ1tGYXN0IFJlZnJlc2hdIHJlYnVpbGRpbmcnKVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuQlVJTFQ6XG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuU1lOQzoge1xuICAgICAgZGlzcGF0Y2hlci5idWlsZGluZ0luZGljYXRvckhpZGUoKVxuXG4gICAgICBpZiAob2JqLmhhc2gpIGhhbmRsZUF2YWlsYWJsZUhhc2gob2JqLmhhc2gpXG5cbiAgICAgIGNvbnN0IHsgZXJyb3JzLCB3YXJuaW5ncyB9ID0gb2JqXG5cbiAgICAgIC8vIElzIHVuZGVmaW5lZCB3aGVuIGl0J3MgYSAnYnVpbHQnIGV2ZW50XG4gICAgICBpZiAoJ3ZlcnNpb25JbmZvJyBpbiBvYmopIGRpc3BhdGNoZXIub25WZXJzaW9uSW5mbyhvYmoudmVyc2lvbkluZm8pXG4gICAgICBpZiAoJ2RldkluZGljYXRvcicgaW4gb2JqKSBkaXNwYXRjaGVyLm9uRGV2SW5kaWNhdG9yKG9iai5kZXZJbmRpY2F0b3IpXG4gICAgICBpZiAoJ2RldlRvb2xzQ29uZmlnJyBpbiBvYmopXG4gICAgICAgIGRpc3BhdGNoZXIub25EZXZUb29sc0NvbmZpZyhvYmouZGV2VG9vbHNDb25maWcpXG5cbiAgICAgIGNvbnN0IGhhc0Vycm9ycyA9IEJvb2xlYW4oZXJyb3JzICYmIGVycm9ycy5sZW5ndGgpXG4gICAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICAgIHNlbmRNZXNzYWdlKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiAnY2xpZW50LWVycm9yJyxcbiAgICAgICAgICAgIGVycm9yQ291bnQ6IGVycm9ycy5sZW5ndGgsXG4gICAgICAgICAgICBjbGllbnRJZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9ycyhlcnJvcnMpXG4gICAgICB9XG5cbiAgICAgIC8vIE5PVEU6IFR1cmJvcGFjayBkb2VzIG5vdCBjdXJyZW50bHkgc2VuZCB3YXJuaW5nc1xuICAgICAgY29uc3QgaGFzV2FybmluZ3MgPSBCb29sZWFuKHdhcm5pbmdzICYmIHdhcm5pbmdzLmxlbmd0aClcbiAgICAgIGlmIChoYXNXYXJuaW5ncykge1xuICAgICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ2NsaWVudC13YXJuaW5nJyxcbiAgICAgICAgICAgIHdhcm5pbmdDb3VudDogd2FybmluZ3MubGVuZ3RoLFxuICAgICAgICAgICAgY2xpZW50SWQ6IHdpbmRvdy5fX25leHREZXZDbGllbnRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBoYW5kbGVXYXJuaW5ncyh3YXJuaW5ncylcbiAgICAgIH1cblxuICAgICAgc2VuZE1lc3NhZ2UoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogJ2NsaWVudC1zdWNjZXNzJyxcbiAgICAgICAgICBjbGllbnRJZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIGhhbmRsZVN1Y2Nlc3MoKVxuICAgIH1cbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TRVJWRVJfQ09NUE9ORU5UX0NIQU5HRVM6IHtcbiAgICAgIHR1cmJvcGFja0htcj8ub25TZXJ2ZXJDb21wb25lbnRDaGFuZ2VzKClcbiAgICAgIGlmIChoYXNDb21waWxlRXJyb3JzIHx8IFJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlNFUlZFUl9FUlJPUjoge1xuICAgICAgY29uc3QgeyBlcnJvckpTT04gfSA9IG9ialxuICAgICAgaWYgKGVycm9ySlNPTikge1xuICAgICAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBKU09OLnBhcnNlKGVycm9ySlNPTilcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSlcbiAgICAgICAgZXJyb3Iuc3RhY2sgPSBzdGFja1xuICAgICAgICBoYW5kbGVFcnJvcnMoW2Vycm9yXSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5UVVJCT1BBQ0tfQ09OTkVDVEVEOiB7XG4gICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHR1cmJvcGFja01lc3NhZ2VMaXN0ZW5lcnMpIHtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIHR5cGU6IEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5UVVJCT1BBQ0tfQ09OTkVDVEVELFxuICAgICAgICAgIGRhdGE6IG9iai5kYXRhLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuVFVSQk9QQUNLX01FU1NBR0U6IHtcbiAgICAgIHR1cmJvcGFja0htciEub25UdXJib3BhY2tNZXNzYWdlKG9iailcbiAgICAgIGRpc3BhdGNoZXIub25CZWZvcmVSZWZyZXNoKClcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdHVyYm9wYWNrTWVzc2FnZUxpc3RlbmVycykge1xuICAgICAgICBsaXN0ZW5lcih7XG4gICAgICAgICAgdHlwZTogSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlRVUkJPUEFDS19NRVNTQUdFLFxuICAgICAgICAgIGRhdGE6IG9iai5kYXRhLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKFJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IpXG4gICAgICAgIHBlcmZvcm1GdWxsUmVsb2FkKG51bGwpXG4gICAgICB9XG4gICAgICBkaXNwYXRjaGVyLm9uUmVmcmVzaCgpXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5BRERFRF9QQUdFOlxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlJFTU9WRURfUEFHRTpcbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5SRUxPQURfUEFHRTpcbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5ERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFOlxuICAgICAgaWYgKGN1c3RvbUhtckV2ZW50SGFuZGxlcikge1xuICAgICAgICBjdXN0b21IbXJFdmVudEhhbmRsZXIob2JqKVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5ERVZUT09MU19DT05GSUc6XG4gICAgICBkaXNwYXRjaGVyLm9uRGV2VG9vbHNDb25maWcob2JqLmRhdGEpXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICBvYmogc2F0aXNmaWVzIG5ldmVyXG4gIH1cbn1cblxuLy8gSXMgdGhlcmUgYSBuZXdlciB2ZXJzaW9uIG9mIHRoaXMgY29kZSBhdmFpbGFibGU/XG5mdW5jdGlvbiBpc1VwZGF0ZUF2YWlsYWJsZSgpIHtcbiAgLyogZ2xvYmFscyBfX3dlYnBhY2tfaGFzaF9fICovXG4gIC8vIF9fd2VicGFja19oYXNoX18gaXMgdGhlIGhhc2ggb2YgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24uXG4gIC8vIEl0J3MgYSBnbG9iYWwgdmFyaWFibGUgaW5qZWN0ZWQgYnkgV2VicGFjay5cbiAgcmV0dXJuIG1vc3RSZWNlbnRDb21waWxhdGlvbkhhc2ggIT09IF9fd2VicGFja19oYXNoX19cbn1cblxuLy8gV2VicGFjayBkaXNhbGxvd3MgdXBkYXRlcyBpbiBvdGhlciBzdGF0ZXMuXG5mdW5jdGlvbiBjYW5BcHBseVVwZGF0ZXMoKSB7XG4gIHJldHVybiBtb2R1bGUuaG90LnN0YXR1cygpID09PSAnaWRsZSdcbn1cbmZ1bmN0aW9uIGFmdGVyQXBwbHlVcGRhdGVzKGZuOiAoKSA9PiB2b2lkKSB7XG4gIGlmIChjYW5BcHBseVVwZGF0ZXMoKSkge1xuICAgIGZuKClcbiAgfSBlbHNlIHtcbiAgICBmdW5jdGlvbiBoYW5kbGVyKHN0YXR1czogc3RyaW5nKSB7XG4gICAgICBpZiAoc3RhdHVzID09PSAnaWRsZScpIHtcbiAgICAgICAgbW9kdWxlLmhvdC5yZW1vdmVTdGF0dXNIYW5kbGVyKGhhbmRsZXIpXG4gICAgICAgIGZuKClcbiAgICAgIH1cbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hZGRTdGF0dXNIYW5kbGVyKGhhbmRsZXIpXG4gIH1cbn1cblxuLy8gQXR0ZW1wdCB0byB1cGRhdGUgY29kZSBvbiB0aGUgZmx5LCBmYWxsIGJhY2sgdG8gYSBoYXJkIHJlbG9hZC5cbmZ1bmN0aW9uIHRyeUFwcGx5VXBkYXRlc1dlYnBhY2soKSB7XG4gIGlmICghbW9kdWxlLmhvdCkge1xuICAgIC8vIEhvdE1vZHVsZVJlcGxhY2VtZW50UGx1Z2luIGlzIG5vdCBpbiBXZWJwYWNrIGNvbmZpZ3VyYXRpb24uXG4gICAgY29uc29sZS5lcnJvcignSG90TW9kdWxlUmVwbGFjZW1lbnRQbHVnaW4gaXMgbm90IGluIFdlYnBhY2sgY29uZmlndXJhdGlvbi4nKVxuICAgIC8vIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICghaXNVcGRhdGVBdmFpbGFibGUoKSB8fCAhY2FuQXBwbHlVcGRhdGVzKCkpIHtcbiAgICBkaXNwYXRjaGVyLm9uQnVpbGRPaygpXG4gICAgcmV0dXJuXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVBcHBseVVwZGF0ZXMoXG4gICAgZXJyOiBhbnksXG4gICAgdXBkYXRlZE1vZHVsZXM6IChzdHJpbmcgfCBudW1iZXIpW10gfCBudWxsXG4gICkge1xuICAgIGlmIChlcnIgfHwgUnVudGltZUVycm9ySGFuZGxlci5oYWRSdW50aW1lRXJyb3IgfHwgdXBkYXRlZE1vZHVsZXMgPT0gbnVsbCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oUkVBQ1RfUkVGUkVTSF9GVUxMX1JFTE9BRClcbiAgICAgIH0gZWxzZSBpZiAoUnVudGltZUVycm9ySGFuZGxlci5oYWRSdW50aW1lRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUilcbiAgICAgIH1cbiAgICAgIHBlcmZvcm1GdWxsUmVsb2FkKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGRpc3BhdGNoZXIub25CdWlsZE9rKClcblxuICAgIGlmIChpc1VwZGF0ZUF2YWlsYWJsZSgpKSB7XG4gICAgICAvLyBXaGlsZSB3ZSB3ZXJlIHVwZGF0aW5nLCB0aGVyZSB3YXMgYSBuZXcgdXBkYXRlISBEbyBpdCBhZ2Fpbi5cbiAgICAgIHRyeUFwcGx5VXBkYXRlc1dlYnBhY2soKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZGlzcGF0Y2hlci5vblJlZnJlc2goKVxuICAgIHJlcG9ydEhtckxhdGVuY3koXG4gICAgICBzZW5kTWVzc2FnZSxcbiAgICAgIHVwZGF0ZWRNb2R1bGVzLFxuICAgICAgd2VicGFja1N0YXJ0TXNTaW5jZUVwb2NoISxcbiAgICAgIERhdGUubm93KClcbiAgICApXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1RFU1RfTU9ERSkge1xuICAgICAgYWZ0ZXJBcHBseVVwZGF0ZXMoKCkgPT4ge1xuICAgICAgICBpZiAoc2VsZi5fX05FWFRfSE1SX0NCKSB7XG4gICAgICAgICAgc2VsZi5fX05FWFRfSE1SX0NCKClcbiAgICAgICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly93ZWJwYWNrLmpzLm9yZy9hcGkvaG90LW1vZHVsZS1yZXBsYWNlbWVudC8jY2hlY2tcbiAgbW9kdWxlLmhvdFxuICAgIC5jaGVjaygvKiBhdXRvQXBwbHkgKi8gZmFsc2UpXG4gICAgLnRoZW4oKHVwZGF0ZWRNb2R1bGVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKHVwZGF0ZWRNb2R1bGVzID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBoYW5kbGUgYW4gdXBkYXRlLCBldmVuIGlmIHVwZGF0ZWRNb2R1bGVzIGlzIGVtcHR5IChidXRcbiAgICAgIC8vIG5vbi1udWxsKSBmb3IgYW55IHJlYXNvbi4gVGhhdCdzIHdoYXQgd2VicGFjayB3b3VsZCBub3JtYWxseSBkbzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2svYmxvYi8zYWE2YjZiYzNhNjQvbGliL2htci9Ib3RNb2R1bGVSZXBsYWNlbWVudC5ydW50aW1lLmpzI0wyOTYtTDI5OFxuICAgICAgZGlzcGF0Y2hlci5vbkJlZm9yZVJlZnJlc2goKVxuICAgICAgLy8gaHR0cHM6Ly93ZWJwYWNrLmpzLm9yZy9hcGkvaG90LW1vZHVsZS1yZXBsYWNlbWVudC8jYXBwbHlcbiAgICAgIHJldHVybiBtb2R1bGUuaG90LmFwcGx5KClcbiAgICB9KVxuICAgIC50aGVuKFxuICAgICAgKHVwZGF0ZWRNb2R1bGVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgbnVsbCkgPT4ge1xuICAgICAgICBoYW5kbGVBcHBseVVwZGF0ZXMobnVsbCwgdXBkYXRlZE1vZHVsZXMpXG4gICAgICB9LFxuICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgIGhhbmRsZUFwcGx5VXBkYXRlcyhlcnIsIG51bGwpXG4gICAgICB9XG4gICAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybUZ1bGxSZWxvYWQoZXJyOiBhbnkpIHtcbiAgY29uc3Qgc3RhY2tUcmFjZSA9XG4gICAgZXJyICYmXG4gICAgKChlcnIuc3RhY2sgJiYgZXJyLnN0YWNrLnNwbGl0KCdcXG4nKS5zbGljZSgwLCA1KS5qb2luKCdcXG4nKSkgfHxcbiAgICAgIGVyci5tZXNzYWdlIHx8XG4gICAgICBlcnIgKyAnJylcblxuICBzZW5kTWVzc2FnZShcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBldmVudDogJ2NsaWVudC1mdWxsLXJlbG9hZCcsXG4gICAgICBzdGFja1RyYWNlLFxuICAgICAgaGFkUnVudGltZUVycm9yOiAhIVJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yLFxuICAgICAgZGVwZW5kZW5jeUNoYWluOiBlcnIgPyBlcnIuZGVwZW5kZW5jeUNoYWluIDogdW5kZWZpbmVkLFxuICAgIH0pXG4gIClcblxuICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbn1cbiJdLCJuYW1lcyI6WyJjb25uZWN0IiwiaGFuZGxlU3RhdGljSW5kaWNhdG9yIiwicGVyZm9ybUZ1bGxSZWxvYWQiLCJ3aW5kb3ciLCJfX25leHREZXZDbGllbnRJZCIsIk1hdGgiLCJyb3VuZCIsInJhbmRvbSIsIkRhdGUiLCJub3ciLCJjdXN0b21IbXJFdmVudEhhbmRsZXIiLCJ0dXJib3BhY2tNZXNzYWdlTGlzdGVuZXJzIiwicmVnaXN0ZXIiLCJhZGRNZXNzYWdlTGlzdGVuZXIiLCJwYXlsb2FkIiwicHJvY2Vzc01lc3NhZ2UiLCJlcnIiLCJyZXBvcnRJbnZhbGlkSG1yTWVzc2FnZSIsInN1YnNjcmliZVRvSG1yRXZlbnQiLCJoYW5kbGVyIiwib25VbnJlY292ZXJhYmxlRXJyb3IiLCJSdW50aW1lRXJyb3JIYW5kbGVyIiwiaGFkUnVudGltZUVycm9yIiwiYWRkVHVyYm9wYWNrTWVzc2FnZUxpc3RlbmVyIiwiY2IiLCJwdXNoIiwic2VuZFR1cmJvcGFja01lc3NhZ2UiLCJtc2ciLCJzZW5kTWVzc2FnZSIsImhhbmRsZVVwZGF0ZUVycm9yIiwiaXNGaXJzdENvbXBpbGF0aW9uIiwibW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCIsImhhc0NvbXBpbGVFcnJvcnMiLCJjbGVhck91dGRhdGVkRXJyb3JzIiwiY29uc29sZSIsImNsZWFyIiwiaGFuZGxlU3VjY2VzcyIsInByb2Nlc3MiLCJlbnYiLCJUVVJCT1BBQ0siLCJobXJVcGRhdGUiLCJ0dXJib3BhY2tIbXIiLCJvbkJ1aWx0IiwicmVwb3J0SG1yTGF0ZW5jeSIsInVwZGF0ZWRNb2R1bGVzIiwic3RhcnRNc1NpbmNlRXBvY2giLCJlbmRNc1NpbmNlRXBvY2giLCJoYXNVcGRhdGVzIiwiZGlzcGF0Y2hlciIsIm9uQnVpbGRPayIsImlzSG90VXBkYXRlIiwiX19ORVhUX0RBVEFfXyIsInBhZ2UiLCJpc1VwZGF0ZUF2YWlsYWJsZSIsInRyeUFwcGx5VXBkYXRlc1dlYnBhY2siLCJoYW5kbGVXYXJuaW5ncyIsIndhcm5pbmdzIiwicHJpbnRXYXJuaW5ncyIsImZvcm1hdHRlZCIsImZvcm1hdFdlYnBhY2tNZXNzYWdlcyIsImVycm9ycyIsIndhcm4iLCJpIiwibGVuZ3RoIiwic3RyaXBBbnNpIiwiaGFuZGxlRXJyb3JzIiwib25CdWlsZEVycm9yIiwiZXJyb3IiLCJfX05FWFRfVEVTVF9NT0RFIiwic2VsZiIsIl9fTkVYVF9ITVJfQ0IiLCJ3ZWJwYWNrU3RhcnRNc1NpbmNlRXBvY2giLCJUdXJib3BhY2tIbXIiLCJpc3JNYW5pZmVzdCIsImhhbmRsZUF2YWlsYWJsZUhhc2giLCJoYXNoIiwiX19ORVhUX0RFVl9JTkRJQ0FUT1IiLCJyb3V0ZUluZm8iLCJuZXh0Iiwicm91dGVyIiwiY29tcG9uZW50cyIsInBhdGhuYW1lIiwicGFnZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImFwcENvbXBvbmVudCIsImlzRHluYW1pY1BhZ2UiLCJCb29sZWFuIiwiZ2V0SW5pdGlhbFByb3BzIiwiX19OX1NTUCIsImhhc0FwcEdldEluaXRpYWxQcm9wcyIsIm9yaWdHZXRJbml0aWFsUHJvcHMiLCJpc1BhZ2VTdGF0aWMiLCJsb2NhdGlvbiIsIm9uU3RhdGljSW5kaWNhdG9yIiwib2JqIiwiYWN0aW9uIiwiSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSIiwiSVNSX01BTklGRVNUIiwiZGF0YSIsIkJVSUxESU5HIiwiYnVpbGRpbmdJbmRpY2F0b3JTaG93Iiwib25CdWlsZGluZyIsImxvZyIsIkJVSUxUIiwiU1lOQyIsImJ1aWxkaW5nSW5kaWNhdG9ySGlkZSIsIm9uVmVyc2lvbkluZm8iLCJ2ZXJzaW9uSW5mbyIsIm9uRGV2SW5kaWNhdG9yIiwiZGV2SW5kaWNhdG9yIiwib25EZXZUb29sc0NvbmZpZyIsImRldlRvb2xzQ29uZmlnIiwiaGFzRXJyb3JzIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiZXJyb3JDb3VudCIsImNsaWVudElkIiwiaGFzV2FybmluZ3MiLCJ3YXJuaW5nQ291bnQiLCJTRVJWRVJfQ09NUE9ORU5UX0NIQU5HRVMiLCJvblNlcnZlckNvbXBvbmVudENoYW5nZXMiLCJyZWxvYWQiLCJTRVJWRVJfRVJST1IiLCJlcnJvckpTT04iLCJtZXNzYWdlIiwic3RhY2siLCJwYXJzZSIsIkVycm9yIiwiVFVSQk9QQUNLX0NPTk5FQ1RFRCIsImxpc3RlbmVyIiwidHlwZSIsIlRVUkJPUEFDS19NRVNTQUdFIiwib25UdXJib3BhY2tNZXNzYWdlIiwib25CZWZvcmVSZWZyZXNoIiwiUkVBQ1RfUkVGUkVTSF9GVUxMX1JFTE9BRF9GUk9NX0VSUk9SIiwib25SZWZyZXNoIiwiQURERURfUEFHRSIsIlJFTU9WRURfUEFHRSIsIlJFTE9BRF9QQUdFIiwiREVWX1BBR0VTX01BTklGRVNUX1VQREFURSIsIkRFVlRPT0xTX0NPTkZJRyIsIl9fd2VicGFja19oYXNoX18iLCJjYW5BcHBseVVwZGF0ZXMiLCJtb2R1bGUiLCJob3QiLCJzdGF0dXMiLCJhZnRlckFwcGx5VXBkYXRlcyIsImZuIiwicmVtb3ZlU3RhdHVzSGFuZGxlciIsImFkZFN0YXR1c0hhbmRsZXIiLCJoYW5kbGVBcHBseVVwZGF0ZXMiLCJSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEIiwiY2hlY2siLCJ0aGVuIiwiYXBwbHkiLCJzdGFja1RyYWNlIiwic3BsaXQiLCJzbGljZSIsImpvaW4iLCJkZXBlbmRlbmN5Q2hhaW4iLCJ1bmRlZmluZWQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js":
/*!******************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/websocket.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 addMessageListener: function() {\n return addMessageListener;\n },\n connectHMR: function() {\n return connectHMR;\n },\n sendMessage: function() {\n return sendMessage;\n }\n});\nconst _forwardlogs = __webpack_require__(/*! ../../../../next-devtools/userspace/app/forward-logs */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\");\nconst _hotreloadertypes = __webpack_require__(/*! ../../../../server/dev/hot-reloader-types */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _getsocketurl = __webpack_require__(/*! ../get-socket-url */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js\");\nlet source;\nconst eventCallbacks = [];\nfunction addMessageListener(callback) {\n eventCallbacks.push(callback);\n}\nfunction sendMessage(data) {\n if (!source || source.readyState !== source.OPEN) return;\n return source.send(data);\n}\nlet reconnections = 0;\nlet reloading = false;\nlet serverSessionId = null;\nfunction connectHMR(options) {\n function init() {\n if (source) source.close();\n function handleOnline() {\n if (_forwardlogs.isTerminalLoggingEnabled) {\n _forwardlogs.logQueue.onSocketReady(source);\n }\n reconnections = 0;\n window.console.log('[HMR] connected');\n }\n function handleMessage(event) {\n // While the page is reloading, don't respond to any more messages.\n // On reconnect, the server may send an empty list of changes if it was restarted.\n if (reloading) {\n return;\n }\n // Coerce into HMR_ACTION_TYPES as that is the format.\n const msg = JSON.parse(event.data);\n if ('action' in msg && msg.action === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED) {\n if (serverSessionId !== null && serverSessionId !== msg.data.sessionId) {\n // Either the server's session id has changed and it's a new server, or\n // it's been too long since we disconnected and we should reload the page.\n // There could be 1) unhandled server errors and/or 2) stale content.\n // Perform a hard reload of the page.\n window.location.reload();\n reloading = true;\n return;\n }\n serverSessionId = msg.data.sessionId;\n }\n for (const eventCallback of eventCallbacks){\n eventCallback(msg);\n }\n }\n let timer;\n function handleDisconnect() {\n source.onerror = null;\n source.onclose = null;\n source.close();\n reconnections++;\n // After 25 reconnects we'll want to reload the page as it indicates the dev server is no longer running.\n if (reconnections > 25) {\n reloading = true;\n window.location.reload();\n return;\n }\n clearTimeout(timer);\n // Try again after 5 seconds\n timer = setTimeout(init, reconnections > 5 ? 5000 : 1000);\n }\n const url = (0, _getsocketurl.getSocketUrl)(options.assetPrefix);\n source = new window.WebSocket(\"\" + url + options.path);\n source.onopen = handleOnline;\n source.onerror = handleDisconnect;\n source.onclose = handleDisconnect;\n source.onmessage = handleMessage;\n }\n init();\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=websocket.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvcGFnZXMvd2Vic29ja2V0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQWdCZ0JBLGtCQUFrQjtlQUFsQkE7O0lBYUFDLFVBQVU7ZUFBVkE7O0lBVEFDLFdBQVc7ZUFBWEE7Ozt5Q0FqQlQ7OENBSUE7MENBQ3NCO0FBRTdCLElBQUlDO0FBSUosTUFBTUMsaUJBQXdDLEVBQUU7QUFFekMsU0FBU0osbUJBQW1CSyxRQUF3QjtJQUN6REQsZUFBZUUsSUFBSSxDQUFDRDtBQUN0QjtBQUVPLFNBQVNILFlBQVlLLElBQVk7SUFDdEMsSUFBSSxDQUFDSixVQUFVQSxPQUFPSyxVQUFVLEtBQUtMLE9BQU9NLElBQUksRUFBRTtJQUNsRCxPQUFPTixPQUFPTyxJQUFJLENBQUNIO0FBQ3JCO0FBRUEsSUFBSUksZ0JBQWdCO0FBQ3BCLElBQUlDLFlBQVk7QUFDaEIsSUFBSUMsa0JBQWlDO0FBRTlCLFNBQVNaLFdBQVdhLE9BQThDO0lBQ3ZFLFNBQVNDO1FBQ1AsSUFBSVosUUFBUUEsT0FBT2EsS0FBSztRQUV4QixTQUFTQztZQUNQLElBQUlDLGFBQUFBLHdCQUF3QixFQUFFO2dCQUM1QkMsYUFBQUEsUUFBUSxDQUFDQyxhQUFhLENBQUNqQjtZQUN6QjtZQUNBUSxnQkFBZ0I7WUFDaEJVLE9BQU9DLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDO1FBQ3JCO1FBRUEsU0FBU0MsY0FBY0MsS0FBMkI7WUFDaEQsbUVBQW1FO1lBQ25FLGtGQUFrRjtZQUNsRixJQUFJYixXQUFXO2dCQUNiO1lBQ0Y7WUFFQSxzREFBc0Q7WUFDdEQsTUFBTWMsTUFBd0JDLEtBQUtDLEtBQUssQ0FBQ0gsTUFBTWxCLElBQUk7WUFFbkQsSUFDRSxZQUFZbUIsT0FDWkEsSUFBSUcsTUFBTSxLQUFLQyxrQkFBQUEsMkJBQTJCLENBQUNDLG1CQUFtQixFQUM5RDtnQkFDQSxJQUNFbEIsb0JBQW9CLFFBQ3BCQSxvQkFBb0JhLElBQUluQixJQUFJLENBQUN5QixTQUFTLEVBQ3RDO29CQUNBLHVFQUF1RTtvQkFDdkUsMEVBQTBFO29CQUMxRSxxRUFBcUU7b0JBQ3JFLHFDQUFxQztvQkFDckNYLE9BQU9ZLFFBQVEsQ0FBQ0MsTUFBTTtvQkFFdEJ0QixZQUFZO29CQUNaO2dCQUNGO2dCQUVBQyxrQkFBa0JhLElBQUluQixJQUFJLENBQUN5QixTQUFTO1lBQ3RDO1lBRUEsS0FBSyxNQUFNRyxpQkFBaUIvQixlQUFnQjtnQkFDMUMrQixjQUFjVDtZQUNoQjtRQUNGO1FBRUEsSUFBSVU7UUFDSixTQUFTQztZQUNQbEMsT0FBT21DLE9BQU8sR0FBRztZQUNqQm5DLE9BQU9vQyxPQUFPLEdBQUc7WUFDakJwQyxPQUFPYSxLQUFLO1lBQ1pMO1lBQ0EseUdBQXlHO1lBQ3pHLElBQUlBLGdCQUFnQixJQUFJO2dCQUN0QkMsWUFBWTtnQkFDWlMsT0FBT1ksUUFBUSxDQUFDQyxNQUFNO2dCQUN0QjtZQUNGO1lBRUFNLGFBQWFKO1lBQ2IsNEJBQTRCO1lBQzVCQSxRQUFRSyxXQUFXMUIsTUFBTUosZ0JBQWdCLElBQUksT0FBTztRQUN0RDtRQUVBLE1BQU0rQixNQUFNQyxDQUFBQSxHQUFBQSxjQUFBQSxZQUFBQSxFQUFhN0IsUUFBUThCLFdBQVc7UUFFNUN6QyxTQUFTLElBQUlrQixPQUFPd0IsU0FBUyxDQUFFLEtBQUVILE1BQU01QixRQUFRZ0MsSUFBSTtRQUNuRDNDLE9BQU80QyxNQUFNLEdBQUc5QjtRQUNoQmQsT0FBT21DLE9BQU8sR0FBR0Q7UUFDakJsQyxPQUFPb0MsT0FBTyxHQUFHRjtRQUNqQmxDLE9BQU82QyxTQUFTLEdBQUd4QjtJQUNyQjtJQUVBVDtBQUNGIiwic291cmNlcyI6WyIvc3JjL2NsaWVudC9kZXYvaG90LXJlbG9hZGVyL3BhZ2VzL3dlYnNvY2tldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBpc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQsXG4gIGxvZ1F1ZXVlLFxufSBmcm9tICcuLi8uLi8uLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZm9yd2FyZC1sb2dzJ1xuaW1wb3J0IHtcbiAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLFxuICB0eXBlIEhNUl9BQ1RJT05fVFlQRVMsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzJ1xuaW1wb3J0IHsgZ2V0U29ja2V0VXJsIH0gZnJvbSAnLi4vZ2V0LXNvY2tldC11cmwnXG5cbmxldCBzb3VyY2U6IFdlYlNvY2tldFxuXG50eXBlIEFjdGlvbkNhbGxiYWNrID0gKGFjdGlvbjogSE1SX0FDVElPTl9UWVBFUykgPT4gdm9pZFxuXG5jb25zdCBldmVudENhbGxiYWNrczogQXJyYXk8QWN0aW9uQ2FsbGJhY2s+ID0gW11cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZE1lc3NhZ2VMaXN0ZW5lcihjYWxsYmFjazogQWN0aW9uQ2FsbGJhY2spIHtcbiAgZXZlbnRDYWxsYmFja3MucHVzaChjYWxsYmFjaylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGE6IHN0cmluZykge1xuICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UucmVhZHlTdGF0ZSAhPT0gc291cmNlLk9QRU4pIHJldHVyblxuICByZXR1cm4gc291cmNlLnNlbmQoZGF0YSlcbn1cblxubGV0IHJlY29ubmVjdGlvbnMgPSAwXG5sZXQgcmVsb2FkaW5nID0gZmFsc2VcbmxldCBzZXJ2ZXJTZXNzaW9uSWQ6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBjb25uZWN0SE1SKG9wdGlvbnM6IHsgcGF0aDogc3RyaW5nOyBhc3NldFByZWZpeDogc3RyaW5nIH0pIHtcbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBpZiAoc291cmNlKSBzb3VyY2UuY2xvc2UoKVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlT25saW5lKCkge1xuICAgICAgaWYgKGlzVGVybWluYWxMb2dnaW5nRW5hYmxlZCkge1xuICAgICAgICBsb2dRdWV1ZS5vblNvY2tldFJlYWR5KHNvdXJjZSlcbiAgICAgIH1cbiAgICAgIHJlY29ubmVjdGlvbnMgPSAwXG4gICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1tITVJdIGNvbm5lY3RlZCcpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShldmVudDogTWVzc2FnZUV2ZW50PHN0cmluZz4pIHtcbiAgICAgIC8vIFdoaWxlIHRoZSBwYWdlIGlzIHJlbG9hZGluZywgZG9uJ3QgcmVzcG9uZCB0byBhbnkgbW9yZSBtZXNzYWdlcy5cbiAgICAgIC8vIE9uIHJlY29ubmVjdCwgdGhlIHNlcnZlciBtYXkgc2VuZCBhbiBlbXB0eSBsaXN0IG9mIGNoYW5nZXMgaWYgaXQgd2FzIHJlc3RhcnRlZC5cbiAgICAgIGlmIChyZWxvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIENvZXJjZSBpbnRvIEhNUl9BQ1RJT05fVFlQRVMgYXMgdGhhdCBpcyB0aGUgZm9ybWF0LlxuICAgICAgY29uc3QgbXNnOiBITVJfQUNUSU9OX1RZUEVTID0gSlNPTi5wYXJzZShldmVudC5kYXRhKVxuXG4gICAgICBpZiAoXG4gICAgICAgICdhY3Rpb24nIGluIG1zZyAmJlxuICAgICAgICBtc2cuYWN0aW9uID09PSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuVFVSQk9QQUNLX0NPTk5FQ1RFRFxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzZXJ2ZXJTZXNzaW9uSWQgIT09IG51bGwgJiZcbiAgICAgICAgICBzZXJ2ZXJTZXNzaW9uSWQgIT09IG1zZy5kYXRhLnNlc3Npb25JZFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBFaXRoZXIgdGhlIHNlcnZlcidzIHNlc3Npb24gaWQgaGFzIGNoYW5nZWQgYW5kIGl0J3MgYSBuZXcgc2VydmVyLCBvclxuICAgICAgICAgIC8vIGl0J3MgYmVlbiB0b28gbG9uZyBzaW5jZSB3ZSBkaXNjb25uZWN0ZWQgYW5kIHdlIHNob3VsZCByZWxvYWQgdGhlIHBhZ2UuXG4gICAgICAgICAgLy8gVGhlcmUgY291bGQgYmUgMSkgdW5oYW5kbGVkIHNlcnZlciBlcnJvcnMgYW5kL29yIDIpIHN0YWxlIGNvbnRlbnQuXG4gICAgICAgICAgLy8gUGVyZm9ybSBhIGhhcmQgcmVsb2FkIG9mIHRoZSBwYWdlLlxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuXG4gICAgICAgICAgcmVsb2FkaW5nID0gdHJ1ZVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgc2VydmVyU2Vzc2lvbklkID0gbXNnLmRhdGEuc2Vzc2lvbklkXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZXZlbnRDYWxsYmFjayBvZiBldmVudENhbGxiYWNrcykge1xuICAgICAgICBldmVudENhbGxiYWNrKG1zZylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+XG4gICAgZnVuY3Rpb24gaGFuZGxlRGlzY29ubmVjdCgpIHtcbiAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbFxuICAgICAgc291cmNlLm9uY2xvc2UgPSBudWxsXG4gICAgICBzb3VyY2UuY2xvc2UoKVxuICAgICAgcmVjb25uZWN0aW9ucysrXG4gICAgICAvLyBBZnRlciAyNSByZWNvbm5lY3RzIHdlJ2xsIHdhbnQgdG8gcmVsb2FkIHRoZSBwYWdlIGFzIGl0IGluZGljYXRlcyB0aGUgZGV2IHNlcnZlciBpcyBubyBsb25nZXIgcnVubmluZy5cbiAgICAgIGlmIChyZWNvbm5lY3Rpb25zID4gMjUpIHtcbiAgICAgICAgcmVsb2FkaW5nID0gdHJ1ZVxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgIC8vIFRyeSBhZ2FpbiBhZnRlciA1IHNlY29uZHNcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dChpbml0LCByZWNvbm5lY3Rpb25zID4gNSA/IDUwMDAgOiAxMDAwKVxuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGdldFNvY2tldFVybChvcHRpb25zLmFzc2V0UHJlZml4KVxuXG4gICAgc291cmNlID0gbmV3IHdpbmRvdy5XZWJTb2NrZXQoYCR7dXJsfSR7b3B0aW9ucy5wYXRofWApXG4gICAgc291cmNlLm9ub3BlbiA9IGhhbmRsZU9ubGluZVxuICAgIHNvdXJjZS5vbmVycm9yID0gaGFuZGxlRGlzY29ubmVjdFxuICAgIHNvdXJjZS5vbmNsb3NlID0gaGFuZGxlRGlzY29ubmVjdFxuICAgIHNvdXJjZS5vbm1lc3NhZ2UgPSBoYW5kbGVNZXNzYWdlXG4gIH1cblxuICBpbml0KClcbn1cbiJdLCJuYW1lcyI6WyJhZGRNZXNzYWdlTGlzdGVuZXIiLCJjb25uZWN0SE1SIiwic2VuZE1lc3NhZ2UiLCJzb3VyY2UiLCJldmVudENhbGxiYWNrcyIsImNhbGxiYWNrIiwicHVzaCIsImRhdGEiLCJyZWFkeVN0YXRlIiwiT1BFTiIsInNlbmQiLCJyZWNvbm5lY3Rpb25zIiwicmVsb2FkaW5nIiwic2VydmVyU2Vzc2lvbklkIiwib3B0aW9ucyIsImluaXQiLCJjbG9zZSIsImhhbmRsZU9ubGluZSIsImlzVGVybWluYWxMb2dnaW5nRW5hYmxlZCIsImxvZ1F1ZXVlIiwib25Tb2NrZXRSZWFkeSIsIndpbmRvdyIsImNvbnNvbGUiLCJsb2ciLCJoYW5kbGVNZXNzYWdlIiwiZXZlbnQiLCJtc2ciLCJKU09OIiwicGFyc2UiLCJhY3Rpb24iLCJITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIiLCJUVVJCT1BBQ0tfQ09OTkVDVEVEIiwic2Vzc2lvbklkIiwibG9jYXRpb24iLCJyZWxvYWQiLCJldmVudENhbGxiYWNrIiwidGltZXIiLCJoYW5kbGVEaXNjb25uZWN0Iiwib25lcnJvciIsIm9uY2xvc2UiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidXJsIiwiZ2V0U29ja2V0VXJsIiwiYXNzZXRQcmVmaXgiLCJXZWJTb2NrZXQiLCJwYXRoIiwib25vcGVuIiwib25tZXNzYWdlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/shared.js":
/*!*********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/shared.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 REACT_REFRESH_FULL_RELOAD: function() {\n return REACT_REFRESH_FULL_RELOAD;\n },\n REACT_REFRESH_FULL_RELOAD_FROM_ERROR: function() {\n return REACT_REFRESH_FULL_RELOAD_FROM_ERROR;\n },\n reportInvalidHmrMessage: function() {\n return reportInvalidHmrMessage;\n }\n});\nconst REACT_REFRESH_FULL_RELOAD = '[Fast Refresh] performing full reload\\n\\n' + \"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\\n\" + 'You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\\n' + 'Consider migrating the non-React component export to a separate file and importing it into both files.\\n\\n' + 'It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\\n' + 'Fast Refresh requires at least one parent function component in your React tree.';\nconst REACT_REFRESH_FULL_RELOAD_FROM_ERROR = '[Fast Refresh] performing full reload because your application had an unrecoverable error';\nfunction reportInvalidHmrMessage(message, err) {\n console.warn('[HMR] Invalid message: ' + JSON.stringify(message) + '\\n' + (err instanceof Error && (err == null ? void 0 : err.stack) || ''));\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=shared.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvc2hhcmVkLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUVhQSx5QkFBeUI7ZUFBekJBOztJQVFBQyxvQ0FBb0M7ZUFBcENBOztJQUdHQyx1QkFBdUI7ZUFBdkJBOzs7QUFYVCxNQUFNRiw0QkFDWCw4Q0FDQSxtSUFDQSxxSUFDQSwrR0FDQSw4SEFDQTtBQUVLLE1BQU1DLHVDQUNYO0FBRUssU0FBU0Msd0JBQ2RDLE9BQWlELEVBQ2pEQyxHQUFZO0lBRVpDLFFBQVFDLElBQUksQ0FDViw0QkFDRUMsS0FBS0MsU0FBUyxDQUFDTCxXQUNmLE9BQ0MsQ0FBQ0MsZUFBZUssVUFBU0wsT0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsSUFBS00sS0FBQUEsS0FBVSxHQUFDO0FBRWhEIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvc2hhcmVkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSE1SX0FDVElPTl9UWVBFUyB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzJ1xuXG5leHBvcnQgY29uc3QgUkVBQ1RfUkVGUkVTSF9GVUxMX1JFTE9BRCA9XG4gICdbRmFzdCBSZWZyZXNoXSBwZXJmb3JtaW5nIGZ1bGwgcmVsb2FkXFxuXFxuJyArXG4gIFwiRmFzdCBSZWZyZXNoIHdpbGwgcGVyZm9ybSBhIGZ1bGwgcmVsb2FkIHdoZW4geW91IGVkaXQgYSBmaWxlIHRoYXQncyBpbXBvcnRlZCBieSBtb2R1bGVzIG91dHNpZGUgb2YgdGhlIFJlYWN0IHJlbmRlcmluZyB0cmVlLlxcblwiICtcbiAgJ1lvdSBtaWdodCBoYXZlIGEgZmlsZSB3aGljaCBleHBvcnRzIGEgUmVhY3QgY29tcG9uZW50IGJ1dCBhbHNvIGV4cG9ydHMgYSB2YWx1ZSB0aGF0IGlzIGltcG9ydGVkIGJ5IGEgbm9uLVJlYWN0IGNvbXBvbmVudCBmaWxlLlxcbicgK1xuICAnQ29uc2lkZXIgbWlncmF0aW5nIHRoZSBub24tUmVhY3QgY29tcG9uZW50IGV4cG9ydCB0byBhIHNlcGFyYXRlIGZpbGUgYW5kIGltcG9ydGluZyBpdCBpbnRvIGJvdGggZmlsZXMuXFxuXFxuJyArXG4gICdJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBwYXJlbnQgY29tcG9uZW50IG9mIHRoZSBjb21wb25lbnQgeW91IGVkaXRlZCBpcyBhIGNsYXNzIGNvbXBvbmVudCwgd2hpY2ggZGlzYWJsZXMgRmFzdCBSZWZyZXNoLlxcbicgK1xuICAnRmFzdCBSZWZyZXNoIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBwYXJlbnQgZnVuY3Rpb24gY29tcG9uZW50IGluIHlvdXIgUmVhY3QgdHJlZS4nXG5cbmV4cG9ydCBjb25zdCBSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IgPVxuICAnW0Zhc3QgUmVmcmVzaF0gcGVyZm9ybWluZyBmdWxsIHJlbG9hZCBiZWNhdXNlIHlvdXIgYXBwbGljYXRpb24gaGFkIGFuIHVucmVjb3ZlcmFibGUgZXJyb3InXG5cbmV4cG9ydCBmdW5jdGlvbiByZXBvcnRJbnZhbGlkSG1yTWVzc2FnZShcbiAgbWVzc2FnZTogSE1SX0FDVElPTl9UWVBFUyB8IE1lc3NhZ2VFdmVudDx1bmtub3duPixcbiAgZXJyOiB1bmtub3duXG4pIHtcbiAgY29uc29sZS53YXJuKFxuICAgICdbSE1SXSBJbnZhbGlkIG1lc3NhZ2U6ICcgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkgK1xuICAgICAgJ1xcbicgK1xuICAgICAgKChlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnI/LnN0YWNrKSB8fCAnJylcbiAgKVxufVxuIl0sIm5hbWVzIjpbIlJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQUQiLCJSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IiLCJyZXBvcnRJbnZhbGlkSG1yTWVzc2FnZSIsIm1lc3NhZ2UiLCJlcnIiLCJjb25zb2xlIiwid2FybiIsIkpTT04iLCJzdHJpbmdpZnkiLCJFcnJvciIsInN0YWNrIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/shared.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js":
/*!********************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js ***!
\********************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"TurbopackHmr\", ({\n enumerable: true,\n get: function() {\n return TurbopackHmr;\n }\n}));\nconst _class_private_field_loose_base = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_base */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\");\nconst _class_private_field_loose_key = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_key */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\");\n// How long to wait before reporting the HMR start, used to suppress irrelevant\n// `BUILDING` events. Does not impact reported latency.\nconst TURBOPACK_HMR_START_DELAY_MS = 100;\nvar _updatedModules = /*#__PURE__*/ _class_private_field_loose_key._(\"_updatedModules\"), _startMsSinceEpoch = /*#__PURE__*/ _class_private_field_loose_key._(\"_startMsSinceEpoch\"), _lastUpdateMsSinceEpoch = /*#__PURE__*/ _class_private_field_loose_key._(\"_lastUpdateMsSinceEpoch\"), _deferredReportHmrStartId = /*#__PURE__*/ _class_private_field_loose_key._(\"_deferredReportHmrStartId\"), _reportedHmrStart = /*#__PURE__*/ _class_private_field_loose_key._(\"_reportedHmrStart\"), // as it reports *any* compilation, including fully no-op/cached compilations\n// and those unrelated to HMR. Fixing this would require significant\n// architectural changes.\n//\n// Work around this by deferring any \"rebuilding\" message by 100ms. If we get\n// a BUILT event within that threshold and nothing has changed, just suppress\n// the message entirely.\n_runDeferredReportHmrStart = /*#__PURE__*/ _class_private_field_loose_key._(\"_runDeferredReportHmrStart\"), _cancelDeferredReportHmrStart = /*#__PURE__*/ _class_private_field_loose_key._(\"_cancelDeferredReportHmrStart\"), /** Helper for other `onEvent` methods. */ _onUpdate = /*#__PURE__*/ _class_private_field_loose_key._(\"_onUpdate\");\nclass TurbopackHmr {\n onBuilding() {\n _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch] = undefined;\n _class_private_field_loose_base._(this, _cancelDeferredReportHmrStart)[_cancelDeferredReportHmrStart]();\n _class_private_field_loose_base._(this, _startMsSinceEpoch)[_startMsSinceEpoch] = Date.now();\n // report the HMR start after a short delay\n _class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] = setTimeout(()=>_class_private_field_loose_base._(this, _runDeferredReportHmrStart)[_runDeferredReportHmrStart](), self.__NEXT_HMR_TURBOPACK_REPORT_NOISY_NOOP_EVENTS ? 0 : TURBOPACK_HMR_START_DELAY_MS);\n }\n onTurbopackMessage(msg) {\n _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n const updatedModules = extractModulesFromTurbopackMessage(msg.data);\n for (const module1 of updatedModules){\n _class_private_field_loose_base._(this, _updatedModules)[_updatedModules].add(module1);\n }\n }\n onServerComponentChanges() {\n _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n }\n onReloadPage() {\n _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n }\n onPageAddRemove() {\n _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n }\n /**\n * @returns `null` if the caller should ignore the update entirely. Returns an\n * object with `hasUpdates: false` if the caller should report the end of\n * the HMR in the browser console, but the HMR was a no-op.\n */ onBuilt() {\n // Check that we got *any* `TurbopackMessageAction`, even if\n // `updatedModules` is empty (not everything gets recorded there).\n //\n // There's also a case where `onBuilt` gets called before `onBuilding`,\n // which can happen during initial page load. Ignore that too!\n const hasUpdates = _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch] != null && _class_private_field_loose_base._(this, _startMsSinceEpoch)[_startMsSinceEpoch] != null;\n if (!hasUpdates && !_class_private_field_loose_base._(this, _reportedHmrStart)[_reportedHmrStart]) {\n // suppress the update entirely\n _class_private_field_loose_base._(this, _cancelDeferredReportHmrStart)[_cancelDeferredReportHmrStart]();\n return null;\n }\n _class_private_field_loose_base._(this, _runDeferredReportHmrStart)[_runDeferredReportHmrStart]();\n var _class_private_field_loose_base__lastUpdateMsSinceEpoch;\n const result = {\n hasUpdates,\n updatedModules: _class_private_field_loose_base._(this, _updatedModules)[_updatedModules],\n startMsSinceEpoch: _class_private_field_loose_base._(this, _startMsSinceEpoch)[_startMsSinceEpoch],\n endMsSinceEpoch: (_class_private_field_loose_base__lastUpdateMsSinceEpoch = _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch]) != null ? _class_private_field_loose_base__lastUpdateMsSinceEpoch : Date.now()\n };\n _class_private_field_loose_base._(this, _updatedModules)[_updatedModules] = new Set();\n _class_private_field_loose_base._(this, _reportedHmrStart)[_reportedHmrStart] = false;\n return result;\n }\n constructor(){\n Object.defineProperty(this, _runDeferredReportHmrStart, {\n value: runDeferredReportHmrStart\n });\n Object.defineProperty(this, _cancelDeferredReportHmrStart, {\n value: cancelDeferredReportHmrStart\n });\n Object.defineProperty(this, _onUpdate, {\n value: onUpdate\n });\n Object.defineProperty(this, _updatedModules, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _startMsSinceEpoch, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _lastUpdateMsSinceEpoch, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _deferredReportHmrStartId, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _reportedHmrStart, {\n writable: true,\n value: void 0\n });\n _class_private_field_loose_base._(this, _updatedModules)[_updatedModules] = new Set();\n _class_private_field_loose_base._(this, _reportedHmrStart)[_reportedHmrStart] = false;\n }\n}\nfunction runDeferredReportHmrStart() {\n if (_class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] != null) {\n console.log('[Fast Refresh] rebuilding');\n _class_private_field_loose_base._(this, _reportedHmrStart)[_reportedHmrStart] = true;\n _class_private_field_loose_base._(this, _cancelDeferredReportHmrStart)[_cancelDeferredReportHmrStart]();\n }\n}\nfunction cancelDeferredReportHmrStart() {\n clearTimeout(_class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId]);\n _class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] = undefined;\n}\nfunction onUpdate() {\n _class_private_field_loose_base._(this, _runDeferredReportHmrStart)[_runDeferredReportHmrStart]();\n _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch] = Date.now();\n}\nfunction extractModulesFromTurbopackMessage(data) {\n const updatedModules = new Set();\n const updates = Array.isArray(data) ? data : [\n data\n ];\n for (const update of updates){\n // TODO this won't capture changes to CSS since they don't result in a \"merged\" update\n if (update.type !== 'partial' || update.instruction.type !== 'ChunkListUpdate' || update.instruction.merged === undefined) {\n continue;\n }\n for (const mergedUpdate of update.instruction.merged){\n for (const name of Object.keys(mergedUpdate.entries)){\n const res = /(.*)\\s+\\[.*/.exec(name);\n if (res === null) {\n console.error('[Turbopack HMR] Expected module to match pattern: ' + name);\n continue;\n }\n updatedModules.add(res[1]);\n }\n }\n }\n return updatedModules;\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=turbopack-hot-reloader-common.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvdHVyYm9wYWNrLWhvdC1yZWxvYWRlci1jb21tb24uanMiLCJtYXBwaW5ncyI6Ijs7OztnREFvQmFBOzs7ZUFBQUE7Ozs7O0FBWGIsK0VBQStFO0FBQy9FLHVEQUF1RDtBQUN2RCxNQUFNQywrQkFBK0I7SUFVbkMscUZBQ0EsMkZBQ0EscUdBQ0EseUdBQ0EseUZBT0EsNEVBQTRFLENBQ0M7QUFDN0Usb0VBQW9FO0FBQ3BFLHlCQUF5QjtBQUN6QixFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSx3QkFBd0I7QUFDeEIsMkdBUUEsaUhBb0JBLHdDQUF3QyxHQUN4QztBQWpESyxNQUFNRDtJQWlDWEUsYUFBYTtRQUNYLHNDQUFJLEVBQUMsb0RBQTBCQztRQUMvQixzQ0FBSSxFQUFDO1FBQ0wsc0NBQUksRUFBQywwQ0FBcUJDLEtBQUtDLEdBQUc7UUFFbEMsMkNBQTJDO1FBQzNDLHNDQUFJLEVBQUMsd0RBQTRCQyxXQUMvQixJQUFNLHNDQUFJLEVBQUMsMkRBRVhDLEtBQUtDLDZDQUE2QyxHQUM5QyxJQUNBUCxpQkFIc0U7SUFLOUU7SUFRQVEsbUJBQW1CQyxHQUEyQixFQUFFO1FBQzlDLHNDQUFJLEVBQUM7UUFDTCxNQUFNQyxpQkFBaUJDLG1DQUFtQ0YsSUFBSUcsSUFBSTtRQUNsRSxLQUFLLE1BQU1DLFdBQVVILGVBQWdCO1lBQ25DLHNDQUFJLEVBQUMsa0NBQWdCSSxHQUFHLENBQUNEO1FBQzNCO0lBQ0Y7SUFFQUUsMkJBQTJCO1FBQ3pCLHNDQUFJLEVBQUM7SUFDUDtJQUVBQyxlQUFlO1FBQ2Isc0NBQUksRUFBQztJQUNQO0lBRUFDLGtCQUFrQjtRQUNoQixzQ0FBSSxFQUFDO0lBQ1A7SUFFQTs7OztHQUlDLEdBQ0RDLFVBQTRCO1FBQzFCLDREQUE0RDtRQUM1RCxrRUFBa0U7UUFDbEUsRUFBRTtRQUNGLHVFQUF1RTtRQUN2RSw4REFBOEQ7UUFDOUQsTUFBTUMsYUFDSixzQ0FBSSxFQUFDLHFEQUEyQixRQUFRLHNDQUFJLEVBQUMsMkNBQXNCO1FBQ3JFLElBQUksQ0FBQ0EsY0FBYyxDQUFDLHNDQUFJLEVBQUMsdUNBQW1CO1lBQzFDLCtCQUErQjtZQUMvQixzQ0FBSSxFQUFDO1lBQ0wsT0FBTztRQUNUO1FBQ0Esc0NBQUksRUFBQzs7UUFFTCxNQUFNQyxTQUFTO1lBQ2JEO1lBQ0FULGNBQWMsRUFBRSxzQ0FBSSxFQUFDO1lBQ3JCVyxpQkFBaUIsRUFBRSxzQ0FBSSxFQUFDO1lBQ3hCQyxpQkFBaUIsaUdBQUksRUFBQyx1SEFBMkJuQixLQUFLQyxHQUFHO1FBQzNEO1FBQ0Esc0NBQUksRUFBQyxvQ0FBa0IsSUFBSW1CO1FBQzNCLHNDQUFJLEVBQUMsd0NBQW9CO1FBQ3pCLE9BQU9IO0lBQ1Q7SUFoR0FJLGFBQWM7UUFhZDttQkFBQTs7UUFRQTttQkFBQTs7UUFxQkE7bUJBQUE7O1FBaERBOzttQkFBQTs7UUFDQTs7bUJBQUE7O1FBQ0E7O21CQUFBOztRQUNBOzttQkFBQTs7UUFDQTs7bUJBQUE7O1FBR0Usc0NBQUksRUFBQyxvQ0FBa0IsSUFBSUQ7UUFDM0Isc0NBQUksRUFBQyx3Q0FBb0I7SUFDM0I7QUE4RkY7QUFwRkU7SUFDRSxJQUFJLHNDQUFJLEVBQUMseURBQTZCLE1BQU07UUFDMUNFLFFBQVFDLEdBQUcsQ0FBQztRQUNaLHNDQUFJLEVBQUMsd0NBQW9CO1FBQ3pCLHNDQUFJLEVBQUM7SUFDUDtBQUNGO0FBRUE7SUFDRUMsYUFBYSxzQ0FBSSxFQUFDO0lBQ2xCLHNDQUFJLEVBQUMsd0RBQTRCekI7QUFDbkM7QUFrQkE7SUFDRSxzQ0FBSSxFQUFDO0lBQ0wsc0NBQUksRUFBQyxvREFBMEJDLEtBQUtDLEdBQUc7QUFDekM7QUFzREYsU0FBU08sbUNBQ1BDLElBQXlDO0lBRXpDLE1BQU1GLGlCQUE4QixJQUFJYTtJQUV4QyxNQUFNSyxVQUFVQyxNQUFNQyxPQUFPLENBQUNsQixRQUFRQSxPQUFPO1FBQUNBO0tBQUs7SUFDbkQsS0FBSyxNQUFNbUIsVUFBVUgsUUFBUztRQUM1QixzRkFBc0Y7UUFDdEYsSUFDRUcsT0FBT0MsSUFBSSxLQUFLLGFBQ2hCRCxPQUFPRSxXQUFXLENBQUNELElBQUksS0FBSyxxQkFDNUJELE9BQU9FLFdBQVcsQ0FBQ0MsTUFBTSxLQUFLaEMsV0FDOUI7WUFDQTtRQUNGO1FBRUEsS0FBSyxNQUFNaUMsZ0JBQWdCSixPQUFPRSxXQUFXLENBQUNDLE1BQU0sQ0FBRTtZQUNwRCxLQUFLLE1BQU1FLFFBQVFDLE9BQU9DLElBQUksQ0FBQ0gsYUFBYUksT0FBTyxFQUFHO2dCQUNwRCxNQUFNQyxNQUFNLGNBQWNDLElBQUksQ0FBQ0w7Z0JBQy9CLElBQUlJLFFBQVEsTUFBTTtvQkFDaEJmLFFBQVFpQixLQUFLLENBQ1gsdURBQXVETjtvQkFFekQ7Z0JBQ0Y7Z0JBRUExQixlQUFlSSxHQUFHLENBQUMwQixHQUFHLENBQUMsRUFBRTtZQUMzQjtRQUNGO0lBQ0Y7SUFFQSxPQUFPOUI7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9kZXYvaG90LXJlbG9hZGVyL3R1cmJvcGFjay1ob3QtcmVsb2FkZXItY29tbW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVHVyYm9wYWNrTWVzc2FnZUFjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzJ1xuaW1wb3J0IHR5cGUgeyBVcGRhdGUgYXMgVHVyYm9wYWNrVXBkYXRlIH0gZnJvbSAnLi4vLi4vLi4vYnVpbGQvc3djL3R5cGVzJ1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fTkVYVF9ITVJfVFVSQk9QQUNLX1JFUE9SVF9OT0lTWV9OT09QX0VWRU5UUzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICB9XG59XG5cbi8vIEhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIHJlcG9ydGluZyB0aGUgSE1SIHN0YXJ0LCB1c2VkIHRvIHN1cHByZXNzIGlycmVsZXZhbnRcbi8vIGBCVUlMRElOR2AgZXZlbnRzLiBEb2VzIG5vdCBpbXBhY3QgcmVwb3J0ZWQgbGF0ZW5jeS5cbmNvbnN0IFRVUkJPUEFDS19ITVJfU1RBUlRfREVMQVlfTVMgPSAxMDBcblxuaW50ZXJmYWNlIEhtclVwZGF0ZSB7XG4gIGhhc1VwZGF0ZXM6IGJvb2xlYW5cbiAgdXBkYXRlZE1vZHVsZXM6IFNldDxzdHJpbmc+XG4gIHN0YXJ0TXNTaW5jZUVwb2NoOiBudW1iZXJcbiAgZW5kTXNTaW5jZUVwb2NoOiBudW1iZXJcbn1cblxuZXhwb3J0IGNsYXNzIFR1cmJvcGFja0htciB7XG4gICN1cGRhdGVkTW9kdWxlczogU2V0PHN0cmluZz5cbiAgI3N0YXJ0TXNTaW5jZUVwb2NoOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgI2xhc3RVcGRhdGVNc1NpbmNlRXBvY2g6IG51bWJlciB8IHVuZGVmaW5lZFxuICAjZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZFxuICAjcmVwb3J0ZWRIbXJTdGFydDogYm9vbGVhblxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuI3VwZGF0ZWRNb2R1bGVzID0gbmV3IFNldCgpXG4gICAgdGhpcy4jcmVwb3J0ZWRIbXJTdGFydCA9IGZhbHNlXG4gIH1cblxuICAvLyBIQUNLOiBUdXJib3BhY2sgdGVuZHMgdG8gZ2VuZXJhdGUgYSBsb3Qgb2YgaXJyZWxldmFudCBcIkJVSUxESU5HXCIgYWN0aW9ucyxcbiAgLy8gYXMgaXQgcmVwb3J0cyAqYW55KiBjb21waWxhdGlvbiwgaW5jbHVkaW5nIGZ1bGx5IG5vLW9wL2NhY2hlZCBjb21waWxhdGlvbnNcbiAgLy8gYW5kIHRob3NlIHVucmVsYXRlZCB0byBITVIuIEZpeGluZyB0aGlzIHdvdWxkIHJlcXVpcmUgc2lnbmlmaWNhbnRcbiAgLy8gYXJjaGl0ZWN0dXJhbCBjaGFuZ2VzLlxuICAvL1xuICAvLyBXb3JrIGFyb3VuZCB0aGlzIGJ5IGRlZmVycmluZyBhbnkgXCJyZWJ1aWxkaW5nXCIgbWVzc2FnZSBieSAxMDBtcy4gSWYgd2UgZ2V0XG4gIC8vIGEgQlVJTFQgZXZlbnQgd2l0aGluIHRoYXQgdGhyZXNob2xkIGFuZCBub3RoaW5nIGhhcyBjaGFuZ2VkLCBqdXN0IHN1cHByZXNzXG4gIC8vIHRoZSBtZXNzYWdlIGVudGlyZWx5LlxuICAjcnVuRGVmZXJyZWRSZXBvcnRIbXJTdGFydCgpIHtcbiAgICBpZiAodGhpcy4jZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkICE9IG51bGwpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbRmFzdCBSZWZyZXNoXSByZWJ1aWxkaW5nJylcbiAgICAgIHRoaXMuI3JlcG9ydGVkSG1yU3RhcnQgPSB0cnVlXG4gICAgICB0aGlzLiNjYW5jZWxEZWZlcnJlZFJlcG9ydEhtclN0YXJ0KClcbiAgICB9XG4gIH1cblxuICAjY2FuY2VsRGVmZXJyZWRSZXBvcnRIbXJTdGFydCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy4jZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkKVxuICAgIHRoaXMuI2RlZmVycmVkUmVwb3J0SG1yU3RhcnRJZCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgb25CdWlsZGluZygpIHtcbiAgICB0aGlzLiNsYXN0VXBkYXRlTXNTaW5jZUVwb2NoID0gdW5kZWZpbmVkXG4gICAgdGhpcy4jY2FuY2VsRGVmZXJyZWRSZXBvcnRIbXJTdGFydCgpXG4gICAgdGhpcy4jc3RhcnRNc1NpbmNlRXBvY2ggPSBEYXRlLm5vdygpXG5cbiAgICAvLyByZXBvcnQgdGhlIEhNUiBzdGFydCBhZnRlciBhIHNob3J0IGRlbGF5XG4gICAgdGhpcy4jZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkID0gc2V0VGltZW91dChcbiAgICAgICgpID0+IHRoaXMuI3J1bkRlZmVycmVkUmVwb3J0SG1yU3RhcnQoKSxcbiAgICAgIC8vIGRlYnVnZ2luZyBmZWF0dXJlOiBkb24ndCBkZWZlci9zdXBwcmVzcyBub2lzeSBuby1vcCBITVIgdXBkYXRlIG1lc3NhZ2VzXG4gICAgICBzZWxmLl9fTkVYVF9ITVJfVFVSQk9QQUNLX1JFUE9SVF9OT0lTWV9OT09QX0VWRU5UU1xuICAgICAgICA/IDBcbiAgICAgICAgOiBUVVJCT1BBQ0tfSE1SX1NUQVJUX0RFTEFZX01TXG4gICAgKVxuICB9XG5cbiAgLyoqIEhlbHBlciBmb3Igb3RoZXIgYG9uRXZlbnRgIG1ldGhvZHMuICovXG4gICNvblVwZGF0ZSgpIHtcbiAgICB0aGlzLiNydW5EZWZlcnJlZFJlcG9ydEhtclN0YXJ0KClcbiAgICB0aGlzLiNsYXN0VXBkYXRlTXNTaW5jZUVwb2NoID0gRGF0ZS5ub3coKVxuICB9XG5cbiAgb25UdXJib3BhY2tNZXNzYWdlKG1zZzogVHVyYm9wYWNrTWVzc2FnZUFjdGlvbikge1xuICAgIHRoaXMuI29uVXBkYXRlKClcbiAgICBjb25zdCB1cGRhdGVkTW9kdWxlcyA9IGV4dHJhY3RNb2R1bGVzRnJvbVR1cmJvcGFja01lc3NhZ2UobXNnLmRhdGEpXG4gICAgZm9yIChjb25zdCBtb2R1bGUgb2YgdXBkYXRlZE1vZHVsZXMpIHtcbiAgICAgIHRoaXMuI3VwZGF0ZWRNb2R1bGVzLmFkZChtb2R1bGUpXG4gICAgfVxuICB9XG5cbiAgb25TZXJ2ZXJDb21wb25lbnRDaGFuZ2VzKCkge1xuICAgIHRoaXMuI29uVXBkYXRlKClcbiAgfVxuXG4gIG9uUmVsb2FkUGFnZSgpIHtcbiAgICB0aGlzLiNvblVwZGF0ZSgpXG4gIH1cblxuICBvblBhZ2VBZGRSZW1vdmUoKSB7XG4gICAgdGhpcy4jb25VcGRhdGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGBudWxsYCBpZiB0aGUgY2FsbGVyIHNob3VsZCBpZ25vcmUgdGhlIHVwZGF0ZSBlbnRpcmVseS4gUmV0dXJucyBhblxuICAgKiAgIG9iamVjdCB3aXRoIGBoYXNVcGRhdGVzOiBmYWxzZWAgaWYgdGhlIGNhbGxlciBzaG91bGQgcmVwb3J0IHRoZSBlbmQgb2ZcbiAgICogICB0aGUgSE1SIGluIHRoZSBicm93c2VyIGNvbnNvbGUsIGJ1dCB0aGUgSE1SIHdhcyBhIG5vLW9wLlxuICAgKi9cbiAgb25CdWlsdCgpOiBIbXJVcGRhdGUgfCBudWxsIHtcbiAgICAvLyBDaGVjayB0aGF0IHdlIGdvdCAqYW55KiBgVHVyYm9wYWNrTWVzc2FnZUFjdGlvbmAsIGV2ZW4gaWZcbiAgICAvLyBgdXBkYXRlZE1vZHVsZXNgIGlzIGVtcHR5IChub3QgZXZlcnl0aGluZyBnZXRzIHJlY29yZGVkIHRoZXJlKS5cbiAgICAvL1xuICAgIC8vIFRoZXJlJ3MgYWxzbyBhIGNhc2Ugd2hlcmUgYG9uQnVpbHRgIGdldHMgY2FsbGVkIGJlZm9yZSBgb25CdWlsZGluZ2AsXG4gICAgLy8gd2hpY2ggY2FuIGhhcHBlbiBkdXJpbmcgaW5pdGlhbCBwYWdlIGxvYWQuIElnbm9yZSB0aGF0IHRvbyFcbiAgICBjb25zdCBoYXNVcGRhdGVzID1cbiAgICAgIHRoaXMuI2xhc3RVcGRhdGVNc1NpbmNlRXBvY2ggIT0gbnVsbCAmJiB0aGlzLiNzdGFydE1zU2luY2VFcG9jaCAhPSBudWxsXG4gICAgaWYgKCFoYXNVcGRhdGVzICYmICF0aGlzLiNyZXBvcnRlZEhtclN0YXJ0KSB7XG4gICAgICAvLyBzdXBwcmVzcyB0aGUgdXBkYXRlIGVudGlyZWx5XG4gICAgICB0aGlzLiNjYW5jZWxEZWZlcnJlZFJlcG9ydEhtclN0YXJ0KClcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHRoaXMuI3J1bkRlZmVycmVkUmVwb3J0SG1yU3RhcnQoKVxuXG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgaGFzVXBkYXRlcyxcbiAgICAgIHVwZGF0ZWRNb2R1bGVzOiB0aGlzLiN1cGRhdGVkTW9kdWxlcyxcbiAgICAgIHN0YXJ0TXNTaW5jZUVwb2NoOiB0aGlzLiNzdGFydE1zU2luY2VFcG9jaCEsXG4gICAgICBlbmRNc1NpbmNlRXBvY2g6IHRoaXMuI2xhc3RVcGRhdGVNc1NpbmNlRXBvY2ggPz8gRGF0ZS5ub3coKSxcbiAgICB9XG4gICAgdGhpcy4jdXBkYXRlZE1vZHVsZXMgPSBuZXcgU2V0KClcbiAgICB0aGlzLiNyZXBvcnRlZEhtclN0YXJ0ID0gZmFsc2VcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdE1vZHVsZXNGcm9tVHVyYm9wYWNrTWVzc2FnZShcbiAgZGF0YTogVHVyYm9wYWNrVXBkYXRlIHwgVHVyYm9wYWNrVXBkYXRlW11cbik6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgdXBkYXRlZE1vZHVsZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG5cbiAgY29uc3QgdXBkYXRlcyA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogW2RhdGFdXG4gIGZvciAoY29uc3QgdXBkYXRlIG9mIHVwZGF0ZXMpIHtcbiAgICAvLyBUT0RPIHRoaXMgd29uJ3QgY2FwdHVyZSBjaGFuZ2VzIHRvIENTUyBzaW5jZSB0aGV5IGRvbid0IHJlc3VsdCBpbiBhIFwibWVyZ2VkXCIgdXBkYXRlXG4gICAgaWYgKFxuICAgICAgdXBkYXRlLnR5cGUgIT09ICdwYXJ0aWFsJyB8fFxuICAgICAgdXBkYXRlLmluc3RydWN0aW9uLnR5cGUgIT09ICdDaHVua0xpc3RVcGRhdGUnIHx8XG4gICAgICB1cGRhdGUuaW5zdHJ1Y3Rpb24ubWVyZ2VkID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtZXJnZWRVcGRhdGUgb2YgdXBkYXRlLmluc3RydWN0aW9uLm1lcmdlZCkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKG1lcmdlZFVwZGF0ZS5lbnRyaWVzKSkge1xuICAgICAgICBjb25zdCByZXMgPSAvKC4qKVxccytcXFsuKi8uZXhlYyhuYW1lKVxuICAgICAgICBpZiAocmVzID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdbVHVyYm9wYWNrIEhNUl0gRXhwZWN0ZWQgbW9kdWxlIHRvIG1hdGNoIHBhdHRlcm46ICcgKyBuYW1lXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVkTW9kdWxlcy5hZGQocmVzWzFdKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkTW9kdWxlc1xufVxuIl0sIm5hbWVzIjpbIlR1cmJvcGFja0htciIsIlRVUkJPUEFDS19ITVJfU1RBUlRfREVMQVlfTVMiLCJvbkJ1aWxkaW5nIiwidW5kZWZpbmVkIiwiRGF0ZSIsIm5vdyIsInNldFRpbWVvdXQiLCJzZWxmIiwiX19ORVhUX0hNUl9UVVJCT1BBQ0tfUkVQT1JUX05PSVNZX05PT1BfRVZFTlRTIiwib25UdXJib3BhY2tNZXNzYWdlIiwibXNnIiwidXBkYXRlZE1vZHVsZXMiLCJleHRyYWN0TW9kdWxlc0Zyb21UdXJib3BhY2tNZXNzYWdlIiwiZGF0YSIsIm1vZHVsZSIsImFkZCIsIm9uU2VydmVyQ29tcG9uZW50Q2hhbmdlcyIsIm9uUmVsb2FkUGFnZSIsIm9uUGFnZUFkZFJlbW92ZSIsIm9uQnVpbHQiLCJoYXNVcGRhdGVzIiwicmVzdWx0Iiwic3RhcnRNc1NpbmNlRXBvY2giLCJlbmRNc1NpbmNlRXBvY2giLCJTZXQiLCJjb25zdHJ1Y3RvciIsImNvbnNvbGUiLCJsb2ciLCJjbGVhclRpbWVvdXQiLCJ1cGRhdGVzIiwiQXJyYXkiLCJpc0FycmF5IiwidXBkYXRlIiwidHlwZSIsImluc3RydWN0aW9uIiwibWVyZ2VkIiwibWVyZ2VkVXBkYXRlIiwibmFtZSIsIk9iamVjdCIsImtleXMiLCJlbnRyaWVzIiwicmVzIiwiZXhlYyIsImVycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/on-demand-entries-client.js":
/*!**************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/on-demand-entries-client.js ***!
\**************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _router = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../router */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/router.js\"));\nconst _websocket = __webpack_require__(/*! ./hot-reloader/pages/websocket */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js\");\nconst _default = async (page)=>{\n // Never send pings when using Turbopack as it's not used.\n // Pings were originally used to keep track of active routes in on-demand-entries with webpack.\n if (false) {}\n if (page) {\n // in AMP the router isn't initialized on the client and\n // client-transitions don't occur so ping initial page\n setInterval(()=>{\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'ping',\n page\n }));\n }, 2500);\n } else {\n _router.default.ready(()=>{\n setInterval(()=>{\n // when notFound: true is returned we should use the notFoundPage\n // as the Router.pathname will point to the 404 page but we want\n // to ping the source page that returned notFound: true instead\n const notFoundSrcPage = self.__NEXT_DATA__.notFoundSrcPage;\n const pathname = (_router.default.pathname === '/404' || _router.default.pathname === '/_error') && notFoundSrcPage ? notFoundSrcPage : _router.default.pathname;\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'ping',\n page: pathname\n }));\n }, 2500);\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=on-demand-entries-client.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9vbi1kZW1hbmQtZW50cmllcy1jbGllbnQuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FHQTs7O2VBQUE7Ozs7NkVBSG1CO3VDQUNTO01BRTVCLFdBQWUsT0FBT0E7SUFDcEIsMERBQTBEO0lBQzFELCtGQUErRjtJQUMvRixJQUFJQyxLQUFxQixFQUFFLEVBRTFCO0lBQ0QsSUFBSUQsTUFBTTtRQUNSLHdEQUF3RDtRQUN4RCxzREFBc0Q7UUFDdERJLFlBQVk7WUFDVkMsQ0FBQUEsR0FBQUEsV0FBQUEsV0FBQUEsRUFBWUMsS0FBS0MsU0FBUyxDQUFDO2dCQUFFQyxPQUFPO2dCQUFRUjtZQUFLO1FBQ25ELEdBQUc7SUFDTCxPQUFPO1FBQ0xTLFFBQUFBLE9BQU0sQ0FBQ0MsS0FBSyxDQUFDO1lBQ1hOLFlBQVk7Z0JBQ1YsaUVBQWlFO2dCQUNqRSxnRUFBZ0U7Z0JBQ2hFLCtEQUErRDtnQkFDL0QsTUFBTU8sa0JBQWtCQyxLQUFLQyxhQUFhLENBQUNGLGVBQWU7Z0JBQzFELE1BQU1HLFdBQ0hMLENBQUFBLFFBQUFBLE9BQU0sQ0FBQ0ssUUFBUSxLQUFLLFVBQVVMLFFBQUFBLE9BQU0sQ0FBQ0ssUUFBUSxLQUFLLFVBQVEsSUFDM0RILGtCQUNJQSxrQkFDQUYsUUFBQUEsT0FBTSxDQUFDSyxRQUFRO2dCQUVyQlQsQ0FBQUEsR0FBQUEsV0FBQUEsV0FBQUEsRUFBWUMsS0FBS0MsU0FBUyxDQUFDO29CQUFFQyxPQUFPO29CQUFRUixNQUFNYztnQkFBUztZQUM3RCxHQUFHO1FBQ0w7SUFDRjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvY2xpZW50L2Rldi9vbi1kZW1hbmQtZW50cmllcy1jbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJvdXRlciBmcm9tICcuLi9yb3V0ZXInXG5pbXBvcnQgeyBzZW5kTWVzc2FnZSB9IGZyb20gJy4vaG90LXJlbG9hZGVyL3BhZ2VzL3dlYnNvY2tldCdcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgKHBhZ2U/OiBzdHJpbmcpID0+IHtcbiAgLy8gTmV2ZXIgc2VuZCBwaW5ncyB3aGVuIHVzaW5nIFR1cmJvcGFjayBhcyBpdCdzIG5vdCB1c2VkLlxuICAvLyBQaW5ncyB3ZXJlIG9yaWdpbmFsbHkgdXNlZCB0byBrZWVwIHRyYWNrIG9mIGFjdGl2ZSByb3V0ZXMgaW4gb24tZGVtYW5kLWVudHJpZXMgd2l0aCB3ZWJwYWNrLlxuICBpZiAocHJvY2Vzcy5lbnYuVFVSQk9QQUNLKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHBhZ2UpIHtcbiAgICAvLyBpbiBBTVAgdGhlIHJvdXRlciBpc24ndCBpbml0aWFsaXplZCBvbiB0aGUgY2xpZW50IGFuZFxuICAgIC8vIGNsaWVudC10cmFuc2l0aW9ucyBkb24ndCBvY2N1ciBzbyBwaW5nIGluaXRpYWwgcGFnZVxuICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHNlbmRNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHsgZXZlbnQ6ICdwaW5nJywgcGFnZSB9KSlcbiAgICB9LCAyNTAwKVxuICB9IGVsc2Uge1xuICAgIFJvdXRlci5yZWFkeSgoKSA9PiB7XG4gICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIC8vIHdoZW4gbm90Rm91bmQ6IHRydWUgaXMgcmV0dXJuZWQgd2Ugc2hvdWxkIHVzZSB0aGUgbm90Rm91bmRQYWdlXG4gICAgICAgIC8vIGFzIHRoZSBSb3V0ZXIucGF0aG5hbWUgd2lsbCBwb2ludCB0byB0aGUgNDA0IHBhZ2UgYnV0IHdlIHdhbnRcbiAgICAgICAgLy8gdG8gcGluZyB0aGUgc291cmNlIHBhZ2UgdGhhdCByZXR1cm5lZCBub3RGb3VuZDogdHJ1ZSBpbnN0ZWFkXG4gICAgICAgIGNvbnN0IG5vdEZvdW5kU3JjUGFnZSA9IHNlbGYuX19ORVhUX0RBVEFfXy5ub3RGb3VuZFNyY1BhZ2VcbiAgICAgICAgY29uc3QgcGF0aG5hbWUgPVxuICAgICAgICAgIChSb3V0ZXIucGF0aG5hbWUgPT09ICcvNDA0JyB8fCBSb3V0ZXIucGF0aG5hbWUgPT09ICcvX2Vycm9yJykgJiZcbiAgICAgICAgICBub3RGb3VuZFNyY1BhZ2VcbiAgICAgICAgICAgID8gbm90Rm91bmRTcmNQYWdlXG4gICAgICAgICAgICA6IFJvdXRlci5wYXRobmFtZVxuXG4gICAgICAgIHNlbmRNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHsgZXZlbnQ6ICdwaW5nJywgcGFnZTogcGF0aG5hbWUgfSkpXG4gICAgICB9LCAyNTAwKVxuICAgIH0pXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJwYWdlIiwicHJvY2VzcyIsImVudiIsIlRVUkJPUEFDSyIsInNldEludGVydmFsIiwic2VuZE1lc3NhZ2UiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnQiLCJSb3V0ZXIiLCJyZWFkeSIsIm5vdEZvdW5kU3JjUGFnZSIsInNlbGYiLCJfX05FWFRfREFUQV9fIiwicGF0aG5hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/on-demand-entries-client.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/report-hmr-latency.js":
/*!********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/report-hmr-latency.js ***!
\********************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return reportHmrLatency;\n }\n}));\nfunction reportHmrLatency(sendMessage, updatedModules, startMsSinceEpoch, endMsSinceEpoch, hasUpdate) {\n if (hasUpdate === void 0) hasUpdate = true;\n const latencyMs = endMsSinceEpoch - startMsSinceEpoch;\n console.log(\"[Fast Refresh] done in \" + latencyMs + \"ms\");\n if (!hasUpdate) {\n return;\n }\n sendMessage(JSON.stringify({\n event: 'client-hmr-latency',\n id: window.__nextDevClientId,\n startTime: startMsSinceEpoch,\n endTime: endMsSinceEpoch,\n page: window.location.pathname,\n updatedModules,\n // Whether the page (tab) was hidden at the time the event occurred.\n // This can impact the accuracy of the event's timing.\n isPageHidden: document.visibilityState === 'hidden'\n }));\n if (self.__NEXT_HMR_LATENCY_CB) {\n self.__NEXT_HMR_LATENCY_CB(latencyMs);\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=report-hmr-latency.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9yZXBvcnQtaG1yLWxhdGVuY3kuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FpQkE7OztlQUF3QkE7OztBQUFULFNBQVNBLGlCQUN0QkMsV0FBc0MsRUFDdENDLGNBQThDLEVBQzlDQyxpQkFBeUIsRUFDekJDLGVBQXVCLEVBQ3ZCQyxTQUF5QjtJQUF6QkEsSUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsWUFBcUI7SUFFckIsTUFBTUMsWUFBWUYsa0JBQWtCRDtJQUNwQ0ksUUFBUUMsR0FBRyxDQUFFLDRCQUF5QkYsWUFBVTtJQUNoRCxJQUFJLENBQUNELFdBQVc7UUFDZDtJQUNGO0lBQ0FKLFlBQ0VRLEtBQUtDLFNBQVMsQ0FBQztRQUNiQyxPQUFPO1FBQ1BDLElBQUlDLE9BQU9DLGlCQUFpQjtRQUM1QkMsV0FBV1o7UUFDWGEsU0FBU1o7UUFDVGEsTUFBTUosT0FBT0ssUUFBUSxDQUFDQyxRQUFRO1FBQzlCakI7UUFDQSxvRUFBb0U7UUFDcEUsc0RBQXNEO1FBQ3REa0IsY0FBY0MsU0FBU0MsZUFBZSxLQUFLO0lBQzdDO0lBRUYsSUFBSUMsS0FBS0MscUJBQXFCLEVBQUU7UUFDOUJELEtBQUtDLHFCQUFxQixDQUFDbEI7SUFDN0I7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvc3JjL2NsaWVudC9kZXYvcmVwb3J0LWhtci1sYXRlbmN5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19ORVhUX0hNUl9MQVRFTkNZX0NCOiAoKGxhdGVuY3lNczogbnVtYmVyKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxuICB9XG59XG5cbi8qKlxuICogTG9ncyBpbmZvcm1hdGlvbiBhYm91dCBhIGNvbXBsZXRlZCBITVIgdG8gdGhlIGNvbnNvbGUsIHRoZSBzZXJ2ZXIgKHZpYSBhXG4gKiBgY2xpZW50LWhtci1sYXRlbmN5YCBldmVudCksIGFuZCB0byBgc2VsZi5fX05FWFRfSE1SX0xBVEVOQ1lfQ0JgIChhIGRlYnVnZ2luZ1xuICogaG9vaykuXG4gKlxuICogQHBhcmFtIGhhc1VwZGF0ZSBTZXQgdGhpcyB0byBgZmFsc2VgIHRvIGF2b2lkIHJlcG9ydGluZyB0aGUgSE1SIGV2ZW50IHZpYSBhXG4gKiAgIGBjbGllbnQtaG1yLWxhdGVuY3lgIGV2ZW50IG9yIHRvIGBzZWxmLl9fTkVYVF9ITVJfTEFURU5DWV9DQmAuIFVzZWQgYnlcbiAqICAgdHVyYm9wYWNrIHdoZW4gd2UgbXVzdCByZXBvcnQgYSBtZXNzYWdlIHRvIHRoZSBicm93c2VyIGNvbnNvbGUgKGJlY2F1c2Ugd2VcbiAqICAgYWxyZWFkeSBsb2dnZWQgYSBcInJlYnVpbGRpbmdcIiBtZXNzYWdlKSwgYnV0IGl0J3Mgbm90IGEgcmVhbCBITVIsIHNvIHdlXG4gKiAgIGRvbid0IHdhbnQgdG8gaW1wYWN0IG91ciB0ZWxlbWV0cnkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcG9ydEhtckxhdGVuY3koXG4gIHNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkLFxuICB1cGRhdGVkTW9kdWxlczogUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXI+LFxuICBzdGFydE1zU2luY2VFcG9jaDogbnVtYmVyLFxuICBlbmRNc1NpbmNlRXBvY2g6IG51bWJlcixcbiAgaGFzVXBkYXRlOiBib29sZWFuID0gdHJ1ZVxuKSB7XG4gIGNvbnN0IGxhdGVuY3lNcyA9IGVuZE1zU2luY2VFcG9jaCAtIHN0YXJ0TXNTaW5jZUVwb2NoXG4gIGNvbnNvbGUubG9nKGBbRmFzdCBSZWZyZXNoXSBkb25lIGluICR7bGF0ZW5jeU1zfW1zYClcbiAgaWYgKCFoYXNVcGRhdGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICBzZW5kTWVzc2FnZShcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBldmVudDogJ2NsaWVudC1obXItbGF0ZW5jeScsXG4gICAgICBpZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkLFxuICAgICAgc3RhcnRUaW1lOiBzdGFydE1zU2luY2VFcG9jaCxcbiAgICAgIGVuZFRpbWU6IGVuZE1zU2luY2VFcG9jaCxcbiAgICAgIHBhZ2U6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgIHVwZGF0ZWRNb2R1bGVzLFxuICAgICAgLy8gV2hldGhlciB0aGUgcGFnZSAodGFiKSB3YXMgaGlkZGVuIGF0IHRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnJlZC5cbiAgICAgIC8vIFRoaXMgY2FuIGltcGFjdCB0aGUgYWNjdXJhY3kgb2YgdGhlIGV2ZW50J3MgdGltaW5nLlxuICAgICAgaXNQYWdlSGlkZGVuOiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nLFxuICAgIH0pXG4gIClcbiAgaWYgKHNlbGYuX19ORVhUX0hNUl9MQVRFTkNZX0NCKSB7XG4gICAgc2VsZi5fX05FWFRfSE1SX0xBVEVOQ1lfQ0IobGF0ZW5jeU1zKVxuICB9XG59XG4iXSwibmFtZXMiOlsicmVwb3J0SG1yTGF0ZW5jeSIsInNlbmRNZXNzYWdlIiwidXBkYXRlZE1vZHVsZXMiLCJzdGFydE1zU2luY2VFcG9jaCIsImVuZE1zU2luY2VFcG9jaCIsImhhc1VwZGF0ZSIsImxhdGVuY3lNcyIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnQiLCJpZCIsIndpbmRvdyIsIl9fbmV4dERldkNsaWVudElkIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsInBhZ2UiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwiaXNQYWdlSGlkZGVuIiwiZG9jdW1lbnQiLCJ2aXNpYmlsaXR5U3RhdGUiLCJzZWxmIiwiX19ORVhUX0hNUl9MQVRFTkNZX0NCIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/report-hmr-latency.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/runtime-error-handler.js":
/*!***********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/runtime-error-handler.js ***!
\***********************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RuntimeErrorHandler\", ({\n enumerable: true,\n get: function() {\n return RuntimeErrorHandler;\n }\n}));\nconst RuntimeErrorHandler = {\n hadRuntimeError: false\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=runtime-error-handler.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ydW50aW1lLWVycm9yLWhhbmRsZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozt1REFBYUE7OztlQUFBQTs7O0FBQU4sTUFBTUEsc0JBQXNCO0lBQ2pDQyxpQkFBaUI7QUFDbkIiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL3NyYy9jbGllbnQvZGV2L3J1bnRpbWUtZXJyb3ItaGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgUnVudGltZUVycm9ySGFuZGxlciA9IHtcbiAgaGFkUnVudGltZUVycm9yOiBmYWxzZSxcbn1cbiJdLCJuYW1lcyI6WyJSdW50aW1lRXJyb3JIYW5kbGVyIiwiaGFkUnVudGltZUVycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/runtime-error-handler.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/has-base-path.js":
/*!***********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/has-base-path.js ***!
\***********************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hasBasePath\", ({\n enumerable: true,\n get: function() {\n return hasBasePath;\n }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ../shared/lib/router/utils/path-has-prefix */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nconst basePath = false || '';\nfunction hasBasePath(path) {\n return (0, _pathhasprefix.pathHasPrefix)(path, basePath);\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=has-base-path.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2hhcy1iYXNlLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OzsrQ0FJZ0JBOzs7ZUFBQUE7OzsyQ0FKYztBQUU5QixNQUFNQyxXQUFZQyxNQUFrQyxJQUFlO0FBRTVELFNBQVNGLFlBQVlLLElBQVk7SUFDdEMsT0FBT0MsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY0QsTUFBTUo7QUFDN0IiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9zcmMvY2xpZW50L2hhcy1iYXNlLXBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGF0aEhhc1ByZWZpeCB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtaGFzLXByZWZpeCdcblxuY29uc3QgYmFzZVBhdGggPSAocHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSCBhcyBzdHJpbmcpIHx8ICcnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNCYXNlUGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhdGhIYXNQcmVmaXgocGF0aCwgYmFzZVBhdGgpXG59XG4iXSwibmFtZXMiOlsiaGFzQmFzZVBhdGgiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsInBhdGhIYXNQcmVmaXgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/has-base-path.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/head-manager.js":
/*!**********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/head-manager.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 default: function() {\n return initHeadManager;\n },\n isEqualNode: function() {\n return isEqualNode;\n }\n});\nconst _setattributesfromprops = __webpack_require__(/*! ./set-attributes-from-props */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/set-attributes-from-props.js\");\nfunction reactElementToDOM(param) {\n let { type, props } = param;\n const el = document.createElement(type);\n (0, _setattributesfromprops.setAttributesFromProps)(el, props);\n const { children, dangerouslySetInnerHTML } = props;\n if (dangerouslySetInnerHTML) {\n el.innerHTML = dangerouslySetInnerHTML.__html || '';\n } else if (children) {\n el.textContent = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';\n }\n return el;\n}\nfunction isEqualNode(oldTag, newTag) {\n if (oldTag instanceof HTMLElement && newTag instanceof HTMLElement) {\n const nonce = newTag.getAttribute('nonce');\n // Only strip the nonce if `oldTag` has had it stripped. An element's nonce attribute will not\n // be stripped if there is no content security policy response header that includes a nonce.\n if (nonce && !oldTag.getAttribute('nonce')) {\n const cloneTag = newTag.cloneNode(true);\n cloneTag.setAttribute('nonce', '');\n cloneTag.nonce = nonce;\n return nonce === oldTag.nonce && oldTag.isEqualNode(cloneTag);\n }\n }\n return oldTag.isEqualNode(newTag);\n}\nfunction updateElements(type, components) {\n const headEl = document.querySelector('head');\n if (!headEl) return;\n const oldTags = new Set(headEl.querySelectorAll(\"\" + type + \"[data-next-head]\"));\n if (type === 'meta') {\n const metaCharset = headEl.querySelector('meta[charset]');\n if (metaCharset !== null) {\n oldTags.add(metaCharset);\n }\n }\n const newTags = [];\n for(let i = 0; i < components.length; i++){\n const component = components[i];\n const newTag = reactElementToDOM(component);\n newTag.setAttribute('data-next-head', '');\n let isNew = true;\n for (const oldTag of oldTags){\n if (isEqualNode(oldTag, newTag)) {\n oldTags.delete(oldTag);\n isNew = false;\n break;\n }\n }\n if (isNew) {\n newTags.push(newTag);\n }\n }\n for (const oldTag of oldTags){\n var _oldTag_parentNode;\n (_oldTag_parentNode = oldTag.parentNode) == null ? void 0 : _oldTag_parentNode.removeChild(oldTag);\n }\n for (const newTag of newTags){\n // meta[charset] must be first element so special case\n if (newTag.tagName.toLowerCase() === 'meta' && newTag.getAttribute('charset') !== null) {\n headEl.prepend(newTag);\n }\n headEl.appendChild(newTag);\n }\n}\nfunction initHeadManager() {\n return {\n mountedInstances: new Set(),\n updateHead: (head)=>{\n const tags = {};\n head.forEach((h)=>{\n if (// it won't be inlined. In this case revert to the original behavior\n h.type === 'link' && h.props['data-optimized-fonts']) {\n if (document.querySelector('style[data-href=\"' + h.props['data-href'] + '\"]')) {\n return;\n } else {\n h.props.href = h.props['data-href'];\n h.props['data-href'] = undefined;\n }\n }\n const components = tags[h.type] || [];\n components.push(h);\n tags[h.type] = components;\n });\n const titleComponent = tags.title ? tags.title[0] : null;\n let title = '';\n if (titleComponent) {\n const { children } = titleComponent.props;\n title = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';\n }\n if (title !== document.title) document.title = title;\n [\n 'meta',\n 'base',\n 'link',\n 'style',\n 'script'\n ].forEach((type)=>{\n updateElements(type, tags[type] || []);\n });\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=head-manager.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2hlYWQtbWFuYWdlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFxR0EsT0FnREM7ZUFoRHVCQTs7SUFqRVJDLFdBQVc7ZUFBWEE7OztvREFwQ3VCO0FBSXZDLFNBQVNDLGtCQUFrQixLQUE0QjtJQUE1QixNQUFFQyxJQUFJLEVBQUVDLEtBQUssRUFBZSxHQUE1QjtJQUN6QixNQUFNQyxLQUFrQkMsU0FBU0MsYUFBYSxDQUFDSjtJQUMvQ0ssQ0FBQUEsR0FBQUEsd0JBQUFBLHNCQUFBQSxFQUF1QkgsSUFBSUQ7SUFFM0IsTUFBTSxFQUFFSyxRQUFRLEVBQUVDLHVCQUF1QixFQUFFLEdBQUdOO0lBQzlDLElBQUlNLHlCQUF5QjtRQUMzQkwsR0FBR00sU0FBUyxHQUFHRCx3QkFBd0JFLE1BQU0sSUFBSTtJQUNuRCxPQUFPLElBQUlILFVBQVU7UUFDbkJKLEdBQUdRLFdBQVcsR0FDWixPQUFPSixhQUFhLFdBQ2hCQSxXQUNBSyxNQUFNQyxPQUFPLENBQUNOLFlBQ1pBLFNBQVNPLElBQUksQ0FBQyxNQUNkO0lBQ1Y7SUFDQSxPQUFPWDtBQUNUO0FBZ0JPLFNBQVNKLFlBQVlnQixNQUFlLEVBQUVDLE1BQWU7SUFDMUQsSUFBSUQsa0JBQWtCRSxlQUFlRCxrQkFBa0JDLGFBQWE7UUFDbEUsTUFBTUMsUUFBUUYsT0FBT0csWUFBWSxDQUFDO1FBQ2xDLDhGQUE4RjtRQUM5Riw0RkFBNEY7UUFDNUYsSUFBSUQsU0FBUyxDQUFDSCxPQUFPSSxZQUFZLENBQUMsVUFBVTtZQUMxQyxNQUFNQyxXQUFXSixPQUFPSyxTQUFTLENBQUM7WUFDbENELFNBQVNFLFlBQVksQ0FBQyxTQUFTO1lBQy9CRixTQUFTRixLQUFLLEdBQUdBO1lBQ2pCLE9BQU9B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QVNrRCxLQUFLLEdBQUdBO1lBQzlDO2dCQUFDO2dCQUFRO2dCQUFRO2dCQUFRO2dCQUFTO2FBQVMsQ0FBQ0wsT0FBTyxDQUFDLENBQUNoRDtnQkFDcERzQixlQUFldEIsTUFBTStDLElBQUksQ0FBQy9DLEtBQUssSUFBSSxFQUFFO1lBQ3ZDO1FBQ0Y7SUFDRjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC9oZWFkLW1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2V0QXR0cmlidXRlc0Zyb21Qcm9wcyB9IGZyb20gJy4vc2V0LWF0dHJpYnV0ZXMtZnJvbS1wcm9wcydcblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tICdyZWFjdCdcblxuZnVuY3Rpb24gcmVhY3RFbGVtZW50VG9ET00oeyB0eXBlLCBwcm9wcyB9OiBKU1guRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKVxuICBzZXRBdHRyaWJ1dGVzRnJvbVByb3BzKGVsLCBwcm9wcylcblxuICBjb25zdCB7IGNoaWxkcmVuLCBkYW5nZXJvdXNseVNldElubmVySFRNTCB9ID0gcHJvcHNcbiAgaWYgKGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSB7XG4gICAgZWwuaW5uZXJIVE1MID0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sIHx8ICcnXG4gIH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcbiAgICBlbC50ZXh0Q29udGVudCA9XG4gICAgICB0eXBlb2YgY2hpbGRyZW4gPT09ICdzdHJpbmcnXG4gICAgICAgID8gY2hpbGRyZW5cbiAgICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkcmVuKVxuICAgICAgICAgID8gY2hpbGRyZW4uam9pbignJylcbiAgICAgICAgICA6ICcnXG4gIH1cbiAgcmV0dXJuIGVsXG59XG5cbi8qKlxuICogV2hlbiBhIGBub25jZWAgaXMgcHJlc2VudCBvbiBhbiBlbGVtZW50LCBicm93c2VycyBzdWNoIGFzIENocm9tZSBhbmQgRmlyZWZveCBzdHJpcCBpdCBvdXQgb2YgdGhlXG4gKiBhY3R1YWwgSFRNTCBhdHRyaWJ1dGVzIGZvciBzZWN1cml0eSByZWFzb25zICp3aGVuIHRoZSBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBkb2N1bWVudCouIFRodXMsXG4gKiBnaXZlbiB0d28gZXF1aXZhbGVudCBlbGVtZW50cyB0aGF0IGhhdmUgbm9uY2VzLCBgRWxlbWVudCxpc0VxdWFsTm9kZSgpYCB3aWxsIHJldHVybiBmYWxzZSBpZiBvbmVcbiAqIG9mIHRob3NlIGVsZW1lbnRzIGdldHMgYWRkZWQgdG8gdGhlIGRvY3VtZW50LiBBbHRob3VnaCB0aGUgYGVsZW1lbnQubm9uY2VgIHByb3BlcnR5IHdpbGwgYmUgdGhlXG4gKiBzYW1lIGZvciBib3RoIGVsZW1lbnRzLCB0aGUgb25lIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBkb2N1bWVudCB3aWxsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgZm9yXG4gKiBpdHMgbm9uY2UgSFRNTCBhdHRyaWJ1dGUgdmFsdWUuXG4gKlxuICogVGhpcyBjdXN0b20gYGlzRXF1YWxOb2RlKClgIGZ1bmN0aW9uIHRoZXJlZm9yZSByZW1vdmVzIHRoZSBub25jZSB2YWx1ZSBmcm9tIHRoZSBgbmV3VGFnYCBiZWZvcmVcbiAqIGNvbXBhcmluZyBpdCB0byBgb2xkVGFnYCwgcmVzdG9yaW5nIGl0IGFmdGVyd2FyZHMuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZTpcbiAqIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEyMTE0NzEjYzEyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VxdWFsTm9kZShvbGRUYWc6IEVsZW1lbnQsIG5ld1RhZzogRWxlbWVudCkge1xuICBpZiAob2xkVGFnIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgbmV3VGFnIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBub25jZSA9IG5ld1RhZy5nZXRBdHRyaWJ1dGUoJ25vbmNlJylcbiAgICAvLyBPbmx5IHN0cmlwIHRoZSBub25jZSBpZiBgb2xkVGFnYCBoYXMgaGFkIGl0IHN0cmlwcGVkLiBBbiBlbGVtZW50J3Mgbm9uY2UgYXR0cmlidXRlIHdpbGwgbm90XG4gICAgLy8gYmUgc3RyaXBwZWQgaWYgdGhlcmUgaXMgbm8gY29udGVudCBzZWN1cml0eSBwb2xpY3kgcmVzcG9uc2UgaGVhZGVyIHRoYXQgaW5jbHVkZXMgYSBub25jZS5cbiAgICBpZiAobm9uY2UgJiYgIW9sZFRhZy5nZXRBdHRyaWJ1dGUoJ25vbmNlJykpIHtcbiAgICAgIGNvbnN0IGNsb25lVGFnID0gbmV3VGFnLmNsb25lTm9kZSh0cnVlKSBhcyB0eXBlb2YgbmV3VGFnXG4gICAgICBjbG9uZVRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgJycpXG4gICAgICBjbG9uZVRhZy5ub25jZSA9IG5vbmNlXG4gICAgICByZXR1cm4gbm9uY2UgPT09IG9sZFRhZy5ub25jZSAmJiBvbGRUYWcuaXNFcXVhbE5vZGUoY2xvbmVUYWcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9sZFRhZy5pc0VxdWFsTm9kZShuZXdUYWcpXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVsZW1lbnRzKHR5cGU6IHN0cmluZywgY29tcG9uZW50czogSlNYLkVsZW1lbnRbXSkge1xuICBjb25zdCBoZWFkRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkJylcbiAgaWYgKCFoZWFkRWwpIHJldHVyblxuXG4gIGNvbnN0IG9sZFRhZ3MgPSBuZXcgU2V0KGhlYWRFbC5xdWVyeVNlbGVjdG9yQWxsKGAke3R5cGV9W2RhdGEtbmV4dC1oZWFkXWApKVxuXG4gIGlmICh0eXBlID09PSAnbWV0YScpIHtcbiAgICBjb25zdCBtZXRhQ2hhcnNldCA9IGhlYWRFbC5xdWVyeVNlbGVjdG9yKCdtZXRhW2NoYXJzZXRdJylcbiAgICBpZiAobWV0YUNoYXJzZXQgIT09IG51bGwpIHtcbiAgICAgIG9sZFRhZ3MuYWRkKG1ldGFDaGFyc2V0KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5ld1RhZ3M6IEVsZW1lbnRbXSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbXBvbmVudHNbaV1cbiAgICBjb25zdCBuZXdUYWcgPSByZWFjdEVsZW1lbnRUb0RPTShjb21wb25lbnQpXG4gICAgbmV3VGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1uZXh0LWhlYWQnLCAnJylcblxuICAgIGxldCBpc05ldyA9IHRydWVcbiAgICBmb3IgKGNvbnN0IG9sZFRhZyBvZiBvbGRUYWdzKSB7XG4gICAgICBpZiAoaXNFcXVhbE5vZGUob2xkVGFnLCBuZXdUYWcpKSB7XG4gICAgICAgIG9sZFRhZ3MuZGVsZXRlKG9sZFRhZylcbiAgICAgICAgaXNOZXcgPSBmYWxzZVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc05ldykge1xuICAgICAgbmV3VGFncy5wdXNoKG5ld1RhZylcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IG9sZFRhZyBvZiBvbGRUYWdzKSB7XG4gICAgb2xkVGFnLnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKG9sZFRhZylcbiAgfVxuXG4gIGZvciAoY29uc3QgbmV3VGFnIG9mIG5ld1RhZ3MpIHtcbiAgICAvLyBtZXRhW2NoYXJzZXRdIG11c3QgYmUgZmlyc3QgZWxlbWVudCBzbyBzcGVjaWFsIGNhc2VcbiAgICBpZiAoXG4gICAgICBuZXdUYWcudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnbWV0YScgJiZcbiAgICAgIG5ld1RhZy5nZXRBdHRyaWJ1dGUoJ2NoYXJzZXQnKSAhPT0gbnVsbFxuICAgICkge1xuICAgICAgaGVhZEVsLnByZXBlbmQobmV3VGFnKVxuICAgIH1cbiAgICBoZWFkRWwuYXBwZW5kQ2hpbGQobmV3VGFnKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRIZWFkTWFuYWdlcigpOiB7XG4gIG1vdW50ZWRJbnN0YW5jZXM6IFNldDx1bmtub3duPlxuICB1cGRhdGVIZWFkOiAoaGVhZDogSlNYLkVsZW1lbnRbXSkgPT4gdm9pZFxufSB7XG4gIHJldHVybiB7XG4gICAgbW91bnRlZEluc3RhbmNlczogbmV3IFNldCgpLFxuICAgIHVwZGF0ZUhlYWQ6IChoZWFkOiBKU1guRWxlbWVudFtdKSA9PiB7XG4gICAgICBjb25zdCB0YWdzOiBSZWNvcmQ8c3RyaW5nLCBKU1guRWxlbWVudFtdPiA9IHt9XG5cbiAgICAgIGhlYWQuZm9yRWFjaCgoaCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gSWYgdGhlIGZvbnQgdGFnIGlzIGxvYWRlZCBvbmx5IG9uIGNsaWVudCBuYXZpZ2F0aW9uXG4gICAgICAgICAgLy8gaXQgd29uJ3QgYmUgaW5saW5lZC4gSW4gdGhpcyBjYXNlIHJldmVydCB0byB0aGUgb3JpZ2luYWwgYmVoYXZpb3JcbiAgICAgICAgICBoLnR5cGUgPT09ICdsaW5rJyAmJlxuICAgICAgICAgIGgucHJvcHNbJ2RhdGEtb3B0aW1pemVkLWZvbnRzJ11cbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc3R5bGVbZGF0YS1ocmVmPVwiJHtoLnByb3BzWydkYXRhLWhyZWYnXX1cIl1gKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGgucHJvcHMuaHJlZiA9IGgucHJvcHNbJ2RhdGEtaHJlZiddXG4gICAgICAgICAgICBoLnByb3BzWydkYXRhLWhyZWYnXSA9IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0YWdzW2gudHlwZV0gfHwgW11cbiAgICAgICAgY29tcG9uZW50cy5wdXNoKGgpXG4gICAgICAgIHRhZ3NbaC50eXBlXSA9IGNvbXBvbmVudHNcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHRpdGxlQ29tcG9uZW50ID0gdGFncy50aXRsZSA/IHRhZ3MudGl0bGVbMF0gOiBudWxsXG4gICAgICBsZXQgdGl0bGUgPSAnJ1xuICAgICAgaWYgKHRpdGxlQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHRpdGxlQ29tcG9uZW50LnByb3BzXG4gICAgICAgIHRpdGxlID1cbiAgICAgICAgICB0eXBlb2YgY2hpbGRyZW4gPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGNoaWxkcmVuXG4gICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pXG4gICAgICAgICAgICAgID8gY2hpbGRyZW4uam9pbignJylcbiAgICAgICAgICAgICAgOiAnJ1xuICAgICAgfVxuICAgICAgaWYgKHRpdGxlICE9PSBkb2N1bWVudC50aXRsZSkgZG9jdW1lbnQudGl0bGUgPSB0aXRsZVxuICAgICAgO1snbWV0YScsICdiYXNlJywgJ2xpbmsnLCAnc3R5bGUnLCAnc2NyaXB0J10uZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICB1cGRhdGVFbGVtZW50cyh0eXBlLCB0YWdzW3R5cGVdIHx8IFtdKVxuICAgICAgfSlcbiAgICB9LFxuICB9XG59XG4iXSwibmFtZXMiOlsiaW5pdEhlYWRNYW5hZ2VyIiwiaXNFcXVhbE5vZGUiLCJyZWFjdEVsZW1lbnRUb0RPTSIsInR5cGUiLCJwcm9wcyIsImVsIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlc0Zyb21Qcm9wcyIsImNoaWxkcmVuIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJpbm5lckhUTUwiLCJfX2h0bWwiLCJ0ZXh0Q29udGVudCIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJvbGRUYWciLCJuZXdUYWciLCJIVE1MRWxlbWVudCIsIm5vbmNlIiwiZ2V0QXR0cmlidXRlIiwiY2xvbmVUYWciLCJjbG9uZU5vZGUiLCJzZXRBdHRyaWJ1dGUiLCJ1cGRhdGVFbGVtZW50cyIsImNvbXBvbmVudHMiLCJoZWFkRWwiLCJxdWVyeVNlbGVjdG9yIiwib2xkVGFncyIsIlNldCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJtZXRhQ2hhcnNldCIsImFkZCIsIm5ld1RhZ3MiLCJpIiwibGVuZ3RoIiwiY29tcG9uZW50IiwiaXNOZXciLCJkZWxldGUiLCJwdXNoIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwicHJlcGVuZCIsImFwcGVuZENoaWxkIiwibW91bnRlZEluc3RhbmNlcyIsInVwZGF0ZUhlYWQiLCJoZWFkIiwidGFncyIsImZvckVhY2giLCJoIiwiaHJlZiIsInVuZGVmaW5lZCIsInRpdGxlQ29tcG9uZW50IiwidGl0bGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/head-manager.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/index.js":
/*!***************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/index.js ***!
\***************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/* global location */ // imports polyfill from `@next/polyfill-module` after build.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nvar _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $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 emitter: function() {\n return emitter;\n },\n hydrate: function() {\n return hydrate;\n },\n initialize: function() {\n return initialize;\n },\n router: function() {\n return router;\n },\n version: function() {\n return version;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js\");\n__webpack_require__(/*! ../build/polyfills/polyfill-module */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/polyfills/polyfill-module.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst _client = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom/client */ \"(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/client.js\"));\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ../shared/lib/head-manager-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/mitt */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/mitt.js\"));\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router-context.shared-runtime.js\");\nconst _disablesmoothscroll = __webpack_require__(/*! ../shared/lib/router/utils/disable-smooth-scroll */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js\");\nconst _isdynamic = __webpack_require__(/*! ../shared/lib/router/utils/is-dynamic */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _runtimeconfigexternal = __webpack_require__(/*! ../shared/lib/runtime-config.external */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/runtime-config.external.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils.js\");\nconst _portal = __webpack_require__(/*! ./portal */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/portal/index.js\");\nconst _headmanager = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./head-manager */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/head-manager.js\"));\nconst _pageloader = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./page-loader */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/page-loader.js\"));\nconst _routeannouncer = __webpack_require__(/*! ./route-announcer */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/route-announcer.js\");\nconst _router = __webpack_require__(/*! ./router */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/router.js\");\nconst _iserror = __webpack_require__(/*! ../lib/is-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-error.js\");\nconst _imageconfigcontextsharedruntime = __webpack_require__(/*! ../shared/lib/image-config-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js\");\nconst _removebasepath = __webpack_require__(/*! ./remove-base-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/remove-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ./has-base-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/has-base-path.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../shared/lib/app-router-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _adapters = __webpack_require__(/*! ../shared/lib/router/adapters */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/adapters.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../shared/lib/hooks-client-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _onrecoverableerror = __webpack_require__(/*! ./react-client-callbacks/on-recoverable-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js\");\nconst _tracer = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./tracing/tracer */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/tracing/tracer.js\"));\nconst _isnextroutererror = __webpack_require__(/*! ./components/is-next-router-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/is-next-router-error.js\");\nconst version = \"15.5.4\";\nlet router;\nconst emitter = (0, _mitt.default)();\nconst looseToArray = (input)=>[].slice.call(input);\nlet initialData;\nlet defaultLocale = undefined;\nlet asPath;\nlet pageLoader;\nlet appElement;\nlet headManager;\nlet initialMatchesMiddleware = false;\nlet lastAppProps;\nlet lastRenderReject;\nlet devClient;\nlet CachedApp, onPerfEntry;\nlet CachedComponent;\nclass Container extends _react.default.Component {\n componentDidCatch(componentErr, info) {\n this.props.fn(componentErr, info);\n }\n componentDidMount() {\n this.scrollToHash();\n // We need to replace the router state if:\n // - the page was (auto) exported and has a query string or search (hash)\n // - it was auto exported and is a dynamic route (to provide params)\n // - if it is a client-side skeleton (fallback render)\n // - if middleware matches the current page (may have rewrite params)\n // - if rewrites in next.config.js match (may have rewrite params)\n if (router.isSsr && (initialData.isFallback || initialData.nextExport && ((0, _isdynamic.isDynamicRoute)(router.pathname) || location.search || false || initialMatchesMiddleware) || initialData.props && initialData.props.__N_SSG && (location.search || false || initialMatchesMiddleware))) {\n // update query on mount for exported pages\n router.replace(router.pathname + '?' + String((0, _querystring.assign)((0, _querystring.urlQueryToSearchParams)(router.query), new URLSearchParams(location.search))), asPath, {\n // @ts-ignore\n // WARNING: `_h` is an internal option for handing Next.js\n // client-side hydration. Your app should _never_ use this property.\n // It may change at any time without notice.\n _h: 1,\n // Fallback pages must trigger the data fetch, so the transition is\n // not shallow.\n // Other pages (strictly updating query) happens shallowly, as data\n // requirements would already be present.\n shallow: !initialData.isFallback && !initialMatchesMiddleware\n }).catch((err)=>{\n if (!err.cancelled) throw err;\n });\n }\n }\n componentDidUpdate() {\n this.scrollToHash();\n }\n scrollToHash() {\n let { hash } = location;\n hash = hash && hash.substring(1);\n if (!hash) return;\n const el = document.getElementById(hash);\n if (!el) return;\n // If we call scrollIntoView() in here without a setTimeout\n // it won't scroll properly.\n setTimeout(()=>el.scrollIntoView(), 0);\n }\n render() {\n if (false) {} else {\n const { PagesDevOverlayBridge } = __webpack_require__(/*! ../next-devtools/userspace/pages/pages-dev-overlay-setup */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.js\");\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(PagesDevOverlayBridge, {\n children: this.props.children\n });\n }\n }\n}\nasync function initialize(opts) {\n if (opts === void 0) opts = {};\n // This makes sure this specific lines are removed in production\n if (true) {\n _tracer.default.onSpanEnd((__webpack_require__(/*! ./tracing/report-to-socket */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/tracing/report-to-socket.js\")[\"default\"]));\n devClient = opts.devClient;\n }\n initialData = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);\n window.__NEXT_DATA__ = initialData;\n defaultLocale = initialData.defaultLocale;\n const prefix = initialData.assetPrefix || '';\n self.__next_set_public_path__(\"\" + prefix + \"/_next/\") //eslint-disable-line\n ;\n // Initialize next/config with the environment configuration\n (0, _runtimeconfigexternal.setConfig)({\n serverRuntimeConfig: {},\n publicRuntimeConfig: initialData.runtimeConfig || {}\n });\n asPath = (0, _utils.getURL)();\n // make sure not to attempt stripping basePath for 404s\n if ((0, _hasbasepath.hasBasePath)(asPath)) {\n asPath = (0, _removebasepath.removeBasePath)(asPath);\n }\n if (false) {}\n if (initialData.scriptLoader) {\n const { initScriptLoader } = __webpack_require__(/*! ./script */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/script.js\");\n initScriptLoader(initialData.scriptLoader);\n }\n pageLoader = new _pageloader.default(initialData.buildId, prefix);\n const register = (param)=>{\n let [r, f] = param;\n return pageLoader.routeLoader.onEntrypoint(r, f);\n };\n if (window.__NEXT_P) {\n // Defer page registration for another tick. This will increase the overall\n // latency in hydrating the page, but reduce the total blocking time.\n window.__NEXT_P.map((p)=>setTimeout(()=>register(p), 0));\n }\n window.__NEXT_P = [];\n window.__NEXT_P.push = register;\n headManager = (0, _headmanager.default)();\n headManager.getIsSsr = ()=>{\n return router.isSsr;\n };\n appElement = document.getElementById('__next');\n return {\n assetPrefix: prefix\n };\n}\nfunction renderApp(App, appProps) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(App, {\n ...appProps\n });\n}\nfunction AppContainer(param) {\n _s();\n let { children } = param;\n // Create a memoized value for next/navigation router context.\n const adaptedForAppRouter = _react.default.useMemo({\n \"AppContainer.useMemo[adaptedForAppRouter]\": ()=>{\n return (0, _adapters.adaptForAppRouterInstance)(router);\n }\n }[\"AppContainer.useMemo[adaptedForAppRouter]\"], []);\n var _self___NEXT_DATA___autoExport;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Container, {\n fn: (error)=>// eslint-disable-next-line @typescript-eslint/no-use-before-define\n renderError({\n App: CachedApp,\n err: error\n }).catch((err)=>console.error('Error rendering page: ', err)),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.AppRouterContext.Provider, {\n value: adaptedForAppRouter,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.SearchParamsContext.Provider, {\n value: (0, _adapters.adaptForSearchParams)(router),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_adapters.PathnameContextProviderAdapter, {\n router: router,\n isAutoExport: (_self___NEXT_DATA___autoExport = self.__NEXT_DATA__.autoExport) != null ? _self___NEXT_DATA___autoExport : false,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathParamsContext.Provider, {\n value: (0, _adapters.adaptForPathParams)(router),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_routercontextsharedruntime.RouterContext.Provider, {\n value: (0, _router.makePublicRouterInstance)(router),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_headmanagercontextsharedruntime.HeadManagerContext.Provider, {\n value: headManager,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_imageconfigcontextsharedruntime.ImageConfigContext.Provider, {\n value: {\"deviceSizes\":[640,750,828,1080,1200,1920,2048,3840],\"imageSizes\":[16,32,48,64,96,128,256,384],\"path\":\"/_next/image\",\"loader\":\"default\",\"dangerouslyAllowSVG\":false,\"unoptimized\":false,\"domains\":[],\"remotePatterns\":[]},\n children: children\n })\n })\n })\n })\n })\n })\n })\n });\n}\n_s(AppContainer, \"F6BSfrFQNeqenuPnUMVY/6gI8uE=\");\n_c = AppContainer;\nconst wrapApp = (App)=>(wrappedAppProps)=>{\n const appProps = {\n ...wrappedAppProps,\n Component: CachedComponent,\n err: initialData.err,\n router\n };\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(AppContainer, {\n children: renderApp(App, appProps)\n });\n };\n// This method handles all runtime and debug errors.\n// 404 and 500 errors are special kind of errors\n// and they are still handle via the main render method.\nfunction renderError(renderErrorProps) {\n let { App, err } = renderErrorProps;\n // In development runtime errors are caught by our overlay\n // In production we catch runtime errors using componentDidCatch which will trigger renderError\n if (true) {\n // A Next.js rendering runtime error is always unrecoverable\n // FIXME: let's make this recoverable (error in GIP client-transition)\n devClient.onUnrecoverableError();\n // We need to render an empty <App> so that the `<ReactDevOverlay>` can\n // render itself.\n // TODO: Fix disabled eslint rule\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return doRender({\n App: ()=>null,\n props: {},\n Component: ()=>null,\n styleSheets: []\n });\n }\n // Make sure we log the error to the console, otherwise users can't track down issues.\n console.error(err);\n console.error(\"A client-side exception has occurred, see here for more info: https://nextjs.org/docs/messages/client-side-exception-occurred\");\n return pageLoader.loadPage('/_error').then((param)=>{\n let { page: ErrorComponent, styleSheets } = param;\n return (lastAppProps == null ? void 0 : lastAppProps.Component) === ErrorComponent ? Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ../pages/_error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/pages/_error.js\"))).then((errorModule)=>{\n return Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ../pages/_app */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/pages/_app.js\"))).then((appModule)=>{\n App = appModule.default;\n renderErrorProps.App = App;\n return errorModule;\n });\n }).then((m)=>({\n ErrorComponent: m.default,\n styleSheets: []\n })) : {\n ErrorComponent,\n styleSheets\n };\n }).then((param)=>{\n let { ErrorComponent, styleSheets } = param;\n var _renderErrorProps_props;\n // In production we do a normal render with the `ErrorComponent` as component.\n // If we've gotten here upon initial render, we can use the props from the server.\n // Otherwise, we need to call `getInitialProps` on `App` before mounting.\n const AppTree = wrapApp(App);\n const appCtx = {\n Component: ErrorComponent,\n AppTree,\n router,\n ctx: {\n err,\n pathname: initialData.page,\n query: initialData.query,\n asPath,\n AppTree\n }\n };\n return Promise.resolve(((_renderErrorProps_props = renderErrorProps.props) == null ? void 0 : _renderErrorProps_props.err) ? renderErrorProps.props : (0, _utils.loadGetInitialProps)(App, appCtx)).then((initProps)=>// eslint-disable-next-line @typescript-eslint/no-use-before-define\n doRender({\n ...renderErrorProps,\n err,\n Component: ErrorComponent,\n styleSheets,\n props: initProps\n }));\n });\n}\n// Dummy component that we render as a child of Root so that we can\n// toggle the correct styles before the page is rendered.\nfunction Head(param) {\n _s1();\n let { callback } = param;\n // We use `useLayoutEffect` to guarantee the callback is executed\n // as soon as React flushes the update.\n _react.default.useLayoutEffect({\n \"Head.useLayoutEffect\": ()=>callback()\n }[\"Head.useLayoutEffect\"], [\n callback\n ]);\n return null;\n}\n_s1(Head, \"n7/vCynhJvM+pLkyL2DMQUF0odM=\");\n_c1 = Head;\nconst performanceMarks = {\n navigationStart: 'navigationStart',\n beforeRender: 'beforeRender',\n afterRender: 'afterRender',\n afterHydrate: 'afterHydrate',\n routeChange: 'routeChange'\n};\nconst performanceMeasures = {\n hydration: 'Next.js-hydration',\n beforeHydration: 'Next.js-before-hydration',\n routeChangeToRender: 'Next.js-route-change-to-render',\n render: 'Next.js-render'\n};\nlet reactRoot = null;\n// On initial render a hydrate should always happen\nlet shouldHydrate = true;\nfunction clearMarks() {\n ;\n [\n performanceMarks.beforeRender,\n performanceMarks.afterHydrate,\n performanceMarks.afterRender,\n performanceMarks.routeChange\n ].forEach((mark)=>performance.clearMarks(mark));\n}\nfunction markHydrateComplete() {\n if (!_utils.ST) return;\n performance.mark(performanceMarks.afterHydrate) // mark end of hydration\n ;\n const hasBeforeRenderMark = performance.getEntriesByName(performanceMarks.beforeRender, 'mark').length;\n if (hasBeforeRenderMark) {\n const beforeHydrationMeasure = performance.measure(performanceMeasures.beforeHydration, performanceMarks.navigationStart, performanceMarks.beforeRender);\n const hydrationMeasure = performance.measure(performanceMeasures.hydration, performanceMarks.beforeRender, performanceMarks.afterHydrate);\n if ( true && // Old versions of Safari don't return `PerformanceMeasure`s from `performance.measure()`\n beforeHydrationMeasure && hydrationMeasure) {\n _tracer.default.startSpan('navigation-to-hydration', {\n startTime: performance.timeOrigin + beforeHydrationMeasure.startTime,\n attributes: {\n pathname: location.pathname,\n query: location.search\n }\n }).end(performance.timeOrigin + hydrationMeasure.startTime + hydrationMeasure.duration);\n }\n }\n if (onPerfEntry) {\n performance.getEntriesByName(performanceMeasures.hydration).forEach(onPerfEntry);\n }\n clearMarks();\n}\nfunction markRenderComplete() {\n if (!_utils.ST) return;\n performance.mark(performanceMarks.afterRender) // mark end of render\n ;\n const navStartEntries = performance.getEntriesByName(performanceMarks.routeChange, 'mark');\n if (!navStartEntries.length) return;\n const hasBeforeRenderMark = performance.getEntriesByName(performanceMarks.beforeRender, 'mark').length;\n if (hasBeforeRenderMark) {\n performance.measure(performanceMeasures.routeChangeToRender, navStartEntries[0].name, performanceMarks.beforeRender);\n performance.measure(performanceMeasures.render, performanceMarks.beforeRender, performanceMarks.afterRender);\n if (onPerfEntry) {\n performance.getEntriesByName(performanceMeasures.render).forEach(onPerfEntry);\n performance.getEntriesByName(performanceMeasures.routeChangeToRender).forEach(onPerfEntry);\n }\n }\n clearMarks();\n [\n performanceMeasures.routeChangeToRender,\n performanceMeasures.render\n ].forEach((measure)=>performance.clearMeasures(measure));\n}\nfunction renderReactElement(domEl, fn) {\n // mark start of hydrate/render\n if (_utils.ST) {\n performance.mark(performanceMarks.beforeRender);\n }\n const reactEl = fn(shouldHydrate ? markHydrateComplete : markRenderComplete);\n if (!reactRoot) {\n // Unlike with createRoot, you don't need a separate root.render() call here\n reactRoot = _client.default.hydrateRoot(domEl, reactEl, {\n onRecoverableError: _onrecoverableerror.onRecoverableError\n });\n // TODO: Remove shouldHydrate variable when React 18 is stable as it can depend on `reactRoot` existing\n shouldHydrate = false;\n } else {\n const startTransition = _react.default.startTransition;\n startTransition(()=>{\n reactRoot.render(reactEl);\n });\n }\n}\nfunction Root(param) {\n _s2();\n let { callbacks, children } = param;\n // We use `useLayoutEffect` to guarantee the callbacks are executed\n // as soon as React flushes the update\n _react.default.useLayoutEffect({\n \"Root.useLayoutEffect\": ()=>callbacks.forEach({\n \"Root.useLayoutEffect\": (callback)=>callback()\n }[\"Root.useLayoutEffect\"])\n }[\"Root.useLayoutEffect\"], [\n callbacks\n ]);\n if (false) {}\n return children;\n}\n_s2(Root, \"n7/vCynhJvM+pLkyL2DMQUF0odM=\");\n_c2 = Root;\nfunction doRender(input) {\n let { App, Component, props, err } = input;\n let styleSheets = 'initial' in input ? undefined : input.styleSheets;\n Component = Component || lastAppProps.Component;\n props = props || lastAppProps.props;\n const appProps = {\n ...props,\n Component,\n err,\n router\n };\n // lastAppProps has to be set before ReactDom.render to account for ReactDom throwing an error.\n lastAppProps = appProps;\n let canceled = false;\n let resolvePromise;\n const renderPromise = new Promise((resolve, reject)=>{\n if (lastRenderReject) {\n lastRenderReject();\n }\n resolvePromise = ()=>{\n lastRenderReject = null;\n resolve();\n };\n lastRenderReject = ()=>{\n canceled = true;\n lastRenderReject = null;\n const error = Object.defineProperty(new Error('Cancel rendering route'), \"__NEXT_ERROR_CODE\", {\n value: \"E503\",\n enumerable: false,\n configurable: true\n });\n error.cancelled = true;\n reject(error);\n };\n });\n // This function has a return type to ensure it doesn't start returning a\n // Promise. It should remain synchronous.\n function onStart() {\n if (!styleSheets || // We use `style-loader` in development, so we don't need to do anything\n // unless we're in production:\n \"development\" !== 'production') {\n return false;\n }\n const currentStyleTags = looseToArray(document.querySelectorAll('style[data-n-href]'));\n const currentHrefs = new Set(currentStyleTags.map((tag)=>tag.getAttribute('data-n-href')));\n const noscript = document.querySelector('noscript[data-n-css]');\n const nonce = noscript == null ? void 0 : noscript.getAttribute('data-n-css');\n styleSheets.forEach((param)=>{\n let { href, text } = param;\n if (!currentHrefs.has(href)) {\n const styleTag = document.createElement('style');\n styleTag.setAttribute('data-n-href', href);\n styleTag.setAttribute('media', 'x');\n if (nonce) {\n styleTag.setAttribute('nonce', nonce);\n }\n document.head.appendChild(styleTag);\n styleTag.appendChild(document.createTextNode(text));\n }\n });\n return true;\n }\n function onHeadCommit() {\n if (false) {}\n if (input.scroll) {\n const { x, y } = input.scroll;\n (0, _disablesmoothscroll.disableSmoothScrollDuringRouteTransition)(()=>{\n window.scrollTo(x, y);\n });\n }\n }\n function onRootCommit() {\n resolvePromise();\n }\n onStart();\n const elem = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {\n callback: onHeadCommit\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(AppContainer, {\n children: [\n renderApp(App, appProps),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_portal.Portal, {\n type: \"next-route-announcer\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_routeannouncer.RouteAnnouncer, {})\n })\n ]\n })\n ]\n });\n // We catch runtime errors using componentDidCatch which will trigger renderError\n renderReactElement(appElement, (callback)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(Root, {\n callbacks: [\n callback,\n onRootCommit\n ],\n children: false ? /*#__PURE__*/ 0 : elem\n }));\n return renderPromise;\n}\nasync function render(renderingProps) {\n // if an error occurs in a server-side page (e.g. in getInitialProps),\n // skip re-rendering the error page client-side as data-fetching operations\n // will already have been done on the server and NEXT_DATA contains the correct\n // data for straight-forward hydration of the error page\n if (renderingProps.err && // renderingProps.Component might be undefined if there is a top/module-level error\n (typeof renderingProps.Component === 'undefined' || !renderingProps.isHydratePass)) {\n await renderError(renderingProps);\n return;\n }\n try {\n await doRender(renderingProps);\n } catch (err) {\n const renderErr = (0, _iserror.getProperError)(err);\n // bubble up cancelation errors\n if (renderErr.cancelled) {\n throw renderErr;\n }\n if (true) {\n // Ensure this error is displayed in the overlay in development\n setTimeout(()=>{\n throw renderErr;\n });\n }\n await renderError({\n ...renderingProps,\n err: renderErr\n });\n }\n}\nasync function hydrate(opts) {\n let initialErr = initialData.err;\n try {\n const appEntrypoint = await pageLoader.routeLoader.whenEntrypoint('/_app');\n if ('error' in appEntrypoint) {\n throw appEntrypoint.error;\n }\n const { component: app, exports: mod } = appEntrypoint;\n CachedApp = app;\n if (mod && mod.reportWebVitals) {\n onPerfEntry = (param)=>{\n let { id, name, startTime, value, duration, entryType, entries, attribution } = param;\n // Combines timestamp with random number for unique ID\n const uniqueID = Date.now() + \"-\" + (Math.floor(Math.random() * (9e12 - 1)) + 1e12);\n let perfStartEntry;\n if (entries && entries.length) {\n perfStartEntry = entries[0].startTime;\n }\n const webVitals = {\n id: id || uniqueID,\n name,\n startTime: startTime || perfStartEntry,\n value: value == null ? duration : value,\n label: entryType === 'mark' || entryType === 'measure' ? 'custom' : 'web-vital'\n };\n if (attribution) {\n webVitals.attribution = attribution;\n }\n mod.reportWebVitals(webVitals);\n };\n }\n const pageEntrypoint = // error, so we need to skip waiting for the entrypoint.\n true && initialData.err ? {\n error: initialData.err\n } : await pageLoader.routeLoader.whenEntrypoint(initialData.page);\n if ('error' in pageEntrypoint) {\n throw pageEntrypoint.error;\n }\n CachedComponent = pageEntrypoint.component;\n if (true) {\n const { isValidElementType } = __webpack_require__(/*! next/dist/compiled/react-is */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react-is/index.js\");\n if (!isValidElementType(CachedComponent)) {\n throw Object.defineProperty(new Error('The default export is not a React Component in page: \"' + initialData.page + '\"'), \"__NEXT_ERROR_CODE\", {\n value: \"E286\",\n enumerable: false,\n configurable: true\n });\n }\n }\n } catch (error) {\n // This catches errors like throwing in the top level of a module\n initialErr = (0, _iserror.getProperError)(error);\n }\n if (true) {\n const getServerError = (__webpack_require__(/*! ../server/dev/node-stack-frames */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/node-stack-frames.js\").getServerError);\n // Server-side runtime errors need to be re-thrown on the client-side so\n // that the overlay is rendered.\n if (initialErr) {\n if (initialErr === initialData.err) {\n setTimeout(()=>{\n let error;\n try {\n // Generate a new error object. We `throw` it because some browsers\n // will set the `stack` when thrown, and we want to ensure ours is\n // not overridden when we re-throw it below.\n throw Object.defineProperty(new Error(initialErr.message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n } catch (e) {\n error = e;\n }\n error.name = initialErr.name;\n error.stack = initialErr.stack;\n const errSource = initialErr.source;\n // In development, error the navigation API usage in runtime,\n // since it's not allowed to be used in pages router as it doesn't contain error boundary like app router.\n if ((0, _isnextroutererror.isNextRouterError)(initialErr)) {\n error.message = 'Next.js navigation API is not allowed to be used in Pages Router.';\n }\n throw getServerError(error, errSource);\n });\n } else {\n setTimeout(()=>{\n throw initialErr;\n });\n }\n }\n }\n if (window.__NEXT_PRELOADREADY) {\n await window.__NEXT_PRELOADREADY(initialData.dynamicIds);\n }\n router = (0, _router.createRouter)(initialData.page, initialData.query, asPath, {\n initialProps: initialData.props,\n pageLoader,\n App: CachedApp,\n Component: CachedComponent,\n wrapApp,\n err: initialErr,\n isFallback: Boolean(initialData.isFallback),\n subscription: (info, App, scroll)=>render(Object.assign({}, info, {\n App,\n scroll\n })),\n locale: initialData.locale,\n locales: initialData.locales,\n defaultLocale,\n domainLocales: initialData.domainLocales,\n isPreview: initialData.isPreview\n });\n initialMatchesMiddleware = await router._initialMatchesMiddlewarePromise;\n const renderCtx = {\n App: CachedApp,\n initial: true,\n Component: CachedComponent,\n props: initialData.props,\n err: initialErr,\n isHydratePass: true\n };\n if (opts == null ? void 0 : opts.beforeRender) {\n await opts.beforeRender();\n }\n render(renderCtx);\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=index.js.map\nvar _c, _c1, _c2;\n$RefreshReg$(_c, \"AppContainer\");\n$RefreshReg$(_c1, \"Head\");\n$RefreshReg$(_c2, \"Root\");\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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQixHQUNuQiw2REFBNkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUEwRWhEQSxPQUFPO2VBQVBBOztJQWl3QlNDLE9BQU87ZUFBUEE7O0lBOW9CQUMsVUFBVTtlQUFWQTs7SUFwSFhDLE1BQU07ZUFBTkE7O0lBREVDLE9BQU87ZUFBUEE7Ozs7O29CQXZFTjs0RUFReUI7NkVBQ1g7NkRBQ2M7MkVBQ2xCO3dEQUVhO2lEQUMyQjt1Q0FDMUI7eUNBSXhCO21EQUNtQjttQ0FDc0I7b0NBRXpCO2tGQUNLO2lGQUNMOzRDQUVRO29DQUN3QjtxQ0FDeEI7NkRBQ0k7NENBRUo7eUNBQ0g7MkRBQ0s7c0NBTTFCOzZEQUlBO2dEQUM0Qjs2RUFDaEI7K0NBQ2U7QUF3QjNCLE1BQU1BLFVBQVVDLFFBQVFDO0FBQ3hCLElBQUlIO0FBQ0osTUFBTUgsVUFBK0JRLENBQUFBLEdBQUFBLE1BQUFBLE9BQUFBO0FBRTVDLE1BQU1DLGVBQWUsQ0FBZUMsUUFBb0IsRUFBRSxDQUFDQyxLQUFLLENBQUNDLElBQUksQ0FBQ0Y7QUFFdEUsSUFBSUc7QUFDSixJQUFJQyxnQkFBb0NDO0FBQ3hDLElBQUlDO0FBQ0osSUFBSUM7QUFDSixJQUFJQztBQUNKLElBQUlDO0FBS0osSUFBSUMsMkJBQTJCO0FBQy9CLElBQUlDO0FBRUosSUFBSUM7QUFDSixJQUFJQztBQUVKLElBQUlDLFdBQXlCQztBQUM3QixJQUFJQztBQUVKLE1BQU1DLGtCQUFrQkMsT0FBQUEsT0FBSyxDQUFDQyxTQUFTO0lBSXJDQyxrQkFBa0JDLFlBQW1CLEVBQUVDLElBQVMsRUFBRTtRQUNoRCxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsRUFBRSxDQUFDSCxjQUFjQztJQUM5QjtJQUVBRyxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDQyxZQUFZO1FBRWpCLDBDQUEwQztRQUMxQyx5RUFBeUU7UUFDekUsb0VBQW9FO1FBQ3BFLHNEQUFzRDtRQUN0RCxxRUFBcUU7UUFDckUsa0VBQWtFO1FBQ2xFLElBQ0VqQyxPQUFPa0MsS0FBSyxJQUNYeEIsYUFBWXlCLFVBQVUsSUFDcEJ6QixZQUFZMEIsVUFBVSxJQUNwQkMsQ0FBQUEsQ0FBQUEsR0FBQUEsV0FBQUEsY0FBYyxFQUFDckMsT0FBT3NDLFFBQVEsS0FDN0JDLFNBQVNDLE1BQU0sSUFDZnRDLEtBQStCLElBQy9CZSx3QkFBQUEsQ0FBdUIsSUFDMUJQLFlBQVlvQixLQUFLLElBQ2hCcEIsWUFBWW9CLEtBQUssQ0FBQ1ksT0FBTyxJQUN4QkgsQ0FBQUEsU0FBU0MsTUFBTSxJQUNkdEMsS0FBK0IsSUFDL0JlLHdCQUFBQSxDQUF1QixDQUFFLEVBQy9CO1lBQ0EsMkNBQTJDO1lBQzNDakIsT0FDRzJDLE9BQU8sQ0FDTjNDLE9BQU9zQyxRQUFRLEdBQ2IsTUFDQU0sT0FDRUMsQ0FBQUEsR0FBQUEsYUFBQUEsTUFBQUEsRUFDRUMsQ0FBQUEsR0FBQUEsYUFBQUEsc0JBQUFBLEVBQXVCOUMsT0FBTytDLEtBQUssR0FDbkMsSUFBSUMsZ0JBQWdCVCxTQUFTQyxNQUFNLEtBR3pDM0IsUUFDQTtnQkFDRSxhQUFhO2dCQUNiLDBEQUEwRDtnQkFDMUQsb0VBQW9FO2dCQUNwRSw0Q0FBNEM7Z0JBQzVDb0MsSUFBSTtnQkFDSixtRUFBbUU7Z0JBQ25FLGVBQWU7Z0JBQ2YsbUVBQW1FO2dCQUNuRSx5Q0FBeUM7Z0JBQ3pDQyxTQUFTLENBQUN4QyxZQUFZeUIsVUFBVSxJQUFJLENBQUNsQjtZQUN2QyxHQUVEa0MsS0FBSyxDQUFDLENBQUNDO2dCQUNOLElBQUksQ0FBQ0EsSUFBSUMsU0FBUyxFQUFFLE1BQU1EO1lBQzVCO1FBQ0o7SUFDRjtJQUVBRSxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDckIsWUFBWTtJQUNuQjtJQUVBQSxlQUFlO1FBQ2IsSUFBSSxFQUFFc0IsSUFBSSxFQUFFLEdBQUdoQjtRQUNmZ0IsT0FBT0EsUUFBUUEsS0FBS0MsU0FBUyxDQUFDO1FBQzlCLElBQUksQ0FBQ0QsTUFBTTtRQUVYLE1BQU1FLEtBQXlCQyxTQUFTQyxjQUFjLENBQUNKO1FBQ3ZELElBQUksQ0FBQ0UsSUFBSTtRQUVULDJEQUEyRDtRQUMzRCw0QkFBNEI7UUFDNUJHLFdBQVcsSUFBTUgsR0FBR0ksY0FBYyxJQUFJO0lBQ3hDO0lBRUFDLFNBQVM7UUFDUCxJQUFJNUQsS0FBb0IsRUFBbUIsRUFFMUMsTUFBTTtZQUNMLE1BQU0sRUFBRStELHFCQUFxQixFQUFFLEdBQzdCQyxtQkFBT0EsQ0FBQyxrUEFBMEQ7WUFDcEUscUJBQ0UscUJBQUNELHVCQUFBQTswQkFBdUIsSUFBSSxDQUFDbkMsS0FBSyxDQUFDa0MsUUFBUTs7UUFFL0M7SUFDRjtBQUNGO0FBRU8sZUFBZWpFLFdBQVdvRSxJQUE4QjtJQUE5QkEsSUFBQUEsU0FBQUEsS0FBQUEsR0FBQUEsT0FBNEIsQ0FBQztJQUc1RCxnRUFBZ0U7SUFDaEUsSUFBSWpFLElBQW9CLEVBQW9CO1FBQzFDa0UsUUFBQUEsT0FBTSxDQUFDQyxTQUFTLENBRVpILGdPQUNPO1FBRVg5QyxZQUFZK0MsS0FBSy9DLFNBQVM7SUFDNUI7SUFFQVYsY0FBYzZELEtBQUtDLEtBQUssQ0FDdEJkLFNBQVNDLGNBQWMsQ0FBQyxpQkFBa0JjLFdBQVc7SUFFdkRDLE9BQU9DLGFBQWEsR0FBR2pFO0lBRXZCQyxnQkFBZ0JELFlBQVlDLGFBQWE7SUFDekMsTUFBTWlFLFNBQWlCbEUsWUFBWW1FLFdBQVcsSUFBSTtJQUdoREMsS0FBYUMsd0JBQXdCLENBQUUsS0FBRUgsU0FBTyxXQUFVLHFCQUFxQjs7SUFFakYsNERBQTREO0lBQzVESSxDQUFBQSxHQUFBQSx1QkFBQUEsU0FBQUEsRUFBVTtRQUNSQyxxQkFBcUIsQ0FBQztRQUN0QkMscUJBQXFCeEUsWUFBWXlFLGFBQWEsSUFBSSxDQUFDO0lBQ3JEO0lBRUF0RSxTQUFTdUUsQ0FBQUEsR0FBQUEsT0FBQUEsTUFBQUE7SUFFVCx1REFBdUQ7SUFDdkQsSUFBSUMsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBVyxFQUFDeEUsU0FBUztRQUN2QkEsU0FBU3lFLENBQUFBLEdBQUFBLGdCQUFBQSxjQUFBQSxFQUFlekU7SUFDMUI7SUFFQSxJQUFJWCxLQUErQixFQUFFLEVBMENwQztJQUVELElBQUlRLFlBQVkwRixZQUFZLEVBQUU7UUFDNUIsTUFBTSxFQUFFQyxnQkFBZ0IsRUFBRSxHQUN4Qm5DLG1CQUFPQSxDQUFDLDBKQUFVO1FBQ3BCbUMsaUJBQWlCM0YsWUFBWTBGLFlBQVk7SUFDM0M7SUFFQXRGLGFBQWEsSUFBSXdGLFlBQUFBLE9BQVUsQ0FBQzVGLFlBQVk2RixPQUFPLEVBQUUzQjtJQUVqRCxNQUFNNEIsV0FBdUI7WUFBQyxDQUFDQyxHQUFHQyxFQUFFO2VBQ2xDNUYsV0FBVzZGLFdBQVcsQ0FBQ0MsWUFBWSxDQUFDSCxHQUFHQzs7SUFDekMsSUFBSWhDLE9BQU9tQyxRQUFRLEVBQUU7UUFDbkIsMkVBQTJFO1FBQzNFLHFFQUFxRTtRQUNyRW5DLE9BQU9tQyxRQUFRLENBQUNDLEdBQUcsQ0FBQyxDQUFDQyxJQUFNbkQsV0FBVyxJQUFNNEMsU0FBU08sSUFBSTtJQUMzRDtJQUNBckMsT0FBT21DLFFBQVEsR0FBRyxFQUFFO0lBQ2xCbkMsT0FBT21DLFFBQVEsQ0FBU0csSUFBSSxHQUFHUjtJQUVqQ3hGLGNBQWNpRyxDQUFBQSxHQUFBQSxhQUFBQSxPQUFBQTtJQUNkakcsWUFBWWtHLFFBQVEsR0FBRztRQUNyQixPQUFPbEgsT0FBT2tDLEtBQUs7SUFDckI7SUFFQW5CLGFBQWEyQyxTQUFTQyxjQUFjLENBQUM7SUFDckMsT0FBTztRQUFFa0IsYUFBYUQ7SUFBTztBQUMvQjtBQUVBLFNBQVN1QyxVQUFVQyxHQUFpQixFQUFFQyxRQUFrQjtJQUN0RCxxQkFBTyxxQkFBQ0QsS0FBQUE7UUFBSyxHQUFHQyxRQUFROztBQUMxQjtBQUVBLHNCQUFzQixLQUVROztJQUZSLE1BQ3BCckQsUUFBUSxFQUNvQixHQUZSO0lBR3BCLDhEQUE4RDtJQUM5RCxNQUFNdUQsc0JBQXNCOUYsT0FBQUEsT0FBSyxDQUFDK0YsT0FBTztxREFBQztZQUN4QyxPQUFPQyxDQUFBQSxHQUFBQSxVQUFBQSx5QkFBQUEsRUFBMEJ6SDtRQUNuQztvREFBRyxFQUFFO1FBZW1COEU7SUFkeEIscUJBQ0UscUJBQUN0RCxXQUFBQTtRQUNDTyxJQUFJLENBQUMyRixRQUNILGlDQUFpQyxrQ0FDa0M7WUFDbkVDLFlBQVk7Z0JBQUVQLEtBQUsvRjtnQkFBVytCLEtBQUtzRTtZQUFNLEdBQUd2RSxLQUFLLENBQUMsQ0FBQ0MsTUFDakR3RSxRQUFRRixLQUFLLENBQUMsMEJBQTBCdEU7a0JBSTVDLG1DQUFDeUUsK0JBQUFBLGdCQUFnQixDQUFDQyxRQUFRO1lBQUNDLE9BQU9SO3NCQUNoQyxtQ0FBQ1MsaUNBQUFBLG1CQUFtQixDQUFDRixRQUFRO2dCQUFDQyxPQUFPRSxDQUFBQSxHQUFBQSxVQUFBQSxvQkFBb0IsRUFBQ2pJOzBCQUN4RCxtQ0FBQ2tJLFVBQUFBLDhCQUE4QjtvQkFDN0JsSSxRQUFRQTtvQkFDUm1JLGNBQWNyRCxDQUFBQSxpQ0FBQUEsS0FBS0gsYUFBYSxDQUFDeUQsVUFBQUEsS0FBVSxPQUE3QnRELGlDQUFpQzs4QkFFL0MsbUNBQUN1RCxpQ0FBQUEsaUJBQWlCLENBQUNQLFFBQVE7d0JBQUNDLE9BQU9PLENBQUFBLEdBQUFBLFVBQUFBLGtCQUFBQSxFQUFtQnRJO2tDQUNwRCxtQ0FBQ3VJLDRCQUFBQSxhQUFhLENBQUNULFFBQVE7NEJBQUNDLE9BQU9TLENBQUFBLEdBQUFBLFFBQUFBLHdCQUF3QixFQUFDeEk7c0NBQ3RELG1DQUFDeUksaUNBQUFBLGtCQUFrQixDQUFDWCxRQUFRO2dDQUFDQyxPQUFPL0c7MENBQ2xDLG1DQUFDMEgsaUNBQUFBLGtCQUFrQixDQUFDWixRQUFRO29DQUMxQkMsT0FDRTdILDBOQUNvQjs4Q0FHckI4RDs7Ozs7Ozs7O0FBVXJCOztLQTFDU3NEO0FBNENULE1BQU1zQixVQUNKLENBQUN4QixNQUNELENBQUN5QjtRQUNDLE1BQU14QixXQUFxQjtZQUN6QixHQUFHd0IsZUFBZTtZQUNsQm5ILFdBQVdIO1lBQ1g2QixLQUFLMUMsWUFBWTBDLEdBQUc7WUFDcEJwRDtRQUNGO1FBQ0EsT0FBTyxXQUFQLEdBQU8scUJBQUNzSCxjQUFBQTtzQkFBY0gsVUFBVUMsS0FBS0M7O0lBQ3ZDO0FBRUYsb0RBQW9EO0FBQ3BELGdEQUFnRDtBQUNoRCx3REFBd0Q7QUFDeEQsU0FBU00sWUFBWW1CLGdCQUFrQztJQUNyRCxJQUFJLEVBQUUxQixHQUFHLEVBQUVoRSxHQUFHLEVBQUUsR0FBRzBGO0lBRW5CLDBEQUEwRDtJQUMxRCwrRkFBK0Y7SUFDL0YsSUFBSTVJLElBQW9CLEVBQW1CO1FBQ3pDLDREQUE0RDtRQUM1RCxzRUFBc0U7UUFDdEVrQixVQUFVMkgsb0JBQW9CO1FBRTlCLHVFQUF1RTtRQUN2RSxpQkFBaUI7UUFDakIsaUNBQWlDO1FBQ2pDLG1FQUFtRTtRQUNuRSxPQUFPQyxTQUFTO1lBQ2Q1QixLQUFLLElBQU07WUFDWHRGLE9BQU8sQ0FBQztZQUNSSixXQUFXLElBQU07WUFDakJ1SCxhQUFhLEVBQUU7UUFDakI7SUFDRjtJQUVBLHNGQUFzRjtJQUN0RnJCLFFBQVFGLEtBQUssQ0FBQ3RFO0lBQ2R3RSxRQUFRRixLQUFLLENBQ1Y7SUFHSCxPQUFPNUcsV0FDSm9JLFFBQVEsQ0FBQyxXQUNUQyxJQUFJLENBQUM7WUFBQyxFQUFFQyxNQUFNQyxjQUFjLEVBQUVKLFdBQVcsRUFBRTtRQUMxQyxPQUFPL0gsQ0FBQUEsZ0JBQUFBLE9BQUFBLEtBQUFBLElBQUFBLGFBQWNRLFNBQVMsTUFBSzJILHNGQUMvQixtQkFBTSxDQUFDLG9LQUNKRixJQUFJLENBQUMsQ0FBQ0c7WUFDTCw0RUFBTyxtQkFBTSxDQUFDLGdLQUFpQkgsSUFBSSxDQUFDLENBQUNJO2dCQUNuQ25DLE1BQU1tQyxVQUFVakYsT0FBTztnQkFDdkJ3RSxpQkFBaUIxQixHQUFHLEdBQUdBO2dCQUN2QixPQUFPa0M7WUFDVDtRQUNGLEdBQ0NILElBQUksQ0FBQyxDQUFDSyxJQUFPO2dCQUNaSCxnQkFBZ0JHLEVBQUVsRixPQUFPO2dCQUN6QjJFLGFBQWEsRUFBRTthQUNqQixLQUNGO1lBQUVJO1lBQWdCSjtRQUFZO0lBQ3BDLEdBQ0NFLElBQUksQ0FBQztZQUFDLEVBQUVFLGNBQWMsRUFBRUosV0FBVyxFQUFFO1lBa0JsQ0g7UUFqQkYsOEVBQThFO1FBQzlFLGtGQUFrRjtRQUNsRix5RUFBeUU7UUFDekUsTUFBTVcsVUFBVWIsUUFBUXhCO1FBQ3hCLE1BQU1zQyxTQUFTO1lBQ2JoSSxXQUFXMkg7WUFDWEk7WUFDQXpKO1lBQ0EySixLQUFLO2dCQUNIdkc7Z0JBQ0FkLFVBQVU1QixZQUFZMEksSUFBSTtnQkFDMUJyRyxPQUFPckMsWUFBWXFDLEtBQUs7Z0JBQ3hCbEM7Z0JBQ0E0STtZQUNGO1FBQ0Y7UUFDQSxPQUFPRyxRQUFRQyxPQUFPLENBQ3BCZixDQUFBQSxDQUFBQSwwQkFBQUEsaUJBQWlCaEgsS0FBQUEsS0FBSyxnQkFBdEJnSCx3QkFBd0IxRixHQUFHLElBQ3ZCMEYsaUJBQWlCaEgsS0FBSyxHQUN0QmdJLENBQUFBLEdBQUFBLE9BQUFBLG1CQUFBQSxFQUFvQjFDLEtBQUtzQyxTQUM3QlAsSUFBSSxDQUFDLENBQUNZLFlBRU4saUNBRGlDLGtDQUNrQztZQUNuRWYsU0FBUztnQkFDUCxHQUFHRixnQkFBZ0I7Z0JBQ25CMUY7Z0JBQ0ExQixXQUFXMkg7Z0JBQ1hKO2dCQUNBbkgsT0FBT2lJO1lBQ1Q7SUFFSjtBQUNKO0FBRUEsbUVBQW1FO0FBQ25FLHlEQUF5RDtBQUN6RCxTQUFTQyxLQUFLLEtBQXNDOztJQUF0QyxNQUFFQyxRQUFRLEVBQTRCLEdBQXRDO0lBQ1osaUVBQWlFO0lBQ2pFLHVDQUF1QztJQUN2Q3hJLE9BQUFBLE9BQUssQ0FBQ3lJLGVBQWU7Z0NBQUMsSUFBTUQ7K0JBQVk7UUFBQ0E7S0FBUztJQUNsRCxPQUFPO0FBQ1Q7OztBQUVBLE1BQU1FLG1CQUFtQjtJQUN2QkMsaUJBQWlCO0lBQ2pCQyxjQUFjO0lBQ2RDLGFBQWE7SUFDYkMsY0FBYztJQUNkQyxhQUFhO0FBQ2Y7QUFFQSxNQUFNQyxzQkFBc0I7SUFDMUJDLFdBQVc7SUFDWEMsaUJBQWlCO0lBQ2pCQyxxQkFBcUI7SUFDckI5RyxRQUFRO0FBQ1Y7QUFFQSxJQUFJK0csWUFBaUI7QUFDckIsbURBQW1EO0FBQ25ELElBQUlDLGdCQUF5QjtBQUU3QixTQUFTQzs7SUFDTjtRQUNDWixpQkFBaUJFLFlBQVk7UUFDN0JGLGlCQUFpQkksWUFBWTtRQUM3QkosaUJBQWlCRyxXQUFXO1FBQzVCSCxpQkFBaUJLLFdBQVc7S0FDN0IsQ0FBQ1EsT0FBTyxDQUFDLENBQUNDLE9BQVNDLFlBQVlILFVBQVUsQ0FBQ0U7QUFDN0M7QUFFQSxTQUFTRTtJQUNQLElBQUksQ0FBQ0MsT0FBQUEsRUFBRSxFQUFFO0lBRVRGLFlBQVlELElBQUksQ0FBQ2QsaUJBQWlCSSxZQUFZLEVBQUUsd0JBQXdCOztJQUV4RSxNQUFNYyxzQkFBc0JILFlBQVlJLGdCQUFnQixDQUN0RG5CLGlCQUFpQkUsWUFBWSxFQUM3QixRQUNBa0IsTUFBTTtJQUNSLElBQUlGLHFCQUFxQjtRQUN2QixNQUFNRyx5QkFBeUJOLFlBQVlPLE9BQU8sQ0FDaERoQixvQkFBb0JFLGVBQWUsRUFDbkNSLGlCQUFpQkMsZUFBZSxFQUNoQ0QsaUJBQWlCRSxZQUFZO1FBRy9CLE1BQU1xQixtQkFBbUJSLFlBQVlPLE9BQU8sQ0FDMUNoQixvQkFBb0JDLFNBQVMsRUFDN0JQLGlCQUFpQkUsWUFBWSxFQUM3QkYsaUJBQWlCSSxZQUFZO1FBRy9CLElBQ0VySyxLQUFvQixJQUNwQix5RkFBeUY7UUFDekZzTCwwQkFDQUUsa0JBQ0E7WUFDQXRILFFBQUFBLE9BQU0sQ0FDSHVILFNBQVMsQ0FBQywyQkFBMkI7Z0JBQ3BDQyxXQUFXVixZQUFZVyxVQUFVLEdBQUdMLHVCQUF1QkksU0FBUztnQkFDcEVFLFlBQVk7b0JBQ1Z4SixVQUFVQyxTQUFTRCxRQUFRO29CQUMzQlMsT0FBT1IsU0FBU0MsTUFBTTtnQkFDeEI7WUFDRixHQUNDdUosR0FBRyxDQUNGYixZQUFZVyxVQUFVLEdBQ3BCSCxpQkFBaUJFLFNBQVMsR0FDMUJGLGlCQUFpQk0sUUFBUTtRQUVqQztJQUNGO0lBRUEsSUFBSTFLLGFBQWE7UUFDZjRKLFlBQ0dJLGdCQUFnQixDQUFDYixvQkFBb0JDLFNBQVMsRUFDOUNNLE9BQU8sQ0FBQzFKO0lBQ2I7SUFDQXlKO0FBQ0Y7QUFFQSxTQUFTa0I7SUFDUCxJQUFJLENBQUNiLE9BQUFBLEVBQUUsRUFBRTtJQUVURixZQUFZRCxJQUFJLENBQUNkLGlCQUFpQkcsV0FBVyxFQUFFLHFCQUFxQjs7SUFDcEUsTUFBTTRCLGtCQUF3Q2hCLFlBQVlJLGdCQUFnQixDQUN4RW5CLGlCQUFpQkssV0FBVyxFQUM1QjtJQUdGLElBQUksQ0FBQzBCLGdCQUFnQlgsTUFBTSxFQUFFO0lBRTdCLE1BQU1GLHNCQUFzQkgsWUFBWUksZ0JBQWdCLENBQ3REbkIsaUJBQWlCRSxZQUFZLEVBQzdCLFFBQ0FrQixNQUFNO0lBRVIsSUFBSUYscUJBQXFCO1FBQ3ZCSCxZQUFZTyxPQUFPLENBQ2pCaEIsb0JBQW9CRyxtQkFBbUIsRUFDdkNzQixlQUFlLENBQUMsRUFBRSxDQUFDQyxJQUFJLEVBQ3ZCaEMsaUJBQWlCRSxZQUFZO1FBRS9CYSxZQUFZTyxPQUFPLENBQ2pCaEIsb0JBQW9CM0csTUFBTSxFQUMxQnFHLGlCQUFpQkUsWUFBWSxFQUM3QkYsaUJBQWlCRyxXQUFXO1FBRTlCLElBQUloSixhQUFhO1lBQ2Y0SixZQUNHSSxnQkFBZ0IsQ0FBQ2Isb0JBQW9CM0csTUFBTSxFQUMzQ2tILE9BQU8sQ0FBQzFKO1lBQ1g0SixZQUNHSSxnQkFBZ0IsQ0FBQ2Isb0JBQW9CRyxtQkFBbUIsRUFDeERJLE9BQU8sQ0FBQzFKO1FBQ2I7SUFDRjtJQUVBeUo7SUFDQztRQUNDTixvQkFBb0JHLG1CQUFtQjtRQUN2Q0gsb0JBQW9CM0csTUFBTTtLQUMzQixDQUFDa0gsT0FBTyxDQUFDLENBQUNTLFVBQVlQLFlBQVlrQixhQUFhLENBQUNYO0FBQ25EO0FBRUEsU0FBU1ksbUJBQ1BDLEtBQWtCLEVBQ2xCdkssRUFBbUM7SUFFbkMsK0JBQStCO0lBQy9CLElBQUlxSixPQUFBQSxFQUFFLEVBQUU7UUFDTkYsWUFBWUQsSUFBSSxDQUFDZCxpQkFBaUJFLFlBQVk7SUFDaEQ7SUFFQSxNQUFNa0MsVUFBVXhLLEdBQUcrSSxnQkFBZ0JLLHNCQUFzQmM7SUFDekQsSUFBSSxDQUFDcEIsV0FBVztRQUNkLDRFQUE0RTtRQUM1RUEsWUFBWTJCLFFBQUFBLE9BQVEsQ0FBQ0MsV0FBVyxDQUFDSCxPQUFPQyxTQUFTO1lBQy9DRyxvQkFBQUEsb0JBQUFBLGtCQUFrQjtRQUNwQjtRQUNBLHVHQUF1RztRQUN2RzVCLGdCQUFnQjtJQUNsQixPQUFPO1FBQ0wsTUFBTTZCLGtCQUFtQmxMLE9BQUFBLE9BQUssQ0FBU2tMLGVBQWU7UUFDdERBLGdCQUFnQjtZQUNkOUIsVUFBVS9HLE1BQU0sQ0FBQ3lJO1FBQ25CO0lBQ0Y7QUFDRjtBQUVBLGNBQWMsS0FLWjs7SUFMWSxNQUNaTSxTQUFTLEVBQ1Q3SSxRQUFRLEVBR1IsR0FMWTtJQU1aLG1FQUFtRTtJQUNuRSxzQ0FBc0M7SUFDdEN2QyxPQUFBQSxPQUFLLENBQUN5SSxlQUFlO2dDQUNuQixJQUFNMkMsVUFBVTdCLE9BQU87d0NBQUMsQ0FBQ2YsV0FBYUE7OytCQUN0QztRQUFDNEM7S0FBVTtJQUdiLElBQUkzTSxLQUE0QixFQUFFLEVBVWpDO0lBRUQsT0FBTzhEO0FBQ1Q7O01BMUJTNEk7QUE0QlQsU0FBUzVELFNBQVN6SSxLQUFzQjtJQUN0QyxJQUFJLEVBQUU2RyxHQUFHLEVBQUUxRixTQUFTLEVBQUVJLEtBQUssRUFBRXNCLEdBQUcsRUFBRSxHQUFvQjdDO0lBQ3RELElBQUkwSSxjQUNGLGFBQWExSSxRQUFRSyxZQUFZTCxNQUFNMEksV0FBVztJQUNwRHZILFlBQVlBLGFBQWFSLGFBQWFRLFNBQVM7SUFDL0NJLFFBQVFBLFNBQVNaLGFBQWFZLEtBQUs7SUFFbkMsTUFBTXVGLFdBQXFCO1FBQ3pCLEdBQUd2RixLQUFLO1FBQ1JKO1FBQ0EwQjtRQUNBcEQ7SUFDRjtJQUNBLCtGQUErRjtJQUMvRmtCLGVBQWVtRztJQUVmLElBQUkrRixXQUFvQjtJQUN4QixJQUFJQztJQUNKLE1BQU1DLGdCQUFnQixJQUFJMUQsUUFBYyxDQUFDQyxTQUFTMEQ7UUFDaEQsSUFBSXBNLGtCQUFrQjtZQUNwQkE7UUFDRjtRQUNBa00saUJBQWlCO1lBQ2ZsTSxtQkFBbUI7WUFDbkIwSTtRQUNGO1FBQ0ExSSxtQkFBbUI7WUFDakJpTSxXQUFXO1lBQ1hqTSxtQkFBbUI7WUFFbkIsTUFBTXVHLFFBQWEscUJBQW1DLENBQW5DLElBQUk4RixNQUFNLDJCQUFWO3VCQUFBOzRCQUFBOzhCQUFBO1lBQWtDO1lBQ3JEOUYsTUFBTXJFLFNBQVMsR0FBRztZQUNsQmtLLE9BQU83RjtRQUNUO0lBQ0Y7SUFFQSx5RUFBeUU7SUFDekUseUNBQXlDO0lBQ3pDLFNBQVMrRjtRQUNQLElBQ0UsQ0FBQ3hFLGVBQ0Qsd0VBQXdFO1FBQ3hFLDhCQUE4QjswQkFDTCxjQUN6QjtZQUNBLE9BQU87UUFDVDtRQUVBLE1BQU15RSxtQkFBdUNwTixhQUMzQ29ELFNBQVNpSyxnQkFBZ0IsQ0FBQztRQUU1QixNQUFNQyxlQUFtQyxJQUFJQyxJQUMzQ0gsaUJBQWlCNUcsR0FBRyxDQUFDLENBQUNnSCxNQUFRQSxJQUFJQyxZQUFZLENBQUM7UUFHakQsTUFBTUMsV0FBMkJ0SyxTQUFTdUssYUFBYSxDQUNyRDtRQUVGLE1BQU1DLFFBQ0pGLFlBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFNBQVVELFlBQVksQ0FBQztRQUV6QjlFLFlBQVkrQixPQUFPLENBQUM7Z0JBQUMsRUFBRW1ELElBQUksRUFBRUMsSUFBSSxFQUErQjtZQUM5RCxJQUFJLENBQUNSLGFBQWFTLEdBQUcsQ0FBQ0YsT0FBTztnQkFDM0IsTUFBTUcsV0FBVzVLLFNBQVM2SyxhQUFhLENBQUM7Z0JBQ3hDRCxTQUFTRSxZQUFZLENBQUMsZUFBZUw7Z0JBQ3JDRyxTQUFTRSxZQUFZLENBQUMsU0FBUztnQkFFL0IsSUFBSU4sT0FBTztvQkFDVEksU0FBU0UsWUFBWSxDQUFDLFNBQVNOO2dCQUNqQztnQkFFQXhLLFNBQVMrSyxJQUFJLENBQUNDLFdBQVcsQ0FBQ0o7Z0JBQzFCQSxTQUFTSSxXQUFXLENBQUNoTCxTQUFTaUwsY0FBYyxDQUFDUDtZQUMvQztRQUNGO1FBQ0EsT0FBTztJQUNUO0lBRUEsU0FBU1E7UUFDUCxJQUNFLEtBU1N4QixFQUNULEVBa0REO1FBRUQsSUFBSTdNLE1BQU1pUCxNQUFNLEVBQUU7WUFDaEIsTUFBTSxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRSxHQUFHblAsTUFBTWlQLE1BQU07WUFDN0JHLENBQUFBLEdBQUFBLHFCQUFBQSx3Q0FBQUEsRUFBeUM7Z0JBQ3ZDakwsT0FBT2tMLFFBQVEsQ0FBQ0gsR0FBR0M7WUFDckI7UUFDRjtJQUNGO0lBRUEsU0FBU0c7UUFDUHhDO0lBQ0Y7SUFFQUk7SUFFQSxNQUFNcUMsT0FBQUEsV0FBQUEsR0FDSjs7MEJBQ0UscUJBQUM5RixNQUFBQTtnQkFBS0MsVUFBVTJFOzswQkFDaEIsc0JBQUN0SCxjQUFBQTs7b0JBQ0VILFVBQVVDLEtBQUtDO2tDQUNoQixxQkFBQzBJLFFBQUFBLE1BQU07d0JBQUNDLE1BQUs7a0NBQ1gsbUNBQUNDLGdCQUFBQSxjQUFjOzs7Ozs7SUFNdkIsaUZBQWlGO0lBQ2pGNUQsbUJBQW1CdEwsWUFBYSxDQUFDa0osV0FBQUEsV0FBQUEsR0FDL0IscUJBQUMyQyxNQUFBQTtZQUFLQyxXQUFXO2dCQUFDNUM7Z0JBQVU0RjthQUFhO3NCQUN0QzNQLE1BQThCLGlCQUM3QixDLEdBRUE0UDs7SUFLTixPQUFPeEM7QUFDVDtBQUVBLGVBQWV4SixPQUFPc00sY0FBK0I7SUFDbkQsc0VBQXNFO0lBQ3RFLDJFQUEyRTtJQUMzRSwrRUFBK0U7SUFDL0Usd0RBQXdEO0lBQ3hELElBQ0VBLGVBQWVoTixHQUFHLElBQ2xCLG1GQUFtRjtJQUNsRixRQUFPZ04sZUFBZTFPLFNBQVMsS0FBSyxlQUNuQyxDQUFDME8sZUFBZUMsYUFBQUEsR0FDbEI7UUFDQSxNQUFNMUksWUFBWXlJO1FBQ2xCO0lBQ0Y7SUFFQSxJQUFJO1FBQ0YsTUFBTXBILFNBQVNvSDtJQUNqQixFQUFFLE9BQU9oTixLQUFLO1FBQ1osTUFBTWtOLFlBQVlDLENBQUFBLEdBQUFBLFNBQUFBLGNBQUFBLEVBQWVuTjtRQUNqQywrQkFBK0I7UUFDL0IsSUFBS2tOLFVBQThDak4sU0FBUyxFQUFFO1lBQzVELE1BQU1pTjtRQUNSO1FBRUEsSUFBSXBRLElBQW9CLEVBQW9CO1lBQzFDLCtEQUErRDtZQUMvRDBELFdBQVc7Z0JBQ1QsTUFBTTBNO1lBQ1I7UUFDRjtRQUNBLE1BQU0zSSxZQUFZO1lBQUUsR0FBR3lJLGNBQWM7WUFBRWhOLEtBQUtrTjtRQUFVO0lBQ3hEO0FBQ0Y7QUFFTyxlQUFleFEsUUFBUXFFLElBQTZDO0lBQ3pFLElBQUlxTSxhQUFhOVAsWUFBWTBDLEdBQUc7SUFFaEMsSUFBSTtRQUNGLE1BQU1xTixnQkFBZ0IsTUFBTTNQLFdBQVc2RixXQUFXLENBQUMrSixjQUFjLENBQUM7UUFDbEUsSUFBSSxXQUFXRCxlQUFlO1lBQzVCLE1BQU1BLGNBQWMvSSxLQUFLO1FBQzNCO1FBRUEsTUFBTSxFQUFFaUosV0FBV0MsR0FBRyxFQUFFQyxTQUFTQyxHQUFHLEVBQUUsR0FBR0w7UUFDekNwUCxZQUFZdVA7UUFDWixJQUFJRSxPQUFPQSxJQUFJQyxlQUFlLEVBQUU7WUFDOUJ6UCxjQUFjO29CQUFDLEVBQ2IwUCxFQUFFLEVBQ0Y3RSxJQUFJLEVBQ0pQLFNBQVMsRUFDVDdELEtBQUssRUFDTGlFLFFBQVEsRUFDUmlGLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyxXQUFXLEVBQ1A7Z0JBQ0osc0RBQXNEO2dCQUN0RCxNQUFNQyxXQUFzQkMsS0FBS25FLEdBQUcsS0FBRyxNQUNyQ29FLENBQUFBLEtBQUtDLEtBQUssQ0FBQ0QsS0FBS0UsTUFBTSxLQUFNLFNBQU8sS0FBTSxLQUFHO2dCQUU5QyxJQUFJQztnQkFFSixJQUFJUCxXQUFXQSxRQUFRM0YsTUFBTSxFQUFFO29CQUM3QmtHLGlCQUFpQlAsT0FBTyxDQUFDLEVBQUUsQ0FBQ3RGLFNBQVM7Z0JBQ3ZDO2dCQUVBLE1BQU04RixZQUFpQztvQkFDckNWLElBQUlBLE1BQU1JO29CQUNWakY7b0JBQ0FQLFdBQVdBLGFBQWE2RjtvQkFDeEIxSixPQUFPQSxTQUFTLE9BQU9pRSxXQUFXakU7b0JBQ2xDNEosT0FDRVYsY0FBYyxVQUFVQSxjQUFjLFlBQ2xDLFdBQ0E7Z0JBQ1I7Z0JBQ0EsSUFBSUUsYUFBYTtvQkFDZk8sVUFBVVAsV0FBVyxHQUFHQTtnQkFDMUI7Z0JBQ0FMLElBQUlDLGVBQWUsQ0FBQ1c7WUFDdEI7UUFDRjtRQUVBLE1BQU1FLGlCQUNKLHdEQUN3RDthQUNsQixJQUFJbFIsWUFBWTBDLEdBQUcsR0FDckQ7WUFBRXNFLE9BQU9oSCxZQUFZMEMsR0FBRztRQUFDLElBQ3pCLE1BQU10QyxXQUFXNkYsV0FBVyxDQUFDK0osY0FBYyxDQUFDaFEsWUFBWTBJLElBQUk7UUFDbEUsSUFBSSxXQUFXd0ksZ0JBQWdCO1lBQzdCLE1BQU1BLGVBQWVsSyxLQUFLO1FBQzVCO1FBQ0FuRyxrQkFBa0JxUSxlQUFlakIsU0FBUztRQUUxQyxJQUFJelEsSUFBb0IsRUFBbUI7WUFDekMsTUFBTSxFQUFFMlIsa0JBQWtCLEVBQUUsR0FDMUIzTixtQkFBT0EsQ0FBQyx1TEFBNkI7WUFDdkMsSUFBSSxDQUFDMk4sbUJBQW1CdFEsa0JBQWtCO2dCQUN4QyxNQUFNLHFCQUVMLENBRkssSUFBSWlNLE1BQ1AsMkRBQXdEOU0sWUFBWTBJLElBQUksR0FBQyxNQUR0RTsyQkFBQTtnQ0FBQTtrQ0FBQTtnQkFFTjtZQUNGO1FBQ0Y7SUFDRixFQUFFLE9BQU8xQixPQUFPO1FBQ2QsaUVBQWlFO1FBQ2pFOEksYUFBYUQsQ0FBQUEsR0FBQUEsU0FBQUEsY0FBQUEsRUFBZTdJO0lBQzlCO0lBRUEsSUFBSXhILElBQW9CLEVBQW9CO1FBQzFDLE1BQU00UixpQkFDSjVOLHNPQUNjO1FBQ2hCLHdFQUF3RTtRQUN4RSxnQ0FBZ0M7UUFDaEMsSUFBSXNNLFlBQVk7WUFDZCxJQUFJQSxlQUFlOVAsWUFBWTBDLEdBQUcsRUFBRTtnQkFDbENRLFdBQVc7b0JBQ1QsSUFBSThEO29CQUNKLElBQUk7d0JBQ0YsbUVBQW1FO3dCQUNuRSxrRUFBa0U7d0JBQ2xFLDRDQUE0Qzt3QkFDNUMsTUFBTSxxQkFBOEIsQ0FBOUIsSUFBSThGLE1BQU1nRCxXQUFZdUIsT0FBTyxHQUE3QjttQ0FBQTt3Q0FBQTswQ0FBQTt3QkFBNkI7b0JBQ3JDLEVBQUUsT0FBT0MsR0FBRzt3QkFDVnRLLFFBQVFzSztvQkFDVjtvQkFFQXRLLE1BQU15RSxJQUFJLEdBQUdxRSxXQUFZckUsSUFBSTtvQkFDN0J6RSxNQUFNdUssS0FBSyxHQUFHekIsV0FBWXlCLEtBQUs7b0JBQy9CLE1BQU1DLFlBQVkxQixXQUFXMkIsTUFBTTtvQkFFbkMsNkRBQTZEO29CQUM3RCwwR0FBMEc7b0JBQzFHLElBQUlDLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0I1QixhQUFhO3dCQUNqQzlJLE1BQU1xSyxPQUFPLEdBQ1g7b0JBQ0o7b0JBRUEsTUFBTUQsZUFBZXBLLE9BQU93SztnQkFDOUI7WUFDRixPQUdLO2dCQUNIdE8sV0FBVztvQkFDVCxNQUFNNE07Z0JBQ1I7WUFDRjtRQUNGO0lBQ0Y7SUFFQSxJQUFJOUwsT0FBTzJOLG1CQUFtQixFQUFFO1FBQzlCLE1BQU0zTixPQUFPMk4sbUJBQW1CLENBQUMzUixZQUFZNFIsVUFBVTtJQUN6RDtJQUVBdFMsU0FBU3VTLENBQUFBLEdBQUFBLFFBQUFBLFlBQVksRUFBQzdSLFlBQVkwSSxJQUFJLEVBQUUxSSxZQUFZcUMsS0FBSyxFQUFFbEMsUUFBUTtRQUNqRTJSLGNBQWM5UixZQUFZb0IsS0FBSztRQUMvQmhCO1FBQ0FzRyxLQUFLL0Y7UUFDTEssV0FBV0g7UUFDWHFIO1FBQ0F4RixLQUFLb047UUFDTHJPLFlBQVlzUSxRQUFRL1IsWUFBWXlCLFVBQVU7UUFDMUN1USxjQUFjLENBQUM3USxNQUFNdUYsS0FBS29JLFNBQ3hCMUwsT0FDRTZPLE9BQU85UCxNQUFNLENBSVgsQ0FBQyxHQUFHaEIsTUFBTTtnQkFDVnVGO2dCQUNBb0k7WUFDRjtRQUVKeEosUUFBUXRGLFlBQVlzRixNQUFNO1FBQzFCSixTQUFTbEYsWUFBWWtGLE9BQU87UUFDNUJqRjtRQUNBaVMsZUFBZWxTLFlBQVlrUyxhQUFhO1FBQ3hDQyxXQUFXblMsWUFBWW1TLFNBQVM7SUFDbEM7SUFFQTVSLDJCQUEyQixNQUFNakIsT0FBTzhTLGdDQUFnQztJQUV4RSxNQUFNQyxZQUE2QjtRQUNqQzNMLEtBQUsvRjtRQUNMMlIsU0FBUztRQUNUdFIsV0FBV0g7UUFDWE8sT0FBT3BCLFlBQVlvQixLQUFLO1FBQ3hCc0IsS0FBS29OO1FBQ0xILGVBQWU7SUFDakI7SUFFQSxJQUFJbE0sUUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsS0FBTWtHLFlBQVksRUFBRTtRQUN0QixNQUFNbEcsS0FBS2tHLFlBQVk7SUFDekI7SUFFQXZHLE9BQU9pUDtBQUNUIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGxvY2F0aW9uICovXG4vLyBpbXBvcnRzIHBvbHlmaWxsIGZyb20gYEBuZXh0L3BvbHlmaWxsLW1vZHVsZWAgYWZ0ZXIgYnVpbGQuXG5pbXBvcnQgJy4uL2J1aWxkL3BvbHlmaWxscy9wb2x5ZmlsbC1tb2R1bGUnXG5pbXBvcnQgdHlwZSBSb3V0ZXIgZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvcm91dGVyJ1xuaW1wb3J0IHR5cGUge1xuICBBcHBDb21wb25lbnQsXG4gIEFwcFByb3BzLFxuICBQcml2YXRlUm91dGVJbmZvLFxufSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci9yb3V0ZXInXG5cbmltcG9ydCBSZWFjdCwgeyB0eXBlIEpTWCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnXG5pbXBvcnQgeyBIZWFkTWFuYWdlckNvbnRleHQgfSBmcm9tICcuLi9zaGFyZWQvbGliL2hlYWQtbWFuYWdlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IG1pdHQgZnJvbSAnLi4vc2hhcmVkL2xpYi9taXR0J1xuaW1wb3J0IHR5cGUgeyBNaXR0RW1pdHRlciB9IGZyb20gJy4uL3NoYXJlZC9saWIvbWl0dCdcbmltcG9ydCB7IFJvdXRlckNvbnRleHQgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgZGlzYWJsZVNtb290aFNjcm9sbER1cmluZ1JvdXRlVHJhbnNpdGlvbiB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Rpc2FibGUtc21vb3RoLXNjcm9sbCdcbmltcG9ydCB7IGlzRHluYW1pY1JvdXRlIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYydcbmltcG9ydCB7XG4gIHVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMsXG4gIGFzc2lnbixcbn0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcnXG5pbXBvcnQgeyBzZXRDb25maWcgfSBmcm9tICcuLi9zaGFyZWQvbGliL3J1bnRpbWUtY29uZmlnLmV4dGVybmFsJ1xuaW1wb3J0IHsgZ2V0VVJMLCBsb2FkR2V0SW5pdGlhbFByb3BzLCBTVCB9IGZyb20gJy4uL3NoYXJlZC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IE5leHRXZWJWaXRhbHNNZXRyaWMsIE5FWFRfREFUQSB9IGZyb20gJy4uL3NoYXJlZC9saWIvdXRpbHMnXG5pbXBvcnQgeyBQb3J0YWwgfSBmcm9tICcuL3BvcnRhbCdcbmltcG9ydCBpbml0SGVhZE1hbmFnZXIgZnJvbSAnLi9oZWFkLW1hbmFnZXInXG5pbXBvcnQgUGFnZUxvYWRlciBmcm9tICcuL3BhZ2UtbG9hZGVyJ1xuaW1wb3J0IHR5cGUgeyBTdHlsZVNoZWV0VHVwbGUgfSBmcm9tICcuL3BhZ2UtbG9hZGVyJ1xuaW1wb3J0IHsgUm91dGVBbm5vdW5jZXIgfSBmcm9tICcuL3JvdXRlLWFubm91bmNlcidcbmltcG9ydCB7IGNyZWF0ZVJvdXRlciwgbWFrZVB1YmxpY1JvdXRlckluc3RhbmNlIH0gZnJvbSAnLi9yb3V0ZXInXG5pbXBvcnQgeyBnZXRQcm9wZXJFcnJvciB9IGZyb20gJy4uL2xpYi9pcy1lcnJvcidcbmltcG9ydCB7IEltYWdlQ29uZmlnQ29udGV4dCB9IGZyb20gJy4uL3NoYXJlZC9saWIvaW1hZ2UtY29uZmlnLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgdHlwZSB7IEltYWdlQ29uZmlnQ29tcGxldGUgfSBmcm9tICcuLi9zaGFyZWQvbGliL2ltYWdlLWNvbmZpZydcbmltcG9ydCB7IHJlbW92ZUJhc2VQYXRoIH0gZnJvbSAnLi9yZW1vdmUtYmFzZS1wYXRoJ1xuaW1wb3J0IHsgaGFzQmFzZVBhdGggfSBmcm9tICcuL2hhcy1iYXNlLXBhdGgnXG5pbXBvcnQgeyBBcHBSb3V0ZXJDb250ZXh0IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQge1xuICBhZGFwdEZvckFwcFJvdXRlckluc3RhbmNlLFxuICBhZGFwdEZvclBhdGhQYXJhbXMsXG4gIGFkYXB0Rm9yU2VhcmNoUGFyYW1zLFxuICBQYXRobmFtZUNvbnRleHRQcm92aWRlckFkYXB0ZXIsXG59IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL2FkYXB0ZXJzJ1xuaW1wb3J0IHtcbiAgU2VhcmNoUGFyYW1zQ29udGV4dCxcbiAgUGF0aFBhcmFtc0NvbnRleHQsXG59IGZyb20gJy4uL3NoYXJlZC9saWIvaG9va3MtY2xpZW50LWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBvblJlY292ZXJhYmxlRXJyb3IgfSBmcm9tICcuL3JlYWN0LWNsaWVudC1jYWxsYmFja3Mvb24tcmVjb3ZlcmFibGUtZXJyb3InXG5pbXBvcnQgdHJhY2VyIGZyb20gJy4vdHJhY2luZy90cmFjZXInXG5pbXBvcnQgeyBpc05leHRSb3V0ZXJFcnJvciB9IGZyb20gJy4vY29tcG9uZW50cy9pcy1uZXh0LXJvdXRlci1lcnJvcidcblxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJyZWFjdC1kb20vZXhwZXJpbWVudGFsXCIgLz5cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAvKiB0ZXN0IGZucyAqL1xuICAgIF9fTkVYVF9IWURSQVRFRD86IGJvb2xlYW5cbiAgICBfX05FWFRfSFlEUkFURURfQVQ/OiBudW1iZXJcbiAgICBfX05FWFRfSFlEUkFURURfQ0I/OiAoKSA9PiB2b2lkXG5cbiAgICAvKiBwcm9kICovXG4gICAgX19ORVhUX0RBVEFfXzogTkVYVF9EQVRBXG4gICAgX19ORVhUX1A6IGFueVtdXG4gIH1cbn1cbnR5cGUgUmVuZGVyUm91dGVJbmZvID0gUHJpdmF0ZVJvdXRlSW5mbyAmIHtcbiAgQXBwOiBBcHBDb21wb25lbnRcbiAgc2Nyb2xsPzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbFxuICBpc0h5ZHJhdGVQYXNzPzogYm9vbGVhblxufVxudHlwZSBSZW5kZXJFcnJvclByb3BzID0gT21pdDxSZW5kZXJSb3V0ZUluZm8sICdDb21wb25lbnQnIHwgJ3N0eWxlU2hlZXRzJz5cbnR5cGUgUmVnaXN0ZXJGbiA9IChpbnB1dDogW3N0cmluZywgKCkgPT4gdm9pZF0pID0+IHZvaWRcblxuZXhwb3J0IGNvbnN0IHZlcnNpb24gPSBwcm9jZXNzLmVudi5fX05FWFRfVkVSU0lPTlxuZXhwb3J0IGxldCByb3V0ZXI6IFJvdXRlclxuZXhwb3J0IGNvbnN0IGVtaXR0ZXI6IE1pdHRFbWl0dGVyPHN0cmluZz4gPSBtaXR0KClcblxuY29uc3QgbG9vc2VUb0FycmF5ID0gPFQgZXh0ZW5kcyB7fT4oaW5wdXQ6IGFueSk6IFRbXSA9PiBbXS5zbGljZS5jYWxsKGlucHV0KVxuXG5sZXQgaW5pdGlhbERhdGE6IE5FWFRfREFUQVxubGV0IGRlZmF1bHRMb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxubGV0IGFzUGF0aDogc3RyaW5nXG5sZXQgcGFnZUxvYWRlcjogUGFnZUxvYWRlclxubGV0IGFwcEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbFxubGV0IGhlYWRNYW5hZ2VyOiB7XG4gIG1vdW50ZWRJbnN0YW5jZXM6IFNldDx1bmtub3duPlxuICB1cGRhdGVIZWFkOiAoaGVhZDogSlNYLkVsZW1lbnRbXSkgPT4gdm9pZFxuICBnZXRJc1Nzcj86ICgpID0+IGJvb2xlYW5cbn1cbmxldCBpbml0aWFsTWF0Y2hlc01pZGRsZXdhcmUgPSBmYWxzZVxubGV0IGxhc3RBcHBQcm9wczogQXBwUHJvcHNcblxubGV0IGxhc3RSZW5kZXJSZWplY3Q6ICgoKSA9PiB2b2lkKSB8IG51bGxcbmxldCBkZXZDbGllbnQ6IGFueVxuXG5sZXQgQ2FjaGVkQXBwOiBBcHBDb21wb25lbnQsIG9uUGVyZkVudHJ5OiAobWV0cmljOiBhbnkpID0+IHZvaWRcbmxldCBDYWNoZWRDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGVcblxuY2xhc3MgQ29udGFpbmVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgZm46IChlcnI6IEVycm9yLCBpbmZvPzogYW55KSA9PiB2b2lkXG59PiB7XG4gIGNvbXBvbmVudERpZENhdGNoKGNvbXBvbmVudEVycjogRXJyb3IsIGluZm86IGFueSkge1xuICAgIHRoaXMucHJvcHMuZm4oY29tcG9uZW50RXJyLCBpbmZvKVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5zY3JvbGxUb0hhc2goKVxuXG4gICAgLy8gV2UgbmVlZCB0byByZXBsYWNlIHRoZSByb3V0ZXIgc3RhdGUgaWY6XG4gICAgLy8gLSB0aGUgcGFnZSB3YXMgKGF1dG8pIGV4cG9ydGVkIGFuZCBoYXMgYSBxdWVyeSBzdHJpbmcgb3Igc2VhcmNoIChoYXNoKVxuICAgIC8vIC0gaXQgd2FzIGF1dG8gZXhwb3J0ZWQgYW5kIGlzIGEgZHluYW1pYyByb3V0ZSAodG8gcHJvdmlkZSBwYXJhbXMpXG4gICAgLy8gLSBpZiBpdCBpcyBhIGNsaWVudC1zaWRlIHNrZWxldG9uIChmYWxsYmFjayByZW5kZXIpXG4gICAgLy8gLSBpZiBtaWRkbGV3YXJlIG1hdGNoZXMgdGhlIGN1cnJlbnQgcGFnZSAobWF5IGhhdmUgcmV3cml0ZSBwYXJhbXMpXG4gICAgLy8gLSBpZiByZXdyaXRlcyBpbiBuZXh0LmNvbmZpZy5qcyBtYXRjaCAobWF5IGhhdmUgcmV3cml0ZSBwYXJhbXMpXG4gICAgaWYgKFxuICAgICAgcm91dGVyLmlzU3NyICYmXG4gICAgICAoaW5pdGlhbERhdGEuaXNGYWxsYmFjayB8fFxuICAgICAgICAoaW5pdGlhbERhdGEubmV4dEV4cG9ydCAmJlxuICAgICAgICAgIChpc0R5bmFtaWNSb3V0ZShyb3V0ZXIucGF0aG5hbWUpIHx8XG4gICAgICAgICAgICBsb2NhdGlvbi5zZWFyY2ggfHxcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Ll9fTkVYVF9IQVNfUkVXUklURVMgfHxcbiAgICAgICAgICAgIGluaXRpYWxNYXRjaGVzTWlkZGxld2FyZSkpIHx8XG4gICAgICAgIChpbml0aWFsRGF0YS5wcm9wcyAmJlxuICAgICAgICAgIGluaXRpYWxEYXRhLnByb3BzLl9fTl9TU0cgJiZcbiAgICAgICAgICAobG9jYXRpb24uc2VhcmNoIHx8XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5fX05FWFRfSEFTX1JFV1JJVEVTIHx8XG4gICAgICAgICAgICBpbml0aWFsTWF0Y2hlc01pZGRsZXdhcmUpKSlcbiAgICApIHtcbiAgICAgIC8vIHVwZGF0ZSBxdWVyeSBvbiBtb3VudCBmb3IgZXhwb3J0ZWQgcGFnZXNcbiAgICAgIHJvdXRlclxuICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICByb3V0ZXIucGF0aG5hbWUgK1xuICAgICAgICAgICAgJz8nICtcbiAgICAgICAgICAgIFN0cmluZyhcbiAgICAgICAgICAgICAgYXNzaWduKFxuICAgICAgICAgICAgICAgIHVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMocm91dGVyLnF1ZXJ5KSxcbiAgICAgICAgICAgICAgICBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBhc1BhdGgsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgLy8gV0FSTklORzogYF9oYCBpcyBhbiBpbnRlcm5hbCBvcHRpb24gZm9yIGhhbmRpbmcgTmV4dC5qc1xuICAgICAgICAgICAgLy8gY2xpZW50LXNpZGUgaHlkcmF0aW9uLiBZb3VyIGFwcCBzaG91bGQgX25ldmVyXyB1c2UgdGhpcyBwcm9wZXJ0eS5cbiAgICAgICAgICAgIC8vIEl0IG1heSBjaGFuZ2UgYXQgYW55IHRpbWUgd2l0aG91dCBub3RpY2UuXG4gICAgICAgICAgICBfaDogMSxcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrIHBhZ2VzIG11c3QgdHJpZ2dlciB0aGUgZGF0YSBmZXRjaCwgc28gdGhlIHRyYW5zaXRpb24gaXNcbiAgICAgICAgICAgIC8vIG5vdCBzaGFsbG93LlxuICAgICAgICAgICAgLy8gT3RoZXIgcGFnZXMgKHN0cmljdGx5IHVwZGF0aW5nIHF1ZXJ5KSBoYXBwZW5zIHNoYWxsb3dseSwgYXMgZGF0YVxuICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnRzIHdvdWxkIGFscmVhZHkgYmUgcHJlc2VudC5cbiAgICAgICAgICAgIHNoYWxsb3c6ICFpbml0aWFsRGF0YS5pc0ZhbGxiYWNrICYmICFpbml0aWFsTWF0Y2hlc01pZGRsZXdhcmUsXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgaWYgKCFlcnIuY2FuY2VsbGVkKSB0aHJvdyBlcnJcbiAgICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgdGhpcy5zY3JvbGxUb0hhc2goKVxuICB9XG5cbiAgc2Nyb2xsVG9IYXNoKCkge1xuICAgIGxldCB7IGhhc2ggfSA9IGxvY2F0aW9uXG4gICAgaGFzaCA9IGhhc2ggJiYgaGFzaC5zdWJzdHJpbmcoMSlcbiAgICBpZiAoIWhhc2gpIHJldHVyblxuXG4gICAgY29uc3QgZWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGhhc2gpXG4gICAgaWYgKCFlbCkgcmV0dXJuXG5cbiAgICAvLyBJZiB3ZSBjYWxsIHNjcm9sbEludG9WaWV3KCkgaW4gaGVyZSB3aXRob3V0IGEgc2V0VGltZW91dFxuICAgIC8vIGl0IHdvbid0IHNjcm9sbCBwcm9wZXJseS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IGVsLnNjcm9sbEludG9WaWV3KCksIDApXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgUGFnZXNEZXZPdmVybGF5QnJpZGdlIH0gPVxuICAgICAgICByZXF1aXJlKCcuLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9wYWdlcy9wYWdlcy1kZXYtb3ZlcmxheS1zZXR1cCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL3BhZ2VzL3BhZ2VzLWRldi1vdmVybGF5LXNldHVwJylcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYWdlc0Rldk92ZXJsYXlCcmlkZ2U+e3RoaXMucHJvcHMuY2hpbGRyZW59PC9QYWdlc0Rldk92ZXJsYXlCcmlkZ2U+XG4gICAgICApXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplKG9wdHM6IHsgZGV2Q2xpZW50PzogYW55IH0gPSB7fSk6IFByb21pc2U8e1xuICBhc3NldFByZWZpeDogc3RyaW5nXG59PiB7XG4gIC8vIFRoaXMgbWFrZXMgc3VyZSB0aGlzIHNwZWNpZmljIGxpbmVzIGFyZSByZW1vdmVkIGluIHByb2R1Y3Rpb25cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgdHJhY2VyLm9uU3BhbkVuZChcbiAgICAgIChcbiAgICAgICAgcmVxdWlyZSgnLi90cmFjaW5nL3JlcG9ydC10by1zb2NrZXQnKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3RyYWNpbmcvcmVwb3J0LXRvLXNvY2tldCcpXG4gICAgICApLmRlZmF1bHRcbiAgICApXG4gICAgZGV2Q2xpZW50ID0gb3B0cy5kZXZDbGllbnRcbiAgfVxuXG4gIGluaXRpYWxEYXRhID0gSlNPTi5wYXJzZShcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX19ORVhUX0RBVEFfXycpIS50ZXh0Q29udGVudCFcbiAgKVxuICB3aW5kb3cuX19ORVhUX0RBVEFfXyA9IGluaXRpYWxEYXRhXG5cbiAgZGVmYXVsdExvY2FsZSA9IGluaXRpYWxEYXRhLmRlZmF1bHRMb2NhbGVcbiAgY29uc3QgcHJlZml4OiBzdHJpbmcgPSBpbml0aWFsRGF0YS5hc3NldFByZWZpeCB8fCAnJ1xuICAvLyBXaXRoIGR5bmFtaWMgYXNzZXRQcmVmaXggaXQncyBubyBsb25nZXIgcG9zc2libGUgdG8gc2V0IGFzc2V0UHJlZml4IGF0IHRoZSBidWlsZCB0aW1lXG4gIC8vIFNvLCB0aGlzIGlzIGhvdyB3ZSBkbyBpdCBpbiB0aGUgY2xpZW50IHNpZGUgYXQgcnVudGltZVxuICA7KHNlbGYgYXMgYW55KS5fX25leHRfc2V0X3B1YmxpY19wYXRoX18oYCR7cHJlZml4fS9fbmV4dC9gKSAvL2VzbGludC1kaXNhYmxlLWxpbmVcblxuICAvLyBJbml0aWFsaXplIG5leHQvY29uZmlnIHdpdGggdGhlIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25cbiAgc2V0Q29uZmlnKHtcbiAgICBzZXJ2ZXJSdW50aW1lQ29uZmlnOiB7fSxcbiAgICBwdWJsaWNSdW50aW1lQ29uZmlnOiBpbml0aWFsRGF0YS5ydW50aW1lQ29uZmlnIHx8IHt9LFxuICB9KVxuXG4gIGFzUGF0aCA9IGdldFVSTCgpXG5cbiAgLy8gbWFrZSBzdXJlIG5vdCB0byBhdHRlbXB0IHN0cmlwcGluZyBiYXNlUGF0aCBmb3IgNDA0c1xuICBpZiAoaGFzQmFzZVBhdGgoYXNQYXRoKSkge1xuICAgIGFzUGF0aCA9IHJlbW92ZUJhc2VQYXRoKGFzUGF0aClcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgY29uc3QgeyBub3JtYWxpemVMb2NhbGVQYXRoIH0gPVxuICAgICAgcmVxdWlyZSgnLi4vc2hhcmVkL2xpYi9pMThuL25vcm1hbGl6ZS1sb2NhbGUtcGF0aCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4uL3NoYXJlZC9saWIvaTE4bi9ub3JtYWxpemUtbG9jYWxlLXBhdGgnKVxuXG4gICAgY29uc3QgeyBkZXRlY3REb21haW5Mb2NhbGUgfSA9XG4gICAgICByZXF1aXJlKCcuLi9zaGFyZWQvbGliL2kxOG4vZGV0ZWN0LWRvbWFpbi1sb2NhbGUnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi9zaGFyZWQvbGliL2kxOG4vZGV0ZWN0LWRvbWFpbi1sb2NhbGUnKVxuXG4gICAgY29uc3QgeyBwYXJzZVJlbGF0aXZlVXJsIH0gPVxuICAgICAgcmVxdWlyZSgnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcmVsYXRpdmUtdXJsJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcmVsYXRpdmUtdXJsJylcblxuICAgIGNvbnN0IHsgZm9ybWF0VXJsIH0gPVxuICAgICAgcmVxdWlyZSgnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmwnKVxuXG4gICAgaWYgKGluaXRpYWxEYXRhLmxvY2FsZXMpIHtcbiAgICAgIGNvbnN0IHBhcnNlZEFzID0gcGFyc2VSZWxhdGl2ZVVybChhc1BhdGgpXG4gICAgICBjb25zdCBsb2NhbGVQYXRoUmVzdWx0ID0gbm9ybWFsaXplTG9jYWxlUGF0aChcbiAgICAgICAgcGFyc2VkQXMucGF0aG5hbWUsXG4gICAgICAgIGluaXRpYWxEYXRhLmxvY2FsZXNcbiAgICAgIClcblxuICAgICAgaWYgKGxvY2FsZVBhdGhSZXN1bHQuZGV0ZWN0ZWRMb2NhbGUpIHtcbiAgICAgICAgcGFyc2VkQXMucGF0aG5hbWUgPSBsb2NhbGVQYXRoUmVzdWx0LnBhdGhuYW1lXG4gICAgICAgIGFzUGF0aCA9IGZvcm1hdFVybChwYXJzZWRBcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlcml2ZSB0aGUgZGVmYXVsdCBsb2NhbGUgaWYgaXQgd2Fzbid0IGRldGVjdGVkIGluIHRoZSBhc1BhdGhcbiAgICAgICAgLy8gc2luY2Ugd2UgZG9uJ3QgcHJlcmVuZGVyIHN0YXRpYyBwYWdlcyB3aXRoIGFsbCBwb3NzaWJsZSBkZWZhdWx0XG4gICAgICAgIC8vIGxvY2FsZXNcbiAgICAgICAgZGVmYXVsdExvY2FsZSA9IGluaXRpYWxEYXRhLmxvY2FsZVxuICAgICAgfVxuXG4gICAgICAvLyBhdHRlbXB0IGRldGVjdGluZyBkZWZhdWx0IGxvY2FsZSBiYXNlZCBvbiBob3N0bmFtZVxuICAgICAgY29uc3QgZGV0ZWN0ZWREb21haW4gPSBkZXRlY3REb21haW5Mb2NhbGUoXG4gICAgICAgIHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX0RPTUFJTlMgYXMgYW55LFxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWVcbiAgICAgIClcblxuICAgICAgLy8gVE9ETzogaW52ZXN0aWdhdGUgaWYgZGVmYXVsdExvY2FsZSBuZWVkcyB0byBiZSBwb3B1bGF0ZWQgYWZ0ZXJcbiAgICAgIC8vIGh5ZHJhdGlvbiB0byBwcmV2ZW50IG1pc21hdGNoZWQgcmVuZGVyc1xuICAgICAgaWYgKGRldGVjdGVkRG9tYWluKSB7XG4gICAgICAgIGRlZmF1bHRMb2NhbGUgPSBkZXRlY3RlZERvbWFpbi5kZWZhdWx0TG9jYWxlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGluaXRpYWxEYXRhLnNjcmlwdExvYWRlcikge1xuICAgIGNvbnN0IHsgaW5pdFNjcmlwdExvYWRlciB9ID1cbiAgICAgIHJlcXVpcmUoJy4vc2NyaXB0JykgYXMgdHlwZW9mIGltcG9ydCgnLi9zY3JpcHQnKVxuICAgIGluaXRTY3JpcHRMb2FkZXIoaW5pdGlhbERhdGEuc2NyaXB0TG9hZGVyKVxuICB9XG5cbiAgcGFnZUxvYWRlciA9IG5ldyBQYWdlTG9hZGVyKGluaXRpYWxEYXRhLmJ1aWxkSWQsIHByZWZpeClcblxuICBjb25zdCByZWdpc3RlcjogUmVnaXN0ZXJGbiA9IChbciwgZl0pID0+XG4gICAgcGFnZUxvYWRlci5yb3V0ZUxvYWRlci5vbkVudHJ5cG9pbnQociwgZilcbiAgaWYgKHdpbmRvdy5fX05FWFRfUCkge1xuICAgIC8vIERlZmVyIHBhZ2UgcmVnaXN0cmF0aW9uIGZvciBhbm90aGVyIHRpY2suIFRoaXMgd2lsbCBpbmNyZWFzZSB0aGUgb3ZlcmFsbFxuICAgIC8vIGxhdGVuY3kgaW4gaHlkcmF0aW5nIHRoZSBwYWdlLCBidXQgcmVkdWNlIHRoZSB0b3RhbCBibG9ja2luZyB0aW1lLlxuICAgIHdpbmRvdy5fX05FWFRfUC5tYXAoKHApID0+IHNldFRpbWVvdXQoKCkgPT4gcmVnaXN0ZXIocCksIDApKVxuICB9XG4gIHdpbmRvdy5fX05FWFRfUCA9IFtdXG4gIDsod2luZG93Ll9fTkVYVF9QIGFzIGFueSkucHVzaCA9IHJlZ2lzdGVyXG5cbiAgaGVhZE1hbmFnZXIgPSBpbml0SGVhZE1hbmFnZXIoKVxuICBoZWFkTWFuYWdlci5nZXRJc1NzciA9ICgpID0+IHtcbiAgICByZXR1cm4gcm91dGVyLmlzU3NyXG4gIH1cblxuICBhcHBFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19fbmV4dCcpXG4gIHJldHVybiB7IGFzc2V0UHJlZml4OiBwcmVmaXggfVxufVxuXG5mdW5jdGlvbiByZW5kZXJBcHAoQXBwOiBBcHBDb21wb25lbnQsIGFwcFByb3BzOiBBcHBQcm9wcykge1xuICByZXR1cm4gPEFwcCB7Li4uYXBwUHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIEFwcENvbnRhaW5lcih7XG4gIGNoaWxkcmVuLFxufTogUmVhY3QuUHJvcHNXaXRoQ2hpbGRyZW48e30+KTogUmVhY3QuUmVhY3RFbGVtZW50IHtcbiAgLy8gQ3JlYXRlIGEgbWVtb2l6ZWQgdmFsdWUgZm9yIG5leHQvbmF2aWdhdGlvbiByb3V0ZXIgY29udGV4dC5cbiAgY29uc3QgYWRhcHRlZEZvckFwcFJvdXRlciA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBhZGFwdEZvckFwcFJvdXRlckluc3RhbmNlKHJvdXRlcilcbiAgfSwgW10pXG4gIHJldHVybiAoXG4gICAgPENvbnRhaW5lclxuICAgICAgZm49eyhlcnJvcikgPT5cbiAgICAgICAgLy8gVE9ETzogRml4IGRpc2FibGVkIGVzbGludCBydWxlXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgcmVuZGVyRXJyb3IoeyBBcHA6IENhY2hlZEFwcCwgZXJyOiBlcnJvciB9KS5jYXRjaCgoZXJyKSA9PlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlbmRlcmluZyBwYWdlOiAnLCBlcnIpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICA+XG4gICAgICA8QXBwUm91dGVyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17YWRhcHRlZEZvckFwcFJvdXRlcn0+XG4gICAgICAgIDxTZWFyY2hQYXJhbXNDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXthZGFwdEZvclNlYXJjaFBhcmFtcyhyb3V0ZXIpfT5cbiAgICAgICAgICA8UGF0aG5hbWVDb250ZXh0UHJvdmlkZXJBZGFwdGVyXG4gICAgICAgICAgICByb3V0ZXI9e3JvdXRlcn1cbiAgICAgICAgICAgIGlzQXV0b0V4cG9ydD17c2VsZi5fX05FWFRfREFUQV9fLmF1dG9FeHBvcnQgPz8gZmFsc2V9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFBhdGhQYXJhbXNDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXthZGFwdEZvclBhdGhQYXJhbXMocm91dGVyKX0+XG4gICAgICAgICAgICAgIDxSb3V0ZXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXttYWtlUHVibGljUm91dGVySW5zdGFuY2Uocm91dGVyKX0+XG4gICAgICAgICAgICAgICAgPEhlYWRNYW5hZ2VyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17aGVhZE1hbmFnZXJ9PlxuICAgICAgICAgICAgICAgICAgPEltYWdlQ29uZmlnQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnZcbiAgICAgICAgICAgICAgICAgICAgICAgIC5fX05FWFRfSU1BR0VfT1BUUyBhcyBhbnkgYXMgSW1hZ2VDb25maWdDb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgIDwvSW1hZ2VDb25maWdDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgICAgIDwvSGVhZE1hbmFnZXJDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgICA8L1JvdXRlckNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICA8L1BhdGhQYXJhbXNDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgIDwvUGF0aG5hbWVDb250ZXh0UHJvdmlkZXJBZGFwdGVyPlxuICAgICAgICA8L1NlYXJjaFBhcmFtc0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L0FwcFJvdXRlckNvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9Db250YWluZXI+XG4gIClcbn1cblxuY29uc3Qgd3JhcEFwcCA9XG4gIChBcHA6IEFwcENvbXBvbmVudCkgPT5cbiAgKHdyYXBwZWRBcHBQcm9wczogUmVjb3JkPHN0cmluZywgYW55Pik6IEpTWC5FbGVtZW50ID0+IHtcbiAgICBjb25zdCBhcHBQcm9wczogQXBwUHJvcHMgPSB7XG4gICAgICAuLi53cmFwcGVkQXBwUHJvcHMsXG4gICAgICBDb21wb25lbnQ6IENhY2hlZENvbXBvbmVudCxcbiAgICAgIGVycjogaW5pdGlhbERhdGEuZXJyLFxuICAgICAgcm91dGVyLFxuICAgIH1cbiAgICByZXR1cm4gPEFwcENvbnRhaW5lcj57cmVuZGVyQXBwKEFwcCwgYXBwUHJvcHMpfTwvQXBwQ29udGFpbmVyPlxuICB9XG5cbi8vIFRoaXMgbWV0aG9kIGhhbmRsZXMgYWxsIHJ1bnRpbWUgYW5kIGRlYnVnIGVycm9ycy5cbi8vIDQwNCBhbmQgNTAwIGVycm9ycyBhcmUgc3BlY2lhbCBraW5kIG9mIGVycm9yc1xuLy8gYW5kIHRoZXkgYXJlIHN0aWxsIGhhbmRsZSB2aWEgdGhlIG1haW4gcmVuZGVyIG1ldGhvZC5cbmZ1bmN0aW9uIHJlbmRlckVycm9yKHJlbmRlckVycm9yUHJvcHM6IFJlbmRlckVycm9yUHJvcHMpOiBQcm9taXNlPGFueT4ge1xuICBsZXQgeyBBcHAsIGVyciB9ID0gcmVuZGVyRXJyb3JQcm9wc1xuXG4gIC8vIEluIGRldmVsb3BtZW50IHJ1bnRpbWUgZXJyb3JzIGFyZSBjYXVnaHQgYnkgb3VyIG92ZXJsYXlcbiAgLy8gSW4gcHJvZHVjdGlvbiB3ZSBjYXRjaCBydW50aW1lIGVycm9ycyB1c2luZyBjb21wb25lbnREaWRDYXRjaCB3aGljaCB3aWxsIHRyaWdnZXIgcmVuZGVyRXJyb3JcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBBIE5leHQuanMgcmVuZGVyaW5nIHJ1bnRpbWUgZXJyb3IgaXMgYWx3YXlzIHVucmVjb3ZlcmFibGVcbiAgICAvLyBGSVhNRTogbGV0J3MgbWFrZSB0aGlzIHJlY292ZXJhYmxlIChlcnJvciBpbiBHSVAgY2xpZW50LXRyYW5zaXRpb24pXG4gICAgZGV2Q2xpZW50Lm9uVW5yZWNvdmVyYWJsZUVycm9yKClcblxuICAgIC8vIFdlIG5lZWQgdG8gcmVuZGVyIGFuIGVtcHR5IDxBcHA+IHNvIHRoYXQgdGhlIGA8UmVhY3REZXZPdmVybGF5PmAgY2FuXG4gICAgLy8gcmVuZGVyIGl0c2VsZi5cbiAgICAvLyBUT0RPOiBGaXggZGlzYWJsZWQgZXNsaW50IHJ1bGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgcmV0dXJuIGRvUmVuZGVyKHtcbiAgICAgIEFwcDogKCkgPT4gbnVsbCxcbiAgICAgIHByb3BzOiB7fSxcbiAgICAgIENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgIHN0eWxlU2hlZXRzOiBbXSxcbiAgICB9KVxuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGxvZyB0aGUgZXJyb3IgdG8gdGhlIGNvbnNvbGUsIG90aGVyd2lzZSB1c2VycyBjYW4ndCB0cmFjayBkb3duIGlzc3Vlcy5cbiAgY29uc29sZS5lcnJvcihlcnIpXG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgYEEgY2xpZW50LXNpZGUgZXhjZXB0aW9uIGhhcyBvY2N1cnJlZCwgc2VlIGhlcmUgZm9yIG1vcmUgaW5mbzogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvY2xpZW50LXNpZGUtZXhjZXB0aW9uLW9jY3VycmVkYFxuICApXG5cbiAgcmV0dXJuIHBhZ2VMb2FkZXJcbiAgICAubG9hZFBhZ2UoJy9fZXJyb3InKVxuICAgIC50aGVuKCh7IHBhZ2U6IEVycm9yQ29tcG9uZW50LCBzdHlsZVNoZWV0cyB9KSA9PiB7XG4gICAgICByZXR1cm4gbGFzdEFwcFByb3BzPy5Db21wb25lbnQgPT09IEVycm9yQ29tcG9uZW50XG4gICAgICAgID8gaW1wb3J0KCcuLi9wYWdlcy9fZXJyb3InKVxuICAgICAgICAgICAgLnRoZW4oKGVycm9yTW9kdWxlKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpbXBvcnQoJy4uL3BhZ2VzL19hcHAnKS50aGVuKChhcHBNb2R1bGUpID0+IHtcbiAgICAgICAgICAgICAgICBBcHAgPSBhcHBNb2R1bGUuZGVmYXVsdCBhcyBhbnkgYXMgQXBwQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgcmVuZGVyRXJyb3JQcm9wcy5BcHAgPSBBcHBcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNb2R1bGVcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigobSkgPT4gKHtcbiAgICAgICAgICAgICAgRXJyb3JDb21wb25lbnQ6IG0uZGVmYXVsdCBhcyBSZWFjdC5Db21wb25lbnRUeXBlPHt9PixcbiAgICAgICAgICAgICAgc3R5bGVTaGVldHM6IFtdLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgIDogeyBFcnJvckNvbXBvbmVudCwgc3R5bGVTaGVldHMgfVxuICAgIH0pXG4gICAgLnRoZW4oKHsgRXJyb3JDb21wb25lbnQsIHN0eWxlU2hlZXRzIH0pID0+IHtcbiAgICAgIC8vIEluIHByb2R1Y3Rpb24gd2UgZG8gYSBub3JtYWwgcmVuZGVyIHdpdGggdGhlIGBFcnJvckNvbXBvbmVudGAgYXMgY29tcG9uZW50LlxuICAgICAgLy8gSWYgd2UndmUgZ290dGVuIGhlcmUgdXBvbiBpbml0aWFsIHJlbmRlciwgd2UgY2FuIHVzZSB0aGUgcHJvcHMgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGNhbGwgYGdldEluaXRpYWxQcm9wc2Agb24gYEFwcGAgYmVmb3JlIG1vdW50aW5nLlxuICAgICAgY29uc3QgQXBwVHJlZSA9IHdyYXBBcHAoQXBwKVxuICAgICAgY29uc3QgYXBwQ3R4ID0ge1xuICAgICAgICBDb21wb25lbnQ6IEVycm9yQ29tcG9uZW50LFxuICAgICAgICBBcHBUcmVlLFxuICAgICAgICByb3V0ZXIsXG4gICAgICAgIGN0eDoge1xuICAgICAgICAgIGVycixcbiAgICAgICAgICBwYXRobmFtZTogaW5pdGlhbERhdGEucGFnZSxcbiAgICAgICAgICBxdWVyeTogaW5pdGlhbERhdGEucXVlcnksXG4gICAgICAgICAgYXNQYXRoLFxuICAgICAgICAgIEFwcFRyZWUsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICByZW5kZXJFcnJvclByb3BzLnByb3BzPy5lcnJcbiAgICAgICAgICA/IHJlbmRlckVycm9yUHJvcHMucHJvcHNcbiAgICAgICAgICA6IGxvYWRHZXRJbml0aWFsUHJvcHMoQXBwLCBhcHBDdHgpXG4gICAgICApLnRoZW4oKGluaXRQcm9wcykgPT5cbiAgICAgICAgLy8gVE9ETzogRml4IGRpc2FibGVkIGVzbGludCBydWxlXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgZG9SZW5kZXIoe1xuICAgICAgICAgIC4uLnJlbmRlckVycm9yUHJvcHMsXG4gICAgICAgICAgZXJyLFxuICAgICAgICAgIENvbXBvbmVudDogRXJyb3JDb21wb25lbnQsXG4gICAgICAgICAgc3R5bGVTaGVldHMsXG4gICAgICAgICAgcHJvcHM6IGluaXRQcm9wcyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9KVxufVxuXG4vLyBEdW1teSBjb21wb25lbnQgdGhhdCB3ZSByZW5kZXIgYXMgYSBjaGlsZCBvZiBSb290IHNvIHRoYXQgd2UgY2FuXG4vLyB0b2dnbGUgdGhlIGNvcnJlY3Qgc3R5bGVzIGJlZm9yZSB0aGUgcGFnZSBpcyByZW5kZXJlZC5cbmZ1bmN0aW9uIEhlYWQoeyBjYWxsYmFjayB9OiB7IGNhbGxiYWNrOiAoKSA9PiB2b2lkIH0pOiBudWxsIHtcbiAgLy8gV2UgdXNlIGB1c2VMYXlvdXRFZmZlY3RgIHRvIGd1YXJhbnRlZSB0aGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWRcbiAgLy8gYXMgc29vbiBhcyBSZWFjdCBmbHVzaGVzIHRoZSB1cGRhdGUuXG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiBjYWxsYmFjaygpLCBbY2FsbGJhY2tdKVxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCBwZXJmb3JtYW5jZU1hcmtzID0ge1xuICBuYXZpZ2F0aW9uU3RhcnQ6ICduYXZpZ2F0aW9uU3RhcnQnLFxuICBiZWZvcmVSZW5kZXI6ICdiZWZvcmVSZW5kZXInLFxuICBhZnRlclJlbmRlcjogJ2FmdGVyUmVuZGVyJyxcbiAgYWZ0ZXJIeWRyYXRlOiAnYWZ0ZXJIeWRyYXRlJyxcbiAgcm91dGVDaGFuZ2U6ICdyb3V0ZUNoYW5nZScsXG59IGFzIGNvbnN0XG5cbmNvbnN0IHBlcmZvcm1hbmNlTWVhc3VyZXMgPSB7XG4gIGh5ZHJhdGlvbjogJ05leHQuanMtaHlkcmF0aW9uJyxcbiAgYmVmb3JlSHlkcmF0aW9uOiAnTmV4dC5qcy1iZWZvcmUtaHlkcmF0aW9uJyxcbiAgcm91dGVDaGFuZ2VUb1JlbmRlcjogJ05leHQuanMtcm91dGUtY2hhbmdlLXRvLXJlbmRlcicsXG4gIHJlbmRlcjogJ05leHQuanMtcmVuZGVyJyxcbn0gYXMgY29uc3RcblxubGV0IHJlYWN0Um9vdDogYW55ID0gbnVsbFxuLy8gT24gaW5pdGlhbCByZW5kZXIgYSBoeWRyYXRlIHNob3VsZCBhbHdheXMgaGFwcGVuXG5sZXQgc2hvdWxkSHlkcmF0ZTogYm9vbGVhbiA9IHRydWVcblxuZnVuY3Rpb24gY2xlYXJNYXJrcygpOiB2b2lkIHtcbiAgO1tcbiAgICBwZXJmb3JtYW5jZU1hcmtzLmJlZm9yZVJlbmRlcixcbiAgICBwZXJmb3JtYW5jZU1hcmtzLmFmdGVySHlkcmF0ZSxcbiAgICBwZXJmb3JtYW5jZU1hcmtzLmFmdGVyUmVuZGVyLFxuICAgIHBlcmZvcm1hbmNlTWFya3Mucm91dGVDaGFuZ2UsXG4gIF0uZm9yRWFjaCgobWFyaykgPT4gcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyhtYXJrKSlcbn1cblxuZnVuY3Rpb24gbWFya0h5ZHJhdGVDb21wbGV0ZSgpOiB2b2lkIHtcbiAgaWYgKCFTVCkgcmV0dXJuXG5cbiAgcGVyZm9ybWFuY2UubWFyayhwZXJmb3JtYW5jZU1hcmtzLmFmdGVySHlkcmF0ZSkgLy8gbWFyayBlbmQgb2YgaHlkcmF0aW9uXG5cbiAgY29uc3QgaGFzQmVmb3JlUmVuZGVyTWFyayA9IHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWUoXG4gICAgcGVyZm9ybWFuY2VNYXJrcy5iZWZvcmVSZW5kZXIsXG4gICAgJ21hcmsnXG4gICkubGVuZ3RoXG4gIGlmIChoYXNCZWZvcmVSZW5kZXJNYXJrKSB7XG4gICAgY29uc3QgYmVmb3JlSHlkcmF0aW9uTWVhc3VyZSA9IHBlcmZvcm1hbmNlLm1lYXN1cmUoXG4gICAgICBwZXJmb3JtYW5jZU1lYXN1cmVzLmJlZm9yZUh5ZHJhdGlvbixcbiAgICAgIHBlcmZvcm1hbmNlTWFya3MubmF2aWdhdGlvblN0YXJ0LFxuICAgICAgcGVyZm9ybWFuY2VNYXJrcy5iZWZvcmVSZW5kZXJcbiAgICApXG5cbiAgICBjb25zdCBoeWRyYXRpb25NZWFzdXJlID0gcGVyZm9ybWFuY2UubWVhc3VyZShcbiAgICAgIHBlcmZvcm1hbmNlTWVhc3VyZXMuaHlkcmF0aW9uLFxuICAgICAgcGVyZm9ybWFuY2VNYXJrcy5iZWZvcmVSZW5kZXIsXG4gICAgICBwZXJmb3JtYW5jZU1hcmtzLmFmdGVySHlkcmF0ZVxuICAgIClcblxuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmXG4gICAgICAvLyBPbGQgdmVyc2lvbnMgb2YgU2FmYXJpIGRvbid0IHJldHVybiBgUGVyZm9ybWFuY2VNZWFzdXJlYHMgZnJvbSBgcGVyZm9ybWFuY2UubWVhc3VyZSgpYFxuICAgICAgYmVmb3JlSHlkcmF0aW9uTWVhc3VyZSAmJlxuICAgICAgaHlkcmF0aW9uTWVhc3VyZVxuICAgICkge1xuICAgICAgdHJhY2VyXG4gICAgICAgIC5zdGFydFNwYW4oJ25hdmlnYXRpb24tdG8taHlkcmF0aW9uJywge1xuICAgICAgICAgIHN0YXJ0VGltZTogcGVyZm9ybWFuY2UudGltZU9yaWdpbiArIGJlZm9yZUh5ZHJhdGlvbk1lYXN1cmUuc3RhcnRUaW1lLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICAgIHF1ZXJ5OiBsb2NhdGlvbi5zZWFyY2gsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLmVuZChcbiAgICAgICAgICBwZXJmb3JtYW5jZS50aW1lT3JpZ2luICtcbiAgICAgICAgICAgIGh5ZHJhdGlvbk1lYXN1cmUuc3RhcnRUaW1lICtcbiAgICAgICAgICAgIGh5ZHJhdGlvbk1lYXN1cmUuZHVyYXRpb25cbiAgICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGlmIChvblBlcmZFbnRyeSkge1xuICAgIHBlcmZvcm1hbmNlXG4gICAgICAuZ2V0RW50cmllc0J5TmFtZShwZXJmb3JtYW5jZU1lYXN1cmVzLmh5ZHJhdGlvbilcbiAgICAgIC5mb3JFYWNoKG9uUGVyZkVudHJ5KVxuICB9XG4gIGNsZWFyTWFya3MoKVxufVxuXG5mdW5jdGlvbiBtYXJrUmVuZGVyQ29tcGxldGUoKTogdm9pZCB7XG4gIGlmICghU1QpIHJldHVyblxuXG4gIHBlcmZvcm1hbmNlLm1hcmsocGVyZm9ybWFuY2VNYXJrcy5hZnRlclJlbmRlcikgLy8gbWFyayBlbmQgb2YgcmVuZGVyXG4gIGNvbnN0IG5hdlN0YXJ0RW50cmllczogUGVyZm9ybWFuY2VFbnRyeUxpc3QgPSBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKFxuICAgIHBlcmZvcm1hbmNlTWFya3Mucm91dGVDaGFuZ2UsXG4gICAgJ21hcmsnXG4gIClcblxuICBpZiAoIW5hdlN0YXJ0RW50cmllcy5sZW5ndGgpIHJldHVyblxuXG4gIGNvbnN0IGhhc0JlZm9yZVJlbmRlck1hcmsgPSBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKFxuICAgIHBlcmZvcm1hbmNlTWFya3MuYmVmb3JlUmVuZGVyLFxuICAgICdtYXJrJ1xuICApLmxlbmd0aFxuXG4gIGlmIChoYXNCZWZvcmVSZW5kZXJNYXJrKSB7XG4gICAgcGVyZm9ybWFuY2UubWVhc3VyZShcbiAgICAgIHBlcmZvcm1hbmNlTWVhc3VyZXMucm91dGVDaGFuZ2VUb1JlbmRlcixcbiAgICAgIG5hdlN0YXJ0RW50cmllc1swXS5uYW1lLFxuICAgICAgcGVyZm9ybWFuY2VNYXJrcy5iZWZvcmVSZW5kZXJcbiAgICApXG4gICAgcGVyZm9ybWFuY2UubWVhc3VyZShcbiAgICAgIHBlcmZvcm1hbmNlTWVhc3VyZXMucmVuZGVyLFxuICAgICAgcGVyZm9ybWFuY2VNYXJrcy5iZWZvcmVSZW5kZXIsXG4gICAgICBwZXJmb3JtYW5jZU1hcmtzLmFmdGVyUmVuZGVyXG4gICAgKVxuICAgIGlmIChvblBlcmZFbnRyeSkge1xuICAgICAgcGVyZm9ybWFuY2VcbiAgICAgICAgLmdldEVudHJpZXNCeU5hbWUocGVyZm9ybWFuY2VNZWFzdXJlcy5yZW5kZXIpXG4gICAgICAgIC5mb3JFYWNoKG9uUGVyZkVudHJ5KVxuICAgICAgcGVyZm9ybWFuY2VcbiAgICAgICAgLmdldEVudHJpZXNCeU5hbWUocGVyZm9ybWFuY2VNZWFzdXJlcy5yb3V0ZUNoYW5nZVRvUmVuZGVyKVxuICAgICAgICAuZm9yRWFjaChvblBlcmZFbnRyeSlcbiAgICB9XG4gIH1cblxuICBjbGVhck1hcmtzKClcbiAgO1tcbiAgICBwZXJmb3JtYW5jZU1lYXN1cmVzLnJvdXRlQ2hhbmdlVG9SZW5kZXIsXG4gICAgcGVyZm9ybWFuY2VNZWFzdXJlcy5yZW5kZXIsXG4gIF0uZm9yRWFjaCgobWVhc3VyZSkgPT4gcGVyZm9ybWFuY2UuY2xlYXJNZWFzdXJlcyhtZWFzdXJlKSlcbn1cblxuZnVuY3Rpb24gcmVuZGVyUmVhY3RFbGVtZW50KFxuICBkb21FbDogSFRNTEVsZW1lbnQsXG4gIGZuOiAoY2I6ICgpID0+IHZvaWQpID0+IEpTWC5FbGVtZW50XG4pOiB2b2lkIHtcbiAgLy8gbWFyayBzdGFydCBvZiBoeWRyYXRlL3JlbmRlclxuICBpZiAoU1QpIHtcbiAgICBwZXJmb3JtYW5jZS5tYXJrKHBlcmZvcm1hbmNlTWFya3MuYmVmb3JlUmVuZGVyKVxuICB9XG5cbiAgY29uc3QgcmVhY3RFbCA9IGZuKHNob3VsZEh5ZHJhdGUgPyBtYXJrSHlkcmF0ZUNvbXBsZXRlIDogbWFya1JlbmRlckNvbXBsZXRlKVxuICBpZiAoIXJlYWN0Um9vdCkge1xuICAgIC8vIFVubGlrZSB3aXRoIGNyZWF0ZVJvb3QsIHlvdSBkb24ndCBuZWVkIGEgc2VwYXJhdGUgcm9vdC5yZW5kZXIoKSBjYWxsIGhlcmVcbiAgICByZWFjdFJvb3QgPSBSZWFjdERPTS5oeWRyYXRlUm9vdChkb21FbCwgcmVhY3RFbCwge1xuICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgIH0pXG4gICAgLy8gVE9ETzogUmVtb3ZlIHNob3VsZEh5ZHJhdGUgdmFyaWFibGUgd2hlbiBSZWFjdCAxOCBpcyBzdGFibGUgYXMgaXQgY2FuIGRlcGVuZCBvbiBgcmVhY3RSb290YCBleGlzdGluZ1xuICAgIHNob3VsZEh5ZHJhdGUgPSBmYWxzZVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN0YXJ0VHJhbnNpdGlvbiA9IChSZWFjdCBhcyBhbnkpLnN0YXJ0VHJhbnNpdGlvblxuICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICByZWFjdFJvb3QucmVuZGVyKHJlYWN0RWwpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBSb290KHtcbiAgY2FsbGJhY2tzLFxuICBjaGlsZHJlbixcbn06IFJlYWN0LlByb3BzV2l0aENoaWxkcmVuPHtcbiAgY2FsbGJhY2tzOiBBcnJheTwoKSA9PiB2b2lkPlxufT4pOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICAvLyBXZSB1c2UgYHVzZUxheW91dEVmZmVjdGAgdG8gZ3VhcmFudGVlIHRoZSBjYWxsYmFja3MgYXJlIGV4ZWN1dGVkXG4gIC8vIGFzIHNvb24gYXMgUmVhY3QgZmx1c2hlcyB0aGUgdXBkYXRlXG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdChcbiAgICAoKSA9PiBjYWxsYmFja3MuZm9yRWFjaCgoY2FsbGJhY2spID0+IGNhbGxiYWNrKCkpLFxuICAgIFtjYWxsYmFja3NdXG4gIClcblxuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1RFU1RfTU9ERSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICB3aW5kb3cuX19ORVhUX0hZRFJBVEVEID0gdHJ1ZVxuICAgICAgd2luZG93Ll9fTkVYVF9IWURSQVRFRF9BVCA9IHBlcmZvcm1hbmNlLm5vdygpXG5cbiAgICAgIGlmICh3aW5kb3cuX19ORVhUX0hZRFJBVEVEX0NCKSB7XG4gICAgICAgIHdpbmRvdy5fX05FWFRfSFlEUkFURURfQ0IoKVxuICAgICAgfVxuICAgIH0sIFtdKVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuIGFzIFJlYWN0LlJlYWN0RWxlbWVudFxufVxuXG5mdW5jdGlvbiBkb1JlbmRlcihpbnB1dDogUmVuZGVyUm91dGVJbmZvKTogUHJvbWlzZTxhbnk+IHtcbiAgbGV0IHsgQXBwLCBDb21wb25lbnQsIHByb3BzLCBlcnIgfTogUmVuZGVyUm91dGVJbmZvID0gaW5wdXRcbiAgbGV0IHN0eWxlU2hlZXRzOiBTdHlsZVNoZWV0VHVwbGVbXSB8IHVuZGVmaW5lZCA9XG4gICAgJ2luaXRpYWwnIGluIGlucHV0ID8gdW5kZWZpbmVkIDogaW5wdXQuc3R5bGVTaGVldHNcbiAgQ29tcG9uZW50ID0gQ29tcG9uZW50IHx8IGxhc3RBcHBQcm9wcy5Db21wb25lbnRcbiAgcHJvcHMgPSBwcm9wcyB8fCBsYXN0QXBwUHJvcHMucHJvcHNcblxuICBjb25zdCBhcHBQcm9wczogQXBwUHJvcHMgPSB7XG4gICAgLi4ucHJvcHMsXG4gICAgQ29tcG9uZW50LFxuICAgIGVycixcbiAgICByb3V0ZXIsXG4gIH1cbiAgLy8gbGFzdEFwcFByb3BzIGhhcyB0byBiZSBzZXQgYmVmb3JlIFJlYWN0RG9tLnJlbmRlciB0byBhY2NvdW50IGZvciBSZWFjdERvbSB0aHJvd2luZyBhbiBlcnJvci5cbiAgbGFzdEFwcFByb3BzID0gYXBwUHJvcHNcblxuICBsZXQgY2FuY2VsZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgcmVzb2x2ZVByb21pc2U6ICgpID0+IHZvaWRcbiAgY29uc3QgcmVuZGVyUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAobGFzdFJlbmRlclJlamVjdCkge1xuICAgICAgbGFzdFJlbmRlclJlamVjdCgpXG4gICAgfVxuICAgIHJlc29sdmVQcm9taXNlID0gKCkgPT4ge1xuICAgICAgbGFzdFJlbmRlclJlamVjdCA9IG51bGxcbiAgICAgIHJlc29sdmUoKVxuICAgIH1cbiAgICBsYXN0UmVuZGVyUmVqZWN0ID0gKCkgPT4ge1xuICAgICAgY2FuY2VsZWQgPSB0cnVlXG4gICAgICBsYXN0UmVuZGVyUmVqZWN0ID0gbnVsbFxuXG4gICAgICBjb25zdCBlcnJvcjogYW55ID0gbmV3IEVycm9yKCdDYW5jZWwgcmVuZGVyaW5nIHJvdXRlJylcbiAgICAgIGVycm9yLmNhbmNlbGxlZCA9IHRydWVcbiAgICAgIHJlamVjdChlcnJvcilcbiAgICB9XG4gIH0pXG5cbiAgLy8gVGhpcyBmdW5jdGlvbiBoYXMgYSByZXR1cm4gdHlwZSB0byBlbnN1cmUgaXQgZG9lc24ndCBzdGFydCByZXR1cm5pbmcgYVxuICAvLyBQcm9taXNlLiBJdCBzaG91bGQgcmVtYWluIHN5bmNocm9ub3VzLlxuICBmdW5jdGlvbiBvblN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICFzdHlsZVNoZWV0cyB8fFxuICAgICAgLy8gV2UgdXNlIGBzdHlsZS1sb2FkZXJgIGluIGRldmVsb3BtZW50LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nXG4gICAgICAvLyB1bmxlc3Mgd2UncmUgaW4gcHJvZHVjdGlvbjpcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRTdHlsZVRhZ3M6IEhUTUxTdHlsZUVsZW1lbnRbXSA9IGxvb3NlVG9BcnJheTxIVE1MU3R5bGVFbGVtZW50PihcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3N0eWxlW2RhdGEtbi1ocmVmXScpXG4gICAgKVxuICAgIGNvbnN0IGN1cnJlbnRIcmVmczogU2V0PHN0cmluZyB8IG51bGw+ID0gbmV3IFNldChcbiAgICAgIGN1cnJlbnRTdHlsZVRhZ3MubWFwKCh0YWcpID0+IHRhZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtbi1ocmVmJykpXG4gICAgKVxuXG4gICAgY29uc3Qgbm9zY3JpcHQ6IEVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICdub3NjcmlwdFtkYXRhLW4tY3NzXSdcbiAgICApXG4gICAgY29uc3Qgbm9uY2U6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPVxuICAgICAgbm9zY3JpcHQ/LmdldEF0dHJpYnV0ZSgnZGF0YS1uLWNzcycpXG5cbiAgICBzdHlsZVNoZWV0cy5mb3JFYWNoKCh7IGhyZWYsIHRleHQgfTogeyBocmVmOiBzdHJpbmc7IHRleHQ6IGFueSB9KSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRIcmVmcy5oYXMoaHJlZikpIHtcbiAgICAgICAgY29uc3Qgc3R5bGVUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpXG4gICAgICAgIHN0eWxlVGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1uLWhyZWYnLCBocmVmKVxuICAgICAgICBzdHlsZVRhZy5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgJ3gnKVxuXG4gICAgICAgIGlmIChub25jZSkge1xuICAgICAgICAgIHN0eWxlVGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBub25jZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVUYWcpXG4gICAgICAgIHN0eWxlVGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uSGVhZENvbW1pdCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAvLyBUdXJib3BhY2sgaGFzIGl0J3Mgb3duIGNzcyBpbmplY3Rpb24gaGFuZGxpbmcsIHRoaXMgY29kZSBlbmRzIHVwIHJlbW92aW5nIHRoZSBDU1MuXG4gICAgICAhcHJvY2Vzcy5lbnYuVFVSQk9QQUNLICYmXG4gICAgICAvLyBXZSB1c2UgYHN0eWxlLWxvYWRlcmAgaW4gZGV2ZWxvcG1lbnQsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgICAgIC8vIHVubGVzcyB3ZSdyZSBpbiBwcm9kdWN0aW9uOlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgLy8gV2UgY2FuIHNraXAgdGhpcyBkdXJpbmcgaHlkcmF0aW9uLiBSdW5uaW5nIGl0IHdvbnQgY2F1c2UgYW55IGhhcm0sIGJ1dFxuICAgICAgLy8gd2UgbWF5IGFzIHdlbGwgc2F2ZSB0aGUgQ1BVIGN5Y2xlczpcbiAgICAgIHN0eWxlU2hlZXRzICYmXG4gICAgICAvLyBFbnN1cmUgdGhpcyByZW5kZXIgd2FzIG5vdCBjYW5jZWxlZFxuICAgICAgIWNhbmNlbGVkXG4gICAgKSB7XG4gICAgICBjb25zdCBkZXNpcmVkSHJlZnM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChzdHlsZVNoZWV0cy5tYXAoKHMpID0+IHMuaHJlZikpXG4gICAgICBjb25zdCBjdXJyZW50U3R5bGVUYWdzOiBIVE1MU3R5bGVFbGVtZW50W10gPVxuICAgICAgICBsb29zZVRvQXJyYXk8SFRNTFN0eWxlRWxlbWVudD4oXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGVbZGF0YS1uLWhyZWZdJylcbiAgICAgICAgKVxuICAgICAgY29uc3QgY3VycmVudEhyZWZzOiBzdHJpbmdbXSA9IGN1cnJlbnRTdHlsZVRhZ3MubWFwKFxuICAgICAgICAodGFnKSA9PiB0YWcuZ2V0QXR0cmlidXRlKCdkYXRhLW4taHJlZicpIVxuICAgICAgKVxuXG4gICAgICAvLyBUb2dnbGUgYDxzdHlsZT5gIHRhZ3Mgb24gb3Igb2ZmIGRlcGVuZGluZyBvbiBpZiB0aGV5J3JlIG5lZWRlZDpcbiAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGN1cnJlbnRIcmVmcy5sZW5ndGg7ICsraWR4KSB7XG4gICAgICAgIGlmIChkZXNpcmVkSHJlZnMuaGFzKGN1cnJlbnRIcmVmc1tpZHhdKSkge1xuICAgICAgICAgIGN1cnJlbnRTdHlsZVRhZ3NbaWR4XS5yZW1vdmVBdHRyaWJ1dGUoJ21lZGlhJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50U3R5bGVUYWdzW2lkeF0uc2V0QXR0cmlidXRlKCdtZWRpYScsICd4JylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZW9yZGVyIHN0eWxlcyBpbnRvIGludGVuZGVkIG9yZGVyOlxuICAgICAgbGV0IHJlZmVyZW5jZU5vZGU6IEVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJ25vc2NyaXB0W2RhdGEtbi1jc3NdJ1xuICAgICAgKVxuICAgICAgaWYgKFxuICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBhbiBpbnZhcmlhbnQ6XG4gICAgICAgIHJlZmVyZW5jZU5vZGVcbiAgICAgICkge1xuICAgICAgICBzdHlsZVNoZWV0cy5mb3JFYWNoKCh7IGhyZWYgfTogeyBocmVmOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldFRhZzogRWxlbWVudCB8IG51bGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgYHN0eWxlW2RhdGEtbi1ocmVmPVwiJHtocmVmfVwiXWBcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgYW4gaW52YXJpYW50OlxuICAgICAgICAgICAgdGFyZ2V0VGFnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZWZlcmVuY2VOb2RlIS5wYXJlbnROb2RlIS5pbnNlcnRCZWZvcmUoXG4gICAgICAgICAgICAgIHRhcmdldFRhZyxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZSEubmV4dFNpYmxpbmdcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUgPSB0YXJnZXRUYWdcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmFsbHksIGNsZWFuIHVwIHNlcnZlciByZW5kZXJlZCBzdHlsZXNoZWV0czpcbiAgICAgIGxvb3NlVG9BcnJheTxIVE1MTGlua0VsZW1lbnQ+KFxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdsaW5rW2RhdGEtbi1wXScpXG4gICAgICApLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgIGVsLnBhcmVudE5vZGUhLnJlbW92ZUNoaWxkKGVsKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQuc2Nyb2xsKSB7XG4gICAgICBjb25zdCB7IHgsIHkgfSA9IGlucHV0LnNjcm9sbFxuICAgICAgZGlzYWJsZVNtb290aFNjcm9sbER1cmluZ1JvdXRlVHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh4LCB5KVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblJvb3RDb21taXQoKTogdm9pZCB7XG4gICAgcmVzb2x2ZVByb21pc2UoKVxuICB9XG5cbiAgb25TdGFydCgpXG5cbiAgY29uc3QgZWxlbTogSlNYLkVsZW1lbnQgPSAoXG4gICAgPD5cbiAgICAgIDxIZWFkIGNhbGxiYWNrPXtvbkhlYWRDb21taXR9IC8+XG4gICAgICA8QXBwQ29udGFpbmVyPlxuICAgICAgICB7cmVuZGVyQXBwKEFwcCwgYXBwUHJvcHMpfVxuICAgICAgICA8UG9ydGFsIHR5cGU9XCJuZXh0LXJvdXRlLWFubm91bmNlclwiPlxuICAgICAgICAgIDxSb3V0ZUFubm91bmNlciAvPlxuICAgICAgICA8L1BvcnRhbD5cbiAgICAgIDwvQXBwQ29udGFpbmVyPlxuICAgIDwvPlxuICApXG5cbiAgLy8gV2UgY2F0Y2ggcnVudGltZSBlcnJvcnMgdXNpbmcgY29tcG9uZW50RGlkQ2F0Y2ggd2hpY2ggd2lsbCB0cmlnZ2VyIHJlbmRlckVycm9yXG4gIHJlbmRlclJlYWN0RWxlbWVudChhcHBFbGVtZW50ISwgKGNhbGxiYWNrKSA9PiAoXG4gICAgPFJvb3QgY2FsbGJhY2tzPXtbY2FsbGJhY2ssIG9uUm9vdENvbW1pdF19PlxuICAgICAge3Byb2Nlc3MuZW52Ll9fTkVYVF9TVFJJQ1RfTU9ERSA/IChcbiAgICAgICAgPFJlYWN0LlN0cmljdE1vZGU+e2VsZW19PC9SZWFjdC5TdHJpY3RNb2RlPlxuICAgICAgKSA6IChcbiAgICAgICAgZWxlbVxuICAgICAgKX1cbiAgICA8L1Jvb3Q+XG4gICkpXG5cbiAgcmV0dXJuIHJlbmRlclByb21pc2Vcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVuZGVyKHJlbmRlcmluZ1Byb3BzOiBSZW5kZXJSb3V0ZUluZm8pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gaWYgYW4gZXJyb3Igb2NjdXJzIGluIGEgc2VydmVyLXNpZGUgcGFnZSAoZS5nLiBpbiBnZXRJbml0aWFsUHJvcHMpLFxuICAvLyBza2lwIHJlLXJlbmRlcmluZyB0aGUgZXJyb3IgcGFnZSBjbGllbnQtc2lkZSBhcyBkYXRhLWZldGNoaW5nIG9wZXJhdGlvbnNcbiAgLy8gd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBkb25lIG9uIHRoZSBzZXJ2ZXIgYW5kIE5FWFRfREFUQSBjb250YWlucyB0aGUgY29ycmVjdFxuICAvLyBkYXRhIGZvciBzdHJhaWdodC1mb3J3YXJkIGh5ZHJhdGlvbiBvZiB0aGUgZXJyb3IgcGFnZVxuICBpZiAoXG4gICAgcmVuZGVyaW5nUHJvcHMuZXJyICYmXG4gICAgLy8gcmVuZGVyaW5nUHJvcHMuQ29tcG9uZW50IG1pZ2h0IGJlIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBhIHRvcC9tb2R1bGUtbGV2ZWwgZXJyb3JcbiAgICAodHlwZW9mIHJlbmRlcmluZ1Byb3BzLkNvbXBvbmVudCA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICFyZW5kZXJpbmdQcm9wcy5pc0h5ZHJhdGVQYXNzKVxuICApIHtcbiAgICBhd2FpdCByZW5kZXJFcnJvcihyZW5kZXJpbmdQcm9wcylcbiAgICByZXR1cm5cbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgZG9SZW5kZXIocmVuZGVyaW5nUHJvcHMpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlbmRlckVyciA9IGdldFByb3BlckVycm9yKGVycilcbiAgICAvLyBidWJibGUgdXAgY2FuY2VsYXRpb24gZXJyb3JzXG4gICAgaWYgKChyZW5kZXJFcnIgYXMgRXJyb3IgJiB7IGNhbmNlbGxlZD86IGJvb2xlYW4gfSkuY2FuY2VsbGVkKSB7XG4gICAgICB0aHJvdyByZW5kZXJFcnJcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIC8vIEVuc3VyZSB0aGlzIGVycm9yIGlzIGRpc3BsYXllZCBpbiB0aGUgb3ZlcmxheSBpbiBkZXZlbG9wbWVudFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRocm93IHJlbmRlckVyclxuICAgICAgfSlcbiAgICB9XG4gICAgYXdhaXQgcmVuZGVyRXJyb3IoeyAuLi5yZW5kZXJpbmdQcm9wcywgZXJyOiByZW5kZXJFcnIgfSlcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZShvcHRzPzogeyBiZWZvcmVSZW5kZXI/OiAoKSA9PiBQcm9taXNlPHZvaWQ+IH0pIHtcbiAgbGV0IGluaXRpYWxFcnIgPSBpbml0aWFsRGF0YS5lcnJcblxuICB0cnkge1xuICAgIGNvbnN0IGFwcEVudHJ5cG9pbnQgPSBhd2FpdCBwYWdlTG9hZGVyLnJvdXRlTG9hZGVyLndoZW5FbnRyeXBvaW50KCcvX2FwcCcpXG4gICAgaWYgKCdlcnJvcicgaW4gYXBwRW50cnlwb2ludCkge1xuICAgICAgdGhyb3cgYXBwRW50cnlwb2ludC5lcnJvclxuICAgIH1cblxuICAgIGNvbnN0IHsgY29tcG9uZW50OiBhcHAsIGV4cG9ydHM6IG1vZCB9ID0gYXBwRW50cnlwb2ludFxuICAgIENhY2hlZEFwcCA9IGFwcCBhcyBBcHBDb21wb25lbnRcbiAgICBpZiAobW9kICYmIG1vZC5yZXBvcnRXZWJWaXRhbHMpIHtcbiAgICAgIG9uUGVyZkVudHJ5ID0gKHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGR1cmF0aW9uLFxuICAgICAgICBlbnRyeVR5cGUsXG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIGF0dHJpYnV0aW9uLFxuICAgICAgfTogYW55KTogdm9pZCA9PiB7XG4gICAgICAgIC8vIENvbWJpbmVzIHRpbWVzdGFtcCB3aXRoIHJhbmRvbSBudW1iZXIgZm9yIHVuaXF1ZSBJRFxuICAgICAgICBjb25zdCB1bmlxdWVJRDogc3RyaW5nID0gYCR7RGF0ZS5ub3coKX0tJHtcbiAgICAgICAgICBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoOWUxMiAtIDEpKSArIDFlMTJcbiAgICAgICAgfWBcbiAgICAgICAgbGV0IHBlcmZTdGFydEVudHJ5OiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICAgICAgICBpZiAoZW50cmllcyAmJiBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgICAgIHBlcmZTdGFydEVudHJ5ID0gZW50cmllc1swXS5zdGFydFRpbWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdlYlZpdGFsczogTmV4dFdlYlZpdGFsc01ldHJpYyA9IHtcbiAgICAgICAgICBpZDogaWQgfHwgdW5pcXVlSUQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBzdGFydFRpbWU6IHN0YXJ0VGltZSB8fCBwZXJmU3RhcnRFbnRyeSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUgPT0gbnVsbCA/IGR1cmF0aW9uIDogdmFsdWUsXG4gICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICBlbnRyeVR5cGUgPT09ICdtYXJrJyB8fCBlbnRyeVR5cGUgPT09ICdtZWFzdXJlJ1xuICAgICAgICAgICAgICA/ICdjdXN0b20nXG4gICAgICAgICAgICAgIDogJ3dlYi12aXRhbCcsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF0dHJpYnV0aW9uKSB7XG4gICAgICAgICAgd2ViVml0YWxzLmF0dHJpYnV0aW9uID0gYXR0cmlidXRpb25cbiAgICAgICAgfVxuICAgICAgICBtb2QucmVwb3J0V2ViVml0YWxzKHdlYlZpdGFscylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYWdlRW50cnlwb2ludCA9XG4gICAgICAvLyBUaGUgZGV2IHNlcnZlciBmYWlscyB0byBzZXJ2ZSBzY3JpcHQgYXNzZXRzIHdoZW4gdGhlcmUncyBhIGh5ZHJhdGlvblxuICAgICAgLy8gZXJyb3IsIHNvIHdlIG5lZWQgdG8gc2tpcCB3YWl0aW5nIGZvciB0aGUgZW50cnlwb2ludC5cbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmIGluaXRpYWxEYXRhLmVyclxuICAgICAgICA/IHsgZXJyb3I6IGluaXRpYWxEYXRhLmVyciB9XG4gICAgICAgIDogYXdhaXQgcGFnZUxvYWRlci5yb3V0ZUxvYWRlci53aGVuRW50cnlwb2ludChpbml0aWFsRGF0YS5wYWdlKVxuICAgIGlmICgnZXJyb3InIGluIHBhZ2VFbnRyeXBvaW50KSB7XG4gICAgICB0aHJvdyBwYWdlRW50cnlwb2ludC5lcnJvclxuICAgIH1cbiAgICBDYWNoZWRDb21wb25lbnQgPSBwYWdlRW50cnlwb2ludC5jb21wb25lbnRcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCB7IGlzVmFsaWRFbGVtZW50VHlwZSB9ID1cbiAgICAgICAgcmVxdWlyZSgnbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWlzJykgYXMgdHlwZW9mIGltcG9ydCgnbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWlzJylcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKENhY2hlZENvbXBvbmVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGUgZGVmYXVsdCBleHBvcnQgaXMgbm90IGEgUmVhY3QgQ29tcG9uZW50IGluIHBhZ2U6IFwiJHtpbml0aWFsRGF0YS5wYWdlfVwiYFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIFRoaXMgY2F0Y2hlcyBlcnJvcnMgbGlrZSB0aHJvd2luZyBpbiB0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlXG4gICAgaW5pdGlhbEVyciA9IGdldFByb3BlckVycm9yKGVycm9yKVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgY29uc3QgZ2V0U2VydmVyRXJyb3IgPSAoXG4gICAgICByZXF1aXJlKCcuLi9zZXJ2ZXIvZGV2L25vZGUtc3RhY2stZnJhbWVzJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vc2VydmVyL2Rldi9ub2RlLXN0YWNrLWZyYW1lcycpXG4gICAgKS5nZXRTZXJ2ZXJFcnJvclxuICAgIC8vIFNlcnZlci1zaWRlIHJ1bnRpbWUgZXJyb3JzIG5lZWQgdG8gYmUgcmUtdGhyb3duIG9uIHRoZSBjbGllbnQtc2lkZSBzb1xuICAgIC8vIHRoYXQgdGhlIG92ZXJsYXkgaXMgcmVuZGVyZWQuXG4gICAgaWYgKGluaXRpYWxFcnIpIHtcbiAgICAgIGlmIChpbml0aWFsRXJyID09PSBpbml0aWFsRGF0YS5lcnIpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgbGV0IGVycm9yXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEdlbmVyYXRlIGEgbmV3IGVycm9yIG9iamVjdC4gV2UgYHRocm93YCBpdCBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAgICAgICAgIC8vIHdpbGwgc2V0IHRoZSBgc3RhY2tgIHdoZW4gdGhyb3duLCBhbmQgd2Ugd2FudCB0byBlbnN1cmUgb3VycyBpc1xuICAgICAgICAgICAgLy8gbm90IG92ZXJyaWRkZW4gd2hlbiB3ZSByZS10aHJvdyBpdCBiZWxvdy5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihpbml0aWFsRXJyIS5tZXNzYWdlKVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yID0gZSBhcyBFcnJvclxuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yLm5hbWUgPSBpbml0aWFsRXJyIS5uYW1lXG4gICAgICAgICAgZXJyb3Iuc3RhY2sgPSBpbml0aWFsRXJyIS5zdGFja1xuICAgICAgICAgIGNvbnN0IGVyclNvdXJjZSA9IGluaXRpYWxFcnIuc291cmNlIVxuXG4gICAgICAgICAgLy8gSW4gZGV2ZWxvcG1lbnQsIGVycm9yIHRoZSBuYXZpZ2F0aW9uIEFQSSB1c2FnZSBpbiBydW50aW1lLFxuICAgICAgICAgIC8vIHNpbmNlIGl0J3Mgbm90IGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBwYWdlcyByb3V0ZXIgYXMgaXQgZG9lc24ndCBjb250YWluIGVycm9yIGJvdW5kYXJ5IGxpa2UgYXBwIHJvdXRlci5cbiAgICAgICAgICBpZiAoaXNOZXh0Um91dGVyRXJyb3IoaW5pdGlhbEVycikpIHtcbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAnTmV4dC5qcyBuYXZpZ2F0aW9uIEFQSSBpcyBub3QgYWxsb3dlZCB0byBiZSB1c2VkIGluIFBhZ2VzIFJvdXRlci4nXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZ2V0U2VydmVyRXJyb3IoZXJyb3IsIGVyclNvdXJjZSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIFdlIHJlcGxhY2VkIHRoZSBzZXJ2ZXItc2lkZSBlcnJvciB3aXRoIGEgY2xpZW50LXNpZGUgZXJyb3IsIGFuZCBzaG91bGRcbiAgICAgIC8vIG5vIGxvbmdlciByZXdyaXRlIHRoZSBzdGFjayB0cmFjZSB0byBhIE5vZGUgZXJyb3IuXG4gICAgICBlbHNlIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhyb3cgaW5pdGlhbEVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh3aW5kb3cuX19ORVhUX1BSRUxPQURSRUFEWSkge1xuICAgIGF3YWl0IHdpbmRvdy5fX05FWFRfUFJFTE9BRFJFQURZKGluaXRpYWxEYXRhLmR5bmFtaWNJZHMpXG4gIH1cblxuICByb3V0ZXIgPSBjcmVhdGVSb3V0ZXIoaW5pdGlhbERhdGEucGFnZSwgaW5pdGlhbERhdGEucXVlcnksIGFzUGF0aCwge1xuICAgIGluaXRpYWxQcm9wczogaW5pdGlhbERhdGEucHJvcHMsXG4gICAgcGFnZUxvYWRlcixcbiAgICBBcHA6IENhY2hlZEFwcCxcbiAgICBDb21wb25lbnQ6IENhY2hlZENvbXBvbmVudCxcbiAgICB3cmFwQXBwLFxuICAgIGVycjogaW5pdGlhbEVycixcbiAgICBpc0ZhbGxiYWNrOiBCb29sZWFuKGluaXRpYWxEYXRhLmlzRmFsbGJhY2spLFxuICAgIHN1YnNjcmlwdGlvbjogKGluZm8sIEFwcCwgc2Nyb2xsKSA9PlxuICAgICAgcmVuZGVyKFxuICAgICAgICBPYmplY3QuYXNzaWduPFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIE9taXQ8UmVuZGVyUm91dGVJbmZvLCAnQXBwJyB8ICdzY3JvbGwnPixcbiAgICAgICAgICBQaWNrPFJlbmRlclJvdXRlSW5mbywgJ0FwcCcgfCAnc2Nyb2xsJz5cbiAgICAgICAgPih7fSwgaW5mbywge1xuICAgICAgICAgIEFwcCxcbiAgICAgICAgICBzY3JvbGwsXG4gICAgICAgIH0pIGFzIFJlbmRlclJvdXRlSW5mb1xuICAgICAgKSxcbiAgICBsb2NhbGU6IGluaXRpYWxEYXRhLmxvY2FsZSxcbiAgICBsb2NhbGVzOiBpbml0aWFsRGF0YS5sb2NhbGVzLFxuICAgIGRlZmF1bHRMb2NhbGUsXG4gICAgZG9tYWluTG9jYWxlczogaW5pdGlhbERhdGEuZG9tYWluTG9jYWxlcyxcbiAgICBpc1ByZXZpZXc6IGluaXRpYWxEYXRhLmlzUHJldmlldyxcbiAgfSlcblxuICBpbml0aWFsTWF0Y2hlc01pZGRsZXdhcmUgPSBhd2FpdCByb3V0ZXIuX2luaXRpYWxNYXRjaGVzTWlkZGxld2FyZVByb21pc2VcblxuICBjb25zdCByZW5kZXJDdHg6IFJlbmRlclJvdXRlSW5mbyA9IHtcbiAgICBBcHA6IENhY2hlZEFwcCxcbiAgICBpbml0aWFsOiB0cnVlLFxuICAgIENvbXBvbmVudDogQ2FjaGVkQ29tcG9uZW50LFxuICAgIHByb3BzOiBpbml0aWFsRGF0YS5wcm9wcyxcbiAgICBlcnI6IGluaXRpYWxFcnIsXG4gICAgaXNIeWRyYXRlUGFzczogdHJ1ZSxcbiAgfVxuXG4gIGlmIChvcHRzPy5iZWZvcmVSZW5kZXIpIHtcbiAgICBhd2FpdCBvcHRzLmJlZm9yZVJlbmRlcigpXG4gIH1cblxuICByZW5kZXIocmVuZGVyQ3R4KVxufVxuIl0sIm5hbWVzIjpbImVtaXR0ZXIiLCJoeWRyYXRlIiwiaW5pdGlhbGl6ZSIsInJvdXRlciIsInZlcnNpb24iLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1ZFUlNJT04iLCJtaXR0IiwibG9vc2VUb0FycmF5IiwiaW5wdXQiLCJzbGljZSIsImNhbGwiLCJpbml0aWFsRGF0YSIsImRlZmF1bHRMb2NhbGUiLCJ1bmRlZmluZWQiLCJhc1BhdGgiLCJwYWdlTG9hZGVyIiwiYXBwRWxlbWVudCIsImhlYWRNYW5hZ2VyIiwiaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlIiwibGFzdEFwcFByb3BzIiwibGFzdFJlbmRlclJlamVjdCIsImRldkNsaWVudCIsIkNhY2hlZEFwcCIsIm9uUGVyZkVudHJ5IiwiQ2FjaGVkQ29tcG9uZW50IiwiQ29udGFpbmVyIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb21wb25lbnREaWRDYXRjaCIsImNvbXBvbmVudEVyciIsImluZm8iLCJwcm9wcyIsImZuIiwiY29tcG9uZW50RGlkTW91bnQiLCJzY3JvbGxUb0hhc2giLCJpc1NzciIsImlzRmFsbGJhY2siLCJuZXh0RXhwb3J0IiwiaXNEeW5hbWljUm91dGUiLCJwYXRobmFtZSIsImxvY2F0aW9uIiwic2VhcmNoIiwiX19ORVhUX0hBU19SRVdSSVRFUyIsIl9fTl9TU0ciLCJyZXBsYWNlIiwiU3RyaW5nIiwiYXNzaWduIiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsInF1ZXJ5IiwiVVJMU2VhcmNoUGFyYW1zIiwiX2giLCJzaGFsbG93IiwiY2F0Y2giLCJlcnIiLCJjYW5jZWxsZWQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJoYXNoIiwic3Vic3RyaW5nIiwiZWwiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwic2V0VGltZW91dCIsInNjcm9sbEludG9WaWV3IiwicmVuZGVyIiwiTk9ERV9FTlYiLCJjaGlsZHJlbiIsIlBhZ2VzRGV2T3ZlcmxheUJyaWRnZSIsInJlcXVpcmUiLCJvcHRzIiwidHJhY2VyIiwib25TcGFuRW5kIiwiZGVmYXVsdCIsIkpTT04iLCJwYXJzZSIsInRleHRDb250ZW50Iiwid2luZG93IiwiX19ORVhUX0RBVEFfXyIsInByZWZpeCIsImFzc2V0UHJlZml4Iiwic2VsZiIsIl9fbmV4dF9zZXRfcHVibGljX3BhdGhfXyIsInNldENvbmZpZyIsInNlcnZlclJ1bnRpbWVDb25maWciLCJwdWJsaWNSdW50aW1lQ29uZmlnIiwicnVudGltZUNvbmZpZyIsImdldFVSTCIsImhhc0Jhc2VQYXRoIiwicmVtb3ZlQmFzZVBhdGgiLCJfX05FWFRfSTE4Tl9TVVBQT1JUIiwibm9ybWFsaXplTG9jYWxlUGF0aCIsImRldGVjdERvbWFpbkxvY2FsZSIsInBhcnNlUmVsYXRpdmVVcmwiLCJmb3JtYXRVcmwiLCJsb2NhbGVzIiwicGFyc2VkQXMiLCJsb2NhbGVQYXRoUmVzdWx0IiwiZGV0ZWN0ZWRMb2NhbGUiLCJsb2NhbGUiLCJkZXRlY3RlZERvbWFpbiIsIl9fTkVYVF9JMThOX0RPTUFJTlMiLCJob3N0bmFtZSIsInNjcmlwdExvYWRlciIsImluaXRTY3JpcHRMb2FkZXIiLCJQYWdlTG9hZGVyIiwiYnVpbGRJZCIsInJlZ2lzdGVyIiwiciIsImYiLCJyb3V0ZUxvYWRlciIsIm9uRW50cnlwb2ludCIsIl9fTkVYVF9QIiwibWFwIiwicCIsInB1c2giLCJpbml0SGVhZE1hbmFnZXIiLCJnZXRJc1NzciIsInJlbmRlckFwcCIsIkFwcCIsImFwcFByb3BzIiwiQXBwQ29udGFpbmVyIiwiYWRhcHRlZEZvckFwcFJvdXRlciIsInVzZU1lbW8iLCJhZGFwdEZvckFwcFJvdXRlckluc3RhbmNlIiwiZXJyb3IiLCJyZW5kZXJFcnJvciIsImNvbnNvbGUiLCJBcHBSb3V0ZXJDb250ZXh0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsIlNlYXJjaFBhcmFtc0NvbnRleHQiLCJhZGFwdEZvclNlYXJjaFBhcmFtcyIsIlBhdGhuYW1lQ29udGV4dFByb3ZpZGVyQWRhcHRlciIsImlzQXV0b0V4cG9ydCIsImF1dG9FeHBvcnQiLCJQYXRoUGFyYW1zQ29udGV4dCIsImFkYXB0Rm9yUGF0aFBhcmFtcyIsIlJvdXRlckNvbnRleHQiLCJtYWtlUHVibGljUm91dGVySW5zdGFuY2UiLCJIZWFkTWFuYWdlckNvbnRleHQiLCJJbWFnZUNvbmZpZ0NvbnRleHQiLCJfX05FWFRfSU1BR0VfT1BUUyIsIndyYXBBcHAiLCJ3cmFwcGVkQXBwUHJvcHMiLCJyZW5kZXJFcnJvclByb3BzIiwib25VbnJlY292ZXJhYmxlRXJyb3IiLCJkb1JlbmRlciIsInN0eWxlU2hlZXRzIiwibG9hZFBhZ2UiLCJ0aGVuIiwicGFnZSIsIkVycm9yQ29tcG9uZW50IiwiZXJyb3JNb2R1bGUiLCJhcHBNb2R1bGUiLCJtIiwiQXBwVHJlZSIsImFwcEN0eCIsImN0eCIsIlByb21pc2UiLCJyZXNvbHZlIiwibG9hZEdldEluaXRpYWxQcm9wcyIsImluaXRQcm9wcyIsIkhlYWQiLCJjYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsInBlcmZvcm1hbmNlTWFya3MiLCJuYXZpZ2F0aW9uU3RhcnQiLCJiZWZvcmVSZW5kZXIiLCJhZnRlclJlbmRlciIsImFmdGVySHlkcmF0ZSIsInJvdXRlQ2hhbmdlIiwicGVyZm9ybWFuY2VNZWFzdXJlcyIsImh5ZHJhdGlvbiIsImJlZm9yZUh5ZHJhdGlvbiIsInJvdXRlQ2hhbmdlVG9SZW5kZXIiLCJyZWFjdFJvb3QiLCJzaG91bGRIeWRyYXRlIiwiY2xlYXJNYXJrcyIsImZvckVhY2giLCJtYXJrIiwicGVyZm9ybWFuY2UiLCJtYXJrSHlkcmF0ZUNvbXBsZXRlIiwiU1QiLCJoYXNCZWZvcmVSZW5kZXJNYXJrIiwiZ2V0RW50cmllc0J5TmFtZSIsImxlbmd0aCIsImJlZm9yZUh5ZHJhdGlvbk1lYXN1cmUiLCJtZWFzdXJlIiwiaHlkcmF0aW9uTWVhc3VyZSIsInN0YXJ0U3BhbiIsInN0YXJ0VGltZSIsInRpbWVPcmlnaW4iLCJhdHRyaWJ1dGVzIiwiZW5kIiwiZHVyYXRpb24iLCJtYXJrUmVuZGVyQ29tcGxldGUiLCJuYXZTdGFydEVudHJpZXMiLCJuYW1lIiwiY2xlYXJNZWFzdXJlcyIsInJlbmRlclJlYWN0RWxlbWVudCIsImRvbUVsIiwicmVhY3RFbCIsIlJlYWN0RE9NIiwiaHlkcmF0ZVJvb3QiLCJvblJlY292ZXJhYmxlRXJyb3IiLCJzdGFydFRyYW5zaXRpb24iLCJSb290IiwiY2FsbGJhY2tzIiwiX19ORVhUX1RFU1RfTU9ERSIsInVzZUVmZmVjdCIsIl9fTkVYVF9IWURSQVRFRCIsIl9fTkVYVF9IWURSQVRFRF9BVCIsIm5vdyIsIl9fTkVYVF9IWURSQVRFRF9DQiIsImNhbmNlbGVkIiwicmVzb2x2ZVByb21pc2UiLCJyZW5kZXJQcm9taXNlIiwicmVqZWN0IiwiRXJyb3IiLCJvblN0YXJ0IiwiY3VycmVudFN0eWxlVGFncyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjdXJyZW50SHJlZnMiLCJTZXQiLCJ0YWciLCJnZXRBdHRyaWJ1dGUiLCJub3NjcmlwdCIsInF1ZXJ5U2VsZWN0b3IiLCJub25jZSIsImhyZWYiLCJ0ZXh0IiwiaGFzIiwic3R5bGVUYWciLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiaGVhZCIsImFwcGVuZENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJvbkhlYWRDb21taXQiLCJUVVJCT1BBQ0siLCJkZXNpcmVkSHJlZnMiLCJzIiwiaWR4IiwicmVtb3ZlQXR0cmlidXRlIiwicmVmZXJlbmNlTm9kZSIsInRhcmdldFRhZyIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJuZXh0U2libGluZyIsInJlbW92ZUNoaWxkIiwic2Nyb2xsIiwieCIsInkiLCJkaXNhYmxlU21vb3RoU2Nyb2xsRHVyaW5nUm91dGVUcmFuc2l0aW9uIiwic2Nyb2xsVG8iLCJvblJvb3RDb21taXQiLCJlbGVtIiwiUG9ydGFsIiwidHlwZSIsIlJvdXRlQW5ub3VuY2VyIiwiX19ORVhUX1NUUklDVF9NT0RFIiwiU3RyaWN0TW9kZSIsInJlbmRlcmluZ1Byb3BzIiwiaXNIeWRyYXRlUGFzcyIsInJlbmRlckVyciIsImdldFByb3BlckVycm9yIiwiaW5pdGlhbEVyciIsImFwcEVudHJ5cG9pbnQiLCJ3aGVuRW50cnlwb2ludCIsImNvbXBvbmVudCIsImFwcCIsImV4cG9ydHMiLCJtb2QiLCJyZXBvcnRXZWJWaXRhbHMiLCJpZCIsImVudHJ5VHlwZSIsImVudHJpZXMiLCJhdHRyaWJ1dGlvbiIsInVuaXF1ZUlEIiwiRGF0ZSIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsInBlcmZTdGFydEVudHJ5Iiwid2ViVml0YWxzIiwibGFiZWwiLCJwYWdlRW50cnlwb2ludCIsImlzVmFsaWRFbGVtZW50VHlwZSIsImdldFNlcnZlckVycm9yIiwibWVzc2FnZSIsImUiLCJzdGFjayIsImVyclNvdXJjZSIsInNvdXJjZSIsImlzTmV4dFJvdXRlckVycm9yIiwiX19ORVhUX1BSRUxPQURSRUFEWSIsImR5bmFtaWNJZHMiLCJjcmVhdGVSb3V0ZXIiLCJpbml0aWFsUHJvcHMiLCJCb29sZWFuIiwic3Vic2NyaXB0aW9uIiwiT2JqZWN0IiwiZG9tYWluTG9jYWxlcyIsImlzUHJldmlldyIsIl9pbml0aWFsTWF0Y2hlc01pZGRsZXdhcmVQcm9taXNlIiwicmVuZGVyQ3R4IiwiaW5pdGlhbCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/index.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/next-dev.js":
/*!******************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/next-dev.js ***!
\******************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// TODO: Remove use of `any` type.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\n__webpack_require__(/*! ./webpack */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/webpack.js\");\nconst _ = __webpack_require__(/*! ./ */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/index.js\");\nconst _hotmiddlewareclient = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./dev/hot-middleware-client */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-middleware-client.js\"));\nconst _pagebootstrap = __webpack_require__(/*! ./page-bootstrap */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/page-bootstrap.js\");\nwindow.next = {\n version: _.version,\n // router is initialized later so it has to be live-binded\n get router () {\n return _.router;\n },\n emitter: _.emitter\n};\nconst devClient = (0, _hotmiddlewareclient.default)();\n(0, _.initialize)({\n devClient\n}).then((param)=>{\n let { assetPrefix } = param;\n return (0, _pagebootstrap.pageBootstrap)(assetPrefix);\n}).catch((err)=>{\n console.error('Error was not caught', err);\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=next-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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L25leHQtZGV2LmpzIiwibWFwcGluZ3MiOiJBQUFBLGtDQUFrQzs7Ozs7O29CQUMzQjs4QkFDOEM7MEZBQ2pDOzJDQUNVO0FBRTlCQSxPQUFPQyxJQUFJLEdBQUc7SUFDWkMsU0FBQUEsRUFBQUEsT0FBTztJQUNQLDBEQUEwRDtJQUMxRCxJQUFJQyxVQUFTO1FBQ1gsT0FBT0EsRUFBQUEsTUFBTTtJQUNmO0lBQ0FDLFNBQUFBLEVBQUFBLE9BQU87QUFDVDtBQUVBLE1BQU1DLFlBQVlDLENBQUFBLEdBQUFBLHFCQUFBQSxPQUFBQTtBQUNsQkMsQ0FBQUEsR0FBQUEsRUFBQUEsVUFBQUEsRUFBVztJQUFFRjtBQUFVLEdBQ3BCRyxJQUFJLENBQUM7UUFBQyxFQUFFQyxXQUFXLEVBQUU7SUFDcEIsT0FBT0MsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY0Q7QUFDdkIsR0FDQ0UsS0FBSyxDQUFDLENBQUNDO0lBQ05DLFFBQVFDLEtBQUssQ0FBQyx3QkFBd0JGO0FBQ3hDIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC9uZXh0LWRldi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPOiBSZW1vdmUgdXNlIG9mIGBhbnlgIHR5cGUuXG5pbXBvcnQgJy4vd2VicGFjaydcbmltcG9ydCB7IGluaXRpYWxpemUsIHZlcnNpb24sIHJvdXRlciwgZW1pdHRlciB9IGZyb20gJy4vJ1xuaW1wb3J0IGluaXRITVIgZnJvbSAnLi9kZXYvaG90LW1pZGRsZXdhcmUtY2xpZW50J1xuaW1wb3J0IHsgcGFnZUJvb3RzdHJhcCB9IGZyb20gJy4vcGFnZS1ib290c3RyYXAnXG5cbndpbmRvdy5uZXh0ID0ge1xuICB2ZXJzaW9uLFxuICAvLyByb3V0ZXIgaXMgaW5pdGlhbGl6ZWQgbGF0ZXIgc28gaXQgaGFzIHRvIGJlIGxpdmUtYmluZGVkXG4gIGdldCByb3V0ZXIoKSB7XG4gICAgcmV0dXJuIHJvdXRlclxuICB9LFxuICBlbWl0dGVyLFxufVxuXG5jb25zdCBkZXZDbGllbnQgPSBpbml0SE1SKClcbmluaXRpYWxpemUoeyBkZXZDbGllbnQgfSlcbiAgLnRoZW4oKHsgYXNzZXRQcmVmaXggfSkgPT4ge1xuICAgIHJldHVybiBwYWdlQm9vdHN0cmFwKGFzc2V0UHJlZml4KVxuICB9KVxuICAuY2F0Y2goKGVycikgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdhcyBub3QgY2F1Z2h0JywgZXJyKVxuICB9KVxuIl0sIm5hbWVzIjpbIndpbmRvdyIsIm5leHQiLCJ2ZXJzaW9uIiwicm91dGVyIiwiZW1pdHRlciIsImRldkNsaWVudCIsImluaXRITVIiLCJpbml0aWFsaXplIiwidGhlbiIsImFzc2V0UHJlZml4IiwicGFnZUJvb3RzdHJhcCIsImNhdGNoIiwiZXJyIiwiY29uc29sZSIsImVycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/next-dev.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/normalize-trailing-slash.js":
/*!**********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/normalize-trailing-slash.js ***!
\**********************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return normalizePathTrailingSlash;\n }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ../shared/lib/router/utils/remove-trailing-slash */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst normalizePathTrailingSlash = (path)=>{\n if (!path.startsWith('/') || undefined) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n if (false) {}\n return \"\" + (0, _removetrailingslash.removeTrailingSlash)(pathname) + query + hash;\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=normalize-trailing-slash.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L25vcm1hbGl6ZS10cmFpbGluZy1zbGFzaC5qcyIsIm1hcHBpbmdzIjoiOzs7OzhEQU9hQTs7O2VBQUFBOzs7aURBUHVCO3VDQUNWO0FBTW5CLE1BQU1BLDZCQUE2QixDQUFDQztJQUN6QyxJQUFJLENBQUNBLEtBQUtDLFVBQVUsQ0FBQyxRQUFRQyxTQUF3QyxFQUFFO1FBQ3JFLE9BQU9GO0lBQ1Q7SUFFQSxNQUFNLEVBQUVLLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUUsR0FBR0MsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFBVVI7SUFDNUMsSUFBSUUsS0FBaUMsRUFBRSxFQVF0QztJQUVELE9BQVEsS0FBRVMsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQk4sWUFBWUMsUUFBUUM7QUFDcEQiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9zcmMvY2xpZW50L25vcm1hbGl6ZS10cmFpbGluZy1zbGFzaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW1vdmVUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoJ1xuaW1wb3J0IHsgcGFyc2VQYXRoIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcGF0aCdcblxuLyoqXG4gKiBOb3JtYWxpemVzIHRoZSB0cmFpbGluZyBzbGFzaCBvZiBhIHBhdGggYWNjb3JkaW5nIHRvIHRoZSBgdHJhaWxpbmdTbGFzaGAgb3B0aW9uXG4gKiBpbiBgbmV4dC5jb25maWcuanNgLlxuICovXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2ggPSAocGF0aDogc3RyaW5nKSA9PiB7XG4gIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykgfHwgcHJvY2Vzcy5lbnYuX19ORVhUX01BTlVBTF9UUkFJTElOR19TTEFTSCkge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCB7IHBhdGhuYW1lLCBxdWVyeSwgaGFzaCB9ID0gcGFyc2VQYXRoKHBhdGgpXG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfVFJBSUxJTkdfU0xBU0gpIHtcbiAgICBpZiAoL1xcLlteL10rXFwvPyQvLnRlc3QocGF0aG5hbWUpKSB7XG4gICAgICByZXR1cm4gYCR7cmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZSl9JHtxdWVyeX0ke2hhc2h9YFxuICAgIH0gZWxzZSBpZiAocGF0aG5hbWUuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcmV0dXJuIGAke3BhdGhuYW1lfSR7cXVlcnl9JHtoYXNofWBcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke3BhdGhuYW1lfS8ke3F1ZXJ5fSR7aGFzaH1gXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGAke3JlbW92ZVRyYWlsaW5nU2xhc2gocGF0aG5hbWUpfSR7cXVlcnl9JHtoYXNofWBcbn1cbiJdLCJuYW1lcyI6WyJub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCIsInBhdGgiLCJzdGFydHNXaXRoIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9NQU5VQUxfVFJBSUxJTkdfU0xBU0giLCJwYXRobmFtZSIsInF1ZXJ5IiwiaGFzaCIsInBhcnNlUGF0aCIsIl9fTkVYVF9UUkFJTElOR19TTEFTSCIsInRlc3QiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwiZW5kc1dpdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/normalize-trailing-slash.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/page-bootstrap.js":
/*!************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/page-bootstrap.js ***!
\************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"pageBootstrap\", ({\n enumerable: true,\n get: function() {\n return pageBootstrap;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\n__webpack_require__(/*! ../lib/require-instrumentation-client */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/require-instrumentation-client.js\");\nconst _ = __webpack_require__(/*! ./ */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/index.js\");\nconst _ondemandentriesclient = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./dev/on-demand-entries-client */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/on-demand-entries-client.js\"));\nconst _fouc = __webpack_require__(/*! ./dev/fouc */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/fouc.js\");\nconst _websocket = __webpack_require__(/*! ./dev/hot-reloader/pages/websocket */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js\");\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _hotreloadertypes = __webpack_require__(/*! ../server/dev/hot-reloader-types */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _runtimeerrorhandler = __webpack_require__(/*! ./dev/runtime-error-handler */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/runtime-error-handler.js\");\nconst _shared = __webpack_require__(/*! ./dev/hot-reloader/shared */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/shared.js\");\nconst _hotreloaderpages = __webpack_require__(/*! ./dev/hot-reloader/pages/hot-reloader-pages */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/next-devtools/index.js\");\nfunction pageBootstrap(assetPrefix) {\n (0, _websocket.connectHMR)({\n assetPrefix,\n path: '/_next/webpack-hmr'\n });\n return (0, _.hydrate)({\n beforeRender: _fouc.displayContent\n }).then(()=>{\n (0, _ondemandentriesclient.default)();\n let reloading = false;\n (0, _websocket.addMessageListener)((payload)=>{\n if (reloading) return;\n if ('action' in payload) {\n switch(payload.action){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ERROR:\n {\n const { stack, message } = JSON.parse(payload.errorJSON);\n const error = Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n error.stack = stack;\n throw error;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE:\n {\n reloading = true;\n window.location.reload();\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.DEV_PAGES_MANIFEST_UPDATE:\n {\n fetch(\"\" + assetPrefix + \"/_next/static/development/_devPagesManifest.json\").then((res)=>res.json()).then((manifest)=>{\n window.__DEV_PAGES_MANIFEST = manifest;\n }).catch((err)=>{\n console.log(\"Failed to fetch devPagesManifest\", err);\n });\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.ADDED_PAGE:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.REMOVED_PAGE:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SYNC:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILDING:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.ISR_MANIFEST:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.DEVTOOLS_CONFIG:\n break;\n default:\n payload;\n }\n } else if ('event' in payload) {\n switch(payload.event){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.MIDDLEWARE_CHANGES:\n {\n return window.location.reload();\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.CLIENT_CHANGES:\n {\n // This is used in `../server/dev/turbopack-utils.ts`.\n const isOnErrorPage = window.next.router.pathname === '/_error';\n // On the error page we want to reload the page when a page was changed\n if (isOnErrorPage) {\n if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n }\n reloading = true;\n (0, _hotreloaderpages.performFullReload)(null);\n }\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ONLY_CHANGES:\n {\n if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n (0, _hotreloaderpages.performFullReload)(null);\n }\n const { pages } = payload;\n // Make sure to reload when the dev-overlay is showing for an\n // API route\n // TODO: Fix `__NEXT_PAGE` type\n if (pages.includes(_.router.query.__NEXT_PAGE)) {\n return window.location.reload();\n }\n if (!_.router.clc && pages.includes(_.router.pathname)) {\n console.log('Refreshing page data due to server-side change');\n _nextdevtools.dispatcher.buildingIndicatorShow();\n const clearIndicator = _nextdevtools.dispatcher.buildingIndicatorHide;\n _.router.replace(_.router.pathname + '?' + String((0, _querystring.assign)((0, _querystring.urlQueryToSearchParams)(_.router.query), new URLSearchParams(location.search))), _.router.asPath, {\n scroll: false\n }).catch(()=>{\n // trigger hard reload when failing to refresh data\n // to show error overlay properly\n location.reload();\n }).finally(clearIndicator);\n }\n break;\n }\n default:\n payload;\n }\n }\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=page-bootstrap.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3BhZ2UtYm9vdHN0cmFwLmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBa0JnQkE7OztlQUFBQTs7OztvQkFsQlQ7OEJBQ3lCOzRGQUNBO2tDQUNEO3VDQUl4Qjt5Q0FJQTs4Q0FDcUM7aURBQ1I7b0NBQ2lCOzhDQUNuQjswQ0FDUDtBQUVwQixTQUFTQSxjQUFjQyxXQUFtQjtJQUMvQ0MsQ0FBQUEsR0FBQUEsV0FBQUEsVUFBQUEsRUFBVztRQUFFRDtRQUFhRSxNQUFNO0lBQXFCO0lBRXJELE9BQU9DLENBQUFBLEdBQUFBLEVBQUFBLE9BQUFBLEVBQVE7UUFBRUMsY0FBY0MsTUFBQUEsY0FBYztJQUFDLEdBQUdDLElBQUksQ0FBQztRQUNwREMsQ0FBQUEsR0FBQUEsdUJBQUFBLE9BQUFBO1FBRUEsSUFBSUMsWUFBWTtRQUVoQkMsQ0FBQUEsR0FBQUEsV0FBQUEsa0JBQUFBLEVBQW1CLENBQUNDO1lBQ2xCLElBQUlGLFdBQVc7WUFDZixJQUFJLFlBQVlFLFNBQVM7Z0JBQ3ZCLE9BQVFBLFFBQVFDLE1BQU07b0JBQ3BCLEtBQUtDLGtCQUFBQSwyQkFBMkIsQ0FBQ0MsWUFBWTt3QkFBRTs0QkFDN0MsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyxLQUFLQyxLQUFLLENBQUNQLFFBQVFRLFNBQVM7NEJBQ3ZELE1BQU1DLFFBQVEscUJBQWtCLENBQWxCLElBQUlDLE1BQU1MLFVBQVY7dUNBQUE7NENBQUE7OENBQUE7NEJBQWlCOzRCQUMvQkksTUFBTUwsS0FBSyxHQUFHQTs0QkFDZCxNQUFNSzt3QkFDUjtvQkFDQSxLQUFLUCxrQkFBQUEsMkJBQTJCLENBQUNTLFdBQVc7d0JBQUU7NEJBQzVDYixZQUFZOzRCQUNaYyxPQUFPQyxR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LGFBQUFBLE1BQUFBLEVBQ0VDLENBQUFBLEdBQUFBLGFBQUFBLHNCQUFBQSxFQUF1QnBCLEVBQUFBLE1BQU0sQ0FBQ1UsS0FBSyxHQUNuQyxJQUFJVyxnQkFBZ0JoRCxTQUFTaUQsTUFBTSxLQUd6Q3RCLEVBQUFBLE1BQU0sQ0FBQ3VCLE1BQU0sRUFDYjtvQ0FBRUMsUUFBUTtnQ0FBTSxHQUVqQjNDLEtBQUssQ0FBQztvQ0FDTCxtREFBbUQ7b0NBQ25ELGlDQUFpQztvQ0FDakNSLFNBQVNDLE1BQU07Z0NBQ2pCLEdBQ0NtRCxPQUFPLENBQUNWOzRCQUNiOzRCQUNBO3dCQUNGO29CQUNBO3dCQUNFdkQ7Z0JBQ0o7WUFDRjtRQUNGO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvcGFnZS1ib290c3RyYXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICcuLi9saWIvcmVxdWlyZS1pbnN0cnVtZW50YXRpb24tY2xpZW50J1xuaW1wb3J0IHsgaHlkcmF0ZSwgcm91dGVyIH0gZnJvbSAnLi8nXG5pbXBvcnQgaW5pdE9uRGVtYW5kRW50cmllcyBmcm9tICcuL2Rldi9vbi1kZW1hbmQtZW50cmllcy1jbGllbnQnXG5pbXBvcnQgeyBkaXNwbGF5Q29udGVudCB9IGZyb20gJy4vZGV2L2ZvdWMnXG5pbXBvcnQge1xuICBjb25uZWN0SE1SLFxuICBhZGRNZXNzYWdlTGlzdGVuZXIsXG59IGZyb20gJy4vZGV2L2hvdC1yZWxvYWRlci9wYWdlcy93ZWJzb2NrZXQnXG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIHVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMsXG59IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3F1ZXJ5c3RyaW5nJ1xuaW1wb3J0IHsgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSIH0gZnJvbSAnLi4vc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMnXG5pbXBvcnQgeyBSdW50aW1lRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi9kZXYvcnVudGltZS1lcnJvci1oYW5kbGVyJ1xuaW1wb3J0IHsgUkVBQ1RfUkVGUkVTSF9GVUxMX1JFTE9BRF9GUk9NX0VSUk9SIH0gZnJvbSAnLi9kZXYvaG90LXJlbG9hZGVyL3NoYXJlZCdcbmltcG9ydCB7IHBlcmZvcm1GdWxsUmVsb2FkIH0gZnJvbSAnLi9kZXYvaG90LXJlbG9hZGVyL3BhZ2VzL2hvdC1yZWxvYWRlci1wYWdlcydcbmltcG9ydCB7IGRpc3BhdGNoZXIgfSBmcm9tICduZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1kZXZ0b29scydcblxuZXhwb3J0IGZ1bmN0aW9uIHBhZ2VCb290c3RyYXAoYXNzZXRQcmVmaXg6IHN0cmluZykge1xuICBjb25uZWN0SE1SKHsgYXNzZXRQcmVmaXgsIHBhdGg6ICcvX25leHQvd2VicGFjay1obXInIH0pXG5cbiAgcmV0dXJuIGh5ZHJhdGUoeyBiZWZvcmVSZW5kZXI6IGRpc3BsYXlDb250ZW50IH0pLnRoZW4oKCkgPT4ge1xuICAgIGluaXRPbkRlbWFuZEVudHJpZXMoKVxuXG4gICAgbGV0IHJlbG9hZGluZyA9IGZhbHNlXG5cbiAgICBhZGRNZXNzYWdlTGlzdGVuZXIoKHBheWxvYWQpID0+IHtcbiAgICAgIGlmIChyZWxvYWRpbmcpIHJldHVyblxuICAgICAgaWYgKCdhY3Rpb24nIGluIHBheWxvYWQpIHtcbiAgICAgICAgc3dpdGNoIChwYXlsb2FkLmFjdGlvbikge1xuICAgICAgICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlNFUlZFUl9FUlJPUjoge1xuICAgICAgICAgICAgY29uc3QgeyBzdGFjaywgbWVzc2FnZSB9ID0gSlNPTi5wYXJzZShwYXlsb2FkLmVycm9ySlNPTilcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpXG4gICAgICAgICAgICBlcnJvci5zdGFjayA9IHN0YWNrXG4gICAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5SRUxPQURfUEFHRToge1xuICAgICAgICAgICAgcmVsb2FkaW5nID0gdHJ1ZVxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5ERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFOiB7XG4gICAgICAgICAgICBmZXRjaChcbiAgICAgICAgICAgICAgYCR7YXNzZXRQcmVmaXh9L19uZXh0L3N0YXRpYy9kZXZlbG9wbWVudC9fZGV2UGFnZXNNYW5pZmVzdC5qc29uYFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAudGhlbigocmVzKSA9PiByZXMuanNvbigpKVxuICAgICAgICAgICAgICAudGhlbigobWFuaWZlc3QpID0+IHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuX19ERVZfUEFHRVNfTUFOSUZFU1QgPSBtYW5pZmVzdFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gZmV0Y2ggZGV2UGFnZXNNYW5pZmVzdGAsIGVycilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkFEREVEX1BBR0U6XG4gICAgICAgICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuUkVNT1ZFRF9QQUdFOlxuICAgICAgICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFUzpcbiAgICAgICAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TWU5DOlxuICAgICAgICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkJVSUxUOlxuICAgICAgICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkJVSUxESU5HOlxuICAgICAgICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlRVUkJPUEFDS19NRVNTQUdFOlxuICAgICAgICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlRVUkJPUEFDS19DT05ORUNURUQ6XG4gICAgICAgICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuSVNSX01BTklGRVNUOlxuICAgICAgICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkRFVlRPT0xTX0NPTkZJRzpcbiAgICAgICAgICAgIC8vIE1vc3Qgb2YgdGhlc2UgYWN0aW9uIHR5cGVzIGFyZSBoYW5kbGVkIGluXG4gICAgICAgICAgICAvLyBzcmMvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvcGFnZXMvaG90LXJlbG9hZGVyLXBhZ2VzLnRzXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBwYXlsb2FkIHNhdGlzZmllcyBuZXZlclxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCdldmVudCcgaW4gcGF5bG9hZCkge1xuICAgICAgICBzd2l0Y2ggKHBheWxvYWQuZXZlbnQpIHtcbiAgICAgICAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5NSURETEVXQVJFX0NIQU5HRVM6IHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuQ0xJRU5UX0NIQU5HRVM6IHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdXNlZCBpbiBgLi4vc2VydmVyL2Rldi90dXJib3BhY2stdXRpbHMudHNgLlxuICAgICAgICAgICAgY29uc3QgaXNPbkVycm9yUGFnZSA9IHdpbmRvdy5uZXh0LnJvdXRlci5wYXRobmFtZSA9PT0gJy9fZXJyb3InXG4gICAgICAgICAgICAvLyBPbiB0aGUgZXJyb3IgcGFnZSB3ZSB3YW50IHRvIHJlbG9hZCB0aGUgcGFnZSB3aGVuIGEgcGFnZSB3YXMgY2hhbmdlZFxuICAgICAgICAgICAgaWYgKGlzT25FcnJvclBhZ2UpIHtcbiAgICAgICAgICAgICAgaWYgKFJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZWxvYWRpbmcgPSB0cnVlXG4gICAgICAgICAgICAgIHBlcmZvcm1GdWxsUmVsb2FkKG51bGwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TRVJWRVJfT05MWV9DSEFOR0VTOiB7XG4gICAgICAgICAgICBpZiAoUnVudGltZUVycm9ySGFuZGxlci5oYWRSdW50aW1lRXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUilcbiAgICAgICAgICAgICAgcGVyZm9ybUZ1bGxSZWxvYWQobnVsbClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgeyBwYWdlcyB9ID0gcGF5bG9hZFxuXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcmVsb2FkIHdoZW4gdGhlIGRldi1vdmVybGF5IGlzIHNob3dpbmcgZm9yIGFuXG4gICAgICAgICAgICAvLyBBUEkgcm91dGVcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBgX19ORVhUX1BBR0VgIHR5cGVcbiAgICAgICAgICAgIGlmIChwYWdlcy5pbmNsdWRlcyhyb3V0ZXIucXVlcnkuX19ORVhUX1BBR0UgYXMgc3RyaW5nKSkge1xuICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcm91dGVyLmNsYyAmJiBwYWdlcy5pbmNsdWRlcyhyb3V0ZXIucGF0aG5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZWZyZXNoaW5nIHBhZ2UgZGF0YSBkdWUgdG8gc2VydmVyLXNpZGUgY2hhbmdlJylcbiAgICAgICAgICAgICAgZGlzcGF0Y2hlci5idWlsZGluZ0luZGljYXRvclNob3coKVxuICAgICAgICAgICAgICBjb25zdCBjbGVhckluZGljYXRvciA9IGRpc3BhdGNoZXIuYnVpbGRpbmdJbmRpY2F0b3JIaWRlXG5cbiAgICAgICAgICAgICAgcm91dGVyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICByb3V0ZXIucGF0aG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAnPycgK1xuICAgICAgICAgICAgICAgICAgICBTdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsUXVlcnlUb1NlYXJjaFBhcmFtcyhyb3V0ZXIucXVlcnkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgcm91dGVyLmFzUGF0aCxcbiAgICAgICAgICAgICAgICAgIHsgc2Nyb2xsOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIGhhcmQgcmVsb2FkIHdoZW4gZmFpbGluZyB0byByZWZyZXNoIGRhdGFcbiAgICAgICAgICAgICAgICAgIC8vIHRvIHNob3cgZXJyb3Igb3ZlcmxheSBwcm9wZXJseVxuICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maW5hbGx5KGNsZWFySW5kaWNhdG9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHBheWxvYWQgc2F0aXNmaWVzIG5ldmVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxuIl0sIm5hbWVzIjpbInBhZ2VCb290c3RyYXAiLCJhc3NldFByZWZpeCIsImNvbm5lY3RITVIiLCJwYXRoIiwiaHlkcmF0ZSIsImJlZm9yZVJlbmRlciIsImRpc3BsYXlDb250ZW50IiwidGhlbiIsImluaXRPbkRlbWFuZEVudHJpZXMiLCJyZWxvYWRpbmciLCJhZGRNZXNzYWdlTGlzdGVuZXIiLCJwYXlsb2FkIiwiYWN0aW9uIiwiSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSIiwiU0VSVkVSX0VSUk9SIiwic3RhY2siLCJtZXNzYWdlIiwiSlNPTiIsInBhcnNlIiwiZXJyb3JKU09OIiwiZXJyb3IiLCJFcnJvciIsIlJFTE9BRF9QQUdFIiwid2luZG93IiwibG9jYXRpb24iLCJyZWxvYWQiLCJERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFIiwiZmV0Y2giLCJyZXMiLCJqc29uIiwibWFuaWZlc3QiLCJfX0RFVl9QQUdFU19NQU5JRkVTVCIsImNhdGNoIiwiZXJyIiwiY29uc29sZSIsImxvZyIsIkFEREVEX1BBR0UiLCJSRU1PVkVEX1BBR0UiLCJTRVJWRVJfQ09NUE9ORU5UX0NIQU5HRVMiLCJTWU5DIiwiQlVJTFQiLCJCVUlMRElORyIsIlRVUkJPUEFDS19NRVNTQUdFIiwiVFVSQk9QQUNLX0NPTk5FQ1RFRCIsIklTUl9NQU5JRkVTVCIsIkRFVlRPT0xTX0NPTkZJRyIsImV2ZW50IiwiTUlERExFV0FSRV9DSEFOR0VTIiwiQ0xJRU5UX0NIQU5HRVMiLCJpc09uRXJyb3JQYWdlIiwibmV4dCIsInJvdXRlciIsInBhdGhuYW1lIiwiUnVudGltZUVycm9ySGFuZGxlciIsImhhZFJ1bnRpbWVFcnJvciIsIndhcm4iLCJSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IiLCJwZXJmb3JtRnVsbFJlbG9hZCIsIlNFUlZFUl9PTkxZX0NIQU5HRVMiLCJwYWdlcyIsImluY2x1ZGVzIiwicXVlcnkiLCJfX05FWFRfUEFHRSIsImNsYyIsImRpc3BhdGNoZXIiLCJidWlsZGluZ0luZGljYXRvclNob3ciLCJjbGVhckluZGljYXRvciIsImJ1aWxkaW5nSW5kaWNhdG9ySGlkZSIsInJlcGxhY2UiLCJTdHJpbmciLCJhc3NpZ24iLCJ1cmxRdWVyeVRvU2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwic2VhcmNoIiwiYXNQYXRoIiwic2Nyb2xsIiwiZmluYWxseSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/page-bootstrap.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/page-loader.js":
/*!*********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/page-loader.js ***!
\*********************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return PageLoader;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _addbasepath = __webpack_require__(/*! ./add-base-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/add-base-path.js\");\nconst _interpolateas = __webpack_require__(/*! ../shared/lib/router/utils/interpolate-as */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nconst _getassetpathfromroute = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/utils/get-asset-path-from-route */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\"));\nconst _addlocale = __webpack_require__(/*! ./add-locale */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/add-locale.js\");\nconst _isdynamic = __webpack_require__(/*! ../shared/lib/router/utils/is-dynamic */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _parserelativeurl = __webpack_require__(/*! ../shared/lib/router/utils/parse-relative-url */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nconst _removetrailingslash = __webpack_require__(/*! ../shared/lib/router/utils/remove-trailing-slash */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _routeloader = __webpack_require__(/*! ./route-loader */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/route-loader.js\");\nconst _constants = __webpack_require__(/*! ../shared/lib/constants */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/constants.js\");\nclass PageLoader {\n getPageList() {\n if (false) {} else {\n if (window.__DEV_PAGES_MANIFEST) {\n return window.__DEV_PAGES_MANIFEST.pages;\n } else {\n this.promisedDevPagesManifest || (this.promisedDevPagesManifest = fetch(this.assetPrefix + \"/_next/static/development/\" + _constants.DEV_CLIENT_PAGES_MANIFEST, {\n credentials: 'same-origin'\n }).then((res)=>res.json()).then((manifest)=>{\n window.__DEV_PAGES_MANIFEST = manifest;\n return manifest.pages;\n }).catch((err)=>{\n console.log(\"Failed to fetch devPagesManifest:\", err);\n throw Object.defineProperty(new Error(\"Failed to fetch _devPagesManifest.json. Is something blocking that network request?\\n\" + 'Read more: https://nextjs.org/docs/messages/failed-to-fetch-devpagesmanifest'), \"__NEXT_ERROR_CODE\", {\n value: \"E423\",\n enumerable: false,\n configurable: true\n });\n }));\n return this.promisedDevPagesManifest;\n }\n }\n }\n getMiddleware() {\n // Webpack production\n if (false) {} else if (false) {} else {\n if (window.__DEV_MIDDLEWARE_MATCHERS) {\n return window.__DEV_MIDDLEWARE_MATCHERS;\n } else {\n if (!this.promisedMiddlewareMatchers) {\n // TODO: Decide what should happen when fetching fails instead of asserting\n // @ts-ignore\n this.promisedMiddlewareMatchers = fetch(this.assetPrefix + \"/_next/static/\" + this.buildId + \"/\" + _constants.DEV_CLIENT_MIDDLEWARE_MANIFEST, {\n credentials: 'same-origin'\n }).then((res)=>res.json()).then((matchers)=>{\n window.__DEV_MIDDLEWARE_MATCHERS = matchers;\n return matchers;\n }).catch((err)=>{\n console.log(\"Failed to fetch _devMiddlewareManifest\", err);\n });\n }\n // TODO Remove this assertion as this could be undefined\n return this.promisedMiddlewareMatchers;\n }\n }\n }\n getDataHref(params) {\n const { asPath, href, locale } = params;\n const { pathname: hrefPathname, query, search } = (0, _parserelativeurl.parseRelativeUrl)(href);\n const { pathname: asPathname } = (0, _parserelativeurl.parseRelativeUrl)(asPath);\n const route = (0, _removetrailingslash.removeTrailingSlash)(hrefPathname);\n if (route[0] !== '/') {\n throw Object.defineProperty(new Error('Route name should start with a \"/\", got \"' + route + '\"'), \"__NEXT_ERROR_CODE\", {\n value: \"E303\",\n enumerable: false,\n configurable: true\n });\n }\n const getHrefForSlug = (path)=>{\n const dataRoute = (0, _getassetpathfromroute.default)((0, _removetrailingslash.removeTrailingSlash)((0, _addlocale.addLocale)(path, locale)), '.json');\n return (0, _addbasepath.addBasePath)(\"/_next/data/\" + this.buildId + dataRoute + search, true);\n };\n return getHrefForSlug(params.skipInterpolation ? asPathname : (0, _isdynamic.isDynamicRoute)(route) ? (0, _interpolateas.interpolateAs)(hrefPathname, asPathname, query).result : route);\n }\n _isSsg(/** the route (file-system path) */ route) {\n return this.promisedSsgManifest.then((manifest)=>manifest.has(route));\n }\n loadPage(route) {\n return this.routeLoader.loadRoute(route).then((res)=>{\n if ('component' in res) {\n return {\n page: res.component,\n mod: res.exports,\n styleSheets: res.styles.map((o)=>({\n href: o.href,\n text: o.content\n }))\n };\n }\n throw res.error;\n });\n }\n prefetch(route) {\n return this.routeLoader.prefetch(route);\n }\n constructor(buildId, assetPrefix){\n this.routeLoader = (0, _routeloader.createRouteLoader)(assetPrefix);\n this.buildId = buildId;\n this.assetPrefix = assetPrefix;\n this.promisedSsgManifest = new Promise((resolve)=>{\n if (window.__SSG_MANIFEST) {\n resolve(window.__SSG_MANIFEST);\n } else {\n window.__SSG_MANIFEST_CB = ()=>{\n resolve(window.__SSG_MANIFEST);\n };\n }\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=page-loader.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3BhZ2UtbG9hZGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7ZUFpQ3FCQTs7Ozt5Q0E5Qk87MkNBQ0U7NEZBQ0k7dUNBQ1I7dUNBQ0s7OENBQ0U7aURBQ0c7eUNBQ3NCO3VDQUtuRDtBQWtCUSxNQUFNQTtJQTBCbkJDLGNBQWM7UUFDWixJQUFJQyxLQUFvQixFQUFtQixFQUUxQyxNQUFNO1lBQ0wsSUFBSU8sT0FBT0Msb0JBQW9CLEVBQUU7Z0JBQy9CLE9BQU9ELE9BQU9DLG9CQUFvQixDQUFDQyxLQUFLO1lBQzFDLE9BQU87Z0JBQ0wsSUFBSSxDQUFDQyx3QkFBQUEsS0FBTCxJQUFJLENBQUNBLHdCQUFBQSxHQUE2QkMsTUFDN0IsSUFBSSxDQUFDQyxXQUFXLEdBQUMsK0JBQTRCQyxXQUFBQSx5QkFBeUIsRUFDekU7b0JBQUVDLGFBQWE7Z0JBQWMsR0FFNUJWLElBQUksQ0FBQyxDQUFDVyxNQUFRQSxJQUFJQyxJQUFJLElBQ3RCWixJQUFJLENBQUMsQ0FBQ0M7b0JBQ0xFLE9BQU9DLG9CQUFvQixHQUFHSDtvQkFDOUIsT0FBT0EsU0FBU0ksS0FBSztnQkFDdkIsR0FDQ1EsS0FBSyxDQUFDLENBQUNDO29CQUNOQyxRQUFRQyxHQUFHLENBQUUscUNBQW9DRjtvQkFDakQsTUFBTSxxQkFHTCxDQUhLLElBQUlHLE1BQ1AsMEZBQ0MsaUZBRkU7K0JBQUE7b0NBQUE7c0NBQUE7b0JBR047Z0JBQ0Y7Z0JBQ0YsT0FBTyxJQUFJLENBQUNYLHdCQUF3QjtZQUN0QztRQUNGO0lBQ0Y7SUFFQVksZ0JBQWdCO1FBQ2QscUJBQXFCO1FBQ3JCLElBQ0V0QixLQUNzQyxFQUN0QyxFQU9ELE1BQU0sSUFBSUEsS0FBb0IsRUFBbUIsRUF3QmpELE1BQU07WUFD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QUFXLENBQUNhLFFBQVEsQ0FBQzdCO0lBQ25DO0lBdEtBOEIsWUFBWTlDLE9BQWUsRUFBRWhCLFdBQW1CLENBQUU7UUFDaEQsSUFBSSxDQUFDZ0QsV0FBVyxHQUFHZSxDQUFBQSxHQUFBQSxhQUFBQSxpQkFBQUEsRUFBa0IvRDtRQUVyQyxJQUFJLENBQUNnQixPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDaEIsV0FBVyxHQUFHQTtRQUVuQixJQUFJLENBQUM2QyxtQkFBbUIsR0FBRyxJQUFJbUIsUUFBUSxDQUFDQztZQUN0QyxJQUFJdEUsT0FBT3VFLGNBQWMsRUFBRTtnQkFDekJELFFBQVF0RSxPQUFPdUUsY0FBYztZQUMvQixPQUFPO2dCQUNMdkUsT0FBT3dFLGlCQUFpQixHQUFHO29CQUN6QkYsUUFBUXRFLE9BQU91RSxjQUFjO2dCQUMvQjtZQUNGO1FBQ0Y7SUFDRjtBQXdKRiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvcGFnZS1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJvdXRlTG9hZGVyIH0gZnJvbSAnLi9yb3V0ZS1sb2FkZXInXG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmVNYXRjaGVyIH0gZnJvbSAnLi4vYnVpbGQvYW5hbHlzaXMvZ2V0LXBhZ2Utc3RhdGljLWluZm8nXG5pbXBvcnQgeyBhZGRCYXNlUGF0aCB9IGZyb20gJy4vYWRkLWJhc2UtcGF0aCdcbmltcG9ydCB7IGludGVycG9sYXRlQXMgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbnRlcnBvbGF0ZS1hcydcbmltcG9ydCBnZXRBc3NldFBhdGhGcm9tUm91dGUgZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZ2V0LWFzc2V0LXBhdGgtZnJvbS1yb3V0ZSdcbmltcG9ydCB7IGFkZExvY2FsZSB9IGZyb20gJy4vYWRkLWxvY2FsZSdcbmltcG9ydCB7IGlzRHluYW1pY1JvdXRlIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYydcbmltcG9ydCB7IHBhcnNlUmVsYXRpdmVVcmwgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS1yZWxhdGl2ZS11cmwnXG5pbXBvcnQgeyByZW1vdmVUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVMb2FkZXIsIGdldENsaWVudEJ1aWxkTWFuaWZlc3QgfSBmcm9tICcuL3JvdXRlLWxvYWRlcidcbmltcG9ydCB7XG4gIERFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1QsXG4gIERFVl9DTElFTlRfTUlERExFV0FSRV9NQU5JRkVTVCxcbiAgVFVSQk9QQUNLX0NMSUVOVF9NSURETEVXQVJFX01BTklGRVNULFxufSBmcm9tICcuLi9zaGFyZWQvbGliL2NvbnN0YW50cydcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX0RFVl9NSURETEVXQVJFX01BVENIRVJTPzogTWlkZGxld2FyZU1hdGNoZXJbXVxuICAgIF9fREVWX1BBR0VTX01BTklGRVNUPzogeyBwYWdlczogc3RyaW5nW10gfVxuICAgIF9fU1NHX01BTklGRVNUX0NCPzogKCkgPT4gdm9pZFxuICAgIF9fU1NHX01BTklGRVNUPzogU2V0PHN0cmluZz5cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBTdHlsZVNoZWV0VHVwbGUgPSB7IGhyZWY6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1cbmV4cG9ydCB0eXBlIEdvb2RQYWdlQ2FjaGUgPSB7XG4gIHBhZ2U6IENvbXBvbmVudFR5cGVcbiAgbW9kOiBhbnlcbiAgc3R5bGVTaGVldHM6IFN0eWxlU2hlZXRUdXBsZVtdXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhZ2VMb2FkZXIge1xuICBwcml2YXRlIGJ1aWxkSWQ6IHN0cmluZ1xuICBwcml2YXRlIGFzc2V0UHJlZml4OiBzdHJpbmdcbiAgcHJpdmF0ZSBwcm9taXNlZFNzZ01hbmlmZXN0OiBQcm9taXNlPFNldDxzdHJpbmc+PlxuICBwcml2YXRlIHByb21pc2VkRGV2UGFnZXNNYW5pZmVzdD86IFByb21pc2U8c3RyaW5nW10+XG4gIHByaXZhdGUgcHJvbWlzZWRNaWRkbGV3YXJlTWF0Y2hlcnM/OiBQcm9taXNlPE1pZGRsZXdhcmVNYXRjaGVyW10+XG5cbiAgcHVibGljIHJvdXRlTG9hZGVyOiBSb3V0ZUxvYWRlclxuXG4gIGNvbnN0cnVjdG9yKGJ1aWxkSWQ6IHN0cmluZywgYXNzZXRQcmVmaXg6IHN0cmluZykge1xuICAgIHRoaXMucm91dGVMb2FkZXIgPSBjcmVhdGVSb3V0ZUxvYWRlcihhc3NldFByZWZpeClcblxuICAgIHRoaXMuYnVpbGRJZCA9IGJ1aWxkSWRcbiAgICB0aGlzLmFzc2V0UHJlZml4ID0gYXNzZXRQcmVmaXhcblxuICAgIHRoaXMucHJvbWlzZWRTc2dNYW5pZmVzdCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAod2luZG93Ll9fU1NHX01BTklGRVNUKSB7XG4gICAgICAgIHJlc29sdmUod2luZG93Ll9fU1NHX01BTklGRVNUKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93Ll9fU1NHX01BTklGRVNUX0NCID0gKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUod2luZG93Ll9fU1NHX01BTklGRVNUISlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXRQYWdlTGlzdCgpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcmV0dXJuIGdldENsaWVudEJ1aWxkTWFuaWZlc3QoKS50aGVuKChtYW5pZmVzdCkgPT4gbWFuaWZlc3Quc29ydGVkUGFnZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh3aW5kb3cuX19ERVZfUEFHRVNfTUFOSUZFU1QpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5fX0RFVl9QQUdFU19NQU5JRkVTVC5wYWdlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9taXNlZERldlBhZ2VzTWFuaWZlc3QgfHw9IGZldGNoKFxuICAgICAgICAgIGAke3RoaXMuYXNzZXRQcmVmaXh9L19uZXh0L3N0YXRpYy9kZXZlbG9wbWVudC8ke0RFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1R9YCxcbiAgICAgICAgICB7IGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nIH1cbiAgICAgICAgKVxuICAgICAgICAgIC50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpXG4gICAgICAgICAgLnRoZW4oKG1hbmlmZXN0OiB7IHBhZ2VzOiBzdHJpbmdbXSB9KSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cuX19ERVZfUEFHRVNfTUFOSUZFU1QgPSBtYW5pZmVzdFxuICAgICAgICAgICAgcmV0dXJuIG1hbmlmZXN0LnBhZ2VzXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYEZhaWxlZCB0byBmZXRjaCBkZXZQYWdlc01hbmlmZXN0OmAsIGVycilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byBmZXRjaCBfZGV2UGFnZXNNYW5pZmVzdC5qc29uLiBJcyBzb21ldGhpbmcgYmxvY2tpbmcgdGhhdCBuZXR3b3JrIHJlcXVlc3Q/XFxuYCArXG4gICAgICAgICAgICAgICAgJ1JlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZmFpbGVkLXRvLWZldGNoLWRldnBhZ2VzbWFuaWZlc3QnXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZWREZXZQYWdlc01hbmlmZXN0XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0TWlkZGxld2FyZSgpIHtcbiAgICAvLyBXZWJwYWNrIHByb2R1Y3Rpb25cbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBwcm9jZXNzLmVudi5fX05FWFRfTUlERExFV0FSRV9NQVRDSEVSU1xuICAgICkge1xuICAgICAgY29uc3QgbWlkZGxld2FyZU1hdGNoZXJzID0gcHJvY2Vzcy5lbnYuX19ORVhUX01JRERMRVdBUkVfTUFUQ0hFUlNcbiAgICAgIHdpbmRvdy5fX01JRERMRVdBUkVfTUFUQ0hFUlMgPSBtaWRkbGV3YXJlTWF0Y2hlcnNcbiAgICAgICAgPyAobWlkZGxld2FyZU1hdGNoZXJzIGFzIGFueSBhcyBNaWRkbGV3YXJlTWF0Y2hlcltdKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIHdpbmRvdy5fX01JRERMRVdBUkVfTUFUQ0hFUlNcbiAgICAgIC8vIFR1cmJvcGFjayBwcm9kdWN0aW9uXG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAod2luZG93Ll9fTUlERExFV0FSRV9NQVRDSEVSUykge1xuICAgICAgICByZXR1cm4gd2luZG93Ll9fTUlERExFV0FSRV9NQVRDSEVSU1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLnByb21pc2VkTWlkZGxld2FyZU1hdGNoZXJzKSB7XG4gICAgICAgICAgLy8gVE9ETzogRGVjaWRlIHdoYXQgc2hvdWxkIGhhcHBlbiB3aGVuIGZldGNoaW5nIGZhaWxzIGluc3RlYWQgb2YgYXNzZXJ0aW5nXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHRoaXMucHJvbWlzZWRNaWRkbGV3YXJlTWF0Y2hlcnMgPSBmZXRjaChcbiAgICAgICAgICAgIGAke3RoaXMuYXNzZXRQcmVmaXh9L19uZXh0L3N0YXRpYy8ke3RoaXMuYnVpbGRJZH0vJHtUVVJCT1BBQ0tfQ0xJRU5UX01JRERMRVdBUkVfTUFOSUZFU1R9YCxcbiAgICAgICAgICAgIHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpXG4gICAgICAgICAgICAudGhlbigobWF0Y2hlcnM6IE1pZGRsZXdhcmVNYXRjaGVyW10pID0+IHtcbiAgICAgICAgICAgICAgd2luZG93Ll9fTUlERExFV0FSRV9NQVRDSEVSUyA9IG1hdGNoZXJzXG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gZmV0Y2ggX2Rldk1pZGRsZXdhcmVNYW5pZmVzdGAsIGVycilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBSZW1vdmUgdGhpcyBhc3NlcnRpb24gYXMgdGhpcyBjb3VsZCBiZSB1bmRlZmluZWRcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZWRNaWRkbGV3YXJlTWF0Y2hlcnMhXG4gICAgICB9XG4gICAgICAvLyBEZXZlbG9wbWVudCBib3RoIFR1cmJvcGFjayBhbmQgV2VicGFja1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAod2luZG93Ll9fREVWX01JRERMRVdBUkVfTUFUQ0hFUlMpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5fX0RFVl9NSURETEVXQVJFX01BVENIRVJTXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMucHJvbWlzZWRNaWRkbGV3YXJlTWF0Y2hlcnMpIHtcbiAgICAgICAgICAvLyBUT0RPOiBEZWNpZGUgd2hhdCBzaG91bGQgaGFwcGVuIHdoZW4gZmV0Y2hpbmcgZmFpbHMgaW5zdGVhZCBvZiBhc3NlcnRpbmdcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgdGhpcy5wcm9taXNlZE1pZGRsZXdhcmVNYXRjaGVycyA9IGZldGNoKFxuICAgICAgICAgICAgYCR7dGhpcy5hc3NldFByZWZpeH0vX25leHQvc3RhdGljLyR7dGhpcy5idWlsZElkfS8ke0RFVl9DTElFTlRfTUlERExFV0FSRV9NQU5JRkVTVH1gLFxuICAgICAgICAgICAgeyBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyB9XG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSlcbiAgICAgICAgICAgIC50aGVuKChtYXRjaGVyczogTWlkZGxld2FyZU1hdGNoZXJbXSkgPT4ge1xuICAgICAgICAgICAgICB3aW5kb3cuX19ERVZfTUlERExFV0FSRV9NQVRDSEVSUyA9IG1hdGNoZXJzXG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gZmV0Y2ggX2Rldk1pZGRsZXdhcmVNYW5pZmVzdGAsIGVycilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBSZW1vdmUgdGhpcyBhc3NlcnRpb24gYXMgdGhpcyBjb3VsZCBiZSB1bmRlZmluZWRcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZWRNaWRkbGV3YXJlTWF0Y2hlcnMhXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YUhyZWYocGFyYW1zOiB7XG4gICAgYXNQYXRoOiBzdHJpbmdcbiAgICBocmVmOiBzdHJpbmdcbiAgICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZVxuICAgIHNraXBJbnRlcnBvbGF0aW9uPzogYm9vbGVhblxuICB9KTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGFzUGF0aCwgaHJlZiwgbG9jYWxlIH0gPSBwYXJhbXNcbiAgICBjb25zdCB7IHBhdGhuYW1lOiBocmVmUGF0aG5hbWUsIHF1ZXJ5LCBzZWFyY2ggfSA9IHBhcnNlUmVsYXRpdmVVcmwoaHJlZilcbiAgICBjb25zdCB7IHBhdGhuYW1lOiBhc1BhdGhuYW1lIH0gPSBwYXJzZVJlbGF0aXZlVXJsKGFzUGF0aClcbiAgICBjb25zdCByb3V0ZSA9IHJlbW92ZVRyYWlsaW5nU2xhc2goaHJlZlBhdGhuYW1lKVxuICAgIGlmIChyb3V0ZVswXSAhPT0gJy8nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdXRlIG5hbWUgc2hvdWxkIHN0YXJ0IHdpdGggYSBcIi9cIiwgZ290IFwiJHtyb3V0ZX1cImApXG4gICAgfVxuXG4gICAgY29uc3QgZ2V0SHJlZkZvclNsdWcgPSAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBkYXRhUm91dGUgPSBnZXRBc3NldFBhdGhGcm9tUm91dGUoXG4gICAgICAgIHJlbW92ZVRyYWlsaW5nU2xhc2goYWRkTG9jYWxlKHBhdGgsIGxvY2FsZSkpLFxuICAgICAgICAnLmpzb24nXG4gICAgICApXG4gICAgICByZXR1cm4gYWRkQmFzZVBhdGgoXG4gICAgICAgIGAvX25leHQvZGF0YS8ke3RoaXMuYnVpbGRJZH0ke2RhdGFSb3V0ZX0ke3NlYXJjaH1gLFxuICAgICAgICB0cnVlXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIGdldEhyZWZGb3JTbHVnKFxuICAgICAgcGFyYW1zLnNraXBJbnRlcnBvbGF0aW9uXG4gICAgICAgID8gYXNQYXRobmFtZVxuICAgICAgICA6IGlzRHluYW1pY1JvdXRlKHJvdXRlKVxuICAgICAgICAgID8gaW50ZXJwb2xhdGVBcyhocmVmUGF0aG5hbWUsIGFzUGF0aG5hbWUsIHF1ZXJ5KS5yZXN1bHRcbiAgICAgICAgICA6IHJvdXRlXG4gICAgKVxuICB9XG5cbiAgX2lzU3NnKFxuICAgIC8qKiB0aGUgcm91dGUgKGZpbGUtc3lzdGVtIHBhdGgpICovXG4gICAgcm91dGU6IHN0cmluZ1xuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNlZFNzZ01hbmlmZXN0LnRoZW4oKG1hbmlmZXN0KSA9PiBtYW5pZmVzdC5oYXMocm91dGUpKVxuICB9XG5cbiAgbG9hZFBhZ2Uocm91dGU6IHN0cmluZyk6IFByb21pc2U8R29vZFBhZ2VDYWNoZT4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlTG9hZGVyLmxvYWRSb3V0ZShyb3V0ZSkudGhlbigocmVzKSA9PiB7XG4gICAgICBpZiAoJ2NvbXBvbmVudCcgaW4gcmVzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGFnZTogcmVzLmNvbXBvbmVudCxcbiAgICAgICAgICBtb2Q6IHJlcy5leHBvcnRzLFxuICAgICAgICAgIHN0eWxlU2hlZXRzOiByZXMuc3R5bGVzLm1hcCgobykgPT4gKHtcbiAgICAgICAgICAgIGhyZWY6IG8uaHJlZixcbiAgICAgICAgICAgIHRleHQ6IG8uY29udGVudCxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IHJlcy5lcnJvclxuICAgIH0pXG4gIH1cblxuICBwcmVmZXRjaChyb3V0ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVMb2FkZXIucHJlZmV0Y2gocm91dGUpXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJQYWdlTG9hZGVyIiwiZ2V0UGFnZUxpc3QiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJnZXRDbGllbnRCdWlsZE1hbmlmZXN0IiwidGhlbiIsIm1hbmlmZXN0Iiwic29ydGVkUGFnZXMiLCJ3aW5kb3ciLCJfX0RFVl9QQUdFU19NQU5JRkVTVCIsInBhZ2VzIiwicHJvbWlzZWREZXZQYWdlc01hbmlmZXN0IiwiZmV0Y2giLCJhc3NldFByZWZpeCIsIkRFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1QiLCJjcmVkZW50aWFscyIsInJlcyIsImpzb24iLCJjYXRjaCIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJFcnJvciIsImdldE1pZGRsZXdhcmUiLCJfX05FWFRfTUlERExFV0FSRV9NQVRDSEVSUyIsIm1pZGRsZXdhcmVNYXRjaGVycyIsIl9fTUlERExFV0FSRV9NQVRDSEVSUyIsInVuZGVmaW5lZCIsInByb21pc2VkTWlkZGxld2FyZU1hdGNoZXJzIiwiYnVpbGRJZCIsIlRVUkJPUEFDS19DTElFTlRfTUlERExFV0FSRV9NQU5JRkVTVCIsIm1hdGNoZXJzIiwiX19ERVZfTUlERExFV0FSRV9NQVRDSEVSUyIsIkRFVl9DTElFTlRfTUlERExFV0FSRV9NQU5JRkVTVCIsImdldERhdGFIcmVmIiwicGFyYW1zIiwiYXNQYXRoIiwiaHJlZiIsImxvY2FsZSIsInBhdGhuYW1lIiwiaHJlZlBhdGhuYW1lIiwicXVlcnkiLCJzZWFyY2giLCJwYXJzZVJlbGF0aXZlVXJsIiwiYXNQYXRobmFtZSIsInJvdXRlIiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsImdldEhyZWZGb3JTbHVnIiwicGF0aCIsImRhdGFSb3V0ZSIsImdldEFzc2V0UGF0aEZyb21Sb3V0ZSIsImFkZExvY2FsZSIsImFkZEJhc2VQYXRoIiwic2tpcEludGVycG9sYXRpb24iLCJpc0R5bmFtaWNSb3V0ZSIsImludGVycG9sYXRlQXMiLCJyZXN1bHQiLCJfaXNTc2ciLCJwcm9taXNlZFNzZ01hbmlmZXN0IiwiaGFzIiwibG9hZFBhZ2UiLCJyb3V0ZUxvYWRlciIsImxvYWRSb3V0ZSIsInBhZ2UiLCJjb21wb25lbnQiLCJtb2QiLCJleHBvcnRzIiwic3R5bGVTaGVldHMiLCJzdHlsZXMiLCJtYXAiLCJvIiwidGV4dCIsImNvbnRlbnQiLCJlcnJvciIsInByZWZldGNoIiwiY29uc3RydWN0b3IiLCJjcmVhdGVSb3V0ZUxvYWRlciIsIlByb21pc2UiLCJyZXNvbHZlIiwiX19TU0dfTUFOSUZFU1QiLCJfX1NTR19NQU5JRkVTVF9DQiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/page-loader.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/portal/index.js":
/*!**********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/portal/index.js ***!
\**********************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Portal\", ({\n enumerable: true,\n get: function() {\n return Portal;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\");\nconst _reactdom = __webpack_require__(/*! react-dom */ \"(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/index.js\");\nconst Portal = (param)=>{\n let { children, type } = param;\n const [portalNode, setPortalNode] = (0, _react.useState)(null);\n (0, _react.useEffect)(()=>{\n const element = document.createElement(type);\n document.body.appendChild(element);\n setPortalNode(element);\n return ()=>{\n document.body.removeChild(element);\n };\n }, [\n type\n ]);\n return portalNode ? /*#__PURE__*/ (0, _reactdom.createPortal)(children, portalNode) : null;\n};\n_c = Portal;\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=index.js.map\nvar _c;\n$RefreshReg$(_c, \"Portal\");\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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3BvcnRhbC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7OzBDQVFhQTs7O2VBQUFBOzs7bUNBUnVCO3NDQUNQO0FBT3RCLGVBQWU7UUFBQyxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBZTtJQUNwRCxNQUFNLENBQUNDLFlBQVlDLGNBQWMsR0FBR0MsQ0FBQUEsR0FBQUEsT0FBQUEsUUFBQUEsRUFBNkI7SUFFakVDLENBQUFBLEdBQUFBLE9BQUFBLFNBQUFBLEVBQVU7UUFDUixNQUFNQyxVQUFVQyxTQUFTQyxhQUFhLENBQUNQO1FBQ3ZDTSxTQUFTRSxJQUFJLENBQUNDLFdBQVcsQ0FBQ0o7UUFDMUJILGNBQWNHO1FBQ2QsT0FBTztZQUNMQyxTQUFTRSxJQUFJLENBQUNFLFdBQVcsQ0FBQ0w7UUFDNUI7SUFDRixHQUFHO1FBQUNMO0tBQUs7SUFFVCxPQUFPQyxhQUFBQSxXQUFBQSxHQUFhVSxDQUFBQSxHQUFBQSxVQUFBQSxZQUFBQSxFQUFhWixVQUFVRSxjQUFjO0FBQzNEO0tBYmFIIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvY2xpZW50L3BvcnRhbC9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuXG50eXBlIFBvcnRhbFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIHR5cGU6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgUG9ydGFsID0gKHsgY2hpbGRyZW4sIHR5cGUgfTogUG9ydGFsUHJvcHMpID0+IHtcbiAgY29uc3QgW3BvcnRhbE5vZGUsIHNldFBvcnRhbE5vZGVdID0gdXNlU3RhdGU8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSlcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpXG4gICAgc2V0UG9ydGFsTm9kZShlbGVtZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsZW1lbnQpXG4gICAgfVxuICB9LCBbdHlwZV0pXG5cbiAgcmV0dXJuIHBvcnRhbE5vZGUgPyBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIHBvcnRhbE5vZGUpIDogbnVsbFxufVxuIl0sIm5hbWVzIjpbIlBvcnRhbCIsImNoaWxkcmVuIiwidHlwZSIsInBvcnRhbE5vZGUiLCJzZXRQb3J0YWxOb2RlIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJlbGVtZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYm9keSIsImFwcGVuZENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJjcmVhdGVQb3J0YWwiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/portal/index.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js":
/*!*****************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js ***!
\*****************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// This module can be shared between both pages router and app router\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 isRecoverableError: function() {\n return isRecoverableError;\n },\n onRecoverableError: function() {\n return onRecoverableError;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _bailouttocsr = __webpack_require__(/*! ../../shared/lib/lazy-dynamic/bailout-to-csr */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../lib/is-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-error.js\"));\nconst _reportglobalerror = __webpack_require__(/*! ./report-global-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/react-client-callbacks/report-global-error.js\");\nconst recoverableErrors = new WeakSet();\nfunction isRecoverableError(error) {\n return recoverableErrors.has(error);\n}\nconst onRecoverableError = (error)=>{\n // x-ref: https://github.com/facebook/react/pull/28736\n let cause = (0, _iserror.default)(error) && 'cause' in error ? error.cause : error;\n // Skip certain custom errors which are not expected to be reported on client\n if ((0, _bailouttocsr.isBailoutToCSRError)(cause)) return;\n if (true) {\n const { decorateDevError } = __webpack_require__(/*! ../../next-devtools/userspace/app/errors/stitched-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\n const causeError = decorateDevError(cause);\n recoverableErrors.add(causeError);\n cause = causeError;\n }\n (0, _reportglobalerror.reportGlobalError)(cause);\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=on-recoverable-error.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlYWN0LWNsaWVudC1jYWxsYmFja3Mvb24tcmVjb3ZlcmFibGUtZXJyb3IuanMiLCJtYXBwaW5ncyI6IkFBQUEscUVBQXFFOzs7Ozs7Ozs7Ozs7O0lBU3JEQSxrQkFBa0I7ZUFBbEJBOztJQUlIQyxrQkFBa0I7ZUFBbEJBOzs7OzBDQVZ1Qjs4RUFDaEI7K0NBQ2M7QUFFbEMsTUFBTUMsb0JBQW9CLElBQUlDO0FBRXZCLFNBQVNILG1CQUFtQkksS0FBWTtJQUM3QyxPQUFPRixrQkFBa0JHLEdBQUcsQ0FBQ0Q7QUFDL0I7QUFFTyxNQUFNSCxxQkFBNkQsQ0FDeEVHO0lBRUEsc0RBQXNEO0lBQ3RELElBQUlFLFFBQVFDLENBQUFBLEdBQUFBLFNBQUFBLE9BQUFBLEVBQVFILFVBQVUsV0FBV0EsUUFBUUEsTUFBTUUsS0FBSyxHQUFHRjtJQUMvRCw2RUFBNkU7SUFDN0UsSUFBSUksQ0FBQUEsR0FBQUEsY0FBQUEsbUJBQUFBLEVBQW9CRixRQUFRO0lBRWhDLElBQUlHLElBQW9CLEVBQW1CO1FBQ3pDLE1BQU0sRUFBRUcsZ0JBQWdCLEVBQUUsR0FDeEJDLG1CQUFPQSxDQUFDLDZPQUF5RDtRQUNuRSxNQUFNQyxhQUFhRixpQkFBaUJOO1FBQ3BDSixrQkFBa0JhLEdBQUcsQ0FBQ0Q7UUFDdEJSLFFBQVFRO0lBQ1Y7SUFFQUUsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQlY7QUFDcEIiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL3NyYy9jbGllbnQvcmVhY3QtY2xpZW50LWNhbGxiYWNrcy9vbi1yZWNvdmVyYWJsZS1lcnJvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIG1vZHVsZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gYm90aCBwYWdlcyByb3V0ZXIgYW5kIGFwcCByb3V0ZXJcblxuaW1wb3J0IHR5cGUgeyBIeWRyYXRpb25PcHRpb25zIH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCdcbmltcG9ydCB7IGlzQmFpbG91dFRvQ1NSRXJyb3IgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2xhenktZHluYW1pYy9iYWlsb3V0LXRvLWNzcidcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4uLy4uL2xpYi9pcy1lcnJvcidcbmltcG9ydCB7IHJlcG9ydEdsb2JhbEVycm9yIH0gZnJvbSAnLi9yZXBvcnQtZ2xvYmFsLWVycm9yJ1xuXG5jb25zdCByZWNvdmVyYWJsZUVycm9ycyA9IG5ldyBXZWFrU2V0PEVycm9yPigpXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlY292ZXJhYmxlRXJyb3IoZXJyb3I6IEVycm9yKTogYm9vbGVhbiB7XG4gIHJldHVybiByZWNvdmVyYWJsZUVycm9ycy5oYXMoZXJyb3IpXG59XG5cbmV4cG9ydCBjb25zdCBvblJlY292ZXJhYmxlRXJyb3I6IEh5ZHJhdGlvbk9wdGlvbnNbJ29uUmVjb3ZlcmFibGVFcnJvciddID0gKFxuICBlcnJvclxuKSA9PiB7XG4gIC8vIHgtcmVmOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yODczNlxuICBsZXQgY2F1c2UgPSBpc0Vycm9yKGVycm9yKSAmJiAnY2F1c2UnIGluIGVycm9yID8gZXJyb3IuY2F1c2UgOiBlcnJvclxuICAvLyBTa2lwIGNlcnRhaW4gY3VzdG9tIGVycm9ycyB3aGljaCBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIHJlcG9ydGVkIG9uIGNsaWVudFxuICBpZiAoaXNCYWlsb3V0VG9DU1JFcnJvcihjYXVzZSkpIHJldHVyblxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc3QgeyBkZWNvcmF0ZURldkVycm9yIH0gPVxuICAgICAgcmVxdWlyZSgnLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9zdGl0Y2hlZC1lcnJvcicpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9lcnJvcnMvc3RpdGNoZWQtZXJyb3InKVxuICAgIGNvbnN0IGNhdXNlRXJyb3IgPSBkZWNvcmF0ZURldkVycm9yKGNhdXNlKVxuICAgIHJlY292ZXJhYmxlRXJyb3JzLmFkZChjYXVzZUVycm9yKVxuICAgIGNhdXNlID0gY2F1c2VFcnJvclxuICB9XG5cbiAgcmVwb3J0R2xvYmFsRXJyb3IoY2F1c2UpXG59XG4iXSwibmFtZXMiOlsiaXNSZWNvdmVyYWJsZUVycm9yIiwib25SZWNvdmVyYWJsZUVycm9yIiwicmVjb3ZlcmFibGVFcnJvcnMiLCJXZWFrU2V0IiwiZXJyb3IiLCJoYXMiLCJjYXVzZSIsImlzRXJyb3IiLCJpc0JhaWxvdXRUb0NTUkVycm9yIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZGVjb3JhdGVEZXZFcnJvciIsInJlcXVpcmUiLCJjYXVzZUVycm9yIiwiYWRkIiwicmVwb3J0R2xvYmFsRXJyb3IiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/react-client-callbacks/report-global-error.js":
/*!****************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/react-client-callbacks/report-global-error.js ***!
\****************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"reportGlobalError\", ({\n enumerable: true,\n get: function() {\n return reportGlobalError;\n }\n}));\nconst reportGlobalError = typeof reportError === 'function' ? reportError : (error)=>{\n // TODO: Dispatch error event\n globalThis.console.error(error);\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=report-global-error.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlYWN0LWNsaWVudC1jYWxsYmFja3MvcmVwb3J0LWdsb2JhbC1lcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7O3FEQUFhQTs7O2VBQUFBOzs7QUFBTixNQUFNQSxvQkFDWCxPQUFPQyxnQkFBZ0IsYUFFbkIsY0FFQSxDQUFDQztJQUNDLDZCQUE2QjtJQUM3QkMsV0FBV0MsT0FBTyxDQUFDRixLQUFLLENBQUNBO0FBQzNCIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvY2xpZW50L3JlYWN0LWNsaWVudC1jYWxsYmFja3MvcmVwb3J0LWdsb2JhbC1lcnJvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgcmVwb3J0R2xvYmFsRXJyb3IgPVxuICB0eXBlb2YgcmVwb3J0RXJyb3IgPT09ICdmdW5jdGlvbidcbiAgICA/IC8vIEluIG1vZGVybiBicm93c2VycywgcmVwb3J0RXJyb3Igd2lsbCBkaXNwYXRjaCBhbiBlcnJvciBldmVudCxcbiAgICAgIC8vIGVtdWxhdGluZyBhbiB1bmNhdWdodCBKYXZhU2NyaXB0IGVycm9yLlxuICAgICAgcmVwb3J0RXJyb3JcbiAgICA6IChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAvLyBUT0RPOiBEaXNwYXRjaCBlcnJvciBldmVudFxuICAgICAgICBnbG9iYWxUaGlzLmNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICB9XG4iXSwibmFtZXMiOlsicmVwb3J0R2xvYmFsRXJyb3IiLCJyZXBvcnRFcnJvciIsImVycm9yIiwiZ2xvYmFsVGhpcyIsImNvbnNvbGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/react-client-callbacks/report-global-error.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/remove-base-path.js":
/*!**************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/remove-base-path.js ***!
\**************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeBasePath\", ({\n enumerable: true,\n get: function() {\n return removeBasePath;\n }\n}));\nconst _hasbasepath = __webpack_require__(/*! ./has-base-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/has-base-path.js\");\nconst basePath = false || '';\nfunction removeBasePath(path) {\n if (false) {}\n // Can't trim the basePath if it has zero length!\n if (basePath.length === 0) return path;\n path = path.slice(basePath.length);\n if (!path.startsWith('/')) path = \"/\" + path;\n return path;\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=remove-base-path.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlbW92ZS1iYXNlLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OztrREFJZ0JBOzs7ZUFBQUE7Ozt5Q0FKWTtBQUU1QixNQUFNQyxXQUFZQyxNQUFrQyxJQUFlO0FBRTVELFNBQVNGLGVBQWVLLElBQVk7SUFDekMsSUFBSUgsS0FBMEMsRUFBRSxFQUkvQztJQUVELGlEQUFpRDtJQUNqRCxJQUFJRCxTQUFTTyxNQUFNLEtBQUssR0FBRyxPQUFPSDtJQUVsQ0EsT0FBT0EsS0FBS0ksS0FBSyxDQUFDUixTQUFTTyxNQUFNO0lBQ2pDLElBQUksQ0FBQ0gsS0FBS0ssVUFBVSxDQUFDLE1BQU1MLE9BQVEsTUFBR0E7SUFDdEMsT0FBT0E7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvcmVtb3ZlLWJhc2UtcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoYXNCYXNlUGF0aCB9IGZyb20gJy4vaGFzLWJhc2UtcGF0aCdcblxuY29uc3QgYmFzZVBhdGggPSAocHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSCBhcyBzdHJpbmcpIHx8ICcnXG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVCYXNlUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX01BTlVBTF9DTElFTlRfQkFTRV9QQVRIKSB7XG4gICAgaWYgKCFoYXNCYXNlUGF0aChwYXRoKSkge1xuICAgICAgcmV0dXJuIHBhdGhcbiAgICB9XG4gIH1cblxuICAvLyBDYW4ndCB0cmltIHRoZSBiYXNlUGF0aCBpZiBpdCBoYXMgemVybyBsZW5ndGghXG4gIGlmIChiYXNlUGF0aC5sZW5ndGggPT09IDApIHJldHVybiBwYXRoXG5cbiAgcGF0aCA9IHBhdGguc2xpY2UoYmFzZVBhdGgubGVuZ3RoKVxuICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSBwYXRoID0gYC8ke3BhdGh9YFxuICByZXR1cm4gcGF0aFxufVxuIl0sIm5hbWVzIjpbInJlbW92ZUJhc2VQYXRoIiwiYmFzZVBhdGgiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1JPVVRFUl9CQVNFUEFUSCIsInBhdGgiLCJfX05FWFRfTUFOVUFMX0NMSUVOVF9CQVNFX1BBVEgiLCJoYXNCYXNlUGF0aCIsImxlbmd0aCIsInNsaWNlIiwic3RhcnRzV2l0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/remove-base-path.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/remove-locale.js":
/*!***********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/remove-locale.js ***!
\***********************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeLocale\", ({\n enumerable: true,\n get: function() {\n return removeLocale;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction removeLocale(path, locale) {\n if (false) {}\n return path;\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=remove-locale.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlbW92ZS1sb2NhbGUuanMiLCJtYXBwaW5ncyI6Ijs7OztnREFFZ0JBOzs7ZUFBQUE7Ozt1Q0FGVTtBQUVuQixTQUFTQSxhQUFhQyxJQUFZLEVBQUVDLE1BQWU7SUFDeEQsSUFBSUMsS0FBK0IsRUFBRSxFQVlwQztJQUNELE9BQU9GO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9zcmMvY2xpZW50L3JlbW92ZS1sb2NhbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2VQYXRoIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcGF0aCdcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxvY2FsZShwYXRoOiBzdHJpbmcsIGxvY2FsZT86IHN0cmluZykge1xuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgIGNvbnN0IHsgcGF0aG5hbWUgfSA9IHBhcnNlUGF0aChwYXRoKVxuICAgIGNvbnN0IHBhdGhMb3dlciA9IHBhdGhuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBsb2NhbGVMb3dlciA9IGxvY2FsZT8udG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIGxvY2FsZSAmJlxuICAgICAgKHBhdGhMb3dlci5zdGFydHNXaXRoKGAvJHtsb2NhbGVMb3dlcn0vYCkgfHxcbiAgICAgICAgcGF0aExvd2VyID09PSBgLyR7bG9jYWxlTG93ZXJ9YClcbiAgICAgID8gYCR7cGF0aG5hbWUubGVuZ3RoID09PSBsb2NhbGUubGVuZ3RoICsgMSA/IGAvYCA6IGBgfSR7cGF0aC5zbGljZShcbiAgICAgICAgICBsb2NhbGUubGVuZ3RoICsgMVxuICAgICAgICApfWBcbiAgICAgIDogcGF0aFxuICB9XG4gIHJldHVybiBwYXRoXG59XG4iXSwibmFtZXMiOlsicmVtb3ZlTG9jYWxlIiwicGF0aCIsImxvY2FsZSIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfSTE4Tl9TVVBQT1JUIiwicGF0aG5hbWUiLCJwYXJzZVBhdGgiLCJwYXRoTG93ZXIiLCJ0b0xvd2VyQ2FzZSIsImxvY2FsZUxvd2VyIiwic3RhcnRzV2l0aCIsImxlbmd0aCIsInNsaWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/remove-locale.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/request-idle-callback.js":
/*!*******************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/request-idle-callback.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 cancelIdleCallback: function() {\n return cancelIdleCallback;\n },\n requestIdleCallback: function() {\n return requestIdleCallback;\n }\n});\nconst requestIdleCallback = typeof self !== 'undefined' && self.requestIdleCallback && self.requestIdleCallback.bind(window) || function(cb) {\n let start = Date.now();\n return self.setTimeout(function() {\n cb({\n didTimeout: false,\n timeRemaining: function() {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n};\nconst cancelIdleCallback = typeof self !== 'undefined' && self.cancelIdleCallback && self.cancelIdleCallback.bind(window) || function(id) {\n return clearTimeout(id);\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=request-idle-callback.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlcXVlc3QtaWRsZS1jYWxsYmFjay5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFnQmFBLGtCQUFrQjtlQUFsQkE7O0lBaEJBQyxtQkFBbUI7ZUFBbkJBOzs7QUFBTixNQUFNQSxzQkFDVixPQUFPQyxTQUFTLGVBQ2ZBLEtBQUtELG1CQUFtQixJQUN4QkMsS0FBS0QsbUJBQW1CLENBQUNFLElBQUksQ0FBQ0MsV0FDaEMsU0FBVUMsRUFBdUI7SUFDL0IsSUFBSUMsUUFBUUMsS0FBS0MsR0FBRztJQUNwQixPQUFPTixLQUFLTyxVQUFVLENBQUM7UUFDckJKLEdBQUc7WUFDREssWUFBWTtZQUNaQyxlQUFlO2dCQUNiLE9BQU9DLEtBQUtDLEdBQUcsQ0FBQyxHQUFHLEtBQU1OLENBQUFBLEtBQUtDLEdBQUcsS0FBS0YsS0FBQUEsQ0FBSTtZQUM1QztRQUNGO0lBQ0YsR0FBRztBQUNMO0FBRUssTUFBTU4scUJBQ1YsT0FBT0UsU0FBUyxlQUNmQSxLQUFLRixrQkFBa0IsSUFDdkJFLEtBQUtGLGtCQUFrQixDQUFDRyxJQUFJLENBQUNDLFdBQy9CLFNBQVVVLEVBQVU7SUFDbEIsT0FBT0MsYUFBYUQ7QUFDdEIiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9zcmMvY2xpZW50L3JlcXVlc3QtaWRsZS1jYWxsYmFjay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgcmVxdWVzdElkbGVDYWxsYmFjayA9XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBzZWxmLnJlcXVlc3RJZGxlQ2FsbGJhY2sgJiZcbiAgICBzZWxmLnJlcXVlc3RJZGxlQ2FsbGJhY2suYmluZCh3aW5kb3cpKSB8fFxuICBmdW5jdGlvbiAoY2I6IElkbGVSZXF1ZXN0Q2FsbGJhY2spOiBudW1iZXIge1xuICAgIGxldCBzdGFydCA9IERhdGUubm93KClcbiAgICByZXR1cm4gc2VsZi5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGNiKHtcbiAgICAgICAgZGlkVGltZW91dDogZmFsc2UsXG4gICAgICAgIHRpbWVSZW1haW5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgNTAgLSAoRGF0ZS5ub3coKSAtIHN0YXJ0KSlcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSwgMSlcbiAgfVxuXG5leHBvcnQgY29uc3QgY2FuY2VsSWRsZUNhbGxiYWNrID1cbiAgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHNlbGYuY2FuY2VsSWRsZUNhbGxiYWNrICYmXG4gICAgc2VsZi5jYW5jZWxJZGxlQ2FsbGJhY2suYmluZCh3aW5kb3cpKSB8fFxuICBmdW5jdGlvbiAoaWQ6IG51bWJlcikge1xuICAgIHJldHVybiBjbGVhclRpbWVvdXQoaWQpXG4gIH1cbiJdLCJuYW1lcyI6WyJjYW5jZWxJZGxlQ2FsbGJhY2siLCJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwic2VsZiIsImJpbmQiLCJ3aW5kb3ciLCJjYiIsInN0YXJ0IiwiRGF0ZSIsIm5vdyIsInNldFRpbWVvdXQiLCJkaWRUaW1lb3V0IiwidGltZVJlbWFpbmluZyIsIk1hdGgiLCJtYXgiLCJpZCIsImNsZWFyVGltZW91dCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/request-idle-callback.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/resolve-href.js":
/*!**********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/resolve-href.js ***!
\**********************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"resolveHref\", ({\n enumerable: true,\n get: function() {\n return resolveHref;\n }\n}));\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _formaturl = __webpack_require__(/*! ../shared/lib/router/utils/format-url */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _omit = __webpack_require__(/*! ../shared/lib/router/utils/omit */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst _islocalurl = __webpack_require__(/*! ../shared/lib/router/utils/is-local-url */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _utils1 = __webpack_require__(/*! ../shared/lib/router/utils */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _interpolateas = __webpack_require__(/*! ../shared/lib/router/utils/interpolate-as */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nconst _routeregex = __webpack_require__(/*! ../shared/lib/router/utils/route-regex */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nconst _routematcher = __webpack_require__(/*! ../shared/lib/router/utils/route-matcher */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nfunction resolveHref(router, href, resolveAs) {\n // we use a dummy base url for relative urls\n let base;\n let urlAsString = typeof href === 'string' ? href : (0, _formaturl.formatWithValidation)(href);\n // repeated slashes and backslashes in the URL are considered\n // invalid and will never match a Next.js page/file\n // https://www.rfc-editor.org/rfc/rfc3986.html#section-3.1\n const urlProtoMatch = urlAsString.match(/^[a-z][a-z0-9+.-]*:\\/\\//i);\n const urlAsStringNoProto = urlProtoMatch ? urlAsString.slice(urlProtoMatch[0].length) : urlAsString;\n const urlParts = urlAsStringNoProto.split('?', 1);\n if ((urlParts[0] || '').match(/(\\/\\/|\\\\)/)) {\n console.error(\"Invalid href '\" + urlAsString + \"' passed to next/router in page: '\" + router.pathname + \"'. Repeated forward-slashes (//) or backslashes \\\\ are not valid in the href.\");\n const normalizedUrl = (0, _utils.normalizeRepeatedSlashes)(urlAsStringNoProto);\n urlAsString = (urlProtoMatch ? urlProtoMatch[0] : '') + normalizedUrl;\n }\n // Return because it cannot be routed by the Next.js router\n if (!(0, _islocalurl.isLocalURL)(urlAsString)) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\n }\n try {\n let baseBase = urlAsString.startsWith('#') ? router.asPath : router.pathname;\n // If the provided href is only a query string, it is safer to use the asPath\n // considering rewrites.\n if (urlAsString.startsWith('?')) {\n baseBase = router.asPath;\n // However, if is a dynamic route, we need to use the pathname to preserve the\n // query interpolation and rewrites (router.pathname will look like \"/[slug]\").\n if ((0, _utils1.isDynamicRoute)(router.pathname)) {\n baseBase = router.pathname;\n const routeRegex = (0, _routeregex.getRouteRegex)(router.pathname);\n const match = (0, _routematcher.getRouteMatcher)(routeRegex)(router.asPath);\n // For dynamic routes, if asPath doesn't match the pathname regex, it is a rewritten path.\n // In this case, should use asPath to preserve the current URL.\n if (!match) {\n baseBase = router.asPath;\n }\n // Note: There is an edge case where the pathname is dynamic, and also a rewrite path to the same segment.\n // E.g. in \"/[slug]\" path, rewrite \"/foo\" -> \"/bar\"\n // In this case, it will be treated as a non-rewritten path and possibly interpolate the query string.\n // E.g., \"/any?slug=foo\" will become the content of \"/foo\", not rewritten as \"/bar\"\n // This is currently a trade-off of not resolving rewrite paths on every Router/Link call,\n // but using a lighter route regex pattern check.\n }\n }\n base = new URL(baseBase, 'http://n');\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n base = new URL('/', 'http://n');\n }\n try {\n const finalUrl = new URL(urlAsString, base);\n finalUrl.pathname = (0, _normalizetrailingslash.normalizePathTrailingSlash)(finalUrl.pathname);\n let interpolatedAs = '';\n if ((0, _utils1.isDynamicRoute)(finalUrl.pathname) && finalUrl.searchParams && resolveAs) {\n const query = (0, _querystring.searchParamsToUrlQuery)(finalUrl.searchParams);\n const { result, params } = (0, _interpolateas.interpolateAs)(finalUrl.pathname, finalUrl.pathname, query);\n if (result) {\n interpolatedAs = (0, _formaturl.formatWithValidation)({\n pathname: result,\n hash: finalUrl.hash,\n query: (0, _omit.omit)(query, params)\n });\n }\n }\n // if the origin didn't change, it means we received a relative href\n const resolvedHref = finalUrl.origin === base.origin ? finalUrl.href.slice(finalUrl.origin.length) : finalUrl.href;\n return resolveAs ? [\n resolvedHref,\n interpolatedAs || resolvedHref\n ] : resolvedHref;\n } catch (_) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\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=resolve-href.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3Jlc29sdmUtaHJlZi5qcyIsIm1hcHBpbmdzIjoiOzs7OytDQTJCZ0JBOzs7ZUFBQUE7Ozt5Q0F6QnVCO3VDQUNGO2tDQUNoQjttQ0FDb0I7b0RBQ0U7d0NBQ2hCO29DQUNJOzJDQUNEO3dDQUNBOzBDQUNFO0FBZ0J6QixTQUFTQSxZQUNkQyxNQUFrQixFQUNsQkMsSUFBUyxFQUNUQyxTQUFtQjtJQUVuQiw0Q0FBNEM7SUFDNUMsSUFBSUM7SUFDSixJQUFJQyxjQUFjLE9BQU9ILFNBQVMsV0FBV0EsT0FBT0ksQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQUFBLEVBQXFCSjtJQUV6RSw2REFBNkQ7SUFDN0QsbURBQW1EO0lBQ25ELDBEQUEwRDtJQUMxRCxNQUFNSyxnQkFBZ0JGLFlBQVlHLEtBQUssQ0FBQztJQUN4QyxNQUFNQyxxQkFBcUJGLGdCQUN2QkYsWUFBWUssS0FBSyxDQUFDSCxhQUFhLENBQUMsRUFBRSxDQUFDSSxNQUFNLElBQ3pDTjtJQUVKLE1BQU1PLFdBQVdILG1CQUFtQkksS0FBSyxDQUFDLEtBQUs7SUFFL0MsSUFBS0QsU0FBUSxDQUFDLEVBQUUsSUFBSSxHQUFDLENBQUdKLEtBQUssQ0FBQyxjQUFjO1FBQzFDTSxRQUFRQyxLQUFLLENBQ1YsbUJBQWdCVixjQUFZLHVDQUFvQ0osT0FBT2UsUUFBUSxHQUFDO1FBRW5GLE1BQU1DLGdCQUFnQkMsQ0FBQUEsR0FBQUEsT0FBQUEsd0JBQUFBLEVBQXlCVDtRQUMvQ0osY0FBZUUsQ0FBQUEsZ0JBQWdCQSxhQUFhLENBQUMsRUFBRSxHQUFHLEdBQUMsR0FBS1U7SUFDMUQ7SUFFQSwyREFBMkQ7SUFDM0QsSUFBSSxDQUFDRSxDQUFBQSxHQUFBQSxZQUFBQSxVQUFBQSxFQUFXZCxjQUFjO1FBQzVCLE9BQVFGLFlBQVk7WUFBQ0U7U0FBWSxHQUFHQTtJQUN0QztJQUVBLElBQUk7UUFDRixJQUFJZSxXQUFXZixZQUFZZ0IsVUFBVSxDQUFDLE9BQU9wQixPQUFPcUIsTUFBTSxHQUFHckIsT0FBT2UsUUFBUTtRQUU1RSw2RUFBNkU7UUFDN0Usd0JBQXdCO1FBQ3hCLElBQUlYLFlBQVlnQixVQUFVLENBQUMsTUFBTTtZQUMvQkQsV0FBV25CLE9BQU9xQixNQUFNO1lBRXhCLDhFQUE4RTtZQUM5RSwrRUFBK0U7WUFDL0UsSUFBSUMsQ0FBQUEsR0FBQUEsUUFBQUEsY0FBQUEsRUFBZXRCLE9BQU9lLFFBQVEsR0FBRztnQkFDbkNJLFdBQVduQixPQUFPZSxRQUFRO2dCQUUxQixNQUFNUSxhQUFhQyxDQUFBQSxHQUFBQSxZQUFBQSxhQUFBQSxFQUFjeEIsT0FBT2UsUUFBUTtnQkFDaEQsTUFBTVIsUUFBUWtCLENBQUFBLEdBQUFBLGNBQUFBLGVBQUFBLEVBQWdCRixZQUFZdkIsT0FBT3FCLE1BQU07Z0JBRXZELDBGQUEwRjtnQkFDMUYsK0RBQStEO2dCQUMvRCxJQUFJLENBQUNkLE9BQU87b0JBQ1ZZLFdBQVduQixPQUFPcUIsTUFBTTtnQkFDMUI7WUFFQSwwR0FBMEc7WUFDMUcsbURBQW1EO1lBRW5ELHNHQUFzRztZQUN0RyxtRkFBbUY7WUFFbkYsMEZBQTBGO1lBQzFGLGlEQUFpRDtZQUNuRDtRQUNGO1FBRUFsQixPQUFPLElBQUl1QixJQUFJUCxVQUFVO0lBQzNCLEVBQUUsT0FBT1EsR0FBRztRQUNWLGtEQUFrRDtRQUNsRHhCLE9BQU8sSUFBSXVCLElBQUksS0FBSztJQUN0QjtJQUVBLElBQUk7UUFDRixNQUFNRSxXQUFXLElBQUlGLElBQUl0QixhQUFhRDtRQUN0Q3lCLFNBQVNiLFFBQVEsR0FBR2MsQ0FBQUEsR0FBQUEsd0JBQUFBLDBCQUFBQSxFQUEyQkQsU0FBU2IsUUFBUTtRQUNoRSxJQUFJZSxpQkFBaUI7UUFFckIsSUFDRVIsQ0FBQUEsR0FBQUEsUUFBQUEsY0FBQUEsRUFBZU0sU0FBU2IsUUFBUSxLQUNoQ2EsU0FBU0csWUFBWSxJQUNyQjdCLFdBQ0E7WUFDQSxNQUFNOEIsUUFBUUMsQ0FBQUEsR0FBQUEsYUFBQUEsc0JBQUFBLEVBQXVCTCxTQUFTRyxZQUFZO1lBRTFELE1BQU0sRUFBRUcsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR0MsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFDekJSLFNBQVNiLFFBQVEsRUFDakJhLFNBQVNiLFFBQVEsRUFDakJpQjtZQUdGLElBQUlFLFFBQVE7Z0JBQ1ZKLGlCQUFpQnpCLENBQUFBLEdBQUFBLFdBQUFBLG9CQUFBQSxFQUFxQjtvQkFDcENVLFVBQVVtQjtvQkFDVkcsTUFBTVQsU0FBU1MsSUFBSTtvQkFDbkJMLE9BQU9NLENBQUFBLEdBQUFBLE1BQUFBLElBQUFBLEVBQUtOLE9BQU9HO2dCQUNyQjtZQUNGO1FBQ0Y7UUFFQSxvRUFBb0U7UUFDcEUsTUFBTUksZUFDSlgsU0FBU1ksTUFBTSxLQUFLckMsS0FBS3FDLE1BQU0sR0FDM0JaLFNBQVMzQixJQUFJLENBQUNRLEtBQUssQ0FBQ21CLFNBQVNZLE1BQU0sQ0FBQzlCLE1BQU0sSUFDMUNrQixTQUFTM0IsSUFBSTtRQUVuQixPQUFPQyxZQUNIO1lBQUNxQztZQUFjVCxrQkFBa0JTO1NBQWEsR0FDOUNBO0lBQ04sRUFBRSxPQUFPWixHQUFHO1FBQ1YsT0FBT3pCLFlBQVk7WUFBQ0U7U0FBWSxHQUFHQTtJQUNyQztBQUNGIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC9yZXNvbHZlLWhyZWYudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOZXh0Um91dGVyLCBVcmwgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci9yb3V0ZXInXG5cbmltcG9ydCB7IHNlYXJjaFBhcmFtc1RvVXJsUXVlcnkgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9xdWVyeXN0cmluZydcbmltcG9ydCB7IGZvcm1hdFdpdGhWYWxpZGF0aW9uIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybCdcbmltcG9ydCB7IG9taXQgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9vbWl0J1xuaW1wb3J0IHsgbm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi91dGlscydcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2gnXG5pbXBvcnQgeyBpc0xvY2FsVVJMIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsJ1xuaW1wb3J0IHsgaXNEeW5hbWljUm91dGUgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscydcbmltcG9ydCB7IGludGVycG9sYXRlQXMgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbnRlcnBvbGF0ZS1hcydcbmltcG9ydCB7IGdldFJvdXRlUmVnZXggfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yb3V0ZS1yZWdleCdcbmltcG9ydCB7IGdldFJvdXRlTWF0Y2hlciB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JvdXRlLW1hdGNoZXInXG5cbi8qKlxuICogUmVzb2x2ZXMgYSBnaXZlbiBoeXBlcmxpbmsgd2l0aCBhIGNlcnRhaW4gcm91dGVyIHN0YXRlIChiYXNlUGF0aCBub3QgaW5jbHVkZWQpLlxuICogUHJlc2VydmVzIGFic29sdXRlIHVybHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSHJlZihcbiAgcm91dGVyOiBOZXh0Um91dGVyLFxuICBocmVmOiBVcmwsXG4gIHJlc29sdmVBczogdHJ1ZVxuKTogW3N0cmluZywgc3RyaW5nXSB8IFtzdHJpbmddXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUhyZWYoXG4gIHJvdXRlcjogTmV4dFJvdXRlcixcbiAgaHJlZjogVXJsLFxuICByZXNvbHZlQXM/OiBmYWxzZVxuKTogc3RyaW5nXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUhyZWYoXG4gIHJvdXRlcjogTmV4dFJvdXRlcixcbiAgaHJlZjogVXJsLFxuICByZXNvbHZlQXM/OiBib29sZWFuXG4pOiBbc3RyaW5nLCBzdHJpbmddIHwgW3N0cmluZ10gfCBzdHJpbmcge1xuICAvLyB3ZSB1c2UgYSBkdW1teSBiYXNlIHVybCBmb3IgcmVsYXRpdmUgdXJsc1xuICBsZXQgYmFzZTogVVJMXG4gIGxldCB1cmxBc1N0cmluZyA9IHR5cGVvZiBocmVmID09PSAnc3RyaW5nJyA/IGhyZWYgOiBmb3JtYXRXaXRoVmFsaWRhdGlvbihocmVmKVxuXG4gIC8vIHJlcGVhdGVkIHNsYXNoZXMgYW5kIGJhY2tzbGFzaGVzIGluIHRoZSBVUkwgYXJlIGNvbnNpZGVyZWRcbiAgLy8gaW52YWxpZCBhbmQgd2lsbCBuZXZlciBtYXRjaCBhIE5leHQuanMgcGFnZS9maWxlXG4gIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzOTg2Lmh0bWwjc2VjdGlvbi0zLjFcbiAgY29uc3QgdXJsUHJvdG9NYXRjaCA9IHVybEFzU3RyaW5nLm1hdGNoKC9eW2Etel1bYS16MC05Ky4tXSo6XFwvXFwvL2kpXG4gIGNvbnN0IHVybEFzU3RyaW5nTm9Qcm90byA9IHVybFByb3RvTWF0Y2hcbiAgICA/IHVybEFzU3RyaW5nLnNsaWNlKHVybFByb3RvTWF0Y2hbMF0ubGVuZ3RoKVxuICAgIDogdXJsQXNTdHJpbmdcblxuICBjb25zdCB1cmxQYXJ0cyA9IHVybEFzU3RyaW5nTm9Qcm90by5zcGxpdCgnPycsIDEpXG5cbiAgaWYgKCh1cmxQYXJ0c1swXSB8fCAnJykubWF0Y2goLyhcXC9cXC98XFxcXCkvKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgSW52YWxpZCBocmVmICcke3VybEFzU3RyaW5nfScgcGFzc2VkIHRvIG5leHQvcm91dGVyIGluIHBhZ2U6ICcke3JvdXRlci5wYXRobmFtZX0nLiBSZXBlYXRlZCBmb3J3YXJkLXNsYXNoZXMgKC8vKSBvciBiYWNrc2xhc2hlcyBcXFxcIGFyZSBub3QgdmFsaWQgaW4gdGhlIGhyZWYuYFxuICAgIClcbiAgICBjb25zdCBub3JtYWxpemVkVXJsID0gbm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzKHVybEFzU3RyaW5nTm9Qcm90bylcbiAgICB1cmxBc1N0cmluZyA9ICh1cmxQcm90b01hdGNoID8gdXJsUHJvdG9NYXRjaFswXSA6ICcnKSArIG5vcm1hbGl6ZWRVcmxcbiAgfVxuXG4gIC8vIFJldHVybiBiZWNhdXNlIGl0IGNhbm5vdCBiZSByb3V0ZWQgYnkgdGhlIE5leHQuanMgcm91dGVyXG4gIGlmICghaXNMb2NhbFVSTCh1cmxBc1N0cmluZykpIHtcbiAgICByZXR1cm4gKHJlc29sdmVBcyA/IFt1cmxBc1N0cmluZ10gOiB1cmxBc1N0cmluZykgYXMgc3RyaW5nXG4gIH1cblxuICB0cnkge1xuICAgIGxldCBiYXNlQmFzZSA9IHVybEFzU3RyaW5nLnN0YXJ0c1dpdGgoJyMnKSA/IHJvdXRlci5hc1BhdGggOiByb3V0ZXIucGF0aG5hbWVcblxuICAgIC8vIElmIHRoZSBwcm92aWRlZCBocmVmIGlzIG9ubHkgYSBxdWVyeSBzdHJpbmcsIGl0IGlzIHNhZmVyIHRvIHVzZSB0aGUgYXNQYXRoXG4gICAgLy8gY29uc2lkZXJpbmcgcmV3cml0ZXMuXG4gICAgaWYgKHVybEFzU3RyaW5nLnN0YXJ0c1dpdGgoJz8nKSkge1xuICAgICAgYmFzZUJhc2UgPSByb3V0ZXIuYXNQYXRoXG5cbiAgICAgIC8vIEhvd2V2ZXIsIGlmIGlzIGEgZHluYW1pYyByb3V0ZSwgd2UgbmVlZCB0byB1c2UgdGhlIHBhdGhuYW1lIHRvIHByZXNlcnZlIHRoZVxuICAgICAgLy8gcXVlcnkgaW50ZXJwb2xhdGlvbiBhbmQgcmV3cml0ZXMgKHJvdXRlci5wYXRobmFtZSB3aWxsIGxvb2sgbGlrZSBcIi9bc2x1Z11cIikuXG4gICAgICBpZiAoaXNEeW5hbWljUm91dGUocm91dGVyLnBhdGhuYW1lKSkge1xuICAgICAgICBiYXNlQmFzZSA9IHJvdXRlci5wYXRobmFtZVxuXG4gICAgICAgIGNvbnN0IHJvdXRlUmVnZXggPSBnZXRSb3V0ZVJlZ2V4KHJvdXRlci5wYXRobmFtZSlcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBnZXRSb3V0ZU1hdGNoZXIocm91dGVSZWdleCkocm91dGVyLmFzUGF0aClcblxuICAgICAgICAvLyBGb3IgZHluYW1pYyByb3V0ZXMsIGlmIGFzUGF0aCBkb2Vzbid0IG1hdGNoIHRoZSBwYXRobmFtZSByZWdleCwgaXQgaXMgYSByZXdyaXR0ZW4gcGF0aC5cbiAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCBzaG91bGQgdXNlIGFzUGF0aCB0byBwcmVzZXJ2ZSB0aGUgY3VycmVudCBVUkwuXG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICBiYXNlQmFzZSA9IHJvdXRlci5hc1BhdGhcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdGU6IFRoZXJlIGlzIGFuIGVkZ2UgY2FzZSB3aGVyZSB0aGUgcGF0aG5hbWUgaXMgZHluYW1pYywgYW5kIGFsc28gYSByZXdyaXRlIHBhdGggdG8gdGhlIHNhbWUgc2VnbWVudC5cbiAgICAgICAgLy8gRS5nLiBpbiBcIi9bc2x1Z11cIiBwYXRoLCByZXdyaXRlIFwiL2Zvb1wiIC0+IFwiL2JhclwiXG5cbiAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBub24tcmV3cml0dGVuIHBhdGggYW5kIHBvc3NpYmx5IGludGVycG9sYXRlIHRoZSBxdWVyeSBzdHJpbmcuXG4gICAgICAgIC8vIEUuZy4sIFwiL2FueT9zbHVnPWZvb1wiIHdpbGwgYmVjb21lIHRoZSBjb250ZW50IG9mIFwiL2Zvb1wiLCBub3QgcmV3cml0dGVuIGFzIFwiL2JhclwiXG5cbiAgICAgICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgYSB0cmFkZS1vZmYgb2Ygbm90IHJlc29sdmluZyByZXdyaXRlIHBhdGhzIG9uIGV2ZXJ5IFJvdXRlci9MaW5rIGNhbGwsXG4gICAgICAgIC8vIGJ1dCB1c2luZyBhIGxpZ2h0ZXIgcm91dGUgcmVnZXggcGF0dGVybiBjaGVjay5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBiYXNlID0gbmV3IFVSTChiYXNlQmFzZSwgJ2h0dHA6Ly9uJylcbiAgfSBjYXRjaCAoXykge1xuICAgIC8vIGZhbGxiYWNrIHRvIC8gZm9yIGludmFsaWQgYXNQYXRoIHZhbHVlcyBlLmcuIC8vXG4gICAgYmFzZSA9IG5ldyBVUkwoJy8nLCAnaHR0cDovL24nKVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaW5hbFVybCA9IG5ldyBVUkwodXJsQXNTdHJpbmcsIGJhc2UpXG4gICAgZmluYWxVcmwucGF0aG5hbWUgPSBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaChmaW5hbFVybC5wYXRobmFtZSlcbiAgICBsZXQgaW50ZXJwb2xhdGVkQXMgPSAnJ1xuXG4gICAgaWYgKFxuICAgICAgaXNEeW5hbWljUm91dGUoZmluYWxVcmwucGF0aG5hbWUpICYmXG4gICAgICBmaW5hbFVybC5zZWFyY2hQYXJhbXMgJiZcbiAgICAgIHJlc29sdmVBc1xuICAgICkge1xuICAgICAgY29uc3QgcXVlcnkgPSBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5KGZpbmFsVXJsLnNlYXJjaFBhcmFtcylcblxuICAgICAgY29uc3QgeyByZXN1bHQsIHBhcmFtcyB9ID0gaW50ZXJwb2xhdGVBcyhcbiAgICAgICAgZmluYWxVcmwucGF0aG5hbWUsXG4gICAgICAgIGZpbmFsVXJsLnBhdGhuYW1lLFxuICAgICAgICBxdWVyeVxuICAgICAgKVxuXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGludGVycG9sYXRlZEFzID0gZm9ybWF0V2l0aFZhbGlkYXRpb24oe1xuICAgICAgICAgIHBhdGhuYW1lOiByZXN1bHQsXG4gICAgICAgICAgaGFzaDogZmluYWxVcmwuaGFzaCxcbiAgICAgICAgICBxdWVyeTogb21pdChxdWVyeSwgcGFyYW1zKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgb3JpZ2luIGRpZG4ndCBjaGFuZ2UsIGl0IG1lYW5zIHdlIHJlY2VpdmVkIGEgcmVsYXRpdmUgaHJlZlxuICAgIGNvbnN0IHJlc29sdmVkSHJlZiA9XG4gICAgICBmaW5hbFVybC5vcmlnaW4gPT09IGJhc2Uub3JpZ2luXG4gICAgICAgID8gZmluYWxVcmwuaHJlZi5zbGljZShmaW5hbFVybC5vcmlnaW4ubGVuZ3RoKVxuICAgICAgICA6IGZpbmFsVXJsLmhyZWZcblxuICAgIHJldHVybiByZXNvbHZlQXNcbiAgICAgID8gW3Jlc29sdmVkSHJlZiwgaW50ZXJwb2xhdGVkQXMgfHwgcmVzb2x2ZWRIcmVmXVxuICAgICAgOiByZXNvbHZlZEhyZWZcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiByZXNvbHZlQXMgPyBbdXJsQXNTdHJpbmddIDogdXJsQXNTdHJpbmdcbiAgfVxufVxuIl0sIm5hbWVzIjpbInJlc29sdmVIcmVmIiwicm91dGVyIiwiaHJlZiIsInJlc29sdmVBcyIsImJhc2UiLCJ1cmxBc1N0cmluZyIsImZvcm1hdFdpdGhWYWxpZGF0aW9uIiwidXJsUHJvdG9NYXRjaCIsIm1hdGNoIiwidXJsQXNTdHJpbmdOb1Byb3RvIiwic2xpY2UiLCJsZW5ndGgiLCJ1cmxQYXJ0cyIsInNwbGl0IiwiY29uc29sZSIsImVycm9yIiwicGF0aG5hbWUiLCJub3JtYWxpemVkVXJsIiwibm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzIiwiaXNMb2NhbFVSTCIsImJhc2VCYXNlIiwic3RhcnRzV2l0aCIsImFzUGF0aCIsImlzRHluYW1pY1JvdXRlIiwicm91dGVSZWdleCIsImdldFJvdXRlUmVnZXgiLCJnZXRSb3V0ZU1hdGNoZXIiLCJVUkwiLCJfIiwiZmluYWxVcmwiLCJub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCIsImludGVycG9sYXRlZEFzIiwic2VhcmNoUGFyYW1zIiwicXVlcnkiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwicmVzdWx0IiwicGFyYW1zIiwiaW50ZXJwb2xhdGVBcyIsImhhc2giLCJvbWl0IiwicmVzb2x2ZWRIcmVmIiwib3JpZ2luIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/resolve-href.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/route-announcer.js":
/*!*************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/route-announcer.js ***!
\*************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\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 RouteAnnouncer: function() {\n return RouteAnnouncer;\n },\n default: function() {\n return _default;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst _router = __webpack_require__(/*! ./router */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/router.js\");\nconst nextjsRouteAnnouncerStyles = {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n top: 0,\n width: '1px',\n // https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe\n whiteSpace: 'nowrap',\n wordWrap: 'normal'\n};\nconst RouteAnnouncer = ()=>{\n _s();\n const { asPath } = (0, _router.useRouter)();\n const [routeAnnouncement, setRouteAnnouncement] = _react.default.useState('');\n // Only announce the path change, but not for the first load because screen\n // reader will do that automatically.\n const previouslyLoadedPath = _react.default.useRef(asPath);\n // Every time the path changes, announce the new pages title following this\n // priority: first the document title (from head), otherwise the first h1, or\n // if none of these exist, then the pathname from the URL. This methodology is\n // inspired by Marcy Suttons accessible client routing user testing. More\n // information can be found here:\n // https://www.gatsbyjs.com/blog/2019-07-11-user-testing-accessible-client-routing/\n _react.default.useEffect({\n \"RouteAnnouncer.useEffect\": ()=>{\n // If the path hasn't change, we do nothing.\n if (previouslyLoadedPath.current === asPath) return;\n previouslyLoadedPath.current = asPath;\n if (document.title) {\n setRouteAnnouncement(document.title);\n } else {\n const pageHeader = document.querySelector('h1');\n var _pageHeader_innerText;\n const content = (_pageHeader_innerText = pageHeader == null ? void 0 : pageHeader.innerText) != null ? _pageHeader_innerText : pageHeader == null ? void 0 : pageHeader.textContent;\n setRouteAnnouncement(content || asPath);\n }\n }\n }[\"RouteAnnouncer.useEffect\"], [\n asPath\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n \"aria-live\": \"assertive\" // Make the announcement immediately.\n ,\n id: \"__next-route-announcer__\",\n role: \"alert\",\n style: nextjsRouteAnnouncerStyles,\n children: routeAnnouncement\n });\n};\n_s(RouteAnnouncer, \"/W0p/lKvDcDf5qahTtmgH0KR5eY=\");\n_c = RouteAnnouncer;\nconst _default = RouteAnnouncer;\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=route-announcer.js.map\nvar _c;\n$RefreshReg$(_c, \"RouteAnnouncer\");\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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JvdXRlLWFubm91bmNlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztJQW1CYUEsY0FBYztlQUFkQTs7SUE2Q2IsT0FBNkI7ZUFBN0I7Ozs7OzRFQWhFa0I7b0NBQ1E7QUFFMUIsTUFBTUMsNkJBQWtEO0lBQ3REQyxRQUFRO0lBQ1JDLE1BQU07SUFDTkMsUUFBUTtJQUNSQyxRQUFRO0lBQ1JDLFVBQVU7SUFDVkMsU0FBUztJQUNUQyxVQUFVO0lBQ1ZDLEtBQUs7SUFDTEMsT0FBTztJQUVQLHdGQUF3RjtJQUN4RkMsWUFBWTtJQUNaQyxVQUFVO0FBQ1o7QUFFTyx1QkFBdUI7O0lBQzVCLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLFFBQUFBLFNBQVM7SUFDNUIsTUFBTSxDQUFDQyxtQkFBbUJDLHFCQUFxQixHQUFHQyxPQUFBQSxPQUFLLENBQUNDLFFBQVEsQ0FBQztJQUVqRSwyRUFBMkU7SUFDM0UscUNBQXFDO0lBQ3JDLE1BQU1DLHVCQUF1QkYsT0FBQUEsT0FBSyxDQUFDRyxNQUFNLENBQUNQO0lBRTFDLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsOEVBQThFO0lBQzlFLDBFQUEwRTtJQUMxRSxpQ0FBaUM7SUFDakMsbUZBQW1GO0lBQ25GSSxPQUFBQSxPQUFLLENBQUNJLFNBQVM7b0NBQ2I7WUFDRSw0Q0FBNEM7WUFDNUMsSUFBSUYscUJBQXFCRyxPQUFPLEtBQUtULFFBQVE7WUFDN0NNLHFCQUFxQkcsT0FBTyxHQUFHVDtZQUUvQixJQUFJVSxTQUFTQyxLQUFLLEVBQUU7Z0JBQ2xCUixxQkFBcUJPLFNBQVNDLEtBQUs7WUFDckMsT0FBTztnQkFDTCxNQUFNQyxhQUFhRixTQUFTRyxhQUFhLENBQUM7b0JBQzFCRDtnQkFBaEIsTUFBTUUsVUFBVUYsQ0FBQUEsd0JBQUFBLGNBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFdBQVlHLFNBQUFBLEtBQVMsT0FBckJILHdCQUF5QkEsY0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsV0FBWUksV0FBVztnQkFFaEViLHFCQUFxQlcsV0FBV2Q7WUFDbEM7UUFDRjttQ0FFQTtRQUFDQTtLQUFPO0lBR1YscUJBQ0UscUJBQUNpQixLQUFBQTtRQUNDQyxhQUFVLFlBQVkscUNBQXFDOztRQUMzREMsSUFBRztRQUNIQyxNQUFLO1FBQ0xDLE9BQU9qQztrQkFFTmM7O0FBR1A7O0tBM0NhZjtNQTZDYixXQUFlQSIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvcm91dGUtYW5ub3VuY2VyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICcuL3JvdXRlcidcblxuY29uc3QgbmV4dGpzUm91dGVBbm5vdW5jZXJTdHlsZXM6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGJvcmRlcjogMCxcbiAgY2xpcDogJ3JlY3QoMCAwIDAgMCknLFxuICBoZWlnaHQ6ICcxcHgnLFxuICBtYXJnaW46ICctMXB4JyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwYWRkaW5nOiAwLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgdG9wOiAwLFxuICB3aWR0aDogJzFweCcsXG5cbiAgLy8gaHR0cHM6Ly9tZWRpdW0uY29tL0BqZXNzZWJlYWNoL2Jld2FyZS1zbXVzaGVkLW9mZi1zY3JlZW4tYWNjZXNzaWJsZS10ZXh0LTU5NTJhNGMyY2JmZVxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgd29yZFdyYXA6ICdub3JtYWwnLFxufVxuXG5leHBvcnQgY29uc3QgUm91dGVBbm5vdW5jZXIgPSAoKSA9PiB7XG4gIGNvbnN0IHsgYXNQYXRoIH0gPSB1c2VSb3V0ZXIoKVxuICBjb25zdCBbcm91dGVBbm5vdW5jZW1lbnQsIHNldFJvdXRlQW5ub3VuY2VtZW50XSA9IFJlYWN0LnVzZVN0YXRlKCcnKVxuXG4gIC8vIE9ubHkgYW5ub3VuY2UgdGhlIHBhdGggY2hhbmdlLCBidXQgbm90IGZvciB0aGUgZmlyc3QgbG9hZCBiZWNhdXNlIHNjcmVlblxuICAvLyByZWFkZXIgd2lsbCBkbyB0aGF0IGF1dG9tYXRpY2FsbHkuXG4gIGNvbnN0IHByZXZpb3VzbHlMb2FkZWRQYXRoID0gUmVhY3QudXNlUmVmKGFzUGF0aClcblxuICAvLyBFdmVyeSB0aW1lIHRoZSBwYXRoIGNoYW5nZXMsIGFubm91bmNlIHRoZSBuZXcgcGFnZeKAmXMgdGl0bGUgZm9sbG93aW5nIHRoaXNcbiAgLy8gcHJpb3JpdHk6IGZpcnN0IHRoZSBkb2N1bWVudCB0aXRsZSAoZnJvbSBoZWFkKSwgb3RoZXJ3aXNlIHRoZSBmaXJzdCBoMSwgb3JcbiAgLy8gaWYgbm9uZSBvZiB0aGVzZSBleGlzdCwgdGhlbiB0aGUgcGF0aG5hbWUgZnJvbSB0aGUgVVJMLiBUaGlzIG1ldGhvZG9sb2d5IGlzXG4gIC8vIGluc3BpcmVkIGJ5IE1hcmN5IFN1dHRvbuKAmXMgYWNjZXNzaWJsZSBjbGllbnQgcm91dGluZyB1c2VyIHRlc3RpbmcuIE1vcmVcbiAgLy8gaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGhlcmU6XG4gIC8vIGh0dHBzOi8vd3d3LmdhdHNieWpzLmNvbS9ibG9nLzIwMTktMDctMTEtdXNlci10ZXN0aW5nLWFjY2Vzc2libGUtY2xpZW50LXJvdXRpbmcvXG4gIFJlYWN0LnVzZUVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICAvLyBJZiB0aGUgcGF0aCBoYXNuJ3QgY2hhbmdlLCB3ZSBkbyBub3RoaW5nLlxuICAgICAgaWYgKHByZXZpb3VzbHlMb2FkZWRQYXRoLmN1cnJlbnQgPT09IGFzUGF0aCkgcmV0dXJuXG4gICAgICBwcmV2aW91c2x5TG9hZGVkUGF0aC5jdXJyZW50ID0gYXNQYXRoXG5cbiAgICAgIGlmIChkb2N1bWVudC50aXRsZSkge1xuICAgICAgICBzZXRSb3V0ZUFubm91bmNlbWVudChkb2N1bWVudC50aXRsZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhZ2VIZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoMScpXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBwYWdlSGVhZGVyPy5pbm5lclRleHQgPz8gcGFnZUhlYWRlcj8udGV4dENvbnRlbnRcblxuICAgICAgICBzZXRSb3V0ZUFubm91bmNlbWVudChjb250ZW50IHx8IGFzUGF0aClcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIFRPRE86IHN3aXRjaCB0byBwYXRobmFtZSArIHF1ZXJ5IG9iamVjdCBvZiBkeW5hbWljIHJvdXRlIHJlcXVpcmVtZW50c1xuICAgIFthc1BhdGhdXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxwXG4gICAgICBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIiAvLyBNYWtlIHRoZSBhbm5vdW5jZW1lbnQgaW1tZWRpYXRlbHkuXG4gICAgICBpZD1cIl9fbmV4dC1yb3V0ZS1hbm5vdW5jZXJfX1wiXG4gICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgc3R5bGU9e25leHRqc1JvdXRlQW5ub3VuY2VyU3R5bGVzfVxuICAgID5cbiAgICAgIHtyb3V0ZUFubm91bmNlbWVudH1cbiAgICA8L3A+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGVBbm5vdW5jZXJcbiJdLCJuYW1lcyI6WyJSb3V0ZUFubm91bmNlciIsIm5leHRqc1JvdXRlQW5ub3VuY2VyU3R5bGVzIiwiYm9yZGVyIiwiY2xpcCIsImhlaWdodCIsIm1hcmdpbiIsIm92ZXJmbG93IiwicGFkZGluZyIsInBvc2l0aW9uIiwidG9wIiwid2lkdGgiLCJ3aGl0ZVNwYWNlIiwid29yZFdyYXAiLCJhc1BhdGgiLCJ1c2VSb3V0ZXIiLCJyb3V0ZUFubm91bmNlbWVudCIsInNldFJvdXRlQW5ub3VuY2VtZW50IiwiUmVhY3QiLCJ1c2VTdGF0ZSIsInByZXZpb3VzbHlMb2FkZWRQYXRoIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiY3VycmVudCIsImRvY3VtZW50IiwidGl0bGUiLCJwYWdlSGVhZGVyIiwicXVlcnlTZWxlY3RvciIsImNvbnRlbnQiLCJpbm5lclRleHQiLCJ0ZXh0Q29udGVudCIsInAiLCJhcmlhLWxpdmUiLCJpZCIsInJvbGUiLCJzdHlsZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/route-announcer.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/route-loader.js":
/*!**********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/route-loader.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 createRouteLoader: function() {\n return createRouteLoader;\n },\n getClientBuildManifest: function() {\n return getClientBuildManifest;\n },\n isAssetError: function() {\n return isAssetError;\n },\n markAssetError: function() {\n return markAssetError;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _getassetpathfromroute = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/utils/get-asset-path-from-route */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\"));\nconst _trustedtypes = __webpack_require__(/*! ./trusted-types */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/trusted-types.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/request-idle-callback.js\");\nconst _deploymentid = __webpack_require__(/*! ../build/deployment-id */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/deployment-id.js\");\nconst _encodeuripath = __webpack_require__(/*! ../shared/lib/encode-uri-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/encode-uri-path.js\");\n// 3.8s was arbitrarily chosen as it's what https://web.dev/interactive\n// considers as \"Good\" time-to-interactive. We must assume something went\n// wrong beyond this point, and then fall-back to a full page transition to\n// show the user something of value.\nconst MS_MAX_IDLE_DELAY = 3800;\nfunction withFuture(key, map, generator) {\n let entry = map.get(key);\n if (entry) {\n if ('future' in entry) {\n return entry.future;\n }\n return Promise.resolve(entry);\n }\n let resolver;\n const prom = new Promise((resolve)=>{\n resolver = resolve;\n });\n map.set(key, {\n resolve: resolver,\n future: prom\n });\n return generator ? generator().then((value)=>{\n resolver(value);\n return value;\n }).catch((err)=>{\n map.delete(key);\n throw err;\n }) : prom;\n}\nconst ASSET_LOAD_ERROR = Symbol('ASSET_LOAD_ERROR');\nfunction markAssetError(err) {\n return Object.defineProperty(err, ASSET_LOAD_ERROR, {});\n}\nfunction isAssetError(err) {\n return err && ASSET_LOAD_ERROR in err;\n}\nfunction hasPrefetch(link) {\n try {\n link = document.createElement('link');\n return(// with relList.support\n !!window.MSInputMethodContext && !!document.documentMode || link.relList.supports('prefetch'));\n } catch (e) {\n return false;\n }\n}\nconst canPrefetch = hasPrefetch();\nconst getAssetQueryString = ()=>{\n return (0, _deploymentid.getDeploymentIdQueryOrEmptyString)();\n};\nfunction prefetchViaDom(href, as, link) {\n return new Promise((resolve, reject)=>{\n const selector = '\\n link[rel=\"prefetch\"][href^=\"' + href + '\"],\\n link[rel=\"preload\"][href^=\"' + href + '\"],\\n script[src^=\"' + href + '\"]';\n if (document.querySelector(selector)) {\n return resolve();\n }\n link = document.createElement('link');\n // The order of property assignment here is intentional:\n if (as) link.as = as;\n link.rel = \"prefetch\";\n link.crossOrigin = undefined;\n link.onload = resolve;\n link.onerror = ()=>reject(markAssetError(Object.defineProperty(new Error(\"Failed to prefetch: \" + href), \"__NEXT_ERROR_CODE\", {\n value: \"E268\",\n enumerable: false,\n configurable: true\n })));\n // `href` should always be last:\n link.href = href;\n document.head.appendChild(link);\n });\n}\nfunction appendScript(src, script) {\n return new Promise((resolve, reject)=>{\n script = document.createElement('script');\n // The order of property assignment here is intentional.\n // 1. Setup success/failure hooks in case the browser synchronously\n // executes when `src` is set.\n script.onload = resolve;\n script.onerror = ()=>reject(markAssetError(Object.defineProperty(new Error(\"Failed to load script: \" + src), \"__NEXT_ERROR_CODE\", {\n value: \"E74\",\n enumerable: false,\n configurable: true\n })));\n // 2. Configure the cross-origin attribute before setting `src` in case the\n // browser begins to fetch.\n script.crossOrigin = undefined;\n // 3. Finally, set the source and inject into the DOM in case the child\n // must be appended for fetching to start.\n script.src = src;\n document.body.appendChild(script);\n });\n}\n// We wait for pages to be built in dev before we start the route transition\n// timeout to prevent an un-necessary hard navigation in development.\nlet devBuildPromise;\n// Resolve a promise that times out after given amount of milliseconds.\nfunction resolvePromiseWithTimeout(p, ms, err) {\n return new Promise((resolve, reject)=>{\n let cancelled = false;\n p.then((r)=>{\n // Resolved, cancel the timeout\n cancelled = true;\n resolve(r);\n }).catch(reject);\n // We wrap these checks separately for better dead-code elimination in\n // production bundles.\n if (true) {\n ;\n (devBuildPromise || Promise.resolve()).then(()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>setTimeout(()=>{\n if (!cancelled) {\n reject(err);\n }\n }, ms));\n });\n }\n if (false) {}\n });\n}\nfunction getClientBuildManifest() {\n if (self.__BUILD_MANIFEST) {\n return Promise.resolve(self.__BUILD_MANIFEST);\n }\n const onBuildManifest = new Promise((resolve)=>{\n // Mandatory because this is not concurrent safe:\n const cb = self.__BUILD_MANIFEST_CB;\n self.__BUILD_MANIFEST_CB = ()=>{\n resolve(self.__BUILD_MANIFEST);\n cb && cb();\n };\n });\n return resolvePromiseWithTimeout(onBuildManifest, MS_MAX_IDLE_DELAY, markAssetError(Object.defineProperty(new Error('Failed to load client build manifest'), \"__NEXT_ERROR_CODE\", {\n value: \"E273\",\n enumerable: false,\n configurable: true\n })));\n}\nfunction getFilesForRoute(assetPrefix, route) {\n if (true) {\n const scriptUrl = assetPrefix + '/_next/static/chunks/pages' + (0, _encodeuripath.encodeURIPath)((0, _getassetpathfromroute.default)(route, '.js')) + getAssetQueryString();\n return Promise.resolve({\n scripts: [\n (0, _trustedtypes.__unsafeCreateTrustedScriptURL)(scriptUrl)\n ],\n // Styles are handled by `style-loader` in development:\n css: []\n });\n }\n return getClientBuildManifest().then((manifest)=>{\n if (!(route in manifest)) {\n throw markAssetError(Object.defineProperty(new Error(\"Failed to lookup route: \" + route), \"__NEXT_ERROR_CODE\", {\n value: \"E446\",\n enumerable: false,\n configurable: true\n }));\n }\n const allFiles = manifest[route].map((entry)=>assetPrefix + '/_next/' + (0, _encodeuripath.encodeURIPath)(entry));\n return {\n scripts: allFiles.filter((v)=>v.endsWith('.js')).map((v)=>(0, _trustedtypes.__unsafeCreateTrustedScriptURL)(v) + getAssetQueryString()),\n css: allFiles.filter((v)=>v.endsWith('.css')).map((v)=>v + getAssetQueryString())\n };\n });\n}\nfunction createRouteLoader(assetPrefix) {\n const entrypoints = new Map();\n const loadedScripts = new Map();\n const styleSheets = new Map();\n const routes = new Map();\n function maybeExecuteScript(src) {\n // With HMR we might need to \"reload\" scripts when they are\n // disposed and readded. Executing scripts twice has no functional\n // differences\n if (false) {} else {\n return appendScript(src);\n }\n }\n function fetchStyleSheet(href) {\n let prom = styleSheets.get(href);\n if (prom) {\n return prom;\n }\n styleSheets.set(href, prom = fetch(href, {\n credentials: 'same-origin'\n }).then((res)=>{\n if (!res.ok) {\n throw Object.defineProperty(new Error(\"Failed to load stylesheet: \" + href), \"__NEXT_ERROR_CODE\", {\n value: \"E189\",\n enumerable: false,\n configurable: true\n });\n }\n return res.text().then((text)=>({\n href: href,\n content: text\n }));\n }).catch((err)=>{\n throw markAssetError(err);\n }));\n return prom;\n }\n return {\n whenEntrypoint (route) {\n return withFuture(route, entrypoints);\n },\n onEntrypoint (route, execute) {\n ;\n (execute ? Promise.resolve().then(()=>execute()).then((exports1)=>({\n component: exports1 && exports1.default || exports1,\n exports: exports1\n }), (err)=>({\n error: err\n })) : Promise.resolve(undefined)).then((input)=>{\n const old = entrypoints.get(route);\n if (old && 'resolve' in old) {\n if (input) {\n entrypoints.set(route, input);\n old.resolve(input);\n }\n } else {\n if (input) {\n entrypoints.set(route, input);\n } else {\n entrypoints.delete(route);\n }\n // when this entrypoint has been resolved before\n // the route is outdated and we want to invalidate\n // this cache entry\n routes.delete(route);\n }\n });\n },\n loadRoute (route, prefetch) {\n return withFuture(route, routes, ()=>{\n let devBuildPromiseResolve;\n if (true) {\n devBuildPromise = new Promise((resolve)=>{\n devBuildPromiseResolve = resolve;\n });\n }\n return resolvePromiseWithTimeout(getFilesForRoute(assetPrefix, route).then((param)=>{\n let { scripts, css } = param;\n return Promise.all([\n entrypoints.has(route) ? [] : Promise.all(scripts.map(maybeExecuteScript)),\n Promise.all(css.map(fetchStyleSheet))\n ]);\n }).then((res)=>{\n return this.whenEntrypoint(route).then((entrypoint)=>({\n entrypoint,\n styles: res[1]\n }));\n }), MS_MAX_IDLE_DELAY, markAssetError(Object.defineProperty(new Error(\"Route did not complete loading: \" + route), \"__NEXT_ERROR_CODE\", {\n value: \"E12\",\n enumerable: false,\n configurable: true\n }))).then((param)=>{\n let { entrypoint, styles } = param;\n const res = Object.assign({\n styles: styles\n }, entrypoint);\n return 'error' in entrypoint ? entrypoint : res;\n }).catch((err)=>{\n if (prefetch) {\n // we don't want to cache errors during prefetch\n throw err;\n }\n return {\n error: err\n };\n }).finally(()=>devBuildPromiseResolve == null ? void 0 : devBuildPromiseResolve());\n });\n },\n prefetch (route) {\n // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118\n // License: Apache 2.0\n let cn;\n if (cn = navigator.connection) {\n // Don't prefetch if using 2G or if Save-Data is enabled.\n if (cn.saveData || /2g/.test(cn.effectiveType)) return Promise.resolve();\n }\n return getFilesForRoute(assetPrefix, route).then((output)=>Promise.all(canPrefetch ? output.scripts.map((script)=>prefetchViaDom(script.toString(), 'script')) : [])).then(()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>this.loadRoute(route, true).catch(()=>{}));\n }).catch(()=>{});\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=route-loader.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JvdXRlLWxvYWRlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFpU2dCQSxpQkFBaUI7ZUFBakJBOztJQTNEQUMsc0JBQXNCO2VBQXRCQTs7SUFuSUFDLFlBQVk7ZUFBWkE7O0lBSkFDLGNBQWM7ZUFBZEE7Ozs7NEZBN0ZrQjswQ0FDYTtpREFDWDswQ0FDYzsyQ0FDcEI7QUFFOUIsdUVBQXVFO0FBQ3ZFLHlFQUF5RTtBQUN6RSwyRUFBMkU7QUFDM0Usb0NBQW9DO0FBQ3BDLE1BQU1DLG9CQUFvQjtBQTRDMUIsU0FBU0MsV0FDUEMsR0FBVyxFQUNYQyxHQUErQixFQUMvQkMsU0FBNEI7SUFFNUIsSUFBSUMsUUFBUUYsSUFBSUcsR0FBRyxDQUFDSjtJQUNwQixJQUFJRyxPQUFPO1FBQ1QsSUFBSSxZQUFZQSxPQUFPO1lBQ3JCLE9BQU9BLE1BQU1FLE1BQU07UUFDckI7UUFDQSxPQUFPQyxRQUFRQyxPQUFPLENBQUNKO0lBQ3pCO0lBQ0EsSUFBSUs7SUFDSixNQUFNQyxPQUFtQixJQUFJSCxRQUFXLENBQUNDO1FBQ3ZDQyxXQUFXRDtJQUNiO0lBQ0FOLElBQUlTLEdBQUcsQ0FBQ1YsS0FBSztRQUFFTyxTQUFTQztRQUFXSCxRQUFRSTtJQUFLO0lBQ2hELE9BQU9QLFlBQ0hBLFlBQ0dTLElBQUksQ0FBQyxDQUFDQztRQUNMSixTQUFTSTtRQUNULE9BQU9BO0lBQ1QsR0FDQ0MsS0FBSyxDQUFDLENBQUNDO1FBQ05iLElBQUljLE1BQU0sQ0FBQ2Y7UUFDWCxNQUFNYztJQUNSLEtBQ0ZMO0FBQ047QUFTQSxNQUFNTyxtQkFBbUJDLE9BQU87QUFFekIsU0FBU3BCLGVBQWVpQixHQUFVO0lBQ3ZDLE9BQU9JLE9BQU9DLGNBQWMsQ0FBQ0ws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QUFJNkM7WUFDSixJQUFLQSxLQUFNQyxVQUFrQkMsVUFBVSxFQUFHO2dCQUN4Qyx5REFBeUQ7Z0JBQ3pELElBQUlGLEdBQUdHLFFBQVEsSUFBSSxLQUFLQyxJQUFJLENBQUNKLEdBQUdLLGFBQWEsR0FBRyxPQUFPaEgsUUFBUUMsT0FBTztZQUN4RTtZQUNBLE9BQU8yRCxpQkFBaUJDLGFBQWFDLE9BQ2xDekQsSUFBSSxDQUFDLENBQUM0RyxTQUNMakgsUUFBUXFHLEdBQUcsQ0FDVDlFLGNBQ0kwRixPQUFPL0MsT0FBTyxDQUFDdkUsR0FBRyxDQUFDLENBQUNpRCxTQUNsQmxCLGVBQWVrQixPQUFPb0MsUUFBUSxJQUFJLGFBRXBDLEVBQUUsR0FHVDNFLElBQUksQ0FBQztnQkFDSmdELENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0IsSUFBTSxJQUFJLENBQUM2QyxTQUFTLENBQUNwQyxPQUFPLE1BQU12RCxLQUFLLENBQUMsS0FBTztZQUNyRSxHQUNDQSxLQUFLLENBQ0osS0FDTztRQUViO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvcm91dGUtbG9hZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlTWF0Y2hlciB9IGZyb20gJy4uL2J1aWxkL2FuYWx5c2lzL2dldC1wYWdlLXN0YXRpYy1pbmZvJ1xuaW1wb3J0IGdldEFzc2V0UGF0aEZyb21Sb3V0ZSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9nZXQtYXNzZXQtcGF0aC1mcm9tLXJvdXRlJ1xuaW1wb3J0IHsgX191bnNhZmVDcmVhdGVUcnVzdGVkU2NyaXB0VVJMIH0gZnJvbSAnLi90cnVzdGVkLXR5cGVzJ1xuaW1wb3J0IHsgcmVxdWVzdElkbGVDYWxsYmFjayB9IGZyb20gJy4vcmVxdWVzdC1pZGxlLWNhbGxiYWNrJ1xuaW1wb3J0IHsgZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nIH0gZnJvbSAnLi4vYnVpbGQvZGVwbG95bWVudC1pZCdcbmltcG9ydCB7IGVuY29kZVVSSVBhdGggfSBmcm9tICcuLi9zaGFyZWQvbGliL2VuY29kZS11cmktcGF0aCdcblxuLy8gMy44cyB3YXMgYXJiaXRyYXJpbHkgY2hvc2VuIGFzIGl0J3Mgd2hhdCBodHRwczovL3dlYi5kZXYvaW50ZXJhY3RpdmVcbi8vIGNvbnNpZGVycyBhcyBcIkdvb2RcIiB0aW1lLXRvLWludGVyYWN0aXZlLiBXZSBtdXN0IGFzc3VtZSBzb21ldGhpbmcgd2VudFxuLy8gd3JvbmcgYmV5b25kIHRoaXMgcG9pbnQsIGFuZCB0aGVuIGZhbGwtYmFjayB0byBhIGZ1bGwgcGFnZSB0cmFuc2l0aW9uIHRvXG4vLyBzaG93IHRoZSB1c2VyIHNvbWV0aGluZyBvZiB2YWx1ZS5cbmNvbnN0IE1TX01BWF9JRExFX0RFTEFZID0gMzgwMFxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fQlVJTERfTUFOSUZFU1Q/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT5cbiAgICBfX0JVSUxEX01BTklGRVNUX0NCPzogRnVuY3Rpb25cbiAgICBfX01JRERMRVdBUkVfTUFUQ0hFUlM/OiBNaWRkbGV3YXJlTWF0Y2hlcltdXG4gICAgX19NSURETEVXQVJFX01BTklGRVNUX0NCPzogRnVuY3Rpb25cbiAgICBfX1JFQUNUX0xPQURBQkxFX01BTklGRVNUPzogYW55XG4gICAgX19EWU5BTUlDX0NTU19NQU5JRkVTVD86IGFueVxuICAgIF9fUlNDX01BTklGRVNUPzogYW55XG4gICAgX19SU0NfU0VSVkVSX01BTklGRVNUPzogYW55XG4gICAgX19ORVhUX0ZPTlRfTUFOSUZFU1Q/OiBhbnlcbiAgICBfX1NVQlJFU09VUkNFX0lOVEVHUklUWV9NQU5JRkVTVD86IHN0cmluZ1xuICAgIF9fSU5URVJDRVBUSU9OX1JPVVRFX1JFV1JJVEVfTUFOSUZFU1Q/OiBzdHJpbmdcbiAgfVxufVxuXG5pbnRlcmZhY2UgTG9hZGVkRW50cnlwb2ludFN1Y2Nlc3Mge1xuICBjb21wb25lbnQ6IENvbXBvbmVudFR5cGVcbiAgZXhwb3J0czogYW55XG59XG5pbnRlcmZhY2UgTG9hZGVkRW50cnlwb2ludEZhaWx1cmUge1xuICBlcnJvcjogdW5rbm93blxufVxudHlwZSBSb3V0ZUVudHJ5cG9pbnQgPSBMb2FkZWRFbnRyeXBvaW50U3VjY2VzcyB8IExvYWRlZEVudHJ5cG9pbnRGYWlsdXJlXG5cbmludGVyZmFjZSBSb3V0ZVN0eWxlU2hlZXQge1xuICBocmVmOiBzdHJpbmdcbiAgY29udGVudDogc3RyaW5nXG59XG5cbmludGVyZmFjZSBMb2FkZWRSb3V0ZVN1Y2Nlc3MgZXh0ZW5kcyBMb2FkZWRFbnRyeXBvaW50U3VjY2VzcyB7XG4gIHN0eWxlczogUm91dGVTdHlsZVNoZWV0W11cbn1cbmludGVyZmFjZSBMb2FkZWRSb3V0ZUZhaWx1cmUge1xuICBlcnJvcjogdW5rbm93blxufVxudHlwZSBSb3V0ZUxvYWRlckVudHJ5ID0gTG9hZGVkUm91dGVTdWNjZXNzIHwgTG9hZGVkUm91dGVGYWlsdXJlXG5cbmludGVyZmFjZSBGdXR1cmU8Vj4ge1xuICByZXNvbHZlOiAoZW50cnlwb2ludDogVikgPT4gdm9pZFxuICBmdXR1cmU6IFByb21pc2U8Vj5cbn1cbmZ1bmN0aW9uIHdpdGhGdXR1cmU8VCBleHRlbmRzIG9iamVjdD4oXG4gIGtleTogc3RyaW5nLFxuICBtYXA6IE1hcDxzdHJpbmcsIEZ1dHVyZTxUPiB8IFQ+LFxuICBnZW5lcmF0b3I/OiAoKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgbGV0IGVudHJ5ID0gbWFwLmdldChrZXkpXG4gIGlmIChlbnRyeSkge1xuICAgIGlmICgnZnV0dXJlJyBpbiBlbnRyeSkge1xuICAgICAgcmV0dXJuIGVudHJ5LmZ1dHVyZVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVudHJ5KVxuICB9XG4gIGxldCByZXNvbHZlcjogKGVudHJ5cG9pbnQ6IFQpID0+IHZvaWRcbiAgY29uc3QgcHJvbTogUHJvbWlzZTxUPiA9IG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlKSA9PiB7XG4gICAgcmVzb2x2ZXIgPSByZXNvbHZlXG4gIH0pXG4gIG1hcC5zZXQoa2V5LCB7IHJlc29sdmU6IHJlc29sdmVyISwgZnV0dXJlOiBwcm9tIH0pXG4gIHJldHVybiBnZW5lcmF0b3JcbiAgICA/IGdlbmVyYXRvcigpXG4gICAgICAgIC50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHJlc29sdmVyKHZhbHVlKVxuICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIG1hcC5kZWxldGUoa2V5KVxuICAgICAgICAgIHRocm93IGVyclxuICAgICAgICB9KVxuICAgIDogcHJvbVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlTG9hZGVyIHtcbiAgd2hlbkVudHJ5cG9pbnQocm91dGU6IHN0cmluZyk6IFByb21pc2U8Um91dGVFbnRyeXBvaW50PlxuICBvbkVudHJ5cG9pbnQocm91dGU6IHN0cmluZywgZXhlY3V0ZTogKCkgPT4gdW5rbm93bik6IHZvaWRcbiAgbG9hZFJvdXRlKHJvdXRlOiBzdHJpbmcsIHByZWZldGNoPzogYm9vbGVhbik6IFByb21pc2U8Um91dGVMb2FkZXJFbnRyeT5cbiAgcHJlZmV0Y2gocm91dGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD5cbn1cblxuY29uc3QgQVNTRVRfTE9BRF9FUlJPUiA9IFN5bWJvbCgnQVNTRVRfTE9BRF9FUlJPUicpXG4vLyBUT0RPOiB1bmV4cG9ydFxuZXhwb3J0IGZ1bmN0aW9uIG1hcmtBc3NldEVycm9yKGVycjogRXJyb3IpOiBFcnJvciB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyLCBBU1NFVF9MT0FEX0VSUk9SLCB7fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXNzZXRFcnJvcihlcnI/OiBFcnJvcik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gZXJyICYmIEFTU0VUX0xPQURfRVJST1IgaW4gZXJyXG59XG5cbmZ1bmN0aW9uIGhhc1ByZWZldGNoKGxpbms/OiBIVE1MTGlua0VsZW1lbnQpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpXG4gICAgcmV0dXJuIChcbiAgICAgIC8vIGRldGVjdCBJRTExIHNpbmNlIGl0IHN1cHBvcnRzIHByZWZldGNoIGJ1dCBpc24ndCBkZXRlY3RlZFxuICAgICAgLy8gd2l0aCByZWxMaXN0LnN1cHBvcnRcbiAgICAgICghIXdpbmRvdy5NU0lucHV0TWV0aG9kQ29udGV4dCAmJiAhIShkb2N1bWVudCBhcyBhbnkpLmRvY3VtZW50TW9kZSkgfHxcbiAgICAgIGxpbmsucmVsTGlzdC5zdXBwb3J0cygncHJlZmV0Y2gnKVxuICAgIClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuY29uc3QgY2FuUHJlZmV0Y2g6IGJvb2xlYW4gPSBoYXNQcmVmZXRjaCgpXG5cbmNvbnN0IGdldEFzc2V0UXVlcnlTdHJpbmcgPSAoKSA9PiB7XG4gIHJldHVybiBnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmcoKVxufVxuXG5mdW5jdGlvbiBwcmVmZXRjaFZpYURvbShcbiAgaHJlZjogc3RyaW5nLFxuICBhczogc3RyaW5nLFxuICBsaW5rPzogSFRNTExpbmtFbGVtZW50XG4pOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gYFxuICAgICAgbGlua1tyZWw9XCJwcmVmZXRjaFwiXVtocmVmXj1cIiR7aHJlZn1cIl0sXG4gICAgICBsaW5rW3JlbD1cInByZWxvYWRcIl1baHJlZl49XCIke2hyZWZ9XCJdLFxuICAgICAgc2NyaXB0W3NyY149XCIke2hyZWZ9XCJdYFxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSkge1xuICAgICAgcmV0dXJuIHJlc29sdmUoKVxuICAgIH1cblxuICAgIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJylcblxuICAgIC8vIFRoZSBvcmRlciBvZiBwcm9wZXJ0eSBhc3NpZ25tZW50IGhlcmUgaXMgaW50ZW50aW9uYWw6XG4gICAgaWYgKGFzKSBsaW5rIS5hcyA9IGFzXG4gICAgbGluayEucmVsID0gYHByZWZldGNoYFxuICAgIGxpbmshLmNyb3NzT3JpZ2luID0gcHJvY2Vzcy5lbnYuX19ORVhUX0NST1NTX09SSUdJTiFcbiAgICBsaW5rIS5vbmxvYWQgPSByZXNvbHZlIGFzIGFueVxuICAgIGxpbmshLm9uZXJyb3IgPSAoKSA9PlxuICAgICAgcmVqZWN0KG1hcmtBc3NldEVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHByZWZldGNoOiAke2hyZWZ9YCkpKVxuXG4gICAgLy8gYGhyZWZgIHNob3VsZCBhbHdheXMgYmUgbGFzdDpcbiAgICBsaW5rIS5ocmVmID0gaHJlZlxuXG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKVxuICB9KVxufVxuXG5mdW5jdGlvbiBhcHBlbmRTY3JpcHQoXG4gIHNyYzogVHJ1c3RlZFNjcmlwdFVSTCB8IHN0cmluZyxcbiAgc2NyaXB0PzogSFRNTFNjcmlwdEVsZW1lbnRcbik6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpXG5cbiAgICAvLyBUaGUgb3JkZXIgb2YgcHJvcGVydHkgYXNzaWdubWVudCBoZXJlIGlzIGludGVudGlvbmFsLlxuICAgIC8vIDEuIFNldHVwIHN1Y2Nlc3MvZmFpbHVyZSBob29rcyBpbiBjYXNlIHRoZSBicm93c2VyIHN5bmNocm9ub3VzbHlcbiAgICAvLyAgICBleGVjdXRlcyB3aGVuIGBzcmNgIGlzIHNldC5cbiAgICBzY3JpcHQub25sb2FkID0gcmVzb2x2ZVxuICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT5cbiAgICAgIHJlamVjdChtYXJrQXNzZXRFcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHNjcmlwdDogJHtzcmN9YCkpKVxuXG4gICAgLy8gMi4gQ29uZmlndXJlIHRoZSBjcm9zcy1vcmlnaW4gYXR0cmlidXRlIGJlZm9yZSBzZXR0aW5nIGBzcmNgIGluIGNhc2UgdGhlXG4gICAgLy8gICAgYnJvd3NlciBiZWdpbnMgdG8gZmV0Y2guXG4gICAgc2NyaXB0LmNyb3NzT3JpZ2luID0gcHJvY2Vzcy5lbnYuX19ORVhUX0NST1NTX09SSUdJTiFcblxuICAgIC8vIDMuIEZpbmFsbHksIHNldCB0aGUgc291cmNlIGFuZCBpbmplY3QgaW50byB0aGUgRE9NIGluIGNhc2UgdGhlIGNoaWxkXG4gICAgLy8gICAgbXVzdCBiZSBhcHBlbmRlZCBmb3IgZmV0Y2hpbmcgdG8gc3RhcnQuXG4gICAgc2NyaXB0LnNyYyA9IHNyYyBhcyBzdHJpbmdcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdClcbiAgfSlcbn1cblxuLy8gV2Ugd2FpdCBmb3IgcGFnZXMgdG8gYmUgYnVpbHQgaW4gZGV2IGJlZm9yZSB3ZSBzdGFydCB0aGUgcm91dGUgdHJhbnNpdGlvblxuLy8gdGltZW91dCB0byBwcmV2ZW50IGFuIHVuLW5lY2Vzc2FyeSBoYXJkIG5hdmlnYXRpb24gaW4gZGV2ZWxvcG1lbnQuXG5sZXQgZGV2QnVpbGRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkXG5cbi8vIFJlc29sdmUgYSBwcm9taXNlIHRoYXQgdGltZXMgb3V0IGFmdGVyIGdpdmVuIGFtb3VudCBvZiBtaWxsaXNlY29uZHMuXG5mdW5jdGlvbiByZXNvbHZlUHJvbWlzZVdpdGhUaW1lb3V0PFQ+KFxuICBwOiBQcm9taXNlPFQ+LFxuICBtczogbnVtYmVyLFxuICBlcnI6IEVycm9yXG4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2VcblxuICAgIHAudGhlbigocikgPT4ge1xuICAgICAgLy8gUmVzb2x2ZWQsIGNhbmNlbCB0aGUgdGltZW91dFxuICAgICAgY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgcmVzb2x2ZShyKVxuICAgIH0pLmNhdGNoKHJlamVjdClcblxuICAgIC8vIFdlIHdyYXAgdGhlc2UgY2hlY2tzIHNlcGFyYXRlbHkgZm9yIGJldHRlciBkZWFkLWNvZGUgZWxpbWluYXRpb24gaW5cbiAgICAvLyBwcm9kdWN0aW9uIGJ1bmRsZXMuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICA7KGRldkJ1aWxkUHJvbWlzZSB8fCBQcm9taXNlLnJlc29sdmUoKSkudGhlbigoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgbXMpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICByZXF1ZXN0SWRsZUNhbGxiYWNrKCgpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgbXMpXG4gICAgICApXG4gICAgfVxuICB9KVxufVxuXG4vLyBUT0RPOiBzdG9wIGV4cG9ydGluZyBvciBjYWNoZSB0aGUgZmFpbHVyZVxuLy8gSXQnZCBiZSBiZXN0IHRvIHN0b3AgZXhwb3J0aW5nIHRoaXMuIEl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiBXZSdyZVxuLy8gb25seSBleHBvcnRpbmcgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGBwYWdlLWxvYWRlcmAuXG4vLyBPbmx5IGNhY2hlIHRoaXMgcmVzcG9uc2UgYXMgYSBsYXN0IHJlc29ydCBpZiB3ZSBjYW5ub3QgZWxpbWluYXRlIGFsbCBvdGhlclxuLy8gY29kZSBicmFuY2hlcyB0aGF0IHVzZSB0aGUgQnVpbGQgTWFuaWZlc3QgQ2FsbGJhY2sgYW5kIHB1c2ggdGhlbSB0aHJvdWdoXG4vLyB0aGUgUm91dGUgTG9hZGVyIGludGVyZmFjZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRCdWlsZE1hbmlmZXN0KCkge1xuICBpZiAoc2VsZi5fX0JVSUxEX01BTklGRVNUKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzZWxmLl9fQlVJTERfTUFOSUZFU1QpXG4gIH1cblxuICBjb25zdCBvbkJ1aWxkTWFuaWZlc3QgPSBuZXcgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4+KChyZXNvbHZlKSA9PiB7XG4gICAgLy8gTWFuZGF0b3J5IGJlY2F1c2UgdGhpcyBpcyBub3QgY29uY3VycmVudCBzYWZlOlxuICAgIGNvbnN0IGNiID0gc2VsZi5fX0JVSUxEX01BTklGRVNUX0NCXG4gICAgc2VsZi5fX0JVSUxEX01BTklGRVNUX0NCID0gKCkgPT4ge1xuICAgICAgcmVzb2x2ZShzZWxmLl9fQlVJTERfTUFOSUZFU1QhKVxuICAgICAgY2IgJiYgY2IoKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gcmVzb2x2ZVByb21pc2VXaXRoVGltZW91dChcbiAgICBvbkJ1aWxkTWFuaWZlc3QsXG4gICAgTVNfTUFYX0lETEVfREVMQVksXG4gICAgbWFya0Fzc2V0RXJyb3IobmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBjbGllbnQgYnVpbGQgbWFuaWZlc3QnKSlcbiAgKVxufVxuXG5pbnRlcmZhY2UgUm91dGVGaWxlcyB7XG4gIHNjcmlwdHM6IChUcnVzdGVkU2NyaXB0VVJMIHwgc3RyaW5nKVtdXG4gIGNzczogc3RyaW5nW11cbn1cbmZ1bmN0aW9uIGdldEZpbGVzRm9yUm91dGUoXG4gIGFzc2V0UHJlZml4OiBzdHJpbmcsXG4gIHJvdXRlOiBzdHJpbmdcbik6IFByb21pc2U8Um91dGVGaWxlcz4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICBjb25zdCBzY3JpcHRVcmwgPVxuICAgICAgYXNzZXRQcmVmaXggK1xuICAgICAgJy9fbmV4dC9zdGF0aWMvY2h1bmtzL3BhZ2VzJyArXG4gICAgICBlbmNvZGVVUklQYXRoKGdldEFzc2V0UGF0aEZyb21Sb3V0ZShyb3V0ZSwgJy5qcycpKSArXG4gICAgICBnZXRBc3NldFF1ZXJ5U3RyaW5nKClcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHNjcmlwdHM6IFtfX3Vuc2FmZUNyZWF0ZVRydXN0ZWRTY3JpcHRVUkwoc2NyaXB0VXJsKV0sXG4gICAgICAvLyBTdHlsZXMgYXJlIGhhbmRsZWQgYnkgYHN0eWxlLWxvYWRlcmAgaW4gZGV2ZWxvcG1lbnQ6XG4gICAgICBjc3M6IFtdLFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGdldENsaWVudEJ1aWxkTWFuaWZlc3QoKS50aGVuKChtYW5pZmVzdCkgPT4ge1xuICAgIGlmICghKHJvdXRlIGluIG1hbmlmZXN0KSkge1xuICAgICAgdGhyb3cgbWFya0Fzc2V0RXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gbG9va3VwIHJvdXRlOiAke3JvdXRlfWApKVxuICAgIH1cbiAgICBjb25zdCBhbGxGaWxlcyA9IG1hbmlmZXN0W3JvdXRlXS5tYXAoXG4gICAgICAoZW50cnkpID0+IGFzc2V0UHJlZml4ICsgJy9fbmV4dC8nICsgZW5jb2RlVVJJUGF0aChlbnRyeSlcbiAgICApXG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcmlwdHM6IGFsbEZpbGVzXG4gICAgICAgIC5maWx0ZXIoKHYpID0+IHYuZW5kc1dpdGgoJy5qcycpKVxuICAgICAgICAubWFwKCh2KSA9PiBfX3Vuc2FmZUNyZWF0ZVRydXN0ZWRTY3JpcHRVUkwodikgKyBnZXRBc3NldFF1ZXJ5U3RyaW5nKCkpLFxuICAgICAgY3NzOiBhbGxGaWxlc1xuICAgICAgICAuZmlsdGVyKCh2KSA9PiB2LmVuZHNXaXRoKCcuY3NzJykpXG4gICAgICAgIC5tYXAoKHYpID0+IHYgKyBnZXRBc3NldFF1ZXJ5U3RyaW5nKCkpLFxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlTG9hZGVyKGFzc2V0UHJlZml4OiBzdHJpbmcpOiBSb3V0ZUxvYWRlciB7XG4gIGNvbnN0IGVudHJ5cG9pbnRzOiBNYXA8c3RyaW5nLCBGdXR1cmU8Um91dGVFbnRyeXBvaW50PiB8IFJvdXRlRW50cnlwb2ludD4gPVxuICAgIG5ldyBNYXAoKVxuICBjb25zdCBsb2FkZWRTY3JpcHRzOiBNYXA8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PiA9IG5ldyBNYXAoKVxuICBjb25zdCBzdHlsZVNoZWV0czogTWFwPHN0cmluZywgUHJvbWlzZTxSb3V0ZVN0eWxlU2hlZXQ+PiA9IG5ldyBNYXAoKVxuICBjb25zdCByb3V0ZXM6IE1hcDxzdHJpbmcsIEZ1dHVyZTxSb3V0ZUxvYWRlckVudHJ5PiB8IFJvdXRlTG9hZGVyRW50cnk+ID1cbiAgICBuZXcgTWFwKClcblxuICBmdW5jdGlvbiBtYXliZUV4ZWN1dGVTY3JpcHQoXG4gICAgc3JjOiBUcnVzdGVkU2NyaXB0VVJMIHwgc3RyaW5nXG4gICk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIC8vIFdpdGggSE1SIHdlIG1pZ2h0IG5lZWQgdG8gXCJyZWxvYWRcIiBzY3JpcHRzIHdoZW4gdGhleSBhcmVcbiAgICAvLyBkaXNwb3NlZCBhbmQgcmVhZGRlZC4gRXhlY3V0aW5nIHNjcmlwdHMgdHdpY2UgaGFzIG5vIGZ1bmN0aW9uYWxcbiAgICAvLyBkaWZmZXJlbmNlc1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgbGV0IHByb206IFByb21pc2U8dW5rbm93bj4gfCB1bmRlZmluZWQgPSBsb2FkZWRTY3JpcHRzLmdldChzcmMudG9TdHJpbmcoKSlcbiAgICAgIGlmIChwcm9tKSB7XG4gICAgICAgIHJldHVybiBwcm9tXG4gICAgICB9XG5cbiAgICAgIC8vIFNraXAgZXhlY3V0aW5nIHNjcmlwdCBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIERPTTpcbiAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBzY3JpcHRbc3JjXj1cIiR7c3JjfVwiXWApKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfVxuXG4gICAgICBsb2FkZWRTY3JpcHRzLnNldChzcmMudG9TdHJpbmcoKSwgKHByb20gPSBhcHBlbmRTY3JpcHQoc3JjKSkpXG4gICAgICByZXR1cm4gcHJvbVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXBwZW5kU2NyaXB0KHNyYylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmZXRjaFN0eWxlU2hlZXQoaHJlZjogc3RyaW5nKTogUHJvbWlzZTxSb3V0ZVN0eWxlU2hlZXQ+IHtcbiAgICBsZXQgcHJvbTogUHJvbWlzZTxSb3V0ZVN0eWxlU2hlZXQ+IHwgdW5kZWZpbmVkID0gc3R5bGVTaGVldHMuZ2V0KGhyZWYpXG4gICAgaWYgKHByb20pIHtcbiAgICAgIHJldHVybiBwcm9tXG4gICAgfVxuXG4gICAgc3R5bGVTaGVldHMuc2V0KFxuICAgICAgaHJlZixcbiAgICAgIChwcm9tID0gZmV0Y2goaHJlZiwgeyBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyB9KVxuICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgc3R5bGVzaGVldDogJHtocmVmfWApXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXMudGV4dCgpLnRoZW4oKHRleHQpID0+ICh7IGhyZWY6IGhyZWYsIGNvbnRlbnQ6IHRleHQgfSkpXG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgdGhyb3cgbWFya0Fzc2V0RXJyb3IoZXJyKVxuICAgICAgICB9KSlcbiAgICApXG4gICAgcmV0dXJuIHByb21cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2hlbkVudHJ5cG9pbnQocm91dGU6IHN0cmluZykge1xuICAgICAgcmV0dXJuIHdpdGhGdXR1cmUocm91dGUsIGVudHJ5cG9pbnRzKVxuICAgIH0sXG4gICAgb25FbnRyeXBvaW50KHJvdXRlOiBzdHJpbmcsIGV4ZWN1dGU6IHVuZGVmaW5lZCB8ICgoKSA9PiB1bmtub3duKSkge1xuICAgICAgOyhleGVjdXRlXG4gICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IGV4ZWN1dGUoKSlcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAoZXhwb3J0czogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogKGV4cG9ydHMgJiYgZXhwb3J0cy5kZWZhdWx0KSB8fCBleHBvcnRzLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IGV4cG9ydHMsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAoZXJyKSA9PiAoeyBlcnJvcjogZXJyIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgICkudGhlbigoaW5wdXQ6IFJvdXRlRW50cnlwb2ludCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICBjb25zdCBvbGQgPSBlbnRyeXBvaW50cy5nZXQocm91dGUpXG4gICAgICAgIGlmIChvbGQgJiYgJ3Jlc29sdmUnIGluIG9sZCkge1xuICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgZW50cnlwb2ludHMuc2V0KHJvdXRlLCBpbnB1dClcbiAgICAgICAgICAgIG9sZC5yZXNvbHZlKGlucHV0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIGVudHJ5cG9pbnRzLnNldChyb3V0ZSwgaW5wdXQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVudHJ5cG9pbnRzLmRlbGV0ZShyb3V0ZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gd2hlbiB0aGlzIGVudHJ5cG9pbnQgaGFzIGJlZW4gcmVzb2x2ZWQgYmVmb3JlXG4gICAgICAgICAgLy8gdGhlIHJvdXRlIGlzIG91dGRhdGVkIGFuZCB3ZSB3YW50IHRvIGludmFsaWRhdGVcbiAgICAgICAgICAvLyB0aGlzIGNhY2hlIGVudHJ5XG4gICAgICAgICAgcm91dGVzLmRlbGV0ZShyb3V0ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuICAgIGxvYWRSb3V0ZShyb3V0ZTogc3RyaW5nLCBwcmVmZXRjaD86IGJvb2xlYW4pIHtcbiAgICAgIHJldHVybiB3aXRoRnV0dXJlPFJvdXRlTG9hZGVyRW50cnk+KHJvdXRlLCByb3V0ZXMsICgpID0+IHtcbiAgICAgICAgbGV0IGRldkJ1aWxkUHJvbWlzZVJlc29sdmU6ICgpID0+IHZvaWRcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgICBkZXZCdWlsZFByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgZGV2QnVpbGRQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmVQcm9taXNlV2l0aFRpbWVvdXQoXG4gICAgICAgICAgZ2V0RmlsZXNGb3JSb3V0ZShhc3NldFByZWZpeCwgcm91dGUpXG4gICAgICAgICAgICAudGhlbigoeyBzY3JpcHRzLCBjc3MgfSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIGVudHJ5cG9pbnRzLmhhcyhyb3V0ZSlcbiAgICAgICAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgICAgICAgIDogUHJvbWlzZS5hbGwoc2NyaXB0cy5tYXAobWF5YmVFeGVjdXRlU2NyaXB0KSksXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoY3NzLm1hcChmZXRjaFN0eWxlU2hlZXQpKSxcbiAgICAgICAgICAgICAgXSBhcyBjb25zdClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLndoZW5FbnRyeXBvaW50KHJvdXRlKS50aGVuKChlbnRyeXBvaW50KSA9PiAoe1xuICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiByZXNbMV0sXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgTVNfTUFYX0lETEVfREVMQVksXG4gICAgICAgICAgbWFya0Fzc2V0RXJyb3IobmV3IEVycm9yKGBSb3V0ZSBkaWQgbm90IGNvbXBsZXRlIGxvYWRpbmc6ICR7cm91dGV9YCkpXG4gICAgICAgIClcbiAgICAgICAgICAudGhlbigoeyBlbnRyeXBvaW50LCBzdHlsZXMgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzOiBSb3V0ZUxvYWRlckVudHJ5ID0gT2JqZWN0LmFzc2lnbjxcbiAgICAgICAgICAgICAgeyBzdHlsZXM6IFJvdXRlU3R5bGVTaGVldFtdIH0sXG4gICAgICAgICAgICAgIFJvdXRlRW50cnlwb2ludFxuICAgICAgICAgICAgPih7IHN0eWxlczogc3R5bGVzISB9LCBlbnRyeXBvaW50KVxuICAgICAgICAgICAgcmV0dXJuICdlcnJvcicgaW4gZW50cnlwb2ludCA/IGVudHJ5cG9pbnQgOiByZXNcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAocHJlZmV0Y2gpIHtcbiAgICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBjYWNoZSBlcnJvcnMgZHVyaW5nIHByZWZldGNoXG4gICAgICAgICAgICAgIHRocm93IGVyclxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGVyciB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmluYWxseSgoKSA9PiBkZXZCdWlsZFByb21pc2VSZXNvbHZlPy4oKSlcbiAgICAgIH0pXG4gICAgfSxcbiAgICBwcmVmZXRjaChyb3V0ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lTGFicy9xdWlja2xpbmsvYmxvYi80NTNhNjYxZmExZmE5NDBlMmQyZTA0NDQ1MjM5OGUzOGM2N2E5OGZiL3NyYy9pbmRleC5tanMjTDExNS1MMTE4XG4gICAgICAvLyBMaWNlbnNlOiBBcGFjaGUgMi4wXG4gICAgICBsZXQgY25cbiAgICAgIGlmICgoY24gPSAobmF2aWdhdG9yIGFzIGFueSkuY29ubmVjdGlvbikpIHtcbiAgICAgICAgLy8gRG9uJ3QgcHJlZmV0Y2ggaWYgdXNpbmcgMkcgb3IgaWYgU2F2ZS1EYXRhIGlzIGVuYWJsZWQuXG4gICAgICAgIGlmIChjbi5zYXZlRGF0YSB8fCAvMmcvLnRlc3QoY24uZWZmZWN0aXZlVHlwZSkpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGdldEZpbGVzRm9yUm91dGUoYXNzZXRQcmVmaXgsIHJvdXRlKVxuICAgICAgICAudGhlbigob3V0cHV0KSA9PlxuICAgICAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgY2FuUHJlZmV0Y2hcbiAgICAgICAgICAgICAgPyBvdXRwdXQuc2NyaXB0cy5tYXAoKHNjcmlwdCkgPT5cbiAgICAgICAgICAgICAgICAgIHByZWZldGNoVmlhRG9tKHNjcmlwdC50b1N0cmluZygpLCAnc2NyaXB0JylcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogW11cbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT4gdGhpcy5sb2FkUm91dGUocm91dGUsIHRydWUpLmNhdGNoKCgpID0+IHt9KSlcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKFxuICAgICAgICAgIC8vIHN3YWxsb3cgcHJlZmV0Y2ggZXJyb3JzXG4gICAgICAgICAgKCkgPT4ge31cbiAgICAgICAgKVxuICAgIH0sXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVSb3V0ZUxvYWRlciIsImdldENsaWVudEJ1aWxkTWFuaWZlc3QiLCJpc0Fzc2V0RXJyb3IiLCJtYXJrQXNzZXRFcnJvciIsIk1TX01BWF9JRExFX0RFTEFZIiwid2l0aEZ1dHVyZSIsImtleSIsIm1hcCIsImdlbmVyYXRvciIsImVudHJ5IiwiZ2V0IiwiZnV0dXJlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZXNvbHZlciIsInByb20iLCJzZXQiLCJ0aGVuIiwidmFsdWUiLCJjYXRjaCIsImVyciIsImRlbGV0ZSIsIkFTU0VUX0xPQURfRVJST1IiLCJTeW1ib2wiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImhhc1ByZWZldGNoIiwibGluayIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIndpbmRvdyIsIk1TSW5wdXRNZXRob2RDb250ZXh0IiwiZG9jdW1lbnRNb2RlIiwicmVsTGlzdCIsInN1cHBvcnRzIiwiY2FuUHJlZmV0Y2giLCJnZXRBc3NldFF1ZXJ5U3RyaW5nIiwiZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nIiwicHJlZmV0Y2hWaWFEb20iLCJocmVmIiwiYXMiLCJyZWplY3QiLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJyZWwiLCJjcm9zc09yaWdpbiIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfQ1JPU1NfT1JJR0lOIiwib25sb2FkIiwib25lcnJvciIsIkVycm9yIiwiaGVhZCIsImFwcGVuZENoaWxkIiwiYXBwZW5kU2NyaXB0Iiwic3JjIiwic2NyaXB0IiwiYm9keSIsImRldkJ1aWxkUHJvbWlzZSIsInJlc29sdmVQcm9taXNlV2l0aFRpbWVvdXQiLCJwIiwibXMiLCJjYW5jZWxsZWQiLCJyIiwiTk9ERV9FTlYiLCJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwic2V0VGltZW91dCIsInNlbGYiLCJfX0JVSUxEX01BTklGRVNUIiwib25CdWlsZE1hbmlmZXN0IiwiY2IiLCJfX0JVSUxEX01BTklGRVNUX0NCIiwiZ2V0RmlsZXNGb3JSb3V0ZSIsImFzc2V0UHJlZml4Iiwicm91dGUiLCJzY3JpcHRVcmwiLCJlbmNvZGVVUklQYXRoIiwiZ2V0QXNzZXRQYXRoRnJvbVJvdXRlIiwic2NyaXB0cyIsIl9fdW5zYWZlQ3JlYXRlVHJ1c3RlZFNjcmlwdFVSTCIsImNzcyIsIm1hbmlmZXN0IiwiYWxsRmlsZXMiLCJmaWx0ZXIiLCJ2IiwiZW5kc1dpdGgiLCJlbnRyeXBvaW50cyIsIk1hcCIsImxvYWRlZFNjcmlwdHMiLCJzdHlsZVNoZWV0cyIsInJvdXRlcyIsIm1heWJlRXhlY3V0ZVNjcmlwdCIsInRvU3RyaW5nIiwiZmV0Y2hTdHlsZVNoZWV0IiwiZmV0Y2giLCJjcmVkZW50aWFscyIsInJlcyIsIm9rIiwidGV4dCIsImNvbnRlbnQiLCJ3aGVuRW50cnlwb2ludCIsIm9uRW50cnlwb2ludCIsImV4ZWN1dGUiLCJleHBvcnRzIiwiY29tcG9uZW50IiwiZGVmYXVsdCIsImVycm9yIiwidW5kZWZpbmVkIiwiaW5wdXQiLCJvbGQiLCJsb2FkUm91dGUiLCJwcmVmZXRjaCIsImRldkJ1aWxkUHJvbWlzZVJlc29sdmUiLCJhbGwiLCJoYXMiLCJlbnRyeXBvaW50Iiwic3R5bGVzIiwiYXNzaWduIiwiZmluYWxseSIsImNuIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsInNhdmVEYXRhIiwidGVzdCIsImVmZmVjdGl2ZVR5cGUiLCJvdXRwdXQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/route-loader.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/router.js":
/*!****************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/router.js ***!
\****************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/* global window */ \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 Router: function() {\n return _router.default;\n },\n createRouter: function() {\n return createRouter;\n },\n // Export the singletonRouter and this is the public API.\n default: function() {\n return _default;\n },\n makePublicRouterInstance: function() {\n return makePublicRouterInstance;\n },\n useRouter: function() {\n return useRouter;\n },\n withRouter: function() {\n return _withrouter.default;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst _router = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/router */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/router.js\"));\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router-context.shared-runtime.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../lib/is-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-error.js\"));\nconst _withrouter = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./with-router */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/with-router.js\"));\nconst singletonRouter = {\n router: null,\n readyCallbacks: [],\n ready (callback) {\n if (this.router) return callback();\n if (true) {\n this.readyCallbacks.push(callback);\n }\n }\n};\n// Create public properties and methods of the router in the singletonRouter\nconst urlPropertyFields = [\n 'pathname',\n 'route',\n 'query',\n 'asPath',\n 'components',\n 'isFallback',\n 'basePath',\n 'locale',\n 'locales',\n 'defaultLocale',\n 'isReady',\n 'isPreview',\n 'isLocaleDomain',\n 'domainLocales'\n];\nconst routerEvents = [\n 'routeChangeStart',\n 'beforeHistoryChange',\n 'routeChangeComplete',\n 'routeChangeError',\n 'hashChangeStart',\n 'hashChangeComplete'\n];\nconst coreMethodFields = [\n 'push',\n 'replace',\n 'reload',\n 'back',\n 'prefetch',\n 'beforePopState'\n];\n// Events is a static property on the router, the router doesn't have to be initialized to use it\nObject.defineProperty(singletonRouter, 'events', {\n get () {\n return _router.default.events;\n }\n});\nfunction getRouter() {\n if (!singletonRouter.router) {\n const message = 'No router instance found.\\n' + 'You should only use \"next/router\" on the client side of your app.\\n';\n throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n }\n return singletonRouter.router;\n}\nurlPropertyFields.forEach((field)=>{\n // Here we need to use Object.defineProperty because we need to return\n // the property assigned to the actual router\n // The value might get changed as we change routes and this is the\n // proper way to access it\n Object.defineProperty(singletonRouter, field, {\n get () {\n const router = getRouter();\n return router[field];\n }\n });\n});\ncoreMethodFields.forEach((field)=>{\n // We don't really know the types here, so we add them later instead\n ;\n singletonRouter[field] = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n const router = getRouter();\n return router[field](...args);\n };\n});\nrouterEvents.forEach((event)=>{\n singletonRouter.ready(()=>{\n _router.default.events.on(event, function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n const eventField = \"on\" + event.charAt(0).toUpperCase() + event.substring(1);\n const _singletonRouter = singletonRouter;\n if (_singletonRouter[eventField]) {\n try {\n _singletonRouter[eventField](...args);\n } catch (err) {\n console.error(\"Error when running the Router event: \" + eventField);\n console.error((0, _iserror.default)(err) ? err.message + \"\\n\" + err.stack : err + '');\n }\n }\n });\n });\n});\nconst _default = singletonRouter;\nfunction useRouter() {\n _s();\n const router = _react.default.useContext(_routercontextsharedruntime.RouterContext);\n if (!router) {\n throw Object.defineProperty(new Error('NextRouter was not mounted. https://nextjs.org/docs/messages/next-router-not-mounted'), \"__NEXT_ERROR_CODE\", {\n value: \"E509\",\n enumerable: false,\n configurable: true\n });\n }\n return router;\n}\n_s(useRouter, \"rbAhEc3dLGnVlsHWaSDsgP4MZS0=\");\nfunction createRouter() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n singletonRouter.router = new _router.default(...args);\n singletonRouter.readyCallbacks.forEach((cb)=>cb());\n singletonRouter.readyCallbacks = [];\n return singletonRouter.router;\n}\nfunction makePublicRouterInstance(router) {\n const scopedRouter = router;\n const instance = {};\n for (const property of urlPropertyFields){\n if (typeof scopedRouter[property] === 'object') {\n instance[property] = Object.assign(Array.isArray(scopedRouter[property]) ? [] : {}, scopedRouter[property]) // makes sure query is not stateful\n ;\n continue;\n }\n instance[property] = scopedRouter[property];\n }\n // Events is a static property on the router, the router doesn't have to be initialized to use it\n instance.events = _router.default.events;\n coreMethodFields.forEach((field)=>{\n instance[field] = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n return scopedRouter[field](...args);\n };\n });\n return instance;\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=router.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JvdXRlci5qcyIsIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7O0FBQUE7Ozs7Ozs7Ozs7OztJQWFSQSxNQUFNO2VBQU5BLFFBQUFBLE9BQU07O0lBNklDQyxZQUFZO2VBQVpBOztJQTdCaEIseURBQXlEO0lBQ3pELE9BQWlEO2VBQWpEOztJQTBDZ0JDLHdCQUF3QjtlQUF4QkE7O0lBL0JBQyxTQUFTO2VBQVRBOztJQVJJQyxVQUFVO2VBQVZBLFlBQUFBLE9BQVU7Ozs7NEVBaElaOzZFQUNDO3dEQUVXOzhFQUNWO2lGQTRIa0I7QUE5R3RDLE1BQU1DLGtCQUF1QztJQUMzQ0MsUUFBUTtJQUNSQyxnQkFBZ0IsRUFBRTtJQUNsQkMsT0FBTUMsUUFBb0I7UUFDeEIsSUFBSSxJQUFJLENBQUNILE1BQU0sRUFBRSxPQUFPRztRQUN4QixJQUFJLElBQTZCLEVBQUU7WUFDakMsSUFBSSxDQUFDRixjQUFjLENBQUNJLElBQUksQ0FBQ0Y7UUFDM0I7SUFDRjtBQUNGO0FBRUEsNEVBQTRFO0FBQzVFLE1BQU1HLG9CQUFvQjtJQUN4QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFDRCxNQUFNQyxlQUFlO0lBQ25CO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBR0QsTUFBTUMsbUJBQW1CO0lBQ3ZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBRUQsaUdBQWlHO0FBQ2pHQyxPQUFPQyxjQUFjLENBQUNYLGlCQUFpQixVQUFVO0lBQy9DWTtRQUNFLE9BQU9qQixRQUFBQSxPQUFNLENBQUNrQixNQUFNO0lBQ3RCO0FBQ0Y7QUFFQSxTQUFTQztJQUNQ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QUUsR0FBRyxDQUFDLEdBQzlDRixZQUFZLENBQUNFLFNBQVMsRUFDdEIsbUNBQW1DOztZQUNyQztRQUNGO1FBRUFELFFBQVEsQ0FBQ0MsU0FBUyxHQUFHRixZQUFZLENBQUNFLFNBQVM7SUFDN0M7SUFFQSxpR0FBaUc7SUFDakdELFNBQVN4QixNQUFNLEdBQUdsQixRQUFBQSxPQUFNLENBQUNrQixNQUFNO0lBRS9CSixpQkFBaUJRLE9BQU8sQ0FBQyxDQUFDQztRQUN4Qm1CLFFBQVEsQ0FBQ25CLE1BQU0sR0FBRzs2Q0FBSUMsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7Z0JBQUFBLElBQUFBLENBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEtBQUFBOztZQUNwQixPQUFPaUIsWUFBWSxDQUFDbEIsTUFBTSxJQUFJQztRQUNoQztJQUNGO0lBRUEsT0FBT2tCO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9zcmMvY2xpZW50L3JvdXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgd2luZG93ICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgUm91dGVyIGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3JvdXRlcidcbmltcG9ydCB0eXBlIHsgTmV4dFJvdXRlciB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3JvdXRlcidcbmltcG9ydCB7IFJvdXRlckNvbnRleHQgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IGlzRXJyb3IgZnJvbSAnLi4vbGliL2lzLWVycm9yJ1xuXG50eXBlIFNpbmdsZXRvblJvdXRlckJhc2UgPSB7XG4gIHJvdXRlcjogUm91dGVyIHwgbnVsbFxuICByZWFkeUNhbGxiYWNrczogQXJyYXk8KCkgPT4gYW55PlxuICByZWFkeShjYjogKCkgPT4gYW55KTogdm9pZFxufVxuXG5leHBvcnQgeyBSb3V0ZXIgfVxuXG5leHBvcnQgdHlwZSB7IE5leHRSb3V0ZXIgfVxuXG5leHBvcnQgdHlwZSBTaW5nbGV0b25Sb3V0ZXIgPSBTaW5nbGV0b25Sb3V0ZXJCYXNlICYgTmV4dFJvdXRlclxuXG5jb25zdCBzaW5nbGV0b25Sb3V0ZXI6IFNpbmdsZXRvblJvdXRlckJhc2UgPSB7XG4gIHJvdXRlcjogbnVsbCwgLy8gaG9sZHMgdGhlIGFjdHVhbCByb3V0ZXIgaW5zdGFuY2VcbiAgcmVhZHlDYWxsYmFja3M6IFtdLFxuICByZWFkeShjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICAgIGlmICh0aGlzLnJvdXRlcikgcmV0dXJuIGNhbGxiYWNrKClcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMucmVhZHlDYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICB9XG4gIH0sXG59XG5cbi8vIENyZWF0ZSBwdWJsaWMgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBvZiB0aGUgcm91dGVyIGluIHRoZSBzaW5nbGV0b25Sb3V0ZXJcbmNvbnN0IHVybFByb3BlcnR5RmllbGRzID0gW1xuICAncGF0aG5hbWUnLFxuICAncm91dGUnLFxuICAncXVlcnknLFxuICAnYXNQYXRoJyxcbiAgJ2NvbXBvbmVudHMnLFxuICAnaXNGYWxsYmFjaycsXG4gICdiYXNlUGF0aCcsXG4gICdsb2NhbGUnLFxuICAnbG9jYWxlcycsXG4gICdkZWZhdWx0TG9jYWxlJyxcbiAgJ2lzUmVhZHknLFxuICAnaXNQcmV2aWV3JyxcbiAgJ2lzTG9jYWxlRG9tYWluJyxcbiAgJ2RvbWFpbkxvY2FsZXMnLFxuXSBhcyBjb25zdFxuY29uc3Qgcm91dGVyRXZlbnRzID0gW1xuICAncm91dGVDaGFuZ2VTdGFydCcsXG4gICdiZWZvcmVIaXN0b3J5Q2hhbmdlJyxcbiAgJ3JvdXRlQ2hhbmdlQ29tcGxldGUnLFxuICAncm91dGVDaGFuZ2VFcnJvcicsXG4gICdoYXNoQ2hhbmdlU3RhcnQnLFxuICAnaGFzaENoYW5nZUNvbXBsZXRlJyxcbl0gYXMgY29uc3RcbmV4cG9ydCB0eXBlIFJvdXRlckV2ZW50ID0gKHR5cGVvZiByb3V0ZXJFdmVudHMpW251bWJlcl1cblxuY29uc3QgY29yZU1ldGhvZEZpZWxkcyA9IFtcbiAgJ3B1c2gnLFxuICAncmVwbGFjZScsXG4gICdyZWxvYWQnLFxuICAnYmFjaycsXG4gICdwcmVmZXRjaCcsXG4gICdiZWZvcmVQb3BTdGF0ZScsXG5dIGFzIGNvbnN0XG5cbi8vIEV2ZW50cyBpcyBhIHN0YXRpYyBwcm9wZXJ0eSBvbiB0aGUgcm91dGVyLCB0aGUgcm91dGVyIGRvZXNuJ3QgaGF2ZSB0byBiZSBpbml0aWFsaXplZCB0byB1c2UgaXRcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzaW5nbGV0b25Sb3V0ZXIsICdldmVudHMnLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gUm91dGVyLmV2ZW50c1xuICB9LFxufSlcblxuZnVuY3Rpb24gZ2V0Um91dGVyKCk6IFJvdXRlciB7XG4gIGlmICghc2luZ2xldG9uUm91dGVyLnJvdXRlcikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgJ05vIHJvdXRlciBpbnN0YW5jZSBmb3VuZC5cXG4nICtcbiAgICAgICdZb3Ugc2hvdWxkIG9ubHkgdXNlIFwibmV4dC9yb3V0ZXJcIiBvbiB0aGUgY2xpZW50IHNpZGUgb2YgeW91ciBhcHAuXFxuJ1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKVxuICB9XG4gIHJldHVybiBzaW5nbGV0b25Sb3V0ZXIucm91dGVyXG59XG5cbnVybFByb3BlcnR5RmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gIC8vIEhlcmUgd2UgbmVlZCB0byB1c2UgT2JqZWN0LmRlZmluZVByb3BlcnR5IGJlY2F1c2Ugd2UgbmVlZCB0byByZXR1cm5cbiAgLy8gdGhlIHByb3BlcnR5IGFzc2lnbmVkIHRvIHRoZSBhY3R1YWwgcm91dGVyXG4gIC8vIFRoZSB2YWx1ZSBtaWdodCBnZXQgY2hhbmdlZCBhcyB3ZSBjaGFuZ2Ugcm91dGVzIGFuZCB0aGlzIGlzIHRoZVxuICAvLyBwcm9wZXIgd2F5IHRvIGFjY2VzcyBpdFxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2luZ2xldG9uUm91dGVyLCBmaWVsZCwge1xuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IHJvdXRlciA9IGdldFJvdXRlcigpXG4gICAgICByZXR1cm4gcm91dGVyW2ZpZWxkXSBhcyBzdHJpbmdcbiAgICB9LFxuICB9KVxufSlcblxuY29yZU1ldGhvZEZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAvLyBXZSBkb24ndCByZWFsbHkga25vdyB0aGUgdHlwZXMgaGVyZSwgc28gd2UgYWRkIHRoZW0gbGF0ZXIgaW5zdGVhZFxuICA7KHNpbmdsZXRvblJvdXRlciBhcyBhbnkpW2ZpZWxkXSA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIGNvbnN0IHJvdXRlciA9IGdldFJvdXRlcigpIGFzIGFueVxuICAgIHJldHVybiByb3V0ZXJbZmllbGRdKC4uLmFyZ3MpXG4gIH1cbn0pXG5cbnJvdXRlckV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICBzaW5nbGV0b25Sb3V0ZXIucmVhZHkoKCkgPT4ge1xuICAgIFJvdXRlci5ldmVudHMub24oZXZlbnQsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBldmVudEZpZWxkID0gYG9uJHtldmVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke2V2ZW50LnN1YnN0cmluZyhcbiAgICAgICAgMVxuICAgICAgKX1gXG4gICAgICBjb25zdCBfc2luZ2xldG9uUm91dGVyID0gc2luZ2xldG9uUm91dGVyIGFzIGFueVxuICAgICAgaWYgKF9zaW5nbGV0b25Sb3V0ZXJbZXZlbnRGaWVsZF0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBfc2luZ2xldG9uUm91dGVyW2V2ZW50RmllbGRdKC4uLmFyZ3MpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHdoZW4gcnVubmluZyB0aGUgUm91dGVyIGV2ZW50OiAke2V2ZW50RmllbGR9YClcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgaXNFcnJvcihlcnIpID8gYCR7ZXJyLm1lc3NhZ2V9XFxuJHtlcnIuc3RhY2t9YCA6IGVyciArICcnXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn0pXG5cbi8vIEV4cG9ydCB0aGUgc2luZ2xldG9uUm91dGVyIGFuZCB0aGlzIGlzIHRoZSBwdWJsaWMgQVBJLlxuZXhwb3J0IGRlZmF1bHQgc2luZ2xldG9uUm91dGVyIGFzIFNpbmdsZXRvblJvdXRlclxuXG4vLyBSZWV4cG9ydCB0aGUgd2l0aFJvdXRlciBIT0NcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2l0aFJvdXRlciB9IGZyb20gJy4vd2l0aC1yb3V0ZXInXG5cbi8qKlxuICogVGhpcyBob29rIGdpdmVzIGFjY2VzcyB0aGUgW3JvdXRlciBvYmplY3RdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL3VzZS1yb3V0ZXIjcm91dGVyLW9iamVjdClcbiAqIGluc2lkZSB0aGUgW1BhZ2VzIFJvdXRlcl0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvcGFnZXMvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbikuXG4gKlxuICogUmVhZCBtb3JlOiBbTmV4dC5qcyBEb2NzOiBgdXNlUm91dGVyYF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvcGFnZXMvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXJvdXRlcilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVJvdXRlcigpOiBOZXh0Um91dGVyIHtcbiAgY29uc3Qgcm91dGVyID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZXJDb250ZXh0KVxuICBpZiAoIXJvdXRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdOZXh0Um91dGVyIHdhcyBub3QgbW91bnRlZC4gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvbmV4dC1yb3V0ZXItbm90LW1vdW50ZWQnXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHJvdXRlclxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHJvdXRlciBhbmQgYXNzaWduIGl0IGFzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuXG4gKiBUaGlzIGlzIHVzZWQgaW4gY2xpZW50IHNpZGUgd2hlbiB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBhcHAuXG4gKiBUaGlzIHNob3VsZCAqKm5vdCoqIGJlIHVzZWQgaW5zaWRlIHRoZSBzZXJ2ZXIuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlcihcbiAgLi4uYXJnczogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBSb3V0ZXI+XG4pOiBSb3V0ZXIge1xuICBzaW5nbGV0b25Sb3V0ZXIucm91dGVyID0gbmV3IFJvdXRlciguLi5hcmdzKVxuICBzaW5nbGV0b25Sb3V0ZXIucmVhZHlDYWxsYmFja3MuZm9yRWFjaCgoY2IpID0+IGNiKCkpXG4gIHNpbmdsZXRvblJvdXRlci5yZWFkeUNhbGxiYWNrcyA9IFtdXG5cbiAgcmV0dXJuIHNpbmdsZXRvblJvdXRlci5yb3V0ZXJcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBgd2l0aFJvdXRlcmAgcm91dGVyIGluc3RhbmNlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQdWJsaWNSb3V0ZXJJbnN0YW5jZShyb3V0ZXI6IFJvdXRlcik6IE5leHRSb3V0ZXIge1xuICBjb25zdCBzY29wZWRSb3V0ZXIgPSByb3V0ZXIgYXMgYW55XG4gIGNvbnN0IGluc3RhbmNlID0ge30gYXMgYW55XG5cbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiB1cmxQcm9wZXJ0eUZpZWxkcykge1xuICAgIGlmICh0eXBlb2Ygc2NvcGVkUm91dGVyW3Byb3BlcnR5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGluc3RhbmNlW3Byb3BlcnR5XSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIEFycmF5LmlzQXJyYXkoc2NvcGVkUm91dGVyW3Byb3BlcnR5XSkgPyBbXSA6IHt9LFxuICAgICAgICBzY29wZWRSb3V0ZXJbcHJvcGVydHldXG4gICAgICApIC8vIG1ha2VzIHN1cmUgcXVlcnkgaXMgbm90IHN0YXRlZnVsXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGluc3RhbmNlW3Byb3BlcnR5XSA9IHNjb3BlZFJvdXRlcltwcm9wZXJ0eV1cbiAgfVxuXG4gIC8vIEV2ZW50cyBpcyBhIHN0YXRpYyBwcm9wZXJ0eSBvbiB0aGUgcm91dGVyLCB0aGUgcm91dGVyIGRvZXNuJ3QgaGF2ZSB0byBiZSBpbml0aWFsaXplZCB0byB1c2UgaXRcbiAgaW5zdGFuY2UuZXZlbnRzID0gUm91dGVyLmV2ZW50c1xuXG4gIGNvcmVNZXRob2RGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICBpbnN0YW5jZVtmaWVsZF0gPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIHJldHVybiBzY29wZWRSb3V0ZXJbZmllbGRdKC4uLmFyZ3MpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBpbnN0YW5jZVxufVxuIl0sIm5hbWVzIjpbIlJvdXRlciIsImNyZWF0ZVJvdXRlciIsIm1ha2VQdWJsaWNSb3V0ZXJJbnN0YW5jZSIsInVzZVJvdXRlciIsIndpdGhSb3V0ZXIiLCJzaW5nbGV0b25Sb3V0ZXIiLCJyb3V0ZXIiLCJyZWFkeUNhbGxiYWNrcyIsInJlYWR5IiwiY2FsbGJhY2siLCJ3aW5kb3ciLCJwdXNoIiwidXJsUHJvcGVydHlGaWVsZHMiLCJyb3V0ZXJFdmVudHMiLCJjb3JlTWV0aG9kRmllbGRzIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJldmVudHMiLCJnZXRSb3V0ZXIiLCJtZXNzYWdlIiwiRXJyb3IiLCJmb3JFYWNoIiwiZmllbGQiLCJhcmdzIiwiZXZlbnQiLCJvbiIsImV2ZW50RmllbGQiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInN1YnN0cmluZyIsIl9zaW5nbGV0b25Sb3V0ZXIiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJpc0Vycm9yIiwic3RhY2siLCJSZWFjdCIsInVzZUNvbnRleHQiLCJSb3V0ZXJDb250ZXh0IiwiY2IiLCJzY29wZWRSb3V0ZXIiLCJpbnN0YW5jZSIsInByb3BlcnR5IiwiYXNzaWduIiwiQXJyYXkiLCJpc0FycmF5Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/router.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/script.js":
/*!****************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/script.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}));\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 default: function() {\n return _default;\n },\n handleClientScriptLoad: function() {\n return handleClientScriptLoad;\n },\n initScriptLoader: function() {\n return initScriptLoader;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-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 */ \"(pages-dir-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 */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js\");\nconst _reactdom = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom */ \"(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/index.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ../shared/lib/head-manager-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _setattributesfromprops = __webpack_require__(/*! ./set-attributes-from-props */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/set-attributes-from-props.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/request-idle-callback.js\");\nconst ScriptCache = new Map();\nconst LoadCache = new Set();\nconst insertStylesheets = (stylesheets)=>{\n // Case 1: Styles for afterInteractive/lazyOnload with appDir injected via handleClientScriptLoad\n //\n // Using ReactDOM.preinit to feature detect appDir and inject styles\n // Stylesheets might have already been loaded if initialized with Script component\n // Re-inject styles here to handle scripts loaded via handleClientScriptLoad\n // ReactDOM.preinit handles dedup and ensures the styles are loaded only once\n if (_reactdom.default.preinit) {\n stylesheets.forEach((stylesheet)=>{\n _reactdom.default.preinit(stylesheet, {\n as: 'style'\n });\n });\n return;\n }\n // Case 2: Styles for afterInteractive/lazyOnload with pages injected via handleClientScriptLoad\n //\n // We use this function to load styles when appdir is not detected\n // TODO: Use React float APIs to load styles once available for pages dir\n if (true) {\n let head = document.head;\n stylesheets.forEach((stylesheet)=>{\n let link = document.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = stylesheet;\n head.appendChild(link);\n });\n }\n};\nconst loadScript = (props)=>{\n const { src, id, onLoad = ()=>{}, onReady = null, dangerouslySetInnerHTML, children = '', strategy = 'afterInteractive', onError, stylesheets } = props;\n const cacheKey = id || src;\n // Script has already loaded\n if (cacheKey && LoadCache.has(cacheKey)) {\n return;\n }\n // Contents of this script are already loading/loaded\n if (ScriptCache.has(src)) {\n LoadCache.add(cacheKey);\n // It is possible that multiple `next/script` components all have same \"src\", but has different \"onLoad\"\n // This is to make sure the same remote script will only load once, but \"onLoad\" are executed in order\n ScriptCache.get(src).then(onLoad, onError);\n return;\n }\n /** Execute after the script first loaded */ const afterLoad = ()=>{\n // Run onReady for the first time after load event\n if (onReady) {\n onReady();\n }\n // add cacheKey to LoadCache when load successfully\n LoadCache.add(cacheKey);\n };\n const el = document.createElement('script');\n const loadPromise = new Promise((resolve, reject)=>{\n el.addEventListener('load', function(e) {\n resolve();\n if (onLoad) {\n onLoad.call(this, e);\n }\n afterLoad();\n });\n el.addEventListener('error', function(e) {\n reject(e);\n });\n }).catch(function(e) {\n if (onError) {\n onError(e);\n }\n });\n if (dangerouslySetInnerHTML) {\n // Casting since lib.dom.d.ts doesn't have TrustedHTML yet.\n el.innerHTML = dangerouslySetInnerHTML.__html || '';\n afterLoad();\n } else if (children) {\n el.textContent = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';\n afterLoad();\n } else if (src) {\n el.src = src;\n // do not add cacheKey into LoadCache for remote script here\n // cacheKey will be added to LoadCache when it is actually loaded (see loadPromise above)\n ScriptCache.set(src, loadPromise);\n }\n (0, _setattributesfromprops.setAttributesFromProps)(el, props);\n if (strategy === 'worker') {\n el.setAttribute('type', 'text/partytown');\n }\n el.setAttribute('data-nscript', strategy);\n // Load styles associated with this script\n if (stylesheets) {\n insertStylesheets(stylesheets);\n }\n document.body.appendChild(el);\n};\nfunction handleClientScriptLoad(props) {\n const { strategy = 'afterInteractive' } = props;\n if (strategy === 'lazyOnload') {\n window.addEventListener('load', ()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n });\n } else {\n loadScript(props);\n }\n}\nfunction loadLazyScript(props) {\n if (document.readyState === 'complete') {\n (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n } else {\n window.addEventListener('load', ()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n });\n }\n}\nfunction addBeforeInteractiveToCache() {\n const scripts = [\n ...document.querySelectorAll('[data-nscript=\"beforeInteractive\"]'),\n ...document.querySelectorAll('[data-nscript=\"beforePageRender\"]')\n ];\n scripts.forEach((script)=>{\n const cacheKey = script.id || script.getAttribute('src');\n LoadCache.add(cacheKey);\n });\n}\nfunction initScriptLoader(scriptLoaderItems) {\n scriptLoaderItems.forEach(handleClientScriptLoad);\n addBeforeInteractiveToCache();\n}\n/**\n * Load a third-party scripts in an optimized way.\n *\n * Read more: [Next.js Docs: `next/script`](https://nextjs.org/docs/app/api-reference/components/script)\n */ function Script(props) {\n const { id, src = '', onLoad = ()=>{}, onReady = null, strategy = 'afterInteractive', onError, stylesheets, ...restProps } = props;\n // Context is available only during SSR\n let { updateScripts, scripts, getIsSsr, appDir, nonce } = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);\n // if a nonce is explicitly passed to the script tag, favor that over the automatic handling\n nonce = restProps.nonce || nonce;\n /**\n * - First mount:\n * 1. The useEffect for onReady executes\n * 2. hasOnReadyEffectCalled.current is false, but the script hasn't loaded yet (not in LoadCache)\n * onReady is skipped, set hasOnReadyEffectCalled.current to true\n * 3. The useEffect for loadScript executes\n * 4. hasLoadScriptEffectCalled.current is false, loadScript executes\n * Once the script is loaded, the onLoad and onReady will be called by then\n * [If strict mode is enabled / is wrapped in <OffScreen /> component]\n * 5. The useEffect for onReady executes again\n * 6. hasOnReadyEffectCalled.current is true, so entire effect is skipped\n * 7. The useEffect for loadScript executes again\n * 8. hasLoadScriptEffectCalled.current is true, so entire effect is skipped\n *\n * - Second mount:\n * 1. The useEffect for onReady executes\n * 2. hasOnReadyEffectCalled.current is false, but the script has already loaded (found in LoadCache)\n * onReady is called, set hasOnReadyEffectCalled.current to true\n * 3. The useEffect for loadScript executes\n * 4. The script is already loaded, loadScript bails out\n * [If strict mode is enabled / is wrapped in <OffScreen /> component]\n * 5. The useEffect for onReady executes again\n * 6. hasOnReadyEffectCalled.current is true, so entire effect is skipped\n * 7. The useEffect for loadScript executes again\n * 8. hasLoadScriptEffectCalled.current is true, so entire effect is skipped\n */ const hasOnReadyEffectCalled = (0, _react.useRef)(false);\n (0, _react.useEffect)(()=>{\n const cacheKey = id || src;\n if (!hasOnReadyEffectCalled.current) {\n // Run onReady if script has loaded before but component is re-mounted\n if (onReady && cacheKey && LoadCache.has(cacheKey)) {\n onReady();\n }\n hasOnReadyEffectCalled.current = true;\n }\n }, [\n onReady,\n id,\n src\n ]);\n const hasLoadScriptEffectCalled = (0, _react.useRef)(false);\n (0, _react.useEffect)(()=>{\n if (!hasLoadScriptEffectCalled.current) {\n if (strategy === 'afterInteractive') {\n loadScript(props);\n } else if (strategy === 'lazyOnload') {\n loadLazyScript(props);\n }\n hasLoadScriptEffectCalled.current = true;\n }\n }, [\n props,\n strategy\n ]);\n if (strategy === 'beforeInteractive' || strategy === 'worker') {\n if (updateScripts) {\n scripts[strategy] = (scripts[strategy] || []).concat([\n {\n id,\n src,\n onLoad,\n onReady,\n onError,\n ...restProps,\n nonce\n }\n ]);\n updateScripts(scripts);\n } else if (getIsSsr && getIsSsr()) {\n // Script has already loaded during SSR\n LoadCache.add(id || src);\n } else if (getIsSsr && !getIsSsr()) {\n loadScript({\n ...props,\n nonce\n });\n }\n }\n // For the app directory, we need React Float to preload these scripts.\n if (appDir) {\n // Injecting stylesheets here handles beforeInteractive and worker scripts correctly\n // For other strategies injecting here ensures correct stylesheet order\n // ReactDOM.preinit handles loading the styles in the correct order,\n // also ensures the stylesheet is loaded only once and in a consistent manner\n //\n // Case 1: Styles for beforeInteractive/worker with appDir - handled here\n // Case 2: Styles for beforeInteractive/worker with pages dir - Not handled yet\n // Case 3: Styles for afterInteractive/lazyOnload with appDir - handled here\n // Case 4: Styles for afterInteractive/lazyOnload with pages dir - handled in insertStylesheets function\n if (stylesheets) {\n stylesheets.forEach((styleSrc)=>{\n _reactdom.default.preinit(styleSrc, {\n as: 'style'\n });\n });\n }\n // Before interactive scripts need to be loaded by Next.js' runtime instead\n // of native <script> tags, because they no longer have `defer`.\n if (strategy === 'beforeInteractive') {\n if (!src) {\n // For inlined scripts, we put the content in `children`.\n if (restProps.dangerouslySetInnerHTML) {\n // Casting since lib.dom.d.ts doesn't have TrustedHTML yet.\n restProps.children = restProps.dangerouslySetInnerHTML.__html;\n delete restProps.dangerouslySetInnerHTML;\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n nonce: nonce,\n dangerouslySetInnerHTML: {\n __html: \"(self.__next_s=self.__next_s||[]).push(\" + JSON.stringify([\n 0,\n {\n ...restProps,\n id\n }\n ]) + \")\"\n }\n });\n } else {\n // @ts-ignore\n _reactdom.default.preload(src, restProps.integrity ? {\n as: 'script',\n integrity: restProps.integrity,\n nonce,\n crossOrigin: restProps.crossOrigin\n } : {\n as: 'script',\n nonce,\n crossOrigin: restProps.crossOrigin\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n nonce: nonce,\n dangerouslySetInnerHTML: {\n __html: \"(self.__next_s=self.__next_s||[]).push(\" + JSON.stringify([\n src,\n {\n ...restProps,\n id\n }\n ]) + \")\"\n }\n });\n }\n } else if (strategy === 'afterInteractive') {\n if (src) {\n // @ts-ignore\n _reactdom.default.preload(src, restProps.integrity ? {\n as: 'script',\n integrity: restProps.integrity,\n nonce,\n crossOrigin: restProps.crossOrigin\n } : {\n as: 'script',\n nonce,\n crossOrigin: restProps.crossOrigin\n });\n }\n }\n }\n return null;\n}\n_c = Script;\nObject.defineProperty(Script, '__nextScript', {\n value: true\n});\nconst _default = Script;\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=script.js.map\nvar _c;\n$RefreshReg$(_c, \"Script\");\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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3NjcmlwdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFnWUEsT0FBcUI7ZUFBckI7O0lBcE9nQkEsc0JBQXNCO2VBQXRCQTs7SUFnQ0FDLGdCQUFnQjtlQUFoQkE7Ozs7OzsrRUExTEs7NkVBQzBDOzZEQUU1QjtvREFDSTtpREFDSDtBQUVwQyxNQUFNQyxjQUFjLElBQUlDO0FBQ3hCLE1BQU1DLFlBQVksSUFBSUM7QUFpQnRCLE1BQU1DLG9CQUFvQixDQUFDQztJQUN6QixpR0FBaUc7SUFDakcsRUFBRTtJQUNGLG9FQUFvRTtJQUNwRSxrRkFBa0Y7SUFDbEYsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSxJQUFJQyxVQUFBQSxPQUFRLENBQUNDLE9BQU8sRUFBRTtRQUNwQkYsWUFBWUcsT0FBTyxDQUFDLENBQUNDO1lBQ25CSCxVQUFBQSxPQUFRLENBQUNDLE9BQU8sQ0FBQ0UsWUFBWTtnQkFBRUMsSUFBSTtZQUFRO1FBQzdDO1FBRUE7SUFDRjtJQUVBLGdHQUFnRztJQUNoRyxFQUFFO0lBQ0Ysa0VBQWtFO0lBQ2xFLHlFQUF5RTtJQUN6RSxJQUFJLElBQTZCLEVBQUU7UUFDakMsSUFBSUUsT0FBT0MsU0FBU0QsSUFBSTtRQUN4QlAsWUFBWUcsT0FBTyxDQUFDLENBQUNDO1lBQ25CLElBQUlLLE9BQU9ELFNBQVNFLGFBQWEsQ0FBQztZQUVsQ0QsS0FBS0UsSUFBSSxHQUFHO1lBQ1pGLEtBQUtHLEdBQUcsR0FBRztZQUNYSCxLQUFLSSxJQUFJLEdBQUdUO1lBRVpHLEtBQUtPLFdBQVcsQ0FBQ0w7UUFDbkI7SUFDRjtBQUNGO0FBRUEsTUFBTU0sYUFBYSxDQUFDQztJQUNsQixNQUFNLEVBQ0pDLEdBQUcsRUFDSEMsRUFBRSxFQUNG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LFNBQVMsR0FDZjtvQkFDRXhFLElBQUk7b0JBQ0p3RSxXQUFXakIsVUFBVWlCLFNBQVM7b0JBQzlCYjtvQkFDQWMsYUFBYWxCLFVBQVVrQixXQUFXO2dCQUNwQyxJQUNBO29CQUFFekUsSUFBSTtvQkFBVTJEO29CQUFPYyxhQUFhbEIsVUFBVWtCLFdBQVc7Z0JBQUM7WUFFbEU7UUFDRjtJQUNGO0lBRUEsT0FBTztBQUNUO0tBdExTbkI7QUF3TFRvQixPQUFPQyxjQUFjLENBQUNyQixRQUFRLGdCQUFnQjtJQUFFc0IsT0FBTztBQUFLO01BRTVELFdBQWV0QiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvc2NyaXB0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZUNvbnRleHQsIHVzZVJlZiwgdHlwZSBKU1ggfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgU2NyaXB0SFRNTEF0dHJpYnV0ZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhlYWRNYW5hZ2VyQ29udGV4dCB9IGZyb20gJy4uL3NoYXJlZC9saWIvaGVhZC1tYW5hZ2VyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBzZXRBdHRyaWJ1dGVzRnJvbVByb3BzIH0gZnJvbSAnLi9zZXQtYXR0cmlidXRlcy1mcm9tLXByb3BzJ1xuaW1wb3J0IHsgcmVxdWVzdElkbGVDYWxsYmFjayB9IGZyb20gJy4vcmVxdWVzdC1pZGxlLWNhbGxiYWNrJ1xuXG5jb25zdCBTY3JpcHRDYWNoZSA9IG5ldyBNYXAoKVxuY29uc3QgTG9hZENhY2hlID0gbmV3IFNldCgpXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyaXB0UHJvcHMgZXh0ZW5kcyBTY3JpcHRIVE1MQXR0cmlidXRlczxIVE1MU2NyaXB0RWxlbWVudD4ge1xuICBzdHJhdGVneT86ICdhZnRlckludGVyYWN0aXZlJyB8ICdsYXp5T25sb2FkJyB8ICdiZWZvcmVJbnRlcmFjdGl2ZScgfCAnd29ya2VyJ1xuICBpZD86IHN0cmluZ1xuICBvbkxvYWQ/OiAoZTogYW55KSA9PiB2b2lkXG4gIG9uUmVhZHk/OiAoKSA9PiB2b2lkIHwgbnVsbFxuICBvbkVycm9yPzogKGU6IGFueSkgPT4gdm9pZFxuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuICBzdHlsZXNoZWV0cz86IHN0cmluZ1tdXG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBTY3JpcHRQcm9wc2AgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvcHMgPSBTY3JpcHRQcm9wc1xuXG5jb25zdCBpbnNlcnRTdHlsZXNoZWV0cyA9IChzdHlsZXNoZWV0czogc3RyaW5nW10pID0+IHtcbiAgLy8gQ2FzZSAxOiBTdHlsZXMgZm9yIGFmdGVySW50ZXJhY3RpdmUvbGF6eU9ubG9hZCB3aXRoIGFwcERpciBpbmplY3RlZCB2aWEgaGFuZGxlQ2xpZW50U2NyaXB0TG9hZFxuICAvL1xuICAvLyBVc2luZyBSZWFjdERPTS5wcmVpbml0IHRvIGZlYXR1cmUgZGV0ZWN0IGFwcERpciBhbmQgaW5qZWN0IHN0eWxlc1xuICAvLyBTdHlsZXNoZWV0cyBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQgaWYgaW5pdGlhbGl6ZWQgd2l0aCBTY3JpcHQgY29tcG9uZW50XG4gIC8vIFJlLWluamVjdCBzdHlsZXMgaGVyZSB0byBoYW5kbGUgc2NyaXB0cyBsb2FkZWQgdmlhIGhhbmRsZUNsaWVudFNjcmlwdExvYWRcbiAgLy8gUmVhY3RET00ucHJlaW5pdCBoYW5kbGVzIGRlZHVwIGFuZCBlbnN1cmVzIHRoZSBzdHlsZXMgYXJlIGxvYWRlZCBvbmx5IG9uY2VcbiAgaWYgKFJlYWN0RE9NLnByZWluaXQpIHtcbiAgICBzdHlsZXNoZWV0cy5mb3JFYWNoKChzdHlsZXNoZWV0OiBzdHJpbmcpID0+IHtcbiAgICAgIFJlYWN0RE9NLnByZWluaXQoc3R5bGVzaGVldCwgeyBhczogJ3N0eWxlJyB9KVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIENhc2UgMjogU3R5bGVzIGZvciBhZnRlckludGVyYWN0aXZlL2xhenlPbmxvYWQgd2l0aCBwYWdlcyBpbmplY3RlZCB2aWEgaGFuZGxlQ2xpZW50U2NyaXB0TG9hZFxuICAvL1xuICAvLyBXZSB1c2UgdGhpcyBmdW5jdGlvbiB0byBsb2FkIHN0eWxlcyB3aGVuIGFwcGRpciBpcyBub3QgZGV0ZWN0ZWRcbiAgLy8gVE9ETzogVXNlIFJlYWN0IGZsb2F0IEFQSXMgdG8gbG9hZCBzdHlsZXMgb25jZSBhdmFpbGFibGUgZm9yIHBhZ2VzIGRpclxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBsZXQgaGVhZCA9IGRvY3VtZW50LmhlYWRcbiAgICBzdHlsZXNoZWV0cy5mb3JFYWNoKChzdHlsZXNoZWV0OiBzdHJpbmcpID0+IHtcbiAgICAgIGxldCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpXG5cbiAgICAgIGxpbmsudHlwZSA9ICd0ZXh0L2NzcydcbiAgICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnXG4gICAgICBsaW5rLmhyZWYgPSBzdHlsZXNoZWV0XG5cbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluaylcbiAgICB9KVxuICB9XG59XG5cbmNvbnN0IGxvYWRTY3JpcHQgPSAocHJvcHM6IFNjcmlwdFByb3BzKTogdm9pZCA9PiB7XG4gIGNvbnN0IHtcbiAgICBzcmMsXG4gICAgaWQsXG4gICAgb25Mb2FkID0gKCkgPT4ge30sXG4gICAgb25SZWFkeSA9IG51bGwsXG4gICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsXG4gICAgY2hpbGRyZW4gPSAnJyxcbiAgICBzdHJhdGVneSA9ICdhZnRlckludGVyYWN0aXZlJyxcbiAgICBvbkVycm9yLFxuICAgIHN0eWxlc2hlZXRzLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBjYWNoZUtleSA9IGlkIHx8IHNyY1xuXG4gIC8vIFNjcmlwdCBoYXMgYWxyZWFkeSBsb2FkZWRcbiAgaWYgKGNhY2hlS2V5ICYmIExvYWRDYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBDb250ZW50cyBvZiB0aGlzIHNjcmlwdCBhcmUgYWxyZWFkeSBsb2FkaW5nL2xvYWRlZFxuICBpZiAoU2NyaXB0Q2FjaGUuaGFzKHNyYykpIHtcbiAgICBMb2FkQ2FjaGUuYWRkKGNhY2hlS2V5KVxuICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgbXVsdGlwbGUgYG5leHQvc2NyaXB0YCBjb21wb25lbnRzIGFsbCBoYXZlIHNhbWUgXCJzcmNcIiwgYnV0IGhhcyBkaWZmZXJlbnQgXCJvbkxvYWRcIlxuICAgIC8vIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoZSBzYW1lIHJlbW90ZSBzY3JpcHQgd2lsbCBvbmx5IGxvYWQgb25jZSwgYnV0IFwib25Mb2FkXCIgYXJlIGV4ZWN1dGVkIGluIG9yZGVyXG4gICAgU2NyaXB0Q2FjaGUuZ2V0KHNyYykudGhlbihvbkxvYWQsIG9uRXJyb3IpXG4gICAgcmV0dXJuXG4gIH1cblxuICAvKiogRXhlY3V0ZSBhZnRlciB0aGUgc2NyaXB0IGZpcnN0IGxvYWRlZCAqL1xuICBjb25zdCBhZnRlckxvYWQgPSAoKSA9PiB7XG4gICAgLy8gUnVuIG9uUmVhZHkgZm9yIHRoZSBmaXJzdCB0aW1lIGFmdGVyIGxvYWQgZXZlbnRcbiAgICBpZiAob25SZWFkeSkge1xuICAgICAgb25SZWFkeSgpXG4gICAgfVxuICAgIC8vIGFkZCBjYWNoZUtleSB0byBMb2FkQ2FjaGUgd2hlbiBsb2FkIHN1Y2Nlc3NmdWxseVxuICAgIExvYWRDYWNoZS5hZGQoY2FjaGVLZXkpXG4gIH1cblxuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpXG5cbiAgY29uc3QgbG9hZFByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXNvbHZlKClcbiAgICAgIGlmIChvbkxvYWQpIHtcbiAgICAgICAgb25Mb2FkLmNhbGwodGhpcywgZSlcbiAgICAgIH1cbiAgICAgIGFmdGVyTG9hZCgpXG4gICAgfSlcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICByZWplY3QoZSlcbiAgICB9KVxuICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvbkVycm9yKSB7XG4gICAgICBvbkVycm9yKGUpXG4gICAgfVxuICB9KVxuXG4gIGlmIChkYW5nZXJvdXNseVNldElubmVySFRNTCkge1xuICAgIC8vIENhc3Rpbmcgc2luY2UgbGliLmRvbS5kLnRzIGRvZXNuJ3QgaGF2ZSBUcnVzdGVkSFRNTCB5ZXQuXG4gICAgZWwuaW5uZXJIVE1MID0gKGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCBhcyBzdHJpbmcpIHx8ICcnXG5cbiAgICBhZnRlckxvYWQoKVxuICB9IGVsc2UgaWYgKGNoaWxkcmVuKSB7XG4gICAgZWwudGV4dENvbnRlbnQgPVxuICAgICAgdHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGNoaWxkcmVuXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZHJlbilcbiAgICAgICAgICA/IGNoaWxkcmVuLmpvaW4oJycpXG4gICAgICAgICAgOiAnJ1xuXG4gICAgYWZ0ZXJMb2FkKClcbiAgfSBlbHNlIGlmIChzcmMpIHtcbiAgICBlbC5zcmMgPSBzcmNcbiAgICAvLyBkbyBub3QgYWRkIGNhY2hlS2V5IGludG8gTG9hZENhY2hlIGZvciByZW1vdGUgc2NyaXB0IGhlcmVcbiAgICAvLyBjYWNoZUtleSB3aWxsIGJlIGFkZGVkIHRvIExvYWRDYWNoZSB3aGVuIGl0IGlzIGFjdHVhbGx5IGxvYWRlZCAoc2VlIGxvYWRQcm9taXNlIGFib3ZlKVxuXG4gICAgU2NyaXB0Q2FjaGUuc2V0KHNyYywgbG9hZFByb21pc2UpXG4gIH1cblxuICBzZXRBdHRyaWJ1dGVzRnJvbVByb3BzKGVsLCBwcm9wcylcblxuICBpZiAoc3RyYXRlZ3kgPT09ICd3b3JrZXInKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvcGFydHl0b3duJylcbiAgfVxuXG4gIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS1uc2NyaXB0Jywgc3RyYXRlZ3kpXG5cbiAgLy8gTG9hZCBzdHlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2NyaXB0XG4gIGlmIChzdHlsZXNoZWV0cykge1xuICAgIGluc2VydFN0eWxlc2hlZXRzKHN0eWxlc2hlZXRzKVxuICB9XG5cbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUNsaWVudFNjcmlwdExvYWQocHJvcHM6IFNjcmlwdFByb3BzKSB7XG4gIGNvbnN0IHsgc3RyYXRlZ3kgPSAnYWZ0ZXJJbnRlcmFjdGl2ZScgfSA9IHByb3BzXG4gIGlmIChzdHJhdGVneSA9PT0gJ2xhenlPbmxvYWQnKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XG4gICAgICByZXF1ZXN0SWRsZUNhbGxiYWNrKCgpID0+IGxvYWRTY3JpcHQocHJvcHMpKVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgbG9hZFNjcmlwdChwcm9wcylcbiAgfVxufVxuXG5mdW5jdGlvbiBsb2FkTGF6eVNjcmlwdChwcm9wczogU2NyaXB0UHJvcHMpIHtcbiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICByZXF1ZXN0SWRsZUNhbGxiYWNrKCgpID0+IGxvYWRTY3JpcHQocHJvcHMpKVxuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xuICAgICAgcmVxdWVzdElkbGVDYWxsYmFjaygoKSA9PiBsb2FkU2NyaXB0KHByb3BzKSlcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEJlZm9yZUludGVyYWN0aXZlVG9DYWNoZSgpIHtcbiAgY29uc3Qgc2NyaXB0cyA9IFtcbiAgICAuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1uc2NyaXB0PVwiYmVmb3JlSW50ZXJhY3RpdmVcIl0nKSxcbiAgICAuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1uc2NyaXB0PVwiYmVmb3JlUGFnZVJlbmRlclwiXScpLFxuICBdXG4gIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBzY3JpcHQuaWQgfHwgc2NyaXB0LmdldEF0dHJpYnV0ZSgnc3JjJylcbiAgICBMb2FkQ2FjaGUuYWRkKGNhY2hlS2V5KVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdFNjcmlwdExvYWRlcihzY3JpcHRMb2FkZXJJdGVtczogU2NyaXB0UHJvcHNbXSkge1xuICBzY3JpcHRMb2FkZXJJdGVtcy5mb3JFYWNoKGhhbmRsZUNsaWVudFNjcmlwdExvYWQpXG4gIGFkZEJlZm9yZUludGVyYWN0aXZlVG9DYWNoZSgpXG59XG5cbi8qKlxuICogTG9hZCBhIHRoaXJkLXBhcnR5IHNjcmlwdHMgaW4gYW4gb3B0aW1pemVkIHdheS5cbiAqXG4gKiBSZWFkIG1vcmU6IFtOZXh0LmpzIERvY3M6IGBuZXh0L3NjcmlwdGBdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2NvbXBvbmVudHMvc2NyaXB0KVxuICovXG5mdW5jdGlvbiBTY3JpcHQocHJvcHM6IFNjcmlwdFByb3BzKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHNyYyA9ICcnLFxuICAgIG9uTG9hZCA9ICgpID0+IHt9LFxuICAgIG9uUmVhZHkgPSBudWxsLFxuICAgIHN0cmF0ZWd5ID0gJ2FmdGVySW50ZXJhY3RpdmUnLFxuICAgIG9uRXJyb3IsXG4gICAgc3R5bGVzaGVldHMsXG4gICAgLi4ucmVzdFByb3BzXG4gIH0gPSBwcm9wc1xuXG4gIC8vIENvbnRleHQgaXMgYXZhaWxhYmxlIG9ubHkgZHVyaW5nIFNTUlxuICBsZXQgeyB1cGRhdGVTY3JpcHRzLCBzY3JpcHRzLCBnZXRJc1NzciwgYXBwRGlyLCBub25jZSB9ID1cbiAgICB1c2VDb250ZXh0KEhlYWRNYW5hZ2VyQ29udGV4dClcblxuICAvLyBpZiBhIG5vbmNlIGlzIGV4cGxpY2l0bHkgcGFzc2VkIHRvIHRoZSBzY3JpcHQgdGFnLCBmYXZvciB0aGF0IG92ZXIgdGhlIGF1dG9tYXRpYyBoYW5kbGluZ1xuICBub25jZSA9IHJlc3RQcm9wcy5ub25jZSB8fCBub25jZVxuXG4gIC8qKlxuICAgKiAtIEZpcnN0IG1vdW50OlxuICAgKiAgIDEuIFRoZSB1c2VFZmZlY3QgZm9yIG9uUmVhZHkgZXhlY3V0ZXNcbiAgICogICAyLiBoYXNPblJlYWR5RWZmZWN0Q2FsbGVkLmN1cnJlbnQgaXMgZmFsc2UsIGJ1dCB0aGUgc2NyaXB0IGhhc24ndCBsb2FkZWQgeWV0IChub3QgaW4gTG9hZENhY2hlKVxuICAgKiAgICAgIG9uUmVhZHkgaXMgc2tpcHBlZCwgc2V0IGhhc09uUmVhZHlFZmZlY3RDYWxsZWQuY3VycmVudCB0byB0cnVlXG4gICAqICAgMy4gVGhlIHVzZUVmZmVjdCBmb3IgbG9hZFNjcmlwdCBleGVjdXRlc1xuICAgKiAgIDQuIGhhc0xvYWRTY3JpcHRFZmZlY3RDYWxsZWQuY3VycmVudCBpcyBmYWxzZSwgbG9hZFNjcmlwdCBleGVjdXRlc1xuICAgKiAgICAgIE9uY2UgdGhlIHNjcmlwdCBpcyBsb2FkZWQsIHRoZSBvbkxvYWQgYW5kIG9uUmVhZHkgd2lsbCBiZSBjYWxsZWQgYnkgdGhlblxuICAgKiAgIFtJZiBzdHJpY3QgbW9kZSBpcyBlbmFibGVkIC8gaXMgd3JhcHBlZCBpbiA8T2ZmU2NyZWVuIC8+IGNvbXBvbmVudF1cbiAgICogICA1LiBUaGUgdXNlRWZmZWN0IGZvciBvblJlYWR5IGV4ZWN1dGVzIGFnYWluXG4gICAqICAgNi4gaGFzT25SZWFkeUVmZmVjdENhbGxlZC5jdXJyZW50IGlzIHRydWUsIHNvIGVudGlyZSBlZmZlY3QgaXMgc2tpcHBlZFxuICAgKiAgIDcuIFRoZSB1c2VFZmZlY3QgZm9yIGxvYWRTY3JpcHQgZXhlY3V0ZXMgYWdhaW5cbiAgICogICA4LiBoYXNMb2FkU2NyaXB0RWZmZWN0Q2FsbGVkLmN1cnJlbnQgaXMgdHJ1ZSwgc28gZW50aXJlIGVmZmVjdCBpcyBza2lwcGVkXG4gICAqXG4gICAqIC0gU2Vjb25kIG1vdW50OlxuICAgKiAgIDEuIFRoZSB1c2VFZmZlY3QgZm9yIG9uUmVhZHkgZXhlY3V0ZXNcbiAgICogICAyLiBoYXNPblJlYWR5RWZmZWN0Q2FsbGVkLmN1cnJlbnQgaXMgZmFsc2UsIGJ1dCB0aGUgc2NyaXB0IGhhcyBhbHJlYWR5IGxvYWRlZCAoZm91bmQgaW4gTG9hZENhY2hlKVxuICAgKiAgICAgIG9uUmVhZHkgaXMgY2FsbGVkLCBzZXQgaGFzT25SZWFkeUVmZmVjdENhbGxlZC5jdXJyZW50IHRvIHRydWVcbiAgICogICAzLiBUaGUgdXNlRWZmZWN0IGZvciBsb2FkU2NyaXB0IGV4ZWN1dGVzXG4gICAqICAgNC4gVGhlIHNjcmlwdCBpcyBhbHJlYWR5IGxvYWRlZCwgbG9hZFNjcmlwdCBiYWlscyBvdXRcbiAgICogICBbSWYgc3RyaWN0IG1vZGUgaXMgZW5hYmxlZCAvIGlzIHdyYXBwZWQgaW4gPE9mZlNjcmVlbiAvPiBjb21wb25lbnRdXG4gICAqICAgNS4gVGhlIHVzZUVmZmVjdCBmb3Igb25SZWFkeSBleGVjdXRlcyBhZ2FpblxuICAgKiAgIDYuIGhhc09uUmVhZHlFZmZlY3RDYWxsZWQuY3VycmVudCBpcyB0cnVlLCBzbyBlbnRpcmUgZWZmZWN0IGlzIHNraXBwZWRcbiAgICogICA3LiBUaGUgdXNlRWZmZWN0IGZvciBsb2FkU2NyaXB0IGV4ZWN1dGVzIGFnYWluXG4gICAqICAgOC4gaGFzTG9hZFNjcmlwdEVmZmVjdENhbGxlZC5jdXJyZW50IGlzIHRydWUsIHNvIGVudGlyZSBlZmZlY3QgaXMgc2tpcHBlZFxuICAgKi9cbiAgY29uc3QgaGFzT25SZWFkeUVmZmVjdENhbGxlZCA9IHVzZVJlZihmYWxzZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gaWQgfHwgc3JjXG4gICAgaWYgKCFoYXNPblJlYWR5RWZmZWN0Q2FsbGVkLmN1cnJlbnQpIHtcbiAgICAgIC8vIFJ1biBvblJlYWR5IGlmIHNjcmlwdCBoYXMgbG9hZGVkIGJlZm9yZSBidXQgY29tcG9uZW50IGlzIHJlLW1vdW50ZWRcbiAgICAgIGlmIChvblJlYWR5ICYmIGNhY2hlS2V5ICYmIExvYWRDYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICAgIG9uUmVhZHkoKVxuICAgICAgfVxuXG4gICAgICBoYXNPblJlYWR5RWZmZWN0Q2FsbGVkLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICB9LCBbb25SZWFkeSwgaWQsIHNyY10pXG5cbiAgY29uc3QgaGFzTG9hZFNjcmlwdEVmZmVjdENhbGxlZCA9IHVzZVJlZihmYWxzZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaGFzTG9hZFNjcmlwdEVmZmVjdENhbGxlZC5jdXJyZW50KSB7XG4gICAgICBpZiAoc3RyYXRlZ3kgPT09ICdhZnRlckludGVyYWN0aXZlJykge1xuICAgICAgICBsb2FkU2NyaXB0KHByb3BzKVxuICAgICAgfSBlbHNlIGlmIChzdHJhdGVneSA9PT0gJ2xhenlPbmxvYWQnKSB7XG4gICAgICAgIGxvYWRMYXp5U2NyaXB0KHByb3BzKVxuICAgICAgfVxuXG4gICAgICBoYXNMb2FkU2NyaXB0RWZmZWN0Q2FsbGVkLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICB9LCBbcHJvcHMsIHN0cmF0ZWd5XSlcblxuICBpZiAoc3RyYXRlZ3kgPT09ICdiZWZvcmVJbnRlcmFjdGl2ZScgfHwgc3RyYXRlZ3kgPT09ICd3b3JrZXInKSB7XG4gICAgaWYgKHVwZGF0ZVNjcmlwdHMpIHtcbiAgICAgIHNjcmlwdHNbc3RyYXRlZ3ldID0gKHNjcmlwdHNbc3RyYXRlZ3ldIHx8IFtdKS5jb25jYXQoW1xuICAgICAgICB7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgc3JjLFxuICAgICAgICAgIG9uTG9hZCxcbiAgICAgICAgICBvblJlYWR5LFxuICAgICAgICAgIG9uRXJyb3IsXG4gICAgICAgICAgLi4ucmVzdFByb3BzLFxuICAgICAgICAgIG5vbmNlLFxuICAgICAgICB9LFxuICAgICAgXSlcbiAgICAgIHVwZGF0ZVNjcmlwdHMoc2NyaXB0cylcbiAgICB9IGVsc2UgaWYgKGdldElzU3NyICYmIGdldElzU3NyKCkpIHtcbiAgICAgIC8vIFNjcmlwdCBoYXMgYWxyZWFkeSBsb2FkZWQgZHVyaW5nIFNTUlxuICAgICAgTG9hZENhY2hlLmFkZChpZCB8fCBzcmMpXG4gICAgfSBlbHNlIGlmIChnZXRJc1NzciAmJiAhZ2V0SXNTc3IoKSkge1xuICAgICAgbG9hZFNjcmlwdCh7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICBub25jZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLy8gRm9yIHRoZSBhcHAgZGlyZWN0b3J5LCB3ZSBuZWVkIFJlYWN0IEZsb2F0IHRvIHByZWxvYWQgdGhlc2Ugc2NyaXB0cy5cbiAgaWYgKGFwcERpcikge1xuICAgIC8vIEluamVjdGluZyBzdHlsZXNoZWV0cyBoZXJlIGhhbmRsZXMgYmVmb3JlSW50ZXJhY3RpdmUgYW5kIHdvcmtlciBzY3JpcHRzIGNvcnJlY3RseVxuICAgIC8vIEZvciBvdGhlciBzdHJhdGVnaWVzIGluamVjdGluZyBoZXJlIGVuc3VyZXMgY29ycmVjdCBzdHlsZXNoZWV0IG9yZGVyXG4gICAgLy8gUmVhY3RET00ucHJlaW5pdCBoYW5kbGVzIGxvYWRpbmcgdGhlIHN0eWxlcyBpbiB0aGUgY29ycmVjdCBvcmRlcixcbiAgICAvLyBhbHNvIGVuc3VyZXMgdGhlIHN0eWxlc2hlZXQgaXMgbG9hZGVkIG9ubHkgb25jZSBhbmQgaW4gYSBjb25zaXN0ZW50IG1hbm5lclxuICAgIC8vXG4gICAgLy8gQ2FzZSAxOiBTdHlsZXMgZm9yIGJlZm9yZUludGVyYWN0aXZlL3dvcmtlciB3aXRoIGFwcERpciAtIGhhbmRsZWQgaGVyZVxuICAgIC8vIENhc2UgMjogU3R5bGVzIGZvciBiZWZvcmVJbnRlcmFjdGl2ZS93b3JrZXIgd2l0aCBwYWdlcyBkaXIgLSBOb3QgaGFuZGxlZCB5ZXRcbiAgICAvLyBDYXNlIDM6IFN0eWxlcyBmb3IgYWZ0ZXJJbnRlcmFjdGl2ZS9sYXp5T25sb2FkIHdpdGggYXBwRGlyIC0gaGFuZGxlZCBoZXJlXG4gICAgLy8gQ2FzZSA0OiBTdHlsZXMgZm9yIGFmdGVySW50ZXJhY3RpdmUvbGF6eU9ubG9hZCB3aXRoIHBhZ2VzIGRpciAtIGhhbmRsZWQgaW4gaW5zZXJ0U3R5bGVzaGVldHMgZnVuY3Rpb25cbiAgICBpZiAoc3R5bGVzaGVldHMpIHtcbiAgICAgIHN0eWxlc2hlZXRzLmZvckVhY2goKHN0eWxlU3JjKSA9PiB7XG4gICAgICAgIFJlYWN0RE9NLnByZWluaXQoc3R5bGVTcmMsIHsgYXM6ICdzdHlsZScgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gQmVmb3JlIGludGVyYWN0aXZlIHNjcmlwdHMgbmVlZCB0byBiZSBsb2FkZWQgYnkgTmV4dC5qcycgcnVudGltZSBpbnN0ZWFkXG4gICAgLy8gb2YgbmF0aXZlIDxzY3JpcHQ+IHRhZ3MsIGJlY2F1c2UgdGhleSBubyBsb25nZXIgaGF2ZSBgZGVmZXJgLlxuICAgIGlmIChzdHJhdGVneSA9PT0gJ2JlZm9yZUludGVyYWN0aXZlJykge1xuICAgICAgaWYgKCFzcmMpIHtcbiAgICAgICAgLy8gRm9yIGlubGluZWQgc2NyaXB0cywgd2UgcHV0IHRoZSBjb250ZW50IGluIGBjaGlsZHJlbmAuXG4gICAgICAgIGlmIChyZXN0UHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpIHtcbiAgICAgICAgICAvLyBDYXN0aW5nIHNpbmNlIGxpYi5kb20uZC50cyBkb2Vzbid0IGhhdmUgVHJ1c3RlZEhUTUwgeWV0LlxuICAgICAgICAgIHJlc3RQcm9wcy5jaGlsZHJlbiA9IHJlc3RQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTFxuICAgICAgICAgICAgLl9faHRtbCBhcyBzdHJpbmdcbiAgICAgICAgICBkZWxldGUgcmVzdFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxzY3JpcHRcbiAgICAgICAgICAgIG5vbmNlPXtub25jZX1cbiAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICAgIF9faHRtbDogYChzZWxmLl9fbmV4dF9zPXNlbGYuX19uZXh0X3N8fFtdKS5wdXNoKCR7SlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgeyAuLi5yZXN0UHJvcHMsIGlkIH0sXG4gICAgICAgICAgICAgIF0pfSlgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIFJlYWN0RE9NLnByZWxvYWQoXG4gICAgICAgICAgc3JjLFxuICAgICAgICAgIHJlc3RQcm9wcy5pbnRlZ3JpdHlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGFzOiAnc2NyaXB0JyxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHJlc3RQcm9wcy5pbnRlZ3JpdHksXG4gICAgICAgICAgICAgICAgbm9uY2UsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc3RQcm9wcy5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7IGFzOiAnc2NyaXB0Jywgbm9uY2UsIGNyb3NzT3JpZ2luOiByZXN0UHJvcHMuY3Jvc3NPcmlnaW4gfVxuICAgICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPHNjcmlwdFxuICAgICAgICAgICAgbm9uY2U9e25vbmNlfVxuICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgICAgX19odG1sOiBgKHNlbGYuX19uZXh0X3M9c2VsZi5fX25leHRfc3x8W10pLnB1c2goJHtKU09OLnN0cmluZ2lmeShbXG4gICAgICAgICAgICAgICAgc3JjLFxuICAgICAgICAgICAgICAgIHsgLi4ucmVzdFByb3BzLCBpZCB9LFxuICAgICAgICAgICAgICBdKX0pYCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RyYXRlZ3kgPT09ICdhZnRlckludGVyYWN0aXZlJykge1xuICAgICAgaWYgKHNyYykge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIFJlYWN0RE9NLnByZWxvYWQoXG4gICAgICAgICAgc3JjLFxuICAgICAgICAgIHJlc3RQcm9wcy5pbnRlZ3JpdHlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGFzOiAnc2NyaXB0JyxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHJlc3RQcm9wcy5pbnRlZ3JpdHksXG4gICAgICAgICAgICAgICAgbm9uY2UsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc3RQcm9wcy5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7IGFzOiAnc2NyaXB0Jywgbm9uY2UsIGNyb3NzT3JpZ2luOiByZXN0UHJvcHMuY3Jvc3NPcmlnaW4gfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjcmlwdCwgJ19fbmV4dFNjcmlwdCcsIHsgdmFsdWU6IHRydWUgfSlcblxuZXhwb3J0IGRlZmF1bHQgU2NyaXB0XG4iXSwibmFtZXMiOlsiaGFuZGxlQ2xpZW50U2NyaXB0TG9hZCIsImluaXRTY3JpcHRMb2FkZXIiLCJTY3JpcHRDYWNoZSIsIk1hcCIsIkxvYWRDYWNoZSIsIlNldCIsImluc2VydFN0eWxlc2hlZXRzIiwic3R5bGVzaGVldHMiLCJSZWFjdERPTSIsInByZWluaXQiLCJmb3JFYWNoIiwic3R5bGVzaGVldCIsImFzIiwid2luZG93IiwiaGVhZCIsImRvY3VtZW50IiwibGluayIsImNyZWF0ZUVsZW1lbnQiLCJ0eXBlIiwicmVsIiwiaHJlZiIsImFwcGVuZENoaWxkIiwibG9hZFNjcmlwdCIsInByb3BzIiwic3JjIiwiaWQiLCJvbkxvYWQiLCJvblJlYWR5IiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJjaGlsZHJlbiIsInN0cmF0ZWd5Iiwib25FcnJvciIsImNhY2hlS2V5IiwiaGFzIiwiYWRkIiwiZ2V0IiwidGhlbiIsImFmdGVyTG9hZCIsImVsIiwibG9hZFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwiY2FsbCIsImNhdGNoIiwiaW5uZXJIVE1MIiwiX19odG1sIiwidGV4dENvbnRlbnQiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwic2V0Iiwic2V0QXR0cmlidXRlc0Zyb21Qcm9wcyIsInNldEF0dHJpYnV0ZSIsImJvZHkiLCJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwibG9hZExhenlTY3JpcHQiLCJyZWFkeVN0YXRlIiwiYWRkQmVmb3JlSW50ZXJhY3RpdmVUb0NhY2hlIiwic2NyaXB0cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzY3JpcHQiLCJnZXRBdHRyaWJ1dGUiLCJzY3JpcHRMb2FkZXJJdGVtcyIsIlNjcmlwdCIsInJlc3RQcm9wcyIsInVwZGF0ZVNjcmlwdHMiLCJnZXRJc1NzciIsImFwcERpciIsIm5vbmNlIiwidXNlQ29udGV4dCIsIkhlYWRNYW5hZ2VyQ29udGV4dCIsImhhc09uUmVhZHlFZmZlY3RDYWxsZWQiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJjdXJyZW50IiwiaGFzTG9hZFNjcmlwdEVmZmVjdENhbGxlZCIsImNvbmNhdCIsInN0eWxlU3JjIiwiSlNPTiIsInN0cmluZ2lmeSIsInByZWxvYWQiLCJpbnRlZ3JpdHkiLCJjcm9zc09yaWdpbiIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/script.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/set-attributes-from-props.js":
/*!***********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/set-attributes-from-props.js ***!
\***********************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"setAttributesFromProps\", ({\n enumerable: true,\n get: function() {\n return setAttributesFromProps;\n }\n}));\nconst DOMAttributeNames = {\n acceptCharset: 'accept-charset',\n className: 'class',\n htmlFor: 'for',\n httpEquiv: 'http-equiv',\n noModule: 'noModule'\n};\nconst ignoreProps = [\n 'onLoad',\n 'onReady',\n 'dangerouslySetInnerHTML',\n 'children',\n 'onError',\n 'strategy',\n 'stylesheets'\n];\nfunction isBooleanScriptAttribute(attr) {\n return [\n 'async',\n 'defer',\n 'noModule'\n ].includes(attr);\n}\nfunction setAttributesFromProps(el, props) {\n for (const [p, value] of Object.entries(props)){\n if (!props.hasOwnProperty(p)) continue;\n if (ignoreProps.includes(p)) continue;\n // we don't render undefined props to the DOM\n if (value === undefined) {\n continue;\n }\n const attr = DOMAttributeNames[p] || p.toLowerCase();\n if (el.tagName === 'SCRIPT' && isBooleanScriptAttribute(attr)) {\n // Correctly assign boolean script attributes\n // https://github.com/vercel/next.js/pull/20748\n ;\n el[attr] = !!value;\n } else {\n el.setAttribute(attr, String(value));\n }\n // Remove falsy non-zero boolean attributes so they are correctly interpreted\n // (e.g. if we set them to false, this coerces to the string \"false\", which the browser interprets as true)\n if (value === false || el.tagName === 'SCRIPT' && isBooleanScriptAttribute(attr) && (!value || value === 'false')) {\n // Call setAttribute before, as we need to set and unset the attribute to override force async:\n // https://html.spec.whatwg.org/multipage/scripting.html#script-force-async\n el.setAttribute(attr, '');\n el.removeAttribute(attr);\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=set-attributes-from-props.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3NldC1hdHRyaWJ1dGVzLWZyb20tcHJvcHMuanMiLCJtYXBwaW5ncyI6Ijs7OzswREF3QmdCQTs7O2VBQUFBOzs7QUF4QmhCLE1BQU1DLG9CQUE0QztJQUNoREMsZUFBZTtJQUNmQyxXQUFXO0lBQ1hDLFNBQVM7SUFDVEMsV0FBVztJQUNYQyxVQUFVO0FBQ1o7QUFFQSxNQUFNQyxjQUFjO0lBQ2xCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFRCxTQUFTQyx5QkFDUEMsSUFBWTtJQUVaLE9BQU87UUFBQztRQUFTO1FBQVM7S0FBVyxDQUFDQyxRQUFRLENBQUNEO0FBQ2pEO0FBRU8sU0FBU1QsdUJBQXVCVyxFQUFlLEVBQUVDLEtBQWE7SUFDbkUsS0FBSyxNQUFNLENBQUNDLEdBQUdDLE1BQU0sSUFBSUMsT0FBT0MsT0FBTyxDQUFDSixPQUFRO1FBQzlDLElBQUksQ0FBQ0EsTUFBTUssY0FBYyxDQUFDSixJQUFJO1FBQzlCLElBQUlOLFlBQVlHLFFBQVEsQ0FBQ0csSUFBSTtRQUU3Qiw2Q0FBNkM7UUFDN0MsSUFBSUMsVUFBVUksV0FBVztZQUN2QjtRQUNGO1FBRUEsTUFBTVQsT0FBT1IsaUJBQWlCLENBQUNZLEVBQUUsSUFBSUEsRUFBRU0sV0FBVztRQUVsRCxJQUFJUixHQUFHUyxPQUFPLEtBQUssWUFBWVoseUJBQXlCQyxPQUFPO1lBQzdELDZDQUE2QztZQUM3QywrQ0FBK0M7O1lBQzdDRSxFQUF3QixDQUFDRixLQUFLLEdBQUcsQ0FBQyxDQUFDSztRQUN2QyxPQUFPO1lBQ0xILEdBQUdVLFlBQVksQ0FBQ1osTUFBTWEsT0FBT1I7UUFDL0I7UUFFQSw2RUFBNkU7UUFDN0UsMkdBQTJHO1FBQzNHLElBQ0VBLFVBQVUsU0FDVEgsR0FBR1MsT0FBTyxLQUFLLFlBQ2RaLHlCQUF5QkMsU0FDeEIsRUFBQ0ssU0FBU0EsVUFBVSxRQUFNLEVBQzdCO1lBQ0EsK0ZBQStGO1lBQy9GLDJFQUEyRTtZQUMzRUgsR0FBR1UsWUFBWSxDQUFDWixNQUFNO1lBQ3RCRSxHQUFHWSxlQUFlLENBQUNkO1FBQ3JCO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvc2V0LWF0dHJpYnV0ZXMtZnJvbS1wcm9wcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBET01BdHRyaWJ1dGVOYW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgYWNjZXB0Q2hhcnNldDogJ2FjY2VwdC1jaGFyc2V0JyxcbiAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICBodG1sRm9yOiAnZm9yJyxcbiAgaHR0cEVxdWl2OiAnaHR0cC1lcXVpdicsXG4gIG5vTW9kdWxlOiAnbm9Nb2R1bGUnLFxufVxuXG5jb25zdCBpZ25vcmVQcm9wcyA9IFtcbiAgJ29uTG9hZCcsXG4gICdvblJlYWR5JyxcbiAgJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJyxcbiAgJ2NoaWxkcmVuJyxcbiAgJ29uRXJyb3InLFxuICAnc3RyYXRlZ3knLFxuICAnc3R5bGVzaGVldHMnLFxuXVxuXG5mdW5jdGlvbiBpc0Jvb2xlYW5TY3JpcHRBdHRyaWJ1dGUoXG4gIGF0dHI6IHN0cmluZ1xuKTogYXR0ciBpcyAnYXN5bmMnIHwgJ2RlZmVyJyB8ICdub01vZHVsZScge1xuICByZXR1cm4gWydhc3luYycsICdkZWZlcicsICdub01vZHVsZSddLmluY2x1ZGVzKGF0dHIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBdHRyaWJ1dGVzRnJvbVByb3BzKGVsOiBIVE1MRWxlbWVudCwgcHJvcHM6IG9iamVjdCkge1xuICBmb3IgKGNvbnN0IFtwLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcHMpKSB7XG4gICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShwKSkgY29udGludWVcbiAgICBpZiAoaWdub3JlUHJvcHMuaW5jbHVkZXMocCkpIGNvbnRpbnVlXG5cbiAgICAvLyB3ZSBkb24ndCByZW5kZXIgdW5kZWZpbmVkIHByb3BzIHRvIHRoZSBET01cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBhdHRyID0gRE9NQXR0cmlidXRlTmFtZXNbcF0gfHwgcC50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAoZWwudGFnTmFtZSA9PT0gJ1NDUklQVCcgJiYgaXNCb29sZWFuU2NyaXB0QXR0cmlidXRlKGF0dHIpKSB7XG4gICAgICAvLyBDb3JyZWN0bHkgYXNzaWduIGJvb2xlYW4gc2NyaXB0IGF0dHJpYnV0ZXNcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9wdWxsLzIwNzQ4XG4gICAgICA7KGVsIGFzIEhUTUxTY3JpcHRFbGVtZW50KVthdHRyXSA9ICEhdmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKGF0dHIsIFN0cmluZyh2YWx1ZSkpXG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGZhbHN5IG5vbi16ZXJvIGJvb2xlYW4gYXR0cmlidXRlcyBzbyB0aGV5IGFyZSBjb3JyZWN0bHkgaW50ZXJwcmV0ZWRcbiAgICAvLyAoZS5nLiBpZiB3ZSBzZXQgdGhlbSB0byBmYWxzZSwgdGhpcyBjb2VyY2VzIHRvIHRoZSBzdHJpbmcgXCJmYWxzZVwiLCB3aGljaCB0aGUgYnJvd3NlciBpbnRlcnByZXRzIGFzIHRydWUpXG4gICAgaWYgKFxuICAgICAgdmFsdWUgPT09IGZhbHNlIHx8XG4gICAgICAoZWwudGFnTmFtZSA9PT0gJ1NDUklQVCcgJiZcbiAgICAgICAgaXNCb29sZWFuU2NyaXB0QXR0cmlidXRlKGF0dHIpICYmXG4gICAgICAgICghdmFsdWUgfHwgdmFsdWUgPT09ICdmYWxzZScpKVxuICAgICkge1xuICAgICAgLy8gQ2FsbCBzZXRBdHRyaWJ1dGUgYmVmb3JlLCBhcyB3ZSBuZWVkIHRvIHNldCBhbmQgdW5zZXQgdGhlIGF0dHJpYnV0ZSB0byBvdmVycmlkZSBmb3JjZSBhc3luYzpcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NjcmlwdC1mb3JjZS1hc3luY1xuICAgICAgZWwuc2V0QXR0cmlidXRlKGF0dHIsICcnKVxuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIpXG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOlsic2V0QXR0cmlidXRlc0Zyb21Qcm9wcyIsIkRPTUF0dHJpYnV0ZU5hbWVzIiwiYWNjZXB0Q2hhcnNldCIsImNsYXNzTmFtZSIsImh0bWxGb3IiLCJodHRwRXF1aXYiLCJub01vZHVsZSIsImlnbm9yZVByb3BzIiwiaXNCb29sZWFuU2NyaXB0QXR0cmlidXRlIiwiYXR0ciIsImluY2x1ZGVzIiwiZWwiLCJwcm9wcyIsInAiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJoYXNPd25Qcm9wZXJ0eSIsInVuZGVmaW5lZCIsInRvTG93ZXJDYXNlIiwidGFnTmFtZSIsInNldEF0dHJpYnV0ZSIsIlN0cmluZyIsInJlbW92ZUF0dHJpYnV0ZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/set-attributes-from-props.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/tracing/report-to-socket.js":
/*!**********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/tracing/report-to-socket.js ***!
\**********************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return reportToSocket;\n }\n}));\nconst _websocket = __webpack_require__(/*! ../dev/hot-reloader/pages/websocket */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js\");\nfunction reportToSocket(span) {\n if (span.state.state !== 'ended') {\n throw Object.defineProperty(new Error('Expected span to be ended'), \"__NEXT_ERROR_CODE\", {\n value: \"E302\",\n enumerable: false,\n configurable: true\n });\n }\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'span-end',\n startTime: span.startTime,\n endTime: span.state.endTime,\n spanName: span.name,\n attributes: span.attributes\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=report-to-socket.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3RyYWNpbmcvcmVwb3J0LXRvLXNvY2tldC5qcyIsIm1hcHBpbmdzIjoiOzs7OzJDQUdBOzs7ZUFBd0JBOzs7dUNBSEk7QUFHYixTQUFTQSxlQUFlQyxJQUFVO0lBQy9DLElBQUlBLEtBQUtDLEtBQUssQ0FBQ0EsS0FBSyxLQUFLLFNBQVM7UUFDaEMsTUFBTSxxQkFBc0MsQ0FBdEMsSUFBSUMsTUFBTSw4QkFBVjttQkFBQTt3QkFBQTswQkFBQTtRQUFxQztJQUM3QztJQUVBQyxDQUFBQSxHQUFBQSxXQUFBQSxXQUFBQSxFQUNFQyxLQUFLQyxTQUFTLENBQUM7UUFDYkMsT0FBTztRQUNQQyxXQUFXUCxLQUFLTyxTQUFTO1FBQ3pCQyxTQUFTUixLQUFLQyxLQUFLLENBQUNPLE9BQU87UUFDM0JDLFVBQVVULEtBQUtVLElBQUk7UUFDbkJDLFlBQVlYLEtBQUtXLFVBQVU7SUFDN0I7QUFFSiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvc3JjL2NsaWVudC90cmFjaW5nL3JlcG9ydC10by1zb2NrZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2VuZE1lc3NhZ2UgfSBmcm9tICcuLi9kZXYvaG90LXJlbG9hZGVyL3BhZ2VzL3dlYnNvY2tldCdcbmltcG9ydCB0eXBlIHsgU3BhbiB9IGZyb20gJy4vdHJhY2VyJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXBvcnRUb1NvY2tldChzcGFuOiBTcGFuKSB7XG4gIGlmIChzcGFuLnN0YXRlLnN0YXRlICE9PSAnZW5kZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBzcGFuIHRvIGJlIGVuZGVkJylcbiAgfVxuXG4gIHNlbmRNZXNzYWdlKFxuICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGV2ZW50OiAnc3Bhbi1lbmQnLFxuICAgICAgc3RhcnRUaW1lOiBzcGFuLnN0YXJ0VGltZSxcbiAgICAgIGVuZFRpbWU6IHNwYW4uc3RhdGUuZW5kVGltZSxcbiAgICAgIHNwYW5OYW1lOiBzcGFuLm5hbWUsXG4gICAgICBhdHRyaWJ1dGVzOiBzcGFuLmF0dHJpYnV0ZXMsXG4gICAgfSlcbiAgKVxufVxuIl0sIm5hbWVzIjpbInJlcG9ydFRvU29ja2V0Iiwic3BhbiIsInN0YXRlIiwiRXJyb3IiLCJzZW5kTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudCIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJzcGFuTmFtZSIsIm5hbWUiLCJhdHRyaWJ1dGVzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/tracing/report-to-socket.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/tracing/tracer.js":
/*!************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/tracing/tracer.js ***!
\************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../shared/lib/mitt */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/mitt.js\"));\nclass Span {\n end(endTime) {\n if (this.state.state === 'ended') {\n throw Object.defineProperty(new Error('Span has already ended'), \"__NEXT_ERROR_CODE\", {\n value: \"E17\",\n enumerable: false,\n configurable: true\n });\n }\n this.state = {\n state: 'ended',\n endTime: endTime != null ? endTime : Date.now()\n };\n this.onSpanEnd(this);\n }\n constructor(name, options, onSpanEnd){\n this.name = name;\n var _options_attributes;\n this.attributes = (_options_attributes = options.attributes) != null ? _options_attributes : {};\n var _options_startTime;\n this.startTime = (_options_startTime = options.startTime) != null ? _options_startTime : Date.now();\n this.onSpanEnd = onSpanEnd;\n this.state = {\n state: 'inprogress'\n };\n }\n}\nclass Tracer {\n startSpan(name, options) {\n return new Span(name, options, this.handleSpanEnd);\n }\n onSpanEnd(cb) {\n this._emitter.on('spanend', cb);\n return ()=>{\n this._emitter.off('spanend', cb);\n };\n }\n constructor(){\n this._emitter = (0, _mitt.default)();\n this.handleSpanEnd = (span)=>{\n this._emitter.emit('spanend', span);\n };\n }\n}\nconst _default = new Tracer();\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=tracer.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3RyYWNpbmcvdHJhY2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7MkNBOEVBOzs7ZUFBQTs7OzsyRUE5RWlCO0FBeUJqQixNQUFNQTtJQW1CSkMsSUFBSUMsT0FBZ0IsRUFBRTtRQUNwQixJQUFJLElBQUksQ0FBQ0MsS0FBSyxDQUFDQSxLQUFLLEtBQUssU0FBUztZQUNoQyxNQUFNLHFCQUFtQyxDQUFuQyxJQUFJQyxNQUFNLDJCQUFWO3VCQUFBOzRCQUFBOzhCQUFBO1lBQWtDO1FBQzFDO1FBRUEsSUFBSSxDQUFDRCxLQUFLLEdBQUc7WUFDWEEsT0FBTztZQUNQRCxTQUFTQSxXQUFBQSxPQUFBQSxVQUFXRyxLQUFLQyxHQUFHO1FBQzlCO1FBRUEsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSTtJQUNyQjtJQXZCQUMsWUFDRUMsSUFBWSxFQUNaQyxPQUFvQixFQUNwQkgsU0FBK0IsQ0FDL0I7UUFDQSxJQUFJLENBQUNFLElBQUksR0FBR0E7WUFDTUM7UUFBbEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdELENBQUFBLHNCQUFBQSxRQUFRQyxVQUFBQSxLQUFVLE9BQWxCRCxzQkFBc0IsQ0FBQztZQUN4QkE7UUFBakIsSUFBSSxDQUFDRSxTQUFTLEdBQUdGLENBQUFBLHFCQUFBQSxRQUFRRSxTQUFBQSxLQUFTLE9BQWpCRixxQkFBcUJMLEtBQUtDLEdBQUc7UUFDOUMsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0osS0FBSyxHQUFHO1lBQUVBLE9BQU87UUFBYTtJQUNyQztBQWNGO0FBRUEsTUFBTVU7SUFPSkMsVUFBVUwsSUFBWSxFQUFFQyxPQUFvQixFQUFFO1FBQzVDLE9BQU8sSUFBSVYsS0FBS1MsTUFBTUMsU0FBUyxJQUFJLENBQUNLLGFBQWE7SUFDbkQ7SUFFQVIsVUFBVVMsRUFBeUIsRUFBYztRQUMvQyxJQUFJLENBQUNDLFFBQVEsQ0FBQ0MsRUFBRSxDQUFDLFdBQVdGO1FBQzVCLE9BQU87WUFDTCxJQUFJLENBQUNDLFFBQVEsQ0FBQ0UsR0FBRyxDQUFDLFdBQVdIO1FBQy9CO0lBQ0Y7O2FBZkFDLFFBQUFBLEdBQWdDRyxDQUFBQSxHQUFBQSxNQUFBQSxPQUFBQTthQUV4QkwsYUFBQUEsR0FBZ0IsQ0FBQ007WUFDdkIsSUFBSSxDQUFDSixRQUFRLENBQUNLLElBQUksQ0FBQyxXQUFXRDtRQUNoQzs7QUFZRjtNQUdBLFdBQWUsSUFBSVIiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL3NyYy9jbGllbnQvdHJhY2luZy90cmFjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1pdHQgZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9taXR0J1xuaW1wb3J0IHR5cGUgeyBNaXR0RW1pdHRlciB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvbWl0dCdcblxuZXhwb3J0IHR5cGUgU3Bhbk9wdGlvbnMgPSB7XG4gIHN0YXJ0VGltZT86IG51bWJlclxuICBhdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbn1cblxuZXhwb3J0IHR5cGUgU3BhblN0YXRlID1cbiAgfCB7XG4gICAgICBzdGF0ZTogJ2lucHJvZ3Jlc3MnXG4gICAgfVxuICB8IHtcbiAgICAgIHN0YXRlOiAnZW5kZWQnXG4gICAgICBlbmRUaW1lOiBudW1iZXJcbiAgICB9XG5cbmludGVyZmFjZSBJU3BhbiB7XG4gIG5hbWU6IHN0cmluZ1xuICBzdGFydFRpbWU6IG51bWJlclxuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBzdGF0ZTogU3BhblN0YXRlXG4gIGVuZChlbmRUaW1lPzogbnVtYmVyKTogdm9pZFxufVxuXG5jbGFzcyBTcGFuIGltcGxlbWVudHMgSVNwYW4ge1xuICBuYW1lOiBzdHJpbmdcbiAgc3RhcnRUaW1lOiBudW1iZXJcbiAgb25TcGFuRW5kOiAoc3BhbjogU3BhbikgPT4gdm9pZFxuICBzdGF0ZTogU3BhblN0YXRlXG4gIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFNwYW5PcHRpb25zLFxuICAgIG9uU3BhbkVuZDogKHNwYW46IFNwYW4pID0+IHZvaWRcbiAgKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMuYXR0cmlidXRlcyA9IG9wdGlvbnMuYXR0cmlidXRlcyA/PyB7fVxuICAgIHRoaXMuc3RhcnRUaW1lID0gb3B0aW9ucy5zdGFydFRpbWUgPz8gRGF0ZS5ub3coKVxuICAgIHRoaXMub25TcGFuRW5kID0gb25TcGFuRW5kXG4gICAgdGhpcy5zdGF0ZSA9IHsgc3RhdGU6ICdpbnByb2dyZXNzJyB9XG4gIH1cblxuICBlbmQoZW5kVGltZT86IG51bWJlcikge1xuICAgIGlmICh0aGlzLnN0YXRlLnN0YXRlID09PSAnZW5kZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NwYW4gaGFzIGFscmVhZHkgZW5kZWQnKVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0ZTogJ2VuZGVkJyxcbiAgICAgIGVuZFRpbWU6IGVuZFRpbWUgPz8gRGF0ZS5ub3coKSxcbiAgICB9XG5cbiAgICB0aGlzLm9uU3BhbkVuZCh0aGlzKVxuICB9XG59XG5cbmNsYXNzIFRyYWNlciB7XG4gIF9lbWl0dGVyOiBNaXR0RW1pdHRlcjxzdHJpbmc+ID0gbWl0dCgpXG5cbiAgcHJpdmF0ZSBoYW5kbGVTcGFuRW5kID0gKHNwYW46IFNwYW4pID0+IHtcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoJ3NwYW5lbmQnLCBzcGFuKVxuICB9XG5cbiAgc3RhcnRTcGFuKG5hbWU6IHN0cmluZywgb3B0aW9uczogU3Bhbk9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFNwYW4obmFtZSwgb3B0aW9ucywgdGhpcy5oYW5kbGVTcGFuRW5kKVxuICB9XG5cbiAgb25TcGFuRW5kKGNiOiAoc3BhbjogSVNwYW4pID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICB0aGlzLl9lbWl0dGVyLm9uKCdzcGFuZW5kJywgY2IpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMuX2VtaXR0ZXIub2ZmKCdzcGFuZW5kJywgY2IpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIHsgSVNwYW4gYXMgU3BhbiB9XG5leHBvcnQgZGVmYXVsdCBuZXcgVHJhY2VyKClcbiJdLCJuYW1lcyI6WyJTcGFuIiwiZW5kIiwiZW5kVGltZSIsInN0YXRlIiwiRXJyb3IiLCJEYXRlIiwibm93Iiwib25TcGFuRW5kIiwiY29uc3RydWN0b3IiLCJuYW1lIiwib3B0aW9ucyIsImF0dHJpYnV0ZXMiLCJzdGFydFRpbWUiLCJUcmFjZXIiLCJzdGFydFNwYW4iLCJoYW5kbGVTcGFuRW5kIiwiY2IiLCJfZW1pdHRlciIsIm9uIiwib2ZmIiwibWl0dCIsInNwYW4iLCJlbWl0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/tracing/tracer.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/trusted-types.js":
/*!***********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/trusted-types.js ***!
\***********************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/**\n * Stores the Trusted Types Policy. Starts as undefined and can be set to null\n * if Trusted Types is not supported in the browser.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"__unsafeCreateTrustedScriptURL\", ({\n enumerable: true,\n get: function() {\n return __unsafeCreateTrustedScriptURL;\n }\n}));\nlet policy;\n/**\n * Getter for the Trusted Types Policy. If it is undefined, it is instantiated\n * here or set to null if Trusted Types is not supported in the browser.\n */ function getPolicy() {\n if (typeof policy === 'undefined' && \"object\" !== 'undefined') {\n var _window_trustedTypes;\n policy = ((_window_trustedTypes = window.trustedTypes) == null ? void 0 : _window_trustedTypes.createPolicy('nextjs', {\n createHTML: (input)=>input,\n createScript: (input)=>input,\n createScriptURL: (input)=>input\n })) || null;\n }\n return policy;\n}\nfunction __unsafeCreateTrustedScriptURL(url) {\n var _getPolicy;\n return ((_getPolicy = getPolicy()) == null ? void 0 : _getPolicy.createScriptURL(url)) || url;\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=trusted-types.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3RydXN0ZWQtdHlwZXMuanMiLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDOzs7O2tFQTZCZUE7OztlQUFBQTs7O0FBNUJoQixJQUFJQztBQUVKOzs7Q0FHQyxHQUNELFNBQVNDO0lBQ1AsSUFBSSxPQUFPRCxXQUFXLGVBQWUsT0FBT0UsTUFBVyxhQUFhO1lBRWhFQTtRQURGRixTQUNFRSxDQUFBQSxDQUFBQSx1QkFBQUEsT0FBT0MsWUFBQUEsS0FBWSxnQkFBbkJELHFCQUFxQkUsWUFBWSxDQUFDLFVBQVU7WUFDMUNDLFlBQVksQ0FBQ0MsUUFBVUE7WUFDdkJDLGNBQWMsQ0FBQ0QsUUFBVUE7WUFDekJFLGlCQUFpQixDQUFDRixRQUFVQTtRQUM5QixPQUFNO0lBQ1Y7SUFFQSxPQUFPTjtBQUNUO0FBV08sU0FBU0QsK0JBQ2RVLEdBQVc7UUFFSlI7SUFBUCxPQUFPQSxDQUFBQSxDQUFBQSxhQUFBQSxXQUFBQSxLQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxXQUFhTyxlQUFlLENBQUNDLElBQUFBLEtBQVFBO0FBQzlDIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC90cnVzdGVkLXR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RvcmVzIHRoZSBUcnVzdGVkIFR5cGVzIFBvbGljeS4gU3RhcnRzIGFzIHVuZGVmaW5lZCBhbmQgY2FuIGJlIHNldCB0byBudWxsXG4gKiBpZiBUcnVzdGVkIFR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIuXG4gKi9cbmxldCBwb2xpY3k6IFRydXN0ZWRUeXBlUG9saWN5IHwgbnVsbCB8IHVuZGVmaW5lZFxuXG4vKipcbiAqIEdldHRlciBmb3IgdGhlIFRydXN0ZWQgVHlwZXMgUG9saWN5LiBJZiBpdCBpcyB1bmRlZmluZWQsIGl0IGlzIGluc3RhbnRpYXRlZFxuICogaGVyZSBvciBzZXQgdG8gbnVsbCBpZiBUcnVzdGVkIFR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIuXG4gKi9cbmZ1bmN0aW9uIGdldFBvbGljeSgpIHtcbiAgaWYgKHR5cGVvZiBwb2xpY3kgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcG9saWN5ID1cbiAgICAgIHdpbmRvdy50cnVzdGVkVHlwZXM/LmNyZWF0ZVBvbGljeSgnbmV4dGpzJywge1xuICAgICAgICBjcmVhdGVIVE1MOiAoaW5wdXQpID0+IGlucHV0LFxuICAgICAgICBjcmVhdGVTY3JpcHQ6IChpbnB1dCkgPT4gaW5wdXQsXG4gICAgICAgIGNyZWF0ZVNjcmlwdFVSTDogKGlucHV0KSA9PiBpbnB1dCxcbiAgICAgIH0pIHx8IG51bGxcbiAgfVxuXG4gIHJldHVybiBwb2xpY3lcbn1cblxuLyoqXG4gKiBVbnNhZmVseSBwcm9tb3RlIGEgc3RyaW5nIHRvIGEgVHJ1c3RlZFNjcmlwdFVSTCwgZmFsbGluZyBiYWNrIHRvIHN0cmluZ3NcbiAqIHdoZW4gVHJ1c3RlZCBUeXBlcyBhcmUgbm90IGF2YWlsYWJsZS5cbiAqIFRoaXMgaXMgYSBzZWN1cml0eS1zZW5zaXRpdmUgZnVuY3Rpb247IGFueSB1c2Ugb2YgdGhpcyBmdW5jdGlvblxuICogbXVzdCBnbyB0aHJvdWdoIHNlY3VyaXR5IHJldmlldy4gSW4gcGFydGljdWxhciwgaXQgbXVzdCBiZSBhc3N1cmVkIHRoYXQgdGhlXG4gKiBwcm92aWRlZCBzdHJpbmcgd2lsbCBuZXZlciBjYXVzZSBhbiBYU1MgdnVsbmVyYWJpbGl0eSBpZiB1c2VkIGluIGEgY29udGV4dFxuICogdGhhdCB3aWxsIGNhdXNlIGEgYnJvd3NlciB0byBsb2FkIGFuZCBleGVjdXRlIGEgcmVzb3VyY2UsIGUuZy4gd2hlblxuICogYXNzaWduaW5nIHRvIHNjcmlwdC5zcmMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3Vuc2FmZUNyZWF0ZVRydXN0ZWRTY3JpcHRVUkwoXG4gIHVybDogc3RyaW5nXG4pOiBUcnVzdGVkU2NyaXB0VVJMIHwgc3RyaW5nIHtcbiAgcmV0dXJuIGdldFBvbGljeSgpPy5jcmVhdGVTY3JpcHRVUkwodXJsKSB8fCB1cmxcbn1cbiJdLCJuYW1lcyI6WyJfX3Vuc2FmZUNyZWF0ZVRydXN0ZWRTY3JpcHRVUkwiLCJwb2xpY3kiLCJnZXRQb2xpY3kiLCJ3aW5kb3ciLCJ0cnVzdGVkVHlwZXMiLCJjcmVhdGVQb2xpY3kiLCJjcmVhdGVIVE1MIiwiaW5wdXQiLCJjcmVhdGVTY3JpcHQiLCJjcmVhdGVTY3JpcHRVUkwiLCJ1cmwiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/trusted-types.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/webpack.js":
/*!*****************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/webpack.js ***!
\*****************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _deploymentid = __webpack_require__(/*! ../build/deployment-id */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/deployment-id.js\");\n// If we have a deployment ID, we need to append it to the webpack chunk names\n// I am keeping the process check explicit so this can be statically optimized\nif (false) {}\nself.__next_set_public_path__ = (path)=>{\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n __webpack_require__.p = path;\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=webpack.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3dlYnBhY2suanMiLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZEOzs7OzswQ0FLWDtBQUVsRCw4RUFBOEU7QUFDOUUsOEVBQThFO0FBQzlFLElBQUlBLEtBQThCLEVBQUUsRUFxQm5DO0FBR0NhLEtBQWFDLHdCQUF3QixHQUFHLENBQUNDO0lBQ3pDLDZEQUE2RDtJQUM3REMscUJBQXVCQSxHQUFHRDtBQUM1QiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvd2VicGFjay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5kZWNsYXJlIGNvbnN0IF9fd2VicGFja19yZXF1aXJlX186IGFueVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZGVjbGFyZSBsZXQgX193ZWJwYWNrX3B1YmxpY19wYXRoX186IHN0cmluZ1xuXG5pbXBvcnQgeyBnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmcgfSBmcm9tICcuLi9idWlsZC9kZXBsb3ltZW50LWlkJ1xuXG4vLyBJZiB3ZSBoYXZlIGEgZGVwbG95bWVudCBJRCwgd2UgbmVlZCB0byBhcHBlbmQgaXQgdG8gdGhlIHdlYnBhY2sgY2h1bmsgbmFtZXNcbi8vIEkgYW0ga2VlcGluZyB0aGUgcHJvY2VzcyBjaGVjayBleHBsaWNpdCBzbyB0aGlzIGNhbiBiZSBzdGF0aWNhbGx5IG9wdGltaXplZFxuaWYgKHByb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRCkge1xuICBjb25zdCBzdWZmaXggPSBnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmcoKVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgY29uc3QgZ2V0Q2h1bmtTY3JpcHRGaWxlbmFtZSA9IF9fd2VicGFja19yZXF1aXJlX18udVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKC4uLmFyZ3M6IGFueVtdKSA9PlxuICAgIC8vIFdlIGVub2RlIHRoZSBjaHVuayBmaWxlbmFtZSBiZWNhdXNlIG91ciBzdGF0aWMgc2VydmVyIG1hdGNoZXMgYWdhaW5zdCBhbmQgZW5jb2RlZFxuICAgIC8vIGZpbGVuYW1lIHBhdGguXG4gICAgZ2V0Q2h1bmtTY3JpcHRGaWxlbmFtZSguLi5hcmdzKSArIHN1ZmZpeFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjb25zdCBnZXRDaHVua0Nzc0ZpbGVuYW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXy5rXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBfX3dlYnBhY2tfcmVxdWlyZV9fLmsgPSAoLi4uYXJnczogYW55W10pID0+XG4gICAgZ2V0Q2h1bmtDc3NGaWxlbmFtZSguLi5hcmdzKSArIHN1ZmZpeFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjb25zdCBnZXRNaW5pQ3NzRmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm1pbmlDc3NGXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBfX3dlYnBhY2tfcmVxdWlyZV9fLm1pbmlDc3NGID0gKC4uLmFyZ3M6IGFueVtdKSA9PlxuICAgIGdldE1pbmlDc3NGaWxlbmFtZSguLi5hcmdzKSArIHN1ZmZpeFxufVxuXG4vLyBJZ25vcmUgdGhlIG1vZHVsZSBJRCB0cmFuc2Zvcm0gaW4gY2xpZW50LlxuOyhzZWxmIGFzIGFueSkuX19uZXh0X3NldF9wdWJsaWNfcGF0aF9fID0gKHBhdGg6IHN0cmluZykgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9fd2VicGFja19wdWJsaWNfcGF0aF9fID0gcGF0aFxufVxuXG5leHBvcnQge31cbiJdLCJuYW1lcyI6WyJwcm9jZXNzIiwiZW52IiwiTkVYVF9ERVBMT1lNRU5UX0lEIiwic3VmZml4IiwiZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nIiwiZ2V0Q2h1bmtTY3JpcHRGaWxlbmFtZSIsIl9fd2VicGFja19yZXF1aXJlX18iLCJ1IiwiYXJncyIsImdldENodW5rQ3NzRmlsZW5hbWUiLCJrIiwiZ2V0TWluaUNzc0ZpbGVuYW1lIiwibWluaUNzc0YiLCJzZWxmIiwiX19uZXh0X3NldF9wdWJsaWNfcGF0aF9fIiwicGF0aCIsIl9fd2VicGFja19wdWJsaWNfcGF0aF9fIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/webpack.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/with-router.js":
/*!*********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/with-router.js ***!
\*********************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return withRouter;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst _router = __webpack_require__(/*! ./router */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/router.js\");\nfunction withRouter(ComposedComponent) {\n function WithRouterWrapper(props) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(ComposedComponent, {\n router: (0, _router.useRouter)(),\n ...props\n });\n }\n WithRouterWrapper.getInitialProps = ComposedComponent.getInitialProps;\n WithRouterWrapper.origGetInitialProps = ComposedComponent.origGetInitialProps;\n if (true) {\n const name = ComposedComponent.displayName || ComposedComponent.name || 'Unknown';\n WithRouterWrapper.displayName = \"withRouter(\" + name + \")\";\n }\n return WithRouterWrapper;\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=with-router.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3dpdGgtcm91dGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7MkNBa0JBOzs7ZUFBd0JBOzs7Ozs0RUFsQlE7b0NBT047QUFXWCxTQUFTQSxXQUl0QkMsaUJBQStDO0lBRS9DLFNBQVNDLGtCQUFrQkMsS0FBVTtRQUNuQyxxQkFBTyxxQkFBQ0YsbUJBQUFBO1lBQWtCRyxRQUFRQyxDQUFBQSxHQUFBQSxRQUFBQSxTQUFBQTtZQUFjLEdBQUdGLEtBQUs7O0lBQzFEO0lBRUFELGtCQUFrQkksZUFBZSxHQUFHTCxrQkFBa0JLLGVBQWU7SUFFbkVKLGtCQUEwQkssbUJBQW1CLEdBQzdDTixrQkFDQU0sbUJBQW1CO0lBQ3JCLElBQUlDLElBQW9CLEVBQW1CO1FBQ3pDLE1BQU1HLE9BQ0pWLGtCQUFrQlcsV0FBVyxJQUFJWCxrQkFBa0JVLElBQUksSUFBSTtRQUM3RFQsa0JBQWtCVSxXQUFXLEdBQUksZ0JBQWFELE9BQUs7SUFDckQ7SUFFQSxPQUFPVDtBQUNUIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC93aXRoLXJvdXRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHR5cGUgSlNYIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7XG4gIEJhc2VDb250ZXh0LFxuICBOZXh0Q29tcG9uZW50VHlwZSxcbiAgTmV4dFBhZ2VDb250ZXh0LFxufSBmcm9tICcuLi9zaGFyZWQvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBOZXh0Um91dGVyIH0gZnJvbSAnLi9yb3V0ZXInXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICcuL3JvdXRlcidcblxuZXhwb3J0IHR5cGUgV2l0aFJvdXRlclByb3BzID0ge1xuICByb3V0ZXI6IE5leHRSb3V0ZXJcbn1cblxuZXhwb3J0IHR5cGUgRXhjbHVkZVJvdXRlclByb3BzPFA+ID0gUGljazxcbiAgUCxcbiAgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBXaXRoUm91dGVyUHJvcHM+XG4+XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdpdGhSb3V0ZXI8XG4gIFAgZXh0ZW5kcyBXaXRoUm91dGVyUHJvcHMsXG4gIEMgZXh0ZW5kcyBCYXNlQ29udGV4dCA9IE5leHRQYWdlQ29udGV4dCxcbj4oXG4gIENvbXBvc2VkQ29tcG9uZW50OiBOZXh0Q29tcG9uZW50VHlwZTxDLCBhbnksIFA+XG4pOiBSZWFjdC5Db21wb25lbnRUeXBlPEV4Y2x1ZGVSb3V0ZXJQcm9wczxQPj4ge1xuICBmdW5jdGlvbiBXaXRoUm91dGVyV3JhcHBlcihwcm9wczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8Q29tcG9zZWRDb21wb25lbnQgcm91dGVyPXt1c2VSb3V0ZXIoKX0gey4uLnByb3BzfSAvPlxuICB9XG5cbiAgV2l0aFJvdXRlcldyYXBwZXIuZ2V0SW5pdGlhbFByb3BzID0gQ29tcG9zZWRDb21wb25lbnQuZ2V0SW5pdGlhbFByb3BzXG4gIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGFsbG93IGNoZWNraW5nIGZvciBjdXN0b20gZ2V0SW5pdGlhbFByb3BzIGluIF9hcHBcbiAgOyhXaXRoUm91dGVyV3JhcHBlciBhcyBhbnkpLm9yaWdHZXRJbml0aWFsUHJvcHMgPSAoXG4gICAgQ29tcG9zZWRDb21wb25lbnQgYXMgYW55XG4gICkub3JpZ0dldEluaXRpYWxQcm9wc1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnN0IG5hbWUgPVxuICAgICAgQ29tcG9zZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9zZWRDb21wb25lbnQubmFtZSB8fCAnVW5rbm93bidcbiAgICBXaXRoUm91dGVyV3JhcHBlci5kaXNwbGF5TmFtZSA9IGB3aXRoUm91dGVyKCR7bmFtZX0pYFxuICB9XG5cbiAgcmV0dXJuIFdpdGhSb3V0ZXJXcmFwcGVyXG59XG4iXSwibmFtZXMiOlsid2l0aFJvdXRlciIsIkNvbXBvc2VkQ29tcG9uZW50IiwiV2l0aFJvdXRlcldyYXBwZXIiLCJwcm9wcyIsInJvdXRlciIsInVzZVJvdXRlciIsImdldEluaXRpYWxQcm9wcyIsIm9yaWdHZXRJbml0aWFsUHJvcHMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJuYW1lIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/with-router.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/next-devtools/index.js":
/*!*******************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/next-devtools/index.js ***!
\*******************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval(__webpack_require__.ts("/* provided dependency */ var process = __webpack_require__(/*! process */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/polyfills/process.js\");\nvar __webpack_modules__={\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/devtools-indicator/devtools-indicator.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>l});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a)()(o());i.push([e.id,`[data-nextjs-toast] {\n &[data-hidden='true'] {\n display: none;\n }\n}\n\n.dev-tools-indicator-menu {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n background: var(--color-background-100);\n border: 1px solid var(--color-gray-alpha-400);\n background-clip: padding-box;\n box-shadow: var(--shadow-menu);\n border-radius: var(--rounded-xl);\n position: absolute;\n font-family: var(--font-stack-sans);\n z-index: 3;\n overflow: hidden;\n opacity: 0;\n outline: 0;\n min-width: 248px;\n transition: opacity var(--animate-out-duration-ms)\n var(--animate-out-timing-function);\n\n &[data-rendered='true'] {\n opacity: 1;\n scale: 1;\n }\n}\n\n.dev-tools-indicator-inner {\n padding: 6px;\n width: 100%;\n}\n\n.dev-tools-indicator-item {\n display: flex;\n align-items: center;\n padding: 8px 6px;\n height: var(--size-36);\n border-radius: 6px;\n text-decoration: none !important;\n user-select: none;\n white-space: nowrap;\n\n svg {\n width: var(--size-16);\n height: var(--size-16);\n }\n\n &:focus-visible {\n outline: 0;\n }\n}\n\n.dev-tools-indicator-footer {\n background: var(--color-background-200);\n padding: 6px;\n border-top: 1px solid var(--color-gray-400);\n width: 100%;\n}\n\n.dev-tools-indicator-item[data-selected='true'] {\n cursor: pointer;\n background-color: var(--color-gray-200);\n}\n\n.dev-tools-indicator-label {\n font-size: var(--size-14);\n line-height: var(--size-20);\n color: var(--color-gray-1000);\n}\n\n.dev-tools-indicator-value {\n font-size: var(--size-14);\n line-height: var(--size-20);\n color: var(--color-gray-900);\n margin-left: auto;\n}\n\n.dev-tools-indicator-issue-count {\n --color-primary: var(--color-gray-800);\n --color-secondary: var(--color-gray-100);\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: 8px;\n min-width: var(--size-40);\n height: var(--size-24);\n background: var(--color-background-100);\n border: 1px solid var(--color-gray-alpha-400);\n background-clip: padding-box;\n box-shadow: var(--shadow-small);\n padding: 2px;\n color: var(--color-gray-1000);\n border-radius: 128px;\n font-weight: 500;\n font-size: var(--size-13);\n font-variant-numeric: tabular-nums;\n\n &[data-has-issues='true'] {\n --color-primary: var(--color-red-800);\n --color-secondary: var(--color-red-100);\n }\n\n .dev-tools-indicator-issue-count-indicator {\n width: var(--size-8);\n height: var(--size-8);\n background: var(--color-primary);\n box-shadow: 0 0 0 2px var(--color-secondary);\n border-radius: 50%;\n }\n}\n\n.dev-tools-indicator-shortcut {\n display: flex;\n gap: 4px;\n\n kbd {\n width: var(--size-20);\n height: var(--size-20);\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: var(--rounded-md);\n border: 1px solid var(--color-gray-400);\n font-family: var(--font-stack-sans);\n background: var(--color-background-100);\n color: var(--color-gray-1000);\n text-align: center;\n font-size: var(--size-12);\n line-height: var(--size-16);\n }\n}\n\n.dev-tools-grabbing {\n cursor: grabbing;\n\n > * {\n pointer-events: none;\n }\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/devtools-indicator/devtools-indicator.css\"],names:[],mappings:\"AAAA;EACE;IACE,aAAa;EACf;AACF;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EACvB,uCAAuC;EACvC,6CAA6C;EAC7C,4BAA4B;EAC5B,8BAA8B;EAC9B,gCAAgC;EAChC,kBAAkB;EAClB,mCAAmC;EACnC,UAAU;EACV,gBAAgB;EAChB,UAAU;EACV,UAAU;EACV,gBAAgB;EAChB;sCACoC;;EAEpC;IACE,UAAU;IACV,QAAQ;EACV;AACF;;AAEA;EACE,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,gBAAgB;EAChB,sBAAsB;EACtB,kBAAkB;EAClB,gCAAgC;EAChC,iBAAiB;EACjB,mBAAmB;;EAEnB;IACE,qBAAqB;IACrB,sBAAsB;EACxB;;EAEA;IACE,UAAU;EACZ;AACF;;AAEA;EACE,uCAAuC;EACvC,YAAY;EACZ,2CAA2C;EAC3C,WAAW;AACb;;AAEA;EACE,eAAe;EACf,uCAAuC;AACzC;;AAEA;EACE,yBAAyB;EACzB,2BAA2B;EAC3B,6BAA6B;AAC/B;;AAEA;EACE,yBAAyB;EACzB,2BAA2B;EAC3B,4BAA4B;EAC5B,iBAAiB;AACnB;;AAEA;EACE,sCAAsC;EACtC,wCAAwC;EACxC,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,uBAAuB;EACvB,QAAQ;EACR,yBAAyB;EACzB,sBAAsB;EACtB,uCAAuC;EACvC,6CAA6C;EAC7C,4BAA4B;EAC5B,+BAA+B;EAC/B,YAAY;EACZ,6BAA6B;EAC7B,oBAAoB;EACpB,gBAAgB;EAChB,yBAAyB;EACzB,kCAAkC;;EAElC;IACE,qCAAqC;IACrC,uCAAuC;EACzC;;EAEA;IACE,oBAAoB;IACpB,qBAAqB;IACrB,gCAAgC;IAChC,4CAA4C;IAC5C,kBAAkB;EACpB;AACF;;AAEA;EACE,aAAa;EACb,QAAQ;;EAER;IACE,qBAAqB;IACrB,sBAAsB;IACtB,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,gCAAgC;IAChC,uCAAuC;IACvC,mCAAmC;IACnC,uCAAuC;IACvC,6BAA6B;IAC7B,kBAAkB;IAClB,yBAAyB;IACzB,2BAA2B;EAC7B;AACF;;AAEA;EACE,gBAAgB;;EAEhB;IACE,oBAAoB;EACtB;AACF\",sourcesContent:[\"[data-nextjs-toast] {\\n &[data-hidden='true'] {\\n display: none;\\n }\\n}\\n\\n.dev-tools-indicator-menu {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-alpha-400);\\n background-clip: padding-box;\\n box-shadow: var(--shadow-menu);\\n border-radius: var(--rounded-xl);\\n position: absolute;\\n font-family: var(--font-stack-sans);\\n z-index: 3;\\n overflow: hidden;\\n opacity: 0;\\n outline: 0;\\n min-width: 248px;\\n transition: opacity var(--animate-out-duration-ms)\\n var(--animate-out-timing-function);\\n\\n &[data-rendered='true'] {\\n opacity: 1;\\n scale: 1;\\n }\\n}\\n\\n.dev-tools-indicator-inner {\\n padding: 6px;\\n width: 100%;\\n}\\n\\n.dev-tools-indicator-item {\\n display: flex;\\n align-items: center;\\n padding: 8px 6px;\\n height: var(--size-36);\\n border-radius: 6px;\\n text-decoration: none !important;\\n user-select: none;\\n white-space: nowrap;\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n}\\n\\n.dev-tools-indicator-footer {\\n background: var(--color-background-200);\\n padding: 6px;\\n border-top: 1px solid var(--color-gray-400);\\n width: 100%;\\n}\\n\\n.dev-tools-indicator-item[data-selected='true'] {\\n cursor: pointer;\\n background-color: var(--color-gray-200);\\n}\\n\\n.dev-tools-indicator-label {\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n color: var(--color-gray-1000);\\n}\\n\\n.dev-tools-indicator-value {\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n color: var(--color-gray-900);\\n margin-left: auto;\\n}\\n\\n.dev-tools-indicator-issue-count {\\n --color-primary: var(--color-gray-800);\\n --color-secondary: var(--color-gray-100);\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n min-width: var(--size-40);\\n height: var(--size-24);\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-alpha-400);\\n background-clip: padding-box;\\n box-shadow: var(--shadow-small);\\n padding: 2px;\\n color: var(--color-gray-1000);\\n border-radius: 128px;\\n font-weight: 500;\\n font-size: var(--size-13);\\n font-variant-numeric: tabular-nums;\\n\\n &[data-has-issues='true'] {\\n --color-primary: var(--color-red-800);\\n --color-secondary: var(--color-red-100);\\n }\\n\\n .dev-tools-indicator-issue-count-indicator {\\n width: var(--size-8);\\n height: var(--size-8);\\n background: var(--color-primary);\\n box-shadow: 0 0 0 2px var(--color-secondary);\\n border-radius: 50%;\\n }\\n}\\n\\n.dev-tools-indicator-shortcut {\\n display: flex;\\n gap: 4px;\\n\\n kbd {\\n width: var(--size-20);\\n height: var(--size-20);\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n border-radius: var(--rounded-md);\\n border: 1px solid var(--color-gray-400);\\n font-family: var(--font-stack-sans);\\n background: var(--color-background-100);\\n color: var(--color-gray-1000);\\n text-align: center;\\n font-size: var(--size-12);\\n line-height: var(--size-16);\\n }\\n}\\n\\n.dev-tools-grabbing {\\n cursor: grabbing;\\n\\n > * {\\n pointer-events: none;\\n }\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/devtools-panel/resize/resize-handle.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>l});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a)()(o());i.push([e.id,`.resize-container {\n position: absolute;\n /* todo: better z index */\n z-index: 10;\n /* todo: is this needed */\n background: transparent;\n}\n\n.resize-line {\n position: absolute;\n /* todo smarter z index */\n z-index: -1;\n pointer-events: none;\n /* a normal exit animation curve- at this point the exit animation is */\n /* immediately responsive so we don't need a bespoke curve */\n transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n /* todo: better var? */\n border: 1px solid var(--color-gray-400);\n}\n\n/* start really fast because we start super hidden initially behind the panel, otherwise feels like an unintended animation delay */\n.resize-container:hover ~ .resize-line {\n transition: transform 0.25s cubic-bezier(0.23, 1, 0.32, 0.9);\n}\n\n.resize-container.right,\n.resize-container.left {\n top: 0;\n height: 100%;\n width: 22px;\n cursor: ew-resize;\n}\n\n/* todo: don't hard code all these values/use vars */\n\n.resize-container.bottom,\n.resize-container.top {\n left: 0;\n width: 100%;\n height: 22px;\n cursor: ns-resize;\n}\n\n.resize-container.top {\n top: -7px;\n}\n.resize-container.bottom {\n bottom: -7px;\n}\n.resize-container.left {\n left: -7px;\n}\n.resize-container.right {\n right: -7px;\n}\n\n.resize-container.top-left,\n.resize-container.top-right,\n.resize-container.bottom-left,\n.resize-container.bottom-right {\n width: 26px;\n height: 26px;\n z-index: 15;\n}\n\n.resize-container.top-left {\n top: -5px;\n left: -5px;\n cursor: nwse-resize;\n}\n.resize-container.top-right {\n top: -5px;\n right: -5px;\n cursor: nesw-resize;\n}\n.resize-container.bottom-left {\n bottom: -5px;\n left: -5px;\n cursor: nesw-resize;\n}\n.resize-container.bottom-right {\n bottom: -5px;\n right: -5px;\n cursor: nwse-resize;\n}\n\n.resize-line.top,\n.resize-line.bottom {\n height: 18px;\n width: 100%;\n background-color: var(--color-background-200);\n}\n\n.resize-line.left,\n.resize-line.right {\n width: 18px;\n height: 100%;\n background-color: var(--color-background-200);\n}\n\n.resize-line.top {\n top: -7px;\n left: calc(-1 * var(--border-left, 2px));\n width: calc(100% + var(--border-horizontal, 4px));\n border-radius: var(--rounded-lg) var(--rounded-lg) 0 0;\n transform: translateY(18px);\n}\n\n.resize-line.bottom {\n bottom: -7px;\n left: calc(-1 * var(--border-left, 2px));\n width: calc(100% + var(--border-horizontal, 4px));\n border-radius: 0 0 var(--rounded-lg) var(--rounded-lg);\n transform: translateY(-18px);\n}\n\n.resize-line.left {\n top: calc(-1 * var(--border-top, 2px));\n left: -7px;\n height: calc(100% + var(--border-vertical, 4px));\n border-radius: var(--rounded-lg) 0 0 var(--rounded-lg);\n transform: translateX(18px);\n}\n\n.resize-line.right {\n top: calc(-1 * var(--border-top, 2px));\n right: -7px;\n height: calc(100% + var(--border-vertical, 4px));\n border-radius: 0 var(--rounded-lg) var(--rounded-lg) 0;\n transform: translateX(-18px);\n}\n\n.resize-container.right:hover ~ .resize-line.right,\n.resize-container.left:hover ~ .resize-line.left,\n.resize-line.right.dragging,\n.resize-line.left.dragging {\n transform: translateX(0);\n}\n\n.resize-container.bottom:hover ~ .resize-line.bottom,\n.resize-container.top:hover ~ .resize-line.top,\n.resize-line.bottom.dragging,\n.resize-line.top.dragging {\n transform: translateY(0);\n}\n\n/* make sure that we don't show multiple handles at once\n * we should only ever show the currently resizing handle\n * regardless of hover state \n */\n.resize-container.no-hover.right:hover ~ .resize-line.right {\n transform: translateX(-20px);\n}\n.resize-container.no-hover.left:hover ~ .resize-line.left {\n transform: translateX(20px);\n}\n.resize-container.no-hover.bottom:hover ~ .resize-line.bottom {\n transform: translateY(-20px);\n}\n.resize-container.no-hover.top:hover ~ .resize-line.top {\n transform: translateY(20px);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/devtools-panel/resize/resize-handle.css\"],names:[],mappings:\"AAAA;EACE,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;EACX,yBAAyB;EACzB,uBAAuB;AACzB;;AAEA;EACE,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;EACX,oBAAoB;EACpB,uEAAuE;EACvE,4DAA4D;EAC5D,uDAAuD;EACvD,sBAAsB;EACtB,uCAAuC;AACzC;;AAEA,mIAAmI;AACnI;EACE,4DAA4D;AAC9D;;AAEA;;EAEE,MAAM;EACN,YAAY;EACZ,WAAW;EACX,iBAAiB;AACnB;;AAEA,oDAAoD;;AAEpD;;EAEE,OAAO;EACP,WAAW;EACX,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,SAAS;AACX;AACA;EACE,YAAY;AACd;AACA;EACE,UAAU;AACZ;AACA;EACE,WAAW;AACb;;AAEA;;;;EAIE,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,SAAS;EACT,UAAU;EACV,mBAAmB;AACrB;AACA;EACE,SAAS;EACT,WAAW;EACX,mBAAmB;AACrB;AACA;EACE,YAAY;EACZ,UAAU;EACV,mBAAmB;AACrB;AACA;EACE,YAAY;EACZ,WAAW;EACX,mBAAmB;AACrB;;AAEA;;EAEE,YAAY;EACZ,WAAW;EACX,6CAA6C;AAC/C;;AAEA;;EAEE,WAAW;EACX,YAAY;EACZ,6CAA6C;AAC/C;;AAEA;EACE,SAAS;EACT,wCAAwC;EACxC,iDAAiD;EACjD,sDAAsD;EACtD,2BAA2B;AAC7B;;AAEA;EACE,YAAY;EACZ,wCAAwC;EACxC,iDAAiD;EACjD,sDAAsD;EACtD,4BAA4B;AAC9B;;AAEA;EACE,sCAAsC;EACtC,UAAU;EACV,gDAAgD;EAChD,sDAAsD;EACtD,2BAA2B;AAC7B;;AAEA;EACE,sCAAsC;EACtC,WAAW;EACX,gDAAgD;EAChD,sDAAsD;EACtD,4BAA4B;AAC9B;;AAEA;;;;EAIE,wBAAwB;AAC1B;;AAEA;;;;EAIE,wBAAwB;AAC1B;;AAEA;;;EAGE;AACF;EACE,4BAA4B;AAC9B;AACA;EACE,2BAA2B;AAC7B;AACA;EACE,4BAA4B;AAC9B;AACA;EACE,2BAA2B;AAC7B\",sourcesContent:[\".resize-container {\\n position: absolute;\\n /* todo: better z index */\\n z-index: 10;\\n /* todo: is this needed */\\n background: transparent;\\n}\\n\\n.resize-line {\\n position: absolute;\\n /* todo smarter z index */\\n z-index: -1;\\n pointer-events: none;\\n /* a normal exit animation curve- at this point the exit animation is */\\n /* immediately responsive so we don't need a bespoke curve */\\n transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\\n /* todo: better var? */\\n border: 1px solid var(--color-gray-400);\\n}\\n\\n/* start really fast because we start super hidden initially behind the panel, otherwise feels like an unintended animation delay */\\n.resize-container:hover ~ .resize-line {\\n transition: transform 0.25s cubic-bezier(0.23, 1, 0.32, 0.9);\\n}\\n\\n.resize-container.right,\\n.resize-container.left {\\n top: 0;\\n height: 100%;\\n width: 22px;\\n cursor: ew-resize;\\n}\\n\\n/* todo: don't hard code all these values/use vars */\\n\\n.resize-container.bottom,\\n.resize-container.top {\\n left: 0;\\n width: 100%;\\n height: 22px;\\n cursor: ns-resize;\\n}\\n\\n.resize-container.top {\\n top: -7px;\\n}\\n.resize-container.bottom {\\n bottom: -7px;\\n}\\n.resize-container.left {\\n left: -7px;\\n}\\n.resize-container.right {\\n right: -7px;\\n}\\n\\n.resize-container.top-left,\\n.resize-container.top-right,\\n.resize-container.bottom-left,\\n.resize-container.bottom-right {\\n width: 26px;\\n height: 26px;\\n z-index: 15;\\n}\\n\\n.resize-container.top-left {\\n top: -5px;\\n left: -5px;\\n cursor: nwse-resize;\\n}\\n.resize-container.top-right {\\n top: -5px;\\n right: -5px;\\n cursor: nesw-resize;\\n}\\n.resize-container.bottom-left {\\n bottom: -5px;\\n left: -5px;\\n cursor: nesw-resize;\\n}\\n.resize-container.bottom-right {\\n bottom: -5px;\\n right: -5px;\\n cursor: nwse-resize;\\n}\\n\\n.resize-line.top,\\n.resize-line.bottom {\\n height: 18px;\\n width: 100%;\\n background-color: var(--color-background-200);\\n}\\n\\n.resize-line.left,\\n.resize-line.right {\\n width: 18px;\\n height: 100%;\\n background-color: var(--color-background-200);\\n}\\n\\n.resize-line.top {\\n top: -7px;\\n left: calc(-1 * var(--border-left, 2px));\\n width: calc(100% + var(--border-horizontal, 4px));\\n border-radius: var(--rounded-lg) var(--rounded-lg) 0 0;\\n transform: translateY(18px);\\n}\\n\\n.resize-line.bottom {\\n bottom: -7px;\\n left: calc(-1 * var(--border-left, 2px));\\n width: calc(100% + var(--border-horizontal, 4px));\\n border-radius: 0 0 var(--rounded-lg) var(--rounded-lg);\\n transform: translateY(-18px);\\n}\\n\\n.resize-line.left {\\n top: calc(-1 * var(--border-top, 2px));\\n left: -7px;\\n height: calc(100% + var(--border-vertical, 4px));\\n border-radius: var(--rounded-lg) 0 0 var(--rounded-lg);\\n transform: translateX(18px);\\n}\\n\\n.resize-line.right {\\n top: calc(-1 * var(--border-top, 2px));\\n right: -7px;\\n height: calc(100% + var(--border-vertical, 4px));\\n border-radius: 0 var(--rounded-lg) var(--rounded-lg) 0;\\n transform: translateX(-18px);\\n}\\n\\n.resize-container.right:hover ~ .resize-line.right,\\n.resize-container.left:hover ~ .resize-line.left,\\n.resize-line.right.dragging,\\n.resize-line.left.dragging {\\n transform: translateX(0);\\n}\\n\\n.resize-container.bottom:hover ~ .resize-line.bottom,\\n.resize-container.top:hover ~ .resize-line.top,\\n.resize-line.bottom.dragging,\\n.resize-line.top.dragging {\\n transform: translateY(0);\\n}\\n\\n/* make sure that we don't show multiple handles at once\\n * we should only ever show the currently resizing handle\\n * regardless of hover state \\n */\\n.resize-container.no-hover.right:hover ~ .resize-line.right {\\n transform: translateX(-20px);\\n}\\n.resize-container.no-hover.left:hover ~ .resize-line.left {\\n transform: translateX(20px);\\n}\\n.resize-container.no-hover.bottom:hover ~ .resize-line.bottom {\\n transform: translateY(-20px);\\n}\\n.resize-container.no-hover.top:hover ~ .resize-line.top {\\n transform: translateY(20px);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>l});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a)()(o());i.push([e.id,`.segment-boundary-trigger {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 6px;\n line-height: 16px;\n font-weight: 500;\n color: var(--color-gray-1000);\n border-radius: 999px;\n border: none;\n font-size: var(--size-12);\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.segment-boundary-trigger-text {\n font-size: var(--size-12);\n font-weight: 500;\n user-select: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.segment-boundary-trigger-text .plus-icon {\n transition: transform 0.25s ease;\n}\n\n.segment-boundary-trigger-text:hover .plus-icon {\n color: var(--color-gray-800);\n}\n\n.segment-boundary-trigger svg {\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n vertical-align: middle;\n}\n\n.segment-boundary-trigger:hover svg {\n color: var(--color-gray-700);\n}\n\n.segment-boundary-trigger[disabled] svg,\n.segment-boundary-trigger[disabled]:hover svg {\n color: var(--color-gray-400);\n cursor: not-allowed;\n}\n\n.segment-boundary-dropdown {\n padding: 8px;\n background: var(--color-background-100);\n border: 1px solid var(--color-gray-400);\n border-radius: 16px;\n min-width: 120px;\n user-select: none;\n cursor: default;\n box-shadow: 0px 4px 8px -4px color-mix(in srgb, var(--color-gray-900) 4%, transparent);\n}\n\n.segment-boundary-dropdown-positioner {\n z-index: var(--top-z-index);\n}\n\n.segment-boundary-dropdown-item {\n display: flex;\n align-items: center;\n padding: 8px;\n line-height: 20px;\n font-size: 14px;\n border-radius: 6px;\n color: var(--color-gray-1000);\n cursor: pointer;\n min-width: 220px;\n border: none;\n background: none;\n width: 100%;\n}\n\n.segment-boundary-dropdown-item[data-disabled] {\n color: var(--color-gray-400);\n cursor: not-allowed;\n}\n\n.segment-boundary-dropdown-item svg {\n margin-right: 12px;\n color: currentColor;\n}\n\n.segment-boundary-dropdown-item:hover {\n background: var(--color-gray-200);\n}\n\n.segment-boundary-dropdown-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n\n.segment-boundary-dropdown-item:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n\n.segment-boundary-group-label {\n padding: 8px;\n font-size: 13px;\n line-height: 16px;\n font-weight: 400;\n color: var(--color-gray-900);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.css\"],names:[],mappings:\"AAAA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;EAChB,iBAAiB;EACjB,gBAAgB;EAChB,6BAA6B;EAC7B,oBAAoB;EACpB,YAAY;EACZ,yBAAyB;EACzB,eAAe;EACf,uCAAuC;AACzC;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,cAAc;EACd,sBAAsB;AACxB;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;;EAEE,4BAA4B;EAC5B,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,uCAAuC;EACvC,uCAAuC;EACvC,mBAAmB;EACnB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;EACf,sFAAsF;AACxF;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,YAAY;EACZ,iBAAiB;EACjB,eAAe;EACf,kBAAkB;EAClB,6BAA6B;EAC7B,eAAe;EACf,gBAAgB;EAChB,YAAY;EACZ,gBAAgB;EAChB,WAAW;AACb;;AAEA;EACE,4BAA4B;EAC5B,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;EAClB,mBAAmB;AACrB;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,2BAA2B;EAC3B,4BAA4B;AAC9B;;AAEA;EACE,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,iBAAiB;EACjB,gBAAgB;EAChB,4BAA4B;AAC9B\",sourcesContent:[\".segment-boundary-trigger {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n padding: 4px 6px;\\n line-height: 16px;\\n font-weight: 500;\\n color: var(--color-gray-1000);\\n border-radius: 999px;\\n border: none;\\n font-size: var(--size-12);\\n cursor: pointer;\\n transition: background-color 0.15s ease;\\n}\\n\\n.segment-boundary-trigger-text {\\n font-size: var(--size-12);\\n font-weight: 500;\\n user-select: none;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.segment-boundary-trigger-text .plus-icon {\\n transition: transform 0.25s ease;\\n}\\n\\n.segment-boundary-trigger-text:hover .plus-icon {\\n color: var(--color-gray-800);\\n}\\n\\n.segment-boundary-trigger svg {\\n width: 14px;\\n height: 14px;\\n flex-shrink: 0;\\n vertical-align: middle;\\n}\\n\\n.segment-boundary-trigger:hover svg {\\n color: var(--color-gray-700);\\n}\\n\\n.segment-boundary-trigger[disabled] svg,\\n.segment-boundary-trigger[disabled]:hover svg {\\n color: var(--color-gray-400);\\n cursor: not-allowed;\\n}\\n\\n.segment-boundary-dropdown {\\n padding: 8px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-400);\\n border-radius: 16px;\\n min-width: 120px;\\n user-select: none;\\n cursor: default;\\n box-shadow: 0px 4px 8px -4px color-mix(in srgb, var(--color-gray-900) 4%, transparent);\\n}\\n\\n.segment-boundary-dropdown-positioner {\\n z-index: var(--top-z-index);\\n}\\n\\n.segment-boundary-dropdown-item {\\n display: flex;\\n align-items: center;\\n padding: 8px;\\n line-height: 20px;\\n font-size: 14px;\\n border-radius: 6px;\\n color: var(--color-gray-1000);\\n cursor: pointer;\\n min-width: 220px;\\n border: none;\\n background: none;\\n width: 100%;\\n}\\n\\n.segment-boundary-dropdown-item[data-disabled] {\\n color: var(--color-gray-400);\\n cursor: not-allowed;\\n}\\n\\n.segment-boundary-dropdown-item svg {\\n margin-right: 12px;\\n color: currentColor;\\n}\\n\\n.segment-boundary-dropdown-item:hover {\\n background: var(--color-gray-200);\\n}\\n\\n.segment-boundary-dropdown-item:first-child {\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n}\\n\\n.segment-boundary-dropdown-item:last-child {\\n border-bottom-left-radius: 4px;\\n border-bottom-right-radius: 4px;\\n}\\n\\n.segment-boundary-group-label {\\n padding: 8px;\\n font-size: 13px;\\n line-height: 16px;\\n font-weight: 400;\\n color: var(--color-gray-900);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-explorer.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>l});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a)()(o());i.push([e.id,`.segment-explorer-content {\n font-size: var(--size-14);\n padding: 0 8px;\n width: 100%;\n height: 100%;\n}\n\n.segment-explorer-page-route-bar {\n display: flex;\n align-items: center;\n padding: 14px 16px;\n background-color: var(--color-background-200);\n gap: 12px;\n}\n\n.segment-explorer-page-route-bar-path {\n font-size: var(--size-14);\n font-weight: 500;\n color: var(--color-gray-1000);\n font-family: var(--font-mono);\n white-space: nowrap;\n line-height: 20px;\n}\n\n.segment-explorer-item {\n margin: 4px 0;\n border-radius: 6px;\n}\n\n.segment-explorer-item:nth-child(even) {\n background-color: var(--color-background-200);\n}\n.segment-explorer-item-row {\n display: flex;\n flex-direction: column;\n padding-top: 10px;\n padding-bottom: 10px;\n padding-right: 4px;\n}\n.segment-explorer-item-row-main {\n display: flex;\n align-items: center;\n white-space: pre;\n cursor: default;\n color: var(--color-gray-1000);\n}\n\n.segment-explorer-children--intended {\n padding-left: 16px;\n}\n\n.segment-explorer-filename {\n display: inline-flex;\n width: 100%;\n align-items: center;\n}\n\n.segment-explorer-filename select {\n margin-left: auto;\n}\n.segment-explorer-filename--path {\n margin-right: 8px;\n}\n.segment-explorer-filename--path small {\n display: inline-block;\n width: 0;\n opacity: 0;\n}\n.segment-explorer-filename--name {\n color: var(--color-gray-800);\n}\n\n.segment-explorer-files {\n display: inline-flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.segment-explorer-files + .segment-boundary-trigger {\n margin-left: 8px;\n}\n\n.segment-explorer-file-label {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0 6px;\n height: 20px;\n border-radius: 16px;\n line-height: 16px;\n font-size: var(--size-12);\n font-weight: 500;\n user-select: none;\n cursor: pointer;\n background-color: var(--color-gray-300);\n color: var(--color-gray-1000);\n}\n.segment-explorer-file-label-text {\n display: inline-flex;\n align-items: center;\n}\n\n.segment-explorer-file-label--overridden {\n background-color: var(--color-amber-300);\n color: var(--color-amber-900);\n}\n\n.segment-explorer-file-label .code-icon {\n opacity: 0;\n margin-left: 0;\n width: 0;\n transition: all 0.15s ease-in-out;\n}\n.segment-explorer-file-label:hover .code-icon {\n opacity: 1;\n width: 12px;\n margin-left: 4px;\n}\n\n.segment-explorer-file-label:hover {\n filter: brightness(0.95);\n}\n\n.segment-explorer-file-label--builtin {\n background-color: transparent;\n color: var(--color-gray-900);\n border: 1px dashed var(--color-gray-500);\n height: 24px;\n cursor: default;\n}\n.segment-explorer-file-label--builtin svg {\n margin-left: 4px;\n margin-right: -4px;\n}\n\n/* Footer styles */\n.segment-explorer-footer {\n padding: 8px;\n border-top: 1px solid var(--color-gray-400);\n user-select: none;\n}\n\n.segment-explorer-footer-button {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n width: 100%;\n padding: 6px;\n background: var(--color-background-100);\n border: 1px solid var(--color-gray-400);\n border-radius: 6px;\n color: var(--color-gray-1000);\n font-size: var(--size-14);\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.segment-explorer-footer-button:hover:not(:disabled) {\n background: var(--color-gray-200);\n}\n\n.segment-explorer-footer-button--disabled {\n cursor: not-allowed;\n}\n\n.segment-explorer-footer-text {\n text-align: center;\n}\n\n.segment-explorer-footer-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: var(--color-amber-300);\n color: var(--color-amber-900);\n border-radius: 10px;\n font-size: var(--size-12);\n font-weight: 600;\n line-height: 1;\n}\n\n.segment-explorer-file-label-tooltip--sm {\n white-space: nowrap;\n}\n\n.segment-explorer-file-label-tooltip--lg {\n min-width: 200px;\n}\n\n.segment-explorer-suggestions {\n display: inline-flex;\n gap: 8px;\n}\n\n.segment-explorer-suggestions-tooltip {\n width: 200px;\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/overview/segment-explorer.css\"],names:[],mappings:\"AAAA;EACE,yBAAyB;EACzB,cAAc;EACd,WAAW;EACX,YAAY;AACd;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,6CAA6C;EAC7C,SAAS;AACX;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,6BAA6B;EAC7B,6BAA6B;EAC7B,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,6CAA6C;AAC/C;AACA;EACE,aAAa;EACb,sBAAsB;EACtB,iBAAiB;EACjB,oBAAoB;EACpB,kBAAkB;AACpB;AACA;EACE,aAAa;EACb,mBAAmB;EACnB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,WAAW;EACX,mBAAmB;AACrB;;AAEA;EACE,iBAAiB;AACnB;AACA;EACE,iBAAiB;AACnB;AACA;EACE,qBAAqB;EACrB,QAAQ;EACR,UAAU;AACZ;AACA;EACE,4BAA4B;AAC9B;;AAEA;EACE,oBAAoB;EACpB,QAAQ;EACR,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,cAAc;EACd,YAAY;EACZ,mBAAmB;EACnB,iBAAiB;EACjB,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;EACf,uCAAuC;EACvC,6BAA6B;AAC/B;AACA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,wCAAwC;EACxC,6BAA6B;AAC/B;;AAEA;EACE,UAAU;EACV,cAAc;EACd,QAAQ;EACR,iCAAiC;AACnC;AACA;EACE,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,6BAA6B;EAC7B,4BAA4B;EAC5B,wCAAwC;EACxC,YAAY;EACZ,eAAe;AACjB;AACA;EACE,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA,kBAAkB;AAClB;EACE,YAAY;EACZ,2CAA2C;EAC3C,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,uCAAuC;EACvC,uCAAuC;EACvC,kBAAkB;EAClB,6BAA6B;EAC7B,yBAAyB;EACzB,gBAAgB;EAChB,eAAe;EACf,uCAAuC;AACzC;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,eAAe;EACf,YAAY;EACZ,cAAc;EACd,kCAAkC;EAClC,6BAA6B;EAC7B,mBAAmB;EACnB,yBAAyB;EACzB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,QAAQ;AACV;;AAEA;EACE,YAAY;AACd\",sourcesContent:[\".segment-explorer-content {\\n font-size: var(--size-14);\\n padding: 0 8px;\\n width: 100%;\\n height: 100%;\\n}\\n\\n.segment-explorer-page-route-bar {\\n display: flex;\\n align-items: center;\\n padding: 14px 16px;\\n background-color: var(--color-background-200);\\n gap: 12px;\\n}\\n\\n.segment-explorer-page-route-bar-path {\\n font-size: var(--size-14);\\n font-weight: 500;\\n color: var(--color-gray-1000);\\n font-family: var(--font-mono);\\n white-space: nowrap;\\n line-height: 20px;\\n}\\n\\n.segment-explorer-item {\\n margin: 4px 0;\\n border-radius: 6px;\\n}\\n\\n.segment-explorer-item:nth-child(even) {\\n background-color: var(--color-background-200);\\n}\\n.segment-explorer-item-row {\\n display: flex;\\n flex-direction: column;\\n padding-top: 10px;\\n padding-bottom: 10px;\\n padding-right: 4px;\\n}\\n.segment-explorer-item-row-main {\\n display: flex;\\n align-items: center;\\n white-space: pre;\\n cursor: default;\\n color: var(--color-gray-1000);\\n}\\n\\n.segment-explorer-children--intended {\\n padding-left: 16px;\\n}\\n\\n.segment-explorer-filename {\\n display: inline-flex;\\n width: 100%;\\n align-items: center;\\n}\\n\\n.segment-explorer-filename select {\\n margin-left: auto;\\n}\\n.segment-explorer-filename--path {\\n margin-right: 8px;\\n}\\n.segment-explorer-filename--path small {\\n display: inline-block;\\n width: 0;\\n opacity: 0;\\n}\\n.segment-explorer-filename--name {\\n color: var(--color-gray-800);\\n}\\n\\n.segment-explorer-files {\\n display: inline-flex;\\n gap: 8px;\\n margin-left: auto;\\n}\\n\\n.segment-explorer-files + .segment-boundary-trigger {\\n margin-left: 8px;\\n}\\n\\n.segment-explorer-file-label {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n padding: 0 6px;\\n height: 20px;\\n border-radius: 16px;\\n line-height: 16px;\\n font-size: var(--size-12);\\n font-weight: 500;\\n user-select: none;\\n cursor: pointer;\\n background-color: var(--color-gray-300);\\n color: var(--color-gray-1000);\\n}\\n.segment-explorer-file-label-text {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\n.segment-explorer-file-label--overridden {\\n background-color: var(--color-amber-300);\\n color: var(--color-amber-900);\\n}\\n\\n.segment-explorer-file-label .code-icon {\\n opacity: 0;\\n margin-left: 0;\\n width: 0;\\n transition: all 0.15s ease-in-out;\\n}\\n.segment-explorer-file-label:hover .code-icon {\\n opacity: 1;\\n width: 12px;\\n margin-left: 4px;\\n}\\n\\n.segment-explorer-file-label:hover {\\n filter: brightness(0.95);\\n}\\n\\n.segment-explorer-file-label--builtin {\\n background-color: transparent;\\n color: var(--color-gray-900);\\n border: 1px dashed var(--color-gray-500);\\n height: 24px;\\n cursor: default;\\n}\\n.segment-explorer-file-label--builtin svg {\\n margin-left: 4px;\\n margin-right: -4px;\\n}\\n\\n/* Footer styles */\\n.segment-explorer-footer {\\n padding: 8px;\\n border-top: 1px solid var(--color-gray-400);\\n user-select: none;\\n}\\n\\n.segment-explorer-footer-button {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n width: 100%;\\n padding: 6px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-400);\\n border-radius: 6px;\\n color: var(--color-gray-1000);\\n font-size: var(--size-14);\\n font-weight: 500;\\n cursor: pointer;\\n transition: background-color 0.15s ease;\\n}\\n\\n.segment-explorer-footer-button:hover:not(:disabled) {\\n background: var(--color-gray-200);\\n}\\n\\n.segment-explorer-footer-button--disabled {\\n cursor: not-allowed;\\n}\\n\\n.segment-explorer-footer-text {\\n text-align: center;\\n}\\n\\n.segment-explorer-footer-badge {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n min-width: 20px;\\n height: 20px;\\n padding: 0 6px;\\n background: var(--color-amber-300);\\n color: var(--color-amber-900);\\n border-radius: 10px;\\n font-size: var(--size-12);\\n font-weight: 600;\\n line-height: 1;\\n}\\n\\n.segment-explorer-file-label-tooltip--sm {\\n white-space: nowrap;\\n}\\n\\n.segment-explorer-file-label-tooltip--lg {\\n min-width: 200px;\\n}\\n\\n.segment-explorer-suggestions {\\n display: inline-flex;\\n gap: 8px;\\n}\\n\\n.segment-explorer-suggestions-tooltip {\\n width: 200px;\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/toast/style.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>l});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a)()(o());i.push([e.id,`.nextjs-toast {\n position: fixed;\n z-index: var(--top-z-index);\n max-width: 420px;\n box-shadow: 0px 16px 32px rgba(0, 0, 0, 0.25);\n}\n\n.nextjs-toast-errors-parent {\n padding: 16px;\n border-radius: var(--rounded-4xl);\n font-weight: 500;\n color: var(--color-ansi-bright-white);\n background-color: var(--color-ansi-red);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/toast/style.css\"],names:[],mappings:\"AAAA;EACE,eAAe;EACf,2BAA2B;EAC3B,gBAAgB;EAChB,6CAA6C;AAC/C;;AAEA;EACE,aAAa;EACb,iCAAiC;EACjC,gBAAgB;EAChB,qCAAqC;EACrC,uCAAuC;AACzC\",sourcesContent:[\".nextjs-toast {\\n position: fixed;\\n z-index: var(--top-z-index);\\n max-width: 420px;\\n box-shadow: 0px 16px 32px rgba(0, 0, 0, 0.25);\\n}\\n\\n.nextjs-toast-errors-parent {\\n padding: 16px;\\n border-radius: var(--rounded-4xl);\\n font-weight: 500;\\n color: var(--color-ansi-bright-white);\\n background-color: var(--color-ansi-red);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/tooltip/tooltip.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>l});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a)()(o());i.push([e.id,`.tooltip-wrapper {\n position: relative;\n display: inline-block;\n line-height: 1;\n}\n\n.tooltip {\n position: relative;\n padding: 6px 12px;\n border-radius: 8px;\n font-size: 14px;\n line-height: 1.4;\n pointer-events: none;\n color: var(--color-gray-100);\n background-color: var(--color-gray-1000);\n}\n\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: var(--arrow-size, 6px);\n border-color: transparent;\n}\n\n.tooltip-arrow--top {\n border-width: var(--arrow-size, 6px) var(--arrow-size, 6px) 0\n var(--arrow-size, 6px);\n border-top-color: var(--color-gray-1000);\n bottom: 0;\n transform: translateY(100%);\n}\n\n.tooltip-arrow--bottom {\n border-width: 0 var(--arrow-size, 6px) var(--arrow-size, 6px)\n var(--arrow-size, 6px);\n border-bottom-color: var(--color-gray-1000);\n top: 0;\n transform: translateY(-100%);\n}\n\n.tooltip-arrow--left {\n border-width: var(--arrow-size, 6px) 0 var(--arrow-size, 6px)\n var(--arrow-size, 6px);\n border-left-color: var(--color-gray-1000);\n right: 0;\n transform: translateX(100%);\n}\n\n.tooltip-arrow--right {\n border-width: var(--arrow-size, 6px) var(--arrow-size, 6px)\n var(--arrow-size, 6px) 0;\n border-right-color: var(--color-gray-1000);\n left: 0;\n transform: translateX(-100%);\n}\n\n.tooltip-positioner {\n z-index: var(--top-z-index);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/tooltip/tooltip.css\"],names:[],mappings:\"AAAA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,cAAc;AAChB;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;EACjB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,oBAAoB;EACpB,4BAA4B;EAC5B,wCAAwC;AAC1C;;AAEA;EACE,kBAAkB;EAClB,QAAQ;EACR,SAAS;EACT,mBAAmB;EACnB,oCAAoC;EACpC,yBAAyB;AAC3B;;AAEA;EACE;0BACwB;EACxB,wCAAwC;EACxC,SAAS;EACT,2BAA2B;AAC7B;;AAEA;EACE;0BACwB;EACxB,2CAA2C;EAC3C,MAAM;EACN,4BAA4B;AAC9B;;AAEA;EACE;0BACwB;EACxB,yCAAyC;EACzC,QAAQ;EACR,2BAA2B;AAC7B;;AAEA;EACE;4BAC0B;EAC1B,0CAA0C;EAC1C,OAAO;EACP,4BAA4B;AAC9B;;AAEA;EACE,2BAA2B;AAC7B\",sourcesContent:[\".tooltip-wrapper {\\n position: relative;\\n display: inline-block;\\n line-height: 1;\\n}\\n\\n.tooltip {\\n position: relative;\\n padding: 6px 12px;\\n border-radius: 8px;\\n font-size: 14px;\\n line-height: 1.4;\\n pointer-events: none;\\n color: var(--color-gray-100);\\n background-color: var(--color-gray-1000);\\n}\\n\\n.tooltip-arrow {\\n position: absolute;\\n width: 0;\\n height: 0;\\n border-style: solid;\\n border-width: var(--arrow-size, 6px);\\n border-color: transparent;\\n}\\n\\n.tooltip-arrow--top {\\n border-width: var(--arrow-size, 6px) var(--arrow-size, 6px) 0\\n var(--arrow-size, 6px);\\n border-top-color: var(--color-gray-1000);\\n bottom: 0;\\n transform: translateY(100%);\\n}\\n\\n.tooltip-arrow--bottom {\\n border-width: 0 var(--arrow-size, 6px) var(--arrow-size, 6px)\\n var(--arrow-size, 6px);\\n border-bottom-color: var(--color-gray-1000);\\n top: 0;\\n transform: translateY(-100%);\\n}\\n\\n.tooltip-arrow--left {\\n border-width: var(--arrow-size, 6px) 0 var(--arrow-size, 6px)\\n var(--arrow-size, 6px);\\n border-left-color: var(--color-gray-1000);\\n right: 0;\\n transform: translateX(100%);\\n}\\n\\n.tooltip-arrow--right {\\n border-width: var(--arrow-size, 6px) var(--arrow-size, 6px)\\n var(--arrow-size, 6px) 0;\\n border-right-color: var(--color-gray-1000);\\n left: 0;\\n transform: translateX(-100%);\\n}\\n\\n.tooltip-positioner {\\n z-index: var(--top-z-index);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/global.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>f});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a),l=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/normalize.css\"),s=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/styles/default-theme.css\"),c=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/styles/dark-theme.css\"),u=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/styles/colors.css\"),d=i()(o());d.i(l.Z),d.i(s.Z),d.i(c.Z),d.i(u.Z),d.push([e.id,`/* devtool global css variables */\n:host {\n /* variables */\n --top-z-index: 2147483647;\n}\n\n/* global styles */\n* {\n -webkit-font-smoothing: antialiased;\n}\n\n/* global reset for draggable content scrollbar styles */\n[data-nextjs-scrollable-content],\n[data-nextjs-scrollable-content] * {\n &::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n border-radius: 0 0 1rem 1rem;\n margin-bottom: 1rem;\n }\n\n &::-webkit-scrollbar-button {\n display: none;\n }\n\n &::-webkit-scrollbar-track {\n border-radius: 0 0 1rem 1rem;\n background-color: var(--color-background-100);\n }\n\n &::-webkit-scrollbar-thumb {\n border-radius: 1rem;\n background-color: var(--color-gray-500);\n }\n}\n\n/* Place overflow: hidden on this so we can break out from [data-nextjs-dialog] */\n[data-nextjs-scrollable-content] {\n overflow: hidden;\n border-radius: inherit;\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/global.css\"],names:[],mappings:\"AAKA,iCAAiC;AACjC;EACE,cAAc;EACd,yBAAyB;AAC3B;;AAEA,kBAAkB;AAClB;EACE,mCAAmC;AACrC;;AAEA,wDAAwD;AACxD;;EAEE;IACE,UAAU;IACV,WAAW;IACX,4BAA4B;IAC5B,mBAAmB;EACrB;;EAEA;IACE,aAAa;EACf;;EAEA;IACE,4BAA4B;IAC5B,6CAA6C;EAC/C;;EAEA;IACE,mBAAmB;IACnB,uCAAuC;EACzC;AACF;;AAEA,iFAAiF;AACjF;EACE,gBAAgB;EAChB,sBAAsB;AACxB\",sourcesContent:[\"@import './normalize.css';\\n@import './styles/default-theme.css';\\n@import './styles/dark-theme.css';\\n@import './styles/colors.css';\\n\\n/* devtool global css variables */\\n:host {\\n /* variables */\\n --top-z-index: 2147483647;\\n}\\n\\n/* global styles */\\n* {\\n -webkit-font-smoothing: antialiased;\\n}\\n\\n/* global reset for draggable content scrollbar styles */\\n[data-nextjs-scrollable-content],\\n[data-nextjs-scrollable-content] * {\\n &::-webkit-scrollbar {\\n width: 6px;\\n height: 6px;\\n border-radius: 0 0 1rem 1rem;\\n margin-bottom: 1rem;\\n }\\n\\n &::-webkit-scrollbar-button {\\n display: none;\\n }\\n\\n &::-webkit-scrollbar-track {\\n border-radius: 0 0 1rem 1rem;\\n background-color: var(--color-background-100);\\n }\\n\\n &::-webkit-scrollbar-thumb {\\n border-radius: 1rem;\\n background-color: var(--color-gray-500);\\n }\\n}\\n\\n/* Place overflow: hidden on this so we can break out from [data-nextjs-dialog] */\\n[data-nextjs-scrollable-content] {\\n overflow: hidden;\\n border-radius: inherit;\\n}\\n\"],sourceRoot:\"\"}]);let f=d},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/menu/panel-router.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>l});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a)()(o());i.push([e.id,`/* Panel content padding styles */\n.panel-content {\n padding: 16px;\n padding-top: 8px;\n overflow: hidden;\n}\n\n/* User preferences wrapper styles */\n.user-preferences-wrapper {\n padding: 20px;\n padding-top: 8px;\n overflow: hidden;\n}\n\n/* Panel route base styles */\n.panel-route {\n opacity: var(--panel-opacity);\n transition: var(--panel-transition);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/menu/panel-router.css\"],names:[],mappings:\"AAAA,iCAAiC;AACjC;EACE,aAAa;EACb,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA,oCAAoC;AACpC;EACE,aAAa;EACb,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA,4BAA4B;AAC5B;EACE,6BAA6B;EAC7B,mCAAmC;AACrC\",sourcesContent:[\"/* Panel content padding styles */\\n.panel-content {\\n padding: 16px;\\n padding-top: 8px;\\n overflow: hidden;\\n}\\n\\n/* User preferences wrapper styles */\\n.user-preferences-wrapper {\\n padding: 20px;\\n padding-top: 8px;\\n overflow: hidden;\\n}\\n\\n/* Panel route base styles */\\n.panel-route {\\n opacity: var(--panel-opacity);\\n transition: var(--panel-transition);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/normalize.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>l});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a)()(o());i.push([e.id,`:host {\n all: initial;\n\n /* the direction property is not reset by 'all' */\n direction: ltr;\n}\n\n/*!\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle,\naside,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection {\n display: block;\n}\n\n:host {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\n 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji',\n 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n font-size: 16px;\n font-weight: 400;\n line-height: 1.5;\n color: var(--color-font);\n text-align: left;\n}\n\n:host:not(button) {\n background-color: #fff;\n}\n\n[tabindex='-1']:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 8px;\n}\n\np {\n margin-top: 0;\n margin-bottom: 16px;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 16px;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 16px;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 8px;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 16px;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono',\n 'Courier New', monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 16px;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 16px;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 12px;\n padding-bottom: 12px;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 8px;\n}\n\nbutton {\n border-radius: 0;\n border: 0;\n padding: 0;\n margin: 0;\n background: none;\n appearance: none;\n -webkit-appearance: none;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: none;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type='button']:not(:disabled),\n[type='reset']:not(:disabled),\n[type='submit']:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type='button']::-moz-focus-inner,\n[type='reset']::-moz-focus-inner,\n[type='submit']::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type='radio'],\ninput[type='checkbox'] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type='date'],\ninput[type='time'],\ninput[type='datetime-local'],\ninput[type='month'] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: 8px;\n font-size: 24px;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type='number']::-webkit-inner-spin-button,\n[type='number']::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type='search'] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type='search']::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/normalize.css\"],names:[],mappings:\"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\",sourcesContent:[\":host {\\n all: initial;\\n\\n /* the direction property is not reset by 'all' */\\n direction: ltr;\\n}\\n\\n/*!\\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\\n * Copyright 2011-2019 The Bootstrap Authors\\n * Copyright 2011-2019 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\\n */\\n*,\\n*::before,\\n*::after {\\n box-sizing: border-box;\\n}\\n\\n:host {\\n font-family: sans-serif;\\n line-height: 1.15;\\n -webkit-text-size-adjust: 100%;\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n}\\n\\narticle,\\naside,\\nfigcaption,\\nfigure,\\nfooter,\\nheader,\\nhgroup,\\nmain,\\nnav,\\nsection {\\n display: block;\\n}\\n\\n:host {\\n margin: 0;\\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\\n 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji',\\n 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\\n font-size: 16px;\\n font-weight: 400;\\n line-height: 1.5;\\n color: var(--color-font);\\n text-align: left;\\n}\\n\\n:host:not(button) {\\n background-color: #fff;\\n}\\n\\n[tabindex='-1']:focus:not(:focus-visible) {\\n outline: 0 !important;\\n}\\n\\nhr {\\n box-sizing: content-box;\\n height: 0;\\n overflow: visible;\\n}\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n margin-top: 0;\\n margin-bottom: 8px;\\n}\\n\\np {\\n margin-top: 0;\\n margin-bottom: 16px;\\n}\\n\\nabbr[title],\\nabbr[data-original-title] {\\n text-decoration: underline;\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n cursor: help;\\n border-bottom: 0;\\n -webkit-text-decoration-skip-ink: none;\\n text-decoration-skip-ink: none;\\n}\\n\\naddress {\\n margin-bottom: 16px;\\n font-style: normal;\\n line-height: inherit;\\n}\\n\\nol,\\nul,\\ndl {\\n margin-top: 0;\\n margin-bottom: 16px;\\n}\\n\\nol ol,\\nul ul,\\nol ul,\\nul ol {\\n margin-bottom: 0;\\n}\\n\\ndt {\\n font-weight: 700;\\n}\\n\\ndd {\\n margin-bottom: 8px;\\n margin-left: 0;\\n}\\n\\nblockquote {\\n margin: 0 0 16px;\\n}\\n\\nb,\\nstrong {\\n font-weight: bolder;\\n}\\n\\nsmall {\\n font-size: 80%;\\n}\\n\\nsub,\\nsup {\\n position: relative;\\n font-size: 75%;\\n line-height: 0;\\n vertical-align: baseline;\\n}\\n\\nsub {\\n bottom: -0.25em;\\n}\\n\\nsup {\\n top: -0.5em;\\n}\\n\\na {\\n color: #007bff;\\n text-decoration: none;\\n background-color: transparent;\\n}\\n\\na:hover {\\n color: #0056b3;\\n text-decoration: underline;\\n}\\n\\na:not([href]) {\\n color: inherit;\\n text-decoration: none;\\n}\\n\\na:not([href]):hover {\\n color: inherit;\\n text-decoration: none;\\n}\\n\\npre,\\ncode,\\nkbd,\\nsamp {\\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono',\\n 'Courier New', monospace;\\n font-size: 1em;\\n}\\n\\npre {\\n margin-top: 0;\\n margin-bottom: 16px;\\n overflow: auto;\\n}\\n\\nfigure {\\n margin: 0 0 16px;\\n}\\n\\nimg {\\n vertical-align: middle;\\n border-style: none;\\n}\\n\\nsvg {\\n overflow: hidden;\\n vertical-align: middle;\\n}\\n\\ntable {\\n border-collapse: collapse;\\n}\\n\\ncaption {\\n padding-top: 12px;\\n padding-bottom: 12px;\\n color: #6c757d;\\n text-align: left;\\n caption-side: bottom;\\n}\\n\\nth {\\n text-align: inherit;\\n}\\n\\nlabel {\\n display: inline-block;\\n margin-bottom: 8px;\\n}\\n\\nbutton {\\n border-radius: 0;\\n border: 0;\\n padding: 0;\\n margin: 0;\\n background: none;\\n appearance: none;\\n -webkit-appearance: none;\\n}\\n\\nbutton:focus {\\n outline: 1px dotted;\\n outline: 5px auto -webkit-focus-ring-color;\\n}\\n\\nbutton:focus:not(:focus-visible) {\\n outline: none;\\n}\\n\\ninput,\\nbutton,\\nselect,\\noptgroup,\\ntextarea {\\n margin: 0;\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n}\\n\\nbutton,\\ninput {\\n overflow: visible;\\n}\\n\\nbutton,\\nselect {\\n text-transform: none;\\n}\\n\\nselect {\\n word-wrap: normal;\\n}\\n\\nbutton,\\n[type='button'],\\n[type='reset'],\\n[type='submit'] {\\n -webkit-appearance: button;\\n}\\n\\nbutton:not(:disabled),\\n[type='button']:not(:disabled),\\n[type='reset']:not(:disabled),\\n[type='submit']:not(:disabled) {\\n cursor: pointer;\\n}\\n\\nbutton::-moz-focus-inner,\\n[type='button']::-moz-focus-inner,\\n[type='reset']::-moz-focus-inner,\\n[type='submit']::-moz-focus-inner {\\n padding: 0;\\n border-style: none;\\n}\\n\\ninput[type='radio'],\\ninput[type='checkbox'] {\\n box-sizing: border-box;\\n padding: 0;\\n}\\n\\ninput[type='date'],\\ninput[type='time'],\\ninput[type='datetime-local'],\\ninput[type='month'] {\\n -webkit-appearance: listbox;\\n}\\n\\ntextarea {\\n overflow: auto;\\n resize: vertical;\\n}\\n\\nfieldset {\\n min-width: 0;\\n padding: 0;\\n margin: 0;\\n border: 0;\\n}\\n\\nlegend {\\n display: block;\\n width: 100%;\\n max-width: 100%;\\n padding: 0;\\n margin-bottom: 8px;\\n font-size: 24px;\\n line-height: inherit;\\n color: inherit;\\n white-space: normal;\\n}\\n\\nprogress {\\n vertical-align: baseline;\\n}\\n\\n[type='number']::-webkit-inner-spin-button,\\n[type='number']::-webkit-outer-spin-button {\\n height: auto;\\n}\\n\\n[type='search'] {\\n outline-offset: -2px;\\n -webkit-appearance: none;\\n}\\n\\n[type='search']::-webkit-search-decoration {\\n -webkit-appearance: none;\\n}\\n\\n::-webkit-file-upload-button {\\n font: inherit;\\n -webkit-appearance: button;\\n}\\n\\noutput {\\n display: inline-block;\\n}\\n\\nsummary {\\n display: list-item;\\n cursor: pointer;\\n}\\n\\ntemplate {\\n display: none;\\n}\\n\\n[hidden] {\\n display: none !important;\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/panel/dynamic-panel.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>l});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a)()(o());i.push([e.id,`/* Panel container base styles with dynamic positioning and sizing */\n.dynamic-panel-container {\n position: fixed;\n z-index: 2147483646;\n outline: none;\n top: var(--panel-top, auto);\n bottom: var(--panel-bottom, auto);\n left: var(--panel-left, auto);\n right: var(--panel-right, auto);\n width: var(--panel-width);\n height: var(--panel-height);\n min-width: var(--panel-min-width);\n min-height: var(--panel-min-height);\n max-width: var(--panel-max-width);\n max-height: var(--panel-max-height);\n}\n\n/* Panel content container styles */\n.panel-content-container {\n position: relative;\n width: 100%;\n height: 100%;\n border: 1px solid var(--color-gray-alpha-400);\n border-radius: var(--rounded-xl);\n background: var(--color-background-100);\n display: flex;\n flex-direction: column;\n}\n\n/* Draggable content area styles */\n.draggable-content {\n flex: 1;\n overflow: auto;\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/panel/dynamic-panel.css\"],names:[],mappings:\"AAAA,oEAAoE;AACpE;EACE,eAAe;EACf,mBAAmB;EACnB,aAAa;EACb,2BAA2B;EAC3B,iCAAiC;EACjC,6BAA6B;EAC7B,+BAA+B;EAC/B,yBAAyB;EACzB,2BAA2B;EAC3B,iCAAiC;EACjC,mCAAmC;EACnC,iCAAiC;EACjC,mCAAmC;AACrC;;AAEA,mCAAmC;AACnC;EACE,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,6CAA6C;EAC7C,gCAAgC;EAChC,uCAAuC;EACvC,aAAa;EACb,sBAAsB;AACxB;;AAEA,kCAAkC;AAClC;EACE,OAAO;EACP,cAAc;AAChB\",sourcesContent:[\"/* Panel container base styles with dynamic positioning and sizing */\\n.dynamic-panel-container {\\n position: fixed;\\n z-index: 2147483646;\\n outline: none;\\n top: var(--panel-top, auto);\\n bottom: var(--panel-bottom, auto);\\n left: var(--panel-left, auto);\\n right: var(--panel-right, auto);\\n width: var(--panel-width);\\n height: var(--panel-height);\\n min-width: var(--panel-min-width);\\n min-height: var(--panel-min-height);\\n max-width: var(--panel-max-width);\\n max-height: var(--panel-max-height);\\n}\\n\\n/* Panel content container styles */\\n.panel-content-container {\\n position: relative;\\n width: 100%;\\n height: 100%;\\n border: 1px solid var(--color-gray-alpha-400);\\n border-radius: var(--rounded-xl);\\n background: var(--color-background-100);\\n display: flex;\\n flex-direction: column;\\n}\\n\\n/* Draggable content area styles */\\n.draggable-content {\\n flex: 1;\\n overflow: auto;\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/styles/colors.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>l});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a)()(o());i.push([e.id,`:host {\n /* \n * CAUTION: THIS IS A WORKAROUND!\n * For now, we use @babel/code-frame to parse the code frame which does not support option to change the color.\n * x-ref: https://github.com/babel/babel/blob/efa52324ff835b794c48080f14877b6caf32cd15/packages/babel-code-frame/src/defs.ts#L40-L54\n * So, we do a workaround mapping to change the color matching the theme.\n *\n * For example, in @babel/code-frame, the \"keyword\" is mapped to ANSI \"cyan\".\n * We want the \"keyword\" to use the \"syntax-keyword\" color in the theme.\n * So, we map the \"cyan\" to the \"syntax-keyword\" in the theme.\n */\n /* cyan: keyword */\n --color-ansi-cyan: var(--color-syntax-keyword);\n /* yellow: capitalized, jsxIdentifier, punctuation */\n --color-ansi-yellow: var(--color-syntax-function);\n /* magenta: number, regex */\n --color-ansi-magenta: var(--color-syntax-keyword);\n /* green: string */\n --color-ansi-green: var(--color-syntax-string);\n /* gray (bright black): comment, gutter */\n --color-ansi-bright-black: var(--color-syntax-comment);\n\n /* Ansi - Temporary */\n --color-ansi-selection: var(--color-gray-alpha-300);\n --color-ansi-bg: var(--color-background-200);\n --color-ansi-fg: var(--color-gray-1000);\n\n --color-ansi-white: var(--color-gray-700);\n --color-ansi-black: var(--color-gray-200);\n --color-ansi-blue: var(--color-blue-700);\n --color-ansi-red: var(--color-red-700);\n --color-ansi-bright-white: var(--color-gray-1000);\n --color-ansi-bright-blue: var(--color-blue-800);\n --color-ansi-bright-cyan: var(--color-blue-800);\n --color-ansi-bright-green: var(--color-green-800);\n --color-ansi-bright-magenta: var(--color-blue-800);\n --color-ansi-bright-red: var(--color-red-800);\n --color-ansi-bright-yellow: var(--color-amber-900);\n\n /* Background Light */\n --color-background-100: #ffffff;\n --color-background-200: #fafafa;\n\n /* Syntax Light */\n --color-syntax-comment: #545454;\n --color-syntax-constant: #171717;\n --color-syntax-function: #0054ad;\n --color-syntax-keyword: #a51850;\n --color-syntax-link: #066056;\n --color-syntax-parameter: #8f3e00;\n --color-syntax-punctuation: #171717;\n --color-syntax-string: #036157;\n --color-syntax-string-expression: #066056;\n\n /* Gray Scale Light */\n --color-gray-100: #f2f2f2;\n --color-gray-200: #ebebeb;\n --color-gray-300: #e6e6e6;\n --color-gray-400: #eaeaea;\n --color-gray-500: #c9c9c9;\n --color-gray-600: #a8a8a8;\n --color-gray-700: #8f8f8f;\n --color-gray-800: #7d7d7d;\n --color-gray-900: #666666;\n --color-gray-1000: #171717;\n\n /* Gray Alpha Scale Light */\n --color-gray-alpha-100: rgba(0, 0, 0, 0.05);\n --color-gray-alpha-200: rgba(0, 0, 0, 0.081);\n --color-gray-alpha-300: rgba(0, 0, 0, 0.1);\n --color-gray-alpha-400: rgba(0, 0, 0, 0.08);\n --color-gray-alpha-500: rgba(0, 0, 0, 0.21);\n --color-gray-alpha-600: rgba(0, 0, 0, 0.34);\n --color-gray-alpha-700: rgba(0, 0, 0, 0.44);\n --color-gray-alpha-800: rgba(0, 0, 0, 0.51);\n --color-gray-alpha-900: rgba(0, 0, 0, 0.605);\n --color-gray-alpha-1000: rgba(0, 0, 0, 0.91);\n\n /* Blue Scale Light */\n --color-blue-100: #f0f7ff;\n --color-blue-200: #edf6ff;\n --color-blue-300: #e1f0ff;\n --color-blue-400: #cde7ff;\n --color-blue-500: #99ceff;\n --color-blue-600: #52aeff;\n --color-blue-700: #0070f3;\n --color-blue-800: #0060d1;\n --color-blue-900: #0067d6;\n --color-blue-1000: #0025ad;\n\n /* Red Scale Light */\n --color-red-100: #fff0f0;\n --color-red-200: #ffebeb;\n --color-red-300: #ffe5e5;\n --color-red-400: #fdd8d8;\n --color-red-500: #f8baba;\n --color-red-600: #f87274;\n --color-red-700: #e5484d;\n --color-red-800: #da3036;\n --color-red-900: #ca2a30;\n --color-red-1000: #381316;\n\n /* Amber Scale Light */\n --color-amber-100: #fff6e5;\n --color-amber-200: #fff4d5;\n --color-amber-300: #fef0cd;\n --color-amber-400: #ffddbf;\n --color-amber-500: #ffc96b;\n --color-amber-600: #f5b047;\n --color-amber-700: #ffb224;\n --color-amber-800: #ff990a;\n --color-amber-900: #a35200;\n --color-amber-1000: #4e2009;\n\n /* Green Scale Light */\n --color-green-100: #effbef;\n --color-green-200: #eafaea;\n --color-green-300: #dcf6dc;\n --color-green-400: #c8f1c9;\n --color-green-500: #99e59f;\n --color-green-600: #6cda76;\n --color-green-700: #46a758;\n --color-green-800: #388e4a;\n --color-green-900: #297c3b;\n --color-green-1000: #18311e;\n\n /* Turbopack Light - Temporary */\n --color-turbopack-text-red: #ff1e56;\n --color-turbopack-text-blue: #0096ff;\n --color-turbopack-border-red: #f0adbe;\n --color-turbopack-border-blue: #adccea;\n --color-turbopack-background-red: #fff7f9;\n --color-turbopack-background-blue: #f6fbff;\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/styles/colors.css\"],names:[],mappings:\"AAAA;EACE;;;;;;;;;IASE;EACF,kBAAkB;EAClB,8CAA8C;EAC9C,oDAAoD;EACpD,iDAAiD;EACjD,2BAA2B;EAC3B,iDAAiD;EACjD,kBAAkB;EAClB,8CAA8C;EAC9C,yCAAyC;EACzC,sDAAsD;;EAEtD,qBAAqB;EACrB,mDAAmD;EACnD,4CAA4C;EAC5C,uCAAuC;;EAEvC,yCAAyC;EACzC,yCAAyC;EACzC,wCAAwC;EACxC,sCAAsC;EACtC,iDAAiD;EACjD,+CAA+C;EAC/C,+CAA+C;EAC/C,iDAAiD;EACjD,kDAAkD;EAClD,6CAA6C;EAC7C,kDAAkD;;EAElD,qBAAqB;EACrB,+BAA+B;EAC/B,+BAA+B;;EAE/B,iBAAiB;EACjB,+BAA+B;EAC/B,gCAAgC;EAChC,gCAAgC;EAChC,+BAA+B;EAC/B,4BAA4B;EAC5B,iCAAiC;EACjC,mCAAmC;EACnC,8BAA8B;EAC9B,yCAAyC;;EAEzC,qBAAqB;EACrB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,0BAA0B;;EAE1B,2BAA2B;EAC3B,2CAA2C;EAC3C,4CAA4C;EAC5C,0CAA0C;EAC1C,2CAA2C;EAC3C,2CAA2C;EAC3C,2CAA2C;EAC3C,2CAA2C;EAC3C,2CAA2C;EAC3C,4CAA4C;EAC5C,4CAA4C;;EAE5C,qBAAqB;EACrB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,0BAA0B;;EAE1B,oBAAoB;EACpB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,yBAAyB;;EAEzB,sBAAsB;EACtB,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,2BAA2B;;EAE3B,sBAAsB;EACtB,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,2BAA2B;;EAE3B,gCAAgC;EAChC,mCAAmC;EACnC,oCAAoC;EACpC,qCAAqC;EACrC,sCAAsC;EACtC,yCAAyC;EACzC,0CAA0C;AAC5C\",sourcesContent:[':host {\\n /* \\n * CAUTION: THIS IS A WORKAROUND!\\n * For now, we use @babel/code-frame to parse the code frame which does not support option to change the color.\\n * x-ref: https://github.com/babel/babel/blob/efa52324ff835b794c48080f14877b6caf32cd15/packages/babel-code-frame/src/defs.ts#L40-L54\\n * So, we do a workaround mapping to change the color matching the theme.\\n *\\n * For example, in @babel/code-frame, the \"keyword\" is mapped to ANSI \"cyan\".\\n * We want the \"keyword\" to use the \"syntax-keyword\" color in the theme.\\n * So, we map the \"cyan\" to the \"syntax-keyword\" in the theme.\\n */\\n /* cyan: keyword */\\n --color-ansi-cyan: var(--color-syntax-keyword);\\n /* yellow: capitalized, jsxIdentifier, punctuation */\\n --color-ansi-yellow: var(--color-syntax-function);\\n /* magenta: number, regex */\\n --color-ansi-magenta: var(--color-syntax-keyword);\\n /* green: string */\\n --color-ansi-green: var(--color-syntax-string);\\n /* gray (bright black): comment, gutter */\\n --color-ansi-bright-black: var(--color-syntax-comment);\\n\\n /* Ansi - Temporary */\\n --color-ansi-selection: var(--color-gray-alpha-300);\\n --color-ansi-bg: var(--color-background-200);\\n --color-ansi-fg: var(--color-gray-1000);\\n\\n --color-ansi-white: var(--color-gray-700);\\n --color-ansi-black: var(--color-gray-200);\\n --color-ansi-blue: var(--color-blue-700);\\n --color-ansi-red: var(--color-red-700);\\n --color-ansi-bright-white: var(--color-gray-1000);\\n --color-ansi-bright-blue: var(--color-blue-800);\\n --color-ansi-bright-cyan: var(--color-blue-800);\\n --color-ansi-bright-green: var(--color-green-800);\\n --color-ansi-bright-magenta: var(--color-blue-800);\\n --color-ansi-bright-red: var(--color-red-800);\\n --color-ansi-bright-yellow: var(--color-amber-900);\\n\\n /* Background Light */\\n --color-background-100: #ffffff;\\n --color-background-200: #fafafa;\\n\\n /* Syntax Light */\\n --color-syntax-comment: #545454;\\n --color-syntax-constant: #171717;\\n --color-syntax-function: #0054ad;\\n --color-syntax-keyword: #a51850;\\n --color-syntax-link: #066056;\\n --color-syntax-parameter: #8f3e00;\\n --color-syntax-punctuation: #171717;\\n --color-syntax-string: #036157;\\n --color-syntax-string-expression: #066056;\\n\\n /* Gray Scale Light */\\n --color-gray-100: #f2f2f2;\\n --color-gray-200: #ebebeb;\\n --color-gray-300: #e6e6e6;\\n --color-gray-400: #eaeaea;\\n --color-gray-500: #c9c9c9;\\n --color-gray-600: #a8a8a8;\\n --color-gray-700: #8f8f8f;\\n --color-gray-800: #7d7d7d;\\n --color-gray-900: #666666;\\n --color-gray-1000: #171717;\\n\\n /* Gray Alpha Scale Light */\\n --color-gray-alpha-100: rgba(0, 0, 0, 0.05);\\n --color-gray-alpha-200: rgba(0, 0, 0, 0.081);\\n --color-gray-alpha-300: rgba(0, 0, 0, 0.1);\\n --color-gray-alpha-400: rgba(0, 0, 0, 0.08);\\n --color-gray-alpha-500: rgba(0, 0, 0, 0.21);\\n --color-gray-alpha-600: rgba(0, 0, 0, 0.34);\\n --color-gray-alpha-700: rgba(0, 0, 0, 0.44);\\n --color-gray-alpha-800: rgba(0, 0, 0, 0.51);\\n --color-gray-alpha-900: rgba(0, 0, 0, 0.605);\\n --color-gray-alpha-1000: rgba(0, 0, 0, 0.91);\\n\\n /* Blue Scale Light */\\n --color-blue-100: #f0f7ff;\\n --color-blue-200: #edf6ff;\\n --color-blue-300: #e1f0ff;\\n --color-blue-400: #cde7ff;\\n --color-blue-500: #99ceff;\\n --color-blue-600: #52aeff;\\n --color-blue-700: #0070f3;\\n --color-blue-800: #0060d1;\\n --color-blue-900: #0067d6;\\n --color-blue-1000: #0025ad;\\n\\n /* Red Scale Light */\\n --color-red-100: #fff0f0;\\n --color-red-200: #ffebeb;\\n --color-red-300: #ffe5e5;\\n --color-red-400: #fdd8d8;\\n --color-red-500: #f8baba;\\n --color-red-600: #f87274;\\n --color-red-700: #e5484d;\\n --color-red-800: #da3036;\\n --color-red-900: #ca2a30;\\n --color-red-1000: #381316;\\n\\n /* Amber Scale Light */\\n --color-amber-100: #fff6e5;\\n --color-amber-200: #fff4d5;\\n --color-amber-300: #fef0cd;\\n --color-amber-400: #ffddbf;\\n --color-amber-500: #ffc96b;\\n --color-amber-600: #f5b047;\\n --color-amber-700: #ffb224;\\n --color-amber-800: #ff990a;\\n --color-amber-900: #a35200;\\n --color-amber-1000: #4e2009;\\n\\n /* Green Scale Light */\\n --color-green-100: #effbef;\\n --color-green-200: #eafaea;\\n --color-green-300: #dcf6dc;\\n --color-green-400: #c8f1c9;\\n --color-green-500: #99e59f;\\n --color-green-600: #6cda76;\\n --color-green-700: #46a758;\\n --color-green-800: #388e4a;\\n --color-green-900: #297c3b;\\n --color-green-1000: #18311e;\\n\\n /* Turbopack Light - Temporary */\\n --color-turbopack-text-red: #ff1e56;\\n --color-turbopack-text-blue: #0096ff;\\n --color-turbopack-border-red: #f0adbe;\\n --color-turbopack-border-blue: #adccea;\\n --color-turbopack-background-red: #fff7f9;\\n --color-turbopack-background-blue: #f6fbff;\\n}\\n'],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/styles/dark-theme.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>l});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a)()(o());i.push([e.id,`:host(.dark) {\n --color-font: white;\n --color-backdrop: rgba(0, 0, 0, 0.8);\n --color-border-shadow: rgba(255, 255, 255, 0.145);\n\n --color-title-color: #fafafa;\n --color-stack-notes: #a9a9a9;\n\n /* Background Dark */\n --color-background-100: #0a0a0a;\n --color-background-200: #000000;\n\n /* Syntax Dark */\n --color-syntax-comment: #a0a0a0;\n --color-syntax-constant: #ededed;\n --color-syntax-function: #52a9ff;\n --color-syntax-keyword: #f76e99;\n --color-syntax-link: #0ac5b2;\n --color-syntax-parameter: #f1a10d;\n --color-syntax-punctuation: #ededed;\n --color-syntax-string: #0ac5b2;\n --color-syntax-string-expression: #0ac5b2;\n\n /* Gray Scale Dark */\n --color-gray-100: #1a1a1a;\n --color-gray-200: #1f1f1f;\n --color-gray-300: #292929;\n --color-gray-400: #2e2e2e;\n --color-gray-500: #454545;\n --color-gray-600: #878787;\n --color-gray-700: #8f8f8f;\n --color-gray-800: #7d7d7d;\n --color-gray-900: #a0a0a0;\n --color-gray-1000: #ededed;\n\n /* Gray Alpha Scale Dark */\n --color-gray-alpha-100: rgba(255, 255, 255, 0.066);\n --color-gray-alpha-200: rgba(255, 255, 255, 0.087);\n --color-gray-alpha-300: rgba(255, 255, 255, 0.125);\n --color-gray-alpha-400: rgba(255, 255, 255, 0.145);\n --color-gray-alpha-500: rgba(255, 255, 255, 0.239);\n --color-gray-alpha-600: rgba(255, 255, 255, 0.506);\n --color-gray-alpha-700: rgba(255, 255, 255, 0.54);\n --color-gray-alpha-800: rgba(255, 255, 255, 0.47);\n --color-gray-alpha-900: rgba(255, 255, 255, 0.61);\n --color-gray-alpha-1000: rgba(255, 255, 255, 0.923);\n\n /* Blue Scale Dark */\n --color-blue-100: #0f1b2d;\n --color-blue-200: #10243e;\n --color-blue-300: #0f3058;\n --color-blue-400: #0d3868;\n --color-blue-500: #0a4481;\n --color-blue-600: #0091ff;\n --color-blue-700: #0070f3;\n --color-blue-800: #0060d1;\n --color-blue-900: #52a9ff;\n --color-blue-1000: #eaf6ff;\n\n /* Red Scale Dark */\n --color-red-100: #2a1314;\n --color-red-200: #3d1719;\n --color-red-300: #551a1e;\n --color-red-400: #671e22;\n --color-red-500: #822025;\n --color-red-600: #e5484d;\n --color-red-700: #e5484d;\n --color-red-800: #da3036;\n --color-red-900: #ff6369;\n --color-red-1000: #ffecee;\n\n /* Amber Scale Dark */\n --color-amber-100: #271700;\n --color-amber-200: #341c00;\n --color-amber-300: #4a2900;\n --color-amber-400: #573300;\n --color-amber-500: #693f05;\n --color-amber-600: #e79c13;\n --color-amber-700: #ffb224;\n --color-amber-800: #ff990a;\n --color-amber-900: #f1a10d;\n --color-amber-1000: #fef3dd;\n\n /* Green Scale Dark */\n --color-green-100: #0b2211;\n --color-green-200: #0f2c17;\n --color-green-300: #11351b;\n --color-green-400: #0c461b;\n --color-green-500: #126427;\n --color-green-600: #1a9338;\n --color-green-700: #46a758;\n --color-green-800: #388e4a;\n --color-green-900: #63c174;\n --color-green-1000: #e5fbeb;\n\n /* Turbopack Dark - Temporary */\n --color-turbopack-text-red: #ff6d92;\n --color-turbopack-text-blue: #45b2ff;\n --color-turbopack-border-red: #6e293b;\n --color-turbopack-border-blue: #284f80;\n --color-turbopack-background-red: #250d12;\n --color-turbopack-background-blue: #0a1723;\n}\n\n@media (prefers-color-scheme: dark) {\n :host(:not(.light)) {\n --color-font: white;\n --color-backdrop: rgba(0, 0, 0, 0.8);\n --color-border-shadow: rgba(255, 255, 255, 0.145);\n\n --color-title-color: #fafafa;\n --color-stack-notes: #a9a9a9;\n\n /* Background Dark */\n --color-background-100: #0a0a0a;\n --color-background-200: #000000;\n\n /* Syntax Dark */\n --color-syntax-comment: #a0a0a0;\n --color-syntax-constant: #ededed;\n --color-syntax-function: #52a9ff;\n --color-syntax-keyword: #f76e99;\n --color-syntax-link: #0ac5b2;\n --color-syntax-parameter: #f1a10d;\n --color-syntax-punctuation: #ededed;\n --color-syntax-string: #0ac5b2;\n --color-syntax-string-expression: #0ac5b2;\n\n /* Gray Scale Dark */\n --color-gray-100: #1a1a1a;\n --color-gray-200: #1f1f1f;\n --color-gray-300: #292929;\n --color-gray-400: #2e2e2e;\n --color-gray-500: #454545;\n --color-gray-600: #878787;\n --color-gray-700: #8f8f8f;\n --color-gray-800: #7d7d7d;\n --color-gray-900: #a0a0a0;\n --color-gray-1000: #ededed;\n\n /* Gray Alpha Scale Dark */\n --color-gray-alpha-100: rgba(255, 255, 255, 0.066);\n --color-gray-alpha-200: rgba(255, 255, 255, 0.087);\n --color-gray-alpha-300: rgba(255, 255, 255, 0.125);\n --color-gray-alpha-400: rgba(255, 255, 255, 0.145);\n --color-gray-alpha-500: rgba(255, 255, 255, 0.239);\n --color-gray-alpha-600: rgba(255, 255, 255, 0.506);\n --color-gray-alpha-700: rgba(255, 255, 255, 0.54);\n --color-gray-alpha-800: rgba(255, 255, 255, 0.47);\n --color-gray-alpha-900: rgba(255, 255, 255, 0.61);\n --color-gray-alpha-1000: rgba(255, 255, 255, 0.923);\n\n /* Blue Scale Dark */\n --color-blue-100: #0f1b2d;\n --color-blue-200: #10243e;\n --color-blue-300: #0f3058;\n --color-blue-400: #0d3868;\n --color-blue-500: #0a4481;\n --color-blue-600: #0091ff;\n --color-blue-700: #0070f3;\n --color-blue-800: #0060d1;\n --color-blue-900: #52a9ff;\n --color-blue-1000: #eaf6ff;\n\n /* Red Scale Dark */\n --color-red-100: #2a1314;\n --color-red-200: #3d1719;\n --color-red-300: #551a1e;\n --color-red-400: #671e22;\n --color-red-500: #822025;\n --color-red-600: #e5484d;\n --color-red-700: #e5484d;\n --color-red-800: #da3036;\n --color-red-900: #ff6369;\n --color-red-1000: #ffecee;\n\n /* Amber Scale Dark */\n --color-amber-100: #271700;\n --color-amber-200: #341c00;\n --color-amber-300: #4a2900;\n --color-amber-400: #573300;\n --color-amber-500: #693f05;\n --color-amber-600: #e79c13;\n --color-amber-700: #ffb224;\n --color-amber-800: #ff990a;\n --color-amber-900: #f1a10d;\n --color-amber-1000: #fef3dd;\n\n /* Green Scale Dark */\n --color-green-100: #0b2211;\n --color-green-200: #0f2c17;\n --color-green-300: #11351b;\n --color-green-400: #0c461b;\n --color-green-500: #126427;\n --color-green-600: #1a9338;\n --color-green-700: #46a758;\n --color-green-800: #388e4a;\n --color-green-900: #63c174;\n --color-green-1000: #e5fbeb;\n\n /* Turbopack Dark - Temporary */\n --color-turbopack-text-red: #ff6d92;\n --color-turbopack-text-blue: #45b2ff;\n --color-turbopack-border-red: #6e293b;\n --color-turbopack-border-blue: #284f80;\n --color-turbopack-background-red: #250d12;\n --color-turbopack-background-blue: #0a1723;\n }\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/styles/dark-theme.css\"],names:[],mappings:\"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\",sourcesContent:[\":host(.dark) {\\n --color-font: white;\\n --color-backdrop: rgba(0, 0, 0, 0.8);\\n --color-border-shadow: rgba(255, 255, 255, 0.145);\\n\\n --color-title-color: #fafafa;\\n --color-stack-notes: #a9a9a9;\\n\\n /* Background Dark */\\n --color-background-100: #0a0a0a;\\n --color-background-200: #000000;\\n\\n /* Syntax Dark */\\n --color-syntax-comment: #a0a0a0;\\n --color-syntax-constant: #ededed;\\n --color-syntax-function: #52a9ff;\\n --color-syntax-keyword: #f76e99;\\n --color-syntax-link: #0ac5b2;\\n --color-syntax-parameter: #f1a10d;\\n --color-syntax-punctuation: #ededed;\\n --color-syntax-string: #0ac5b2;\\n --color-syntax-string-expression: #0ac5b2;\\n\\n /* Gray Scale Dark */\\n --color-gray-100: #1a1a1a;\\n --color-gray-200: #1f1f1f;\\n --color-gray-300: #292929;\\n --color-gray-400: #2e2e2e;\\n --color-gray-500: #454545;\\n --color-gray-600: #878787;\\n --color-gray-700: #8f8f8f;\\n --color-gray-800: #7d7d7d;\\n --color-gray-900: #a0a0a0;\\n --color-gray-1000: #ededed;\\n\\n /* Gray Alpha Scale Dark */\\n --color-gray-alpha-100: rgba(255, 255, 255, 0.066);\\n --color-gray-alpha-200: rgba(255, 255, 255, 0.087);\\n --color-gray-alpha-300: rgba(255, 255, 255, 0.125);\\n --color-gray-alpha-400: rgba(255, 255, 255, 0.145);\\n --color-gray-alpha-500: rgba(255, 255, 255, 0.239);\\n --color-gray-alpha-600: rgba(255, 255, 255, 0.506);\\n --color-gray-alpha-700: rgba(255, 255, 255, 0.54);\\n --color-gray-alpha-800: rgba(255, 255, 255, 0.47);\\n --color-gray-alpha-900: rgba(255, 255, 255, 0.61);\\n --color-gray-alpha-1000: rgba(255, 255, 255, 0.923);\\n\\n /* Blue Scale Dark */\\n --color-blue-100: #0f1b2d;\\n --color-blue-200: #10243e;\\n --color-blue-300: #0f3058;\\n --color-blue-400: #0d3868;\\n --color-blue-500: #0a4481;\\n --color-blue-600: #0091ff;\\n --color-blue-700: #0070f3;\\n --color-blue-800: #0060d1;\\n --color-blue-900: #52a9ff;\\n --color-blue-1000: #eaf6ff;\\n\\n /* Red Scale Dark */\\n --color-red-100: #2a1314;\\n --color-red-200: #3d1719;\\n --color-red-300: #551a1e;\\n --color-red-400: #671e22;\\n --color-red-500: #822025;\\n --color-red-600: #e5484d;\\n --color-red-700: #e5484d;\\n --color-red-800: #da3036;\\n --color-red-900: #ff6369;\\n --color-red-1000: #ffecee;\\n\\n /* Amber Scale Dark */\\n --color-amber-100: #271700;\\n --color-amber-200: #341c00;\\n --color-amber-300: #4a2900;\\n --color-amber-400: #573300;\\n --color-amber-500: #693f05;\\n --color-amber-600: #e79c13;\\n --color-amber-700: #ffb224;\\n --color-amber-800: #ff990a;\\n --color-amber-900: #f1a10d;\\n --color-amber-1000: #fef3dd;\\n\\n /* Green Scale Dark */\\n --color-green-100: #0b2211;\\n --color-green-200: #0f2c17;\\n --color-green-300: #11351b;\\n --color-green-400: #0c461b;\\n --color-green-500: #126427;\\n --color-green-600: #1a9338;\\n --color-green-700: #46a758;\\n --color-green-800: #388e4a;\\n --color-green-900: #63c174;\\n --color-green-1000: #e5fbeb;\\n\\n /* Turbopack Dark - Temporary */\\n --color-turbopack-text-red: #ff6d92;\\n --color-turbopack-text-blue: #45b2ff;\\n --color-turbopack-border-red: #6e293b;\\n --color-turbopack-border-blue: #284f80;\\n --color-turbopack-background-red: #250d12;\\n --color-turbopack-background-blue: #0a1723;\\n}\\n\\n@media (prefers-color-scheme: dark) {\\n :host(:not(.light)) {\\n --color-font: white;\\n --color-backdrop: rgba(0, 0, 0, 0.8);\\n --color-border-shadow: rgba(255, 255, 255, 0.145);\\n\\n --color-title-color: #fafafa;\\n --color-stack-notes: #a9a9a9;\\n\\n /* Background Dark */\\n --color-background-100: #0a0a0a;\\n --color-background-200: #000000;\\n\\n /* Syntax Dark */\\n --color-syntax-comment: #a0a0a0;\\n --color-syntax-constant: #ededed;\\n --color-syntax-function: #52a9ff;\\n --color-syntax-keyword: #f76e99;\\n --color-syntax-link: #0ac5b2;\\n --color-syntax-parameter: #f1a10d;\\n --color-syntax-punctuation: #ededed;\\n --color-syntax-string: #0ac5b2;\\n --color-syntax-string-expression: #0ac5b2;\\n\\n /* Gray Scale Dark */\\n --color-gray-100: #1a1a1a;\\n --color-gray-200: #1f1f1f;\\n --color-gray-300: #292929;\\n --color-gray-400: #2e2e2e;\\n --color-gray-500: #454545;\\n --color-gray-600: #878787;\\n --color-gray-700: #8f8f8f;\\n --color-gray-800: #7d7d7d;\\n --color-gray-900: #a0a0a0;\\n --color-gray-1000: #ededed;\\n\\n /* Gray Alpha Scale Dark */\\n --color-gray-alpha-100: rgba(255, 255, 255, 0.066);\\n --color-gray-alpha-200: rgba(255, 255, 255, 0.087);\\n --color-gray-alpha-300: rgba(255, 255, 255, 0.125);\\n --color-gray-alpha-400: rgba(255, 255, 255, 0.145);\\n --color-gray-alpha-500: rgba(255, 255, 255, 0.239);\\n --color-gray-alpha-600: rgba(255, 255, 255, 0.506);\\n --color-gray-alpha-700: rgba(255, 255, 255, 0.54);\\n --color-gray-alpha-800: rgba(255, 255, 255, 0.47);\\n --color-gray-alpha-900: rgba(255, 255, 255, 0.61);\\n --color-gray-alpha-1000: rgba(255, 255, 255, 0.923);\\n\\n /* Blue Scale Dark */\\n --color-blue-100: #0f1b2d;\\n --color-blue-200: #10243e;\\n --color-blue-300: #0f3058;\\n --color-blue-400: #0d3868;\\n --color-blue-500: #0a4481;\\n --color-blue-600: #0091ff;\\n --color-blue-700: #0070f3;\\n --color-blue-800: #0060d1;\\n --color-blue-900: #52a9ff;\\n --color-blue-1000: #eaf6ff;\\n\\n /* Red Scale Dark */\\n --color-red-100: #2a1314;\\n --color-red-200: #3d1719;\\n --color-red-300: #551a1e;\\n --color-red-400: #671e22;\\n --color-red-500: #822025;\\n --color-red-600: #e5484d;\\n --color-red-700: #e5484d;\\n --color-red-800: #da3036;\\n --color-red-900: #ff6369;\\n --color-red-1000: #ffecee;\\n\\n /* Amber Scale Dark */\\n --color-amber-100: #271700;\\n --color-amber-200: #341c00;\\n --color-amber-300: #4a2900;\\n --color-amber-400: #573300;\\n --color-amber-500: #693f05;\\n --color-amber-600: #e79c13;\\n --color-amber-700: #ffb224;\\n --color-amber-800: #ff990a;\\n --color-amber-900: #f1a10d;\\n --color-amber-1000: #fef3dd;\\n\\n /* Green Scale Dark */\\n --color-green-100: #0b2211;\\n --color-green-200: #0f2c17;\\n --color-green-300: #11351b;\\n --color-green-400: #0c461b;\\n --color-green-500: #126427;\\n --color-green-600: #1a9338;\\n --color-green-700: #46a758;\\n --color-green-800: #388e4a;\\n --color-green-900: #63c174;\\n --color-green-1000: #e5fbeb;\\n\\n /* Turbopack Dark - Temporary */\\n --color-turbopack-text-red: #ff6d92;\\n --color-turbopack-text-blue: #45b2ff;\\n --color-turbopack-border-red: #6e293b;\\n --color-turbopack-border-blue: #284f80;\\n --color-turbopack-background-red: #250d12;\\n --color-turbopack-background-blue: #0a1723;\\n }\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/styles/default-theme.css\":function(e,t,n){\"use strict\";n.d(t,{Z:()=>l});var r=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=n.n(r),a=n(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=n.n(a)()(o());i.push([e.id,`:host {\n /* \n * Although the style applied to the shadow host is isolated,\n * the element that attached the shadow host (i.e. \"nextjs-portal\")\n * is still affected by the parent's style (e.g. \"body\"). This may\n * occur style conflicts like \"display: flex\", with other children\n * elements therefore give the shadow host an absolute position.\n */\n position: absolute;\n\n --color-font: #757575;\n --color-backdrop: rgba(250, 250, 250, 0.8);\n --color-border-shadow: rgba(0, 0, 0, 0.145);\n\n --color-title-color: #1f1f1f;\n --color-stack-notes: #777;\n\n --color-accents-1: #808080;\n --color-accents-2: #222222;\n --color-accents-3: #404040;\n\n --font-stack-monospace: '__nextjs-Geist Mono', 'Geist Mono', 'SFMono-Regular',\n Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n --font-stack-sans: '__nextjs-Geist', 'Geist', -apple-system, 'Source Sans Pro',\n sans-serif;\n\n font-family: var(--font-stack-sans);\n font-variant-ligatures: none;\n\n /* TODO: Remove replaced ones. */\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1),\n 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\n --shadow-none: 0 0 #0000;\n\n --shadow-small: 0px 2px 2px rgba(0, 0, 0, 0.04);\n --shadow-menu: 0px 1px 1px rgba(0, 0, 0, 0.02),\n 0px 4px 8px -4px rgba(0, 0, 0, 0.04), 0px 16px 24px -8px rgba(0, 0, 0, 0.06);\n\n --focus-color: var(--color-blue-800);\n --focus-ring: 2px solid var(--focus-color);\n\n --timing-swift: cubic-bezier(0.23, 0.88, 0.26, 0.92);\n --timing-overlay: cubic-bezier(0.175, 0.885, 0.32, 1.1);\n /* prettier-ignore */\n --timing-bounce: linear(0 0%, 0.005871 1%, 0.022058 2%, 0.046612 3%, 0.077823 4%, 0.114199 5%, 0.154441 6%, 0.197431 7.000000000000001%, 0.242208 8%, 0.287959 9%, 0.333995 10%, 0.379743 11%, 0.424732 12%, 0.46858 13%, 0.510982 14.000000000000002%, 0.551702 15%, 0.590564 16%, 0.627445 17%, 0.662261 18%, 0.694971 19%, 0.725561 20%, 0.754047 21%, 0.780462 22%, 0.804861 23%, 0.82731 24%, 0.847888 25%, 0.866679 26%, 0.883775 27%, 0.899272 28.000000000000004%, 0.913267 28.999999999999996%, 0.925856 30%, 0.937137 31%, 0.947205 32%, 0.956153 33%, 0.96407 34%, 0.971043 35%, 0.977153 36%, 0.982479 37%, 0.987094 38%, 0.991066 39%, 0.994462 40%, 0.997339 41%, 0.999755 42%, 1.001761 43%, 1.003404 44%, 1.004727 45%, 1.00577 46%, 1.006569 47%, 1.007157 48%, 1.007563 49%, 1.007813 50%, 1.007931 51%, 1.007939 52%, 1.007855 53%, 1.007697 54%, 1.007477 55.00000000000001%, 1.00721 56.00000000000001%, 1.006907 56.99999999999999%, 1.006576 57.99999999999999%, 1.006228 59%, 1.005868 60%, 1.005503 61%, 1.005137 62%, 1.004776 63%, 1.004422 64%, 1.004078 65%, 1.003746 66%, 1.003429 67%, 1.003127 68%, 1.00284 69%, 1.002571 70%, 1.002318 71%, 1.002082 72%, 1.001863 73%, 1.00166 74%, 1.001473 75%, 1.001301 76%, 1.001143 77%, 1.001 78%, 1.000869 79%, 1.000752 80%, 1.000645 81%, 1.00055 82%, 1.000464 83%, 1.000388 84%, 1.000321 85%, 1.000261 86%, 1.000209 87%, 1.000163 88%, 1.000123 89%, 1.000088 90%);\n\n --rounded-none: 0px;\n --rounded-sm: 2px;\n --rounded-md: 4px;\n --rounded-md-2: 6px;\n --rounded-lg: 8px;\n --rounded-xl: 12px;\n --rounded-2xl: 16px;\n --rounded-3xl: 24px;\n --rounded-4xl: 32px;\n --rounded-full: 9999px;\n\n /* \n This value gets set from the Dev Tools preferences,\n and we use the following --size-* variables to \n scale the relevant elements.\n\n The reason why we don't rely on rem values is because\n if an app sets their root font size to something tiny, \n it feels unexpected to have the app root size leak \n into a Next.js surface.\n\n https://github.com/vercel/next.js/discussions/76812\n */\n --nextjs-dev-tools-scale: 1;\n --size-1: calc(1px / var(--nextjs-dev-tools-scale));\n --size-2: calc(2px / var(--nextjs-dev-tools-scale));\n --size-3: calc(3px / var(--nextjs-dev-tools-scale));\n --size-4: calc(4px / var(--nextjs-dev-tools-scale));\n --size-5: calc(5px / var(--nextjs-dev-tools-scale));\n --size-6: calc(6px / var(--nextjs-dev-tools-scale));\n --size-7: calc(7px / var(--nextjs-dev-tools-scale));\n --size-8: calc(8px / var(--nextjs-dev-tools-scale));\n --size-9: calc(9px / var(--nextjs-dev-tools-scale));\n --size-10: calc(10px / var(--nextjs-dev-tools-scale));\n --size-11: calc(11px / var(--nextjs-dev-tools-scale));\n --size-12: calc(12px / var(--nextjs-dev-tools-scale));\n --size-13: calc(13px / var(--nextjs-dev-tools-scale));\n --size-14: calc(14px / var(--nextjs-dev-tools-scale));\n --size-15: calc(15px / var(--nextjs-dev-tools-scale));\n --size-16: calc(16px / var(--nextjs-dev-tools-scale));\n --size-17: calc(17px / var(--nextjs-dev-tools-scale));\n --size-18: calc(18px / var(--nextjs-dev-tools-scale));\n --size-20: calc(20px / var(--nextjs-dev-tools-scale));\n --size-22: calc(22px / var(--nextjs-dev-tools-scale));\n --size-24: calc(24px / var(--nextjs-dev-tools-scale));\n --size-26: calc(26px / var(--nextjs-dev-tools-scale));\n --size-28: calc(28px / var(--nextjs-dev-tools-scale));\n --size-30: calc(30px / var(--nextjs-dev-tools-scale));\n --size-32: calc(32px / var(--nextjs-dev-tools-scale));\n --size-34: calc(34px / var(--nextjs-dev-tools-scale));\n --size-36: calc(36px / var(--nextjs-dev-tools-scale));\n --size-38: calc(38px / var(--nextjs-dev-tools-scale));\n --size-40: calc(40px / var(--nextjs-dev-tools-scale));\n --size-42: calc(42px / var(--nextjs-dev-tools-scale));\n --size-44: calc(44px / var(--nextjs-dev-tools-scale));\n --size-46: calc(46px / var(--nextjs-dev-tools-scale));\n --size-48: calc(48px / var(--nextjs-dev-tools-scale));\n\n @media print {\n display: none;\n }\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-bottom: 8px;\n font-weight: 500;\n line-height: 1.5;\n}\n\na {\n color: var(--color-blue-900);\n &:hover {\n color: var(--color-blue-900);\n }\n &:focus-visible {\n outline: var(--focus-ring);\n }\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/styles/default-theme.css\"],names:[],mappings:\"AAAA;EACE;;;;;;IAME;EACF,kBAAkB;;EAElB,qBAAqB;EACrB,0CAA0C;EAC1C,2CAA2C;;EAE3C,4BAA4B;EAC5B,yBAAyB;;EAEzB,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;;EAE1B;0DACwD;EACxD;cACY;;EAEZ,mCAAmC;EACnC,4BAA4B;;EAE5B,gCAAgC;EAChC,0CAA0C;EAC1C,uEAAuE;EACvE,6EAA6E;EAC7E;mCACiC;EACjC;oCACkC;EAClC,iDAAiD;EACjD,mDAAmD;EACnD,wBAAwB;;EAExB,+CAA+C;EAC/C;gFAC8E;;EAE9E,oCAAoC;EACpC,0CAA0C;;EAE1C,oDAAoD;EACpD,uDAAuD;EACvD,oBAAoB;EACpB,i3CAAi3C;;EAEj3C,mBAAmB;EACnB,iBAAiB;EACjB,iBAAiB;EACjB,mBAAmB;EACnB,iBAAiB;EACjB,kBAAkB;EAClB,mBAAmB;EACnB,mBAAmB;EACnB,mBAAmB;EACnB,sBAAsB;;EAEtB;;;;;;;;;;;GAWC;EACD,2BAA2B;EAC3B,mDAAmD;EACnD,mDAAmD;EACnD,mDAAmD;EACnD,mDAAmD;EACnD,mDAAmD;EACnD,mDAAmD;EACnD,mDAAmD;EACnD,mDAAmD;EACnD,mDAAmD;EACnD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;EACrD,qDAAqD;;EAErD;IACE,aAAa;EACf;AACF;;AAEA;;;;;;EAME,kBAAkB;EAClB,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,4BAA4B;EAC5B;IACE,4BAA4B;EAC9B;EACA;IACE,0BAA0B;EAC5B;AACF\",sourcesContent:[\":host {\\n /* \\n * Although the style applied to the shadow host is isolated,\\n * the element that attached the shadow host (i.e. \\\"nextjs-portal\\\")\\n * is still affected by the parent's style (e.g. \\\"body\\\"). This may\\n * occur style conflicts like \\\"display: flex\\\", with other children\\n * elements therefore give the shadow host an absolute position.\\n */\\n position: absolute;\\n\\n --color-font: #757575;\\n --color-backdrop: rgba(250, 250, 250, 0.8);\\n --color-border-shadow: rgba(0, 0, 0, 0.145);\\n\\n --color-title-color: #1f1f1f;\\n --color-stack-notes: #777;\\n\\n --color-accents-1: #808080;\\n --color-accents-2: #222222;\\n --color-accents-3: #404040;\\n\\n --font-stack-monospace: '__nextjs-Geist Mono', 'Geist Mono', 'SFMono-Regular',\\n Consolas, 'Liberation Mono', Menlo, Courier, monospace;\\n --font-stack-sans: '__nextjs-Geist', 'Geist', -apple-system, 'Source Sans Pro',\\n sans-serif;\\n\\n font-family: var(--font-stack-sans);\\n font-variant-ligatures: none;\\n\\n /* TODO: Remove replaced ones. */\\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);\\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),\\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1),\\n 0 8px 10px -6px rgb(0 0 0 / 0.1);\\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\\n --shadow-none: 0 0 #0000;\\n\\n --shadow-small: 0px 2px 2px rgba(0, 0, 0, 0.04);\\n --shadow-menu: 0px 1px 1px rgba(0, 0, 0, 0.02),\\n 0px 4px 8px -4px rgba(0, 0, 0, 0.04), 0px 16px 24px -8px rgba(0, 0, 0, 0.06);\\n\\n --focus-color: var(--color-blue-800);\\n --focus-ring: 2px solid var(--focus-color);\\n\\n --timing-swift: cubic-bezier(0.23, 0.88, 0.26, 0.92);\\n --timing-overlay: cubic-bezier(0.175, 0.885, 0.32, 1.1);\\n /* prettier-ignore */\\n --timing-bounce: linear(0 0%, 0.005871 1%, 0.022058 2%, 0.046612 3%, 0.077823 4%, 0.114199 5%, 0.154441 6%, 0.197431 7.000000000000001%, 0.242208 8%, 0.287959 9%, 0.333995 10%, 0.379743 11%, 0.424732 12%, 0.46858 13%, 0.510982 14.000000000000002%, 0.551702 15%, 0.590564 16%, 0.627445 17%, 0.662261 18%, 0.694971 19%, 0.725561 20%, 0.754047 21%, 0.780462 22%, 0.804861 23%, 0.82731 24%, 0.847888 25%, 0.866679 26%, 0.883775 27%, 0.899272 28.000000000000004%, 0.913267 28.999999999999996%, 0.925856 30%, 0.937137 31%, 0.947205 32%, 0.956153 33%, 0.96407 34%, 0.971043 35%, 0.977153 36%, 0.982479 37%, 0.987094 38%, 0.991066 39%, 0.994462 40%, 0.997339 41%, 0.999755 42%, 1.001761 43%, 1.003404 44%, 1.004727 45%, 1.00577 46%, 1.006569 47%, 1.007157 48%, 1.007563 49%, 1.007813 50%, 1.007931 51%, 1.007939 52%, 1.007855 53%, 1.007697 54%, 1.007477 55.00000000000001%, 1.00721 56.00000000000001%, 1.006907 56.99999999999999%, 1.006576 57.99999999999999%, 1.006228 59%, 1.005868 60%, 1.005503 61%, 1.005137 62%, 1.004776 63%, 1.004422 64%, 1.004078 65%, 1.003746 66%, 1.003429 67%, 1.003127 68%, 1.00284 69%, 1.002571 70%, 1.002318 71%, 1.002082 72%, 1.001863 73%, 1.00166 74%, 1.001473 75%, 1.001301 76%, 1.001143 77%, 1.001 78%, 1.000869 79%, 1.000752 80%, 1.000645 81%, 1.00055 82%, 1.000464 83%, 1.000388 84%, 1.000321 85%, 1.000261 86%, 1.000209 87%, 1.000163 88%, 1.000123 89%, 1.000088 90%);\\n\\n --rounded-none: 0px;\\n --rounded-sm: 2px;\\n --rounded-md: 4px;\\n --rounded-md-2: 6px;\\n --rounded-lg: 8px;\\n --rounded-xl: 12px;\\n --rounded-2xl: 16px;\\n --rounded-3xl: 24px;\\n --rounded-4xl: 32px;\\n --rounded-full: 9999px;\\n\\n /* \\n This value gets set from the Dev Tools preferences,\\n and we use the following --size-* variables to \\n scale the relevant elements.\\n\\n The reason why we don't rely on rem values is because\\n if an app sets their root font size to something tiny, \\n it feels unexpected to have the app root size leak \\n into a Next.js surface.\\n\\n https://github.com/vercel/next.js/discussions/76812\\n */\\n --nextjs-dev-tools-scale: 1;\\n --size-1: calc(1px / var(--nextjs-dev-tools-scale));\\n --size-2: calc(2px / var(--nextjs-dev-tools-scale));\\n --size-3: calc(3px / var(--nextjs-dev-tools-scale));\\n --size-4: calc(4px / var(--nextjs-dev-tools-scale));\\n --size-5: calc(5px / var(--nextjs-dev-tools-scale));\\n --size-6: calc(6px / var(--nextjs-dev-tools-scale));\\n --size-7: calc(7px / var(--nextjs-dev-tools-scale));\\n --size-8: calc(8px / var(--nextjs-dev-tools-scale));\\n --size-9: calc(9px / var(--nextjs-dev-tools-scale));\\n --size-10: calc(10px / var(--nextjs-dev-tools-scale));\\n --size-11: calc(11px / var(--nextjs-dev-tools-scale));\\n --size-12: calc(12px / var(--nextjs-dev-tools-scale));\\n --size-13: calc(13px / var(--nextjs-dev-tools-scale));\\n --size-14: calc(14px / var(--nextjs-dev-tools-scale));\\n --size-15: calc(15px / var(--nextjs-dev-tools-scale));\\n --size-16: calc(16px / var(--nextjs-dev-tools-scale));\\n --size-17: calc(17px / var(--nextjs-dev-tools-scale));\\n --size-18: calc(18px / var(--nextjs-dev-tools-scale));\\n --size-20: calc(20px / var(--nextjs-dev-tools-scale));\\n --size-22: calc(22px / var(--nextjs-dev-tools-scale));\\n --size-24: calc(24px / var(--nextjs-dev-tools-scale));\\n --size-26: calc(26px / var(--nextjs-dev-tools-scale));\\n --size-28: calc(28px / var(--nextjs-dev-tools-scale));\\n --size-30: calc(30px / var(--nextjs-dev-tools-scale));\\n --size-32: calc(32px / var(--nextjs-dev-tools-scale));\\n --size-34: calc(34px / var(--nextjs-dev-tools-scale));\\n --size-36: calc(36px / var(--nextjs-dev-tools-scale));\\n --size-38: calc(38px / var(--nextjs-dev-tools-scale));\\n --size-40: calc(40px / var(--nextjs-dev-tools-scale));\\n --size-42: calc(42px / var(--nextjs-dev-tools-scale));\\n --size-44: calc(44px / var(--nextjs-dev-tools-scale));\\n --size-46: calc(46px / var(--nextjs-dev-tools-scale));\\n --size-48: calc(48px / var(--nextjs-dev-tools-scale));\\n\\n @media print {\\n display: none;\\n }\\n}\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n margin-bottom: 8px;\\n font-weight: 500;\\n line-height: 1.5;\\n}\\n\\na {\\n color: var(--color-blue-900);\\n &:hover {\\n color: var(--color-blue-900);\\n }\\n &:focus-visible {\\n outline: var(--focus-ring);\\n }\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\":function(e){\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n=\"\",r=void 0!==t[5];return t[4]&&(n+=\"@supports (\".concat(t[4],\") {\")),t[2]&&(n+=\"@media \".concat(t[2],\" {\")),r&&(n+=\"@layer\".concat(t[5].length>0?\" \".concat(t[5]):\"\",\" {\")),n+=e(t),r&&(n+=\"}\"),t[2]&&(n+=\"}\"),t[4]&&(n+=\"}\"),n}).join(\"\")},t.i=function(e,n,r,o,a){\"string\"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var l=0;l<this.length;l++){var s=this[l][0];null!=s&&(i[s]=!0)}for(var c=0;c<e.length;c++){var u=[].concat(e[c]);r&&i[u[0]]||(void 0!==a&&(void 0===u[5]||(u[1]=\"@layer\".concat(u[5].length>0?\" \".concat(u[5]):\"\",\" {\").concat(u[1],\"}\")),u[5]=a),n&&(u[2]&&(u[1]=\"@media \".concat(u[2],\" {\").concat(u[1],\"}\")),u[2]=n),o&&(u[4]?(u[1]=\"@supports (\".concat(u[4],\") {\").concat(u[1],\"}\"),u[4]=o):u[4]=\"\".concat(o)),t.push(u))}},t}},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\":function(e){\"use strict\";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if(\"function\"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n))));return[t].concat([\"/*# \".concat(\"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(r),\" */\")]).join(\"\\n\")}return[t].join(\"\\n\")}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\":function(e){\"use strict\";var t=[];function n(e){for(var n=-1,r=0;r<t.length;r++)if(t[r].identifier===e){n=r;break}return n}function r(e,r){for(var o={},a=[],i=0;i<e.length;i++){var l=e[i],s=r.base?l[0]+r.base:l[0],c=o[s]||0,u=\"\".concat(s,\" \").concat(c);o[s]=c+1;var d=n(u),f={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)t[d].references++,t[d].updater(f);else{var p=function(e,t){var n=t.domAPI(t);return n.update(e),function(t){t?(t.css!==e.css||t.media!==e.media||t.sourceMap!==e.sourceMap||t.supports!==e.supports||t.layer!==e.layer)&&n.update(e=t):n.remove()}}(f,r);r.byIndex=i,t.splice(i,0,{identifier:u,updater:p,references:1})}a.push(u)}return a}e.exports=function(e,o){var a=r(e=e||[],o=o||{});return function(e){e=e||[];for(var i=0;i<a.length;i++){var l=n(a[i]);t[l].references--}for(var s=r(e,o),c=0;c<a.length;c++){var u=n(a[c]);0===t[u].references&&(t[u].updater(),t.splice(u,1))}a=s}}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/insertStyleElement.js\":function(e){\"use strict\";e.exports=function(e){var t=document.createElement(\"style\");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\":function(e,t,n){\"use strict\";e.exports=function(e){var t=n.nc;t&&e.setAttribute(\"nonce\",t)}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleDomAPI.js\":function(e){\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){var r,o,a;r=\"\",n.supports&&(r+=\"@supports (\".concat(n.supports,\") {\")),n.media&&(r+=\"@media \".concat(n.media,\" {\")),(o=void 0!==n.layer)&&(r+=\"@layer\".concat(n.layer.length>0?\" \".concat(n.layer):\"\",\" {\")),r+=n.css,o&&(r+=\"}\"),n.media&&(r+=\"}\"),n.supports&&(r+=\"}\"),(a=n.sourceMap)&&\"undefined\"!=typeof btoa&&(r+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),\" */\")),e.styleTagTransform(r,t,e.options)},remove:function(){!function(e){if(null!==e.parentNode)e.parentNode.removeChild(e)}(t)}}}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleTagTransform.js\":function(e){\"use strict\";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},\"./dist/compiled/anser/index.js\":function(e){(()=>{\"use strict\";var t={211:e=>{var t=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),n=[[{color:\"0, 0, 0\",class:\"ansi-black\"},{color:\"187, 0, 0\",class:\"ansi-red\"},{color:\"0, 187, 0\",class:\"ansi-green\"},{color:\"187, 187, 0\",class:\"ansi-yellow\"},{color:\"0, 0, 187\",class:\"ansi-blue\"},{color:\"187, 0, 187\",class:\"ansi-magenta\"},{color:\"0, 187, 187\",class:\"ansi-cyan\"},{color:\"255,255,255\",class:\"ansi-white\"}],[{color:\"85, 85, 85\",class:\"ansi-bright-black\"},{color:\"255, 85, 85\",class:\"ansi-bright-red\"},{color:\"0, 255, 0\",class:\"ansi-bright-green\"},{color:\"255, 255, 85\",class:\"ansi-bright-yellow\"},{color:\"85, 85, 255\",class:\"ansi-bright-blue\"},{color:\"255, 85, 255\",class:\"ansi-bright-magenta\"},{color:\"85, 255, 255\",class:\"ansi-bright-cyan\"},{color:\"255, 255, 255\",class:\"ansi-bright-white\"}]];e.exports=function(){function e(){if(!(this instanceof e))throw TypeError(\"Cannot call a class as a function\");this.fg=this.bg=this.fg_truecolor=this.bg_truecolor=null,this.bright=0}return t(e,null,[{key:\"escapeForHtml\",value:function(t){return(new e).escapeForHtml(t)}},{key:\"linkify\",value:function(t){return(new e).linkify(t)}},{key:\"ansiToHtml\",value:function(t,n){return(new e).ansiToHtml(t,n)}},{key:\"ansiToJson\",value:function(t,n){return(new e).ansiToJson(t,n)}},{key:\"ansiToText\",value:function(t){return(new e).ansiToText(t)}}]),t(e,[{key:\"setupPalette\",value:function(){this.PALETTE_COLORS=[];for(var e=0;e<2;++e)for(var t=0;t<8;++t)this.PALETTE_COLORS.push(n[e][t].color);for(var r=[0,95,135,175,215,255],o=function(e,t,n){return r[e]+\", \"+r[t]+\", \"+r[n]},a=0;a<6;++a)for(var i=0;i<6;++i)for(var l=0;l<6;++l)this.PALETTE_COLORS.push(o(a,i,l));for(var s=8,c=0;c<24;++c,s+=10)this.PALETTE_COLORS.push(o(s,s,s))}},{key:\"escapeForHtml\",value:function(e){return e.replace(/[&<>]/gm,function(e){return\"&\"==e?\"&amp;\":\"<\"==e?\"&lt;\":\">\"==e?\"&gt;\":\"\"})}},{key:\"linkify\",value:function(e){return e.replace(/(https?:\\/\\/[^\\s]+)/gm,function(e){return'<a href=\"'+e+'\">'+e+\"</a>\"})}},{key:\"ansiToHtml\",value:function(e,t){return this.process(e,t,!0)}},{key:\"ansiToJson\",value:function(e,t){return(t=t||{}).json=!0,t.clearLine=!1,this.process(e,t,!0)}},{key:\"ansiToText\",value:function(e){return this.process(e,{},!1)}},{key:\"process\",value:function(e,t,n){var r=this,o=e.split(/\\033\\[/),a=o.shift();null==t&&(t={}),t.clearLine=/\\r/.test(e);var i=o.map(function(e){return r.processChunk(e,t,n)});if(t&&t.json){var l=this.processChunkJson(\"\");return l.content=a,l.clearLine=t.clearLine,i.unshift(l),t.remove_empty&&(i=i.filter(function(e){return!e.isEmpty()})),i}return i.unshift(a),i.join(\"\")}},{key:\"processChunkJson\",value:function(e,t,r){var o=(t=void 0===t?{}:t).use_classes=void 0!==t.use_classes&&t.use_classes,a=t.key=o?\"class\":\"color\",i={content:e,fg:null,bg:null,fg_truecolor:null,bg_truecolor:null,clearLine:t.clearLine,decoration:null,was_processed:!1,isEmpty:function(){return!i.content}},l=e.match(/^([!\\x3c-\\x3f]*)([\\d;]*)([\\x20-\\x2c]*[\\x40-\\x7e])([\\s\\S]*)/m);if(!l)return i;i.content=l[4];var s=l[2].split(\";\");if(\"\"!==l[1]||\"m\"!==l[3]||!r)return i;for(this.decoration=null;s.length>0;){var c=parseInt(s.shift());if(isNaN(c)||0===c)this.fg=this.bg=this.decoration=null;else if(1===c)this.decoration=\"bold\";else if(2===c)this.decoration=\"dim\";else if(3==c)this.decoration=\"italic\";else if(4==c)this.decoration=\"underline\";else if(5==c)this.decoration=\"blink\";else if(7===c)this.decoration=\"reverse\";else if(8===c)this.decoration=\"hidden\";else if(9===c)this.decoration=\"strikethrough\";else if(39==c)this.fg=null;else if(49==c)this.bg=null;else if(c>=30&&c<38)this.fg=n[0][c%10][a];else if(c>=90&&c<98)this.fg=n[1][c%10][a];else if(c>=40&&c<48)this.bg=n[0][c%10][a];else if(c>=100&&c<108)this.bg=n[1][c%10][a];else if(38===c||48===c){var u=38===c;if(s.length>=1){var d=s.shift();if(\"5\"===d&&s.length>=1){var f=parseInt(s.shift());if(f>=0&&f<=255)if(o){var p=f>=16?\"ansi-palette-\"+f:n[+(f>7)][f%8].class;u?this.fg=p:this.bg=p}else this.PALETTE_COLORS||this.setupPalette(),u?this.fg=this.PALETTE_COLORS[f]:this.bg=this.PALETTE_COLORS[f]}else if(\"2\"===d&&s.length>=3){var h=parseInt(s.shift()),m=parseInt(s.shift()),g=parseInt(s.shift());if(h>=0&&h<=255&&m>=0&&m<=255&&g>=0&&g<=255){var y=h+\", \"+m+\", \"+g;o?u?(this.fg=\"ansi-truecolor\",this.fg_truecolor=y):(this.bg=\"ansi-truecolor\",this.bg_truecolor=y):u?this.fg=y:this.bg=y}}}}}return null===this.fg&&null===this.bg&&null===this.decoration||(i.fg=this.fg,i.bg=this.bg,i.fg_truecolor=this.fg_truecolor,i.bg_truecolor=this.bg_truecolor,i.decoration=this.decoration,i.was_processed=!0),i}},{key:\"processChunk\",value:function(e,t,n){var r=this;t=t||{};var o=this.processChunkJson(e,t,n);if(t.json)return o;if(o.isEmpty())return\"\";if(!o.was_processed)return o.content;var a=t.use_classes,i=[],l=[],s={},c=function(e){var t=[],n=void 0;for(n in e)e.hasOwnProperty(n)&&t.push(\"data-\"+n+'=\"'+r.escapeForHtml(e[n])+'\"');return t.length>0?\" \"+t.join(\" \"):\"\"};return(o.fg&&(a?(l.push(o.fg+\"-fg\"),null!==o.fg_truecolor&&(s[\"ansi-truecolor-fg\"]=o.fg_truecolor,o.fg_truecolor=null)):i.push(\"color:rgb(\"+o.fg+\")\")),o.bg&&(a?(l.push(o.bg+\"-bg\"),null!==o.bg_truecolor&&(s[\"ansi-truecolor-bg\"]=o.bg_truecolor,o.bg_truecolor=null)):i.push(\"background-color:rgb(\"+o.bg+\")\")),o.decoration&&(a?l.push(\"ansi-\"+o.decoration):\"bold\"===o.decoration?i.push(\"font-weight:bold\"):\"dim\"===o.decoration?i.push(\"opacity:0.5\"):\"italic\"===o.decoration?i.push(\"font-style:italic\"):\"reverse\"===o.decoration?i.push(\"filter:invert(100%)\"):\"hidden\"===o.decoration?i.push(\"visibility:hidden\"):\"strikethrough\"===o.decoration?i.push(\"text-decoration:line-through\"):i.push(\"text-decoration:\"+o.decoration)),a)?'<span class=\"'+l.join(\" \")+'\"'+c(s)+\">\"+o.content+\"</span>\":'<span style=\"'+i.join(\";\")+'\"'+c(s)+\">\"+o.content+\"</span>\"}}]),e}()}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var a=n[e]={exports:{}},i=!0;try{t[e](a,a.exports,r),i=!1}finally{i&&delete n[e]}return a.exports}r.ab=\"//\",e.exports=r(211)})()},\"./dist/compiled/react-dom/cjs/react-dom-client.production.js\":function(e,t,n){\"use strict\";var r,o=n(\"./dist/compiled/scheduler/index.js\"),a=n(\"./dist/compiled/react/index.js\"),i=n(\"./dist/compiled/react-dom/index.js\");function l(e){var t=\"https://react.dev/errors/\"+e;if(1<arguments.length){t+=\"?args[]=\"+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=\"&args[]=\"+encodeURIComponent(arguments[n])}return\"Minified React error #\"+e+\"; visit \"+t+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}function s(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do 0!=(4098&(t=e).flags)&&(n=t.return),e=t.return;while(e)}return 3===t.tag?n:null}function c(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&null!==(e=e.alternate)&&(t=e.memoizedState),null!==t)return t.dehydrated}return null}function u(e){if(31===e.tag){var t=e.memoizedState;if(null===t&&null!==(e=e.alternate)&&(t=e.memoizedState),null!==t)return t.dehydrated}return null}function d(e){if(s(e)!==e)throw Error(l(188))}var f=Object.assign,p=Symbol.for(\"react.element\"),h=Symbol.for(\"react.transitional.element\"),m=Symbol.for(\"react.portal\"),g=Symbol.for(\"react.fragment\"),y=Symbol.for(\"react.strict_mode\"),v=Symbol.for(\"react.profiler\"),b=Symbol.for(\"react.consumer\"),A=Symbol.for(\"react.context\"),x=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),C=Symbol.for(\"react.suspense_list\"),_=Symbol.for(\"react.memo\"),k=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\");var E=Symbol.for(\"react.activity\");Symbol.for(\"react.legacy_hidden\"),Symbol.for(\"react.tracing_marker\");var j=Symbol.for(\"react.memo_cache_sentinel\");Symbol.for(\"react.view_transition\");var S=Symbol.iterator;function O(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=S&&e[S]||e[\"@@iterator\"])?e:null}var B=Symbol.for(\"react.client.reference\"),P=Array.isArray,I=a.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,T=i.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,z={pending:!1,data:null,method:null,action:null},D=[],L=-1;function N(e){return{current:e}}function R(e){0>L||(e.current=D[L],D[L]=null,L--)}function M(e,t){D[++L]=e.current,e.current=t}var Z=N(null),U=N(null),F=N(null),q=N(null);function H(e,t){switch(M(F,t),M(U,e),M(Z,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?ch(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)e=cm(t=ch(t),e);else switch(e){case\"svg\":e=1;break;case\"math\":e=2;break;default:e=0}}R(Z),M(Z,e)}function V(){R(Z),R(U),R(F)}function $(e){null!==e.memoizedState&&M(q,e);var t=Z.current,n=cm(t,e.type);t!==n&&(M(U,e),M(Z,n))}function W(e){U.current===e&&(R(Z),R(U)),q.current===e&&(R(q),c9._currentValue=z)}function Y(e){if(void 0===tL)try{throw Error()}catch(e){var t=e.stack.trim().match(/\\n( *(at )?)/);tL=t&&t[1]||\"\",tN=-1<e.stack.indexOf(\"\\n at\")?\" (<anonymous>)\":-1<e.stack.indexOf(\"@\")?\"@unknown:0:0\":\"\"}return\"\\n\"+tL+e+tN}var K=!1;function X(e,t){if(!e||K)return\"\";K=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(t){var n=function(){throw Error()};if(Object.defineProperty(n.prototype,\"props\",{set:function(){throw Error()}}),\"object\"==typeof Reflect&&Reflect.construct){try{Reflect.construct(n,[])}catch(e){var r=e}Reflect.construct(e,[],n)}else{try{n.call()}catch(e){r=e}e.call(n.prototype)}}else{try{throw Error()}catch(e){r=e}(n=e())&&\"function\"==typeof n.catch&&n.catch(function(){})}}catch(e){if(e&&r&&\"string\"==typeof e.stack)return[e.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName=\"DetermineComponentFrameRoot\";var o=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,\"name\");o&&o.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,\"name\",{value:\"DetermineComponentFrameRoot\"});var a=r.DetermineComponentFrameRoot(),i=a[0],l=a[1];if(i&&l){var s=i.split(\"\\n\"),c=l.split(\"\\n\");for(o=r=0;r<s.length&&!s[r].includes(\"DetermineComponentFrameRoot\");)r++;for(;o<c.length&&!c[o].includes(\"DetermineComponentFrameRoot\");)o++;if(r===s.length||o===c.length)for(r=s.length-1,o=c.length-1;1<=r&&0<=o&&s[r]!==c[o];)o--;for(;1<=r&&0<=o;r--,o--)if(s[r]!==c[o]){if(1!==r||1!==o)do if(r--,o--,0>o||s[r]!==c[o]){var u=\"\\n\"+s[r].replace(\" at new \",\" at \");return e.displayName&&u.includes(\"<anonymous>\")&&(u=u.replace(\"<anonymous>\",e.displayName)),u}while(1<=r&&0<=o);break}}}finally{K=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:\"\")?Y(n):\"\"}function G(e){try{var t=\"\",n=null;do t+=function(e,t){switch(e.tag){case 26:case 27:case 5:return Y(e.type);case 16:return Y(\"Lazy\");case 13:return e.child!==t&&null!==t?Y(\"Suspense Fallback\"):Y(\"Suspense\");case 19:return Y(\"SuspenseList\");case 0:case 15:return X(e.type,!1);case 11:return X(e.type.render,!1);case 1:return X(e.type,!0);case 31:return Y(\"Activity\");default:return\"\"}}(e,n),n=e,e=e.return;while(e);return t}catch(e){return\"\\nError generating stack: \"+e.message+\"\\n\"+e.stack}}var Q=Object.prototype.hasOwnProperty,J=o.unstable_scheduleCallback,ee=o.unstable_cancelCallback,et=o.unstable_shouldYield,en=o.unstable_requestPaint,er=o.unstable_now,eo=o.unstable_getCurrentPriorityLevel,ea=o.unstable_ImmediatePriority,ei=o.unstable_UserBlockingPriority,el=o.unstable_NormalPriority,es=o.unstable_LowPriority,ec=o.unstable_IdlePriority,eu=o.log,ed=o.unstable_setDisableYieldValue,ef=null,ep=null;function eh(e){if(\"function\"==typeof eu&&ed(e),ep&&\"function\"==typeof ep.setStrictMode)try{ep.setStrictMode(ef,e)}catch(e){}}var em=Math.clz32?Math.clz32:function(e){return 0==(e>>>=0)?32:31-(eg(e)/ey|0)|0},eg=Math.log,ey=Math.LN2,ev=256,eb=4194304;function eA(e){var t=42&e;if(0!==t)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194048&e;case 4194304:case 8388608:case 0x1000000:case 0x2000000:return 0x3c00000&e;case 0x4000000:return 0x4000000;case 0x8000000:return 0x8000000;case 0x10000000:return 0x10000000;case 0x20000000:return 0x20000000;case 0x40000000:return 0;default:return e}}function ex(e,t,n){var r=e.pendingLanes;if(0===r)return 0;var o=0,a=e.suspendedLanes,i=e.pingedLanes;e=e.warmLanes;var l=0x7ffffff&r;return 0!==l?0!=(r=l&~a)?o=eA(r):0!=(i&=l)?o=eA(i):n||0!=(n=l&~e)&&(o=eA(n)):0!=(l=r&~a)?o=eA(l):0!==i?o=eA(i):n||0!=(n=r&~e)&&(o=eA(n)),0===o?0:0!==t&&t!==o&&0==(t&a)&&((a=o&-o)>=(n=t&-t)||32===a&&0!=(4194048&n))?t:o}function ew(e,t){return 0==(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)}function eC(){var e=ev;return 0==(4194048&(ev<<=1))&&(ev=256),e}function e_(){var e=eb;return 0==(0x3c00000&(eb<<=1))&&(eb=4194304),e}function ek(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function eE(e,t){e.pendingLanes|=t,0x10000000!==t&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function ej(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var r=31-em(t);e.entangledLanes|=t,e.entanglements[r]=0x40000000|e.entanglements[r]|4194090&n}function eS(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-em(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}function eO(e,t){var n=t&-t;return 0!=((n=0!=(42&n)?1:eB(n))&(e.suspendedLanes|t))?0:n}function eB(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 0x1000000:case 0x2000000:e=128;break;case 0x10000000:e=0x8000000;break;default:e=0}return e}function eP(e){return 2<(e&=-e)?8<e?0!=(0x7ffffff&e)?32:0x10000000:8:2}function eI(){var e=T.p;return 0!==e?e:void 0===(e=window.event)?32:ud(e.type)}function eT(e,t){var n=T.p;try{return T.p=e,t()}finally{T.p=n}}var ez=Math.random().toString(36).slice(2),eD=\"__reactFiber$\"+ez,eL=\"__reactProps$\"+ez,eN=\"__reactContainer$\"+ez,eR=\"__reactEvents$\"+ez,eM=\"__reactListeners$\"+ez,eZ=\"__reactHandles$\"+ez,eU=\"__reactResources$\"+ez,eF=\"__reactMarker$\"+ez;function eq(e){delete e[eD],delete e[eL],delete e[eR],delete e[eM],delete e[eZ]}function eH(e){var t=e[eD];if(t)return t;for(var n=e.parentNode;n;){if(t=n[eN]||n[eD]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=cT(e);null!==e;){if(n=e[eD])return n;e=cT(e)}return t}n=(e=n).parentNode}return null}function eV(e){if(e=e[eD]||e[eN]){var t=e.tag;if(5===t||6===t||13===t||31===t||26===t||27===t||3===t)return e}return null}function e$(e){var t=e.tag;if(5===t||26===t||27===t||6===t)return e.stateNode;throw Error(l(33))}function eW(e){var t=e[eU];return t||(t=e[eU]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function eY(e){e[eF]=!0}var eK=new Set,eX={};function eG(e,t){eQ(e,t),eQ(e+\"Capture\",t)}function eQ(e,t){for(eX[e]=t,e=0;e<t.length;e++)eK.add(t[e])}var eJ=RegExp(\"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"),e0={},e1={};function e2(e,t,n){if(Q.call(e1,t)||!Q.call(e0,t)&&(eJ.test(t)?e1[t]=!0:(e0[t]=!0,!1)))if(null===n)e.removeAttribute(t);else{switch(typeof n){case\"undefined\":case\"function\":case\"symbol\":e.removeAttribute(t);return;case\"boolean\":var r=t.toLowerCase().slice(0,5);if(\"data-\"!==r&&\"aria-\"!==r)return void e.removeAttribute(t)}e.setAttribute(t,\"\"+n)}}function e4(e,t,n){if(null===n)e.removeAttribute(t);else{switch(typeof n){case\"undefined\":case\"function\":case\"symbol\":case\"boolean\":e.removeAttribute(t);return}e.setAttribute(t,\"\"+n)}}function e5(e,t,n,r){if(null===r)e.removeAttribute(n);else{switch(typeof r){case\"undefined\":case\"function\":case\"symbol\":case\"boolean\":e.removeAttribute(n);return}e.setAttributeNS(t,n,\"\"+r)}}function e3(e){switch(typeof e){case\"bigint\":case\"boolean\":case\"number\":case\"string\":case\"undefined\":case\"object\":return e;default:return\"\"}}function e6(e){var t=e.type;return(e=e.nodeName)&&\"input\"===e.toLowerCase()&&(\"checkbox\"===t||\"radio\"===t)}function e9(e){if(!e._valueTracker){var t=e6(e)?\"checked\":\"value\";e._valueTracker=function(e,t,n){var r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);if(!e.hasOwnProperty(t)&&void 0!==r&&\"function\"==typeof r.get&&\"function\"==typeof r.set){var o=r.get,a=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){n=\"\"+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(e){n=\"\"+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e,t,\"\"+e[t])}}function e8(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r=\"\";return e&&(r=e6(e)?e.checked?\"true\":\"false\":e.value),(e=r)!==n&&(t.setValue(e),!0)}function e7(e){if(void 0===(e=e||(\"undefined\"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}var te=/[\\n\"\\\\]/g;function tt(e){return e.replace(te,function(e){return\"\\\\\"+e.charCodeAt(0).toString(16)+\" \"})}function tn(e,t,n,r,o,a,i,l){e.name=\"\",null!=i&&\"function\"!=typeof i&&\"symbol\"!=typeof i&&\"boolean\"!=typeof i?e.type=i:e.removeAttribute(\"type\"),null!=t?\"number\"===i?(0===t&&\"\"===e.value||e.value!=t)&&(e.value=\"\"+e3(t)):e.value!==\"\"+e3(t)&&(e.value=\"\"+e3(t)):\"submit\"!==i&&\"reset\"!==i||e.removeAttribute(\"value\"),null!=t?to(e,i,e3(t)):null!=n?to(e,i,e3(n)):null!=r&&e.removeAttribute(\"value\"),null==o&&null!=a&&(e.defaultChecked=!!a),null!=o&&(e.checked=o&&\"function\"!=typeof o&&\"symbol\"!=typeof o),null!=l&&\"function\"!=typeof l&&\"symbol\"!=typeof l&&\"boolean\"!=typeof l?e.name=\"\"+e3(l):e.removeAttribute(\"name\")}function tr(e,t,n,r,o,a,i,l){if(null!=a&&\"function\"!=typeof a&&\"symbol\"!=typeof a&&\"boolean\"!=typeof a&&(e.type=a),null!=t||null!=n){if((\"submit\"===a||\"reset\"===a)&&null==t)return void e9(e);n=null!=n?\"\"+e3(n):\"\",t=null!=t?\"\"+e3(t):n,l||t===e.value||(e.value=t),e.defaultValue=t}r=\"function\"!=typeof(r=null!=r?r:o)&&\"symbol\"!=typeof r&&!!r,e.checked=l?e.checked:!!r,e.defaultChecked=!!r,null!=i&&\"function\"!=typeof i&&\"symbol\"!=typeof i&&\"boolean\"!=typeof i&&(e.name=i),e9(e)}function to(e,t,n){\"number\"===t&&e7(e.ownerDocument)===e||e.defaultValue===\"\"+n||(e.defaultValue=\"\"+n)}function ta(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t[\"$\"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty(\"$\"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(o=0,n=\"\"+e3(n),t=null;o<e.length;o++){if(e[o].value===n){e[o].selected=!0,r&&(e[o].defaultSelected=!0);return}null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function ti(e,t,n){if(null!=t&&((t=\"\"+e3(t))!==e.value&&(e.value=t),null==n)){e.defaultValue!==t&&(e.defaultValue=t);return}e.defaultValue=null!=n?\"\"+e3(n):\"\"}function tl(e,t,n,r){if(null==t){if(null!=r){if(null!=n)throw Error(l(92));if(P(r)){if(1<r.length)throw Error(l(93));r=r[0]}n=r}null==n&&(n=\"\"),t=n}e.defaultValue=n=e3(t),(r=e.textContent)===n&&\"\"!==r&&null!==r&&(e.value=r),e9(e)}function ts(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType){n.nodeValue=t;return}}e.textContent=t}var tc=new Set(\"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\" \"));function tu(e,t,n){var r=0===t.indexOf(\"--\");null==n||\"boolean\"==typeof n||\"\"===n?r?e.setProperty(t,\"\"):\"float\"===t?e.cssFloat=\"\":e[t]=\"\":r?e.setProperty(t,n):\"number\"!=typeof n||0===n||tc.has(t)?\"float\"===t?e.cssFloat=n:e[t]=(\"\"+n).trim():e[t]=n+\"px\"}function td(e,t,n){if(null!=t&&\"object\"!=typeof t)throw Error(l(62));if(e=e.style,null!=n){for(var r in n)!n.hasOwnProperty(r)||null!=t&&t.hasOwnProperty(r)||(0===r.indexOf(\"--\")?e.setProperty(r,\"\"):\"float\"===r?e.cssFloat=\"\":e[r]=\"\");for(var o in t)r=t[o],t.hasOwnProperty(o)&&n[o]!==r&&tu(e,o,r)}else for(var a in t)t.hasOwnProperty(a)&&tu(e,a,t[a])}function tf(e){if(-1===e.indexOf(\"-\"))return!1;switch(e){case\"annotation-xml\":case\"color-profile\":case\"font-face\":case\"font-face-src\":case\"font-face-uri\":case\"font-face-format\":case\"font-face-name\":case\"missing-glyph\":return!1;default:return!0}}var tp=new Map([[\"acceptCharset\",\"accept-charset\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"],[\"crossOrigin\",\"crossorigin\"],[\"accentHeight\",\"accent-height\"],[\"alignmentBaseline\",\"alignment-baseline\"],[\"arabicForm\",\"arabic-form\"],[\"baselineShift\",\"baseline-shift\"],[\"capHeight\",\"cap-height\"],[\"clipPath\",\"clip-path\"],[\"clipRule\",\"clip-rule\"],[\"colorInterpolation\",\"color-interpolation\"],[\"colorInterpolationFilters\",\"color-interpolation-filters\"],[\"colorProfile\",\"color-profile\"],[\"colorRendering\",\"color-rendering\"],[\"dominantBaseline\",\"dominant-baseline\"],[\"enableBackground\",\"enable-background\"],[\"fillOpacity\",\"fill-opacity\"],[\"fillRule\",\"fill-rule\"],[\"floodColor\",\"flood-color\"],[\"floodOpacity\",\"flood-opacity\"],[\"fontFamily\",\"font-family\"],[\"fontSize\",\"font-size\"],[\"fontSizeAdjust\",\"font-size-adjust\"],[\"fontStretch\",\"font-stretch\"],[\"fontStyle\",\"font-style\"],[\"fontVariant\",\"font-variant\"],[\"fontWeight\",\"font-weight\"],[\"glyphName\",\"glyph-name\"],[\"glyphOrientationHorizontal\",\"glyph-orientation-horizontal\"],[\"glyphOrientationVertical\",\"glyph-orientation-vertical\"],[\"horizAdvX\",\"horiz-adv-x\"],[\"horizOriginX\",\"horiz-origin-x\"],[\"imageRendering\",\"image-rendering\"],[\"letterSpacing\",\"letter-spacing\"],[\"lightingColor\",\"lighting-color\"],[\"markerEnd\",\"marker-end\"],[\"markerMid\",\"marker-mid\"],[\"markerStart\",\"marker-start\"],[\"overlinePosition\",\"overline-position\"],[\"overlineThickness\",\"overline-thickness\"],[\"paintOrder\",\"paint-order\"],[\"panose-1\",\"panose-1\"],[\"pointerEvents\",\"pointer-events\"],[\"renderingIntent\",\"rendering-intent\"],[\"shapeRendering\",\"shape-rendering\"],[\"stopColor\",\"stop-color\"],[\"stopOpacity\",\"stop-opacity\"],[\"strikethroughPosition\",\"strikethrough-position\"],[\"strikethroughThickness\",\"strikethrough-thickness\"],[\"strokeDasharray\",\"stroke-dasharray\"],[\"strokeDashoffset\",\"stroke-dashoffset\"],[\"strokeLinecap\",\"stroke-linecap\"],[\"strokeLinejoin\",\"stroke-linejoin\"],[\"strokeMiterlimit\",\"stroke-miterlimit\"],[\"strokeOpacity\",\"stroke-opacity\"],[\"strokeWidth\",\"stroke-width\"],[\"textAnchor\",\"text-anchor\"],[\"textDecoration\",\"text-decoration\"],[\"textRendering\",\"text-rendering\"],[\"transformOrigin\",\"transform-origin\"],[\"underlinePosition\",\"underline-position\"],[\"underlineThickness\",\"underline-thickness\"],[\"unicodeBidi\",\"unicode-bidi\"],[\"unicodeRange\",\"unicode-range\"],[\"unitsPerEm\",\"units-per-em\"],[\"vAlphabetic\",\"v-alphabetic\"],[\"vHanging\",\"v-hanging\"],[\"vIdeographic\",\"v-ideographic\"],[\"vMathematical\",\"v-mathematical\"],[\"vectorEffect\",\"vector-effect\"],[\"vertAdvY\",\"vert-adv-y\"],[\"vertOriginX\",\"vert-origin-x\"],[\"vertOriginY\",\"vert-origin-y\"],[\"wordSpacing\",\"word-spacing\"],[\"writingMode\",\"writing-mode\"],[\"xmlnsXlink\",\"xmlns:xlink\"],[\"xHeight\",\"x-height\"]]),th=/^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;function tm(e){return th.test(\"\"+e)?\"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\":e}function tg(){}var ty=null;function tv(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var tb=null,tA=null;function tx(e){var t=eV(e);if(t&&(e=t.stateNode)){var n=e[eL]||null;switch(e=t.stateNode,t.type){case\"input\":if(tn(e,n.value,n.defaultValue,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name),t=n.name,\"radio\"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll('input[name=\"'+tt(\"\"+t)+'\"][type=\"radio\"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=r[eL]||null;if(!o)throw Error(l(90));tn(r,o.value,o.defaultValue,o.defaultValue,o.checked,o.defaultChecked,o.type,o.name)}}for(t=0;t<n.length;t++)(r=n[t]).form===e.form&&e8(r)}break;case\"textarea\":ti(e,n.value,n.defaultValue);break;case\"select\":null!=(t=n.value)&&ta(e,!!n.multiple,t,!1)}}}var tw=!1;function tC(e,t,n){if(tw)return e(t,n);tw=!0;try{return e(t)}finally{if(tw=!1,(null!==tb||null!==tA)&&(sc(),tb&&(t=tb,e=tA,tA=tb=null,tx(t),e)))for(t=0;t<e.length;t++)tx(e[t])}}function t_(e,t){var n=e.stateNode;if(null===n)return null;var r=n[eL]||null;if(null===r)return null;switch(n=r[t],t){case\"onClick\":case\"onClickCapture\":case\"onDoubleClick\":case\"onDoubleClickCapture\":case\"onMouseDown\":case\"onMouseDownCapture\":case\"onMouseMove\":case\"onMouseMoveCapture\":case\"onMouseUp\":case\"onMouseUpCapture\":case\"onMouseEnter\":(r=!r.disabled)||(r=\"button\"!==(e=e.type)&&\"input\"!==e&&\"select\"!==e&&\"textarea\"!==e),e=!r;break;default:e=!1}if(e)return null;if(n&&\"function\"!=typeof n)throw Error(l(231,t,typeof n));return n}var tk=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,tE=!1;if(tk)try{var tj={};Object.defineProperty(tj,\"passive\",{get:function(){tE=!0}}),window.addEventListener(\"test\",tj,tj),window.removeEventListener(\"test\",tj,tj)}catch(e){tE=!1}var tS=null,tO=null,tB=null;function tP(){if(tB)return tB;var e,t,n=tO,r=n.length,o=\"value\"in tS?tS.value:tS.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return tB=o.slice(e,1<t?1-t:void 0)}function tI(e){var t=e.keyCode;return\"charCode\"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function tT(){return!0}function tz(){return!1}function tD(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?tT:tz,this.isPropagationStopped=tz,this}return f(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():\"unknown\"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=tT)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():\"unknown\"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=tT)},persist:function(){},isPersistent:tT}),t}var tL,tN,tR,tM,tZ,tU={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},tF=tD(tU),tq=f({},tU,{view:0,detail:0}),tH=tD(tq),tV=f({},tq,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:t2,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return\"movementX\"in e?e.movementX:(e!==tZ&&(tZ&&\"mousemove\"===e.type?(tR=e.screenX-tZ.screenX,tM=e.screenY-tZ.screenY):tM=tR=0,tZ=e),tR)},movementY:function(e){return\"movementY\"in e?e.movementY:tM}}),t$=tD(tV),tW=tD(f({},tV,{dataTransfer:0})),tY=tD(f({},tq,{relatedTarget:0})),tK=tD(f({},tU,{animationName:0,elapsedTime:0,pseudoElement:0})),tX=tD(f({},tU,{clipboardData:function(e){return\"clipboardData\"in e?e.clipboardData:window.clipboardData}})),tG=tD(f({},tU,{data:0})),tQ={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},tJ={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},t0={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function t1(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=t0[e])&&!!t[e]}function t2(){return t1}var t4=tD(f({},tq,{key:function(e){if(e.key){var t=tQ[e.key]||e.key;if(\"Unidentified\"!==t)return t}return\"keypress\"===e.type?13===(e=tI(e))?\"Enter\":String.fromCharCode(e):\"keydown\"===e.type||\"keyup\"===e.type?tJ[e.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:t2,charCode:function(e){return\"keypress\"===e.type?tI(e):0},keyCode:function(e){return\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0},which:function(e){return\"keypress\"===e.type?tI(e):\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0}})),t5=tD(f({},tV,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),t3=tD(f({},tq,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:t2})),t6=tD(f({},tU,{propertyName:0,elapsedTime:0,pseudoElement:0})),t9=tD(f({},tV,{deltaX:function(e){return\"deltaX\"in e?e.deltaX:\"wheelDeltaX\"in e?-e.wheelDeltaX:0},deltaY:function(e){return\"deltaY\"in e?e.deltaY:\"wheelDeltaY\"in e?-e.wheelDeltaY:\"wheelDelta\"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),t8=tD(f({},tU,{newState:0,oldState:0})),t7=[9,13,27,32],ne=tk&&\"CompositionEvent\"in window,nt=null;tk&&\"documentMode\"in document&&(nt=document.documentMode);var nn=tk&&\"TextEvent\"in window&&!nt,nr=tk&&(!ne||nt&&8<nt&&11>=nt),no=!1;function na(e,t){switch(e){case\"keyup\":return -1!==t7.indexOf(t.keyCode);case\"keydown\":return 229!==t.keyCode;case\"keypress\":case\"mousedown\":case\"focusout\":return!0;default:return!1}}function ni(e){return\"object\"==typeof(e=e.detail)&&\"data\"in e?e.data:null}var nl=!1,ns={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function nc(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return\"input\"===t?!!ns[e.type]:\"textarea\"===t}function nu(e,t,n,r){tb?tA?tA.push(r):tA=[r]:tb=r,0<(t=ct(t,\"onChange\")).length&&(n=new tF(\"onChange\",\"change\",null,n,r),e.push({event:n,listeners:t}))}var nd=null,nf=null;function np(e){s4(e,0)}function nh(e){if(e8(e$(e)))return e}function nm(e,t){if(\"change\"===e)return t}var ng=!1;if(tk){if(tk){var ny=\"oninput\"in document;if(!ny){var nv=document.createElement(\"div\");nv.setAttribute(\"oninput\",\"return;\"),ny=\"function\"==typeof nv.oninput}r=ny}else r=!1;ng=r&&(!document.documentMode||9<document.documentMode)}function nb(){nd&&(nd.detachEvent(\"onpropertychange\",nA),nf=nd=null)}function nA(e){if(\"value\"===e.propertyName&&nh(nf)){var t=[];nu(t,nf,e,tv(e)),tC(np,t)}}function nx(e,t,n){\"focusin\"===e?(nb(),nd=t,nf=n,nd.attachEvent(\"onpropertychange\",nA)):\"focusout\"===e&&nb()}function nw(e){if(\"selectionchange\"===e||\"keyup\"===e||\"keydown\"===e)return nh(nf)}function nC(e,t){if(\"click\"===e)return nh(t)}function n_(e,t){if(\"input\"===e||\"change\"===e)return nh(t)}var nk=\"function\"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function nE(e,t){if(nk(e,t))return!0;if(\"object\"!=typeof e||null===e||\"object\"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!Q.call(t,o)||!nk(e[o],t[o]))return!1}return!0}function nj(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function nS(e,t){var n,r=nj(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=nj(r)}}function nO(e){e=null!=e&&null!=e.ownerDocument&&null!=e.ownerDocument.defaultView?e.ownerDocument.defaultView:window;for(var t=e7(e.document);t instanceof e.HTMLIFrameElement;){try{var n=\"string\"==typeof t.contentWindow.location.href}catch(e){n=!1}if(n)e=t.contentWindow;else break;t=e7(e.document)}return t}function nB(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(\"input\"===t&&(\"text\"===e.type||\"search\"===e.type||\"tel\"===e.type||\"url\"===e.type||\"password\"===e.type)||\"textarea\"===t||\"true\"===e.contentEditable)}var nP=tk&&\"documentMode\"in document&&11>=document.documentMode,nI=null,nT=null,nz=null,nD=!1;function nL(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;nD||null==nI||nI!==e7(r)||(r=\"selectionStart\"in(r=nI)&&nB(r)?{start:r.selectionStart,end:r.selectionEnd}:{anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},nz&&nE(nz,r)||(nz=r,0<(r=ct(nT,\"onSelect\")).length&&(t=new tF(\"onSelect\",\"select\",null,t,n),e.push({event:t,listeners:r}),t.target=nI)))}function nN(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n[\"Webkit\"+e]=\"webkit\"+t,n[\"Moz\"+e]=\"moz\"+t,n}var nR={animationend:nN(\"Animation\",\"AnimationEnd\"),animationiteration:nN(\"Animation\",\"AnimationIteration\"),animationstart:nN(\"Animation\",\"AnimationStart\"),transitionrun:nN(\"Transition\",\"TransitionRun\"),transitionstart:nN(\"Transition\",\"TransitionStart\"),transitioncancel:nN(\"Transition\",\"TransitionCancel\"),transitionend:nN(\"Transition\",\"TransitionEnd\")},nM={},nZ={};function nU(e){if(nM[e])return nM[e];if(!nR[e])return e;var t,n=nR[e];for(t in n)if(n.hasOwnProperty(t)&&t in nZ)return nM[e]=n[t];return e}tk&&(nZ=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete nR.animationend.animation,delete nR.animationiteration.animation,delete nR.animationstart.animation),\"TransitionEvent\"in window||delete nR.transitionend.transition);var nF=nU(\"animationend\"),nq=nU(\"animationiteration\"),nH=nU(\"animationstart\"),nV=nU(\"transitionrun\"),n$=nU(\"transitionstart\"),nW=nU(\"transitioncancel\"),nY=nU(\"transitionend\"),nK=new Map,nX=\"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");function nG(e,t){nK.set(e,t),eG(t,[e])}nX.push(\"scrollEnd\");var nQ=\"function\"==typeof reportError?reportError:function(e){if(\"object\"==typeof window&&\"function\"==typeof window.ErrorEvent){var t=new window.ErrorEvent(\"error\",{bubbles:!0,cancelable:!0,message:\"object\"==typeof e&&null!==e&&\"string\"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(\"object\"==typeof process&&\"function\"==typeof process.emit)return void process.emit(\"uncaughtException\",e);console.error(e)},nJ=[],n0=0,n1=0;function n2(){for(var e=n0,t=n1=n0=0;t<e;){var n=nJ[t];nJ[t++]=null;var r=nJ[t];nJ[t++]=null;var o=nJ[t];nJ[t++]=null;var a=nJ[t];if(nJ[t++]=null,null!==r&&null!==o){var i=r.pending;null===i?o.next=o:(o.next=i.next,i.next=o),r.pending=o}0!==a&&n6(n,o,a)}}function n4(e,t,n,r){nJ[n0++]=e,nJ[n0++]=t,nJ[n0++]=n,nJ[n0++]=r,n1|=r,e.lanes|=r,null!==(e=e.alternate)&&(e.lanes|=r)}function n5(e,t,n,r){return n4(e,t,n,r),n9(e)}function n3(e,t){return n4(e,null,null,t),n9(e)}function n6(e,t,n){e.lanes|=n;var r=e.alternate;null!==r&&(r.lanes|=n);for(var o=!1,a=e.return;null!==a;)a.childLanes|=n,null!==(r=a.alternate)&&(r.childLanes|=n),22===a.tag&&(null===(e=a.stateNode)||1&e._visibility||(o=!0)),e=a,a=a.return;return 3===e.tag?(a=e.stateNode,o&&null!==t&&(o=31-em(n),null===(r=(e=a.hiddenUpdates)[o])?e[o]=[t]:r.push(t),t.lane=0x20000000|n),a):null}function n9(e){if(50<st)throw st=0,sn=null,Error(l(185));for(var t=e.return;null!==t;)t=(e=t).return;return 3===e.tag?e.stateNode:null}var n8={};function n7(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function re(e,t,n,r){return new n7(e,t,n,r)}function rt(e){return!(!(e=e.prototype)||!e.isReactComponent)}function rn(e,t){var n=e.alternate;return null===n?((n=re(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=0x3e00000&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n.refCleanup=e.refCleanup,n}function rr(e,t){e.flags&=0x3e00002;var n=e.alternate;return null===n?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,e.dependencies=null===(t=n.dependencies)?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function ro(e,t,n,r,o,a){var i=0;if(r=e,\"function\"==typeof e)rt(e)&&(i=1);else if(\"string\"==typeof e)i=!function(e,t,n){if(1===n||null!=t.itemProp)return!1;switch(e){case\"meta\":case\"title\":return!0;case\"style\":if(\"string\"!=typeof t.precedence||\"string\"!=typeof t.href||\"\"===t.href)break;return!0;case\"link\":if(\"string\"!=typeof t.rel||\"string\"!=typeof t.href||\"\"===t.href||t.onLoad||t.onError)break;if(\"stylesheet\"===t.rel)return e=t.disabled,\"string\"==typeof t.precedence&&null==e;return!0;case\"script\":if(t.async&&\"function\"!=typeof t.async&&\"symbol\"!=typeof t.async&&!t.onLoad&&!t.onError&&t.src&&\"string\"==typeof t.src)return!0}return!1}(e,n,Z.current)?\"html\"===e||\"head\"===e||\"body\"===e?27:5:26;else e:switch(e){case E:return(e=re(31,n,t,o)).elementType=E,e.lanes=a,e;case g:return ra(n.children,o,a,t);case y:i=8,o|=24;break;case v:return(e=re(12,n,t,2|o)).elementType=v,e.lanes=a,e;case w:return(e=re(13,n,t,o)).elementType=w,e.lanes=a,e;case C:return(e=re(19,n,t,o)).elementType=C,e.lanes=a,e;default:if(\"object\"==typeof e&&null!==e)switch(e.$$typeof){case A:i=10;break e;case b:i=9;break e;case x:i=11;break e;case _:i=14;break e;case k:i=16,r=null;break e}i=29,n=Error(l(130,null===e?\"null\":typeof e,\"\")),r=null}return(t=re(i,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function ra(e,t,n,r){return(e=re(7,e,r,t)).lanes=n,e}function ri(e,t,n){return(e=re(6,e,null,t)).lanes=n,e}function rl(e){var t=re(18,null,null,0);return t.stateNode=e,t}function rs(e,t,n){return(t=re(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var rc=new WeakMap;function ru(e,t){if(\"object\"==typeof e&&null!==e){var n=rc.get(e);return void 0!==n?n:(t={value:e,source:t,stack:G(t)},rc.set(e,t),t)}return{value:e,source:t,stack:G(t)}}var rd=[],rf=0,rp=null,rh=0,rm=[],rg=0,ry=null,rv=1,rb=\"\";function rA(e,t){rd[rf++]=rh,rd[rf++]=rp,rp=e,rh=t}function rx(e,t,n){rm[rg++]=rv,rm[rg++]=rb,rm[rg++]=ry,ry=e;var r=rv;e=rb;var o=32-em(r)-1;r&=~(1<<o),n+=1;var a=32-em(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,rv=1<<32-em(t)+o|n<<o|r,rb=a+e}else rv=1<<a|n<<o|r,rb=e}function rw(e){null!==e.return&&(rA(e,1),rx(e,1,0))}function rC(e){for(;e===rp;)rp=rd[--rf],rd[rf]=null,rh=rd[--rf],rd[rf]=null;for(;e===ry;)ry=rm[--rg],rm[rg]=null,rb=rm[--rg],rm[rg]=null,rv=rm[--rg],rm[rg]=null}function r_(e,t){rm[rg++]=rv,rm[rg++]=rb,rm[rg++]=ry,rv=t.id,rb=t.overflow,ry=e}var rk=null,rE=null,rj=!1,rS=null,rO=!1,rB=Error(l(519));function rP(e){var t=Error(l(418,1<arguments.length&&void 0!==arguments[1]&&arguments[1]?\"text\":\"HTML\",\"\"));throw rN(ru(t,e)),rB}function rI(e){var t=e.stateNode,n=e.type,r=e.memoizedProps;switch(t[eD]=e,t[eL]=r,n){case\"dialog\":s5(\"cancel\",t),s5(\"close\",t);break;case\"iframe\":case\"object\":case\"embed\":s5(\"load\",t);break;case\"video\":case\"audio\":for(n=0;n<s1.length;n++)s5(s1[n],t);break;case\"source\":s5(\"error\",t);break;case\"img\":case\"image\":case\"link\":s5(\"error\",t),s5(\"load\",t);break;case\"details\":s5(\"toggle\",t);break;case\"input\":s5(\"invalid\",t),tr(t,r.value,r.defaultValue,r.checked,r.defaultChecked,r.type,r.name,!0);break;case\"select\":s5(\"invalid\",t);break;case\"textarea\":s5(\"invalid\",t),tl(t,r.value,r.defaultValue,r.children)}\"string\"!=typeof(n=r.children)&&\"number\"!=typeof n&&\"bigint\"!=typeof n||t.textContent===\"\"+n||!0===r.suppressHydrationWarning||cl(t.textContent,n)?(null!=r.popover&&(s5(\"beforetoggle\",t),s5(\"toggle\",t)),null!=r.onScroll&&s5(\"scroll\",t),null!=r.onScrollEnd&&s5(\"scrollend\",t),null!=r.onClick&&(t.onclick=tg),t=!0):t=!1,t||rP(e,!0)}function rT(e){for(rk=e.return;rk;)switch(rk.tag){case 5:case 31:case 13:rO=!1;return;case 27:case 3:rO=!0;return;default:rk=rk.return}}function rz(e){if(e!==rk)return!1;if(!rj)return rT(e),rj=!0,!1;var t,n=e.tag;if((t=3!==n&&27!==n)&&((t=5===n)&&(t=\"form\"===(t=e.type)||\"button\"===t||cg(e.type,e.memoizedProps)),t=!t),t&&rE&&rP(e),rT(e),13===n){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(l(317));rE=cI(e)}else if(31===n){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(l(317));rE=cI(e)}else 27===n?(n=rE,cC(e.type)?(e=cP,cP=null,rE=e):rE=n):rE=rk?cB(e.stateNode.nextSibling):null;return!0}function rD(){rE=rk=null,rj=!1}function rL(){var e=rS;return null!==e&&(null===lQ?lQ=e:lQ.push.apply(lQ,e),rS=null),e}function rN(e){null===rS?rS=[e]:rS.push(e)}var rR=N(null),rM=null,rZ=null;function rU(e,t,n){M(rR,t._currentValue),t._currentValue=n}function rF(e){e._currentValue=rR.current,R(rR)}function rq(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function rH(e,t,n,r){var o=e.child;for(null!==o&&(o.return=e);null!==o;){var a=o.dependencies;if(null!==a){var i=o.child;a=a.firstContext;e:for(;null!==a;){var s=a;a=o;for(var c=0;c<t.length;c++)if(s.context===t[c]){a.lanes|=n,null!==(s=a.alternate)&&(s.lanes|=n),rq(a.return,n,e),r||(i=null);break e}a=s.next}}else if(18===o.tag){if(null===(i=o.return))throw Error(l(341));i.lanes|=n,null!==(a=i.alternate)&&(a.lanes|=n),rq(i,n,e),i=null}else i=o.child;if(null!==i)i.return=o;else for(i=o;null!==i;){if(i===e){i=null;break}if(null!==(o=i.sibling)){o.return=i.return,i=o;break}i=i.return}o=i}}function rV(e,t,n,r){e=null;for(var o=t,a=!1;null!==o;){if(!a){if(0!=(524288&o.flags))a=!0;else if(0!=(262144&o.flags))break}if(10===o.tag){var i=o.alternate;if(null===i)throw Error(l(387));if(null!==(i=i.memoizedProps)){var s=o.type;nk(o.pendingProps.value,i.value)||(null!==e?e.push(s):e=[s])}}else if(o===q.current){if(null===(i=o.alternate))throw Error(l(387));i.memoizedState.memoizedState!==o.memoizedState.memoizedState&&(null!==e?e.push(c9):e=[c9])}o=o.return}null!==e&&rH(t,e,n,r),t.flags|=262144}function r$(e){for(e=e.firstContext;null!==e;){if(!nk(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function rW(e){rM=e,rZ=null,null!==(e=e.dependencies)&&(e.firstContext=null)}function rY(e){return rX(rM,e)}function rK(e,t){return null===rM&&rW(e),rX(e,t)}function rX(e,t){var n=t._currentValue;if(t={context:t,memoizedValue:n,next:null},null===rZ){if(null===e)throw Error(l(308));rZ=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else rZ=rZ.next=t;return n}var rG=\"undefined\"!=typeof AbortController?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(t,n){e.push(n)}};this.abort=function(){t.aborted=!0,e.forEach(function(e){return e()})}},rQ=o.unstable_scheduleCallback,rJ=o.unstable_NormalPriority,r0={$$typeof:A,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function r1(){return{controller:new rG,data:new Map,refCount:0}}function r2(e){e.refCount--,0===e.refCount&&rQ(rJ,function(){e.controller.abort()})}var r4=null,r5=0,r3=0,r6=null;function r9(){if(0==--r5&&null!==r4){null!==r6&&(r6.status=\"fulfilled\");var e=r4;r4=null,r3=0,r6=null;for(var t=0;t<e.length;t++)(0,e[t])()}}var r8=I.S;I.S=function(e,t){\"object\"==typeof t&&null!==t&&\"function\"==typeof t.then&&function(e,t){if(null===r4){var n=r4=[];r5=0,r3=sX(),r6={status:\"pending\",value:void 0,then:function(e){n.push(e)}}}r5++,t.then(r9,r9)}(0,t),null!==r8&&r8(e,t)};var r7=N(null);function oe(){var e=r7.current;return null!==e?e:lL.pooledCache}function ot(e,t){null===t?M(r7,r7.current):M(r7,t.pool)}function on(){var e=oe();return null===e?null:{parent:r0._currentValue,pool:e}}var or=Error(l(460)),oo=Error(l(474)),oa=Error(l(542)),oi={then:function(){}};function ol(e){return\"fulfilled\"===(e=e.status)||\"rejected\"===e}function os(e,t,n){switch(void 0===(n=e[n])?e.push(t):n!==t&&(t.then(tg,tg),t=n),t.status){case\"fulfilled\":return t.value;case\"rejected\":throw of(e=t.reason),e;default:if(\"string\"==typeof t.status)t.then(tg,tg);else{if(null!==(e=lL)&&100<e.shellSuspendCounter)throw Error(l(482));(e=t).status=\"pending\",e.then(function(e){if(\"pending\"===t.status){var n=t;n.status=\"fulfilled\",n.value=e}},function(e){if(\"pending\"===t.status){var n=t;n.status=\"rejected\",n.reason=e}})}switch(t.status){case\"fulfilled\":return t.value;case\"rejected\":throw of(e=t.reason),e}throw ou=t,or}}function oc(e){try{return(0,e._init)(e._payload)}catch(e){if(null!==e&&\"object\"==typeof e&&\"function\"==typeof e.then)throw ou=e,or;throw e}}var ou=null;function od(){if(null===ou)throw Error(l(459));var e=ou;return ou=null,e}function of(e){if(e===or||e===oa)throw Error(l(483))}var op=null,oh=0;function om(e){var t=oh;return oh+=1,null===op&&(op=[]),os(op,e,t)}function og(e,t){e.ref=void 0!==(t=t.props.ref)?t:null}function oy(e,t){if(t.$$typeof===p)throw Error(l(525));throw Error(l(31,\"[object Object]\"===(e=Object.prototype.toString.call(t))?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":e))}function ov(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e){for(var t=new Map;null!==e;)null!==e.key?t.set(e.key,e):t.set(e.index,e),e=e.sibling;return t}function o(e,t){return(e=rn(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return(t.index=r,e)?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=0x4000002,n):r:(t.flags|=0x4000002,n):(t.flags|=1048576,n)}function i(t){return e&&null===t.alternate&&(t.flags|=0x4000002),t}function s(e,t,n,r){return null===t||6!==t.tag?(t=ri(n,e.mode,r)).return=e:(t=o(t,n)).return=e,t}function c(e,t,n,r){var a=n.type;return a===g?d(e,t,n.props.children,r,n.key):(null!==t&&(t.elementType===a||\"object\"==typeof a&&null!==a&&a.$$typeof===k&&oc(a)===t.type)?og(t=o(t,n.props),n):og(t=ro(n.type,n.key,n.props,null,e.mode,r),n),t.return=e,t)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?(t=rs(n,e.mode,r)).return=e:(t=o(t,n.children||[])).return=e,t}function d(e,t,n,r,a){return null===t||7!==t.tag?(t=ra(n,e.mode,r,a)).return=e:(t=o(t,n)).return=e,t}function f(e,t,n){if(\"string\"==typeof t&&\"\"!==t||\"number\"==typeof t||\"bigint\"==typeof t)return(t=ri(\"\"+t,e.mode,n)).return=e,t;if(\"object\"==typeof t&&null!==t){switch(t.$$typeof){case h:return og(n=ro(t.type,t.key,t.props,null,e.mode,n),t),n.return=e,n;case m:return(t=rs(t,e.mode,n)).return=e,t;case k:return f(e,t=oc(t),n)}if(P(t)||O(t))return(t=ra(t,e.mode,n,null)).return=e,t;if(\"function\"==typeof t.then)return f(e,om(t),n);if(t.$$typeof===A)return f(e,rK(e,t),n);oy(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if(\"string\"==typeof n&&\"\"!==n||\"number\"==typeof n||\"bigint\"==typeof n)return null!==o?null:s(e,t,\"\"+n,r);if(\"object\"==typeof n&&null!==n){switch(n.$$typeof){case h:return n.key===o?c(e,t,n,r):null;case m:return n.key===o?u(e,t,n,r):null;case k:return p(e,t,n=oc(n),r)}if(P(n)||O(n))return null!==o?null:d(e,t,n,r,null);if(\"function\"==typeof n.then)return p(e,t,om(n),r);if(n.$$typeof===A)return p(e,t,rK(e,n),r);oy(e,n)}return null}function y(e,t,n,r,o){if(\"string\"==typeof r&&\"\"!==r||\"number\"==typeof r||\"bigint\"==typeof r)return s(t,e=e.get(n)||null,\"\"+r,o);if(\"object\"==typeof r&&null!==r){switch(r.$$typeof){case h:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case m:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case k:return y(e,t,n,r=oc(r),o)}if(P(r)||O(r))return d(t,e=e.get(n)||null,r,o,null);if(\"function\"==typeof r.then)return y(e,t,n,om(r),o);if(r.$$typeof===A)return y(e,t,n,rK(t,r),o);oy(t,r)}return null}return function(s,c,u,d){try{oh=0;var v=function s(c,u,d,v){if(\"object\"==typeof d&&null!==d&&d.type===g&&null===d.key&&(d=d.props.children),\"object\"==typeof d&&null!==d){switch(d.$$typeof){case h:e:{for(var b=d.key;null!==u;){if(u.key===b){if((b=d.type)===g){if(7===u.tag){n(c,u.sibling),(v=o(u,d.props.children)).return=c,c=v;break e}}else if(u.elementType===b||\"object\"==typeof b&&null!==b&&b.$$typeof===k&&oc(b)===u.type){n(c,u.sibling),og(v=o(u,d.props),d),v.return=c,c=v;break e}n(c,u);break}t(c,u),u=u.sibling}d.type===g?(v=ra(d.props.children,c.mode,v,d.key)).return=c:(og(v=ro(d.type,d.key,d.props,null,c.mode,v),d),v.return=c),c=v}return i(c);case m:e:{for(b=d.key;null!==u;){if(u.key===b)if(4===u.tag&&u.stateNode.containerInfo===d.containerInfo&&u.stateNode.implementation===d.implementation){n(c,u.sibling),(v=o(u,d.children||[])).return=c,c=v;break e}else{n(c,u);break}t(c,u),u=u.sibling}(v=rs(d,c.mode,v)).return=c,c=v}return i(c);case k:return s(c,u,d=oc(d),v)}if(P(d))return function(o,i,l,s){for(var c=null,u=null,d=i,h=i=0,m=null;null!==d&&h<l.length;h++){d.index>h?(m=d,d=null):m=d.sibling;var g=p(o,d,l[h],s);if(null===g){null===d&&(d=m);break}e&&d&&null===g.alternate&&t(o,d),i=a(g,i,h),null===u?c=g:u.sibling=g,u=g,d=m}if(h===l.length)return n(o,d),rj&&rA(o,h),c;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(i=a(d,i,h),null===u?c=d:u.sibling=d,u=d);return rj&&rA(o,h),c}for(d=r(d);h<l.length;h++)null!==(m=y(d,o,h,l[h],s))&&(e&&null!==m.alternate&&d.delete(null===m.key?h:m.key),i=a(m,i,h),null===u?c=m:u.sibling=m,u=m);return e&&d.forEach(function(e){return t(o,e)}),rj&&rA(o,h),c}(c,u,d,v);if(O(d)){if(\"function\"!=typeof(b=O(d)))throw Error(l(150));return function(o,i,s,c){if(null==s)throw Error(l(151));for(var u=null,d=null,h=i,m=i=0,g=null,v=s.next();null!==h&&!v.done;m++,v=s.next()){h.index>m?(g=h,h=null):g=h.sibling;var b=p(o,h,v.value,c);if(null===b){null===h&&(h=g);break}e&&h&&null===b.alternate&&t(o,h),i=a(b,i,m),null===d?u=b:d.sibling=b,d=b,h=g}if(v.done)return n(o,h),rj&&rA(o,m),u;if(null===h){for(;!v.done;m++,v=s.next())null!==(v=f(o,v.value,c))&&(i=a(v,i,m),null===d?u=v:d.sibling=v,d=v);return rj&&rA(o,m),u}for(h=r(h);!v.done;m++,v=s.next())null!==(v=y(h,o,m,v.value,c))&&(e&&null!==v.alternate&&h.delete(null===v.key?m:v.key),i=a(v,i,m),null===d?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(o,e)}),rj&&rA(o,m),u}(c,u,d=b.call(d),v)}if(\"function\"==typeof d.then)return s(c,u,om(d),v);if(d.$$typeof===A)return s(c,u,rK(c,d),v);oy(c,d)}return\"string\"==typeof d&&\"\"!==d||\"number\"==typeof d||\"bigint\"==typeof d?(d=\"\"+d,null!==u&&6===u.tag?(n(c,u.sibling),(v=o(u,d)).return=c):(n(c,u),(v=ri(d,c.mode,v)).return=c),i(c=v)):n(c,u)}(s,c,u,d);return op=null,v}catch(e){if(e===or||e===oa)throw e;var b=re(29,e,null,s.mode);return b.lanes=d,b.return=s,b}finally{}}}var ob=ov(!0),oA=ov(!1),ox=!1;function ow(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function oC(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function o_(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function ok(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&lD)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,t=n9(e),n6(e,null,n),t}return n4(e,r,t,n),n9(e)}function oE(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194048&n))){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,eS(e,n)}}function oj(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var oS=!1;function oO(){if(oS){var e=r6;if(null!==e)throw e}}function oB(e,t,n,r){oS=!1;var o=e.updateQueue;ox=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,l=o.shared.pending;if(null!==l){o.shared.pending=null;var s=l,c=s.next;s.next=null,null===i?a=c:i.next=c,i=s;var u=e.alternate;null!==u&&(l=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===l?u.firstBaseUpdate=c:l.next=c,u.lastBaseUpdate=s)}if(null!==a){var d=o.baseState;for(i=0,u=c=s=null,l=a;;){var p=-0x20000001&l.lane,h=p!==l.lane;if(h?(lR&p)===p:(r&p)===p){0!==p&&p===r3&&(oS=!0),null!==u&&(u=u.next={lane:0,tag:l.tag,payload:l.payload,callback:null,next:null});e:{var m=e,g=l;switch(p=t,g.tag){case 1:if(\"function\"==typeof(m=g.payload)){d=m.call(n,d,p);break e}d=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(p=\"function\"==typeof(m=g.payload)?m.call(n,d,p):m))break e;d=f({},d,p);break e;case 2:ox=!0}}null!==(p=l.callback)&&(e.flags|=64,h&&(e.flags|=8192),null===(h=o.callbacks)?o.callbacks=[p]:h.push(p))}else h={lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},null===u?(c=u=h,s=d):u=u.next=h,i|=p;if(null===(l=l.next))if(null===(l=o.shared.pending))break;else l=(h=l).next,h.next=null,o.lastBaseUpdate=h,o.shared.pending=null}null===u&&(s=d),o.baseState=s,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null===a&&(o.shared.lanes=0),l$|=i,e.lanes=i,e.memoizedState=d}}function oP(e,t){if(\"function\"!=typeof e)throw Error(l(191,e));e.call(t)}function oI(e,t){var n=e.callbacks;if(null!==n)for(e.callbacks=null,e=0;e<n.length;e++)oP(n[e],t)}var oT=N(null),oz=N(0);function oD(e,t){M(oz,e=lH),M(oT,t),lH=e|t.baseLanes}function oL(){M(oz,lH),M(oT,oT.current)}function oN(){lH=oz.current,R(oT),R(oz)}var oR=N(null),oM=null;function oZ(e){var t=e.alternate;M(oV,1&oV.current),M(oR,e),null===oM&&(null===t||null!==oT.current?oM=e:null!==t.memoizedState&&(oM=e))}function oU(e){M(oV,oV.current),M(oR,e),null===oM&&(oM=e)}function oF(e){22===e.tag?(M(oV,oV.current),M(oR,e),null===oM&&(oM=e)):oq(e)}function oq(){M(oV,oV.current),M(oR,oR.current)}function oH(e){R(oR),oM===e&&(oM=null),R(oV)}var oV=N(0);function o$(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||cS(n)||cO(n)))return t}else if(19===t.tag&&(\"forwards\"===t.memoizedProps.revealOrder||\"backwards\"===t.memoizedProps.revealOrder||\"unstable_legacy-backwards\"===t.memoizedProps.revealOrder||\"together\"===t.memoizedProps.revealOrder)){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var oW=0,oY=null,oK=null,oX=null,oG=!1,oQ=!1,oJ=!1,o0=0,o1=0,o2=null,o4=0;function o5(){throw Error(l(321))}function o3(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!nk(e[n],t[n]))return!1;return!0}function o6(e,t,n,r,o,a){return oW=a,oY=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,I.H=null===e||null===e.memoizedState?it:ir,oJ=!1,a=n(r,o),oJ=!1,oQ&&(a=o8(t,n,r,o)),o9(e),a}function o9(e){I.H=ie;var t=null!==oK&&null!==oK.next;if(oW=0,oX=oK=oY=null,oG=!1,o1=0,o2=null,t)throw Error(l(300));null===e||iA||null!==(e=e.dependencies)&&r$(e)&&(iA=!0)}function o8(e,t,n,r){oY=e;var o=0;do{if(oQ&&(o2=null),o1=0,oQ=!1,25<=o)throw Error(l(301));if(o+=1,oX=oK=null,null!=e.updateQueue){var a=e.updateQueue;a.lastEffect=null,a.events=null,a.stores=null,null!=a.memoCache&&(a.memoCache.index=0)}I.H=io,a=t(n,r)}while(oQ);return a}function o7(){var e=I.H,t=e.useState()[0];return t=\"function\"==typeof t.then?ai(t):t,e=e.useState()[0],(null!==oK?oK.memoizedState:null)!==e&&(oY.flags|=1024),t}function ae(){var e=0!==o0;return o0=0,e}function at(e,t,n){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~n}function an(e){if(oG){for(e=e.memoizedState;null!==e;){var t=e.queue;null!==t&&(t.pending=null),e=e.next}oG=!1}oW=0,oX=oK=oY=null,oQ=!1,o1=o0=0,o2=null}function ar(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===oX?oY.memoizedState=oX=e:oX=oX.next=e,oX}function ao(){if(null===oK){var e=oY.alternate;e=null!==e?e.memoizedState:null}else e=oK.next;var t=null===oX?oY.memoizedState:oX.next;if(null!==t)oX=t,oK=e;else{if(null===e){if(null===oY.alternate)throw Error(l(467));throw Error(l(310))}e={memoizedState:(oK=e).memoizedState,baseState:oK.baseState,baseQueue:oK.baseQueue,queue:oK.queue,next:null},null===oX?oY.memoizedState=oX=e:oX=oX.next=e}return oX}function aa(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function ai(e){var t=o1;return o1+=1,null===o2&&(o2=[]),e=os(o2,e,t),t=oY,null===(null===oX?t.memoizedState:oX.next)&&(I.H=null===(t=t.alternate)||null===t.memoizedState?it:ir),e}function al(e){if(null!==e&&\"object\"==typeof e){if(\"function\"==typeof e.then)return ai(e);if(e.$$typeof===A)return rY(e)}throw Error(l(438,String(e)))}function as(e){var t=null,n=oY.updateQueue;if(null!==n&&(t=n.memoCache),null==t){var r=oY.alternate;null!==r&&null!==(r=r.updateQueue)&&null!=(r=r.memoCache)&&(t={data:r.data.map(function(e){return e.slice()}),index:0})}if(null==t&&(t={data:[],index:0}),null===n&&(n=aa(),oY.updateQueue=n),n.memoCache=t,void 0===(n=t.data[t.index]))for(n=t.data[t.index]=Array(e),r=0;r<e;r++)n[r]=j;return t.index++,n}function ac(e,t){return\"function\"==typeof t?t(e):t}function au(e){return ad(ao(),oK,e)}function ad(e,t,n){var r=e.queue;if(null===r)throw Error(l(311));r.lastRenderedReducer=n;var o=e.baseQueue,a=r.pending;if(null!==a){if(null!==o){var i=o.next;o.next=a.next,a.next=i}t.baseQueue=o=a,r.pending=null}if(a=e.baseState,null===o)e.memoizedState=a;else{t=o.next;var s=i=null,c=null,u=t,d=!1;do{var f=-0x20000001&u.lane;if(f!==u.lane?(lR&f)===f:(oW&f)===f){var p=u.revertLane;if(0===p)null!==c&&(c=c.next={lane:0,revertLane:0,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),f===r3&&(d=!0);else if((oW&p)===p){u=u.next,p===r3&&(d=!0);continue}else f={lane:0,revertLane:u.revertLane,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(s=c=f,i=a):c=c.next=f,oY.lanes|=p,l$|=p;f=u.action,oJ&&n(a,f),a=u.hasEagerState?u.eagerState:n(a,f)}else p={lane:f,revertLane:u.revertLane,gesture:u.gesture,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(s=c=p,i=a):c=c.next=p,oY.lanes|=f,l$|=f;u=u.next}while(null!==u&&u!==t);if(null===c?i=a:c.next=s,!nk(a,e.memoizedState)&&(iA=!0,d&&null!==(n=r6)))throw n;e.memoizedState=a,e.baseState=i,e.baseQueue=c,r.lastRenderedState=a}return null===o&&(r.lanes=0),[e.memoizedState,r.dispatch]}function af(e){var t=ao(),n=t.queue;if(null===n)throw Error(l(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var i=o=o.next;do a=e(a,i.action),i=i.next;while(i!==o);nk(a,t.memoizedState)||(iA=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function ap(e,t,n){var r=oY,o=ao(),a=rj;if(a){if(void 0===n)throw Error(l(407));n=n()}else n=t();var i=!nk((oK||o).memoizedState,n);if(i&&(o.memoizedState=n,iA=!0),o=o.queue,aR(ag.bind(null,r,o,e),[e]),o.getSnapshot!==t||i||null!==oX&&1&oX.memoizedState.tag){if(r.flags|=2048,aT(9,{destroy:void 0},am.bind(null,r,o,n,t),null),null===lL)throw Error(l(349));a||0!=(124&oW)||ah(r,t,n)}return n}function ah(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=oY.updateQueue)?(t=aa(),oY.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function am(e,t,n,r){t.value=n,t.getSnapshot=r,ay(t)&&av(e)}function ag(e,t,n){return n(function(){ay(t)&&av(e)})}function ay(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!nk(e,n)}catch(e){return!0}}function av(e){var t=n3(e,2);null!==t&&sa(t,e,2)}function ab(e){var t=ar();if(\"function\"==typeof e){var n=e;if(e=n(),oJ){eh(!0);try{n()}finally{eh(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:ac,lastRenderedState:e},t}function aA(e,t,n,r){return e.baseState=n,ad(e,oK,\"function\"==typeof r?r:ac)}function ax(e,t,n,r,o){if(a9(e))throw Error(l(485));if(null!==(e=t.action)){var a={payload:o,action:e,next:null,isTransition:!0,status:\"pending\",value:null,reason:null,listeners:[],then:function(e){a.listeners.push(e)}};null!==I.T?n(!0):a.isTransition=!1,r(a),null===(n=t.pending)?(a.next=t.pending=a,aw(t,a)):(a.next=n.next,t.pending=n.next=a)}}function aw(e,t){var n=t.action,r=t.payload,o=e.state;if(t.isTransition){var a=I.T,i={};I.T=i;try{var l=n(o,r),s=I.S;null!==s&&s(i,l),aC(e,t,l)}catch(n){ak(e,t,n)}finally{null!==a&&null!==i.types&&(a.types=i.types),I.T=a}}else try{a=n(o,r),aC(e,t,a)}catch(n){ak(e,t,n)}}function aC(e,t,n){null!==n&&\"object\"==typeof n&&\"function\"==typeof n.then?n.then(function(n){a_(e,t,n)},function(n){return ak(e,t,n)}):a_(e,t,n)}function a_(e,t,n){t.status=\"fulfilled\",t.value=n,aE(t),e.state=n,null!==(t=e.pending)&&((n=t.next)===t?e.pending=null:(n=n.next,t.next=n,aw(e,n)))}function ak(e,t,n){var r=e.pending;if(e.pending=null,null!==r){r=r.next;do t.status=\"rejected\",t.reason=n,aE(t),t=t.next;while(t!==r)}e.action=null}function aE(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function aj(e,t){return t}function aS(e,t){if(rj){var n=lL.formState;if(null!==n){e:{var r=oY;if(rj){if(rE){t:{for(var o=rE,a=rO;8!==o.nodeType;)if(!a||null===(o=cB(o.nextSibling))){o=null;break t}o=\"F!\"===(a=o.data)||\"F\"===a?o:null}if(o){rE=cB(o.nextSibling),r=\"F!\"===o.data;break e}}rP(r)}r=!1}r&&(t=n[0])}}return(n=ar()).memoizedState=n.baseState=t,r={pending:null,lanes:0,dispatch:null,lastRenderedReducer:aj,lastRenderedState:t},n.queue=r,n=a5.bind(null,oY,r),r.dispatch=n,r=ab(!1),a=a6.bind(null,oY,!1,r.queue),r=ar(),o={state:t,dispatch:null,action:e,pending:null},r.queue=o,n=ax.bind(null,oY,o,a,n),o.dispatch=n,r.memoizedState=e,[t,n,!1]}function aO(e){return aB(ao(),oK,e)}function aB(e,t,n){if(t=ad(e,t,aj)[0],e=au(ac)[0],\"object\"==typeof t&&null!==t&&\"function\"==typeof t.then)try{var r=ai(t)}catch(e){if(e===or)throw oa;throw e}else r=t;var o=(t=ao()).queue,a=o.dispatch;return n!==t.memoizedState&&(oY.flags|=2048,aT(9,{destroy:void 0},aP.bind(null,o,n),null)),[r,a,e]}function aP(e,t){e.action=t}function aI(e){var t=ao(),n=oK;if(null!==n)return aB(t,n,e);ao(),t=t.memoizedState;var r=(n=ao()).queue.dispatch;return n.memoizedState=e,[t,r,!1]}function aT(e,t,n,r){return e={tag:e,create:n,deps:r,inst:t,next:null},null===(t=oY.updateQueue)&&(t=aa(),oY.updateQueue=t),null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function az(){return ao().memoizedState}function aD(e,t,n,r){var o=ar();oY.flags|=e,o.memoizedState=aT(1|t,{destroy:void 0},n,void 0===r?null:r)}function aL(e,t,n,r){var o=ao();r=void 0===r?null:r;var a=o.memoizedState.inst;null!==oK&&null!==r&&o3(r,oK.memoizedState.deps)?o.memoizedState=aT(t,a,n,r):(oY.flags|=e,o.memoizedState=aT(1|t,a,n,r))}function aN(e,t){aD(8390656,8,e,t)}function aR(e,t){aL(2048,8,e,t)}function aM(e,t){return aL(4,2,e,t)}function aZ(e,t){return aL(4,4,e,t)}function aU(e,t){if(\"function\"==typeof t){var n=t(e=e());return function(){\"function\"==typeof n?n():t(null)}}if(null!=t)return t.current=e=e(),function(){t.current=null}}function aF(e,t,n){n=null!=n?n.concat([e]):null,aL(4,4,aU.bind(null,t,e),n)}function aq(){}function aH(e,t){var n=ao();t=void 0===t?null:t;var r=n.memoizedState;return null!==t&&o3(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function aV(e,t){var n=ao();t=void 0===t?null:t;var r=n.memoizedState;if(null!==t&&o3(t,r[1]))return r[0];if(r=e(),oJ){eh(!0);try{e()}finally{eh(!1)}}return n.memoizedState=[r,t],r}function a$(e,t,n){return void 0===n||0!=(0x40000000&oW)?e.memoizedState=t:(e.memoizedState=n,e=so(),oY.lanes|=e,l$|=e,n)}function aW(e,t,n,r){return nk(n,t)?n:null!==oT.current?(nk(e=a$(e,n,r),t)||(iA=!0),e):0==(42&oW)||0!=(0x40000000&oW)?(iA=!0,e.memoizedState=n):(e=so(),oY.lanes|=e,l$|=e,t)}function aY(e,t,n,r,o){var a=T.p;T.p=0!==a&&8>a?a:8;var i=I.T,l={};I.T=l,a6(e,!1,t,n);try{var s=o(),c=I.S;if(null!==c&&c(l,s),null!==s&&\"object\"==typeof s&&\"function\"==typeof s.then){var u,d,f=(u=[],d={status:\"pending\",value:null,reason:null,then:function(e){u.push(e)}},s.then(function(){d.status=\"fulfilled\",d.value=r;for(var e=0;e<u.length;e++)(0,u[e])(r)},function(e){for(d.status=\"rejected\",d.reason=e,e=0;e<u.length;e++)(0,u[e])(void 0)}),d);a3(e,t,f,sr(e))}else a3(e,t,r,sr(e))}catch(n){a3(e,t,{then:function(){},status:\"rejected\",reason:n},sr())}finally{T.p=a,null!==i&&null!==l.types&&(i.types=l.types),I.T=i}}function aK(){}function aX(e,t,n,r){if(5!==e.tag)throw Error(l(476));var o=aG(e).queue;aY(e,o,t,z,null===n?aK:function(){return aQ(e),n(r)})}function aG(e){var t=e.memoizedState;if(null!==t)return t;var n={};return(t={memoizedState:z,baseState:z,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ac,lastRenderedState:z},next:null}).next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ac,lastRenderedState:n},next:null},e.memoizedState=t,null!==(e=e.alternate)&&(e.memoizedState=t),t}function aQ(e){var t=aG(e);null===t.next&&(t=e.alternate.memoizedState),a3(e,t.next.queue,{},sr())}function aJ(){return rY(c9)}function a0(){return ao().memoizedState}function a1(){return ao().memoizedState}function a2(e){for(var t=e.return;null!==t;){switch(t.tag){case 24:case 3:var n=sr(),r=ok(t,e=o_(n),n);null!==r&&(sa(r,t,n),oE(r,t,n)),t={cache:r1()},e.payload=t;return}t=t.return}}function a4(e,t,n){var r=sr();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},a9(e)?a8(t,n):null!==(n=n5(e,t,n,r))&&(sa(n,e,r),a7(n,t,r))}function a5(e,t,n){a3(e,t,n,sr())}function a3(e,t,n,r){var o={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(a9(e))a8(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,l=a(i,n);if(o.hasEagerState=!0,o.eagerState=l,nk(l,i))return n4(e,t,o,0),null===lL&&n2(),!1}catch(e){}finally{}if(null!==(n=n5(e,t,o,r)))return sa(n,e,r),a7(n,t,r),!0}return!1}function a6(e,t,n,r){if(r={lane:2,revertLane:sX(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},a9(e)){if(t)throw Error(l(479))}else null!==(t=n5(e,n,r,2))&&sa(t,e,2)}function a9(e){var t=e.alternate;return e===oY||null!==t&&t===oY}function a8(e,t){oQ=oG=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function a7(e,t,n){if(0!=(4194048&n)){var r=t.lanes;r&=e.pendingLanes,t.lanes=n|=r,eS(e,n)}}var ie={readContext:rY,use:al,useCallback:o5,useContext:o5,useEffect:o5,useImperativeHandle:o5,useLayoutEffect:o5,useInsertionEffect:o5,useMemo:o5,useReducer:o5,useRef:o5,useState:o5,useDebugValue:o5,useDeferredValue:o5,useTransition:o5,useSyncExternalStore:o5,useId:o5,useHostTransitionStatus:o5,useFormState:o5,useActionState:o5,useOptimistic:o5,useMemoCache:o5,useCacheRefresh:o5},it={readContext:rY,use:al,useCallback:function(e,t){return ar().memoizedState=[e,void 0===t?null:t],e},useContext:rY,useEffect:aN,useImperativeHandle:function(e,t,n){n=null!=n?n.concat([e]):null,aD(4194308,4,aU.bind(null,t,e),n)},useLayoutEffect:function(e,t){return aD(4194308,4,e,t)},useInsertionEffect:function(e,t){aD(4,2,e,t)},useMemo:function(e,t){var n=ar();t=void 0===t?null:t;var r=e();if(oJ){eh(!0);try{e()}finally{eh(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=ar();if(void 0!==n){var o=n(t);if(oJ){eh(!0);try{n(t)}finally{eh(!1)}}}else o=t;return r.memoizedState=r.baseState=o,r.queue=e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:o},e=e.dispatch=a4.bind(null,oY,e),[r.memoizedState,e]},useRef:function(e){return ar().memoizedState=e={current:e}},useState:function(e){var t=(e=ab(e)).queue,n=a5.bind(null,oY,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:aq,useDeferredValue:function(e,t){return a$(ar(),e,t)},useTransition:function(){var e=ab(!1);return e=aY.bind(null,oY,e.queue,!0,!1),ar().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=oY,o=ar();if(rj){if(void 0===n)throw Error(l(407));n=n()}else{if(n=t(),null===lL)throw Error(l(349));0!=(124&lR)||ah(r,t,n)}o.memoizedState=n;var a={value:n,getSnapshot:t};return o.queue=a,aN(ag.bind(null,r,a,e),[e]),r.flags|=2048,aT(9,{destroy:void 0},am.bind(null,r,a,n,t),null),n},useId:function(){var e=ar(),t=lL.identifierPrefix;if(rj){var n=rb,r=rv;t=\"_\"+t+\"R_\"+(n=(r&~(1<<32-em(r)-1)).toString(32)+n),0<(n=o0++)&&(t+=\"H\"+n.toString(32)),t+=\"_\"}else t=\"_\"+t+\"r_\"+(n=o4++).toString(32)+\"_\";return e.memoizedState=t},useHostTransitionStatus:aJ,useFormState:aS,useActionState:aS,useOptimistic:function(e){var t=ar();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=a6.bind(null,oY,!0,n),n.dispatch=t,[e,t]},useMemoCache:as,useCacheRefresh:function(){return ar().memoizedState=a2.bind(null,oY)}},ir={readContext:rY,use:al,useCallback:aH,useContext:rY,useEffect:aR,useImperativeHandle:aF,useInsertionEffect:aM,useLayoutEffect:aZ,useMemo:aV,useReducer:au,useRef:az,useState:function(){return au(ac)},useDebugValue:aq,useDeferredValue:function(e,t){return aW(ao(),oK.memoizedState,e,t)},useTransition:function(){var e=au(ac)[0],t=ao().memoizedState;return[\"boolean\"==typeof e?e:ai(e),t]},useSyncExternalStore:ap,useId:a0,useHostTransitionStatus:aJ,useFormState:aO,useActionState:aO,useOptimistic:function(e,t){return aA(ao(),oK,e,t)},useMemoCache:as,useCacheRefresh:a1},io={readContext:rY,use:al,useCallback:aH,useContext:rY,useEffect:aR,useImperativeHandle:aF,useInsertionEffect:aM,useLayoutEffect:aZ,useMemo:aV,useReducer:af,useRef:az,useState:function(){return af(ac)},useDebugValue:aq,useDeferredValue:function(e,t){var n=ao();return null===oK?a$(n,e,t):aW(n,oK.memoizedState,e,t)},useTransition:function(){var e=af(ac)[0],t=ao().memoizedState;return[\"boolean\"==typeof e?e:ai(e),t]},useSyncExternalStore:ap,useId:a0,useHostTransitionStatus:aJ,useFormState:aI,useActionState:aI,useOptimistic:function(e,t){var n=ao();return null!==oK?aA(n,oK,e,t):(n.baseState=e,[e,n.queue.dispatch])},useMemoCache:as,useCacheRefresh:a1};function ia(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:f({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ii={enqueueSetState:function(e,t,n){e=e._reactInternals;var r=sr(),o=o_(r);o.payload=t,null!=n&&(o.callback=n),null!==(t=ok(e,o,r))&&(sa(t,e,r),oE(t,e,r))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=sr(),o=o_(r);o.tag=1,o.payload=t,null!=n&&(o.callback=n),null!==(t=ok(e,o,r))&&(sa(t,e,r),oE(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=sr(),r=o_(n);r.tag=2,null!=t&&(r.callback=t),null!==(t=ok(e,r,n))&&(sa(t,e,n),oE(t,e,n))}};function il(e,t,n,r,o,a,i){return\"function\"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||!nE(n,r)||!nE(o,a)}function is(e,t,n,r){e=t.state,\"function\"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),\"function\"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ii.enqueueReplaceState(t,t.state,null)}function ic(e,t){var n=t;if(\"ref\"in t)for(var r in n={},t)\"ref\"!==r&&(n[r]=t[r]);if(e=e.defaultProps)for(var o in n===t&&(n=f({},n)),e)void 0===n[o]&&(n[o]=e[o]);return n}function iu(e){nQ(e)}function id(e){console.error(e)}function ip(e){nQ(e)}function ih(e,t){try{(0,e.onUncaughtError)(t.value,{componentStack:t.stack})}catch(e){setTimeout(function(){throw e})}}function im(e,t,n){try{(0,e.onCaughtError)(n.value,{componentStack:n.stack,errorBoundary:1===t.tag?t.stateNode:null})}catch(e){setTimeout(function(){throw e})}}function ig(e,t,n){return(n=o_(n)).tag=3,n.payload={element:null},n.callback=function(){ih(e,t)},n}function iy(e){return(e=o_(e)).tag=3,e}function iv(e,t,n,r){var o=n.type.getDerivedStateFromError;if(\"function\"==typeof o){var a=r.value;e.payload=function(){return o(a)},e.callback=function(){im(t,n,r)}}var i=n.stateNode;null!==i&&\"function\"==typeof i.componentDidCatch&&(e.callback=function(){im(t,n,r),\"function\"!=typeof o&&(null===l4?l4=new Set([this]):l4.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:null!==e?e:\"\"})})}var ib=Error(l(461)),iA=!1;function ix(e,t,n,r){t.child=null===e?oA(t,null,n,r):ob(t,e.child,n,r)}function iw(e,t,n,r,o){n=n.render;var a=t.ref;if(\"ref\"in r){var i={};for(var l in r)\"ref\"!==l&&(i[l]=r[l])}else i=r;return(rW(t),r=o6(e,t,n,i,a,o),l=ae(),null===e||iA)?(rj&&l&&rw(t),t.flags|=1,ix(e,t,r,o),t.child):(at(e,t,o),iV(e,t,o))}function iC(e,t,n,r,o){if(null===e){var a=n.type;return\"function\"!=typeof a||rt(a)||void 0!==a.defaultProps||null!==n.compare?((e=ro(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,i_(e,t,a,r,o))}if(a=e.child,!i$(e,o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:nE)(i,r)&&e.ref===t.ref)return iV(e,t,o)}return t.flags|=1,(e=rn(a,r)).ref=t.ref,e.return=t,t.child=e}function i_(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(nE(a,r)&&e.ref===t.ref)if(iA=!1,t.pendingProps=r=a,!i$(e,o))return t.lanes=e.lanes,iV(e,t,o);else 0!=(131072&e.flags)&&(iA=!0)}return iP(e,t,n,r,o)}function ik(e,t,n,r){var o=r.children,a=null!==e?e.memoizedState:null;if(null===e&&null===t.stateNode&&(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),\"hidden\"===r.mode){if(0!=(128&t.flags)){if(r=null!==a?a.baseLanes|n:n,null!==e){for(a=0,o=t.child=e.child;null!==o;)a=a|o.lanes|o.childLanes,o=o.sibling;t.childLanes=a&~r}else t.childLanes=0,t.child=null;return ij(e,t,r,n)}if(0==(0x20000000&n))return t.lanes=t.childLanes=0x20000000,ij(e,t,null!==a?a.baseLanes|n:n,n);t.memoizedState={baseLanes:0,cachePool:null},null!==e&&ot(t,null!==a?a.cachePool:null),null!==a?oD(t,a):oL(),oF(t)}else null!==a?(ot(t,a.cachePool),oD(t,a),oq(t),t.memoizedState=null):(null!==e&&ot(t,null),oL(),oq(t));return ix(e,t,o,n),t.child}function iE(e,t){return null!==e&&22===e.tag||null!==t.stateNode||(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),t.sibling}function ij(e,t,n,r){var o=oe();return t.memoizedState={baseLanes:n,cachePool:o=null===o?null:{parent:r0._currentValue,pool:o}},null!==e&&ot(t,null),oL(),oF(t),null!==e&&rV(e,t,r,!0),null}function iS(e,t){return(t=iZ({mode:t.mode,children:t.children},e.mode)).ref=e.ref,e.child=t,t.return=e,t}function iO(e,t,n){return ob(t,e.child,null,n),e=iS(t,t.pendingProps),e.flags|=2,oH(t),t.memoizedState=null,e}function iB(e,t){var n=t.ref;if(null===n)null!==e&&null!==e.ref&&(t.flags|=4194816);else{if(\"function\"!=typeof n&&\"object\"!=typeof n)throw Error(l(284));(null===e||e.ref!==n)&&(t.flags|=4194816)}}function iP(e,t,n,r,o){return(rW(t),n=o6(e,t,n,r,void 0,o),r=ae(),null===e||iA)?(rj&&r&&rw(t),t.flags|=1,ix(e,t,n,o),t.child):(at(e,t,o),iV(e,t,o))}function iI(e,t,n,r,o,a){return(rW(t),t.updateQueue=null,n=o8(t,r,n,o),o9(e),r=ae(),null===e||iA)?(rj&&r&&rw(t),t.flags|=1,ix(e,t,n,a),t.child):(at(e,t,a),iV(e,t,a))}function iT(e,t,n,r,o){if(rW(t),null===t.stateNode){var a=n8,i=n.contextType;\"object\"==typeof i&&null!==i&&(a=rY(i)),t.memoizedState=null!==(a=new n(r,a)).state&&void 0!==a.state?a.state:null,a.updater=ii,t.stateNode=a,a._reactInternals=t,(a=t.stateNode).props=r,a.state=t.memoizedState,a.refs={},ow(t),i=n.contextType,a.context=\"object\"==typeof i&&null!==i?rY(i):n8,a.state=t.memoizedState,\"function\"==typeof(i=n.getDerivedStateFromProps)&&(ia(t,n,i,r),a.state=t.memoizedState),\"function\"==typeof n.getDerivedStateFromProps||\"function\"==typeof a.getSnapshotBeforeUpdate||\"function\"!=typeof a.UNSAFE_componentWillMount&&\"function\"!=typeof a.componentWillMount||(i=a.state,\"function\"==typeof a.componentWillMount&&a.componentWillMount(),\"function\"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),i!==a.state&&ii.enqueueReplaceState(a,a.state,null),oB(t,r,a,o),oO(),a.state=t.memoizedState),\"function\"==typeof a.componentDidMount&&(t.flags|=4194308),r=!0}else if(null===e){a=t.stateNode;var l=t.memoizedProps,s=ic(n,l);a.props=s;var c=a.context,u=n.contextType;i=n8,\"object\"==typeof u&&null!==u&&(i=rY(u));var d=n.getDerivedStateFromProps;u=\"function\"==typeof d||\"function\"==typeof a.getSnapshotBeforeUpdate,l=t.pendingProps!==l,u||\"function\"!=typeof a.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof a.componentWillReceiveProps||(l||c!==i)&&is(t,a,r,i),ox=!1;var f=t.memoizedState;a.state=f,oB(t,r,a,o),oO(),c=t.memoizedState,l||f!==c||ox?(\"function\"==typeof d&&(ia(t,n,d,r),c=t.memoizedState),(s=ox||il(t,n,s,r,f,c,i))?(u||\"function\"!=typeof a.UNSAFE_componentWillMount&&\"function\"!=typeof a.componentWillMount||(\"function\"==typeof a.componentWillMount&&a.componentWillMount(),\"function\"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),\"function\"==typeof a.componentDidMount&&(t.flags|=4194308)):(\"function\"==typeof a.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=c),a.props=r,a.state=c,a.context=i,r=s):(\"function\"==typeof a.componentDidMount&&(t.flags|=4194308),r=!1)}else{a=t.stateNode,oC(e,t),u=ic(n,i=t.memoizedProps),a.props=u,d=t.pendingProps,f=a.context,c=n.contextType,s=n8,\"object\"==typeof c&&null!==c&&(s=rY(c)),(c=\"function\"==typeof(l=n.getDerivedStateFromProps)||\"function\"==typeof a.getSnapshotBeforeUpdate)||\"function\"!=typeof a.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof a.componentWillReceiveProps||(i!==d||f!==s)&&is(t,a,r,s),ox=!1,f=t.memoizedState,a.state=f,oB(t,r,a,o),oO();var p=t.memoizedState;i!==d||f!==p||ox||null!==e&&null!==e.dependencies&&r$(e.dependencies)?(\"function\"==typeof l&&(ia(t,n,l,r),p=t.memoizedState),(u=ox||il(t,n,u,r,f,p,s)||null!==e&&null!==e.dependencies&&r$(e.dependencies))?(c||\"function\"!=typeof a.UNSAFE_componentWillUpdate&&\"function\"!=typeof a.componentWillUpdate||(\"function\"==typeof a.componentWillUpdate&&a.componentWillUpdate(r,p,s),\"function\"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,p,s)),\"function\"==typeof a.componentDidUpdate&&(t.flags|=4),\"function\"==typeof a.getSnapshotBeforeUpdate&&(t.flags|=1024)):(\"function\"!=typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),\"function\"!=typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=p),a.props=r,a.state=p,a.context=s,r=u):(\"function\"!=typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),\"function\"!=typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return a=r,iB(e,t),r=0!=(128&t.flags),a||r?(a=t.stateNode,n=r&&\"function\"!=typeof n.getDerivedStateFromError?null:a.render(),t.flags|=1,null!==e&&r?(t.child=ob(t,e.child,null,o),t.child=ob(t,null,n,o)):ix(e,t,n,o),t.memoizedState=a.state,e=t.child):e=iV(e,t,o),e}function iz(e,t,n,r){return rD(),t.flags|=256,ix(e,t,n,r),t.child}var iD={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function iL(e){return{baseLanes:e,cachePool:on()}}function iN(e,t,n){return e=null!==e?e.childLanes&~n:0,t&&(e|=lK),e}function iR(e,t,n){var r,o=t.pendingProps,a=!1,i=0!=(128&t.flags);if((r=i)||(r=(null===e||null!==e.memoizedState)&&0!=(2&oV.current)),r&&(a=!0,t.flags&=-129),r=0!=(32&t.flags),t.flags&=-33,null===e){if(rj){if(a?oZ(t):oq(t),(e=rE)?null!==(e=null!==(e=cj(e,rO))&&\"&\"!==e.data?e:null)&&(t.memoizedState={dehydrated:e,treeContext:null!==ry?{id:rv,overflow:rb}:null,retryLane:0x20000000,hydrationErrors:null},(n=rl(e)).return=t,t.child=n,rk=t,rE=null):e=null,null===e)throw rP(t);return cO(e)?t.lanes=32:t.lanes=0x20000000,null}var s=o.children;return(o=o.fallback,a)?(oq(t),s=iZ({mode:\"hidden\",children:s},a=t.mode),o=ra(o,a,n,null),s.return=t,o.return=t,s.sibling=o,t.child=s,(o=t.child).memoizedState=iL(n),o.childLanes=iN(e,r,n),t.memoizedState=iD,iE(null,o)):(oZ(t),iM(t,s))}var c=e.memoizedState;if(null!==c&&null!==(s=c.dehydrated)){if(i)256&t.flags?(oZ(t),t.flags&=-257,t=iU(e,t,n)):null!==t.memoizedState?(oq(t),t.child=e.child,t.flags|=128,t=null):(oq(t),s=o.fallback,a=t.mode,o=iZ({mode:\"visible\",children:o.children},a),s=ra(s,a,n,null),s.flags|=2,o.return=t,s.return=t,o.sibling=s,t.child=o,ob(t,e.child,null,n),(o=t.child).memoizedState=iL(n),o.childLanes=iN(e,r,n),t.memoizedState=iD,t=iE(null,o));else if(oZ(t),cO(s)){if(r=s.nextSibling&&s.nextSibling.dataset)var u=r.dgst;r=u,(o=Error(l(419))).stack=\"\",o.digest=r,rN({value:o,source:null,stack:null}),t=iU(e,t,n)}else if(iA||rV(e,t,n,!1),r=0!=(n&e.childLanes),iA||r){if(null!==(r=lL)&&0!==(o=eO(r,n))&&o!==c.retryLane)throw c.retryLane=o,n3(e,o),sa(r,e,o),ib;cS(s)||sg(),t=iU(e,t,n)}else cS(s)?(t.flags|=192,t.child=e.child,t=null):(e=c.treeContext,rE=cB(s.nextSibling),rk=t,rj=!0,rS=null,rO=!1,null!==e&&r_(t,e),t=iM(t,o.children),t.flags|=4096);return t}return a?(oq(t),s=o.fallback,a=t.mode,u=(c=e.child).sibling,(o=rn(c,{mode:\"hidden\",children:o.children})).subtreeFlags=0x3e00000&c.subtreeFlags,null!==u?s=rn(u,s):(s=ra(s,a,n,null),s.flags|=2),s.return=t,o.return=t,o.sibling=s,t.child=o,iE(null,o),o=t.child,null===(s=e.child.memoizedState)?s=iL(n):(null!==(a=s.cachePool)?(c=r0._currentValue,a=a.parent!==c?{parent:c,pool:c}:a):a=on(),s={baseLanes:s.baseLanes|n,cachePool:a}),o.memoizedState=s,o.childLanes=iN(e,r,n),t.memoizedState=iD,iE(e.child,o)):(oZ(t),e=(n=e.child).sibling,(n=rn(n,{mode:\"visible\",children:o.children})).return=t,n.sibling=null,null!==e&&(null===(r=t.deletions)?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n)}function iM(e,t){return(t=iZ({mode:\"visible\",children:t},e.mode)).return=e,e.child=t}function iZ(e,t){return(e=re(22,e,null,t)).lanes=0,e}function iU(e,t,n){return ob(t,e.child,null,n),e=iM(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function iF(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),rq(e.return,t,n)}function iq(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,treeForkCount:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.treeForkCount=a)}function iH(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;r=r.children;var i=oV.current,l=0!=(2&i);if(l?(i=1&i|2,t.flags|=128):i&=1,M(oV,i),ix(e,t,r,n),r=rj?rh:0,!l&&null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&iF(e,n,t);else if(19===e.tag)iF(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(o){case\"forwards\":for(o=null,n=t.child;null!==n;)null!==(e=n.alternate)&&null===o$(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),iq(t,!1,o,n,a,r);break;case\"backwards\":case\"unstable_legacy-backwards\":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===o$(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}iq(t,!0,n,null,a,r);break;case\"together\":iq(t,!1,null,null,void 0,r);break;default:t.memoizedState=null}return t.child}function iV(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),l$|=t.lanes,0==(n&t.childLanes)){if(null===e)return null;else if(rV(e,t,n,!1),0==(n&t.childLanes))return null}if(null!==e&&t.child!==e.child)throw Error(l(153));if(null!==t.child){for(n=rn(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=rn(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function i$(e,t){return 0!=(e.lanes&t)||!!(null!==(e=e.dependencies)&&r$(e))}function iW(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps)iA=!0;else{if(!i$(e,n)&&0==(128&t.flags))return iA=!1,function(e,t,n){switch(t.tag){case 3:H(t,t.stateNode.containerInfo),rU(t,r0,e.memoizedState.cache),rD();break;case 27:case 5:$(t);break;case 4:H(t,t.stateNode.containerInfo);break;case 10:rU(t,t.type,t.memoizedProps.value);break;case 31:if(null!==t.memoizedState)return t.flags|=128,oU(t),null;break;case 13:var r=t.memoizedState;if(null!==r){if(null!==r.dehydrated)return oZ(t),t.flags|=128,null;if(0!=(n&t.child.childLanes))return iR(e,t,n);return oZ(t),null!==(e=iV(e,t,n))?e.sibling:null}oZ(t);break;case 19:var o=0!=(128&e.flags);if((r=0!=(n&t.childLanes))||(rV(e,t,n,!1),r=0!=(n&t.childLanes)),o){if(r)return iH(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),M(oV,oV.current),!r)return null;break;case 22:return t.lanes=0,ik(e,t,n,t.pendingProps);case 24:rU(t,r0,e.memoizedState.cache)}return iV(e,t,n)}(e,t,n);iA=0!=(131072&e.flags)}else iA=!1,rj&&0!=(1048576&t.flags)&&rx(t,rh,t.index);switch(t.lanes=0,t.tag){case 16:e:{var r=t.pendingProps;if(e=oc(t.elementType),t.type=e,\"function\"==typeof e)rt(e)?(r=ic(e,r),t.tag=1,t=iT(null,t,e,r,n)):(t.tag=0,t=iP(null,t,e,r,n));else{if(null!=e){var o=e.$$typeof;if(o===x){t.tag=11,t=iw(null,t,e,r,n);break e}if(o===_){t.tag=14,t=iC(null,t,e,r,n);break e}}throw Error(l(306,t=function e(t){if(null==t)return null;if(\"function\"==typeof t)return t.$$typeof===B?null:t.displayName||t.name||null;if(\"string\"==typeof t)return t;switch(t){case g:return\"Fragment\";case v:return\"Profiler\";case y:return\"StrictMode\";case w:return\"Suspense\";case C:return\"SuspenseList\";case E:return\"Activity\"}if(\"object\"==typeof t)switch(t.$$typeof){case m:return\"Portal\";case A:return t.displayName||\"Context\";case b:return(t._context.displayName||\"Context\")+\".Consumer\";case x:var n=t.render;return(t=t.displayName)||(t=\"\"!==(t=n.displayName||n.name||\"\")?\"ForwardRef(\"+t+\")\":\"ForwardRef\"),t;case _:return null!==(n=t.displayName||null)?n:e(t.type)||\"Memo\";case k:n=t._payload,t=t._init;try{return e(t(n))}catch(e){}}return null}(e)||e,\"\"))}}return t;case 0:return iP(e,t,t.type,t.pendingProps,n);case 1:return o=ic(r=t.type,t.pendingProps),iT(e,t,r,o,n);case 3:e:{if(H(t,t.stateNode.containerInfo),null===e)throw Error(l(387));r=t.pendingProps;var a=t.memoizedState;o=a.element,oC(e,t),oB(t,r,null,n);var i=t.memoizedState;if(rU(t,r0,r=i.cache),r!==a.cache&&rH(t,[r0],n,!0),oO(),r=i.element,a.isDehydrated)if(a={element:r,isDehydrated:!1,cache:i.cache},t.updateQueue.baseState=a,t.memoizedState=a,256&t.flags){t=iz(e,t,r,n);break e}else if(r!==o){rN(o=ru(Error(l(424)),t)),t=iz(e,t,r,n);break e}else for(rE=cB((e=9===(e=t.stateNode.containerInfo).nodeType?e.body:\"HTML\"===e.nodeName?e.ownerDocument.body:e).firstChild),rk=t,rj=!0,rS=null,rO=!0,n=oA(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling;else{if(rD(),r===o){t=iV(e,t,n);break e}ix(e,t,r,n)}t=t.child}return t;case 26:return iB(e,t),null===e?(n=cF(t.type,null,t.pendingProps,null))?t.memoizedState=n:rj||(n=t.type,e=t.pendingProps,(r=cp(F.current).createElement(n))[eD]=t,r[eL]=e,cu(r,n,e),eY(r),t.stateNode=r):t.memoizedState=cF(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return $(t),null===e&&rj&&(r=t.stateNode=cz(t.type,t.pendingProps,F.current),rk=t,rO=!0,o=rE,cC(t.type)?(cP=o,rE=cB(r.firstChild)):rE=o),ix(e,t,t.pendingProps.children,n),iB(e,t),null===e&&(t.flags|=4194304),t.child;case 5:return null===e&&rj&&((o=r=rE)&&(null!==(r=function(e,t,n,r){for(;1===e.nodeType;){if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!r&&(\"INPUT\"!==e.nodeName||\"hidden\"!==e.type))break}else if(r){if(!e[eF])switch(t){case\"meta\":if(!e.hasAttribute(\"itemprop\"))break;return e;case\"link\":if(\"stylesheet\"===(o=e.getAttribute(\"rel\"))&&e.hasAttribute(\"data-precedence\")||o!==n.rel||e.getAttribute(\"href\")!==(null==n.href||\"\"===n.href?null:n.href)||e.getAttribute(\"crossorigin\")!==(null==n.crossOrigin?null:n.crossOrigin)||e.getAttribute(\"title\")!==(null==n.title?null:n.title))break;return e;case\"style\":if(e.hasAttribute(\"data-precedence\"))break;return e;case\"script\":if(((o=e.getAttribute(\"src\"))!==(null==n.src?null:n.src)||e.getAttribute(\"type\")!==(null==n.type?null:n.type)||e.getAttribute(\"crossorigin\")!==(null==n.crossOrigin?null:n.crossOrigin))&&o&&e.hasAttribute(\"async\")&&!e.hasAttribute(\"itemprop\"))break;return e;default:return e}}else{if(\"input\"!==t||\"hidden\"!==e.type)return e;var o=null==n.name?null:\"\"+n.name;if(\"hidden\"===n.type&&e.getAttribute(\"name\")===o)return e}if(null===(e=cB(e.nextSibling)))break}return null}(r,t.type,t.pendingProps,rO))?(t.stateNode=r,rk=t,rE=cB(r.firstChild),rO=!1,o=!0):o=!1),o||rP(t)),$(t),o=t.type,a=t.pendingProps,i=null!==e?e.memoizedProps:null,r=a.children,cg(o,a)?r=null:null!==i&&cg(o,i)&&(t.flags|=32),null!==t.memoizedState&&(c9._currentValue=o=o6(e,t,o7,null,null,n)),iB(e,t),ix(e,t,r,n),t.child;case 6:return null===e&&rj&&((e=n=rE)&&(null!==(n=function(e,t,n){if(\"\"===t)return null;for(;3!==e.nodeType;)if((1!==e.nodeType||\"INPUT\"!==e.nodeName||\"hidden\"!==e.type)&&!n||null===(e=cB(e.nextSibling)))return null;return e}(n,t.pendingProps,rO))?(t.stateNode=n,rk=t,rE=null,e=!0):e=!1),e||rP(t)),null;case 13:return iR(e,t,n);case 4:return H(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=ob(t,null,r,n):ix(e,t,r,n),t.child;case 11:return iw(e,t,t.type,t.pendingProps,n);case 7:return ix(e,t,t.pendingProps,n),t.child;case 8:case 12:return ix(e,t,t.pendingProps.children,n),t.child;case 10:return r=t.pendingProps,rU(t,t.type,r.value),ix(e,t,r.children,n),t.child;case 9:return o=t.type._context,r=t.pendingProps.children,rW(t),r=r(o=rY(o)),t.flags|=1,ix(e,t,r,n),t.child;case 14:return iC(e,t,t.type,t.pendingProps,n);case 15:return i_(e,t,t.type,t.pendingProps,n);case 19:return iH(e,t,n);case 31:var s=e,c=t,u=n,d=c.pendingProps,f=0!=(128&c.flags);if(c.flags&=-129,null===s){if(rj){if(\"hidden\"===d.mode)return s=iS(c,d),c.lanes=0x20000000,iE(null,s);if(oU(c),(s=rE)?null!==(s=null!==(s=cj(s,rO))&&\"&\"===s.data?s:null)&&(c.memoizedState={dehydrated:s,treeContext:null!==ry?{id:rv,overflow:rb}:null,retryLane:0x20000000,hydrationErrors:null},(u=rl(s)).return=c,c.child=u,rk=c,rE=null):s=null,null===s)throw rP(c);return c.lanes=0x20000000,null}return iS(c,d)}var p=s.memoizedState;if(null!==p){var h=p.dehydrated;if(oU(c),f)if(256&c.flags)c.flags&=-257,c=iO(s,c,u);else if(null!==c.memoizedState)c.child=s.child,c.flags|=128,c=null;else throw Error(l(558));else if(iA||rV(s,c,u,!1),f=0!=(u&s.childLanes),iA||f){if(null!==(d=lL)&&0!==(h=eO(d,u))&&h!==p.retryLane)throw p.retryLane=h,n3(s,h),sa(d,s,h),ib;sg(),c=iO(s,c,u)}else s=p.treeContext,rE=cB(h.nextSibling),rk=c,rj=!0,rS=null,rO=!1,null!==s&&r_(c,s),c=iS(c,d),c.flags|=4096;return c}return(s=rn(s.child,{mode:d.mode,children:d.children})).ref=c.ref,c.child=s,s.return=c,s;case 22:return ik(e,t,n,t.pendingProps);case 24:return rW(t),r=rY(r0),null===e?(null===(o=oe())&&(o=lL,a=r1(),o.pooledCache=a,a.refCount++,null!==a&&(o.pooledCacheLanes|=n),o=a),t.memoizedState={parent:r,cache:o},ow(t),rU(t,r0,o)):(0!=(e.lanes&n)&&(oC(e,t),oB(t,null,null,n),oO()),o=e.memoizedState,a=t.memoizedState,o.parent!==r?(o={parent:r,cache:r},t.memoizedState=o,0===t.lanes&&(t.memoizedState=t.updateQueue.baseState=o),rU(t,r0,r)):(rU(t,r0,r=a.cache),r!==o.cache&&rH(t,[r0],n,!0))),ix(e,t,t.pendingProps.children,n),t.child;case 29:throw t.pendingProps}throw Error(l(156,t.tag))}function iY(e){e.flags|=4}function iK(e,t,n,r,o){if((t=0!=(32&e.mode))&&(t=!1),t){if(e.flags|=0x1000000,(0x13ffff40&o)===o)if(e.stateNode.complete)e.flags|=8192;else if(sp())e.flags|=8192;else throw ou=oi,oo}else e.flags&=-0x1000001}function iX(e,t){if(\"stylesheet\"!==t.type||0!=(4&t.state.loading))e.flags&=-0x1000001;else if(e.flags|=0x1000000,!c1(t))if(sp())e.flags|=8192;else throw ou=oi,oo}function iG(e,t){null!==t&&(e.flags|=4),16384&e.flags&&(t=22!==e.tag?e_():0x20000000,e.lanes|=t,lX|=t)}function iQ(e,t){if(!rj)switch(e.tailMode){case\"hidden\":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case\"collapsed\":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function iJ(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=0x3e00000&o.subtreeFlags,r|=0x3e00000&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function i0(e,t){switch(rC(t),t.tag){case 3:rF(r0),V();break;case 26:case 27:case 5:W(t);break;case 4:V();break;case 31:null!==t.memoizedState&&oH(t);break;case 13:oH(t);break;case 19:R(oV);break;case 10:rF(t.type);break;case 22:case 23:oH(t),oN(),null!==e&&R(r7);break;case 24:rF(r0)}}function i1(e,t){try{var n=t.updateQueue,r=null!==n?n.lastEffect:null;if(null!==r){var o=r.next;n=o;do{if((n.tag&e)===e){r=void 0;var a=n.create;n.inst.destroy=r=a()}n=n.next}while(n!==o)}}catch(e){sP(t,t.return,e)}}function i2(e,t,n){try{var r=t.updateQueue,o=null!==r?r.lastEffect:null;if(null!==o){var a=o.next;r=a;do{if((r.tag&e)===e){var i=r.inst,l=i.destroy;if(void 0!==l){i.destroy=void 0,o=t;try{l()}catch(e){sP(o,n,e)}}}r=r.next}while(r!==a)}}catch(e){sP(t,t.return,e)}}function i4(e){var t=e.updateQueue;if(null!==t){var n=e.stateNode;try{oI(t,n)}catch(t){sP(e,e.return,t)}}}function i5(e,t,n){n.props=ic(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){sP(e,t,n)}}function i3(e,t){try{var n=e.ref;if(null!==n){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;default:r=e.stateNode}\"function\"==typeof n?e.refCleanup=n(r):n.current=r}}catch(n){sP(e,t,n)}}function i6(e,t){var n=e.ref,r=e.refCleanup;if(null!==n)if(\"function\"==typeof r)try{r()}catch(n){sP(e,t,n)}finally{e.refCleanup=null,null!=(e=e.alternate)&&(e.refCleanup=null)}else if(\"function\"==typeof n)try{n(null)}catch(n){sP(e,t,n)}else n.current=null}function i9(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{switch(t){case\"button\":case\"input\":case\"select\":case\"textarea\":n.autoFocus&&r.focus();break;case\"img\":n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){sP(e,e.return,t)}}function i8(e,t,n){try{var r=e.stateNode;(function(e,t,n,r){switch(t){case\"div\":case\"span\":case\"svg\":case\"path\":case\"a\":case\"g\":case\"p\":case\"li\":break;case\"input\":var o=null,a=null,i=null,s=null,c=null,u=null,d=null;for(h in n){var f=n[h];if(n.hasOwnProperty(h)&&null!=f)switch(h){case\"checked\":case\"value\":break;case\"defaultValue\":c=f;default:r.hasOwnProperty(h)||cs(e,t,h,null,r,f)}}for(var p in r){var h=r[p];if(f=n[p],r.hasOwnProperty(p)&&(null!=h||null!=f))switch(p){case\"type\":a=h;break;case\"name\":o=h;break;case\"checked\":u=h;break;case\"defaultChecked\":d=h;break;case\"value\":i=h;break;case\"defaultValue\":s=h;break;case\"children\":case\"dangerouslySetInnerHTML\":if(null!=h)throw Error(l(137,t));break;default:h!==f&&cs(e,t,p,h,r,f)}}tn(e,i,s,c,u,d,a,o);return;case\"select\":for(a in h=i=s=p=null,n)if(c=n[a],n.hasOwnProperty(a)&&null!=c)switch(a){case\"value\":break;case\"multiple\":h=c;default:r.hasOwnProperty(a)||cs(e,t,a,null,r,c)}for(o in r)if(a=r[o],c=n[o],r.hasOwnProperty(o)&&(null!=a||null!=c))switch(o){case\"value\":p=a;break;case\"defaultValue\":s=a;break;case\"multiple\":i=a;default:a!==c&&cs(e,t,o,a,r,c)}t=s,n=i,r=h,null!=p?ta(e,!!n,p,!1):!!r!=!!n&&(null!=t?ta(e,!!n,t,!0):ta(e,!!n,n?[]:\"\",!1));return;case\"textarea\":for(s in h=p=null,n)if(o=n[s],n.hasOwnProperty(s)&&null!=o&&!r.hasOwnProperty(s))switch(s){case\"value\":case\"children\":break;default:cs(e,t,s,null,r,o)}for(i in r)if(o=r[i],a=n[i],r.hasOwnProperty(i)&&(null!=o||null!=a))switch(i){case\"value\":p=o;break;case\"defaultValue\":h=o;break;case\"children\":break;case\"dangerouslySetInnerHTML\":if(null!=o)throw Error(l(91));break;default:o!==a&&cs(e,t,i,o,r,a)}ti(e,p,h);return;case\"option\":for(var m in n)p=n[m],n.hasOwnProperty(m)&&null!=p&&!r.hasOwnProperty(m)&&(\"selected\"===m?e.selected=!1:cs(e,t,m,null,r,p));for(c in r)p=r[c],h=n[c],r.hasOwnProperty(c)&&p!==h&&(null!=p||null!=h)&&(\"selected\"===c?e.selected=p&&\"function\"!=typeof p&&\"symbol\"!=typeof p:cs(e,t,c,p,r,h));return;case\"img\":case\"link\":case\"area\":case\"base\":case\"br\":case\"col\":case\"embed\":case\"hr\":case\"keygen\":case\"meta\":case\"param\":case\"source\":case\"track\":case\"wbr\":case\"menuitem\":for(var g in n)p=n[g],n.hasOwnProperty(g)&&null!=p&&!r.hasOwnProperty(g)&&cs(e,t,g,null,r,p);for(u in r)if(p=r[u],h=n[u],r.hasOwnProperty(u)&&p!==h&&(null!=p||null!=h))switch(u){case\"children\":case\"dangerouslySetInnerHTML\":if(null!=p)throw Error(l(137,t));break;default:cs(e,t,u,p,r,h)}return;default:if(tf(t)){for(var y in n)p=n[y],n.hasOwnProperty(y)&&void 0!==p&&!r.hasOwnProperty(y)&&cc(e,t,y,void 0,r,p);for(d in r)p=r[d],h=n[d],r.hasOwnProperty(d)&&p!==h&&(void 0!==p||void 0!==h)&&cc(e,t,d,p,r,h);return}}for(var v in n)p=n[v],n.hasOwnProperty(v)&&null!=p&&!r.hasOwnProperty(v)&&cs(e,t,v,null,r,p);for(f in r)p=r[f],h=n[f],r.hasOwnProperty(f)&&p!==h&&(null!=p||null!=h)&&cs(e,t,f,p,r,h)})(r,e.type,n,t),r[eL]=t}catch(t){sP(e,e.return,t)}}function i7(e){return 5===e.tag||3===e.tag||26===e.tag||27===e.tag&&cC(e.type)||4===e.tag}function le(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||i7(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(27===e.tag&&cC(e.type)||2&e.flags||null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function lt(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&(27===r&&cC(e.type)&&(n=e.stateNode),null!==(e=e.child)))for(lt(e,t,n),e=e.sibling;null!==e;)lt(e,t,n),e=e.sibling}function ln(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,o=t.attributes;o.length;)t.removeAttributeNode(o[0]);cu(t,r,n),t[eD]=e,t[eL]=n}catch(t){sP(e,e.return,t)}}var lr=!1,lo=!1,la=!1,li=\"function\"==typeof WeakSet?WeakSet:Set,ll=null;function ls(e,t,n){var r=n.flags;switch(n.tag){case 0:case 11:case 15:lA(e,n),4&r&&i1(5,n);break;case 1:if(lA(e,n),4&r)if(e=n.stateNode,null===t)try{e.componentDidMount()}catch(e){sP(n,n.return,e)}else{var o=ic(n.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(o,t,e.__reactInternalSnapshotBeforeUpdate)}catch(e){sP(n,n.return,e)}}64&r&&i4(n),512&r&&i3(n,n.return);break;case 3:if(lA(e,n),64&r&&null!==(e=n.updateQueue)){if(t=null,null!==n.child)switch(n.child.tag){case 27:case 5:case 1:t=n.child.stateNode}try{oI(e,t)}catch(e){sP(n,n.return,e)}}break;case 27:null===t&&4&r&&ln(n);case 26:case 5:lA(e,n),null===t&&4&r&&i9(n),512&r&&i3(n,n.return);break;case 12:default:lA(e,n);break;case 31:lA(e,n),4&r&&lp(e,n);break;case 13:lA(e,n),4&r&&lh(e,n),64&r&&null!==(e=n.memoizedState)&&null!==(e=e.dehydrated)&&function(e,t){var n=e.ownerDocument;if(\"$~\"===e.data)e._reactRetry=t;else if(\"$?\"!==e.data||\"loading\"!==n.readyState)t();else{var r=function(){t(),n.removeEventListener(\"DOMContentLoaded\",r)};n.addEventListener(\"DOMContentLoaded\",r),e._reactRetry=r}}(e,n=sD.bind(null,n));break;case 22:if(!(r=null!==n.memoizedState||lr)){t=null!==t&&null!==t.memoizedState||lo,o=lr;var a=lo;lr=r,(lo=t)&&!a?function e(t,n,r){for(r=r&&0!=(8772&n.subtreeFlags),n=n.child;null!==n;){var o=n.alternate,a=t,i=n,l=i.flags;switch(i.tag){case 0:case 11:case 15:e(a,i,r),i1(4,i);break;case 1:if(e(a,i,r),\"function\"==typeof(a=(o=i).stateNode).componentDidMount)try{a.componentDidMount()}catch(e){sP(o,o.return,e)}if(null!==(a=(o=i).updateQueue)){var s=o.stateNode;try{var c=a.shared.hiddenCallbacks;if(null!==c)for(a.shared.hiddenCallbacks=null,a=0;a<c.length;a++)oP(c[a],s)}catch(e){sP(o,o.return,e)}}r&&64&l&&i4(i),i3(i,i.return);break;case 27:ln(i);case 26:case 5:e(a,i,r),r&&null===o&&4&l&&i9(i),i3(i,i.return);break;case 12:default:e(a,i,r);break;case 31:e(a,i,r),r&&4&l&&lp(a,i);break;case 13:e(a,i,r),r&&4&l&&lh(a,i);break;case 22:null===i.memoizedState&&e(a,i,r),i3(i,i.return);case 30:}n=n.sibling}}(e,n,0!=(8772&n.subtreeFlags)):lA(e,n),lr=o,lo=a}case 30:}}var lc=null,lu=!1;function ld(e,t,n){for(n=n.child;null!==n;)lf(e,t,n),n=n.sibling}function lf(e,t,n){if(ep&&\"function\"==typeof ep.onCommitFiberUnmount)try{ep.onCommitFiberUnmount(ef,n)}catch(e){}switch(n.tag){case 26:lo||i6(n,t),ld(e,t,n),n.memoizedState?n.memoizedState.count--:n.stateNode&&(n=n.stateNode).parentNode.removeChild(n);break;case 27:lo||i6(n,t);var r=lc,o=lu;cC(n.type)&&(lc=n.stateNode,lu=!1),ld(e,t,n),cD(n.stateNode),lc=r,lu=o;break;case 5:lo||i6(n,t);case 6:if(r=lc,o=lu,lc=null,ld(e,t,n),lc=r,lu=o,null!==lc)if(lu)try{(9===lc.nodeType?lc.body:\"HTML\"===lc.nodeName?lc.ownerDocument.body:lc).removeChild(n.stateNode)}catch(e){sP(n,t,e)}else try{lc.removeChild(n.stateNode)}catch(e){sP(n,t,e)}break;case 18:null!==lc&&(lu?(c_(9===(e=lc).nodeType?e.body:\"HTML\"===e.nodeName?e.ownerDocument.body:e,n.stateNode),uO(e)):c_(lc,n.stateNode));break;case 4:r=lc,o=lu,lc=n.stateNode.containerInfo,lu=!0,ld(e,t,n),lc=r,lu=o;break;case 0:case 11:case 14:case 15:lo||i2(2,n,t),lo||i2(4,n,t),ld(e,t,n);break;case 1:lo||(i6(n,t),\"function\"==typeof(r=n.stateNode).componentWillUnmount&&i5(n,t,r)),ld(e,t,n);break;case 21:default:ld(e,t,n);break;case 22:lo=(r=lo)||null!==n.memoizedState,ld(e,t,n),lo=r}}function lp(e,t){if(null===t.memoizedState&&null!==(e=t.alternate)&&null!==(e=e.memoizedState)){e=e.dehydrated;try{uO(e)}catch(e){sP(t,t.return,e)}}}function lh(e,t){if(null===t.memoizedState&&null!==(e=t.alternate)&&null!==(e=e.memoizedState)&&null!==(e=e.dehydrated))try{uO(e)}catch(e){sP(t,t.return,e)}}function lm(e,t){var n=function(e){switch(e.tag){case 31:case 13:case 19:var t=e.stateNode;return null===t&&(t=e.stateNode=new li),t;case 22:return null===(t=(e=e.stateNode)._retryCache)&&(t=e._retryCache=new li),t;default:throw Error(l(435,e.tag))}}(e);t.forEach(function(t){if(!n.has(t)){n.add(t);var r=sL.bind(null,e,t);t.then(r,r)}})}function lg(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r],a=e,i=t,s=i;e:for(;null!==s;){switch(s.tag){case 27:if(cC(s.type)){lc=s.stateNode,lu=!1;break e}break;case 5:lc=s.stateNode,lu=!1;break e;case 3:case 4:lc=s.stateNode.containerInfo,lu=!0;break e}s=s.return}if(null===lc)throw Error(l(160));lf(a,i,o),lc=null,lu=!1,null!==(a=o.alternate)&&(a.return=null),o.return=null}if(13878&t.subtreeFlags)for(t=t.child;null!==t;)lv(t,e),t=t.sibling}var ly=null;function lv(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:lg(t,e),lb(e),4&r&&(i2(3,e,e.return),i1(3,e),i2(5,e,e.return));break;case 1:lg(t,e),lb(e),512&r&&(lo||null===n||i6(n,n.return)),64&r&&lr&&null!==(e=e.updateQueue)&&null!==(r=e.callbacks)&&(n=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=null===n?r:n.concat(r));break;case 26:var o=ly;if(lg(t,e),lb(e),512&r&&(lo||null===n||i6(n,n.return)),4&r){var a=null!==n?n.memoizedState:null;if(r=e.memoizedState,null===n)if(null===r)if(null===e.stateNode){e:{r=e.type,n=e.memoizedProps,o=o.ownerDocument||o;t:switch(r){case\"title\":(!(a=o.getElementsByTagName(\"title\")[0])||a[eF]||a[eD]||\"http://www.w3.org/2000/svg\"===a.namespaceURI||a.hasAttribute(\"itemprop\"))&&(a=o.createElement(r),o.head.insertBefore(a,o.querySelector(\"head > title\"))),cu(a,r,n),a[eD]=e,eY(a),r=a;break e;case\"link\":var i=cJ(\"link\",\"href\",o).get(r+(n.href||\"\"));if(i){for(var s=0;s<i.length;s++)if((a=i[s]).getAttribute(\"href\")===(null==n.href||\"\"===n.href?null:n.href)&&a.getAttribute(\"rel\")===(null==n.rel?null:n.rel)&&a.getAttribute(\"title\")===(null==n.title?null:n.title)&&a.getAttribute(\"crossorigin\")===(null==n.crossOrigin?null:n.crossOrigin)){i.splice(s,1);break t}}cu(a=o.createElement(r),r,n),o.head.appendChild(a);break;case\"meta\":if(i=cJ(\"meta\",\"content\",o).get(r+(n.content||\"\"))){for(s=0;s<i.length;s++)if((a=i[s]).getAttribute(\"content\")===(null==n.content?null:\"\"+n.content)&&a.getAttribute(\"name\")===(null==n.name?null:n.name)&&a.getAttribute(\"property\")===(null==n.property?null:n.property)&&a.getAttribute(\"http-equiv\")===(null==n.httpEquiv?null:n.httpEquiv)&&a.getAttribute(\"charset\")===(null==n.charSet?null:n.charSet)){i.splice(s,1);break t}}cu(a=o.createElement(r),r,n),o.head.appendChild(a);break;default:throw Error(l(468,r))}a[eD]=e,eY(a),r=a}e.stateNode=r}else c0(o,e.type,e.stateNode);else e.stateNode=cY(o,r,e.memoizedProps);else a!==r?(null===a?null!==n.stateNode&&(n=n.stateNode).parentNode.removeChild(n):a.count--,null===r?c0(o,e.type,e.stateNode):cY(o,r,e.memoizedProps)):null===r&&null!==e.stateNode&&i8(e,e.memoizedProps,n.memoizedProps)}break;case 27:lg(t,e),lb(e),512&r&&(lo||null===n||i6(n,n.return)),null!==n&&4&r&&i8(e,e.memoizedProps,n.memoizedProps);break;case 5:if(lg(t,e),lb(e),512&r&&(lo||null===n||i6(n,n.return)),32&e.flags){o=e.stateNode;try{ts(o,\"\")}catch(t){sP(e,e.return,t)}}4&r&&null!=e.stateNode&&(o=e.memoizedProps,i8(e,o,null!==n?n.memoizedProps:o)),1024&r&&(la=!0);break;case 6:if(lg(t,e),lb(e),4&r){if(null===e.stateNode)throw Error(l(162));r=e.memoizedProps,n=e.stateNode;try{n.nodeValue=r}catch(t){sP(e,e.return,t)}}break;case 3:if(cQ=null,o=ly,ly=cR(t.containerInfo),lg(t,e),ly=o,lb(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{uO(t.containerInfo)}catch(t){sP(e,e.return,t)}la&&(la=!1,function e(t){if(1024&t.subtreeFlags)for(t=t.child;null!==t;){var n=t;e(n),5===n.tag&&1024&n.flags&&n.stateNode.reset(),t=t.sibling}}(e));break;case 4:r=ly,ly=cR(e.stateNode.containerInfo),lg(t,e),lb(e),ly=r;break;case 12:default:lg(t,e),lb(e);break;case 31:case 19:lg(t,e),lb(e),4&r&&null!==(r=e.updateQueue)&&(e.updateQueue=null,lm(e,r));break;case 13:lg(t,e),lb(e),8192&e.child.flags&&null!==e.memoizedState!=(null!==n&&null!==n.memoizedState)&&(l0=er()),4&r&&null!==(r=e.updateQueue)&&(e.updateQueue=null,lm(e,r));break;case 22:o=null!==e.memoizedState;var c=null!==n&&null!==n.memoizedState,u=lr,d=lo;if(lr=u||o,lo=d||c,lg(t,e),lo=d,lr=u,lb(e),8192&r)e:for((t=e.stateNode)._visibility=o?-2&t._visibility:1|t._visibility,o&&(null===n||c||lr||lo||function e(t){for(t=t.child;null!==t;){var n=t;switch(n.tag){case 0:case 11:case 14:case 15:i2(4,n,n.return),e(n);break;case 1:i6(n,n.return);var r=n.stateNode;\"function\"==typeof r.componentWillUnmount&&i5(n,n.return,r),e(n);break;case 27:cD(n.stateNode);case 26:case 5:i6(n,n.return),e(n);break;case 22:null===n.memoizedState&&e(n);break;default:e(n)}t=t.sibling}}(e)),n=null,t=e;;){if(5===t.tag||26===t.tag){if(null===n){c=n=t;try{if(a=c.stateNode,o)i=a.style,\"function\"==typeof i.setProperty?i.setProperty(\"display\",\"none\",\"important\"):i.display=\"none\";else{s=c.stateNode;var f=c.memoizedProps.style,p=null!=f&&f.hasOwnProperty(\"display\")?f.display:null;s.style.display=null==p||\"boolean\"==typeof p?\"\":(\"\"+p).trim()}}catch(e){sP(c,c.return,e)}}}else if(6===t.tag){if(null===n){c=t;try{c.stateNode.nodeValue=o?\"\":c.memoizedProps}catch(e){sP(c,c.return,e)}}}else if(18===t.tag){if(null===n){c=t;try{var h=c.stateNode;o?ck(h,!0):ck(c.stateNode,!1)}catch(e){sP(c,c.return,e)}}}else if((22!==t.tag&&23!==t.tag||null===t.memoizedState||t===e)&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)break e;n===t&&(n=null),t=t.return}n===t&&(n=null),t.sibling.return=t.return,t=t.sibling}4&r&&null!==(r=e.updateQueue)&&null!==(n=r.retryQueue)&&(r.retryQueue=null,lm(e,n));case 30:case 21:}}function lb(e){var t=e.flags;if(2&t){try{for(var n,r=e.return;null!==r;){if(i7(r)){n=r;break}r=r.return}if(null==n)throw Error(l(160));switch(n.tag){case 27:var o=n.stateNode,a=le(e);lt(e,a,o);break;case 5:var i=n.stateNode;32&n.flags&&(ts(i,\"\"),n.flags&=-33);var s=le(e);lt(e,s,i);break;case 3:case 4:var c=n.stateNode.containerInfo,u=le(e);!function e(t,n,r){var o=t.tag;if(5===o||6===o)t=t.stateNode,n?(9===r.nodeType?r.body:\"HTML\"===r.nodeName?r.ownerDocument.body:r).insertBefore(t,n):((n=9===r.nodeType?r.body:\"HTML\"===r.nodeName?r.ownerDocument.body:r).appendChild(t),null!=(r=r._reactRootContainer)||null!==n.onclick||(n.onclick=tg));else if(4!==o&&(27===o&&cC(t.type)&&(r=t.stateNode,n=null),null!==(t=t.child)))for(e(t,n,r),t=t.sibling;null!==t;)e(t,n,r),t=t.sibling}(e,u,c);break;default:throw Error(l(161))}}catch(t){sP(e,e.return,t)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function lA(e,t){if(8772&t.subtreeFlags)for(t=t.child;null!==t;)ls(e,t.alternate,t),t=t.sibling}function lx(e,t){var n=null;null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),e=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(e=t.memoizedState.cachePool.pool),e!==n&&(null!=e&&e.refCount++,null!=n&&r2(n))}function lw(e,t){e=null,null!==t.alternate&&(e=t.alternate.memoizedState.cache),(t=t.memoizedState.cache)!==e&&(t.refCount++,null!=e&&r2(e))}function lC(e,t,n,r){if(10256&t.subtreeFlags)for(t=t.child;null!==t;)l_(e,t,n,r),t=t.sibling}function l_(e,t,n,r){var o=t.flags;switch(t.tag){case 0:case 11:case 15:lC(e,t,n,r),2048&o&&i1(9,t);break;case 1:case 31:case 13:default:lC(e,t,n,r);break;case 3:lC(e,t,n,r),2048&o&&(e=null,null!==t.alternate&&(e=t.alternate.memoizedState.cache),(t=t.memoizedState.cache)!==e&&(t.refCount++,null!=e&&r2(e)));break;case 12:if(2048&o){lC(e,t,n,r),e=t.stateNode;try{var a=t.memoizedProps,i=a.id,l=a.onPostCommit;\"function\"==typeof l&&l(i,null===t.alternate?\"mount\":\"update\",e.passiveEffectDuration,-0)}catch(e){sP(t,t.return,e)}}else lC(e,t,n,r);break;case 23:break;case 22:a=t.stateNode,i=t.alternate,null!==t.memoizedState?2&a._visibility?lC(e,t,n,r):lk(e,t):2&a._visibility?lC(e,t,n,r):(a._visibility|=2,function e(t,n,r,o,a){for(a=a&&0!=(10256&n.subtreeFlags),n=n.child;null!==n;){var i=n,l=i.flags;switch(i.tag){case 0:case 11:case 15:e(t,i,r,o,a),i1(8,i);break;case 23:break;case 22:var s=i.stateNode;null!==i.memoizedState?2&s._visibility?e(t,i,r,o,a):lk(t,i):(s._visibility|=2,e(t,i,r,o,a)),a&&2048&l&&lx(i.alternate,i);break;case 24:e(t,i,r,o,a),a&&2048&l&&lw(i.alternate,i);break;default:e(t,i,r,o,a)}n=n.sibling}}(e,t,n,r,0!=(10256&t.subtreeFlags))),2048&o&&lx(i,t);break;case 24:lC(e,t,n,r),2048&o&&lw(t.alternate,t)}}function lk(e,t){if(10256&t.subtreeFlags)for(t=t.child;null!==t;){var n=t,r=n.flags;switch(n.tag){case 22:lk(e,n),2048&r&&lx(n.alternate,n);break;case 24:lk(e,n),2048&r&&lw(n.alternate,n);break;default:lk(e,n)}t=t.sibling}}var lE=8192;function lj(e){if(e.subtreeFlags&lE)for(e=e.child;null!==e;)lS(e),e=e.sibling}function lS(e){switch(e.tag){case 26:lj(e),e.flags&lE&&null!==e.memoizedState&&function(e,t,n){if(null===c2)throw Error(l(475));var r=c2;if(\"stylesheet\"===t.type&&(\"string\"!=typeof n.media||!1!==matchMedia(n.media).matches)&&0==(4&t.state.loading)){if(null===t.instance){var o=cq(n.href),a=e.querySelector(cH(o));if(a){null!==(e=a._p)&&\"object\"==typeof e&&\"function\"==typeof e.then&&(r.count++,r=c4.bind(r),e.then(r,r)),t.state.loading|=4,t.instance=a,eY(a);return}a=e.ownerDocument||e,n=cV(n),(o=cL.get(o))&&cX(n,o),eY(a=a.createElement(\"link\"));var i=a;i._p=new Promise(function(e,t){i.onload=e,i.onerror=t}),cu(a,\"link\",n),t.instance=a}null===r.stylesheets&&(r.stylesheets=new Map),r.stylesheets.set(t,e),(e=t.state.preload)&&0==(3&t.state.loading)&&(r.count++,t=c4.bind(r),e.addEventListener(\"load\",t),e.addEventListener(\"error\",t))}}(ly,e.memoizedState,e.memoizedProps);break;case 5:default:lj(e);break;case 3:case 4:var t=ly;ly=cR(e.stateNode.containerInfo),lj(e),ly=t;break;case 22:null===e.memoizedState&&(null!==(t=e.alternate)&&null!==t.memoizedState?(t=lE,lE=0x1000000,lj(e),lE=t):lj(e))}}function lO(e){var t=e.alternate;if(null!==t&&null!==(e=t.child)){t.child=null;do t=e.sibling,e.sibling=null,e=t;while(null!==e)}}function lB(e){var t=e.deletions;if(0!=(16&e.flags)){if(null!==t)for(var n=0;n<t.length;n++){var r=t[n];ll=r,lI(r,e)}lO(e)}if(10256&e.subtreeFlags)for(e=e.child;null!==e;)lP(e),e=e.sibling}function lP(e){switch(e.tag){case 0:case 11:case 15:lB(e),2048&e.flags&&i2(9,e,e.return);break;case 3:case 12:default:lB(e);break;case 22:var t=e.stateNode;null!==e.memoizedState&&2&t._visibility&&(null===e.return||13!==e.return.tag)?(t._visibility&=-3,function e(t){var n=t.deletions;if(0!=(16&t.flags)){if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];ll=o,lI(o,t)}lO(t)}for(t=t.child;null!==t;){switch((n=t).tag){case 0:case 11:case 15:i2(8,n,n.return),e(n);break;case 22:2&(r=n.stateNode)._visibility&&(r._visibility&=-3,e(n));break;default:e(n)}t=t.sibling}}(e)):lB(e)}}function lI(e,t){for(;null!==ll;){var n=ll;switch(n.tag){case 0:case 11:case 15:i2(8,n,t);break;case 23:case 22:if(null!==n.memoizedState&&null!==n.memoizedState.cachePool){var r=n.memoizedState.cachePool.pool;null!=r&&r.refCount++}break;case 24:r2(n.memoizedState.cache)}if(null!==(r=n.child))r.return=n,ll=r;else for(n=e;null!==ll;){var o=(r=ll).sibling,a=r.return;if(!function e(t){var n=t.alternate;null!==n&&(t.alternate=null,e(n)),t.child=null,t.deletions=null,t.sibling=null,5===t.tag&&null!==(n=t.stateNode)&&eq(n),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}(r),r===n){ll=null;break}if(null!==o){o.return=a,ll=o;break}ll=a}}}var lT={getCacheForType:function(e){var t=rY(r0),n=t.data.get(e);return void 0===n&&(n=e(),t.data.set(e,n)),n},cacheSignal:function(){return rY(r0).controller.signal}},lz=\"function\"==typeof WeakMap?WeakMap:Map,lD=0,lL=null,lN=null,lR=0,lM=0,lZ=null,lU=!1,lF=!1,lq=!1,lH=0,lV=0,l$=0,lW=0,lY=0,lK=0,lX=0,lG=null,lQ=null,lJ=!1,l0=0,l1=1/0,l2=null,l4=null,l5=0,l3=null,l6=null,l9=0,l8=0,l7=null,se=null,st=0,sn=null;function sr(){return 0!=(2&lD)&&0!==lR?lR&-lR:null!==I.T?sX():eI()}function so(){0===lK&&(lK=0==(0x20000000&lR)||rj?eC():0x20000000);var e=oR.current;return null!==e&&(e.flags|=32),lK}function sa(e,t,n){(e===lL&&(2===lM||9===lM)||null!==e.cancelPendingCommit)&&(sd(e,0),ss(e,lR,lK,!1)),eE(e,n),(0==(2&lD)||e!==lL)&&(e===lL&&(0==(2&lD)&&(lW|=n),4===lV&&ss(e,lR,lK,!1)),sq(e))}function si(e,t,n){if(0!=(6&lD))throw Error(l(327));for(var r=!n&&0==(124&t)&&0==(t&e.expiredLanes)||ew(e,t),o=r?function(e,t){var n=lD;lD|=2;var r=sh(),o=sm();lL!==e||lR!==t?(l2=null,l1=er()+500,sd(e,t)):lF=ew(e,t);e:for(;;)try{if(0!==lM&&null!==lN){t=lN;var a=lZ;t:switch(lM){case 1:lM=0,lZ=null,sA(e,t,a,1);break;case 2:case 9:if(ol(a)){lM=0,lZ=null,sb(t);break}t=function(){2!==lM&&9!==lM||lL!==e||(lM=7),sq(e)},a.then(t,t);break e;case 3:lM=7;break e;case 4:lM=5;break e;case 7:ol(a)?(lM=0,lZ=null,sb(t)):(lM=0,lZ=null,sA(e,t,a,7));break;case 5:var i=null;switch(lN.tag){case 26:i=lN.memoizedState;case 5:case 27:var s=lN;if(i?c1(i):s.stateNode.complete){lM=0,lZ=null;var c=s.sibling;if(null!==c)lN=c;else{var u=s.return;null!==u?(lN=u,sx(u)):lN=null}break t}}lM=0,lZ=null,sA(e,t,a,5);break;case 6:lM=0,lZ=null,sA(e,t,a,6);break;case 8:su(),lV=6;break e;default:throw Error(l(462))}}for(;null!==lN&&!et();)sv(lN);break}catch(t){sf(e,t)}return(rZ=rM=null,I.H=r,I.A=o,lD=n,null!==lN)?0:(lL=null,lR=0,n2(),lV)}(e,t):sy(e,t,!0),a=r;;){if(0===o)lF&&!r&&ss(e,t,0,!1);else{if(n=e.current.alternate,a&&!function(e){for(var t=e;;){var n=t.tag;if((0===n||11===n||15===n)&&16384&t.flags&&null!==(n=t.updateQueue)&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!nk(a(),o))return!1}catch(e){return!1}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(n)){o=sy(e,t,!1),a=!1;continue}if(2===o){if(a=t,e.errorRecoveryDisabledLanes&a)var i=0;else i=0!=(i=-0x20000001&e.pendingLanes)?i:0x20000000&i?0x20000000:0;if(0!==i){t=i;e:{o=lG;var s=e.current.memoizedState.isDehydrated;if(s&&(sd(e,i).flags|=256),2!==(i=sy(e,i,!1))){if(lq&&!s){e.errorRecoveryDisabledLanes|=a,lW|=a,o=4;break e}a=lQ,lQ=o,null!==a&&(null===lQ?lQ=a:lQ.push.apply(lQ,a))}o=i}if(a=!1,2!==o)continue}}if(1===o){sd(e,0),ss(e,t,0,!0);break}e:{switch(r=e,a=o){case 0:case 1:throw Error(l(345));case 4:if((4194048&t)!==t)break;case 6:ss(r,t,lK,!lU);break e;case 2:lQ=null;break;case 3:case 5:break;default:throw Error(l(329))}if((0x3c00000&t)===t&&10<(o=l0+300-er())){if(ss(r,t,lK,!lU),0!==ex(r,0,!0))break e;r.timeoutHandle=cv(sl.bind(null,r,n,lQ,l2,lJ,t,lK,lW,lX,lU,a,2,-0,0),o);break e}sl(r,n,lQ,l2,lJ,t,lK,lW,lX,lU,a,0,-0,0)}}break}sq(e)}function sl(e,t,n,r,o,a,i,s,c,u,d,f,p,h){if(e.timeoutHandle=-1,(8192&(f=t.subtreeFlags)||0x1002000==(0x1002000&f))&&(c2={stylesheets:null,count:0,unsuspend:tg},lS(t),null!==(f=function(){if(null===c2)throw Error(l(475));var e=c2;return e.stylesheets&&0===e.count&&c3(e,e.stylesheets),0<e.count?function(t){var n=setTimeout(function(){if(e.stylesheets&&c3(e,e.stylesheets),e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}},6e4);return e.unsuspend=t,function(){e.unsuspend=null,clearTimeout(n)}}:null}()))){e.cancelPendingCommit=f(sC.bind(null,e,t,a,n,r,o,i,s,c,d,1,p,h)),ss(e,a,i,!u);return}sC(e,t,a,n,r,o,i,s,c)}function ss(e,t,n,r){t&=~lY,t&=~lW,e.suspendedLanes|=t,e.pingedLanes&=~t,r&&(e.warmLanes|=t),r=e.expirationTimes;for(var o=t;0<o;){var a=31-em(o),i=1<<a;r[a]=-1,o&=~i}0!==n&&ej(e,n,t)}function sc(){return 0!=(6&lD)||(sH(0,!1),!1)}function su(){if(null!==lN){if(0===lM)var e=lN.return;else e=lN,rZ=rM=null,an(e),op=null,oh=0,e=lN;for(;null!==e;)i0(e.alternate,e),e=e.return;lN=null}}function sd(e,t){var n=e.timeoutHandle;-1!==n&&(e.timeoutHandle=-1,cb(n)),null!==(n=e.cancelPendingCommit)&&(e.cancelPendingCommit=null,n()),su(),lL=e,lN=n=rn(e.current,null),lR=t,lM=0,lZ=null,lU=!1,lF=ew(e,t),lq=!1,lX=lK=lY=lW=l$=lV=0,lQ=lG=null,lJ=!1,0!=(8&t)&&(t|=32&t);var r=e.entangledLanes;if(0!==r)for(e=e.entanglements,r&=t;0<r;){var o=31-em(r),a=1<<o;t|=e[o],r&=~a}return lH=t,n2(),n}function sf(e,t){oY=null,I.H=ie,t===or||t===oa?(t=od(),lM=3):t===oo?(t=od(),lM=4):lM=t===ib?8:null!==t&&\"object\"==typeof t&&\"function\"==typeof t.then?6:1,lZ=t,null===lN&&(lV=1,ih(e,ru(t,e.current)))}function sp(){var e=oR.current;return null===e||((4194048&lR)===lR?null===oM:((0x3c00000&lR)===lR||0!=(0x20000000&lR))&&e===oM)}function sh(){var e=I.H;return I.H=ie,null===e?ie:e}function sm(){var e=I.A;return I.A=lT,e}function sg(){lV=4,lU||(4194048&lR)!==lR&&null!==oR.current||(lF=!0),0==(0x7ffffff&l$)&&0==(0x7ffffff&lW)||null===lL||ss(lL,lR,lK,!1)}function sy(e,t,n){var r=lD;lD|=2;var o=sh(),a=sm();(lL!==e||lR!==t)&&(l2=null,sd(e,t)),t=!1;var i=lV;e:for(;;)try{if(0!==lM&&null!==lN){var l=lN,s=lZ;switch(lM){case 8:su(),i=6;break e;case 3:case 2:case 9:case 6:null===oR.current&&(t=!0);var c=lM;if(lM=0,lZ=null,sA(e,l,s,c),n&&lF){i=0;break e}break;default:c=lM,lM=0,lZ=null,sA(e,l,s,c)}}(function(){for(;null!==lN;)sv(lN)})(),i=lV;break}catch(t){sf(e,t)}return t&&e.shellSuspendCounter++,rZ=rM=null,lD=r,I.H=o,I.A=a,null===lN&&(lL=null,lR=0,n2()),i}function sv(e){var t=iW(e.alternate,e,lH);e.memoizedProps=e.pendingProps,null===t?sx(e):lN=t}function sb(e){var t=e,n=t.alternate;switch(t.tag){case 15:case 0:t=iI(n,t,t.pendingProps,t.type,void 0,lR);break;case 11:t=iI(n,t,t.pendingProps,t.type.render,t.ref,lR);break;case 5:an(t);default:i0(n,t),t=iW(n,t=lN=rr(t,lH),lH)}e.memoizedProps=e.pendingProps,null===t?sx(e):lN=t}function sA(e,t,n,r){rZ=rM=null,an(t),op=null,oh=0;var o=t.return;try{if(function(e,t,n,r,o){if(n.flags|=32768,null!==r&&\"object\"==typeof r&&\"function\"==typeof r.then){if(null!==(t=n.alternate)&&rV(t,n,o,!0),null!==(n=oR.current)){switch(n.tag){case 31:case 13:return null===oM?sg():null===n.alternate&&0===lV&&(lV=3),n.flags&=-257,n.flags|=65536,n.lanes=o,r===oi?n.flags|=16384:(null===(t=n.updateQueue)?n.updateQueue=new Set([r]):t.add(r),sI(e,r,o)),!1;case 22:return n.flags|=65536,r===oi?n.flags|=16384:(null===(t=n.updateQueue)?(t={transitions:null,markerInstances:null,retryQueue:new Set([r])},n.updateQueue=t):null===(n=t.retryQueue)?t.retryQueue=new Set([r]):n.add(r),sI(e,r,o)),!1}throw Error(l(435,n.tag))}return sI(e,r,o),sg(),!1}if(rj)return null!==(t=oR.current)?(0==(65536&t.flags)&&(t.flags|=256),t.flags|=65536,t.lanes=o,r!==rB&&rN(ru(e=Error(l(422),{cause:r}),n))):(r!==rB&&rN(ru(t=Error(l(423),{cause:r}),n)),e=e.current.alternate,e.flags|=65536,o&=-o,e.lanes|=o,r=ru(r,n),o=ig(e.stateNode,r,o),oj(e,o),4!==lV&&(lV=2)),!1;var a=Error(l(520),{cause:r});if(a=ru(a,n),null===lG?lG=[a]:lG.push(a),4!==lV&&(lV=2),null===t)return!0;r=ru(r,n),n=t;do{switch(n.tag){case 3:return n.flags|=65536,e=o&-o,n.lanes|=e,e=ig(n.stateNode,r,e),oj(n,e),!1;case 1:if(t=n.type,a=n.stateNode,0==(128&n.flags)&&(\"function\"==typeof t.getDerivedStateFromError||null!==a&&\"function\"==typeof a.componentDidCatch&&(null===l4||!l4.has(a))))return n.flags|=65536,o&=-o,n.lanes|=o,iv(o=iy(o),e,n,r),oj(n,o),!1}n=n.return}while(null!==n);return!1}(e,o,t,n,lR)){lV=1,ih(e,ru(n,e.current)),lN=null;return}}catch(t){if(null!==o)throw lN=o,t;lV=1,ih(e,ru(n,e.current)),lN=null;return}32768&t.flags?(rj||1===r?e=!0:lF||0!=(0x20000000&lR)?e=!1:(lU=e=!0,(2===r||9===r||3===r||6===r)&&null!==(r=oR.current)&&13===r.tag&&(r.flags|=16384)),sw(t,e)):sx(t)}function sx(e){var t=e;do{if(0!=(32768&t.flags))return void sw(t,lU);e=t.return;var n=function(e,t,n){var r=t.pendingProps;switch(rC(t),t.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:case 1:return iJ(t),null;case 3:return n=t.stateNode,r=null,null!==e&&(r=e.memoizedState.cache),t.memoizedState.cache!==r&&(t.flags|=2048),rF(r0),V(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(null===e||null===e.child)&&(rz(t)?iY(t):null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,rL())),iJ(t),null;case 26:var o=t.type,a=t.memoizedState;return null===e?(iY(t),null!==a?(iJ(t),iX(t,a)):(iJ(t),iK(t,o,null,r,n))):a?a!==e.memoizedState?(iY(t),iJ(t),iX(t,a)):(iJ(t),t.flags&=-0x1000001):((e=e.memoizedProps)!==r&&iY(t),iJ(t),iK(t,o,e,r,n)),null;case 27:if(W(t),n=F.current,o=t.type,null!==e&&null!=t.stateNode)e.memoizedProps!==r&&iY(t);else{if(!r){if(null===t.stateNode)throw Error(l(166));return iJ(t),null}e=Z.current,rz(t)?rI(t,e):(t.stateNode=e=cz(o,r,n),iY(t))}return iJ(t),null;case 5:if(W(t),o=t.type,null!==e&&null!=t.stateNode)e.memoizedProps!==r&&iY(t);else{if(!r){if(null===t.stateNode)throw Error(l(166));return iJ(t),null}if(a=Z.current,rz(t))rI(t,a);else{var i=cp(F.current);switch(a){case 1:a=i.createElementNS(\"http://www.w3.org/2000/svg\",o);break;case 2:a=i.createElementNS(\"http://www.w3.org/1998/Math/MathML\",o);break;default:switch(o){case\"svg\":a=i.createElementNS(\"http://www.w3.org/2000/svg\",o);break;case\"math\":a=i.createElementNS(\"http://www.w3.org/1998/Math/MathML\",o);break;case\"script\":(a=i.createElement(\"div\")).innerHTML=\"<script><\\/script>\",a=a.removeChild(a.firstChild);break;case\"select\":a=\"string\"==typeof r.is?i.createElement(\"select\",{is:r.is}):i.createElement(\"select\"),r.multiple?a.multiple=!0:r.size&&(a.size=r.size);break;default:a=\"string\"==typeof r.is?i.createElement(o,{is:r.is}):i.createElement(o)}}a[eD]=t,a[eL]=r;e:for(i=t.child;null!==i;){if(5===i.tag||6===i.tag)a.appendChild(i.stateNode);else if(4!==i.tag&&27!==i.tag&&null!==i.child){i.child.return=i,i=i.child;continue}if(i===t)break;for(;null===i.sibling;){if(null===i.return||i.return===t)break e;i=i.return}i.sibling.return=i.return,i=i.sibling}switch(t.stateNode=a,cu(a,o,r),o){case\"button\":case\"input\":case\"select\":case\"textarea\":r=!!r.autoFocus;break;case\"img\":r=!0;break;default:r=!1}r&&iY(t)}}return iJ(t),iK(t,t.type,null===e?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&null!=t.stateNode)e.memoizedProps!==r&&iY(t);else{if(\"string\"!=typeof r&&null===t.stateNode)throw Error(l(166));if(e=F.current,rz(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,null!==(o=rk))switch(o.tag){case 27:case 5:r=o.memoizedProps}e[eD]=t,(e=!!(e.nodeValue===n||null!==r&&!0===r.suppressHydrationWarning||cl(e.nodeValue,n)))||rP(t,!0)}else(e=cp(e).createTextNode(r))[eD]=t,t.stateNode=e}return iJ(t),null;case 31:if(n=t.memoizedState,null===e||null!==e.memoizedState){if(r=rz(t),null!==n){if(null===e){if(!r)throw Error(l(318));if(!(e=null!==(e=t.memoizedState)?e.dehydrated:null))throw Error(l(557));e[eD]=t}else rD(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;iJ(t),e=!1}else n=rL(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e){if(256&t.flags)return oH(t),t;return oH(t),null}if(0!=(128&t.flags))throw Error(l(558))}return iJ(t),null;case 13:if(r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(o=rz(t),null!==r&&null!==r.dehydrated){if(null===e){if(!o)throw Error(l(318));if(!(o=null!==(o=t.memoizedState)?o.dehydrated:null))throw Error(l(317));o[eD]=t}else rD(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;iJ(t),o=!1}else o=rL(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=o),o=!0;if(!o){if(256&t.flags)return oH(t),t;return oH(t),null}}if(oH(t),0!=(128&t.flags))return t.lanes=n,t;return n=null!==r,e=null!==e&&null!==e.memoizedState,n&&(r=t.child,o=null,null!==r.alternate&&null!==r.alternate.memoizedState&&null!==r.alternate.memoizedState.cachePool&&(o=r.alternate.memoizedState.cachePool.pool),a=null,null!==r.memoizedState&&null!==r.memoizedState.cachePool&&(a=r.memoizedState.cachePool.pool),a!==o&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),iG(t,t.updateQueue),iJ(t),null;case 4:return V(),null===e&&s9(t.stateNode.containerInfo),iJ(t),null;case 10:return rF(t.type),iJ(t),null;case 19:if(R(oV),null===(r=t.memoizedState))return iJ(t),null;if(o=0!=(128&t.flags),null===(a=r.rendering))if(o)iQ(r,!1);else{if(0!==lV||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(a=o$(e))){for(t.flags|=128,iQ(r,!1),t.updateQueue=e=a.updateQueue,iG(t,e),t.subtreeFlags=0,e=n,n=t.child;null!==n;)rr(n,e),n=n.sibling;return M(oV,1&oV.current|2),rj&&rA(t,r.treeForkCount),t.child}e=e.sibling}null!==r.tail&&er()>l1&&(t.flags|=128,o=!0,iQ(r,!1),t.lanes=4194304)}else{if(!o)if(null!==(e=o$(a))){if(t.flags|=128,o=!0,t.updateQueue=e=e.updateQueue,iG(t,e),iQ(r,!0),null===r.tail&&\"hidden\"===r.tailMode&&!a.alternate&&!rj)return iJ(t),null}else 2*er()-r.renderingStartTime>l1&&0x20000000!==n&&(t.flags|=128,o=!0,iQ(r,!1),t.lanes=4194304);r.isBackwards?(a.sibling=t.child,t.child=a):(null!==(e=r.last)?e.sibling=a:t.child=a,r.last=a)}if(null!==r.tail)return e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=er(),e.sibling=null,n=oV.current,M(oV,o?1&n|2:1&n),rj&&rA(t,r.treeForkCount),e;return iJ(t),null;case 22:case 23:return oH(t),oN(),r=null!==t.memoizedState,null!==e?null!==e.memoizedState!==r&&(t.flags|=8192):r&&(t.flags|=8192),r?0!=(0x20000000&n)&&0==(128&t.flags)&&(iJ(t),6&t.subtreeFlags&&(t.flags|=8192)):iJ(t),null!==(n=t.updateQueue)&&iG(t,n.retryQueue),n=null,null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),r=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),null!==e&&R(r7),null;case 24:return n=null,null!==e&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),rF(r0),iJ(t),null;case 25:case 30:return null}throw Error(l(156,t.tag))}(t.alternate,t,lH);if(null!==n){lN=n;return}if(null!==(t=t.sibling)){lN=t;return}lN=t=e}while(null!==t);0===lV&&(lV=5)}function sw(e,t){do{var n=function(e,t){switch(rC(t),t.tag){case 1:return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return rF(r0),V(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 26:case 27:case 5:return W(t),null;case 31:if(null!==t.memoizedState){if(oH(t),null===t.alternate)throw Error(l(340));rD()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 13:if(oH(t),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(l(340));rD()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return R(oV),null;case 4:return V(),null;case 10:return rF(t.type),null;case 22:case 23:return oH(t),oN(),null!==e&&R(r7),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 24:return rF(r0),null;default:return null}}(e.alternate,e);if(null!==n){n.flags&=32767,lN=n;return}if(null!==(n=e.return)&&(n.flags|=32768,n.subtreeFlags=0,n.deletions=null),!t&&null!==(e=e.sibling)){lN=e;return}lN=e=n}while(null!==e);lV=6,lN=null}function sC(e,t,n,r,o,a,i,s,c){e.cancelPendingCommit=null;do sS();while(0!==l5);if(0!=(6&lD))throw Error(l(327));if(null!==t){if(t===e.current)throw Error(l(177));if(!function(e,t,n,r,o,a){var i=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var l=e.entanglements,s=e.expirationTimes,c=e.hiddenUpdates;for(n=i&~n;0<n;){var u=31-em(n),d=1<<u;l[u]=0,s[u]=-1;var f=c[u];if(null!==f)for(c[u]=null,u=0;u<f.length;u++){var p=f[u];null!==p&&(p.lane&=-0x20000001)}n&=~d}0!==r&&ej(e,r,0),0!==a&&0===o&&0!==e.tag&&(e.suspendedLanes|=a&~(i&~t))}(e,n,a=t.lanes|t.childLanes|n1,i,s,c),e===lL&&(lN=lL=null,lR=0),l6=t,l3=e,l9=n,l8=a,l7=o,se=r,0!=(10256&t.subtreeFlags)||0!=(10256&t.flags)?(e.callbackNode=null,e.callbackPriority=0,J(el,function(){return sO(!0),null})):(e.callbackNode=null,e.callbackPriority=0),r=0!=(13878&t.flags),0!=(13878&t.subtreeFlags)||r){r=I.T,I.T=null,o=T.p,T.p=2,i=lD,lD|=4;try{!function(e,t){if(e=e.containerInfo,cd=uo,nB(e=nO(e))){if(\"selectionStart\"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o,a=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(e){n=null;break e}var s=0,c=-1,u=-1,d=0,f=0,p=e,h=null;t:for(;;){for(;p!==n||0!==a&&3!==p.nodeType||(c=s+a),p!==i||0!==r&&3!==p.nodeType||(u=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(o=p.firstChild);)h=p,p=o;for(;;){if(p===e)break t;if(h===n&&++d===a&&(c=s),h===i&&++f===r&&(u=s),null!==(o=p.nextSibling))break;h=(p=h).parentNode}p=o}n=-1===c||-1===u?null:{start:c,end:u}}else n=null}n=n||{start:0,end:0}}else n=null;for(cf={focusedElem:e,selectionRange:n},uo=!1,ll=t;null!==ll;)if(e=(t=ll).child,0!=(1024&t.subtreeFlags)&&null!==e)e.return=t,ll=e;else for(;null!==ll;){switch(i=(t=ll).alternate,e=t.flags,t.tag){case 0:case 11:case 15:case 5:case 26:case 27:case 6:case 4:case 17:break;case 1:if(0!=(1024&e)&&null!==i){e=void 0,n=t,a=i.memoizedProps,i=i.memoizedState,r=n.stateNode;try{var m=ic(n.type,a);e=r.getSnapshotBeforeUpdate(m,i),r.__reactInternalSnapshotBeforeUpdate=e}catch(e){sP(n,n.return,e)}}break;case 3:if(0!=(1024&e)){if(9===(n=(e=t.stateNode.containerInfo).nodeType))cE(e);else if(1===n)switch(e.nodeName){case\"HEAD\":case\"HTML\":case\"BODY\":cE(e);break;default:e.textContent=\"\"}}break;default:if(0!=(1024&e))throw Error(l(163))}if(null!==(e=t.sibling)){e.return=t.return,ll=e;break}ll=t.return}}(e,t,n)}finally{lD=i,T.p=o,I.T=r}}l5=1,s_(),sk(),sE()}}function s_(){if(1===l5){l5=0;var e=l3,t=l6,n=0!=(13878&t.flags);if(0!=(13878&t.subtreeFlags)||n){n=I.T,I.T=null;var r=T.p;T.p=2;var o=lD;lD|=4;try{lv(t,e);var a=cf,i=nO(e.containerInfo),l=a.focusedElem,s=a.selectionRange;if(i!==l&&l&&l.ownerDocument&&function e(t,n){return!!t&&!!n&&(t===n||(!t||3!==t.nodeType)&&(n&&3===n.nodeType?e(t,n.parentNode):\"contains\"in t?t.contains(n):!!t.compareDocumentPosition&&!!(16&t.compareDocumentPosition(n))))}(l.ownerDocument.documentElement,l)){if(null!==s&&nB(l)){var c=s.start,u=s.end;if(void 0===u&&(u=c),\"selectionStart\"in l)l.selectionStart=c,l.selectionEnd=Math.min(u,l.value.length);else{var d=l.ownerDocument||document,f=d&&d.defaultView||window;if(f.getSelection){var p=f.getSelection(),h=l.textContent.length,m=Math.min(s.start,h),g=void 0===s.end?m:Math.min(s.end,h);!p.extend&&m>g&&(i=g,g=m,m=i);var y=nS(l,m),v=nS(l,g);if(y&&v&&(1!==p.rangeCount||p.anchorNode!==y.node||p.anchorOffset!==y.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var b=d.createRange();b.setStart(y.node,y.offset),p.removeAllRanges(),m>g?(p.addRange(b),p.extend(v.node,v.offset)):(b.setEnd(v.node,v.offset),p.addRange(b))}}}}for(d=[],p=l;p=p.parentNode;)1===p.nodeType&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(\"function\"==typeof l.focus&&l.focus(),l=0;l<d.length;l++){var A=d[l];A.element.scrollLeft=A.left,A.element.scrollTop=A.top}}uo=!!cd,cf=cd=null}finally{lD=o,T.p=r,I.T=n}}e.current=t,l5=2}}function sk(){if(2===l5){l5=0;var e=l3,t=l6,n=0!=(8772&t.flags);if(0!=(8772&t.subtreeFlags)||n){n=I.T,I.T=null;var r=T.p;T.p=2;var o=lD;lD|=4;try{ls(e,t.alternate,t)}finally{lD=o,T.p=r,I.T=n}}l5=3}}function sE(){if(4===l5||3===l5){l5=0,en();var e=l3,t=l6,n=l9,r=se;0!=(10256&t.subtreeFlags)||0!=(10256&t.flags)?l5=5:(l5=0,l6=l3=null,sj(e,e.pendingLanes));var o=e.pendingLanes;if(0===o&&(l4=null),eP(n),t=t.stateNode,ep&&\"function\"==typeof ep.onCommitFiberRoot)try{ep.onCommitFiberRoot(ef,t,void 0,128==(128&t.current.flags))}catch(e){}if(null!==r){t=I.T,o=T.p,T.p=2,I.T=null;try{for(var a=e.onRecoverableError,i=0;i<r.length;i++){var l=r[i];a(l.value,{componentStack:l.stack})}}finally{I.T=t,T.p=o}}0!=(3&l9)&&sS(),sq(e),o=e.pendingLanes,0!=(4194090&n)&&0!=(42&o)?e===sn?st++:(st=0,sn=e):st=0,sH(0,!1)}}function sj(e,t){0==(e.pooledCacheLanes&=t)&&null!=(t=e.pooledCache)&&(e.pooledCache=null,r2(t))}function sS(e){return s_(),sk(),sE(),sO(e)}function sO(){if(5!==l5)return!1;var e=l3,t=l8;l8=0;var n=eP(l9),r=I.T,o=T.p;try{T.p=32>n?32:n,I.T=null,n=l7,l7=null;var a=l3,i=l9;if(l5=0,l6=l3=null,l9=0,0!=(6&lD))throw Error(l(331));var s=lD;if(lD|=4,lP(a.current),l_(a,a.current,i,n),lD=s,sH(0,!1),ep&&\"function\"==typeof ep.onPostCommitFiberRoot)try{ep.onPostCommitFiberRoot(ef,a)}catch(e){}return!0}finally{T.p=o,I.T=r,sj(e,t)}}function sB(e,t,n){t=ru(n,t),t=ig(e.stateNode,t,2),null!==(e=ok(e,t,2))&&(eE(e,2),sq(e))}function sP(e,t,n){if(3===e.tag)sB(e,e,n);else for(;null!==t;){if(3===t.tag){sB(t,e,n);break}if(1===t.tag){var r=t.stateNode;if(\"function\"==typeof t.type.getDerivedStateFromError||\"function\"==typeof r.componentDidCatch&&(null===l4||!l4.has(r))){e=ru(n,e),null!==(r=ok(t,n=iy(2),2))&&(iv(n,r,t,e),eE(r,2),sq(r));break}}t=t.return}}function sI(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new lz;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(lq=!0,o.add(n),e=sT.bind(null,e,t,n),t.then(e,e))}function sT(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,lL===e&&(lR&n)===n&&(4===lV||3===lV&&(0x3c00000&lR)===lR&&300>er()-l0?0==(2&lD)&&sd(e,0):lY|=n,lX===lR&&(lX=0)),sq(e)}function sz(e,t){0===t&&(t=e_()),null!==(e=n3(e,t))&&(eE(e,t),sq(e))}function sD(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),sz(e,n)}function sL(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(l(314))}null!==r&&r.delete(t),sz(e,n)}var sN=null,sR=null,sM=!1,sZ=!1,sU=!1,sF=0;function sq(e){e!==sR&&null===e.next&&(null===sR?sN=sR=e:sR=sR.next=e),sZ=!0,sM||(sM=!0,cx(function(){0!=(6&lD)?J(ea,sV):s$()}))}function sH(e,t){if(!sU&&sZ){sU=!0;do for(var n=!1,r=sN;null!==r;){if(!t)if(0!==e){var o=r.pendingLanes;if(0===o)var a=0;else{var i=r.suspendedLanes,l=r.pingedLanes;a=0xc000095&(a=(1<<31-em(42|e)+1)-1&(o&~(i&~l)))?0xc000095&a|1:a?2|a:0}0!==a&&(n=!0,sK(r,a))}else a=lR,0==(3&(a=ex(r,r===lL?a:0,null!==r.cancelPendingCommit||-1!==r.timeoutHandle)))||ew(r,a)||(n=!0,sK(r,a));r=r.next}while(n);sU=!1}}function sV(){s$()}function s$(){sZ=sM=!1;var e,t=0;0===sF||((e=window.event)&&\"popstate\"===e.type?e===cy||(cy=e,0):(cy=null,1))||(t=sF);for(var n=er(),r=null,o=sN;null!==o;){var a=o.next,i=sW(o,n);0===i?(o.next=null,null===r?sN=a:r.next=a,null===a&&(sR=r)):(r=o,(0!==t||0!=(3&i))&&(sZ=!0)),o=a}0!==l5&&5!==l5||sH(t,!1),0!==sF&&(sF=0)}function sW(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=-0x3c00001&e.pendingLanes;0<a;){var i=31-em(a),l=1<<i,s=o[i];-1===s?(0==(l&n)||0!=(l&r))&&(o[i]=function(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return -1}}(l,t)):s<=t&&(e.expiredLanes|=l),a&=~l}if(t=lL,n=lR,n=ex(e,e===t?n:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle),r=e.callbackNode,0===n||e===t&&(2===lM||9===lM)||null!==e.cancelPendingCommit)return null!==r&&null!==r&&ee(r),e.callbackNode=null,e.callbackPriority=0;if(0==(3&n)||ew(e,n)){if((t=n&-n)===e.callbackPriority)return t;switch(null!==r&&ee(r),eP(n)){case 2:case 8:n=ei;break;case 32:default:n=el;break;case 0x10000000:n=ec}return n=J(n,r=sY.bind(null,e)),e.callbackPriority=t,e.callbackNode=n,t}return null!==r&&null!==r&&ee(r),e.callbackPriority=2,e.callbackNode=null,2}function sY(e,t){if(0!==l5&&5!==l5)return e.callbackNode=null,e.callbackPriority=0,null;var n=e.callbackNode;if(sS(!0)&&e.callbackNode!==n)return null;var r=lR;return 0===(r=ex(e,e===lL?r:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle))?null:(si(e,r,t),sW(e,er()),null!=e.callbackNode&&e.callbackNode===n?sY.bind(null,e):null)}function sK(e,t){if(sS())return null;si(e,t,!0)}function sX(){if(0===sF){var e=r3;sF=0!==e?e:eC()}return sF}function sG(e){return null==e||\"symbol\"==typeof e||\"boolean\"==typeof e?null:\"function\"==typeof e?e:tm(\"\"+e)}function sQ(e,t){var n=t.ownerDocument.createElement(\"input\");return n.name=t.name,n.value=t.value,e.id&&n.setAttribute(\"form\",e.id),t.parentNode.insertBefore(n,t),e=new FormData(e),n.parentNode.removeChild(n),e}for(var sJ=0;sJ<nX.length;sJ++){var s0=nX[sJ];nG(s0.toLowerCase(),\"on\"+(s0[0].toUpperCase()+s0.slice(1)))}nG(nF,\"onAnimationEnd\"),nG(nq,\"onAnimationIteration\"),nG(nH,\"onAnimationStart\"),nG(\"dblclick\",\"onDoubleClick\"),nG(\"focusin\",\"onFocus\"),nG(\"focusout\",\"onBlur\"),nG(nV,\"onTransitionRun\"),nG(n$,\"onTransitionStart\"),nG(nW,\"onTransitionCancel\"),nG(nY,\"onTransitionEnd\"),eQ(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]),eQ(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]),eQ(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]),eQ(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]),eG(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \")),eG(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \")),eG(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]),eG(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \")),eG(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")),eG(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var s1=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),s2=new Set(\"beforetoggle cancel close invalid load scroll scrollend toggle\".split(\" \").concat(s1));function s4(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,c=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;a=l,o.currentTarget=c;try{a(o)}catch(e){nQ(e)}o.currentTarget=null,a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,c=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;a=l,o.currentTarget=c;try{a(o)}catch(e){nQ(e)}o.currentTarget=null,a=s}}}}function s5(e,t){var n=t[eR];void 0===n&&(n=t[eR]=new Set);var r=e+\"__bubble\";n.has(r)||(s8(t,e,2,!1),n.add(r))}function s3(e,t,n){var r=0;t&&(r|=4),s8(n,e,r,t)}var s6=\"_reactListening\"+Math.random().toString(36).slice(2);function s9(e){if(!e[s6]){e[s6]=!0,eK.forEach(function(t){\"selectionchange\"!==t&&(s2.has(t)||s3(t,!1,e),s3(t,!0,e))});var t=9===e.nodeType?e:e.ownerDocument;null===t||t[s6]||(t[s6]=!0,s3(\"selectionchange\",!1,t))}}function s8(e,t,n,r){switch(ud(t)){case 2:var o=ua;break;case 8:o=ui;break;default:o=ul}n=o.bind(null,t,n,e),o=void 0,tE&&(\"touchstart\"===t||\"touchmove\"===t||\"wheel\"===t)&&(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function s7(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o)break;if(4===i)for(i=r.return;null!==i;){var c=i.tag;if((3===c||4===c)&&i.stateNode.containerInfo===o)return;i=i.return}for(;null!==l;){if(null===(i=eH(l)))return;if(5===(c=i.tag)||6===c||26===c||27===c){r=a=i;continue e}l=l.parentNode}}r=r.return}tC(function(){var r=a,o=tv(n),i=[];e:{var l=nK.get(e);if(void 0!==l){var c=tF,u=e;switch(e){case\"keypress\":if(0===tI(n))break e;case\"keydown\":case\"keyup\":c=t4;break;case\"focusin\":u=\"focus\",c=tY;break;case\"focusout\":u=\"blur\",c=tY;break;case\"beforeblur\":case\"afterblur\":c=tY;break;case\"click\":if(2===n.button)break e;case\"auxclick\":case\"dblclick\":case\"mousedown\":case\"mousemove\":case\"mouseup\":case\"mouseout\":case\"mouseover\":case\"contextmenu\":c=t$;break;case\"drag\":case\"dragend\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"dragstart\":case\"drop\":c=tW;break;case\"touchcancel\":case\"touchend\":case\"touchmove\":case\"touchstart\":c=t3;break;case nF:case nq:case nH:c=tK;break;case nY:c=t6;break;case\"scroll\":case\"scrollend\":c=tH;break;case\"wheel\":c=t9;break;case\"copy\":case\"cut\":case\"paste\":c=tX;break;case\"gotpointercapture\":case\"lostpointercapture\":case\"pointercancel\":case\"pointerdown\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"pointerup\":c=t5;break;case\"toggle\":case\"beforetoggle\":c=t8}var d=0!=(4&t),f=!d&&(\"scroll\"===e||\"scrollend\"===e),p=d?null!==l?l+\"Capture\":null:l;d=[];for(var h,m=r;null!==m;){var g=m;if(h=g.stateNode,5!==(g=g.tag)&&26!==g&&27!==g||null===h||null===p||null!=(g=t_(m,p))&&d.push(ce(m,g,h)),f)break;m=m.return}0<d.length&&(l=new c(l,u,null,n,o),i.push({event:l,listeners:d}))}}if(0==(7&t)){if((l=\"mouseover\"===e||\"pointerover\"===e,c=\"mouseout\"===e||\"pointerout\"===e,!(l&&n!==ty&&(u=n.relatedTarget||n.fromElement)&&(eH(u)||u[eN])))&&(c||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,c?(u=n.relatedTarget||n.toElement,c=r,null!==(u=u?eH(u):null)&&(f=s(u),d=u.tag,u!==f||5!==d&&27!==d&&6!==d)&&(u=null)):(c=null,u=r),c!==u)){if(d=t$,g=\"onMouseLeave\",p=\"onMouseEnter\",m=\"mouse\",(\"pointerout\"===e||\"pointerover\"===e)&&(d=t5,g=\"onPointerLeave\",p=\"onPointerEnter\",m=\"pointer\"),f=null==c?l:e$(c),h=null==u?l:e$(u),(l=new d(g,m+\"leave\",c,n,o)).target=f,l.relatedTarget=h,g=null,eH(o)===r&&((d=new d(p,m+\"enter\",u,n,o)).target=h,d.relatedTarget=f,g=d),f=g,c&&u)t:{for(d=cn,p=c,m=u,h=0,g=p;g;g=d(g))h++;g=0;for(var y,v=m;v;v=d(v))g++;for(;0<h-g;)p=d(p),h--;for(;0<g-h;)m=d(m),g--;for(;h--;){if(p===m||null!==m&&p===m.alternate){d=p;break t}p=d(p),m=d(m)}d=null}else d=null;null!==c&&cr(i,l,c,d,!1),null!==u&&null!==f&&cr(i,f,u,d,!0)}e:{if(\"select\"===(c=(l=r?e$(r):window).nodeName&&l.nodeName.toLowerCase())||\"input\"===c&&\"file\"===l.type)var b=nm;else if(nc(l))if(ng)b=n_;else{b=nw;var A=nx}else(c=l.nodeName)&&\"input\"===c.toLowerCase()&&(\"checkbox\"===l.type||\"radio\"===l.type)?b=nC:r&&tf(r.elementType)&&(b=nm);if(b&&(b=b(e,r))){nu(i,b,n,o);break e}A&&A(e,l,r),\"focusout\"===e&&r&&\"number\"===l.type&&null!=r.memoizedProps.value&&to(l,\"number\",l.value)}switch(A=r?e$(r):window,e){case\"focusin\":(nc(A)||\"true\"===A.contentEditable)&&(nI=A,nT=r,nz=null);break;case\"focusout\":nz=nT=nI=null;break;case\"mousedown\":nD=!0;break;case\"contextmenu\":case\"mouseup\":case\"dragend\":nD=!1,nL(i,n,o);break;case\"selectionchange\":if(nP)break;case\"keydown\":case\"keyup\":nL(i,n,o)}if(ne)t:{switch(e){case\"compositionstart\":var x=\"onCompositionStart\";break t;case\"compositionend\":x=\"onCompositionEnd\";break t;case\"compositionupdate\":x=\"onCompositionUpdate\";break t}x=void 0}else nl?na(e,n)&&(x=\"onCompositionEnd\"):\"keydown\"===e&&229===n.keyCode&&(x=\"onCompositionStart\");x&&(nr&&\"ko\"!==n.locale&&(nl||\"onCompositionStart\"!==x?\"onCompositionEnd\"===x&&nl&&(y=tP()):(tO=\"value\"in(tS=o)?tS.value:tS.textContent,nl=!0)),0<(A=ct(r,x)).length&&(x=new tG(x,e,null,n,o),i.push({event:x,listeners:A}),y?x.data=y:null!==(y=ni(n))&&(x.data=y))),(y=nn?function(e,t){switch(e){case\"compositionend\":return ni(t);case\"keypress\":if(32!==t.which)return null;return no=!0,\" \";case\"textInput\":return\" \"===(e=t.data)&&no?null:e;default:return null}}(e,n):function(e,t){if(nl)return\"compositionend\"===e||!ne&&na(e,t)?(e=tP(),tB=tO=tS=null,nl=!1,e):null;switch(e){case\"paste\":default:return null;case\"keypress\":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case\"compositionend\":return nr&&\"ko\"!==t.locale?null:t.data}}(e,n))&&0<(x=ct(r,\"onBeforeInput\")).length&&(A=new tG(\"onBeforeInput\",\"beforeinput\",null,n,o),i.push({event:A,listeners:x}),A.data=y);var w=e;if(\"submit\"===w&&r&&r.stateNode===o){var C=sG((o[eL]||null).action),_=n.submitter;_&&null!==(w=(w=_[eL]||null)?sG(w.formAction):_.getAttribute(\"formAction\"))&&(C=w,_=null);var k=new tF(\"action\",\"action\",null,n,o);i.push({event:k,listeners:[{instance:null,listener:function(){if(n.defaultPrevented){if(0!==sF){var e=_?sQ(o,_):new FormData(o);aX(r,{pending:!0,data:e,method:o.method,action:C},null,e)}}else\"function\"==typeof C&&(k.preventDefault(),aX(r,{pending:!0,data:e=_?sQ(o,_):new FormData(o),method:o.method,action:C},C,e))},currentTarget:o}]})}}s4(i,t)})}function ce(e,t,n){return{instance:e,listener:t,currentTarget:n}}function ct(e,t){for(var n=t+\"Capture\",r=[];null!==e;){var o=e,a=o.stateNode;if(5!==(o=o.tag)&&26!==o&&27!==o||null===a||(null!=(o=t_(e,n))&&r.unshift(ce(e,o,a)),null!=(o=t_(e,t))&&r.push(ce(e,o,a))),3===e.tag)return r;e=e.return}return[]}function cn(e){if(null===e)return null;do e=e.return;while(e&&5!==e.tag&&27!==e.tag);return e||null}function cr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,c=l.stateNode;if(l=l.tag,null!==s&&s===r)break;5!==l&&26!==l&&27!==l||null===c||(s=c,o?null!=(c=t_(n,a))&&i.unshift(ce(n,c,s)):o||null!=(c=t_(n,a))&&i.push(ce(n,c,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var co=/\\r\\n?/g,ca=/\\u0000|\\uFFFD/g;function ci(e){return(\"string\"==typeof e?e:\"\"+e).replace(co,\"\\n\").replace(ca,\"\")}function cl(e,t){return t=ci(t),ci(e)===t}function cs(e,t,n,r,o,a){switch(n){case\"children\":\"string\"==typeof r?\"body\"===t||\"textarea\"===t&&\"\"===r||ts(e,r):(\"number\"==typeof r||\"bigint\"==typeof r)&&\"body\"!==t&&ts(e,\"\"+r);break;case\"className\":e4(e,\"class\",r);break;case\"tabIndex\":e4(e,\"tabindex\",r);break;case\"dir\":case\"role\":case\"viewBox\":case\"width\":case\"height\":e4(e,n,r);break;case\"style\":td(e,r,a);break;case\"data\":if(\"object\"!==t){e4(e,\"data\",r);break}case\"src\":case\"href\":if(\"\"===r&&(\"a\"!==t||\"href\"!==n)||null==r||\"function\"==typeof r||\"symbol\"==typeof r||\"boolean\"==typeof r){e.removeAttribute(n);break}r=tm(\"\"+r),e.setAttribute(n,r);break;case\"action\":case\"formAction\":if(\"function\"==typeof r){e.setAttribute(n,\"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\");break}if(\"function\"==typeof a&&(\"formAction\"===n?(\"input\"!==t&&cs(e,t,\"name\",o.name,o,null),cs(e,t,\"formEncType\",o.formEncType,o,null),cs(e,t,\"formMethod\",o.formMethod,o,null),cs(e,t,\"formTarget\",o.formTarget,o,null)):(cs(e,t,\"encType\",o.encType,o,null),cs(e,t,\"method\",o.method,o,null),cs(e,t,\"target\",o.target,o,null))),null==r||\"symbol\"==typeof r||\"boolean\"==typeof r){e.removeAttribute(n);break}r=tm(\"\"+r),e.setAttribute(n,r);break;case\"onClick\":null!=r&&(e.onclick=tg);break;case\"onScroll\":null!=r&&s5(\"scroll\",e);break;case\"onScrollEnd\":null!=r&&s5(\"scrollend\",e);break;case\"dangerouslySetInnerHTML\":if(null!=r){if(\"object\"!=typeof r||!(\"__html\"in r))throw Error(l(61));if(null!=(n=r.__html)){if(null!=o.children)throw Error(l(60));e.innerHTML=n}}break;case\"multiple\":e.multiple=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r;break;case\"muted\":e.muted=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r;break;case\"suppressContentEditableWarning\":case\"suppressHydrationWarning\":case\"defaultValue\":case\"defaultChecked\":case\"innerHTML\":case\"ref\":case\"autoFocus\":case\"innerText\":case\"textContent\":break;case\"xlinkHref\":if(null==r||\"function\"==typeof r||\"boolean\"==typeof r||\"symbol\"==typeof r){e.removeAttribute(\"xlink:href\");break}n=tm(\"\"+r),e.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",n);break;case\"contentEditable\":case\"spellCheck\":case\"draggable\":case\"value\":case\"autoReverse\":case\"externalResourcesRequired\":case\"focusable\":case\"preserveAlpha\":null!=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r?e.setAttribute(n,\"\"+r):e.removeAttribute(n);break;case\"inert\":case\"allowFullScreen\":case\"async\":case\"autoPlay\":case\"controls\":case\"default\":case\"defer\":case\"disabled\":case\"disablePictureInPicture\":case\"disableRemotePlayback\":case\"formNoValidate\":case\"hidden\":case\"loop\":case\"noModule\":case\"noValidate\":case\"open\":case\"playsInline\":case\"readOnly\":case\"required\":case\"reversed\":case\"scoped\":case\"seamless\":case\"itemScope\":r&&\"function\"!=typeof r&&\"symbol\"!=typeof r?e.setAttribute(n,\"\"):e.removeAttribute(n);break;case\"capture\":case\"download\":!0===r?e.setAttribute(n,\"\"):!1!==r&&null!=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r?e.setAttribute(n,r):e.removeAttribute(n);break;case\"cols\":case\"rows\":case\"size\":case\"span\":null!=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r&&!isNaN(r)&&1<=r?e.setAttribute(n,r):e.removeAttribute(n);break;case\"rowSpan\":case\"start\":null==r||\"function\"==typeof r||\"symbol\"==typeof r||isNaN(r)?e.removeAttribute(n):e.setAttribute(n,r);break;case\"popover\":s5(\"beforetoggle\",e),s5(\"toggle\",e),e2(e,\"popover\",r);break;case\"xlinkActuate\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:actuate\",r);break;case\"xlinkArcrole\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:arcrole\",r);break;case\"xlinkRole\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:role\",r);break;case\"xlinkShow\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:show\",r);break;case\"xlinkTitle\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:title\",r);break;case\"xlinkType\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:type\",r);break;case\"xmlBase\":e5(e,\"http://www.w3.org/XML/1998/namespace\",\"xml:base\",r);break;case\"xmlLang\":e5(e,\"http://www.w3.org/XML/1998/namespace\",\"xml:lang\",r);break;case\"xmlSpace\":e5(e,\"http://www.w3.org/XML/1998/namespace\",\"xml:space\",r);break;case\"is\":e2(e,\"is\",r);break;default:2<n.length&&(\"o\"===n[0]||\"O\"===n[0])&&(\"n\"===n[1]||\"N\"===n[1])||e2(e,n=tp.get(n)||n,r)}}function cc(e,t,n,r,o,a){switch(n){case\"style\":td(e,r,a);break;case\"dangerouslySetInnerHTML\":if(null!=r){if(\"object\"!=typeof r||!(\"__html\"in r))throw Error(l(61));if(null!=(n=r.__html)){if(null!=o.children)throw Error(l(60));e.innerHTML=n}}break;case\"children\":\"string\"==typeof r?ts(e,r):(\"number\"==typeof r||\"bigint\"==typeof r)&&ts(e,\"\"+r);break;case\"onScroll\":null!=r&&s5(\"scroll\",e);break;case\"onScrollEnd\":null!=r&&s5(\"scrollend\",e);break;case\"onClick\":null!=r&&(e.onclick=tg);break;case\"suppressContentEditableWarning\":case\"suppressHydrationWarning\":case\"innerHTML\":case\"ref\":case\"innerText\":case\"textContent\":break;default:if(!eX.hasOwnProperty(n))e:{if(\"o\"===n[0]&&\"n\"===n[1]&&(o=n.endsWith(\"Capture\"),t=n.slice(2,o?n.length-7:void 0),\"function\"==typeof(a=null!=(a=e[eL]||null)?a[n]:null)&&e.removeEventListener(t,a,o),\"function\"==typeof r)){\"function\"!=typeof a&&null!==a&&(n in e?e[n]=null:e.hasAttribute(n)&&e.removeAttribute(n)),e.addEventListener(t,r,o);break e}n in e?e[n]=r:!0===r?e.setAttribute(n,\"\"):e2(e,n,r)}}}function cu(e,t,n){switch(t){case\"div\":case\"span\":case\"svg\":case\"path\":case\"a\":case\"g\":case\"p\":case\"li\":break;case\"img\":s5(\"error\",e),s5(\"load\",e);var r,o=!1,a=!1;for(r in n)if(n.hasOwnProperty(r)){var i=n[r];if(null!=i)switch(r){case\"src\":o=!0;break;case\"srcSet\":a=!0;break;case\"children\":case\"dangerouslySetInnerHTML\":throw Error(l(137,t));default:cs(e,t,r,i,n,null)}}a&&cs(e,t,\"srcSet\",n.srcSet,n,null),o&&cs(e,t,\"src\",n.src,n,null);return;case\"input\":s5(\"invalid\",e);var s=r=i=a=null,c=null,u=null;for(o in n)if(n.hasOwnProperty(o)){var d=n[o];if(null!=d)switch(o){case\"name\":a=d;break;case\"type\":i=d;break;case\"checked\":c=d;break;case\"defaultChecked\":u=d;break;case\"value\":r=d;break;case\"defaultValue\":s=d;break;case\"children\":case\"dangerouslySetInnerHTML\":if(null!=d)throw Error(l(137,t));break;default:cs(e,t,o,d,n,null)}}tr(e,r,s,c,u,i,a,!1);return;case\"select\":for(a in s5(\"invalid\",e),o=i=r=null,n)if(n.hasOwnProperty(a)&&null!=(s=n[a]))switch(a){case\"value\":r=s;break;case\"defaultValue\":i=s;break;case\"multiple\":o=s;default:cs(e,t,a,s,n,null)}t=r,n=i,e.multiple=!!o,null!=t?ta(e,!!o,t,!1):null!=n&&ta(e,!!o,n,!0);return;case\"textarea\":for(i in s5(\"invalid\",e),r=a=o=null,n)if(n.hasOwnProperty(i)&&null!=(s=n[i]))switch(i){case\"value\":o=s;break;case\"defaultValue\":a=s;break;case\"children\":r=s;break;case\"dangerouslySetInnerHTML\":if(null!=s)throw Error(l(91));break;default:cs(e,t,i,s,n,null)}tl(e,o,a,r);return;case\"option\":for(c in n)n.hasOwnProperty(c)&&null!=(o=n[c])&&(\"selected\"===c?e.selected=o&&\"function\"!=typeof o&&\"symbol\"!=typeof o:cs(e,t,c,o,n,null));return;case\"dialog\":s5(\"beforetoggle\",e),s5(\"toggle\",e),s5(\"cancel\",e),s5(\"close\",e);break;case\"iframe\":case\"object\":s5(\"load\",e);break;case\"video\":case\"audio\":for(o=0;o<s1.length;o++)s5(s1[o],e);break;case\"image\":s5(\"error\",e),s5(\"load\",e);break;case\"details\":s5(\"toggle\",e);break;case\"embed\":case\"source\":case\"link\":s5(\"error\",e),s5(\"load\",e);case\"area\":case\"base\":case\"br\":case\"col\":case\"hr\":case\"keygen\":case\"meta\":case\"param\":case\"track\":case\"wbr\":case\"menuitem\":for(u in n)if(n.hasOwnProperty(u)&&null!=(o=n[u]))switch(u){case\"children\":case\"dangerouslySetInnerHTML\":throw Error(l(137,t));default:cs(e,t,u,o,n,null)}return;default:if(tf(t)){for(d in n)n.hasOwnProperty(d)&&void 0!==(o=n[d])&&cc(e,t,d,o,n,void 0);return}}for(s in n)n.hasOwnProperty(s)&&null!=(o=n[s])&&cs(e,t,s,o,n,null)}var cd=null,cf=null;function cp(e){return 9===e.nodeType?e:e.ownerDocument}function ch(e){switch(e){case\"http://www.w3.org/2000/svg\":return 1;case\"http://www.w3.org/1998/Math/MathML\":return 2;default:return 0}}function cm(e,t){if(0===e)switch(t){case\"svg\":return 1;case\"math\":return 2;default:return 0}return 1===e&&\"foreignObject\"===t?0:e}function cg(e,t){return\"textarea\"===e||\"noscript\"===e||\"string\"==typeof t.children||\"number\"==typeof t.children||\"bigint\"==typeof t.children||\"object\"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var cy=null,cv=\"function\"==typeof setTimeout?setTimeout:void 0,cb=\"function\"==typeof clearTimeout?clearTimeout:void 0,cA=\"function\"==typeof Promise?Promise:void 0,cx=\"function\"==typeof queueMicrotask?queueMicrotask:void 0!==cA?function(e){return cA.resolve(null).then(e).catch(cw)}:cv;function cw(e){setTimeout(function(){throw e})}function cC(e){return\"head\"===e}function c_(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if(\"/$\"===(n=o.data)||\"/&\"===n){if(0===r){e.removeChild(o),uO(t);return}r--}else if(\"$\"===n||\"$?\"===n||\"$~\"===n||\"$!\"===n||\"&\"===n)r++;else if(\"html\"===n)cD(e.ownerDocument.documentElement);else if(\"head\"===n){cD(n=e.ownerDocument.head);for(var a=n.firstChild;a;){var i=a.nextSibling,l=a.nodeName;a[eF]||\"SCRIPT\"===l||\"STYLE\"===l||\"LINK\"===l&&\"stylesheet\"===a.rel.toLowerCase()||n.removeChild(a),a=i}}else\"body\"===n&&cD(e.ownerDocument.body);n=o}while(n);uO(t)}function ck(e,t){var n=e;e=0;do{var r=n.nextSibling;if(1===n.nodeType?t?(n._stashedDisplay=n.style.display,n.style.display=\"none\"):(n.style.display=n._stashedDisplay||\"\",\"\"===n.getAttribute(\"style\")&&n.removeAttribute(\"style\")):3===n.nodeType&&(t?(n._stashedText=n.nodeValue,n.nodeValue=\"\"):n.nodeValue=n._stashedText||\"\"),r&&8===r.nodeType)if(\"/$\"===(n=r.data))if(0===e)break;else e--;else\"$\"!==n&&\"$?\"!==n&&\"$~\"!==n&&\"$!\"!==n||e++;n=r}while(n)}function cE(e){var t=e.firstChild;for(t&&10===t.nodeType&&(t=t.nextSibling);t;){var n=t;switch(t=t.nextSibling,n.nodeName){case\"HTML\":case\"HEAD\":case\"BODY\":cE(n),eq(n);continue;case\"SCRIPT\":case\"STYLE\":continue;case\"LINK\":if(\"stylesheet\"===n.rel.toLowerCase())continue}e.removeChild(n)}}function cj(e,t){for(;8!==e.nodeType;)if(!t||null===(e=cB(e.nextSibling)))return null;return e}function cS(e){return\"$?\"===e.data||\"$~\"===e.data}function cO(e){return\"$!\"===e.data||\"$?\"===e.data&&\"loading\"!==e.ownerDocument.readyState}function cB(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if(\"$\"===(t=e.data)||\"$!\"===t||\"$?\"===t||\"$~\"===t||\"&\"===t||\"F!\"===t||\"F\"===t)break;if(\"/$\"===t||\"/&\"===t)return null}}return e}var cP=null;function cI(e){e=e.nextSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if(\"/$\"===n||\"/&\"===n){if(0===t)return cB(e.nextSibling);t--}else\"$\"!==n&&\"$!\"!==n&&\"$?\"!==n&&\"$~\"!==n&&\"&\"!==n||t++}e=e.nextSibling}return null}function cT(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if(\"$\"===n||\"$!\"===n||\"$?\"===n||\"$~\"===n||\"&\"===n){if(0===t)return e;t--}else\"/$\"!==n&&\"/&\"!==n||t++}e=e.previousSibling}return null}function cz(e,t,n){switch(t=cp(n),e){case\"html\":if(!(e=t.documentElement))throw Error(l(452));return e;case\"head\":if(!(e=t.head))throw Error(l(453));return e;case\"body\":if(!(e=t.body))throw Error(l(454));return e;default:throw Error(l(451))}}function cD(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);eq(e)}var cL=new Map,cN=new Set;function cR(e){return\"function\"==typeof e.getRootNode?e.getRootNode():9===e.nodeType?e:e.ownerDocument}var cM=T.d;T.d={f:function(){var e=cM.f(),t=sc();return e||t},r:function(e){var t=eV(e);null!==t&&5===t.tag&&\"form\"===t.type?aQ(t):cM.r(e)},D:function(e){cM.D(e),cU(\"dns-prefetch\",e,null)},C:function(e,t){cM.C(e,t),cU(\"preconnect\",e,t)},L:function(e,t,n){if(cM.L(e,t,n),cZ&&e&&t){var r='link[rel=\"preload\"][as=\"'+tt(t)+'\"]';\"image\"===t&&n&&n.imageSrcSet?(r+='[imagesrcset=\"'+tt(n.imageSrcSet)+'\"]',\"string\"==typeof n.imageSizes&&(r+='[imagesizes=\"'+tt(n.imageSizes)+'\"]')):r+='[href=\"'+tt(e)+'\"]';var o=r;switch(t){case\"style\":o=cq(e);break;case\"script\":o=c$(e)}cL.has(o)||(e=f({rel:\"preload\",href:\"image\"===t&&n&&n.imageSrcSet?void 0:e,as:t},n),cL.set(o,e),null!==cZ.querySelector(r)||\"style\"===t&&cZ.querySelector(cH(o))||\"script\"===t&&cZ.querySelector(cW(o))||(cu(t=cZ.createElement(\"link\"),\"link\",e),eY(t),cZ.head.appendChild(t)))}},m:function(e,t){if(cM.m(e,t),cZ&&e){var n=t&&\"string\"==typeof t.as?t.as:\"script\",r='link[rel=\"modulepreload\"][as=\"'+tt(n)+'\"][href=\"'+tt(e)+'\"]',o=r;switch(n){case\"audioworklet\":case\"paintworklet\":case\"serviceworker\":case\"sharedworker\":case\"worker\":case\"script\":o=c$(e)}if(!cL.has(o)&&(e=f({rel:\"modulepreload\",href:e},t),cL.set(o,e),null===cZ.querySelector(r))){switch(n){case\"audioworklet\":case\"paintworklet\":case\"serviceworker\":case\"sharedworker\":case\"worker\":case\"script\":if(cZ.querySelector(cW(o)))return}cu(n=cZ.createElement(\"link\"),\"link\",e),eY(n),cZ.head.appendChild(n)}}},X:function(e,t){if(cM.X(e,t),cZ&&e){var n=eW(cZ).hoistableScripts,r=c$(e),o=n.get(r);o||((o=cZ.querySelector(cW(r)))||(e=f({src:e,async:!0},t),(t=cL.get(r))&&cG(e,t),eY(o=cZ.createElement(\"script\")),cu(o,\"link\",e),cZ.head.appendChild(o)),o={type:\"script\",instance:o,count:1,state:null},n.set(r,o))}},S:function(e,t,n){if(cM.S(e,t,n),cZ&&e){var r=eW(cZ).hoistableStyles,o=cq(e);t=t||\"default\";var a=r.get(o);if(!a){var i={loading:0,preload:null};if(a=cZ.querySelector(cH(o)))i.loading=5;else{e=f({rel:\"stylesheet\",href:e,\"data-precedence\":t},n),(n=cL.get(o))&&cX(e,n);var l=a=cZ.createElement(\"link\");eY(l),cu(l,\"link\",e),l._p=new Promise(function(e,t){l.onload=e,l.onerror=t}),l.addEventListener(\"load\",function(){i.loading|=1}),l.addEventListener(\"error\",function(){i.loading|=2}),i.loading|=4,cK(a,t,cZ)}a={type:\"stylesheet\",instance:a,count:1,state:i},r.set(o,a)}}},M:function(e,t){if(cM.M(e,t),cZ&&e){var n=eW(cZ).hoistableScripts,r=c$(e),o=n.get(r);o||((o=cZ.querySelector(cW(r)))||(e=f({src:e,async:!0,type:\"module\"},t),(t=cL.get(r))&&cG(e,t),eY(o=cZ.createElement(\"script\")),cu(o,\"link\",e),cZ.head.appendChild(o)),o={type:\"script\",instance:o,count:1,state:null},n.set(r,o))}}};var cZ=\"undefined\"==typeof document?null:document;function cU(e,t,n){if(cZ&&\"string\"==typeof t&&t){var r=tt(t);r='link[rel=\"'+e+'\"][href=\"'+r+'\"]',\"string\"==typeof n&&(r+='[crossorigin=\"'+n+'\"]'),cN.has(r)||(cN.add(r),e={rel:e,crossOrigin:n,href:t},null===cZ.querySelector(r)&&(cu(t=cZ.createElement(\"link\"),\"link\",e),eY(t),cZ.head.appendChild(t)))}}function cF(e,t,n,r){var o=(o=F.current)?cR(o):null;if(!o)throw Error(l(446));switch(e){case\"meta\":case\"title\":return null;case\"style\":return\"string\"==typeof n.precedence&&\"string\"==typeof n.href?(t=cq(n.href),(r=(n=eW(o).hoistableStyles).get(t))||(r={type:\"style\",instance:null,count:0,state:null},n.set(t,r)),r):{type:\"void\",instance:null,count:0,state:null};case\"link\":if(\"stylesheet\"===n.rel&&\"string\"==typeof n.href&&\"string\"==typeof n.precedence){e=cq(n.href);var a,i,s,c,u=eW(o).hoistableStyles,d=u.get(e);if(d||(o=o.ownerDocument||o,d={type:\"stylesheet\",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,d),(u=o.querySelector(cH(e)))&&!u._p&&(d.instance=u,d.state.loading=5),cL.has(e)||(n={rel:\"preload\",as:\"style\",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},cL.set(e,n),u||(a=o,i=e,s=n,c=d.state,a.querySelector('link[rel=\"preload\"][as=\"style\"]['+i+\"]\")?c.loading=1:(c.preload=i=a.createElement(\"link\"),i.addEventListener(\"load\",function(){return c.loading|=1}),i.addEventListener(\"error\",function(){return c.loading|=2}),cu(i,\"link\",s),eY(i),a.head.appendChild(i))))),t&&null===r)throw Error(l(528,\"\"));return d}if(t&&null!==r)throw Error(l(529,\"\"));return null;case\"script\":return t=n.async,\"string\"==typeof(n=n.src)&&t&&\"function\"!=typeof t&&\"symbol\"!=typeof t?(t=c$(n),(r=(n=eW(o).hoistableScripts).get(t))||(r={type:\"script\",instance:null,count:0,state:null},n.set(t,r)),r):{type:\"void\",instance:null,count:0,state:null};default:throw Error(l(444,e))}}function cq(e){return'href=\"'+tt(e)+'\"'}function cH(e){return'link[rel=\"stylesheet\"]['+e+\"]\"}function cV(e){return f({},e,{\"data-precedence\":e.precedence,precedence:null})}function c$(e){return'[src=\"'+tt(e)+'\"]'}function cW(e){return\"script[async]\"+e}function cY(e,t,n){if(t.count++,null===t.instance)switch(t.type){case\"style\":var r=e.querySelector('style[data-href~=\"'+tt(n.href)+'\"]');if(r)return t.instance=r,eY(r),r;var o=f({},n,{\"data-href\":n.href,\"data-precedence\":n.precedence,href:null,precedence:null});return eY(r=(e.ownerDocument||e).createElement(\"style\")),cu(r,\"style\",o),cK(r,n.precedence,e),t.instance=r;case\"stylesheet\":o=cq(n.href);var a=e.querySelector(cH(o));if(a)return t.state.loading|=4,t.instance=a,eY(a),a;r=cV(n),(o=cL.get(o))&&cX(r,o),eY(a=(e.ownerDocument||e).createElement(\"link\"));var i=a;return i._p=new Promise(function(e,t){i.onload=e,i.onerror=t}),cu(a,\"link\",r),t.state.loading|=4,cK(a,n.precedence,e),t.instance=a;case\"script\":if(a=c$(n.src),o=e.querySelector(cW(a)))return t.instance=o,eY(o),o;return r=n,(o=cL.get(a))&&cG(r=f({},n),o),eY(o=(e=e.ownerDocument||e).createElement(\"script\")),cu(o,\"link\",r),e.head.appendChild(o),t.instance=o;case\"void\":return null;default:throw Error(l(443,t.type))}return\"stylesheet\"===t.type&&0==(4&t.state.loading)&&(r=t.instance,t.state.loading|=4,cK(r,n.precedence,e)),t.instance}function cK(e,t,n){for(var r=n.querySelectorAll('link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'),o=r.length?r[r.length-1]:null,a=o,i=0;i<r.length;i++){var l=r[i];if(l.dataset.precedence===t)a=l;else if(a!==o)break}a?a.parentNode.insertBefore(e,a.nextSibling):(t=9===n.nodeType?n.head:n).insertBefore(e,t.firstChild)}function cX(e,t){null==e.crossOrigin&&(e.crossOrigin=t.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=t.referrerPolicy),null==e.title&&(e.title=t.title)}function cG(e,t){null==e.crossOrigin&&(e.crossOrigin=t.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=t.referrerPolicy),null==e.integrity&&(e.integrity=t.integrity)}var cQ=null;function cJ(e,t,n){if(null===cQ){var r=new Map,o=cQ=new Map;o.set(n,r)}else(r=(o=cQ).get(n))||(r=new Map,o.set(n,r));if(r.has(e))return r;for(r.set(e,null),n=n.getElementsByTagName(e),o=0;o<n.length;o++){var a=n[o];if(!(a[eF]||a[eD]||\"link\"===e&&\"stylesheet\"===a.getAttribute(\"rel\"))&&\"http://www.w3.org/2000/svg\"!==a.namespaceURI){var i=a.getAttribute(t)||\"\";i=e+i;var l=r.get(i);l?l.push(a):r.set(i,[a])}}return r}function c0(e,t,n){(e=e.ownerDocument||e).head.insertBefore(n,\"title\"===t?e.querySelector(\"head > title\"):null)}function c1(e){return\"stylesheet\"!==e.type||0!=(3&e.state.loading)}var c2=null;function c4(){if(this.count--,0===this.count){if(this.stylesheets)c3(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var c5=null;function c3(e,t){e.stylesheets=null,null!==e.unsuspend&&(e.count++,c5=new Map,t.forEach(c6,e),c5=null,c4.call(e))}function c6(e,t){if(!(4&t.state.loading)){var n=c5.get(e);if(n)var r=n.get(null);else{n=new Map,c5.set(e,n);for(var o=e.querySelectorAll(\"link[data-precedence],style[data-precedence]\"),a=0;a<o.length;a++){var i=o[a];(\"LINK\"===i.nodeName||\"not all\"!==i.getAttribute(\"media\"))&&(n.set(i.dataset.precedence,i),r=i)}r&&n.set(null,r)}i=(o=t.instance).getAttribute(\"data-precedence\"),(a=n.get(i)||r)===r&&n.set(null,o),n.set(i,o),this.count++,r=c4.bind(this),o.addEventListener(\"load\",r),o.addEventListener(\"error\",r),a?a.parentNode.insertBefore(o,a.nextSibling):(e=9===e.nodeType?e.head:e).insertBefore(o,e.firstChild),t.state.loading|=4}}var c9={$$typeof:A,Provider:null,Consumer:null,_currentValue:z,_currentValue2:z,_threadCount:0};function c8(e,t,n,r,o,a,i,l,s){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=ek(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=ek(0),this.hiddenUpdates=ek(null),this.identifierPrefix=r,this.onUncaughtError=o,this.onCaughtError=a,this.onRecoverableError=i,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=s,this.incompleteTransitions=new Map}function c7(e,t,n,r,o,a){o=o?n8:n8,null===r.context?r.context=o:r.pendingContext=o,(r=o_(t)).payload={element:n},null!==(a=void 0===a?null:a)&&(r.callback=a),null!==(n=ok(e,r,t))&&(sa(n,e,t),oE(n,e,t))}function ue(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function ut(e,t){ue(e,t),(e=e.alternate)&&ue(e,t)}function un(e){if(13===e.tag||31===e.tag){var t=n3(e,0x4000000);null!==t&&sa(t,e,0x4000000),ut(e,0x4000000)}}function ur(e){if(13===e.tag||31===e.tag){var t=sr(),n=n3(e,t=eB(t));null!==n&&sa(n,e,t),ut(e,t)}}var uo=!0;function ua(e,t,n,r){var o=I.T;I.T=null;var a=T.p;try{T.p=2,ul(e,t,n,r)}finally{T.p=a,I.T=o}}function ui(e,t,n,r){var o=I.T;I.T=null;var a=T.p;try{T.p=8,ul(e,t,n,r)}finally{T.p=a,I.T=o}}function ul(e,t,n,r){if(uo){var o=us(r);if(null===o)s7(e,t,r,uc,n),uA(e,r);else if(function(e,t,n,r,o){switch(t){case\"focusin\":return up=ux(up,e,t,n,r,o),!0;case\"dragenter\":return uh=ux(uh,e,t,n,r,o),!0;case\"mouseover\":return um=ux(um,e,t,n,r,o),!0;case\"pointerover\":var a=o.pointerId;return ug.set(a,ux(ug.get(a)||null,e,t,n,r,o)),!0;case\"gotpointercapture\":return a=o.pointerId,uy.set(a,ux(uy.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(uA(e,r),4&t&&-1<ub.indexOf(e)){for(;null!==o;){var a=eV(o);if(null!==a)switch(a.tag){case 3:if((a=a.stateNode).current.memoizedState.isDehydrated){var i=eA(a.pendingLanes);if(0!==i){var l=a;for(l.pendingLanes|=2,l.entangledLanes|=2;i;){var s=1<<31-em(i);l.entanglements[1]|=s,i&=~s}sq(a),0==(6&lD)&&(l1=er()+500,sH(0,!1))}}break;case 31:case 13:null!==(l=n3(a,2))&&sa(l,a,2),sc(),ut(a,2)}if(null===(a=us(r))&&s7(e,t,r,uc,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else s7(e,t,r,null,n)}}function us(e){return uu(e=tv(e))}var uc=null;function uu(e){if(uc=null,null!==(e=eH(e))){var t=s(e);if(null===t)e=null;else{var n=t.tag;if(13===n){if(null!==(e=c(t)))return e;e=null}else if(31===n){if(null!==(e=u(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return uc=e,null}function ud(e){switch(e){case\"beforetoggle\":case\"cancel\":case\"click\":case\"close\":case\"contextmenu\":case\"copy\":case\"cut\":case\"auxclick\":case\"dblclick\":case\"dragend\":case\"dragstart\":case\"drop\":case\"focusin\":case\"focusout\":case\"input\":case\"invalid\":case\"keydown\":case\"keypress\":case\"keyup\":case\"mousedown\":case\"mouseup\":case\"paste\":case\"pause\":case\"play\":case\"pointercancel\":case\"pointerdown\":case\"pointerup\":case\"ratechange\":case\"reset\":case\"resize\":case\"seeked\":case\"submit\":case\"toggle\":case\"touchcancel\":case\"touchend\":case\"touchstart\":case\"volumechange\":case\"change\":case\"selectionchange\":case\"textInput\":case\"compositionstart\":case\"compositionend\":case\"compositionupdate\":case\"beforeblur\":case\"afterblur\":case\"beforeinput\":case\"blur\":case\"fullscreenchange\":case\"focus\":case\"hashchange\":case\"popstate\":case\"select\":case\"selectstart\":return 2;case\"drag\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"mousemove\":case\"mouseout\":case\"mouseover\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"scroll\":case\"touchmove\":case\"wheel\":case\"mouseenter\":case\"mouseleave\":case\"pointerenter\":case\"pointerleave\":return 8;case\"message\":switch(eo()){case ea:return 2;case ei:return 8;case el:case es:return 32;case ec:return 0x10000000;default:return 32}default:return 32}}var uf=!1,up=null,uh=null,um=null,ug=new Map,uy=new Map,uv=[],ub=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\" \");function uA(e,t){switch(e){case\"focusin\":case\"focusout\":up=null;break;case\"dragenter\":case\"dragleave\":uh=null;break;case\"mouseover\":case\"mouseout\":um=null;break;case\"pointerover\":case\"pointerout\":ug.delete(t.pointerId);break;case\"gotpointercapture\":case\"lostpointercapture\":uy.delete(t.pointerId)}}function ux(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&null!==(t=eV(t))&&un(t)):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o)),e}function uw(e){var t=eH(e.target);if(null!==t){var n=s(t);if(null!==n){if(13===(t=n.tag)){if(null!==(t=c(n))){e.blockedOn=t,eT(e.priority,function(){ur(n)});return}}else if(31===t){if(null!==(t=u(n))){e.blockedOn=t,eT(e.priority,function(){ur(n)});return}}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=3===n.tag?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function uC(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=us(e.nativeEvent);if(null!==n)return null!==(t=eV(n))&&un(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);ty=r,n.target.dispatchEvent(r),ty=null,t.shift()}return!0}function u_(e,t,n){uC(e)&&n.delete(t)}function uk(){uf=!1,null!==up&&uC(up)&&(up=null),null!==uh&&uC(uh)&&(uh=null),null!==um&&uC(um)&&(um=null),ug.forEach(u_),uy.forEach(u_)}function uE(e,t){e.blockedOn===t&&(e.blockedOn=null,uf||(uf=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,uk)))}var uj=null;function uS(e){uj!==e&&(uj=e,o.unstable_scheduleCallback(o.unstable_NormalPriority,function(){uj===e&&(uj=null);for(var t=0;t<e.length;t+=3){var n=e[t],r=e[t+1],o=e[t+2];if(\"function\"!=typeof r)if(null===uu(r||n))continue;else break;var a=eV(n);null!==a&&(e.splice(t,3),t-=3,aX(a,{pending:!0,data:o,method:n.method,action:r},r,o))}}))}function uO(e){function t(t){return uE(t,e)}null!==up&&uE(up,e),null!==uh&&uE(uh,e),null!==um&&uE(um,e),ug.forEach(t),uy.forEach(t);for(var n=0;n<uv.length;n++){var r=uv[n];r.blockedOn===e&&(r.blockedOn=null)}for(;0<uv.length&&null===(n=uv[0]).blockedOn;)uw(n),null===n.blockedOn&&uv.shift();if(null!=(n=(e.ownerDocument||e).$$reactFormReplay))for(r=0;r<n.length;r+=3){var o=n[r],a=n[r+1],i=o[eL]||null;if(\"function\"==typeof a)i||uS(n);else if(i){var l=null;if(a&&a.hasAttribute(\"formAction\")){if(o=a,i=a[eL]||null)l=i.formAction;else if(null!==uu(o))continue}else l=i.action;\"function\"==typeof l?n[r+1]=l:(n.splice(r,3),r-=3),uS(n)}}}function uB(){function e(e){e.canIntercept&&\"react-transition\"===e.info&&e.intercept({handler:function(){return new Promise(function(e){return o=e})},focusReset:\"manual\",scroll:\"manual\"})}function t(){null!==o&&(o(),o=null),r||setTimeout(n,20)}function n(){if(!r&&!navigation.transition){var e=navigation.currentEntry;e&&null!=e.url&&navigation.navigate(e.url,{state:e.getState(),info:\"react-transition\",history:\"replace\"})}}if(\"object\"==typeof navigation){var r=!1,o=null;return navigation.addEventListener(\"navigate\",e),navigation.addEventListener(\"navigatesuccess\",t),navigation.addEventListener(\"navigateerror\",t),setTimeout(n,100),function(){r=!0,navigation.removeEventListener(\"navigate\",e),navigation.removeEventListener(\"navigatesuccess\",t),navigation.removeEventListener(\"navigateerror\",t),null!==o&&(o(),o=null)}}}function uP(e){this._internalRoot=e}function uI(e){this._internalRoot=e}uI.prototype.render=uP.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(l(409));c7(t.current,sr(),e,t,null,null)},uI.prototype.unmount=uP.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;c7(e.current,2,null,e,null,null),sc(),t[eN]=null}},uI.prototype.unstable_scheduleHydration=function(e){if(e){var t=eI();e={blockedOn:null,target:e,priority:t};for(var n=0;n<uv.length&&0!==t&&t<uv[n].priority;n++);uv.splice(n,0,e),0===n&&uw(e)}};var uT=a.version;if(\"19.2.0-canary-0bdb9206-20250818\"!==uT)throw Error(l(527,uT,\"19.2.0-canary-0bdb9206-20250818\"));if(T.findDOMNode=function(e){var t=e._reactInternals;if(void 0===t){if(\"function\"==typeof e.render)throw Error(l(188));throw Error(l(268,e=Object.keys(e).join(\",\")))}return e=null===(e=null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=s(e)))throw Error(l(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return d(o),e;if(a===r)return d(o),t;a=a.sibling}throw Error(l(188))}if(n.return!==r.return)n=o,r=a;else{for(var i=!1,c=o.child;c;){if(c===n){i=!0,n=o,r=a;break}if(c===r){i=!0,r=o,n=a;break}c=c.sibling}if(!i){for(c=a.child;c;){if(c===n){i=!0,n=a,r=o;break}if(c===r){i=!0,r=a,n=o;break}c=c.sibling}if(!i)throw Error(l(189))}}if(n.alternate!==r)throw Error(l(190))}if(3!==n.tag)throw Error(l(188));return n.stateNode.current===n?e:t}(t))?function e(t){var n=t.tag;if(5===n||26===n||27===n||6===n)return t;for(t=t.child;null!==t;){if(null!==(n=e(t)))return n;t=t.sibling}return null}(e):null)?null:e.stateNode},\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var uz=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!uz.isDisabled&&uz.supportsFiber)try{ef=uz.inject({bundleType:0,version:\"19.2.0-canary-0bdb9206-20250818\",rendererPackageName:\"react-dom\",currentDispatcherRef:I,reconcilerVersion:\"19.2.0-canary-0bdb9206-20250818\"}),ep=uz}catch(e){}}t.createRoot=function(e,t){if(!(n=e)||1!==n.nodeType&&9!==n.nodeType&&11!==n.nodeType)throw Error(l(299));var n,r,o,a,i,s,c,u,d=!1,f=\"\",p=iu,h=id,m=ip;return null!=t&&(!0===t.unstable_strictMode&&(d=!0),void 0!==t.identifierPrefix&&(f=t.identifierPrefix),void 0!==t.onUncaughtError&&(p=t.onUncaughtError),void 0!==t.onCaughtError&&(h=t.onCaughtError),void 0!==t.onRecoverableError&&(m=t.onRecoverableError)),r=e,o=1,a=!1,i=null,s=0,c=d,u=null,r=new c8(r,o,a,f,p,h,m,uB,null),o=1,!0===c&&(o|=24),c=re(3,null,null,o),r.current=c,c.stateNode=r,o=r1(),o.refCount++,r.pooledCache=o,o.refCount++,c.memoizedState={element:null,isDehydrated:a,cache:o},ow(c),t=r,e[eN]=t.current,s9(e),new uP(t)}},\"./dist/compiled/react-dom/cjs/react-dom.production.js\":function(e,t,n){\"use strict\";var r=n(\"./dist/compiled/react/index.js\");function o(e){var t=\"https://react.dev/errors/\"+e;if(1<arguments.length){t+=\"?args[]=\"+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=\"&args[]=\"+encodeURIComponent(arguments[n])}return\"Minified React error #\"+e+\"; visit \"+t+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}function a(){}var i={d:{f:a,r:function(){throw Error(o(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},l=Symbol.for(\"react.portal\"),s=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function c(e,t){return\"font\"===e?\"\":\"string\"==typeof t?\"use-credentials\"===t?t:\"\":void 0}t.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!t||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType)throw Error(o(299));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:l,key:null==r?null:\"\"+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.flushSync=function(e){var t=s.T,n=i.p;try{if(s.T=null,i.p=2,e)return e()}finally{s.T=t,i.p=n,i.d.f()}},t.preconnect=function(e,t){\"string\"==typeof e&&(t=t?\"string\"==typeof(t=t.crossOrigin)?\"use-credentials\"===t?t:\"\":void 0:null,i.d.C(e,t))},t.prefetchDNS=function(e){\"string\"==typeof e&&i.d.D(e)},t.preinit=function(e,t){if(\"string\"==typeof e&&t&&\"string\"==typeof t.as){var n=t.as,r=c(n,t.crossOrigin),o=\"string\"==typeof t.integrity?t.integrity:void 0,a=\"string\"==typeof t.fetchPriority?t.fetchPriority:void 0;\"style\"===n?i.d.S(e,\"string\"==typeof t.precedence?t.precedence:void 0,{crossOrigin:r,integrity:o,fetchPriority:a}):\"script\"===n&&i.d.X(e,{crossOrigin:r,integrity:o,fetchPriority:a,nonce:\"string\"==typeof t.nonce?t.nonce:void 0})}},t.preinitModule=function(e,t){if(\"string\"==typeof e)if(\"object\"==typeof t&&null!==t){if(null==t.as||\"script\"===t.as){var n=c(t.as,t.crossOrigin);i.d.M(e,{crossOrigin:n,integrity:\"string\"==typeof t.integrity?t.integrity:void 0,nonce:\"string\"==typeof t.nonce?t.nonce:void 0})}}else null==t&&i.d.M(e)},t.preload=function(e,t){if(\"string\"==typeof e&&\"object\"==typeof t&&null!==t&&\"string\"==typeof t.as){var n=t.as,r=c(n,t.crossOrigin);i.d.L(e,n,{crossOrigin:r,integrity:\"string\"==typeof t.integrity?t.integrity:void 0,nonce:\"string\"==typeof t.nonce?t.nonce:void 0,type:\"string\"==typeof t.type?t.type:void 0,fetchPriority:\"string\"==typeof t.fetchPriority?t.fetchPriority:void 0,referrerPolicy:\"string\"==typeof t.referrerPolicy?t.referrerPolicy:void 0,imageSrcSet:\"string\"==typeof t.imageSrcSet?t.imageSrcSet:void 0,imageSizes:\"string\"==typeof t.imageSizes?t.imageSizes:void 0,media:\"string\"==typeof t.media?t.media:void 0})}},t.preloadModule=function(e,t){if(\"string\"==typeof e)if(t){var n=c(t.as,t.crossOrigin);i.d.m(e,{as:\"string\"==typeof t.as&&\"script\"!==t.as?t.as:void 0,crossOrigin:n,integrity:\"string\"==typeof t.integrity?t.integrity:void 0})}else i.d.m(e)},t.requestFormReset=function(e){i.d.r(e)},t.unstable_batchedUpdates=function(e,t){return e(t)},t.useFormState=function(e,t,n){return s.H.useFormState(e,t,n)},t.useFormStatus=function(){return s.H.useHostTransitionStatus()},t.version=\"19.2.0-canary-0bdb9206-20250818\"},\"./dist/compiled/react-dom/client.js\":function(e,t,n){\"use strict\";!function e(){if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=n(\"./dist/compiled/react-dom/cjs/react-dom-client.production.js\")},\"./dist/compiled/react-dom/index.js\":function(e,t,n){\"use strict\";!function e(){if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=n(\"./dist/compiled/react-dom/cjs/react-dom.production.js\")},\"./dist/compiled/react/cjs/react-compiler-runtime.production.js\":function(e,t,n){\"use strict\";var r=n(\"./dist/compiled/react/index.js\").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;t.c=function(e){return r.H.useMemoCache(e)}},\"./dist/compiled/react/cjs/react-jsx-runtime.production.js\":function(e,t){\"use strict\";var n=Symbol.for(\"react.transitional.element\");function r(e,t,r){var o=null;if(void 0!==r&&(o=\"\"+r),void 0!==t.key&&(o=\"\"+t.key),\"key\"in t)for(var a in r={},t)\"key\"!==a&&(r[a]=t[a]);else r=t;return{$$typeof:n,type:e,key:o,ref:void 0!==(t=r.ref)?t:null,props:r}}t.Fragment=Symbol.for(\"react.fragment\"),t.jsx=r,t.jsxs=r},\"./dist/compiled/react/cjs/react.production.js\":function(e,t){\"use strict\";var n=Symbol.for(\"react.transitional.element\"),r=Symbol.for(\"react.portal\"),o=Symbol.for(\"react.fragment\"),a=Symbol.for(\"react.strict_mode\"),i=Symbol.for(\"react.profiler\"),l=Symbol.for(\"react.consumer\"),s=Symbol.for(\"react.context\"),c=Symbol.for(\"react.forward_ref\"),u=Symbol.for(\"react.suspense\"),d=Symbol.for(\"react.memo\"),f=Symbol.for(\"react.lazy\"),p=Symbol.iterator,h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,g={};function y(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||h}function v(){}function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||h}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if(\"object\"!=typeof e&&\"function\"!=typeof e&&null!=e)throw Error(\"takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,e,t,\"setState\")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")},v.prototype=y.prototype;var A=b.prototype=new v;A.constructor=b,m(A,y.prototype),A.isPureReactComponent=!0;var x=Array.isArray;function w(){}var C={H:null,A:null,T:null,S:null},_=Object.prototype.hasOwnProperty;function k(e,t,r){var o=r.ref;return{$$typeof:n,type:e,key:t,ref:void 0!==o?o:null,props:r}}function E(e){return\"object\"==typeof e&&null!==e&&e.$$typeof===n}var j=/\\/+/g;function S(e,t){var n,r;return\"object\"==typeof e&&null!==e&&null!=e.key?(n=\"\"+e.key,r={\"=\":\"=0\",\":\":\"=2\"},\"$\"+n.replace(/[=:]/g,function(e){return r[e]})):t.toString(36)}function O(e,t,o){if(null==e)return e;var a=[],i=0;return!function e(t,o,a,i,l){var s,c,u,d=typeof t;(\"undefined\"===d||\"boolean\"===d)&&(t=null);var h=!1;if(null===t)h=!0;else switch(d){case\"bigint\":case\"string\":case\"number\":h=!0;break;case\"object\":switch(t.$$typeof){case n:case r:h=!0;break;case f:return e((h=t._init)(t._payload),o,a,i,l)}}if(h)return l=l(t),h=\"\"===i?\".\"+S(t,0):i,x(l)?(a=\"\",null!=h&&(a=h.replace(j,\"$&/\")+\"/\"),e(l,o,a,\"\",function(e){return e})):null!=l&&(E(l)&&(s=l,c=a+(null==l.key||t&&t.key===l.key?\"\":(\"\"+l.key).replace(j,\"$&/\")+\"/\")+h,l=k(s.type,c,s.props)),o.push(l)),1;h=0;var m=\"\"===i?\".\":i+\":\";if(x(t))for(var g=0;g<t.length;g++)d=m+S(i=t[g],g),h+=e(i,o,a,d,l);else if(\"function\"==typeof(g=null===(u=t)||\"object\"!=typeof u?null:\"function\"==typeof(u=p&&u[p]||u[\"@@iterator\"])?u:null))for(t=g.call(t),g=0;!(i=t.next()).done;)d=m+S(i=i.value,g++),h+=e(i,o,a,d,l);else if(\"object\"===d){if(\"function\"==typeof t.then)return e(function(e){switch(e.status){case\"fulfilled\":return e.value;case\"rejected\":throw e.reason;default:switch(\"string\"==typeof e.status?e.then(w,w):(e.status=\"pending\",e.then(function(t){\"pending\"===e.status&&(e.status=\"fulfilled\",e.value=t)},function(t){\"pending\"===e.status&&(e.status=\"rejected\",e.reason=t)})),e.status){case\"fulfilled\":return e.value;case\"rejected\":throw e.reason}}throw e}(t),o,a,i,l);throw Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===(o=String(t))?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":o)+\"). If you meant to render a collection of children, use an array instead.\")}return h}(e,a,\"\",\"\",function(e){return t.call(o,e,i++)}),a}function B(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t){(0===e._status||-1===e._status)&&(e._status=1,e._result=t)},function(t){(0===e._status||-1===e._status)&&(e._status=2,e._result=t)}),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var P=\"function\"==typeof reportError?reportError:function(e){if(\"object\"==typeof window&&\"function\"==typeof window.ErrorEvent){var t=new window.ErrorEvent(\"error\",{bubbles:!0,cancelable:!0,message:\"object\"==typeof e&&null!==e&&\"string\"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(\"object\"==typeof process&&\"function\"==typeof process.emit)return void process.emit(\"uncaughtException\",e);console.error(e)};t.Children={map:O,forEach:function(e,t,n){O(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return O(e,function(){t++}),t},toArray:function(e){return O(e,function(e){return e})||[]},only:function(e){if(!E(e))throw Error(\"React.Children.only expected to receive a single React element child.\");return e}},t.Component=y,t.Fragment=o,t.Profiler=i,t.PureComponent=b,t.StrictMode=a,t.Suspense=u,t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=C,t.__COMPILER_RUNTIME={__proto__:null,c:function(e){return C.H.useMemoCache(e)}},t.cache=function(e){return function(){return e.apply(null,arguments)}},t.cacheSignal=function(){return null},t.cloneElement=function(e,t,n){if(null==e)throw Error(\"The argument must be a React element, but you passed \"+e+\".\");var r=m({},e.props),o=e.key;if(null!=t)for(a in void 0!==t.key&&(o=\"\"+t.key),t)_.call(t,a)&&\"key\"!==a&&\"__self\"!==a&&\"__source\"!==a&&(\"ref\"!==a||void 0!==t.ref)&&(r[a]=t[a]);var a=arguments.length-2;if(1===a)r.children=n;else if(1<a){for(var i=Array(a),l=0;l<a;l++)i[l]=arguments[l+2];r.children=i}return k(e.type,o,r)},t.createContext=function(e){return(e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:l,_context:e},e},t.createElement=function(e,t,n){var r,o={},a=null;if(null!=t)for(r in void 0!==t.key&&(a=\"\"+t.key),t)_.call(t,r)&&\"key\"!==r&&\"__self\"!==r&&\"__source\"!==r&&(o[r]=t[r]);var i=arguments.length-2;if(1===i)o.children=n;else if(1<i){for(var l=Array(i),s=0;s<i;s++)l[s]=arguments[s+2];o.children=l}if(e&&e.defaultProps)for(r in i=e.defaultProps)void 0===o[r]&&(o[r]=i[r]);return k(e,a,o)},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=E,t.lazy=function(e){return{$$typeof:f,_payload:{_status:-1,_result:e},_init:B}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=C.T,n={};C.T=n;try{var r=e(),o=C.S;null!==o&&o(n,r),\"object\"==typeof r&&null!==r&&\"function\"==typeof r.then&&r.then(w,P)}catch(e){P(e)}finally{null!==t&&null!==n.types&&(t.types=n.types),C.T=t}},t.unstable_useCacheRefresh=function(){return C.H.useCacheRefresh()},t.use=function(e){return C.H.use(e)},t.useActionState=function(e,t,n){return C.H.useActionState(e,t,n)},t.useCallback=function(e,t){return C.H.useCallback(e,t)},t.useContext=function(e){return C.H.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e,t){return C.H.useDeferredValue(e,t)},t.useEffect=function(e,t){return C.H.useEffect(e,t)},t.useId=function(){return C.H.useId()},t.useImperativeHandle=function(e,t,n){return C.H.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return C.H.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return C.H.useLayoutEffect(e,t)},t.useMemo=function(e,t){return C.H.useMemo(e,t)},t.useOptimistic=function(e,t){return C.H.useOptimistic(e,t)},t.useReducer=function(e,t,n){return C.H.useReducer(e,t,n)},t.useRef=function(e){return C.H.useRef(e)},t.useState=function(e){return C.H.useState(e)},t.useSyncExternalStore=function(e,t,n){return C.H.useSyncExternalStore(e,t,n)},t.useTransition=function(){return C.H.useTransition()},t.version=\"19.2.0-canary-0bdb9206-20250818\"},\"./dist/compiled/react/compiler-runtime.js\":function(e,t,n){\"use strict\";e.exports=n(\"./dist/compiled/react/cjs/react-compiler-runtime.production.js\")},\"./dist/compiled/react/index.js\":function(e,t,n){\"use strict\";e.exports=n(\"./dist/compiled/react/cjs/react.production.js\")},\"./dist/compiled/react/jsx-runtime.js\":function(e,t,n){\"use strict\";e.exports=n(\"./dist/compiled/react/cjs/react-jsx-runtime.production.js\")},\"./dist/compiled/scheduler/cjs/scheduler.production.js\":function(e,t){\"use strict\";function n(e,t){var n=e.length;for(e.push(t);0<n;){var r=n-1>>>1,o=e[r];if(0<a(o,t))e[r]=t,e[n]=o,n=r;else break}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;for(var r=0,o=e.length,i=o>>>1;r<i;){var l=2*(r+1)-1,s=e[l],c=l+1,u=e[c];if(0>a(s,n))c<o&&0>a(u,s)?(e[r]=u,e[c]=n,r=c):(e[r]=s,e[l]=n,r=l);else if(c<o&&0>a(u,n))e[r]=u,e[c]=n,r=c;else break}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if(t.unstable_now=void 0,\"object\"==typeof performance&&\"function\"==typeof performance.now){var i,l=performance;t.unstable_now=function(){return l.now()}}else{var s=Date,c=s.now();t.unstable_now=function(){return s.now()-c}}var u=[],d=[],f=1,p=null,h=3,m=!1,g=!1,y=!1,v=!1,b=\"function\"==typeof setTimeout?setTimeout:null,A=\"function\"==typeof clearTimeout?clearTimeout:null,x=\"undefined\"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(d);null!==t;){if(null===t.callback)o(d);else if(t.startTime<=e)o(d),t.sortIndex=t.expirationTime,n(u,t);else break;t=r(d)}}function C(e){if(y=!1,w(e),!g)if(null!==r(u))g=!0,_||(_=!0,i());else{var t=r(d);null!==t&&I(C,t.startTime-e)}}var _=!1,k=-1,E=5,j=-1;function S(){return!!v||!(t.unstable_now()-j<E)}function O(){if(v=!1,_){var e=t.unstable_now();j=e;var n=!0;try{e:{g=!1,y&&(y=!1,A(k),k=-1),m=!0;var a=h;try{t:{for(w(e),p=r(u);null!==p&&!(p.expirationTime>e&&S());){var l=p.callback;if(\"function\"==typeof l){p.callback=null,h=p.priorityLevel;var s=l(p.expirationTime<=e);if(e=t.unstable_now(),\"function\"==typeof s){p.callback=s,w(e),n=!0;break t}p===r(u)&&o(u),w(e)}else o(u);p=r(u)}if(null!==p)n=!0;else{var c=r(d);null!==c&&I(C,c.startTime-e),n=!1}}break e}finally{p=null,h=a,m=!1}}}finally{n?i():_=!1}}}if(\"function\"==typeof x)i=function(){x(O)};else if(\"undefined\"!=typeof MessageChannel){var B=new MessageChannel,P=B.port2;B.port1.onmessage=O,i=function(){P.postMessage(null)}}else i=function(){b(O,0)};function I(e,n){k=b(function(){e(t.unstable_now())},n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):E=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return h},t.unstable_next=function(e){switch(h){case 1:case 2:case 3:var t=3;break;default:t=h}var n=h;h=t;try{return e()}finally{h=n}},t.unstable_requestPaint=function(){v=!0},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=h;h=e;try{return t()}finally{h=n}},t.unstable_scheduleCallback=function(e,o,a){var l=t.unstable_now();switch(a=\"object\"==typeof a&&null!==a&&\"number\"==typeof(a=a.delay)&&0<a?l+a:l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=0x3fffffff;break;case 4:s=1e4;break;default:s=5e3}return s=a+s,e={id:f++,callback:o,priorityLevel:e,startTime:a,expirationTime:s,sortIndex:-1},a>l?(e.sortIndex=a,n(d,e),null===r(u)&&e===r(d)&&(y?(A(k),k=-1):y=!0,I(C,a-l))):(e.sortIndex=s,n(u,e),g||m||(g=!0,_||(_=!0,i()))),e},t.unstable_shouldYield=S,t.unstable_wrapCallback=function(e){var t=h;return function(){var n=h;h=t;try{return e.apply(this,arguments)}finally{h=n}}}},\"./dist/compiled/scheduler/index.js\":function(e,t,n){\"use strict\";e.exports=n(\"./dist/compiled/scheduler/cjs/scheduler.production.js\")},\"./dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\":function(e){(()=>{\"use strict\";\"undefined\"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=\"//\");var t,n,r,o,a,i,l,s,c={};Object.defineProperty(c,\"__esModule\",{value:!0}),t=\"<unknown>\",n=/^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|webpack-internal|rsc|about|turbopack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,r=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,o=/^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|webpack-internal|rsc|about|turbopack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,a=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|webpack-internal|rsc|about|turbopack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,i=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,l=/^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i,s=/^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,c.parse=function(e){return e.split(\"\\n\").reduce(function(e,c){var u,d,f,p,h,m,g=function(e){var o=n.exec(e);if(!o)return null;var a=o[2]&&0===o[2].indexOf(\"native\"),i=o[2]&&0===o[2].indexOf(\"eval\"),l=r.exec(o[2]);return i&&null!=l&&(o[2]=l[1],o[3]=l[2],o[4]=l[3]),{file:a?null:o[2],methodName:o[1]||t,arguments:a?[o[2]]:[],lineNumber:o[3]?+o[3]:null,column:o[4]?+o[4]:null}}(c)||(u=c,(d=o.exec(u))?{file:d[2],methodName:d[1]||t,arguments:[],lineNumber:+d[3],column:d[4]?+d[4]:null}:null)||function(e){var n=a.exec(e);if(!n)return null;var r=n[3]&&n[3].indexOf(\" > eval\")>-1,o=i.exec(n[3]);return r&&null!=o&&(n[3]=o[1],n[4]=o[2],n[5]=null),{file:n[3],methodName:n[1]||t,arguments:n[2]?n[2].split(\",\"):[],lineNumber:n[4]?+n[4]:null,column:n[5]?+n[5]:null}}(c)||(f=c,(p=s.exec(f))?{file:p[2],methodName:p[1]||t,arguments:[],lineNumber:+p[3],column:p[4]?+p[4]:null}:null)||(h=c,(m=l.exec(h))?{file:m[3],methodName:m[1]||t,arguments:[],lineNumber:+m[4],column:m[5]?+m[5]:null}:null);return g&&e.push(g),e},[])},e.exports=c})()},\"./dist/compiled/strip-ansi/index.js\":function(e){(()=>{\"use strict\";var t={511:e=>{e.exports=({onlyFirst:e=!1}={})=>RegExp(\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)|(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\",e?void 0:\"g\")},532:(e,t,n)=>{let r=n(511);e.exports=e=>\"string\"==typeof e?e.replace(r(),\"\"):e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var a=n[e]={exports:{}},i=!0;try{t[e](a,a.exports,r),i=!1}finally{i&&delete n[e]}return a.exports}r.ab=\"//\",e.exports=r(532)})()},\"./src/build/webpack/loaders/devtool/devtool-style-inject.js\":function(e){function t(){let e=window._nextjsDevtoolsStyleCache;if(e.cachedShadowRoot)return e.cachedShadowRoot;let t=document.querySelector(\"nextjs-portal\"),n=t?.shadowRoot||null;return n&&(e.cachedShadowRoot=n),n}function n(e,t){let n=window._nextjsDevtoolsStyleCache;n.lastInsertedElement?n.lastInsertedElement.nextSibling?t.insertBefore(e,n.lastInsertedElement.nextSibling):t.appendChild(e):t.insertBefore(e,t.firstChild),n.lastInsertedElement=e}function r(){let e=window._nextjsDevtoolsStyleCache,r=t();r&&(e.pendingElements.forEach(e=>{n(e,r)}),e.pendingElements=[])}\"undefined\"!=typeof window&&(window._nextjsDevtoolsStyleCache=window._nextjsDevtoolsStyleCache||{pendingElements:[],isObserving:!1,lastInsertedElement:null,cachedShadowRoot:null}),e.exports=function(e){e.setAttribute(\"data-nextjs-dev-tool-style\",\"true\");let o=t();o?n(e,o):(window._nextjsDevtoolsStyleCache.pendingElements.push(e),function(){let e=window._nextjsDevtoolsStyleCache;if(e.isObserving)return;if(e.isObserving=!0,t())return r();let n=new MutationObserver(o=>{if(0!==o.length){for(let a of o)if(0!==a.addedNodes.length)for(let o of a.addedNodes){if(o.nodeType!==Node.ELEMENT_NODE)continue;let a=null;if(\"SCRIPT\"===o.tagName&&o.getAttribute(\"data-nextjs-dev-overlay\")?a=o.firstChild:\"NEXTJS-PORTAL\"===o.tagName&&(a=o),a){let o=()=>{t()?(r(),n.disconnect(),e.isObserving=!1):setTimeout(o,20)};o();return}}}});n.observe(document.body,{childList:!0,subtree:!0})}())}},\"./dist/compiled/zod/index.cjs\":function(e){(()=>{\"use strict\";var t={629:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__exportStar||function(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,\"__esModule\",{value:!0}),t.z=void 0;let l=a(n(923));t.z=l,i(n(923),t),t.default=l},348:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ZodError=t.quotelessJson=t.ZodIssueCode=void 0;let r=n(709);t.ZodIssueCode=r.util.arrayToEnum([\"invalid_type\",\"invalid_literal\",\"custom\",\"invalid_union\",\"invalid_union_discriminator\",\"invalid_enum_value\",\"unrecognized_keys\",\"invalid_arguments\",\"invalid_return_type\",\"invalid_date\",\"invalid_string\",\"too_small\",\"too_big\",\"invalid_intersection_types\",\"not_multiple_of\",\"not_finite\"]),t.quotelessJson=e=>JSON.stringify(e,null,2).replace(/\"([^\"]+)\":/g,\"$1:\");class o extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name=\"ZodError\",this.issues=e}format(e){let t=e||function(e){return e.message},n={_errors:[]},r=e=>{for(let o of e.issues)if(\"invalid_union\"===o.code)o.unionErrors.map(r);else if(\"invalid_return_type\"===o.code)r(o.returnTypeError);else if(\"invalid_arguments\"===o.code)r(o.argumentsError);else if(0===o.path.length)n._errors.push(t(o));else{let e=n,r=0;for(;r<o.path.length;){let n=o.path[r];r===o.path.length-1?(e[n]=e[n]||{_errors:[]},e[n]._errors.push(t(o))):e[n]=e[n]||{_errors:[]},e=e[n],r++}}};return r(this),n}static assert(e){if(!(e instanceof o))throw Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,r.util.jsonStringifyReplacer,2)}get isEmpty(){return 0===this.issues.length}flatten(e=e=>e.message){let t={},n=[];for(let r of this.issues)if(r.path.length>0){let n=r.path[0];t[n]=t[n]||[],t[n].push(e(r))}else n.push(e(r));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}}t.ZodError=o,o.create=e=>new o(e)},61:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.defaultErrorMap=void 0,t.setErrorMap=function(e){a=e},t.getErrorMap=function(){return a};let o=r(n(871));t.defaultErrorMap=o.default;let a=o.default},923:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,\"__esModule\",{value:!0}),o(n(61),t),o(n(818),t),o(n(515),t),o(n(709),t),o(n(155),t),o(n(348),t)},538:(e,t)=>{var n,r;Object.defineProperty(t,\"__esModule\",{value:!0}),t.errorUtil=void 0,(r=n||(t.errorUtil=n={})).errToObj=e=>\"string\"==typeof e?{message:e}:e||{},r.toString=e=>\"string\"==typeof e?e:e?.message},818:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.isAsync=t.isValid=t.isDirty=t.isAborted=t.OK=t.DIRTY=t.INVALID=t.ParseStatus=t.EMPTY_PATH=t.makeIssue=void 0,t.addIssueToContext=function(e,n){let r=(0,o.getErrorMap)(),i=(0,t.makeIssue)({issueData:n,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,r,r===a.default?void 0:a.default].filter(e=>!!e)});e.common.issues.push(i)};let o=n(61),a=r(n(871));t.makeIssue=e=>{let{data:t,path:n,errorMaps:r,issueData:o}=e,a=[...n,...o.path||[]],i={...o,path:a};if(void 0!==o.message)return{...o,path:a,message:o.message};let l=\"\";for(let e of r.filter(e=>!!e).slice().reverse())l=e(i,{data:t,defaultError:l}).message;return{...o,path:a,message:l}},t.EMPTY_PATH=[];class i{constructor(){this.value=\"valid\"}dirty(){\"valid\"===this.value&&(this.value=\"dirty\")}abort(){\"aborted\"!==this.value&&(this.value=\"aborted\")}static mergeArray(e,n){let r=[];for(let o of n){if(\"aborted\"===o.status)return t.INVALID;\"dirty\"===o.status&&e.dirty(),r.push(o.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,t){let n=[];for(let e of t){let t=await e.key,r=await e.value;n.push({key:t,value:r})}return i.mergeObjectSync(e,n)}static mergeObjectSync(e,n){let r={};for(let o of n){let{key:n,value:a}=o;if(\"aborted\"===n.status||\"aborted\"===a.status)return t.INVALID;\"dirty\"===n.status&&e.dirty(),\"dirty\"===a.status&&e.dirty(),\"__proto__\"!==n.value&&(void 0!==a.value||o.alwaysSet)&&(r[n.value]=a.value)}return{status:e.value,value:r}}}t.ParseStatus=i,t.INVALID=Object.freeze({status:\"aborted\"}),t.DIRTY=e=>({status:\"dirty\",value:e}),t.OK=e=>({status:\"valid\",value:e}),t.isAborted=e=>\"aborted\"===e.status,t.isDirty=e=>\"dirty\"===e.status,t.isValid=e=>\"valid\"===e.status,t.isAsync=e=>\"undefined\"!=typeof Promise&&e instanceof Promise},515:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0})},709:(e,t)=>{var n,r,o;Object.defineProperty(t,\"__esModule\",{value:!0}),t.getParsedType=t.ZodParsedType=t.objectUtil=t.util=void 0,(o=n||(t.util=n={})).assertEqual=e=>{},o.assertIs=function(e){},o.assertNever=function(e){throw Error()},o.arrayToEnum=e=>{let t={};for(let n of e)t[n]=n;return t},o.getValidEnumValues=e=>{let t=o.objectKeys(e).filter(t=>\"number\"!=typeof e[e[t]]),n={};for(let r of t)n[r]=e[r];return o.objectValues(n)},o.objectValues=e=>o.objectKeys(e).map(function(t){return e[t]}),o.objectKeys=\"function\"==typeof Object.keys?e=>Object.keys(e):e=>{let t=[];for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t},o.find=(e,t)=>{for(let n of e)if(t(n))return n},o.isInteger=\"function\"==typeof Number.isInteger?e=>Number.isInteger(e):e=>\"number\"==typeof e&&Number.isFinite(e)&&Math.floor(e)===e,o.joinValues=function(e,t=\" | \"){return e.map(e=>\"string\"==typeof e?`'${e}'`:e).join(t)},o.jsonStringifyReplacer=(e,t)=>\"bigint\"==typeof t?t.toString():t,(r||(t.objectUtil=r={})).mergeShapes=(e,t)=>({...e,...t}),t.ZodParsedType=n.arrayToEnum([\"string\",\"nan\",\"number\",\"integer\",\"float\",\"boolean\",\"date\",\"bigint\",\"symbol\",\"function\",\"undefined\",\"null\",\"array\",\"object\",\"unknown\",\"promise\",\"void\",\"never\",\"map\",\"set\"]),t.getParsedType=e=>{switch(typeof e){case\"undefined\":return t.ZodParsedType.undefined;case\"string\":return t.ZodParsedType.string;case\"number\":return Number.isNaN(e)?t.ZodParsedType.nan:t.ZodParsedType.number;case\"boolean\":return t.ZodParsedType.boolean;case\"function\":return t.ZodParsedType.function;case\"bigint\":return t.ZodParsedType.bigint;case\"symbol\":return t.ZodParsedType.symbol;case\"object\":if(Array.isArray(e))return t.ZodParsedType.array;if(null===e)return t.ZodParsedType.null;if(e.then&&\"function\"==typeof e.then&&e.catch&&\"function\"==typeof e.catch)return t.ZodParsedType.promise;if(\"undefined\"!=typeof Map&&e instanceof Map)return t.ZodParsedType.map;if(\"undefined\"!=typeof Set&&e instanceof Set)return t.ZodParsedType.set;if(\"undefined\"!=typeof Date&&e instanceof Date)return t.ZodParsedType.date;return t.ZodParsedType.object;default:return t.ZodParsedType.unknown}}},871:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0});let r=n(348),o=n(709);t.default=(e,t)=>{let n;switch(e.code){case r.ZodIssueCode.invalid_type:n=e.received===o.ZodParsedType.undefined?\"Required\":`Expected ${e.expected}, received ${e.received}`;break;case r.ZodIssueCode.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,o.util.jsonStringifyReplacer)}`;break;case r.ZodIssueCode.unrecognized_keys:n=`Unrecognized key(s) in object: ${o.util.joinValues(e.keys,\", \")}`;break;case r.ZodIssueCode.invalid_union:n=\"Invalid input\";break;case r.ZodIssueCode.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${o.util.joinValues(e.options)}`;break;case r.ZodIssueCode.invalid_enum_value:n=`Invalid enum value. Expected ${o.util.joinValues(e.options)}, received '${e.received}'`;break;case r.ZodIssueCode.invalid_arguments:n=\"Invalid function arguments\";break;case r.ZodIssueCode.invalid_return_type:n=\"Invalid function return type\";break;case r.ZodIssueCode.invalid_date:n=\"Invalid date\";break;case r.ZodIssueCode.invalid_string:\"object\"==typeof e.validation?\"includes\"in e.validation?(n=`Invalid input: must include \"${e.validation.includes}\"`,\"number\"==typeof e.validation.position&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):\"startsWith\"in e.validation?n=`Invalid input: must start with \"${e.validation.startsWith}\"`:\"endsWith\"in e.validation?n=`Invalid input: must end with \"${e.validation.endsWith}\"`:o.util.assertNever(e.validation):n=\"regex\"!==e.validation?`Invalid ${e.validation}`:\"Invalid\";break;case r.ZodIssueCode.too_small:n=\"array\"===e.type?`Array must contain ${e.exact?\"exactly\":e.inclusive?\"at least\":\"more than\"} ${e.minimum} element(s)`:\"string\"===e.type?`String must contain ${e.exact?\"exactly\":e.inclusive?\"at least\":\"over\"} ${e.minimum} character(s)`:\"number\"===e.type||\"bigint\"===e.type?`Number must be ${e.exact?\"exactly equal to \":e.inclusive?\"greater than or equal to \":\"greater than \"}${e.minimum}`:\"date\"===e.type?`Date must be ${e.exact?\"exactly equal to \":e.inclusive?\"greater than or equal to \":\"greater than \"}${new Date(Number(e.minimum))}`:\"Invalid input\";break;case r.ZodIssueCode.too_big:n=\"array\"===e.type?`Array must contain ${e.exact?\"exactly\":e.inclusive?\"at most\":\"less than\"} ${e.maximum} element(s)`:\"string\"===e.type?`String must contain ${e.exact?\"exactly\":e.inclusive?\"at most\":\"under\"} ${e.maximum} character(s)`:\"number\"===e.type?`Number must be ${e.exact?\"exactly\":e.inclusive?\"less than or equal to\":\"less than\"} ${e.maximum}`:\"bigint\"===e.type?`BigInt must be ${e.exact?\"exactly\":e.inclusive?\"less than or equal to\":\"less than\"} ${e.maximum}`:\"date\"===e.type?`Date must be ${e.exact?\"exactly\":e.inclusive?\"smaller than or equal to\":\"smaller than\"} ${new Date(Number(e.maximum))}`:\"Invalid input\";break;case r.ZodIssueCode.custom:n=\"Invalid input\";break;case r.ZodIssueCode.invalid_intersection_types:n=\"Intersection results could not be merged\";break;case r.ZodIssueCode.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case r.ZodIssueCode.not_finite:n=\"Number must be finite\";break;default:n=t.defaultError,o.util.assertNever(e)}return{message:n}}},155:(e,t,n)=>{var r,o;let a;Object.defineProperty(t,\"__esModule\",{value:!0}),t.discriminatedUnion=t.date=t.boolean=t.bigint=t.array=t.any=t.coerce=t.ZodFirstPartyTypeKind=t.late=t.ZodSchema=t.Schema=t.ZodReadonly=t.ZodPipeline=t.ZodBranded=t.BRAND=t.ZodNaN=t.ZodCatch=t.ZodDefault=t.ZodNullable=t.ZodOptional=t.ZodTransformer=t.ZodEffects=t.ZodPromise=t.ZodNativeEnum=t.ZodEnum=t.ZodLiteral=t.ZodLazy=t.ZodFunction=t.ZodSet=t.ZodMap=t.ZodRecord=t.ZodTuple=t.ZodIntersection=t.ZodDiscriminatedUnion=t.ZodUnion=t.ZodObject=t.ZodArray=t.ZodVoid=t.ZodNever=t.ZodUnknown=t.ZodAny=t.ZodNull=t.ZodUndefined=t.ZodSymbol=t.ZodDate=t.ZodBoolean=t.ZodBigInt=t.ZodNumber=t.ZodString=t.ZodType=void 0,t.NEVER=t.void=t.unknown=t.union=t.undefined=t.tuple=t.transformer=t.symbol=t.string=t.strictObject=t.set=t.record=t.promise=t.preprocess=t.pipeline=t.ostring=t.optional=t.onumber=t.oboolean=t.object=t.number=t.nullable=t.null=t.never=t.nativeEnum=t.nan=t.map=t.literal=t.lazy=t.intersection=t.instanceof=t.function=t.enum=t.effect=void 0,t.datetimeRegex=I,t.custom=ev;let i=n(348),l=n(61),s=n(538),c=n(818),u=n(709);class d{constructor(e,t,n,r){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}let f=(e,t)=>{if((0,c.isValid)(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error(\"Validation failed but no issues detected.\");return{success:!1,get error(){if(this._error)return this._error;let t=new i.ZodError(e.common.issues);return this._error=t,this._error}}};function p(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:o}=e;if(t&&(n||r))throw Error('Can\\'t use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.');return t?{errorMap:t,description:o}:{errorMap:(t,o)=>{let{message:a}=e;return\"invalid_enum_value\"===t.code?{message:a??o.defaultError}:void 0===o.data?{message:a??r??o.defaultError}:\"invalid_type\"!==t.code?{message:o.defaultError}:{message:a??n??o.defaultError}},description:o}}class h{get description(){return this._def.description}_getType(e){return(0,u.getParsedType)(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:(0,u.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new c.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:(0,u.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if((0,c.isAsync)(t))throw Error(\"Synchronous parse encountered promise.\");return t}_parseAsync(e){return Promise.resolve(this._parse(e))}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,u.getParsedType)(e)},r=this._parseSync({data:e,path:n.path,parent:n});return f(n,r)}\"~validate\"(e){let t={common:{issues:[],async:!!this[\"~standard\"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,u.getParsedType)(e)};if(!this[\"~standard\"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return(0,c.isValid)(n)?{value:n.value}:{issues:t.common.issues}}catch(e){e?.message?.toLowerCase()?.includes(\"encountered\")&&(this[\"~standard\"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(e=>(0,c.isValid)(e)?{value:e.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,u.getParsedType)(e)},r=this._parse({data:e,path:n.path,parent:n});return f(n,await ((0,c.isAsync)(r)?r:Promise.resolve(r)))}refine(e,t){return this._refinement((n,r)=>{let o=e(n),a=()=>r.addIssue({code:i.ZodIssueCode.custom,...\"string\"==typeof t||void 0===t?{message:t}:\"function\"==typeof t?t(n):t});return\"undefined\"!=typeof Promise&&o instanceof Promise?o.then(e=>!!e||(a(),!1)):!!o||(a(),!1)})}refinement(e,t){return this._refinement((n,r)=>!!e(n)||(r.addIssue(\"function\"==typeof t?t(n,r):t),!1))}_refinement(e){return new es({schema:this,typeName:r.ZodEffects,effect:{type:\"refinement\",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this[\"~standard\"]={version:1,vendor:\"zod\",validate:e=>this[\"~validate\"](e)}}optional(){return ec.create(this,this._def)}nullable(){return eu.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return V.create(this)}promise(){return el.create(this,this._def)}or(e){return W.create([this,e],this._def)}and(e){return X.create(this,e,this._def)}transform(e){return new es({...p(this._def),schema:this,typeName:r.ZodEffects,effect:{type:\"transform\",transform:e}})}default(e){return new ed({...p(this._def),innerType:this,defaultValue:\"function\"==typeof e?e:()=>e,typeName:r.ZodDefault})}brand(){return new eh({typeName:r.ZodBranded,type:this,...p(this._def)})}catch(e){return new ef({...p(this._def),innerType:this,catchValue:\"function\"==typeof e?e:()=>e,typeName:r.ZodCatch})}describe(e){return new this.constructor({...this._def,description:e})}pipe(e){return em.create(this,e)}readonly(){return eg.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}t.ZodType=h,t.Schema=h,t.ZodSchema=h;let m=/^c[^\\s-]{8,}$/i,g=/^[0-9a-z]+$/,y=/^[0-9A-HJKMNP-TV-Z]{26}$/i,v=/^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i,b=/^[a-z0-9_-]{21}$/i,A=/^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,x=/^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/,w=/^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i,C=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,_=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,k=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,E=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,j=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,S=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,O=\"((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))\",B=RegExp(`^${O}$`);function P(e){let t=\"[0-5]\\\\d\";e.precision?t=`${t}\\\\.\\\\d{${e.precision}}`:null==e.precision&&(t=`${t}(\\\\.\\\\d+)?`);let n=e.precision?\"+\":\"?\";return`([01]\\\\d|2[0-3]):[0-5]\\\\d(:${t})${n}`}function I(e){let t=`${O}T${P(e)}`,n=[];return n.push(e.local?\"Z?\":\"Z\"),e.offset&&n.push(\"([+-]\\\\d{2}:?\\\\d{2})\"),t=`${t}(${n.join(\"|\")})`,RegExp(`^${t}$`)}class T extends h{_parse(e){var t,n,r,o;let l;if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==u.ZodParsedType.string){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.string,received:t.parsedType}),c.INVALID}let s=new c.ParseStatus;for(let d of this._def.checks)if(\"min\"===d.kind)e.data.length<d.value&&(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{code:i.ZodIssueCode.too_small,minimum:d.value,type:\"string\",inclusive:!0,exact:!1,message:d.message}),s.dirty());else if(\"max\"===d.kind)e.data.length>d.value&&(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{code:i.ZodIssueCode.too_big,maximum:d.value,type:\"string\",inclusive:!0,exact:!1,message:d.message}),s.dirty());else if(\"length\"===d.kind){let t=e.data.length>d.value,n=e.data.length<d.value;(t||n)&&(l=this._getOrReturnCtx(e,l),t?(0,c.addIssueToContext)(l,{code:i.ZodIssueCode.too_big,maximum:d.value,type:\"string\",inclusive:!0,exact:!0,message:d.message}):n&&(0,c.addIssueToContext)(l,{code:i.ZodIssueCode.too_small,minimum:d.value,type:\"string\",inclusive:!0,exact:!0,message:d.message}),s.dirty())}else if(\"email\"===d.kind)w.test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"email\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty());else if(\"emoji\"===d.kind)a||(a=RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\",\"u\")),a.test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"emoji\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty());else if(\"uuid\"===d.kind)v.test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"uuid\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty());else if(\"nanoid\"===d.kind)b.test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"nanoid\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty());else if(\"cuid\"===d.kind)m.test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"cuid\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty());else if(\"cuid2\"===d.kind)g.test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"cuid2\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty());else if(\"ulid\"===d.kind)y.test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"ulid\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty());else if(\"url\"===d.kind)try{new URL(e.data)}catch{l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"url\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty()}else\"regex\"===d.kind?(d.regex.lastIndex=0,d.regex.test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"regex\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty())):\"trim\"===d.kind?e.data=e.data.trim():\"includes\"===d.kind?e.data.includes(d.value,d.position)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{code:i.ZodIssueCode.invalid_string,validation:{includes:d.value,position:d.position},message:d.message}),s.dirty()):\"toLowerCase\"===d.kind?e.data=e.data.toLowerCase():\"toUpperCase\"===d.kind?e.data=e.data.toUpperCase():\"startsWith\"===d.kind?e.data.startsWith(d.value)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{code:i.ZodIssueCode.invalid_string,validation:{startsWith:d.value},message:d.message}),s.dirty()):\"endsWith\"===d.kind?e.data.endsWith(d.value)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{code:i.ZodIssueCode.invalid_string,validation:{endsWith:d.value},message:d.message}),s.dirty()):\"datetime\"===d.kind?I(d).test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{code:i.ZodIssueCode.invalid_string,validation:\"datetime\",message:d.message}),s.dirty()):\"date\"===d.kind?B.test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{code:i.ZodIssueCode.invalid_string,validation:\"date\",message:d.message}),s.dirty()):\"time\"===d.kind?RegExp(`^${P(d)}$`).test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{code:i.ZodIssueCode.invalid_string,validation:\"time\",message:d.message}),s.dirty()):\"duration\"===d.kind?x.test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"duration\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty()):\"ip\"===d.kind?(t=e.data,!((\"v4\"===(n=d.version)||!n)&&C.test(t)||(\"v6\"===n||!n)&&k.test(t))&&1&&(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"ip\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty())):\"jwt\"===d.kind?!function(e,t){if(!A.test(e))return!1;try{let[n]=e.split(\".\");if(!n)return!1;let r=n.replace(/-/g,\"+\").replace(/_/g,\"/\").padEnd(n.length+(4-n.length%4)%4,\"=\"),o=JSON.parse(atob(r));if(\"object\"!=typeof o||null===o||\"typ\"in o&&o?.typ!==\"JWT\"||!o.alg||t&&o.alg!==t)return!1;return!0}catch{return!1}}(e.data,d.alg)&&(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"jwt\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty()):\"cidr\"===d.kind?(r=e.data,!((\"v4\"===(o=d.version)||!o)&&_.test(r)||(\"v6\"===o||!o)&&E.test(r))&&1&&(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"cidr\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty())):\"base64\"===d.kind?j.test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"base64\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty()):\"base64url\"===d.kind?S.test(e.data)||(l=this._getOrReturnCtx(e,l),(0,c.addIssueToContext)(l,{validation:\"base64url\",code:i.ZodIssueCode.invalid_string,message:d.message}),s.dirty()):u.util.assertNever(d);return{status:s.value,value:e.data}}_regex(e,t,n){return this.refinement(t=>e.test(t),{validation:t,code:i.ZodIssueCode.invalid_string,...s.errorUtil.errToObj(n)})}_addCheck(e){return new T({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:\"email\",...s.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:\"url\",...s.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:\"emoji\",...s.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:\"uuid\",...s.errorUtil.errToObj(e)})}nanoid(e){return this._addCheck({kind:\"nanoid\",...s.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:\"cuid\",...s.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:\"cuid2\",...s.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:\"ulid\",...s.errorUtil.errToObj(e)})}base64(e){return this._addCheck({kind:\"base64\",...s.errorUtil.errToObj(e)})}base64url(e){return this._addCheck({kind:\"base64url\",...s.errorUtil.errToObj(e)})}jwt(e){return this._addCheck({kind:\"jwt\",...s.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:\"ip\",...s.errorUtil.errToObj(e)})}cidr(e){return this._addCheck({kind:\"cidr\",...s.errorUtil.errToObj(e)})}datetime(e){return\"string\"==typeof e?this._addCheck({kind:\"datetime\",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:\"datetime\",precision:void 0===e?.precision?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...s.errorUtil.errToObj(e?.message)})}date(e){return this._addCheck({kind:\"date\",message:e})}time(e){return\"string\"==typeof e?this._addCheck({kind:\"time\",precision:null,message:e}):this._addCheck({kind:\"time\",precision:void 0===e?.precision?null:e?.precision,...s.errorUtil.errToObj(e?.message)})}duration(e){return this._addCheck({kind:\"duration\",...s.errorUtil.errToObj(e)})}regex(e,t){return this._addCheck({kind:\"regex\",regex:e,...s.errorUtil.errToObj(t)})}includes(e,t){return this._addCheck({kind:\"includes\",value:e,position:t?.position,...s.errorUtil.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:\"startsWith\",value:e,...s.errorUtil.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:\"endsWith\",value:e,...s.errorUtil.errToObj(t)})}min(e,t){return this._addCheck({kind:\"min\",value:e,...s.errorUtil.errToObj(t)})}max(e,t){return this._addCheck({kind:\"max\",value:e,...s.errorUtil.errToObj(t)})}length(e,t){return this._addCheck({kind:\"length\",value:e,...s.errorUtil.errToObj(t)})}nonempty(e){return this.min(1,s.errorUtil.errToObj(e))}trim(){return new T({...this._def,checks:[...this._def.checks,{kind:\"trim\"}]})}toLowerCase(){return new T({...this._def,checks:[...this._def.checks,{kind:\"toLowerCase\"}]})}toUpperCase(){return new T({...this._def,checks:[...this._def.checks,{kind:\"toUpperCase\"}]})}get isDatetime(){return!!this._def.checks.find(e=>\"datetime\"===e.kind)}get isDate(){return!!this._def.checks.find(e=>\"date\"===e.kind)}get isTime(){return!!this._def.checks.find(e=>\"time\"===e.kind)}get isDuration(){return!!this._def.checks.find(e=>\"duration\"===e.kind)}get isEmail(){return!!this._def.checks.find(e=>\"email\"===e.kind)}get isURL(){return!!this._def.checks.find(e=>\"url\"===e.kind)}get isEmoji(){return!!this._def.checks.find(e=>\"emoji\"===e.kind)}get isUUID(){return!!this._def.checks.find(e=>\"uuid\"===e.kind)}get isNANOID(){return!!this._def.checks.find(e=>\"nanoid\"===e.kind)}get isCUID(){return!!this._def.checks.find(e=>\"cuid\"===e.kind)}get isCUID2(){return!!this._def.checks.find(e=>\"cuid2\"===e.kind)}get isULID(){return!!this._def.checks.find(e=>\"ulid\"===e.kind)}get isIP(){return!!this._def.checks.find(e=>\"ip\"===e.kind)}get isCIDR(){return!!this._def.checks.find(e=>\"cidr\"===e.kind)}get isBase64(){return!!this._def.checks.find(e=>\"base64\"===e.kind)}get isBase64url(){return!!this._def.checks.find(e=>\"base64url\"===e.kind)}get minLength(){let e=null;for(let t of this._def.checks)\"min\"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)\"max\"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}}t.ZodString=T,T.create=e=>new T({checks:[],typeName:r.ZodString,coerce:e?.coerce??!1,...p(e)});class z extends h{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){let t;if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==u.ZodParsedType.number){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.number,received:t.parsedType}),c.INVALID}let n=new c.ParseStatus;for(let r of this._def.checks)\"int\"===r.kind?u.util.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:\"integer\",received:\"float\",message:r.message}),n.dirty()):\"min\"===r.kind?(r.inclusive?e.data<r.value:e.data<=r.value)&&(t=this._getOrReturnCtx(e,t),(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.too_small,minimum:r.value,type:\"number\",inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):\"max\"===r.kind?(r.inclusive?e.data>r.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.too_big,maximum:r.value,type:\"number\",inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):\"multipleOf\"===r.kind?0!==function(e,t){let n=(e.toString().split(\".\")[1]||\"\").length,r=(t.toString().split(\".\")[1]||\"\").length,o=n>r?n:r;return Number.parseInt(e.toFixed(o).replace(\".\",\"\"))%Number.parseInt(t.toFixed(o).replace(\".\",\"\"))/10**o}(e.data,r.value)&&(t=this._getOrReturnCtx(e,t),(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):\"finite\"===r.kind?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.not_finite,message:r.message}),n.dirty()):u.util.assertNever(r);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit(\"min\",e,!0,s.errorUtil.toString(t))}gt(e,t){return this.setLimit(\"min\",e,!1,s.errorUtil.toString(t))}lte(e,t){return this.setLimit(\"max\",e,!0,s.errorUtil.toString(t))}lt(e,t){return this.setLimit(\"max\",e,!1,s.errorUtil.toString(t))}setLimit(e,t,n,r){return new z({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:s.errorUtil.toString(r)}]})}_addCheck(e){return new z({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:\"int\",message:s.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:\"min\",value:0,inclusive:!1,message:s.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:\"max\",value:0,inclusive:!1,message:s.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:\"max\",value:0,inclusive:!0,message:s.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:\"min\",value:0,inclusive:!0,message:s.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:\"multipleOf\",value:e,message:s.errorUtil.toString(t)})}finite(e){return this._addCheck({kind:\"finite\",message:s.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:\"min\",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:s.errorUtil.toString(e)})._addCheck({kind:\"max\",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:s.errorUtil.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)\"min\"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)\"max\"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>\"int\"===e.kind||\"multipleOf\"===e.kind&&u.util.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks)if(\"finite\"===n.kind||\"int\"===n.kind||\"multipleOf\"===n.kind)return!0;else\"min\"===n.kind?(null===t||n.value>t)&&(t=n.value):\"max\"===n.kind&&(null===e||n.value<e)&&(e=n.value);return Number.isFinite(t)&&Number.isFinite(e)}}t.ZodNumber=z,z.create=e=>new z({checks:[],typeName:r.ZodNumber,coerce:e?.coerce||!1,...p(e)});class D extends h{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){let t;if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==u.ZodParsedType.bigint)return this._getInvalidInput(e);let n=new c.ParseStatus;for(let r of this._def.checks)\"min\"===r.kind?(r.inclusive?e.data<r.value:e.data<=r.value)&&(t=this._getOrReturnCtx(e,t),(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.too_small,type:\"bigint\",minimum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):\"max\"===r.kind?(r.inclusive?e.data>r.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.too_big,type:\"bigint\",maximum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):\"multipleOf\"===r.kind?e.data%r.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):u.util.assertNever(r);return{status:n.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.bigint,received:t.parsedType}),c.INVALID}gte(e,t){return this.setLimit(\"min\",e,!0,s.errorUtil.toString(t))}gt(e,t){return this.setLimit(\"min\",e,!1,s.errorUtil.toString(t))}lte(e,t){return this.setLimit(\"max\",e,!0,s.errorUtil.toString(t))}lt(e,t){return this.setLimit(\"max\",e,!1,s.errorUtil.toString(t))}setLimit(e,t,n,r){return new D({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:s.errorUtil.toString(r)}]})}_addCheck(e){return new D({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:\"min\",value:BigInt(0),inclusive:!1,message:s.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:\"max\",value:BigInt(0),inclusive:!1,message:s.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:\"max\",value:BigInt(0),inclusive:!0,message:s.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:\"min\",value:BigInt(0),inclusive:!0,message:s.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:\"multipleOf\",value:e,message:s.errorUtil.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)\"min\"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)\"max\"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}}t.ZodBigInt=D,D.create=e=>new D({checks:[],typeName:r.ZodBigInt,coerce:e?.coerce??!1,...p(e)});class L extends h{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==u.ZodParsedType.boolean){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.boolean,received:t.parsedType}),c.INVALID}return(0,c.OK)(e.data)}}t.ZodBoolean=L,L.create=e=>new L({typeName:r.ZodBoolean,coerce:e?.coerce||!1,...p(e)});class N extends h{_parse(e){let t;if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==u.ZodParsedType.date){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.date,received:t.parsedType}),c.INVALID}if(Number.isNaN(e.data.getTime())){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_date}),c.INVALID}let n=new c.ParseStatus;for(let r of this._def.checks)\"min\"===r.kind?e.data.getTime()<r.value&&(t=this._getOrReturnCtx(e,t),(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.too_small,message:r.message,inclusive:!0,exact:!1,minimum:r.value,type:\"date\"}),n.dirty()):\"max\"===r.kind?e.data.getTime()>r.value&&(t=this._getOrReturnCtx(e,t),(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.too_big,message:r.message,inclusive:!0,exact:!1,maximum:r.value,type:\"date\"}),n.dirty()):u.util.assertNever(r);return{status:n.value,value:new Date(e.data.getTime())}}_addCheck(e){return new N({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:\"min\",value:e.getTime(),message:s.errorUtil.toString(t)})}max(e,t){return this._addCheck({kind:\"max\",value:e.getTime(),message:s.errorUtil.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)\"min\"===t.kind&&(null===e||t.value>e)&&(e=t.value);return null!=e?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)\"max\"===t.kind&&(null===e||t.value<e)&&(e=t.value);return null!=e?new Date(e):null}}t.ZodDate=N,N.create=e=>new N({checks:[],coerce:e?.coerce||!1,typeName:r.ZodDate,...p(e)});class R extends h{_parse(e){if(this._getType(e)!==u.ZodParsedType.symbol){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.symbol,received:t.parsedType}),c.INVALID}return(0,c.OK)(e.data)}}t.ZodSymbol=R,R.create=e=>new R({typeName:r.ZodSymbol,...p(e)});class M extends h{_parse(e){if(this._getType(e)!==u.ZodParsedType.undefined){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.undefined,received:t.parsedType}),c.INVALID}return(0,c.OK)(e.data)}}t.ZodUndefined=M,M.create=e=>new M({typeName:r.ZodUndefined,...p(e)});class Z extends h{_parse(e){if(this._getType(e)!==u.ZodParsedType.null){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.null,received:t.parsedType}),c.INVALID}return(0,c.OK)(e.data)}}t.ZodNull=Z,Z.create=e=>new Z({typeName:r.ZodNull,...p(e)});class U extends h{constructor(){super(...arguments),this._any=!0}_parse(e){return(0,c.OK)(e.data)}}t.ZodAny=U,U.create=e=>new U({typeName:r.ZodAny,...p(e)});class F extends h{constructor(){super(...arguments),this._unknown=!0}_parse(e){return(0,c.OK)(e.data)}}t.ZodUnknown=F,F.create=e=>new F({typeName:r.ZodUnknown,...p(e)});class q extends h{_parse(e){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.never,received:t.parsedType}),c.INVALID}}t.ZodNever=q,q.create=e=>new q({typeName:r.ZodNever,...p(e)});class H extends h{_parse(e){if(this._getType(e)!==u.ZodParsedType.undefined){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.void,received:t.parsedType}),c.INVALID}return(0,c.OK)(e.data)}}t.ZodVoid=H,H.create=e=>new H({typeName:r.ZodVoid,...p(e)});class V extends h{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),r=this._def;if(t.parsedType!==u.ZodParsedType.array)return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.array,received:t.parsedType}),c.INVALID;if(null!==r.exactLength){let e=t.data.length>r.exactLength.value,o=t.data.length<r.exactLength.value;(e||o)&&((0,c.addIssueToContext)(t,{code:e?i.ZodIssueCode.too_big:i.ZodIssueCode.too_small,minimum:o?r.exactLength.value:void 0,maximum:e?r.exactLength.value:void 0,type:\"array\",inclusive:!0,exact:!0,message:r.exactLength.message}),n.dirty())}if(null!==r.minLength&&t.data.length<r.minLength.value&&((0,c.addIssueToContext)(t,{code:i.ZodIssueCode.too_small,minimum:r.minLength.value,type:\"array\",inclusive:!0,exact:!1,message:r.minLength.message}),n.dirty()),null!==r.maxLength&&t.data.length>r.maxLength.value&&((0,c.addIssueToContext)(t,{code:i.ZodIssueCode.too_big,maximum:r.maxLength.value,type:\"array\",inclusive:!0,exact:!1,message:r.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((e,n)=>r.type._parseAsync(new d(t,e,t.path,n)))).then(e=>c.ParseStatus.mergeArray(n,e));let o=[...t.data].map((e,n)=>r.type._parseSync(new d(t,e,t.path,n)));return c.ParseStatus.mergeArray(n,o)}get element(){return this._def.type}min(e,t){return new V({...this._def,minLength:{value:e,message:s.errorUtil.toString(t)}})}max(e,t){return new V({...this._def,maxLength:{value:e,message:s.errorUtil.toString(t)}})}length(e,t){return new V({...this._def,exactLength:{value:e,message:s.errorUtil.toString(t)}})}nonempty(e){return this.min(1,e)}}t.ZodArray=V,V.create=(e,t)=>new V({type:e,minLength:null,maxLength:null,exactLength:null,typeName:r.ZodArray,...p(t)});class $ extends h{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(null!==this._cached)return this._cached;let e=this._def.shape(),t=u.util.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==u.ZodParsedType.object){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.object,received:t.parsedType}),c.INVALID}let{status:t,ctx:n}=this._processInputParams(e),{shape:r,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof q&&\"strip\"===this._def.unknownKeys))for(let e in n.data)o.includes(e)||a.push(e);let l=[];for(let e of o){let t=r[e],o=n.data[e];l.push({key:{status:\"valid\",value:e},value:t._parse(new d(n,o,n.path,e)),alwaysSet:e in n.data})}if(this._def.catchall instanceof q){let e=this._def.unknownKeys;if(\"passthrough\"===e)for(let e of a)l.push({key:{status:\"valid\",value:e},value:{status:\"valid\",value:n.data[e]}});else if(\"strict\"===e)a.length>0&&((0,c.addIssueToContext)(n,{code:i.ZodIssueCode.unrecognized_keys,keys:a}),t.dirty());else if(\"strip\"===e);else throw Error(\"Internal ZodObject error: invalid unknownKeys value.\")}else{let e=this._def.catchall;for(let t of a){let r=n.data[t];l.push({key:{status:\"valid\",value:t},value:e._parse(new d(n,r,n.path,t)),alwaysSet:t in n.data})}}return n.common.async?Promise.resolve().then(async()=>{let e=[];for(let t of l){let n=await t.key,r=await t.value;e.push({key:n,value:r,alwaysSet:t.alwaysSet})}return e}).then(e=>c.ParseStatus.mergeObjectSync(t,e)):c.ParseStatus.mergeObjectSync(t,l)}get shape(){return this._def.shape()}strict(e){return s.errorUtil.errToObj,new $({...this._def,unknownKeys:\"strict\",...void 0!==e?{errorMap:(t,n)=>{let r=this._def.errorMap?.(t,n).message??n.defaultError;return\"unrecognized_keys\"===t.code?{message:s.errorUtil.errToObj(e).message??r}:{message:r}}}:{}})}strip(){return new $({...this._def,unknownKeys:\"strip\"})}passthrough(){return new $({...this._def,unknownKeys:\"passthrough\"})}extend(e){return new $({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new $({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:r.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new $({...this._def,catchall:e})}pick(e){let t={};for(let n of u.util.objectKeys(e))e[n]&&this.shape[n]&&(t[n]=this.shape[n]);return new $({...this._def,shape:()=>t})}omit(e){let t={};for(let n of u.util.objectKeys(this.shape))e[n]||(t[n]=this.shape[n]);return new $({...this._def,shape:()=>t})}deepPartial(){return function e(t){if(t instanceof $){let n={};for(let r in t.shape){let o=t.shape[r];n[r]=ec.create(e(o))}return new $({...t._def,shape:()=>n})}if(t instanceof V)return new V({...t._def,type:e(t.element)});if(t instanceof ec)return ec.create(e(t.unwrap()));if(t instanceof eu)return eu.create(e(t.unwrap()));if(t instanceof G)return G.create(t.items.map(t=>e(t)));else return t}(this)}partial(e){let t={};for(let n of u.util.objectKeys(this.shape)){let r=this.shape[n];e&&!e[n]?t[n]=r:t[n]=r.optional()}return new $({...this._def,shape:()=>t})}required(e){let t={};for(let n of u.util.objectKeys(this.shape))if(e&&!e[n])t[n]=this.shape[n];else{let e=this.shape[n];for(;e instanceof ec;)e=e._def.innerType;t[n]=e}return new $({...this._def,shape:()=>t})}keyof(){return eo(u.util.objectKeys(this.shape))}}t.ZodObject=$,$.create=(e,t)=>new $({shape:()=>e,unknownKeys:\"strip\",catchall:q.create(),typeName:r.ZodObject,...p(t)}),$.strictCreate=(e,t)=>new $({shape:()=>e,unknownKeys:\"strict\",catchall:q.create(),typeName:r.ZodObject,...p(t)}),$.lazycreate=(e,t)=>new $({shape:e,unknownKeys:\"strip\",catchall:q.create(),typeName:r.ZodObject,...p(t)});class W extends h{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;if(t.common.async)return Promise.all(n.map(async e=>{let n={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:n}),ctx:n}})).then(function(e){for(let t of e)if(\"valid\"===t.result.status)return t.result;for(let n of e)if(\"dirty\"===n.result.status)return t.common.issues.push(...n.ctx.common.issues),n.result;let n=e.map(e=>new i.ZodError(e.ctx.common.issues));return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_union,unionErrors:n}),c.INVALID});{let e,r=[];for(let o of n){let n={...t,common:{...t.common,issues:[]},parent:null},a=o._parseSync({data:t.data,path:t.path,parent:n});if(\"valid\"===a.status)return a;\"dirty\"!==a.status||e||(e={result:a,ctx:n}),n.common.issues.length&&r.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;let o=r.map(e=>new i.ZodError(e));return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_union,unionErrors:o}),c.INVALID}}get options(){return this._def.options}}t.ZodUnion=W,W.create=(e,t)=>new W({options:e,typeName:r.ZodUnion,...p(t)});let Y=e=>{if(e instanceof en)return Y(e.schema);if(e instanceof es)return Y(e.innerType());if(e instanceof er)return[e.value];if(e instanceof ea)return e.options;if(e instanceof ei)return u.util.objectValues(e.enum);else if(e instanceof ed)return Y(e._def.innerType);else if(e instanceof M)return[void 0];else if(e instanceof Z)return[null];else if(e instanceof ec)return[void 0,...Y(e.unwrap())];else if(e instanceof eu)return[null,...Y(e.unwrap())];else if(e instanceof eh)return Y(e.unwrap());else if(e instanceof eg)return Y(e.unwrap());else if(e instanceof ef)return Y(e._def.innerType);else return[]};class K extends h{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==u.ZodParsedType.object)return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.object,received:t.parsedType}),c.INVALID;let n=this.discriminator,r=t.data[n],o=this.optionsMap.get(r);return o?t.common.async?o._parseAsync({data:t.data,path:t.path,parent:t}):o._parseSync({data:t.data,path:t.path,parent:t}):((0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),c.INVALID)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,n){let o=new Map;for(let n of t){let t=Y(n.shape[e]);if(!t.length)throw Error(`A discriminator value for key \\`${e}\\` could not be extracted from all schema options`);for(let r of t){if(o.has(r))throw Error(`Discriminator property ${String(e)} has duplicate value ${String(r)}`);o.set(r,n)}}return new K({typeName:r.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:o,...p(n)})}}t.ZodDiscriminatedUnion=K;class X extends h{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=(e,r)=>{if((0,c.isAborted)(e)||(0,c.isAborted)(r))return c.INVALID;let o=function e(t,n){let r=(0,u.getParsedType)(t),o=(0,u.getParsedType)(n);if(t===n)return{valid:!0,data:t};if(r===u.ZodParsedType.object&&o===u.ZodParsedType.object){let r=u.util.objectKeys(n),o=u.util.objectKeys(t).filter(e=>-1!==r.indexOf(e)),a={...t,...n};for(let r of o){let o=e(t[r],n[r]);if(!o.valid)return{valid:!1};a[r]=o.data}return{valid:!0,data:a}}if(r===u.ZodParsedType.array&&o===u.ZodParsedType.array){if(t.length!==n.length)return{valid:!1};let r=[];for(let o=0;o<t.length;o++){let a=e(t[o],n[o]);if(!a.valid)return{valid:!1};r.push(a.data)}return{valid:!0,data:r}}if(r===u.ZodParsedType.date&&o===u.ZodParsedType.date&&+t==+n)return{valid:!0,data:t};return{valid:!1}}(e.value,r.value);return o.valid?(((0,c.isDirty)(e)||(0,c.isDirty)(r))&&t.dirty(),{status:t.value,value:o.data}):((0,c.addIssueToContext)(n,{code:i.ZodIssueCode.invalid_intersection_types}),c.INVALID)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([e,t])=>r(e,t)):r(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}}t.ZodIntersection=X,X.create=(e,t,n)=>new X({left:e,right:t,typeName:r.ZodIntersection,...p(n)});class G extends h{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==u.ZodParsedType.array)return(0,c.addIssueToContext)(n,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.array,received:n.parsedType}),c.INVALID;if(n.data.length<this._def.items.length)return(0,c.addIssueToContext)(n,{code:i.ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:\"array\"}),c.INVALID;!this._def.rest&&n.data.length>this._def.items.length&&((0,c.addIssueToContext)(n,{code:i.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:\"array\"}),t.dirty());let r=[...n.data].map((e,t)=>{let r=this._def.items[t]||this._def.rest;return r?r._parse(new d(n,e,n.path,t)):null}).filter(e=>!!e);return n.common.async?Promise.all(r).then(e=>c.ParseStatus.mergeArray(t,e)):c.ParseStatus.mergeArray(t,r)}get items(){return this._def.items}rest(e){return new G({...this._def,rest:e})}}t.ZodTuple=G,G.create=(e,t)=>{if(!Array.isArray(e))throw Error(\"You must pass an array of schemas to z.tuple([ ... ])\");return new G({items:e,typeName:r.ZodTuple,rest:null,...p(t)})};class Q extends h{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==u.ZodParsedType.object)return(0,c.addIssueToContext)(n,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.object,received:n.parsedType}),c.INVALID;let r=[],o=this._def.keyType,a=this._def.valueType;for(let e in n.data)r.push({key:o._parse(new d(n,e,n.path,e)),value:a._parse(new d(n,n.data[e],n.path,e)),alwaysSet:e in n.data});return n.common.async?c.ParseStatus.mergeObjectAsync(t,r):c.ParseStatus.mergeObjectSync(t,r)}get element(){return this._def.valueType}static create(e,t,n){return new Q(t instanceof h?{keyType:e,valueType:t,typeName:r.ZodRecord,...p(n)}:{keyType:T.create(),valueType:e,typeName:r.ZodRecord,...p(t)})}}t.ZodRecord=Q;class J extends h{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==u.ZodParsedType.map)return(0,c.addIssueToContext)(n,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.map,received:n.parsedType}),c.INVALID;let r=this._def.keyType,o=this._def.valueType,a=[...n.data.entries()].map(([e,t],a)=>({key:r._parse(new d(n,e,n.path,[a,\"key\"])),value:o._parse(new d(n,t,n.path,[a,\"value\"]))}));if(n.common.async){let e=new Map;return Promise.resolve().then(async()=>{for(let n of a){let r=await n.key,o=await n.value;if(\"aborted\"===r.status||\"aborted\"===o.status)return c.INVALID;(\"dirty\"===r.status||\"dirty\"===o.status)&&t.dirty(),e.set(r.value,o.value)}return{status:t.value,value:e}})}{let e=new Map;for(let n of a){let r=n.key,o=n.value;if(\"aborted\"===r.status||\"aborted\"===o.status)return c.INVALID;(\"dirty\"===r.status||\"dirty\"===o.status)&&t.dirty(),e.set(r.value,o.value)}return{status:t.value,value:e}}}}t.ZodMap=J,J.create=(e,t,n)=>new J({valueType:t,keyType:e,typeName:r.ZodMap,...p(n)});class ee extends h{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==u.ZodParsedType.set)return(0,c.addIssueToContext)(n,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.set,received:n.parsedType}),c.INVALID;let r=this._def;null!==r.minSize&&n.data.size<r.minSize.value&&((0,c.addIssueToContext)(n,{code:i.ZodIssueCode.too_small,minimum:r.minSize.value,type:\"set\",inclusive:!0,exact:!1,message:r.minSize.message}),t.dirty()),null!==r.maxSize&&n.data.size>r.maxSize.value&&((0,c.addIssueToContext)(n,{code:i.ZodIssueCode.too_big,maximum:r.maxSize.value,type:\"set\",inclusive:!0,exact:!1,message:r.maxSize.message}),t.dirty());let o=this._def.valueType;function a(e){let n=new Set;for(let r of e){if(\"aborted\"===r.status)return c.INVALID;\"dirty\"===r.status&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}let l=[...n.data.values()].map((e,t)=>o._parse(new d(n,e,n.path,t)));return n.common.async?Promise.all(l).then(e=>a(e)):a(l)}min(e,t){return new ee({...this._def,minSize:{value:e,message:s.errorUtil.toString(t)}})}max(e,t){return new ee({...this._def,maxSize:{value:e,message:s.errorUtil.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}t.ZodSet=ee,ee.create=(e,t)=>new ee({valueType:e,minSize:null,maxSize:null,typeName:r.ZodSet,...p(t)});class et extends h{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==u.ZodParsedType.function)return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.function,received:t.parsedType}),c.INVALID;function n(e,n){return(0,c.makeIssue)({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,l.getErrorMap)(),l.defaultErrorMap].filter(e=>!!e),issueData:{code:i.ZodIssueCode.invalid_arguments,argumentsError:n}})}function r(e,n){return(0,c.makeIssue)({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,l.getErrorMap)(),l.defaultErrorMap].filter(e=>!!e),issueData:{code:i.ZodIssueCode.invalid_return_type,returnTypeError:n}})}let o={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof el){let e=this;return(0,c.OK)(async function(...t){let l=new i.ZodError([]),s=await e._def.args.parseAsync(t,o).catch(e=>{throw l.addIssue(n(t,e)),l}),c=await Reflect.apply(a,this,s);return await e._def.returns._def.type.parseAsync(c,o).catch(e=>{throw l.addIssue(r(c,e)),l})})}{let e=this;return(0,c.OK)(function(...t){let l=e._def.args.safeParse(t,o);if(!l.success)throw new i.ZodError([n(t,l.error)]);let s=Reflect.apply(a,this,l.data),c=e._def.returns.safeParse(s,o);if(!c.success)throw new i.ZodError([r(s,c.error)]);return c.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new et({...this._def,args:G.create(e).rest(F.create())})}returns(e){return new et({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,n){return new et({args:e||G.create([]).rest(F.create()),returns:t||F.create(),typeName:r.ZodFunction,...p(n)})}}t.ZodFunction=et;class en extends h{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}t.ZodLazy=en,en.create=(e,t)=>new en({getter:e,typeName:r.ZodLazy,...p(t)});class er extends h{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{received:t.data,code:i.ZodIssueCode.invalid_literal,expected:this._def.value}),c.INVALID}return{status:\"valid\",value:e.data}}get value(){return this._def.value}}function eo(e,t){return new ea({values:e,typeName:r.ZodEnum,...p(t)})}t.ZodLiteral=er,er.create=(e,t)=>new er({value:e,typeName:r.ZodLiteral,...p(t)});class ea extends h{_parse(e){if(\"string\"!=typeof e.data){let t=this._getOrReturnCtx(e),n=this._def.values;return(0,c.addIssueToContext)(t,{expected:u.util.joinValues(n),received:t.parsedType,code:i.ZodIssueCode.invalid_type}),c.INVALID}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return(0,c.addIssueToContext)(t,{received:t.data,code:i.ZodIssueCode.invalid_enum_value,options:n}),c.INVALID}return(0,c.OK)(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return ea.create(e,{...this._def,...t})}exclude(e,t=this._def){return ea.create(this.options.filter(t=>!e.includes(t)),{...this._def,...t})}}t.ZodEnum=ea,ea.create=eo;class ei extends h{_parse(e){let t=u.util.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==u.ZodParsedType.string&&n.parsedType!==u.ZodParsedType.number){let e=u.util.objectValues(t);return(0,c.addIssueToContext)(n,{expected:u.util.joinValues(e),received:n.parsedType,code:i.ZodIssueCode.invalid_type}),c.INVALID}if(this._cache||(this._cache=new Set(u.util.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let e=u.util.objectValues(t);return(0,c.addIssueToContext)(n,{received:n.data,code:i.ZodIssueCode.invalid_enum_value,options:e}),c.INVALID}return(0,c.OK)(e.data)}get enum(){return this._def.values}}t.ZodNativeEnum=ei,ei.create=(e,t)=>new ei({values:e,typeName:r.ZodNativeEnum,...p(t)});class el extends h{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==u.ZodParsedType.promise&&!1===t.common.async)return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.promise,received:t.parsedType}),c.INVALID;let n=t.parsedType===u.ZodParsedType.promise?t.data:Promise.resolve(t.data);return(0,c.OK)(n.then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}}t.ZodPromise=el,el.create=(e,t)=>new el({type:e,typeName:r.ZodPromise,...p(t)});class es extends h{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===r.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=this._def.effect||null,o={addIssue:e=>{(0,c.addIssueToContext)(n,e),e.fatal?t.abort():t.dirty()},get path(){return n.path}};if(o.addIssue=o.addIssue.bind(o),\"preprocess\"===r.type){let e=r.transform(n.data,o);if(n.common.async)return Promise.resolve(e).then(async e=>{if(\"aborted\"===t.value)return c.INVALID;let r=await this._def.schema._parseAsync({data:e,path:n.path,parent:n});return\"aborted\"===r.status?c.INVALID:\"dirty\"===r.status||\"dirty\"===t.value?(0,c.DIRTY)(r.value):r});{if(\"aborted\"===t.value)return c.INVALID;let r=this._def.schema._parseSync({data:e,path:n.path,parent:n});return\"aborted\"===r.status?c.INVALID:\"dirty\"===r.status||\"dirty\"===t.value?(0,c.DIRTY)(r.value):r}}if(\"refinement\"===r.type){let e=e=>{let t=r.refinement(e,o);if(n.common.async)return Promise.resolve(t);if(t instanceof Promise)throw Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");return e};if(!1!==n.common.async)return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(n=>\"aborted\"===n.status?c.INVALID:(\"dirty\"===n.status&&t.dirty(),e(n.value).then(()=>({status:t.value,value:n.value}))));{let r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return\"aborted\"===r.status?c.INVALID:(\"dirty\"===r.status&&t.dirty(),e(r.value),{status:t.value,value:r.value})}}if(\"transform\"===r.type)if(!1!==n.common.async)return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(e=>(0,c.isValid)(e)?Promise.resolve(r.transform(e.value,o)).then(e=>({status:t.value,value:e})):c.INVALID);else{let e=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!(0,c.isValid)(e))return c.INVALID;let a=r.transform(e.value,o);if(a instanceof Promise)throw Error(\"Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.\");return{status:t.value,value:a}}u.util.assertNever(r)}}t.ZodEffects=es,t.ZodTransformer=es,es.create=(e,t,n)=>new es({schema:e,typeName:r.ZodEffects,effect:t,...p(n)}),es.createWithPreprocess=(e,t,n)=>new es({schema:t,effect:{type:\"preprocess\",transform:e},typeName:r.ZodEffects,...p(n)});class ec extends h{_parse(e){return this._getType(e)===u.ZodParsedType.undefined?(0,c.OK)(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}t.ZodOptional=ec,ec.create=(e,t)=>new ec({innerType:e,typeName:r.ZodOptional,...p(t)});class eu extends h{_parse(e){return this._getType(e)===u.ZodParsedType.null?(0,c.OK)(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}t.ZodNullable=eu,eu.create=(e,t)=>new eu({innerType:e,typeName:r.ZodNullable,...p(t)});class ed extends h{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===u.ZodParsedType.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}t.ZodDefault=ed,ed.create=(e,t)=>new ed({innerType:e,typeName:r.ZodDefault,defaultValue:\"function\"==typeof t.default?t.default:()=>t.default,...p(t)});class ef extends h{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},r=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return(0,c.isAsync)(r)?r.then(e=>({status:\"valid\",value:\"valid\"===e.status?e.value:this._def.catchValue({get error(){return new i.ZodError(n.common.issues)},input:n.data})})):{status:\"valid\",value:\"valid\"===r.status?r.value:this._def.catchValue({get error(){return new i.ZodError(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}}t.ZodCatch=ef,ef.create=(e,t)=>new ef({innerType:e,typeName:r.ZodCatch,catchValue:\"function\"==typeof t.catch?t.catch:()=>t.catch,...p(t)});class ep extends h{_parse(e){if(this._getType(e)!==u.ZodParsedType.nan){let t=this._getOrReturnCtx(e);return(0,c.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:u.ZodParsedType.nan,received:t.parsedType}),c.INVALID}return{status:\"valid\",value:e.data}}}t.ZodNaN=ep,ep.create=e=>new ep({typeName:r.ZodNaN,...p(e)}),t.BRAND=Symbol(\"zod_brand\");class eh extends h{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}}t.ZodBranded=eh;class em extends h{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let e=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return\"aborted\"===e.status?c.INVALID:\"dirty\"===e.status?(t.dirty(),(0,c.DIRTY)(e.value)):this._def.out._parseAsync({data:e.value,path:n.path,parent:n})})();{let e=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return\"aborted\"===e.status?c.INVALID:\"dirty\"===e.status?(t.dirty(),{status:\"dirty\",value:e.value}):this._def.out._parseSync({data:e.value,path:n.path,parent:n})}}static create(e,t){return new em({in:e,out:t,typeName:r.ZodPipeline})}}t.ZodPipeline=em;class eg extends h{_parse(e){let t=this._def.innerType._parse(e),n=e=>((0,c.isValid)(e)&&(e.value=Object.freeze(e.value)),e);return(0,c.isAsync)(t)?t.then(e=>n(e)):n(t)}unwrap(){return this._def.innerType}}function ey(e,t){let n=\"function\"==typeof e?e(t):\"string\"==typeof e?{message:e}:e;return\"string\"==typeof n?{message:n}:n}function ev(e,t={},n){return e?U.create().superRefine((r,o)=>{let a=e(r);if(a instanceof Promise)return a.then(e=>{if(!e){let e=ey(t,r),a=e.fatal??n??!0;o.addIssue({code:\"custom\",...e,fatal:a})}});if(!a){let e=ey(t,r),a=e.fatal??n??!0;o.addIssue({code:\"custom\",...e,fatal:a})}}):U.create()}t.ZodReadonly=eg,eg.create=(e,t)=>new eg({innerType:e,typeName:r.ZodReadonly,...p(t)}),t.late={object:$.lazycreate},(o=r||(t.ZodFirstPartyTypeKind=r={})).ZodString=\"ZodString\",o.ZodNumber=\"ZodNumber\",o.ZodNaN=\"ZodNaN\",o.ZodBigInt=\"ZodBigInt\",o.ZodBoolean=\"ZodBoolean\",o.ZodDate=\"ZodDate\",o.ZodSymbol=\"ZodSymbol\",o.ZodUndefined=\"ZodUndefined\",o.ZodNull=\"ZodNull\",o.ZodAny=\"ZodAny\",o.ZodUnknown=\"ZodUnknown\",o.ZodNever=\"ZodNever\",o.ZodVoid=\"ZodVoid\",o.ZodArray=\"ZodArray\",o.ZodObject=\"ZodObject\",o.ZodUnion=\"ZodUnion\",o.ZodDiscriminatedUnion=\"ZodDiscriminatedUnion\",o.ZodIntersection=\"ZodIntersection\",o.ZodTuple=\"ZodTuple\",o.ZodRecord=\"ZodRecord\",o.ZodMap=\"ZodMap\",o.ZodSet=\"ZodSet\",o.ZodFunction=\"ZodFunction\",o.ZodLazy=\"ZodLazy\",o.ZodLiteral=\"ZodLiteral\",o.ZodEnum=\"ZodEnum\",o.ZodEffects=\"ZodEffects\",o.ZodNativeEnum=\"ZodNativeEnum\",o.ZodOptional=\"ZodOptional\",o.ZodNullable=\"ZodNullable\",o.ZodDefault=\"ZodDefault\",o.ZodCatch=\"ZodCatch\",o.ZodPromise=\"ZodPromise\",o.ZodBranded=\"ZodBranded\",o.ZodPipeline=\"ZodPipeline\",o.ZodReadonly=\"ZodReadonly\",t.instanceof=(e,t={message:`Input not instance of ${e.name}`})=>ev(t=>t instanceof e,t);let eb=T.create;t.string=eb;let eA=z.create;t.number=eA,t.nan=ep.create,t.bigint=D.create;let ex=L.create;t.boolean=ex,t.date=N.create,t.symbol=R.create,t.undefined=M.create,t.null=Z.create,t.any=U.create,t.unknown=F.create,t.never=q.create,t.void=H.create,t.array=V.create,t.object=$.create,t.strictObject=$.strictCreate,t.union=W.create,t.discriminatedUnion=K.create,t.intersection=X.create,t.tuple=G.create,t.record=Q.create,t.map=J.create,t.set=ee.create,t.function=et.create,t.lazy=en.create,t.literal=er.create,t.enum=ea.create,t.nativeEnum=ei.create,t.promise=el.create;let ew=es.create;t.effect=ew,t.transformer=ew,t.optional=ec.create,t.nullable=eu.create,t.preprocess=es.createWithPreprocess,t.pipeline=em.create,t.ostring=()=>eb().optional(),t.onumber=()=>eA().optional(),t.oboolean=()=>ex().optional(),t.coerce={string:e=>T.create({...e,coerce:!0}),number:e=>z.create({...e,coerce:!0}),boolean:e=>L.create({...e,coerce:!0}),bigint:e=>D.create({...e,coerce:!0}),date:e=>N.create({...e,coerce:!0})},t.NEVER=c.INVALID}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var a=n[e]={exports:{}},i=!0;try{t[e].call(a.exports,a,a.exports,r),i=!1}finally{i&&delete n[e]}return a.exports}r.ab=\"//\",e.exports=r(629)})()}},__webpack_module_cache__={};function __nested_webpack_require_378273__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={id:e,exports:{}};return __webpack_modules__[e](n,n.exports,__nested_webpack_require_378273__),n.exports}__nested_webpack_require_378273__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __nested_webpack_require_378273__.d(t,{a:t}),t},(()=>{var e,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;__nested_webpack_require_378273__.t=function(n,r){if(1&r&&(n=this(n)),8&r||\"object\"==typeof n&&n&&(4&r&&n.__esModule||16&r&&\"function\"==typeof n.then))return n;var o=Object.create(null);__nested_webpack_require_378273__.r(o);var a={};e=e||[null,t({}),t([]),t(t)];for(var i=2&r&&n;\"object\"==typeof i&&!~e.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach(e=>{a[e]=()=>n[e]});return a.default=()=>n,__nested_webpack_require_378273__.d(o,a),o}})(),__nested_webpack_require_378273__.d=(e,t)=>{for(var n in t)__nested_webpack_require_378273__.o(t,n)&&!__nested_webpack_require_378273__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__nested_webpack_require_378273__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__nested_webpack_require_378273__.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},__nested_webpack_require_378273__.nc=void 0;var __nested_webpack_exports__={};for(var __webpack_i__ in(()=>{\"use strict\";__nested_webpack_require_378273__.r(__nested_webpack_exports__),__nested_webpack_require_378273__.d(__nested_webpack_exports__,{dispatcher:()=>dr,renderAppDevOverlay:()=>dd,DevOverlayContext:()=>di,renderPagesDevOverlay:()=>df,useDevOverlayContext:()=>dl});var e,t,n,r,o=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\"),a=__nested_webpack_require_378273__.n(o),i=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleDomAPI.js\"),l=__nested_webpack_require_378273__.n(i),s=__nested_webpack_require_378273__(\"./src/build/webpack/loaders/devtool/devtool-style-inject.js\"),c=__nested_webpack_require_378273__.n(s),u=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\"),d=__nested_webpack_require_378273__.n(u),f=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/insertStyleElement.js\"),p=__nested_webpack_require_378273__.n(f),h=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleTagTransform.js\"),m=__nested_webpack_require_378273__.n(h),g=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/global.css\"),y={};y.styleTagTransform=m(),y.setAttributes=d(),y.insert=c(),y.domAPI=l(),y.insertStyleElement=p(),a()(g.Z,y),g.Z&&g.Z.locals&&g.Z.locals;var v=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/toast/style.css\"),b={};b.styleTagTransform=m(),b.setAttributes=d(),b.insert=c(),b.domAPI=l(),b.insertStyleElement=p(),a()(v.Z,b),v.Z&&v.Z.locals&&v.Z.locals;var A=__nested_webpack_require_378273__(\"./dist/compiled/react/jsx-runtime.js\"),x=__nested_webpack_require_378273__(\"./dist/compiled/react/compiler-runtime.js\"),w=__nested_webpack_require_378273__(\"./dist/compiled/react/index.js\"),C=__nested_webpack_require_378273__.t(w,2),_=__nested_webpack_require_378273__(\"./dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\"),k=/\\/_next(\\/static\\/.+)/,E=Symbol.for(\"next.console.error.digest\");function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){j(e,t,n[t])})}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}var B={Small:16/14,Medium:1,Large:16/18},P=\"static-indicator\",I=\"build-ok\",T=\"build-error\",z=\"before-fast-refresh\",D=\"fast-refresh\",L=\"version-info\",N=\"unhandled-error\",R=\"unhandled-rejection\",M=\"debug-info\",Z=\"dev-indicator\",U=\"dev-indicator-disable\",F=\"error-overlay-open\",q=\"error-overlay-close\",H=\"error-overlay-toggle\",V=\"building-indicator-show\",$=\"building-indicator-hide\",W=\"rendering-indicator-show\",Y=\"rendering-indicator-hide\",K=\"devtools-position\",X=\"devtools-panel-position\",G=\"devtools-scale\",Q=\"devtools-config\",J=\"__nextjs-dev-tools-panel-position\",ee=\"__nextjs-dev-tools-panel-size\",et=\"__nextjs-dev-tools-shared-panel-size\",en=\"__nextjs-dev-tools-shared-panel-location\",er=\"segment-explorer-update-route-state\",eo=/\\s+(at Object\\.react_stack_bottom_frame.*)|(react_stack_bottom_frame@.*)|(at react-stack-bottom-frame.*)|(react-stack-bottom-frame@.*)/;function ea(e){return null==e?void 0:e.split(eo)[0]}var ei=(null==(e=true)?void 0:e.toString())===\"false\",el=null!=(t=\"bottom-left\")?t:\"bottom-left\",es={nextId:1,buildError:null,errors:[],notFound:!1,renderingIndicator:!1,staticIndicator:!1,showIndicator:!1,disableDevIndicator:!1,buildingIndicator:!1,refreshState:{type:\"idle\"},versionInfo:{installed:\"0.0.0\",staleness:\"unknown\"},debugInfo:{devtoolsFrontendUrl:void 0},devToolsPosition:el,devToolsPanelPosition:j({},en,el),devToolsPanelSize:{},scale:B.Medium,page:\"\",theme:\"system\",hideShortcut:null},ec=__nested_webpack_require_378273__(\"./dist/compiled/react-dom/client.js\");function eu(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=e.length-1;return(e.slice(0,o).reduce(function(e,t,r){return e+t+n[r]},\"\")+e[o]).replace(/\\/\\*[\\s\\S]*?\\*\\//g,\"\").replace(/\\s+/g,\" \").replace(/\\s*([:;,{}])\\s*/g,\"$1\").replace(/;+}/g,\"}\").trim()}function ed(){var e,t,n=(e=[\"\\n /* latin-ext */\\n @font-face {\\n font-family: '__nextjs-Geist';\\n font-style: normal;\\n font-weight: 400 600;\\n font-display: swap;\\n src: url(/__nextjs_font/geist-latin-ext.woff2) format('woff2');\\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,\\n U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,\\n U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,\\n U+A720-A7FF;\\n }\\n /* latin-ext */\\n @font-face {\\n font-family: '__nextjs-Geist Mono';\\n font-style: normal;\\n font-weight: 400 600;\\n font-display: swap;\\n src: url(/__nextjs_font/geist-mono-latin-ext.woff2) format('woff2');\\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,\\n U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,\\n U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,\\n U+A720-A7FF;\\n }\\n /* latin */\\n @font-face {\\n font-family: '__nextjs-Geist';\\n font-style: normal;\\n font-weight: 400 600;\\n font-display: swap;\\n src: url(/__nextjs_font/geist-latin.woff2) format('woff2');\\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,\\n U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,\\n U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n }\\n /* latin */\\n @font-face {\\n font-family: '__nextjs-Geist Mono';\\n font-style: normal;\\n font-weight: 400 600;\\n font-display: swap;\\n src: url(/__nextjs_font/geist-mono-latin.woff2) format('woff2');\\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,\\n U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,\\n U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n }\\n \"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return ed=function(){return n},n}var ef=function(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=[],t[0]=e):e=t[0],(0,w.useInsertionEffect)(ep,e),null};function ep(){var e=document.createElement(\"style\");return e.textContent=eu(ed()),document.head.appendChild(e),function(){document.head.removeChild(e)}}var eh=__nested_webpack_require_378273__(\"./dist/compiled/react-dom/index.js\");function em(e){var t,n=(0,x.c)(3),r=e.children,o=dl().shadowRoot;return n[0]!==r||n[1]!==o?(t=(0,eh.createPortal)(r,o),n[0]=r,n[1]=o,n[2]=t):t=n[2],t}function eg(e){if(\"\"===e.trim())throw Error(\"can't decode empty hex\");var t=parseInt(e,16);if(isNaN(t))throw Error(\"invalid hex: `\".concat(e,\"`\"));return String.fromCodePoint(t)}var ey=/^__TURBOPACK__([a-zA-Z0-9_$]+)__$/,ev=/https?:\\/\\/[^\\s/$.?#].[^\\s)'\"]*/i,eb=new RegExp(\"(\".concat(/__TURBOPACK__[a-zA-Z0-9_$]+__/g.source,\"|\\\\s+)\")),eA=function(e){var t,n=(0,x.c)(7),r=e.text,o=e.matcher;if(n[0]!==o||n[1]!==r){var a,i,l=r.split(eb);n[3]!==o?(i=function(e,t){if(ev.test(e)){var n=ev.exec(e)[0];return\"function\"!=typeof o||o(n)?(0,A.jsx)(w.Fragment,{children:(0,A.jsx)(\"a\",{href:n,target:\"_blank\",rel:\"noreferrer noopener\",children:e})},\"link-\".concat(t)):e}try{var r=function(e){var t=e.match(ey);if(!t)return e;for(var n=t[1],r=\"\",o=0,a=\"\",i=0;i<n.length;i++){var l=n[i];if(0===o)\"_\"===l?o=1:\"$\"===l?o=2:r+=l;else if(1===o)\"_\"===l?(r+=\" \",o=0):\"$\"===l?(r+=\"_\",o=2):(r+=l,o=0);else if(2===o)if(2===a.length&&(r+=eg(a),a=\"\"),\"_\"===l){if(\"\"!==a)throw Error(\"invalid hex: `\".concat(a,\"`\"));o=3}else if(\"$\"===l){if(\"\"!==a)throw Error(\"invalid hex: `\".concat(a,\"`\"));o=0}else a+=l;else if(3===o)if(\"_\"===l)throw Error(\"invalid hex: `\".concat(a+l,\"`\"));else\"$\"===l?(r+=eg(a),a=\"\",o=0):a+=l}return r}(e);if(r!==e)return(0,A.jsxs)(\"i\",{children:[\"{\",r,\"}\"]},\"ident-\".concat(t))}catch(n){return(0,A.jsxs)(\"i\",{children:[\"{\",e,\" (decoding failed: \",\"\"+n,\")\",\"}\"]},\"ident-\".concat(t))}return(0,A.jsx)(w.Fragment,{children:e},\"text-\".concat(t))},n[3]=o,n[4]=i):i=n[4],a=l.map(i),n[0]=o,n[1]=r,n[2]=a}else a=n[2];return n[5]!==a?(t=(0,A.jsx)(A.Fragment,{children:a}),n[5]=a,n[6]=t):t=n[6],t},ex=[/^webpack-internal:\\/\\/\\/(\\([\\w-]+\\)\\/)?/,/^(webpack:\\/\\/\\/|webpack:\\/\\/(_N_E\\/)?)(\\([\\w-]+\\)\\/)?/];function ew(e){var t=!0,n=!1,r=void 0;try{for(var o,a=ex[Symbol.iterator]();!(t=(o=a.next()).done);t=!0){var i=o.value;if(i.test(e))return!0;e=e.replace(i,\"\")}}catch(e){n=!0,r=e}finally{try{t||null==a.return||a.return()}finally{if(n)throw r}}return!1}function eC(e){var t=!0,n=!1,r=void 0;try{for(var o,a=ex[Symbol.iterator]();!(t=(o=a.next()).done);t=!0){var i=o.value;e=e.replace(i,\"\")}}catch(e){n=!0,r=e}finally{try{t||null==a.return||a.return()}finally{if(n)throw r}}return e}function e_(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){n(e);return}l.done?t(s):Promise.resolve(s).then(r,o)}function ek(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){e_(a,r,o,i,l,\"next\",e)}function l(e){e_(a,r,o,i,l,\"throw\",e)}i(void 0)})}}function eE(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(n)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function ej(e,t){var n;return\"file://\"===e.file||(null==(n=e.file)?void 0:n.match(/https?:\\/\\//))?Promise.resolve({error:!1,reason:null,external:!0,sourceStackFrame:e,originalStackFrame:null,originalCodeFrame:null,ignored:!0}):ek(function(){var n,r;return eE(this,function(o){if(\"rejected\"===t.status)throw Error(t.reason);return[2,{error:!1,reason:null,external:!1,sourceStackFrame:e,originalStackFrame:(r=t.value).originalStackFrame,originalCodeFrame:r.originalCodeFrame||null,ignored:(null==(n=r.originalStackFrame)?void 0:n.ignored)||!1}]})})().catch(function(t){var n,r;return{error:!0,reason:null!=(r=null!=(n=null==t?void 0:t.message)?n:null==t?void 0:t.toString())?r:\"Unknown Error\",external:!1,sourceStackFrame:e,originalStackFrame:null,originalCodeFrame:null,ignored:!1}})}function eS(e,t,n){return ek(function(){var r,o,a,i;return eE(this,function(l){switch(l.label){case 0:r={frames:e,isServer:\"server\"===t,isEdgeServer:\"edge-server\"===t,isAppDirectory:n},o=void 0,a=void 0,l.label=1;case 1:return l.trys.push([1,3,,4]),[4,fetch(\"/__nextjs_original-stack-frames\",{method:\"POST\",body:JSON.stringify(r)})];case 2:return o=l.sent(),[3,4];case 3:return a=l.sent()+\"\",[3,4];case 4:if(!(o&&o.ok&&204!==o.status))return[3,6];return[4,o.json()];case 5:return i=l.sent(),[2,Promise.all(e.map(function(e,t){return ej(e,i[t])}))];case 6:if(!o)return[3,8];return[4,o.text()];case 7:a=l.sent(),l.label=8;case 8:return[2,Promise.all(e.map(function(e){return ej(e,{status:\"rejected\",reason:\"Failed to fetch the original stack frames \".concat(a?\": \".concat(a):\"\")})}))]}})})()}function eO(e){if(!e.file)return\"\";var t=ew(e.file),n=\"\";if(t)n=eC(e.file);else try{var r,o=new URL(e.file),a=\"\";(null==(r=globalThis.location)?void 0:r.origin)!==o.origin&&(\"null\"===o.origin?a+=o.protocol:a+=o.origin),a+=o.pathname,n=eC(a)}catch(t){n=eC(e.file)}return!ew(e.file)&&null!=e.line1&&n&&\"<anonymous>\"!==e.file&&(null!=e.column1?n+=\" (\".concat(e.line1,\":\").concat(e.column1,\")\"):n+=\" (\".concat(e.line1,\")\")),n}function eB(e){var t,n,r=(0,x.c)(6);r[0]!==e?(t=void 0===e?{}:e,r[0]=e,r[1]=t):t=r[1];var o=t.file,a=t.line1,i=t.column1;return r[2]!==i||r[3]!==o||r[4]!==a?(n=function(){if(null!=o&&null!=a&&null!=i){var e=new URLSearchParams;e.append(\"file\",o),e.append(\"line1\",String(a)),e.append(\"column1\",String(i)),self.fetch(\"\".concat( false||\"\",\"/__nextjs_launch-editor?\").concat(e.toString())).then(eP,function(e){console.error('Failed to open file \"'.concat(o,\" (\").concat(a,\":\").concat(i,')\" in your editor. Cause:'),e)})}},r[2]=i,r[3]=o,r[4]=a,r[5]=n):n=r[5],n}function eP(){}function eI(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function eT(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function ez(e){var t,n,r=(0,x.c)(3);return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",fill:\"currentColor\",d:\"M11.5 9.75V11.25C11.5 11.3881 11.3881 11.5 11.25 11.5H4.75C4.61193 11.5 4.5 11.3881 4.5 11.25L4.5 4.75C4.5 4.61193 4.61193 4.5 4.75 4.5H6.25H7V3H6.25H4.75C3.7835 3 3 3.7835 3 4.75V11.25C3 12.2165 3.7835 13 4.75 13H11.25C12.2165 13 13 12.2165 13 11.25V9.75V9H11.5V9.75ZM8.5 3H9.25H12.2495C12.6637 3 12.9995 3.33579 12.9995 3.75V6.75V7.5H11.4995V6.75V5.56066L8.53033 8.52978L8 9.06011L6.93934 7.99945L7.46967 7.46912L10.4388 4.5H9.25H8.5V3Z\"}),r[0]=t):t=r[0],r[1]!==e?(n=(0,A.jsx)(\"svg\",eT(eI({xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\"},e),{children:t})),r[1]=e,r[2]=n):n=r[2],n}function eD(e){var t,n,r=(0,x.c)(3);return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8.55846 2H7.44148L1.88975 13.5H14.1102L8.55846 2ZM9.90929 1.34788C9.65902 0.829456 9.13413 0.5 8.55846 0.5H7.44148C6.86581 0.5 6.34092 0.829454 6.09065 1.34787L0.192608 13.5653C-0.127943 14.2293 0.355835 15 1.09316 15H14.9068C15.6441 15 16.1279 14.2293 15.8073 13.5653L9.90929 1.34788ZM8.74997 4.75V5.5V8V8.75H7.24997V8V5.5V4.75H8.74997ZM7.99997 12C8.55226 12 8.99997 11.5523 8.99997 11C8.99997 10.4477 8.55226 10 7.99997 10C7.44769 10 6.99997 10.4477 6.99997 11C6.99997 11.5523 7.44769 12 7.99997 12Z\",fill:\"currentColor\"}),r[0]=t):t=r[0],r[1]!==e?(n=(0,A.jsx)(\"svg\",eT(eI({xmlns:\"http://www.w3.org/2000/svg\",height:\"16\",strokeLinejoin:\"round\",viewBox:\"-4 -4 24 24\",width:\"16\"},e),{children:t})),r[1]=e,r[2]=n):n=r[2],n}function eL(e){var t,n,r,o,a,i,l=(0,x.c)(6),s=e.lang;if(!s)return l[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(eZ,{}),l[0]=t):t=l[0],t;switch(s.toLowerCase()){case\"jsx\":case\"tsx\":return l[1]===Symbol.for(\"react.memo_cache_sentinel\")?(n=(0,A.jsx)(eU,{}),l[1]=n):n=l[1],n;case\"ts\":case\"typescript\":return l[2]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(eM,{}),l[2]=r):r=l[2],r;case\"javascript\":case\"js\":case\"mjs\":return l[3]===Symbol.for(\"react.memo_cache_sentinel\")?(o=(0,A.jsx)(eR,{}),l[3]=o):o=l[3],o;case\"json\":return l[4]===Symbol.for(\"react.memo_cache_sentinel\")?(a=(0,A.jsx)(eN,{}),l[4]=a):a=l[4],a;default:return l[5]===Symbol.for(\"react.memo_cache_sentinel\")?(i=(0,A.jsx)(eZ,{}),l[5]=i):i=l[5],i}}function eN(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{clipRule:\"evenodd\",fillRule:\"evenodd\",height:\"16\",viewBox:\"0 0 1321.45 1333.33\",width:\"16\",children:(0,A.jsx)(\"path\",{d:\"M221.37 618.44h757.94V405.15H755.14c-23.5 0-56.32-12.74-71.82-28.24-15.5-15.5-25-43.47-25-66.97V82.89H88.39c-1.99 0-3.49 1-4.49 2-1.5 1-2 2.5-2 4.5v1155.04c0 1.5 1 3.5 2 4.5 1 1.49 3 1.99 4.49 1.99H972.8c2 0 1.89-.99 2.89-1.99 1.5-1 3.61-3 3.61-4.5v-121.09H221.36c-44.96 0-82-36.9-82-81.99V700.44c0-45.1 36.9-82 82-82zm126.51 117.47h75.24v146.61c0 30.79-2.44 54.23-7.33 70.31-4.92 16.03-14.8 29.67-29.65 40.85-14.86 11.12-33.91 16.72-57.05 16.72-24.53 0-43.51-3.71-56.94-11.06-13.5-7.36-23.89-18.1-31.23-32.3-7.35-14.14-11.69-31.67-12.99-52.53l71.5-10.81c.11 11.81 1.07 20.61 2.81 26.33 1.76 5.78 4.75 10.37 9 13.95 2.87 2.33 6.94 3.46 12.25 3.46 8.4 0 14.58-3.46 18.53-10.37 3.9-6.92 5.87-18.6 5.87-35V735.92zm112.77 180.67l71.17-4.97c1.54 12.81 4.69 22.62 9.44 29.28 7.74 10.88 18.74 16.34 33.09 16.34 10.68 0 18.93-2.76 24.68-8.36 5.81-5.58 8.7-12.07 8.7-19.41 0-6.97-2.71-13.26-8.2-18.79-5.47-5.53-18.23-10.68-38.28-15.65-32.89-8.17-56.27-19.1-70.26-32.74-14.12-13.57-21.18-30.92-21.18-52.03 0-13.83 3.61-26.89 10.85-39.21 7.22-12.38 18.07-22.06 32.59-29.09 14.52-7.04 34.4-10.56 59.65-10.56 31 0 54.62 6.41 70.88 19.29 16.28 12.81 25.92 33.24 29.04 61.27l-70.5 4.65c-1.87-12.25-5.81-21.17-11.81-26.7-6.05-5.6-14.35-8.36-24.9-8.36-8.71 0-15.31 2.07-19.73 6.16-4.4 4.09-6.59 9.12-6.59 15.02 0 4.27 1.81 8.11 5.37 11.57 3.45 3.59 11.8 6.85 25.02 9.93 32.75 7.86 56.2 15.84 70.31 23.87 14.18 8.05 24.52 17.98 30.96 29.92 6.44 11.88 9.66 25.2 9.66 39.96 0 17.29-4.3 33.24-12.88 47.89-8.63 14.58-20.61 25.7-36.08 33.24-15.41 7.54-34.85 11.31-58.33 11.31-41.24 0-69.81-8.86-85.68-26.52-15.88-17.65-24.85-40.09-26.96-67.3zm248.74-45.5c0-44.05 11.02-78.36 33.09-102.87 22.09-24.57 52.82-36.82 92.24-36.82 40.38 0 71.5 12.07 93.34 36.13 21.86 24.13 32.77 57.94 32.77 101.37 0 31.54-4.75 57.36-14.3 77.54-9.54 20.18-23.37 35.89-41.4 47.13-18.07 11.24-40.55 16.84-67.48 16.84-27.33 0-49.99-4.83-67.94-14.52-17.92-9.74-32.49-25.07-43.62-46.06-11.13-20.92-16.72-47.19-16.72-78.74zm74.89.19c0 27.21 4.57 46.81 13.68 58.68 9.13 11.88 21.57 17.85 37.26 17.85 16.1 0 28.65-5.84 37.45-17.47 8.87-11.68 13.28-32.54 13.28-62.77 0-25.39-4.63-43.92-13.84-55.61-9.26-11.76-21.75-17.6-37.56-17.6-15.13 0-27.34 5.97-36.49 17.85-9.21 11.88-13.78 31.61-13.78 59.07zm209.08-135.36h69.99l90.98 149.05V735.91h70.83v269.96h-70.83l-90.48-148.24v148.24h-70.49V735.91zm67.71-117.47h178.37c45.1 0 82 37.04 82 82v340.91c0 44.96-37.03 81.99-82 81.99h-178.37v147c0 17.5-6.99 32.99-18.5 44.5-11.5 11.49-27 18.5-44.5 18.5H62.97c-17.5 0-32.99-7-44.5-18.5-11.49-11.5-18.5-27-18.5-44.5V63.49c0-17.5 7-33 18.5-44.5S45.97.49 62.97.49H700.1c1.5-.5 3-.5 4.5-.5 7 0 14 3 19 7.49h1c1 .5 1.5 1 2.5 2l325.46 329.47c5.5 5.5 9.5 13 9.5 21.5 0 2.5-.5 4.5-1 7v250.98zM732.61 303.47V96.99l232.48 235.47H761.6c-7.99 0-14.99-3.5-20.5-8.49-4.99-5-8.49-12.5-8.49-20.5z\",fill:\"currentColor\"})}),t[0]=e):e=t[0],e}function eR(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{height:\"16\",viewBox:\"0 0 50 50\",width:\"16\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,A.jsx)(\"path\",{d:\"M 43.335938 4 L 6.667969 4 C 5.195313 4 4 5.195313 4 6.667969 L 4 43.332031 C 4 44.804688 5.195313 46 6.667969 46 L 43.332031 46 C 44.804688 46 46 44.804688 46 43.335938 L 46 6.667969 C 46 5.195313 44.804688 4 43.335938 4 Z M 27 36.183594 C 27 40.179688 24.65625 42 21.234375 42 C 18.140625 42 15.910156 39.925781 15 38 L 18.144531 36.097656 C 18.75 37.171875 19.671875 38 21 38 C 22.269531 38 23 37.503906 23 35.574219 L 23 23 L 27 23 Z M 35.675781 42 C 32.132813 42 30.121094 40.214844 29 38 L 32 36 C 32.816406 37.335938 33.707031 38.613281 35.589844 38.613281 C 37.171875 38.613281 38 37.824219 38 36.730469 C 38 35.425781 37.140625 34.960938 35.402344 34.199219 L 34.449219 33.789063 C 31.695313 32.617188 29.863281 31.148438 29.863281 28.039063 C 29.863281 25.179688 32.046875 23 35.453125 23 C 37.878906 23 39.621094 23.84375 40.878906 26.054688 L 37.910156 27.964844 C 37.253906 26.789063 36.550781 26.328125 35.453125 26.328125 C 34.335938 26.328125 33.628906 27.039063 33.628906 27.964844 C 33.628906 29.109375 34.335938 29.570313 35.972656 30.28125 L 36.925781 30.691406 C 40.171875 32.078125 42 33.496094 42 36.683594 C 42 40.117188 39.300781 42 35.675781 42 Z\",fill:\"currentColor\"})}),t[0]=e):e=t[0],e}function eM(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsxs)(\"svg\",{fill:\"none\",height:\"14\",viewBox:\"0 0 512 512\",width:\"14\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,A.jsx)(\"rect\",{fill:\"currentColor\",height:\"512\",rx:\"50\",width:\"512\"}),(0,A.jsx)(\"rect\",{fill:\"currentColor\",height:\"512\",rx:\"50\",width:\"512\"}),(0,A.jsx)(\"path\",{clipRule:\"evenodd\",d:\"m316.939 407.424v50.061c8.138 4.172 17.763 7.3 28.875 9.386s22.823 3.129 35.135 3.129c11.999 0 23.397-1.147 34.196-3.442 10.799-2.294 20.268-6.075 28.406-11.342 8.138-5.266 14.581-12.15 19.328-20.65s7.121-19.007 7.121-31.522c0-9.074-1.356-17.026-4.069-23.857s-6.625-12.906-11.738-18.225c-5.112-5.319-11.242-10.091-18.389-14.315s-15.207-8.213-24.18-11.967c-6.573-2.712-12.468-5.345-17.685-7.9-5.217-2.556-9.651-5.163-13.303-7.822-3.652-2.66-6.469-5.476-8.451-8.448-1.982-2.973-2.974-6.336-2.974-10.091 0-3.441.887-6.544 2.661-9.308s4.278-5.136 7.512-7.118c3.235-1.981 7.199-3.52 11.894-4.615 4.696-1.095 9.912-1.642 15.651-1.642 4.173 0 8.581.313 13.224.938 4.643.626 9.312 1.591 14.008 2.894 4.695 1.304 9.259 2.947 13.694 4.928 4.434 1.982 8.529 4.276 12.285 6.884v-46.776c-7.616-2.92-15.937-5.084-24.962-6.492s-19.381-2.112-31.066-2.112c-11.895 0-23.163 1.278-33.805 3.833s-20.006 6.544-28.093 11.967c-8.086 5.424-14.476 12.333-19.171 20.729-4.695 8.395-7.043 18.433-7.043 30.114 0 14.914 4.304 27.638 12.912 38.172 8.607 10.533 21.675 19.45 39.204 26.751 6.886 2.816 13.303 5.579 19.25 8.291s11.086 5.528 15.415 8.448c4.33 2.92 7.747 6.101 10.252 9.543 2.504 3.441 3.756 7.352 3.756 11.733 0 3.233-.783 6.231-2.348 8.995s-3.939 5.162-7.121 7.196-7.147 3.624-11.894 4.771c-4.748 1.148-10.303 1.721-16.668 1.721-10.851 0-21.597-1.903-32.24-5.71-10.642-3.806-20.502-9.516-29.579-17.13zm-84.159-123.342h64.22v-41.082h-179v41.082h63.906v182.918h50.874z\",fill:\"var(--color-background-100)\",fillRule:\"evenodd\"})]}),t[0]=e):e=t[0],e}function eZ(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{width:\"16\",height:\"17\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M14.5 7v7a2.5 2.5 0 0 1-2.5 2.5H4A2.5 2.5 0 0 1 1.5 14V.5h7.586a1 1 0 0 1 .707.293l4.414 4.414a1 1 0 0 1 .293.707V7zM13 7v7a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2h5v5h5zM9.5 2.621V5.5h2.879L9.5 2.621z\",fill:\"currentColor\"})}),t[0]=e):e=t[0],e}function eU(){var e,t,n=(0,x.c)(2);return n[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"g\",{clipPath:\"url(#file_react_clip0_872_3183)\",children:(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M4.5 1.93782C4.70129 1.82161 4.99472 1.7858 5.41315 1.91053C5.83298 2.03567 6.33139 2.31073 6.87627 2.73948C7.01136 2.84578 7.14803 2.96052 7.28573 3.08331C6.86217 3.53446 6.44239 4.04358 6.03752 4.60092C5.35243 4.67288 4.70164 4.78186 4.09916 4.92309C4.06167 4.74244 4.03064 4.56671 4.00612 4.39656C3.90725 3.71031 3.91825 3.14114 4.01979 2.71499C4.12099 2.29025 4.29871 2.05404 4.5 1.93782ZM7.49466 1.95361C7.66225 2.08548 7.83092 2.22804 7.99999 2.38067C8.16906 2.22804 8.33773 2.08548 8.50532 1.95361C9.10921 1.47842 9.71982 1.12549 10.3012 0.952202C10.8839 0.778496 11.4838 0.7738 12 1.0718C12.5161 1.3698 12.812 1.89169 12.953 2.48322C13.0936 3.07333 13.0932 3.77858 12.9836 4.53917C12.9532 4.75024 12.9141 4.9676 12.8665 5.19034C13.0832 5.26044 13.291 5.33524 13.489 5.41444C14.2025 5.69983 14.8134 6.05217 15.2542 6.46899C15.696 6.8868 16 7.404 16 8C16 8.596 15.696 9.11319 15.2542 9.53101C14.8134 9.94783 14.2025 10.3002 13.489 10.5856C13.291 10.6648 13.0832 10.7396 12.8665 10.8097C12.9141 11.0324 12.9532 11.2498 12.9837 11.4608C13.0932 12.2214 13.0936 12.9267 12.953 13.5168C12.812 14.1083 12.5161 14.6302 12 14.9282C11.4839 15.2262 10.8839 15.2215 10.3012 15.0478C9.71984 14.8745 9.10923 14.5216 8.50534 14.0464C8.33775 13.9145 8.16906 13.7719 7.99999 13.6193C7.83091 13.7719 7.66223 13.9145 7.49464 14.0464C6.89075 14.5216 6.28014 14.8745 5.69879 15.0478C5.11605 15.2215 4.51613 15.2262 3.99998 14.9282C3.48383 14.6302 3.18794 14.1083 3.047 13.5168C2.9064 12.9267 2.90674 12.2214 3.01632 11.4608C3.04673 11.2498 3.08586 11.0324 3.13351 10.8097C2.91679 10.7395 2.709 10.6648 2.511 10.5856C1.79752 10.3002 1.18658 9.94783 0.745833 9.53101C0.304028 9.11319 0 8.596 0 8C0 7.404 0.304028 6.8868 0.745833 6.46899C1.18658 6.05217 1.79752 5.69983 2.511 5.41444C2.709 5.33524 2.9168 5.26044 3.13352 5.19034C3.08587 4.9676 3.04675 4.75024 3.01634 4.53917C2.90676 3.77858 2.90642 3.07332 3.04702 2.48321C3.18796 1.89169 3.48385 1.3698 4 1.0718C4.51615 0.773798 5.11607 0.778495 5.69881 0.952201C6.28016 1.12549 6.89077 1.47841 7.49466 1.95361ZM7.36747 4.51025C7.57735 4.25194 7.78881 4.00927 7.99999 3.78356C8.21117 4.00927 8.42263 4.25194 8.63251 4.51025C8.42369 4.50346 8.21274 4.5 8 4.5C7.78725 4.5 7.5763 4.50345 7.36747 4.51025ZM8.71425 3.08331C9.13781 3.53447 9.55759 4.04358 9.96246 4.60092C10.6475 4.67288 11.2983 4.78186 11.9008 4.92309C11.9383 4.74244 11.9693 4.56671 11.9939 4.39657C12.0927 3.71031 12.0817 3.14114 11.9802 2.71499C11.879 2.29025 11.7013 2.05404 11.5 1.93782C11.2987 1.82161 11.0053 1.7858 10.5868 1.91053C10.167 2.03568 9.66859 2.31073 9.12371 2.73948C8.98862 2.84578 8.85196 2.96052 8.71425 3.08331ZM8 5.5C8.48433 5.5 8.95638 5.51885 9.41188 5.55456C9.67056 5.93118 9.9229 6.33056 10.1651 6.75C10.4072 7.16944 10.6269 7.58766 10.8237 7.99998C10.6269 8.41232 10.4072 8.83055 10.165 9.25C9.92288 9.66944 9.67053 10.0688 9.41185 10.4454C8.95636 10.4812 8.48432 10.5 8 10.5C7.51567 10.5 7.04363 10.4812 6.58813 10.4454C6.32945 10.0688 6.0771 9.66944 5.83494 9.25C5.59277 8.83055 5.37306 8.41232 5.17624 7.99998C5.37306 7.58765 5.59275 7.16944 5.83492 6.75C6.07708 6.33056 6.32942 5.93118 6.5881 5.55456C7.04361 5.51884 7.51566 5.5 8 5.5ZM11.0311 6.25C11.1375 6.43423 11.2399 6.61864 11.3385 6.80287C11.4572 6.49197 11.5616 6.18752 11.6515 5.89178C11.3505 5.82175 11.0346 5.75996 10.706 5.70736C10.8163 5.8848 10.9247 6.06576 11.0311 6.25ZM11.0311 9.75C11.1374 9.56576 11.2399 9.38133 11.3385 9.19709C11.4572 9.50801 11.5617 9.81246 11.6515 10.1082C11.3505 10.1782 11.0346 10.24 10.7059 10.2926C10.8162 10.1152 10.9247 9.93424 11.0311 9.75ZM11.9249 7.99998C12.2051 8.62927 12.4362 9.24738 12.6151 9.83977C12.7903 9.78191 12.958 9.72092 13.1176 9.65708C13.7614 9.39958 14.2488 9.10547 14.5671 8.80446C14.8843 8.50445 15 8.23243 15 8C15 7.76757 14.8843 7.49555 14.5671 7.19554C14.2488 6.89453 13.7614 6.60042 13.1176 6.34292C12.958 6.27907 12.7903 6.21808 12.6151 6.16022C12.4362 6.7526 12.2051 7.37069 11.9249 7.99998ZM9.96244 11.3991C10.6475 11.3271 11.2983 11.2181 11.9008 11.0769C11.9383 11.2576 11.9694 11.4333 11.9939 11.6034C12.0928 12.2897 12.0817 12.8589 11.9802 13.285C11.879 13.7098 11.7013 13.946 11.5 14.0622C11.2987 14.1784 11.0053 14.2142 10.5868 14.0895C10.167 13.9643 9.66861 13.6893 9.12373 13.2605C8.98863 13.1542 8.85196 13.0395 8.71424 12.9167C9.1378 12.4655 9.55758 11.9564 9.96244 11.3991ZM8.63249 11.4898C8.42262 11.7481 8.21116 11.9907 7.99999 12.2164C7.78881 11.9907 7.57737 11.7481 7.36749 11.4897C7.57631 11.4965 7.78726 11.5 8 11.5C8.21273 11.5 8.42367 11.4965 8.63249 11.4898ZM4.96891 9.75C5.07528 9.93424 5.18375 10.1152 5.29404 10.2926C4.9654 10.24 4.64951 10.1782 4.34844 10.1082C4.43833 9.81246 4.54276 9.508 4.66152 9.19708C4.76005 9.38133 4.86254 9.56575 4.96891 9.75ZM6.03754 11.3991C5.35244 11.3271 4.70163 11.2181 4.09914 11.0769C4.06165 11.2576 4.03062 11.4333 4.0061 11.6034C3.90723 12.2897 3.91823 12.8589 4.01977 13.285C4.12097 13.7098 4.29869 13.946 4.49998 14.0622C4.70127 14.1784 4.9947 14.2142 5.41313 14.0895C5.83296 13.9643 6.33137 13.6893 6.87625 13.2605C7.01135 13.1542 7.14802 13.0395 7.28573 12.9167C6.86217 12.4655 6.4424 11.9564 6.03754 11.3991ZM4.07507 7.99998C3.79484 8.62927 3.56381 9.24737 3.38489 9.83977C3.20969 9.78191 3.042 9.72092 2.88239 9.65708C2.23864 9.39958 1.75123 9.10547 1.43294 8.80446C1.11571 8.50445 1 8.23243 1 8C1 7.76757 1.11571 7.49555 1.43294 7.19554C1.75123 6.89453 2.23864 6.60042 2.88239 6.34292C3.042 6.27907 3.2097 6.21808 3.3849 6.16022C3.56383 6.75261 3.79484 7.37069 4.07507 7.99998ZM4.66152 6.80287C4.54277 6.49197 4.43835 6.18752 4.34846 5.89178C4.64952 5.82175 4.96539 5.75996 5.29402 5.70736C5.18373 5.8848 5.07526 6.06576 4.96889 6.25C4.86253 6.43423 4.76005 6.61864 4.66152 6.80287ZM9.25 8C9.25 8.69036 8.69036 9.25 8 9.25C7.30964 9.25 6.75 8.69036 6.75 8C6.75 7.30965 7.30964 6.75 8 6.75C8.69036 6.75 9.25 7.30965 9.25 8Z\",fill:\"currentColor\"})}),n[0]=e):e=n[0],n[1]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsxs)(\"svg\",{height:\"16\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",width:\"16\",children:[e,(0,A.jsx)(\"defs\",{children:(0,A.jsx)(\"clipPath\",{id:\"file_react_clip0_872_3183\",children:(0,A.jsx)(\"rect\",{width:\"16\",height:\"16\",fill:\"white\"})})})]}),n[1]=t):t=n[1],t}var eF=__nested_webpack_require_378273__(\"./dist/compiled/anser/index.js\"),eq=__nested_webpack_require_378273__.n(eF),eH=__nested_webpack_require_378273__(\"./dist/compiled/strip-ansi/index.js\"),eV=__nested_webpack_require_378273__.n(eH);function e$(e){var t=e.split(/\\r?\\n/g),n=t.map(function(e){return null===/^>? +\\d+ +\\| [ ]+/.exec(eV()(e))?null:/^>? +\\d+ +\\| ( *)/.exec(eV()(e))}).filter(Boolean).map(function(e){return e.pop()}).reduce(function(e,t){return isNaN(e)?t.length:Math.min(e,t.length)},NaN);return n>1?t.map(function(e,t){return~(t=e.indexOf(\"|\"))?e.substring(0,t)+e.substring(t).replace(\"^\\\\ {\".concat(n,\"}\"),\"\"):e}).join(\"\\n\"):t.join(\"\\n\")}function eW(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function eY(e){var t,n,r,o=e.stackFrame,a=e.codeFrame,i=(0,w.useMemo)(function(){return(function(e){var t=eq().ansiToJson(e,{json:!0,use_classes:!0,remove_empty:!0}),n=[],r=[],o=!0,a=!1,i=void 0;try{for(var l,s=t[Symbol.iterator]();!(o=(l=s.next()).done);o=!0){var c=l.value;if(\"string\"==typeof c.content&&c.content.includes(\"\\n\"))for(var u=c.content.split(\"\\n\"),d=0;d<u.length;d++){var f=u[d];f&&r.push(function(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},c),{content:f})),d<u.length-1&&(n.push(r),r=[])}else r.push(c)}}catch(e){a=!0,i=e}finally{try{o||null==s.return||s.return()}finally{if(a)throw i}}return r.length>0&&n.push(r),n})(e$(a)).map(function(e){var t,n,r,a,i,l,s,c,u;return{line:e,parsedLine:(t=e,n=o,((null==(r=t[0])?void 0:r.content)===\">\"||(null==(a=t[0])?void 0:a.content)===\" \")&&(s=null==(l=t[1])||null==(u=l.content)||null==(c=u.replace(\"|\",\"\"))?void 0:c.trim()),{lineNumber:s,isErroredLine:s===(null==(i=n.line1)?void 0:i.toString())})}})},[a,o]),l=eB({file:o.file,line1:null!=(n=o.line1)?n:1,column1:null!=(r=o.column1)?r:1}),s=null==o||null==(t=o.file)?void 0:t.split(\".\").pop();return(0,A.jsxs)(\"div\",{\"data-nextjs-codeframe\":!0,children:[(0,A.jsx)(\"div\",{className:\"code-frame-header\",children:(0,A.jsxs)(\"p\",{className:\"code-frame-link\",children:[(0,A.jsx)(\"span\",{className:\"code-frame-icon\",children:(0,A.jsx)(eL,{lang:s})}),(0,A.jsxs)(\"span\",{\"data-text\":!0,children:[eO(o),\" @\",\" \",(0,A.jsx)(eA,{text:o.methodName})]}),(0,A.jsx)(\"button\",{\"aria-label\":\"Open in editor\",\"data-with-open-in-editor-link-source-file\":!0,onClick:l,children:(0,A.jsx)(\"span\",{className:\"code-frame-icon\",\"data-icon\":\"right\",children:(0,A.jsx)(ez,{width:16,height:16})})})]})}),(0,A.jsx)(\"pre\",{className:\"code-frame-pre\",children:(0,A.jsx)(\"div\",{className:\"code-frame-lines\",children:i.map(function(e,t){var n,r,o=e.line,a=e.parsedLine,i=a.lineNumber,l=a.isErroredLine,s={};return i&&(s[\"data-nextjs-codeframe-line\"]=i),l&&(s[\"data-nextjs-codeframe-line--errored\"]=!0),(0,A.jsx)(\"div\",(n=eW({},s),r=r={children:o.map(function(e,t){return(0,A.jsx)(\"span\",{style:eW({color:e.fg?\"var(--color-\".concat(e.fg,\")\"):void 0},\"bold\"===e.decoration?{fontWeight:500}:\"italic\"===e.decoration?{fontStyle:\"italic\"}:void 0),children:e.content},\"frame-\".concat(t))})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))}),n),\"line-\".concat(t))})})})]})}var eK=function(e){var t,n,r,o,a,i,l=(0,x.c)(8);return(l[0]!==e?(a=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"children\",\"className\"]),r=e.children,o=e.className,l[0]=e,l[1]=r,l[2]=o,l[3]=a):(r=l[1],o=l[2],a=l[3]),l[4]!==r||l[5]!==o||l[6]!==a)?(i=(0,A.jsx)(\"div\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-body\":!0,className:o},a),n=n={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),l[4]=r,l[5]=o,l[6]=a,l[7]=i):i=l[7],i},eX=function(e){var t,n,r,o,a,i,l=(0,x.c)(8);return(l[0]!==e?(a=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"children\",\"className\"]),r=e.children,o=e.className,l[0]=e,l[1]=r,l[2]=o,l[3]=a):(r=l[1],o=l[2],a=l[3]),l[4]!==r||l[5]!==o||l[6]!==a)?(i=(0,A.jsx)(\"div\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-content\":!0,className:o},a),n=n={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),l[4]=r,l[5]=o,l[6]=a,l[7]=i):i=l[7],i};function eG(){var e,t,n=(e=[\"\\n [data-nextjs-dialog-root] {\\n --next-dialog-radius: var(--rounded-xl);\\n --next-dialog-max-width: 960px;\\n --next-dialog-row-padding: 16px;\\n --next-dialog-padding: 12px;\\n --next-dialog-notch-height: 42px;\\n --next-dialog-border-width: 1px;\\n\\n display: flex;\\n flex-direction: column;\\n width: 100%;\\n max-height: calc(100% - 56px);\\n max-width: var(--next-dialog-max-width);\\n margin-right: auto;\\n margin-left: auto;\\n scale: 0.97;\\n opacity: 0;\\n transition-property: scale, opacity;\\n transition-duration: var(--transition-duration);\\n transition-timing-function: var(--timing-overlay);\\n\\n &[data-rendered='true'] {\\n opacity: 1;\\n scale: 1;\\n }\\n\\n [data-nextjs-scroll-fader][data-side='top'] {\\n left: 1px;\\n top: calc(\\n var(--next-dialog-notch-height) + var(--next-dialog-border-width)\\n );\\n width: calc(100% - var(--next-dialog-padding));\\n opacity: 0;\\n }\\n }\\n\\n [data-nextjs-dialog] {\\n outline: 0;\\n }\\n\\n [data-nextjs-dialog-backdrop] {\\n opacity: 0;\\n transition: opacity var(--transition-duration) var(--timing-overlay);\\n }\\n\\n [data-nextjs-dialog-overlay] {\\n margin: 8px;\\n }\\n\\n [data-nextjs-dialog-overlay][data-rendered='true']\\n [data-nextjs-dialog-backdrop] {\\n opacity: 1;\\n }\\n\\n [data-nextjs-dialog-content] {\\n border: none;\\n margin: 0;\\n display: flex;\\n flex-direction: column;\\n position: relative;\\n padding: var(--next-dialog-padding);\\n }\\n\\n [data-nextjs-dialog-content] > [data-nextjs-dialog-header] {\\n flex-shrink: 0;\\n margin-bottom: 8px;\\n }\\n\\n [data-nextjs-dialog-content] > [data-nextjs-dialog-body] {\\n position: relative;\\n flex: 1 1 auto;\\n }\\n\\n @media (max-height: 812px) {\\n [data-nextjs-dialog-overlay] {\\n max-height: calc(100% - 15px);\\n }\\n }\\n\\n @media (min-width: 576px) {\\n [data-nextjs-dialog-root] {\\n --next-dialog-max-width: 540px;\\n }\\n }\\n\\n @media (min-width: 768px) {\\n [data-nextjs-dialog-root] {\\n --next-dialog-max-width: 720px;\\n }\\n }\\n\\n @media (min-width: 992px) {\\n [data-nextjs-dialog-root] {\\n --next-dialog-max-width: 960px;\\n }\\n }\\n\"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return eG=function(){return n},n}var eQ=eu(eG());function eJ(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter(Boolean).join(\" \")}function e0(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function e1(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function e2(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function e4(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return e0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return e0(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function e5(e,t){return\"reset\"===t.type?{state:\"initial\"}:\"copied\"===t.type?{state:\"success\"}:\"copying\"===t.type?{state:\"pending\"}:\"error\"===t.type?{state:\"error\",error:t.error}:e}function e3(e){return{state:\"error\",error:e}}function e6(){return{state:\"success\"}}var e9=\"function\"==typeof w.useActionState?function(e){var t,n,r,o,a,i=(0,x.c)(8);i[0]!==e?(t=function(t,n){return\"reset\"===n?{state:\"initial\"}:\"copy\"===n?navigator.clipboard?navigator.clipboard.writeText(e).then(e6,e3):{state:\"error\",error:\"Copy to clipboard is not supported in this browser\"}:t},i[0]=e,i[1]=t):t=i[1],i[2]===Symbol.for(\"react.memo_cache_sentinel\")?(n={state:\"initial\"},i[2]=n):n=i[2];var l=e4(w.useActionState(t,n),3),s=l[0],c=l[1],u=l[2];i[3]===Symbol.for(\"react.memo_cache_sentinel\")?(r=function(){w.startTransition(function(){c(\"copy\")})},i[3]=r):r=i[3];var d=r;i[4]===Symbol.for(\"react.memo_cache_sentinel\")?(o=function(){c(\"reset\")},i[4]=o):o=i[4];var f=o;return i[5]!==s||i[6]!==u?(a=[s,d,f,u],i[5]=s,i[6]=u,i[7]=a):a=i[7],a}:function(e){var t,n,r,o,a,i,l=(0,x.c)(12);l[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t={state:\"initial\"},l[0]=t):t=l[0];var s=e4(w.useReducer(e5,t),2),c=s[0],u=s[1];return l[1]!==e||l[2]!==c.state?(n=function(){r||(navigator.clipboard?(u({type:\"copying\"}),navigator.clipboard.writeText(e).then(function(){u({type:\"copied\"})},function(e){u({type:\"error\",error:e})})):u({type:\"error\",error:\"Copy to clipboard is not supported in this browser\"}))},l[6]===Symbol.for(\"react.memo_cache_sentinel\")?(a=function(){u({type:\"reset\"})},l[6]=a):a=l[6],o=a,r=\"pending\"===c.state,l[1]=e,l[2]=c.state,l[3]=n,l[4]=r,l[5]=o):(n=l[3],r=l[4],o=l[5]),l[7]!==n||l[8]!==c||l[9]!==r||l[10]!==o?(i=[c,n,o,r],l[7]=n,l[8]=c,l[9]=r,l[10]=o,l[11]=i):i=l[11],i};function e8(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h,m,g,y,v=(0,x.c)(40);v[0]!==e?(i=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"content\",\"getContent\",\"actionLabel\",\"successLabel\",\"icon\",\"disabled\"]),n=e.content,o=e.getContent,t=e.actionLabel,l=e.successLabel,a=e.icon,r=e.disabled,v[0]=e,v[1]=t,v[2]=n,v[3]=r,v[4]=o,v[5]=a,v[6]=i,v[7]=l):(t=v[1],n=v[2],r=v[3],o=v[4],a=v[5],i=v[6],l=v[7]),v[8]!==n||v[9]!==o?(s=function(){return n||(o?o():\"\")},v[8]=n,v[9]=o,v[10]=s):s=v[10];var b=s;v[11]!==b?(c=b(),v[11]=b,v[12]=c):c=v[12];var C=e4(e9(c),4),_=C[0],k=C[1],E=C[2],j=C[3],S=\"error\"===_.state?_.error:null;v[13]!==S?(u=function(){null!==S&&console.warn(S)},d=[S],v[13]=S,v[14]=u,v[15]=d):(u=v[14],d=v[15]),w.useEffect(u,d),v[16]!==_.state||v[17]!==E?(f=function(){if(\"success\"===_.state){var e=setTimeout(function(){E()},2e3);return function(){clearTimeout(e)}}},v[16]=_.state,v[17]=E,v[18]=f):f=v[18],v[19]!==_.state||v[20]!==j||v[21]!==E?(p=[j,_.state,E],v[19]=_.state,v[20]=j,v[21]=E,v[22]=p):p=v[22],w.useEffect(f,p);var O=!navigator.clipboard||j||r||!!S,B=\"success\"===_.state?l:t;v[23]!==_.state||v[24]!==a?(h=\"success\"===_.state?(0,A.jsx)(te,{}):a||(0,A.jsx)(e7,{width:14,height:14,className:\"error-overlay-toolbar-button-icon\"}),v[23]=_.state,v[24]=a,v[25]=h):h=v[25];var P=h,I=\"nextjs-data-copy-button--\".concat(_.state);v[26]!==e.className||v[27]!==I?(m=eJ(e.className,\"nextjs-data-copy-button\",I),v[26]=e.className,v[27]=I,v[28]=m):m=v[28],v[29]!==k||v[30]!==O?(g=function(){O||k()},v[29]=k,v[30]=O,v[31]=g):g=v[31];var T=\"error\"===_.state?\" \".concat(_.error):null;return v[32]!==O||v[33]!==B||v[34]!==P||v[35]!==i||v[36]!==T||v[37]!==m||v[38]!==g?(y=(0,A.jsxs)(\"button\",e2(e1({},i),{type:\"button\",title:B,\"aria-label\":B,\"aria-disabled\":O,disabled:O,\"data-nextjs-copy-button\":!0,className:m,onClick:g,children:[P,T]})),v[32]=O,v[33]=B,v[34]=P,v[35]=i,v[36]=T,v[37]=m,v[38]=g,v[39]=y):y=v[39],y}function e7(e){var t,n,r=(0,x.c)(3);return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M2.406.438c-.845 0-1.531.685-1.531 1.53v6.563c0 .846.686 1.531 1.531 1.531H3.937V8.75H2.406a.219.219 0 0 1-.219-.219V1.97c0-.121.098-.219.22-.219h4.812c.12 0 .218.098.218.219v.656H8.75v-.656c0-.846-.686-1.532-1.531-1.532H2.406zm4.375 3.5c-.845 0-1.531.685-1.531 1.53v6.563c0 .846.686 1.531 1.531 1.531h4.813c.845 0 1.531-.685 1.531-1.53V5.468c0-.846-.686-1.532-1.531-1.532H6.78zm-.218 1.53c0-.12.097-.218.218-.218h4.813c.12 0 .219.098.219.219v6.562c0 .121-.098.219-.22.219H6.782a.219.219 0 0 1-.218-.219V5.47z\",fill:\"currentColor\"}),r[0]=t):t=r[0],r[1]!==e?(n=(0,A.jsx)(\"svg\",e2(e1({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:t})),r[1]=e,r[2]=n):n=r[2],n}function te(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{height:\"16\",xlinkTitle:\"copied\",viewBox:\"0 0 16 16\",width:\"16\",stroke:\"currentColor\",fill:\"currentColor\",children:(0,A.jsx)(\"path\",{d:\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"})}),t[0]=e):e=t[0],e}function tt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function tn(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}var tr=function(){if(\"undefined\"==typeof window)return!1;var e=\"chrome\"in window&&window.chrome,t=window.navigator.vendor;return null!=e&&\"Google Inc.\"===t}();function to(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h=(0,x.c)(14);return h[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t={maskType:\"luminance\"},h[0]=t):t=h[0],h[1]===Symbol.for(\"react.memo_cache_sentinel\")?(n=(0,A.jsx)(\"mask\",{id:\"nodejs_icon_mask_a\",style:t,maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"0\",width:\"14\",height:\"14\",children:(0,A.jsx)(\"path\",{d:\"M6.67.089 1.205 3.256a.663.663 0 0 0-.33.573v6.339c0 .237.126.455.33.574l5.466 3.17a.66.66 0 0 0 .66 0l5.465-3.17a.664.664 0 0 0 .329-.574V3.829a.663.663 0 0 0-.33-.573L7.33.089a.663.663 0 0 0-.661 0\",fill:\"#fff\"})}),h[1]=n):n=h[1],h[2]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_a)\",children:(0,A.jsx)(\"path\",{d:\"M18.648 2.717 3.248-4.86-4.648 11.31l15.4 7.58 7.896-16.174z\",fill:\"url(#nodejs_icon_linear_gradient_b)\"})}),h[2]=r):r=h[2],h[3]===Symbol.for(\"react.memo_cache_sentinel\")?(o={maskType:\"luminance\"},h[3]=o):o=h[3],h[4]===Symbol.for(\"react.memo_cache_sentinel\")?(a=(0,A.jsx)(\"mask\",{id:\"nodejs_icon_mask_c\",style:o,maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"12\",height:\"14\",children:(0,A.jsx)(\"path\",{d:\"M1.01 10.57a.663.663 0 0 0 .195.17l4.688 2.72.781.45a.66.66 0 0 0 .51.063l5.764-10.597a.653.653 0 0 0-.153-.122L9.216 1.18 7.325.087a.688.688 0 0 0-.171-.07L1.01 10.57z\",fill:\"#fff\"})}),h[4]=a):a=h[4],h[5]===Symbol.for(\"react.memo_cache_sentinel\")?(i=(0,A.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_c)\",children:(0,A.jsx)(\"path\",{d:\"M-5.647 4.958 5.226 19.734l14.38-10.667L8.734-5.71-5.647 4.958z\",fill:\"url(#nodejs_icon_linear_gradient_d)\"})}),h[5]=i):i=h[5],h[6]===Symbol.for(\"react.memo_cache_sentinel\")?(l={maskType:\"luminance\"},h[6]=l):l=h[6],h[7]===Symbol.for(\"react.memo_cache_sentinel\")?(s=(0,A.jsx)(\"mask\",{id:\"nodejs_icon_mask_e\",style:l,maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"13\",height:\"14\",children:(0,A.jsx)(\"path\",{d:\"M6.934.004A.665.665 0 0 0 6.67.09L1.22 3.247l5.877 10.746a.655.655 0 0 0 .235-.08l5.465-3.17a.665.665 0 0 0 .319-.453L7.126.015a.684.684 0 0 0-.189-.01\",fill:\"#fff\"})}),h[7]=s):s=h[7],h[8]===Symbol.for(\"react.memo_cache_sentinel\")?(c=(0,A.jsxs)(\"g\",{children:[s,(0,A.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_e)\",children:(0,A.jsx)(\"path\",{d:\"M1.22.002v13.992h11.894V.002H1.22z\",fill:\"url(#nodejs_icon_linear_gradient_f)\"})})]}),h[8]=c):c=h[8],h[9]===Symbol.for(\"react.memo_cache_sentinel\")?(u=(0,A.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_b\",x1:\"10.943\",y1:\"-1.084\",x2:\"2.997\",y2:\"15.062\",gradientUnits:\"userSpaceOnUse\",children:[(0,A.jsx)(\"stop\",{offset:\".3\",stopColor:\"#3E863D\"}),(0,A.jsx)(\"stop\",{offset:\".5\",stopColor:\"#55934F\"}),(0,A.jsx)(\"stop\",{offset:\".8\",stopColor:\"#5AAD45\"})]}),h[9]=u):u=h[9],h[10]===Symbol.for(\"react.memo_cache_sentinel\")?(d=(0,A.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_d\",x1:\"-.145\",y1:\"12.431\",x2:\"14.277\",y2:\"1.818\",gradientUnits:\"userSpaceOnUse\",children:[(0,A.jsx)(\"stop\",{offset:\".57\",stopColor:\"#3E863D\"}),(0,A.jsx)(\"stop\",{offset:\".72\",stopColor:\"#619857\"}),(0,A.jsx)(\"stop\",{offset:\"1\",stopColor:\"#76AC64\"})]}),h[10]=d):d=h[10],h[11]===Symbol.for(\"react.memo_cache_sentinel\")?(f=(0,A.jsxs)(\"defs\",{children:[u,d,(0,A.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_f\",x1:\"1.225\",y1:\"6.998\",x2:\"13.116\",y2:\"6.998\",gradientUnits:\"userSpaceOnUse\",children:[(0,A.jsx)(\"stop\",{offset:\".16\",stopColor:\"#6BBF47\"}),(0,A.jsx)(\"stop\",{offset:\".38\",stopColor:\"#79B461\"}),(0,A.jsx)(\"stop\",{offset:\".47\",stopColor:\"#75AC64\"}),(0,A.jsx)(\"stop\",{offset:\".7\",stopColor:\"#659E5A\"}),(0,A.jsx)(\"stop\",{offset:\".9\",stopColor:\"#3E863D\"})]})]}),h[11]=f):f=h[11],h[12]!==e?(p=(0,A.jsxs)(\"svg\",tn(tt({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:[n,r,a,i,c,f]})),h[12]=e,h[13]=p):p=h[13],p}function ta(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h=(0,x.c)(14);return h[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t={maskType:\"luminance\"},h[0]=t):t=h[0],h[1]===Symbol.for(\"react.memo_cache_sentinel\")?(n=(0,A.jsx)(\"mask\",{id:\"nodejs_icon_mask_a\",style:t,maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"0\",width:\"14\",height:\"14\",children:(0,A.jsx)(\"path\",{d:\"M6.67.089 1.205 3.256a.663.663 0 0 0-.33.573v6.339c0 .237.126.455.33.574l5.466 3.17a.66.66 0 0 0 .66 0l5.465-3.17a.664.664 0 0 0 .329-.574V3.829a.663.663 0 0 0-.33-.573L7.33.089a.663.663 0 0 0-.661 0\",fill:\"#fff\"})}),h[1]=n):n=h[1],h[2]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_a)\",children:(0,A.jsx)(\"path\",{d:\"M18.648 2.717 3.248-4.86-4.646 11.31l15.399 7.58 7.896-16.174z\",fill:\"url(#nodejs_icon_linear_gradient_b)\"})}),h[2]=r):r=h[2],h[3]===Symbol.for(\"react.memo_cache_sentinel\")?(o={maskType:\"luminance\"},h[3]=o):o=h[3],h[4]===Symbol.for(\"react.memo_cache_sentinel\")?(a=(0,A.jsx)(\"mask\",{id:\"nodejs_icon_mask_c\",style:o,maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"12\",height:\"15\",children:(0,A.jsx)(\"path\",{d:\"M1.01 10.571a.66.66 0 0 0 .195.172l4.688 2.718.781.451a.66.66 0 0 0 .51.063l5.764-10.597a.653.653 0 0 0-.153-.122L9.216 1.181 7.325.09a.688.688 0 0 0-.171-.07L1.01 10.572z\",fill:\"#fff\"})}),h[4]=a):a=h[4],h[5]===Symbol.for(\"react.memo_cache_sentinel\")?(i=(0,A.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_c)\",children:(0,A.jsx)(\"path\",{d:\"M-5.647 4.96 5.226 19.736 19.606 9.07 8.734-5.707-5.647 4.96z\",fill:\"url(#nodejs_icon_linear_gradient_d)\"})}),h[5]=i):i=h[5],h[6]===Symbol.for(\"react.memo_cache_sentinel\")?(l={maskType:\"luminance\"},h[6]=l):l=h[6],h[7]===Symbol.for(\"react.memo_cache_sentinel\")?(s=(0,A.jsx)(\"mask\",{id:\"nodejs_icon_mask_e\",style:l,maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"13\",height:\"14\",children:(0,A.jsx)(\"path\",{d:\"M6.935.003a.665.665 0 0 0-.264.085l-5.45 3.158 5.877 10.747a.653.653 0 0 0 .235-.082l5.465-3.17a.665.665 0 0 0 .319-.452L7.127.014a.684.684 0 0 0-.189-.01\",fill:\"#fff\"})}),h[7]=s):s=h[7],h[8]===Symbol.for(\"react.memo_cache_sentinel\")?(c=(0,A.jsxs)(\"g\",{children:[s,(0,A.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_e)\",children:(0,A.jsx)(\"path\",{d:\"M1.222.001v13.992h11.893V0H1.222z\",fill:\"url(#nodejs_icon_linear_gradient_f)\"})})]}),h[8]=c):c=h[8],h[9]===Symbol.for(\"react.memo_cache_sentinel\")?(u=(0,A.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_b\",x1:\"10.944\",y1:\"-1.084\",x2:\"2.997\",y2:\"15.062\",gradientUnits:\"userSpaceOnUse\",children:[(0,A.jsx)(\"stop\",{offset:\".3\",stopColor:\"#676767\"}),(0,A.jsx)(\"stop\",{offset:\".5\",stopColor:\"#858585\"}),(0,A.jsx)(\"stop\",{offset:\".8\",stopColor:\"#989A98\"})]}),h[9]=u):u=h[9],h[10]===Symbol.for(\"react.memo_cache_sentinel\")?(d=(0,A.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_d\",x1:\"-.145\",y1:\"12.433\",x2:\"14.277\",y2:\"1.819\",gradientUnits:\"userSpaceOnUse\",children:[(0,A.jsx)(\"stop\",{offset:\".57\",stopColor:\"#747474\"}),(0,A.jsx)(\"stop\",{offset:\".72\",stopColor:\"#707070\"}),(0,A.jsx)(\"stop\",{offset:\"1\",stopColor:\"#929292\"})]}),h[10]=d):d=h[10],h[11]===Symbol.for(\"react.memo_cache_sentinel\")?(f=(0,A.jsxs)(\"defs\",{children:[u,d,(0,A.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_f\",x1:\"1.226\",y1:\"6.997\",x2:\"13.117\",y2:\"6.997\",gradientUnits:\"userSpaceOnUse\",children:[(0,A.jsx)(\"stop\",{offset:\".16\",stopColor:\"#878787\"}),(0,A.jsx)(\"stop\",{offset:\".38\",stopColor:\"#A9A9A9\"}),(0,A.jsx)(\"stop\",{offset:\".47\",stopColor:\"#A5A5A5\"}),(0,A.jsx)(\"stop\",{offset:\".7\",stopColor:\"#8F8F8F\"}),(0,A.jsx)(\"stop\",{offset:\".9\",stopColor:\"#626262\"})]})]}),h[11]=f):f=h[11],h[12]!==e?(p=(0,A.jsxs)(\"svg\",tn(tt({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:[n,r,a,i,c,f]})),h[12]=e,h[13]=p):p=h[13],p}var ti=\"Learn more about enabling Node.js inspector for server code with Chrome DevTools\";function tl(e){var t,n,r,o=(0,x.c)(4),a=e.devtoolsFrontendUrl||\"\";return a&&tr?(o[1]===Symbol.for(\"react.memo_cache_sentinel\")?(n=(0,A.jsx)(to,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14}),o[1]=n):n=o[1],o[2]!==a?(r=(0,A.jsx)(e8,{\"data-nextjs-data-runtime-error-copy-devtools-url\":!0,className:\"nodejs-inspector-button\",actionLabel:\"Copy Chrome DevTools URL\",successLabel:\"Copied\",content:a,icon:n}),o[2]=a,o[3]=r):r=o[3],r):(o[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"a\",{title:ti,\"aria-label\":ti,className:\"nodejs-inspector-button\",href:\"https://nextjs.org/docs/app/building-your-application/configuring/debugging#server-side-code\",target:\"_blank\",rel:\"noopener noreferrer\",children:(0,A.jsx)(ta,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})}),o[0]=t):t=o[0],t)}function ts(e){var t,n=(0,x.c)(3),r=e.error,o=e.generateErrorInfo,a=!r;return n[0]!==o||n[1]!==a?(t=(0,A.jsx)(e8,{\"data-nextjs-data-runtime-error-copy-stack\":!0,className:\"copy-error-button\",actionLabel:\"Copy Error Info\",successLabel:\"Error Info Copied\",getContent:o,disabled:a}),n[0]=o,n[1]=a,n[2]=t):t=n[2],t}function tc(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function tu(e){if(Array.isArray(e))return e}function td(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function tf(e,t){return tu(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||th(e,t)||td()}function tp(e){return tu(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||th(e)||td()}function th(e,t){if(e){if(\"string\"==typeof e)return tc(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tc(e,t)}}var tm=\"https://react.dev/link/hydration-mismatch\",tg=\"https://nextjs.org/docs/messages/react-hydration-error\",ty=[/^In HTML, (.+?) cannot be a child of <(.+?)>\\.(.*)\\nThis will cause a hydration error\\.(.*)/,/^In HTML, (.+?) cannot be a descendant of <(.+?)>\\.\\nThis will cause a hydration error\\.(.*)/,/^In HTML, text nodes cannot be a child of <(.+?)>\\.\\nThis will cause a hydration error\\./,/^In HTML, whitespace text nodes cannot be a child of <(.+?)>\\. Make sure you don't have any extra whitespace between tags on each line of your source code\\.\\nThis will cause a hydration error\\./];function tv(e){return ty.some(function(t){return t.test(e)})}var tb=[\"https://nextjs.org\",\"https://react.dev\"];function tA(e){return tb.some(function(t){return e.startsWith(t)})}function tx(e){var t,n,r,o,a=(0,x.c)(6),i=e.errorMessage;a[0]!==i?(t=function(e){var t,n,r,o=(t=e,n=tA,r=Array.from(t.matchAll(/https?:\\/\\/[^\\s/$.?#].[^\\s)'\"]*/gi),function(e){return e[0]}),n?r.filter(function(e){return n(e)}):r);if(0===o.length)return null;var a=o[0];return a===tm?tg:a}(i),a[0]=i,a[1]=t):t=a[1];var l=t;return l?(a[3]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(tw,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14}),a[3]=r):r=a[3],a[4]!==l?(o=(0,A.jsx)(\"a\",{title:\"Go to related documentation\",\"aria-label\":\"Go to related documentation\",className:\"docs-link-button\",href:l,target:\"_blank\",rel:\"noopener noreferrer\",children:r}),a[4]=l,a[5]=o):o=a[5],o):(a[2]===Symbol.for(\"react.memo_cache_sentinel\")?(n=(0,A.jsx)(\"button\",{title:\"No related documentation found\",\"aria-label\":\"No related documentation found\",className:\"docs-link-button\",disabled:!0,children:(0,A.jsx)(tw,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})}),a[2]=n):n=a[2],n)}function tw(e){var t,n,r,o,a=(0,x.c)(3);return(a[0]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M0 .875h4.375C5.448.875 6.401 1.39 7 2.187A3.276 3.276 0 0 1 9.625.875H14v11.156H9.4c-.522 0-1.023.208-1.392.577l-.544.543h-.928l-.544-.543c-.369-.37-.87-.577-1.392-.577H0V.875zm6.344 3.281a1.969 1.969 0 0 0-1.969-1.968H1.312v8.53H4.6c.622 0 1.225.177 1.744.502V4.156zm1.312 7.064V4.156c0-1.087.882-1.968 1.969-1.968h3.063v8.53H9.4c-.622 0-1.225.177-1.744.502z\",fill:\"currentColor\"}),a[0]=r):r=a[0],a[1]!==e)?(o=(0,A.jsx)(\"svg\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),n=n={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),a[1]=e,a[2]=o):o=a[2],o}function tC(e){var t,n,r,o,a=(0,x.c)(12),i=e.error,l=e.debugInfo,s=e.feedbackButton,c=e.generateErrorInfo;a[0]!==i||a[1]!==c?(t=(0,A.jsx)(ts,{error:i,generateErrorInfo:c}),a[0]=i,a[1]=c,a[2]=t):t=a[2],a[3]!==i.message?(n=(0,A.jsx)(tx,{errorMessage:i.message}),a[3]=i.message,a[4]=n):n=a[4];var u=null==l?void 0:l.devtoolsFrontendUrl;return a[5]!==u?(r=(0,A.jsx)(tl,{devtoolsFrontendUrl:u}),a[5]=u,a[6]=r):r=a[6],a[7]!==s||a[8]!==t||a[9]!==n||a[10]!==r?(o=(0,A.jsxs)(\"span\",{className:\"error-overlay-toolbar\",children:[s,t,n,r]}),a[7]=s,a[8]=t,a[9]=n,a[10]=r,a[11]=o):o=a[11],o}function t_(e){var t,n,r,o,a=(0,x.c)(3);return(a[0]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(\"g\",{id:\"thumb-up-16\",children:(0,A.jsx)(\"path\",{id:\"Union\",fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M6.89531 2.23959C6.72984 2.1214 6.5 2.23968 6.5 2.44303V5.24989C6.5 6.21639 5.7165 6.99989 4.75 6.99989H2.5V13.4999H12.1884C12.762 13.4999 13.262 13.1095 13.4011 12.5531L14.4011 8.55306C14.5984 7.76412 14.0017 6.99989 13.1884 6.99989H9.25H8.5V6.24989V3.51446C8.5 3.43372 8.46101 3.35795 8.39531 3.31102L6.89531 2.23959ZM5 2.44303C5 1.01963 6.6089 0.191656 7.76717 1.01899L9.26717 2.09042C9.72706 2.41892 10 2.94929 10 3.51446V5.49989H13.1884C14.9775 5.49989 16.2903 7.18121 15.8563 8.91686L14.8563 12.9169C14.5503 14.1411 13.4503 14.9999 12.1884 14.9999H1.75H1V14.2499V6.24989V5.49989H1.75H4.75C4.88807 5.49989 5 5.38796 5 5.24989V2.44303Z\",fill:\"currentColor\"})}),a[0]=r):r=a[0],a[1]!==e)?(o=(0,A.jsx)(\"svg\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:\"thumbs-up-icon\"},e),n=n={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),a[1]=e,a[2]=o):o=a[2],o}function tk(e){var t,n,r,o,a=(0,x.c)(3);return(a[0]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M5.89531 12.7603C5.72984 12.8785 5.5 12.7602 5.5 12.5569V9.75C5.5 8.7835 4.7165 8 3.75 8H1.5V1.5H11.1884C11.762 1.5 12.262 1.89037 12.4011 2.44683L13.4011 6.44683C13.5984 7.23576 13.0017 8 12.1884 8H8.25H7.5V8.75V11.4854C7.5 11.5662 7.46101 11.6419 7.39531 11.6889L5.89531 12.7603ZM4 12.5569C4 13.9803 5.6089 14.8082 6.76717 13.9809L8.26717 12.9095C8.72706 12.581 9 12.0506 9 11.4854V9.5H12.1884C13.9775 9.5 15.2903 7.81868 14.8563 6.08303L13.8563 2.08303C13.5503 0.858816 12.4503 0 11.1884 0H0.75H0V0.75V8.75V9.5H0.75H3.75C3.88807 9.5 4 9.61193 4 9.75V12.5569Z\",fill:\"currentColor\"}),a[0]=r):r=a[0],a[1]!==e)?(o=(0,A.jsx)(\"svg\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:\"thumbs-down-icon\"},e),n=n={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),a[1]=e,a[2]=o):o=a[2],o}function tE(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function tj(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){n(e);return}l.done?t(s):Promise.resolve(s).then(r,o)}function tS(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function tO(e){var t,n,r=e.errorCode,o=e.className,a=(t=(0,w.useState)({}),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,2)||function(e,t){if(e){if(\"string\"==typeof e)return tE(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tE(e,t)}}(t,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),i=a[0],l=a[1],s=i[r],c=false,u=(0,w.useCallback)(function(e){var t;return(t=function(){return function(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(n)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(t){switch(t.label){case 0:l(function(t){var n,o;return n=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){tS(e,t,n[t])})}return e}({},t),o=null!=(o=tS({},r,e))?o:{},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(o)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(o)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(o,e))}),n}),t.label=1;case 1:return t.trys.push([1,3,,4]),[4,fetch(\"\".concat( false||\"\",\"/__nextjs_error_feedback?\").concat(new URLSearchParams({errorCode:r,wasHelpful:e.toString()})))];case 2:return t.sent().ok||console.error(\"Failed to record feedback on the server.\"),[3,4];case 3:return console.error(\"Failed to record feedback:\",t.sent()),[3,4];case 4:return[2]}})},function(){var e=this,n=arguments;return new Promise(function(r,o){var a=t.apply(e,n);function i(e){tj(a,r,o,i,l,\"next\",e)}function l(e){tj(a,r,o,i,l,\"throw\",e)}i(void 0)})})()},[r]);return(0,A.jsx)(\"div\",{className:eJ(\"error-feedback\",o),role:\"region\",\"aria-label\":\"Error feedback\",children:void 0!==s?(0,A.jsx)(\"p\",{className:\"error-feedback-thanks\",role:\"status\",\"aria-live\":\"polite\",children:\"Thanks for your feedback!\"}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(\"p\",{children:(0,A.jsx)(\"a\",{href:\"https://nextjs.org/telemetry#error-feedback\",rel:\"noopener noreferrer\",target:\"_blank\",children:\"Was this helpful?\"})}),(0,A.jsx)(\"button\",{\"aria-disabled\":c?\"true\":void 0,\"aria-label\":\"Mark as helpful\",onClick:c?void 0:function(){return u(!0)},className:eJ(\"feedback-button\",!0===s&&\"voted\"),title:c?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,A.jsx)(t_,{\"aria-hidden\":\"true\"})}),(0,A.jsx)(\"button\",{\"aria-disabled\":c?\"true\":void 0,\"aria-label\":\"Mark as not helpful\",onClick:c?void 0:function(){return u(!1)},className:eJ(\"feedback-button\",!1===s&&\"voted\"),title:c?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,A.jsx)(tk,{\"aria-hidden\":\"true\",style:{translate:\"1px 1px\"}})})]})})}function tB(e){var t,n,r=(0,x.c)(4),o=e.errorCode;return r[0]!==o?(t=o?(0,A.jsx)(tO,{className:\"error-feedback\",errorCode:o}):null,r[0]=o,r[1]=t):t=r[1],r[2]!==t?(n=(0,A.jsx)(\"footer\",{\"data-nextjs-error-overlay-footer\":!0,className:\"error-overlay-footer\",children:t}),r[2]=t,r[3]=n):n=r[3],n}var tP=\"\\n .error-overlay-footer {\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between;\\n\\n gap: 8px;\\n padding: 12px;\\n background: var(--color-background-200);\\n border-top: 1px solid var(--color-gray-400);\\n }\\n\\n .error-feedback {\\n margin-left: auto;\\n\\n p {\\n font-size: var(--size-14);\\n font-weight: 500;\\n margin: 0;\\n }\\n }\\n\\n \".concat(\"\\n .error-feedback {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n white-space: nowrap;\\n color: var(--color-gray-900);\\n }\\n\\n .error-feedback-thanks {\\n height: var(--size-24);\\n display: flex;\\n align-items: center;\\n padding-right: 4px; /* To match the 4px inner padding of the thumbs up and down icons */\\n }\\n\\n .feedback-button {\\n background: none;\\n border: none;\\n border-radius: var(--rounded-md);\\n width: var(--size-24);\\n height: var(--size-24);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n cursor: pointer;\\n\\n &:focus {\\n outline: var(--focus-ring);\\n }\\n\\n &:hover {\\n background: var(--color-gray-alpha-100);\\n }\\n\\n &:active {\\n background: var(--color-gray-alpha-200);\\n }\\n }\\n\\n .feedback-button[aria-disabled='true'] {\\n opacity: 0.7;\\n cursor: not-allowed;\\n }\\n\\n .feedback-button.voted {\\n background: var(--color-gray-alpha-200);\\n }\\n\\n .thumbs-up-icon,\\n .thumbs-down-icon {\\n color: var(--color-gray-900);\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n\",\"\\n\");function tI(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function tT(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return tI(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tI(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function tz(e){var t,n,r,o,a,i=(0,x.c)(12),l=e.errorMessage,s=tT((0,w.useState)(!1),2),c=s[0],u=s[1],d=tT((0,w.useState)(!1),2),f=d[0],p=d[1],h=(0,w.useRef)(null);i[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=function(){h.current&&p(h.current.scrollHeight>200)},i[0]=t):t=i[0],i[1]!==l?(n=[l],i[1]=l,i[2]=n):n=i[2],(0,w.useLayoutEffect)(t,n);var m=\"nextjs__container_errors_desc \".concat(f&&!c?\"truncated\":\"\");return i[3]!==l||i[4]!==m?(r=(0,A.jsx)(\"p\",{ref:h,id:\"nextjs__container_errors_desc\",className:m,children:l}),i[3]=l,i[4]=m,i[5]=r):r=i[5],i[6]!==c||i[7]!==f?(o=f&&!c&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(\"div\",{className:\"nextjs__container_errors_gradient_overlay\"}),(0,A.jsx)(\"button\",{onClick:function(){return u(!0)},className:\"nextjs__container_errors_expand_button\",\"aria-expanded\":c,\"aria-controls\":\"nextjs__container_errors_desc\",children:\"Show More\"})]}),i[6]=c,i[7]=f,i[8]=o):o=i[8],i[9]!==r||i[10]!==o?(a=(0,A.jsxs)(\"div\",{className:\"nextjs__container_errors_wrapper\",children:[r,o]}),i[9]=r,i[10]=o,i[11]=a):a=i[11],a}function tD(e){var t,n=(0,x.c)(2),r=e.errorType;return n[0]!==r?(t=(0,A.jsx)(\"span\",{id:\"nextjs__container_errors_label\",className:\"nextjs__container_errors_label\",children:r}),n[0]=r,n[1]=t):t=n[1],t}function tL(e){var t,n,r=(0,x.c)(4),o=e.title,a=e.className;return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M9.24996 12.0608L8.71963 11.5304L5.89641 8.70722C5.50588 8.3167 5.50588 7.68353 5.89641 7.29301L8.71963 4.46978L9.24996 3.93945L10.3106 5.00011L9.78029 5.53044L7.31062 8.00011L9.78029 10.4698L10.3106 11.0001L9.24996 12.0608Z\",fill:\"currentColor\"}),r[0]=t):t=r[0],r[1]!==a||r[2]!==o?(n=(0,A.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",\"aria-label\":o,className:a,children:t}),r[1]=a,r[2]=o,r[3]=n):n=r[3],n}function tN(e){var t,n,r=(0,x.c)(4),o=e.title,a=e.className;return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M6.75011 3.93945L7.28044 4.46978L10.1037 7.29301C10.4942 7.68353 10.4942 8.3167 10.1037 8.70722L7.28044 11.5304L6.75011 12.0608L5.68945 11.0001L6.21978 10.4698L8.68945 8.00011L6.21978 5.53044L5.68945 5.00011L6.75011 3.93945Z\",fill:\"currentColor\"}),r[0]=t):t=r[0],r[1]!==a||r[2]!==o?(n=(0,A.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:a,\"aria-label\":o,children:t}),r[1]=a,r[2]=o,r[3]=n):n=r[3],n}function tR(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function tM(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h,m,g,y,v=(0,x.c)(40),b=e.runtimeErrors,C=e.activeIdx,_=e.onActiveIndexChange;v[0]!==C||v[1]!==_?(r=function(){return(0,w.startTransition)(function(){C>0&&_(Math.max(0,C-1))})},v[0]=C,v[1]=_,v[2]=r):r=v[2];var k=r;v[3]!==C||v[4]!==_||v[5]!==b.length?(o=function(){return(0,w.startTransition)(function(){C<b.length-1&&_(Math.max(0,Math.min(b.length-1,C+1)))})},v[3]=C,v[4]=_,v[5]=b.length,v[6]=o):o=v[6];var E=o,j=(0,w.useRef)(null),S=(0,w.useRef)(null),O=(t=(0,w.useState)(null),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,2)||function(e,t){if(e){if(\"string\"==typeof e)return tR(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tR(e,t)}}(t,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),B=O[0],P=O[1];v[7]===Symbol.for(\"react.memo_cache_sentinel\")?(a=function(e){P(e)},v[7]=a):a=v[7];var I=a;v[8]!==E||v[9]!==k||v[10]!==B?(i=function(){if(null!=B){var e=B.getRootNode(),t=self.document,n=function(e){\"ArrowLeft\"===e.key?(e.preventDefault(),e.stopPropagation(),k&&k()):\"ArrowRight\"===e.key&&(e.preventDefault(),e.stopPropagation(),E&&E())};return e.addEventListener(\"keydown\",n),e!==t&&t.addEventListener(\"keydown\",n),function(){e.removeEventListener(\"keydown\",n),e!==t&&t.removeEventListener(\"keydown\",n)}}},l=[B,E,k],v[8]=E,v[9]=k,v[10]=B,v[11]=i,v[12]=l):(i=v[11],l=v[12]),(0,w.useEffect)(i,l),v[13]!==C||v[14]!==B||v[15]!==b.length?(s=function(){if(null!=B){var e,t,n=B.getRootNode();if(e=n,null!=(t=ShadowRoot)&&\"undefined\"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t){var r=n.activeElement;0===C?j.current&&r===j.current&&j.current.blur():C===b.length-1&&S.current&&r===S.current&&S.current.blur()}}},c=[B,C,b.length],v[13]=C,v[14]=B,v[15]=b.length,v[16]=s,v[17]=c):(s=v[16],c=v[17]),(0,w.useEffect)(s,c);var T=0===C,z=0===C;v[18]===Symbol.for(\"react.memo_cache_sentinel\")?(u=(0,A.jsx)(tL,{title:\"previous\",className:\"error-overlay-pagination-button-icon\"}),v[18]=u):u=v[18],v[19]!==k||v[20]!==T||v[21]!==z?(d=(0,A.jsx)(\"button\",{ref:j,type:\"button\",disabled:T,\"aria-disabled\":z,onClick:k,\"data-nextjs-dialog-error-previous\":!0,className:\"error-overlay-pagination-button\",children:u}),v[19]=k,v[20]=T,v[21]=z,v[22]=d):d=v[22];var D=C+1;v[23]!==C||v[24]!==D?(f=(0,A.jsxs)(\"span\",{\"data-nextjs-dialog-error-index\":C,children:[D,\"/\"]}),v[23]=C,v[24]=D,v[25]=f):f=v[25];var L=b.length||1;v[26]!==L?(p=(0,A.jsx)(\"span\",{\"data-nextjs-dialog-header-total-count\":!0,children:L}),v[26]=L,v[27]=p):p=v[27],v[28]!==f||v[29]!==p?(h=(0,A.jsxs)(\"div\",{className:\"error-overlay-pagination-count\",children:[f,p]}),v[28]=f,v[29]=p,v[30]=h):h=v[30];var N=C>=b.length-1,R=C>=b.length-1;return v[31]===Symbol.for(\"react.memo_cache_sentinel\")?(m=(0,A.jsx)(tN,{title:\"next\",className:\"error-overlay-pagination-button-icon\"}),v[31]=m):m=v[31],v[32]!==E||v[33]!==N||v[34]!==R?(g=(0,A.jsx)(\"button\",{ref:S,type:\"button\",disabled:N,\"aria-disabled\":R,onClick:E,\"data-nextjs-dialog-error-next\":!0,className:\"error-overlay-pagination-button\",children:m}),v[32]=E,v[33]=N,v[34]=R,v[35]=g):g=v[35],v[36]!==d||v[37]!==h||v[38]!==g?(y=(0,A.jsxs)(\"nav\",{className:\"error-overlay-pagination dialog-exclude-closing-from-outside-click\",ref:I,children:[d,h,g]}),v[36]=d,v[37]=h,v[38]=g,v[39]=y):y=v[39],y}function tZ(e){var t,n,r,o,a=(0,x.c)(3);return(a[0]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(\"circle\",{cx:\"7\",cy:\"7\",r:\"5.5\",strokeWidth:\"3\"}),a[0]=r):r=a[0],a[1]!==e)?(o=(0,A.jsx)(\"svg\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),n=n={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),a[1]=e,a[2]=o):o=a[2],o}function tU(e){var t,n,r,o,a,i=(0,x.c)(31),l=e.versionInfo,s=e.bundlerName,c=l.staleness;if(i[0]!==s||i[1]!==c||i[2]!==l){v=Symbol.for(\"react.early_return_sentinel\");n:{var u=function(e){var t=e.installed,n=e.staleness,r=e.expected,o=\"\",a=\"\",i=\"\",l=\"Next.js \".concat(t);switch(n){case\"newer-than-npm\":case\"fresh\":o=l,a=\"Latest available version is detected (\".concat(t,\").\"),i=\"fresh\";break;case\"stale-patch\":case\"stale-minor\":o=\"\".concat(l,\" (stale)\"),a=\"There is a newer version (\".concat(r,\") available, upgrade recommended! \"),i=\"stale\";break;case\"stale-major\":o=\"\".concat(l,\" (outdated)\"),a=\"An outdated version detected (latest is \".concat(r,\"), upgrade is highly recommended!\"),i=\"outdated\";break;case\"stale-prerelease\":o=\"\".concat(l,\" (stale)\"),a=\"There is a newer canary version (\".concat(r,\") available, please upgrade! \"),i=\"stale\";break;case\"unknown\":o=\"\".concat(l,\" (unknown)\"),a=\"No Next.js version data was found.\",i=\"unknown\"}return{text:o,indicatorClass:i,title:a}}(l),d=u.text,f=u.indicatorClass,p=u.title;if(b=d,w=p,m=\"Turbopack\"===s,c.startsWith(\"stale\")){var h,m,g,y,v,b,w,C,_,k=m&&\"turbopack-text\";i[10]!==k?(C=eJ(k),i[10]=k,i[11]=C):C=i[11],i[12]!==s||i[13]!==C?(_=(0,A.jsx)(\"span\",{className:C,children:s}),i[12]=s,i[13]=C,i[14]=_):_=i[14],v=(0,A.jsxs)(\"a\",{className:\"nextjs-container-build-error-version-status dialog-exclude-closing-from-outside-click\",target:\"_blank\",rel:\"noopener noreferrer\",href:\"https://nextjs.org/docs/messages/version-staleness\",children:[(0,A.jsx)(tZ,{className:eJ(\"version-staleness-indicator\",f)}),(0,A.jsx)(\"span\",{\"data-nextjs-version-checker\":!0,title:w,children:b}),_]});break n}y=\"nextjs-container-build-error-version-status dialog-exclude-closing-from-outside-click\",h=tZ,g=eJ(\"version-staleness-indicator\",f)}i[0]=s,i[1]=c,i[2]=l,i[3]=h,i[4]=m,i[5]=g,i[6]=y,i[7]=v,i[8]=b,i[9]=w}else h=i[3],m=i[4],g=i[5],y=i[6],v=i[7],b=i[8],w=i[9];if(v!==Symbol.for(\"react.early_return_sentinel\"))return v;i[15]!==h||i[16]!==g?(t=(0,A.jsx)(h,{className:g}),i[15]=h,i[16]=g,i[17]=t):t=i[17],i[18]!==b||i[19]!==w?(n=(0,A.jsx)(\"span\",{\"data-nextjs-version-checker\":!0,title:w,children:b}),i[18]=b,i[19]=w,i[20]=n):n=i[20];var E=m&&\"turbopack-text\";return i[21]!==E?(r=eJ(E),i[21]=E,i[22]=r):r=i[22],i[23]!==s||i[24]!==r?(o=(0,A.jsx)(\"span\",{className:r,children:s}),i[23]=s,i[24]=r,i[25]=o):o=i[25],i[26]!==y||i[27]!==t||i[28]!==n||i[29]!==o?(a=(0,A.jsxs)(\"span\",{className:y,children:[t,n,o]}),i[26]=y,i[27]=t,i[28]=n,i[29]=o,i[30]=a):a=i[30],a}function tF(e){var t,n,r,o,a=(0,x.c)(11),i=e.runtimeErrors,l=e.activeIdx,s=e.setActiveIndex,c=e.versionInfo,u=\"Webpack\"||0;a[0]!==i?(t=null!=i?i:[],a[0]=i,a[1]=t):t=a[1];var d=null!=l?l:0,f=null!=s?s:tq;return a[2]!==t||a[3]!==d||a[4]!==f?(n=(0,A.jsx)(tH,{side:\"left\",children:(0,A.jsx)(tM,{runtimeErrors:t,activeIdx:d,onActiveIndexChange:f})}),a[2]=t,a[3]=d,a[4]=f,a[5]=n):n=a[5],a[6]!==c?(r=c&&(0,A.jsx)(tH,{side:\"right\",children:(0,A.jsx)(tU,{versionInfo:c,bundlerName:u})}),a[6]=c,a[7]=r):r=a[7],a[8]!==n||a[9]!==r?(o=(0,A.jsxs)(\"div\",{\"data-nextjs-error-overlay-nav\":!0,children:[n,r]}),a[8]=n,a[9]=r,a[10]=o):o=a[10],o}function tq(){}function tH(e){var t,n,r=(0,x.c)(4),o=e.children,a=e.side,i=void 0===a?\"left\":a;return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(tV,{}),r[0]=t):t=r[0],r[1]!==o||r[2]!==i?(n=(0,A.jsxs)(\"div\",{className:\"error-overlay-notch\",\"data-side\":i,children:[o,t]}),r[1]=o,r[2]=i,r[3]=n):n=r[3],n}function tV(){var e,t,n,r=(0,x.c)(3);return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e={maskType:\"alpha\"},r[0]=e):e=r[0],r[1]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsxs)(\"mask\",{id:\"error_overlay_nav_mask0_2667_14687\",style:e,maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"-1\",width:\"60\",height:\"43\",children:[(0,A.jsxs)(\"mask\",{id:\"error_overlay_nav_path_1_outside_1_2667_14687\",maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"-1\",width:\"60\",height:\"43\",fill:\"black\",children:[(0,A.jsx)(\"rect\",{fill:\"white\",y:\"-1\",width:\"60\",height:\"43\"}),(0,A.jsx)(\"path\",{d:\"M1 0L8.0783 0C15.772 0 22.7836 4.41324 26.111 11.3501L34.8889 29.6498C38.2164 36.5868 45.228 41 52.9217 41H60H1L1 0Z\"})]}),(0,A.jsx)(\"path\",{d:\"M1 0L8.0783 0C15.772 0 22.7836 4.41324 26.111 11.3501L34.8889 29.6498C38.2164 36.5868 45.228 41 52.9217 41H60H1L1 0Z\",fill:\"white\"}),(0,A.jsx)(\"path\",{d:\"M1 0V-1H0V0L1 0ZM1 41H0V42H1V41ZM34.8889 29.6498L33.9873 30.0823L34.8889 29.6498ZM26.111 11.3501L27.0127 10.9177L26.111 11.3501ZM1 1H8.0783V-1H1V1ZM60 40H1V42H60V40ZM2 41V0L0 0L0 41H2ZM25.2094 11.7826L33.9873 30.0823L35.7906 29.2174L27.0127 10.9177L25.2094 11.7826ZM52.9217 42H60V40H52.9217V42ZM33.9873 30.0823C37.4811 37.3661 44.8433 42 52.9217 42V40C45.6127 40 38.9517 35.8074 35.7906 29.2174L33.9873 30.0823ZM8.0783 1C15.3873 1 22.0483 5.19257 25.2094 11.7826L27.0127 10.9177C23.5188 3.6339 16.1567 -1 8.0783 -1V1Z\",fill:\"black\",mask:\"url(#error_overlay_nav_path_1_outside_1_2667_14687)\"})]}),r[1]=t):t=r[1],r[2]===Symbol.for(\"react.memo_cache_sentinel\")?(n=(0,A.jsxs)(\"svg\",{width:\"60\",height:\"42\",viewBox:\"0 0 60 42\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:\"error-overlay-notch-tail\",preserveAspectRatio:\"none\",children:[t,(0,A.jsxs)(\"g\",{mask:\"url(#error_overlay_nav_mask0_2667_14687)\",children:[(0,A.jsxs)(\"mask\",{id:\"error_overlay_nav_path_3_outside_2_2667_14687\",maskUnits:\"userSpaceOnUse\",x:\"-1\",y:\"0.0244141\",width:\"60\",height:\"43\",fill:\"black\",children:[(0,A.jsx)(\"rect\",{fill:\"white\",x:\"-1\",y:\"0.0244141\",width:\"60\",height:\"43\"}),(0,A.jsx)(\"path\",{d:\"M0 1.02441H7.0783C14.772 1.02441 21.7836 5.43765 25.111 12.3746L33.8889 30.6743C37.2164 37.6112 44.228 42.0244 51.9217 42.0244H59H0L0 1.02441Z\"})]}),(0,A.jsx)(\"path\",{d:\"M0 1.02441H7.0783C14.772 1.02441 21.7836 5.43765 25.111 12.3746L33.8889 30.6743C37.2164 37.6112 44.228 42.0244 51.9217 42.0244H59H0L0 1.02441Z\",fill:\"var(--background-color)\"}),(0,A.jsx)(\"path\",{d:\"M0 1.02441L0 0.0244141H-1V1.02441H0ZM0 42.0244H-1V43.0244H0L0 42.0244ZM33.8889 30.6743L32.9873 31.1068L33.8889 30.6743ZM25.111 12.3746L26.0127 11.9421L25.111 12.3746ZM0 2.02441H7.0783V0.0244141H0L0 2.02441ZM59 41.0244H0L0 43.0244H59V41.0244ZM1 42.0244L1 1.02441H-1L-1 42.0244H1ZM24.2094 12.8071L32.9873 31.1068L34.7906 30.2418L26.0127 11.9421L24.2094 12.8071ZM51.9217 43.0244H59V41.0244H51.9217V43.0244ZM32.9873 31.1068C36.4811 38.3905 43.8433 43.0244 51.9217 43.0244V41.0244C44.6127 41.0244 37.9517 36.8318 34.7906 30.2418L32.9873 31.1068ZM7.0783 2.02441C14.3873 2.02441 21.0483 6.21699 24.2094 12.8071L26.0127 11.9421C22.5188 4.65831 15.1567 0.0244141 7.0783 0.0244141V2.02441Z\",fill:\"var(--stroke-color)\",mask:\"url(#error_overlay_nav_path_3_outside_2_2667_14687)\"})]})]}),r[2]=n):n=r[2],n}function t$(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var tW=[\"[data-next-mark]\",\"[data-issues-open]\",\"#nextjs-dev-tools-menu\",\"[data-nextjs-error-overlay-nav]\",\"[data-info-popover]\",\"[data-nextjs-devtools-panel-overlay]\",\"[data-nextjs-devtools-panel-footer]\",\"[data-nextjs-error-overlay-footer]\"],tY=function(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h,m,g,y,v,b,C,_,k,E,j=(0,x.c)(23);j[0]!==e?(g=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"children\",\"className\",\"onClose\",\"aria-labelledby\",\"aria-describedby\"]),p=e.children,h=e.className,m=e.onClose,f=e[\"aria-labelledby\"],d=e[\"aria-describedby\"],j[0]=e,j[1]=d,j[2]=f,j[3]=p,j[4]=h,j[5]=m,j[6]=g):(d=j[1],f=j[2],p=j[3],h=j[4],m=j[5],g=j[6]);var S=w.useRef(null),O=(t=w.useState(\"undefined\"!=typeof document&&document.hasFocus()?\"dialog\":void 0),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,2)||function(e,t){if(e){if(\"string\"==typeof e)return t$(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return t$(e,t)}}(t,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),B=O[0],P=O[1];return(j[7]!==m?(y=function(e){return e.preventDefault(),null==m?void 0:m()},j[7]=m,j[8]=y):y=j[8],r=S,o=tW,a=y,(s=(0,x.c)(5))[0]!==o||s[1]!==r||s[2]!==a?(i=function(){var e=r&&\"current\"in r?r.current:r;if(null!=e&&null!=a){var t=function(t){!(!e||e.contains(t.target))&&(o.some(function(e){return t.target.closest(e)})||a(t))},n=e.getRootNode();return n.addEventListener(\"mouseup\",t),n.addEventListener(\"touchend\",t,{passive:!1}),function(){n.removeEventListener(\"mouseup\",t),n.removeEventListener(\"touchend\",t)}}},l=[a,r,o],s[0]=o,s[1]=r,s[2]=a,s[3]=i,s[4]=l):(i=s[3],l=s[4]),w.useEffect(i,l),j[9]===Symbol.for(\"react.memo_cache_sentinel\")?(v=function(){if(null!=S.current){var e=function(){P(document.hasFocus()?\"dialog\":void 0)};return window.addEventListener(\"focus\",e),window.addEventListener(\"blur\",e),function(){window.removeEventListener(\"focus\",e),window.removeEventListener(\"blur\",e)}}},b=[],j[9]=v,j[10]=b):(v=j[9],b=j[10]),w.useEffect(v,b),j[11]===Symbol.for(\"react.memo_cache_sentinel\")?(C=function(){var e,t,n=S.current,r=null==n?void 0:n.getRootNode(),o=(e=r,null!=(t=ShadowRoot)&&\"undefined\"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t)?null==r?void 0:r.activeElement:null;return null==n||n.focus(),function(){null==n||n.blur(),null==o||o.focus()}},_=[],j[11]=C,j[12]=_):(C=j[11],_=j[12]),w.useEffect(C,_),j[13]!==m?(k=function(e){\"Escape\"===e.key&&(null==m||m())},j[13]=m,j[14]=k):k=j[14],j[15]!==d||j[16]!==f||j[17]!==p||j[18]!==h||j[19]!==g||j[20]!==B||j[21]!==k)?(E=(0,A.jsx)(\"div\",(c=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({ref:S,tabIndex:-1,\"data-nextjs-dialog\":!0,\"data-nextjs-scrollable-content\":!0,role:B,\"aria-labelledby\":f,\"aria-describedby\":d,\"aria-modal\":\"true\",className:h,onKeyDown:k},g),u=u={children:p},Object.getOwnPropertyDescriptors?Object.defineProperties(c,Object.getOwnPropertyDescriptors(u)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(u)).forEach(function(e){Object.defineProperty(c,e,Object.getOwnPropertyDescriptor(u,e))}),c)),j[15]=d,j[16]=f,j[17]=p,j[18]=h,j[19]=g,j[20]=B,j[21]=k,j[22]=E):E=j[22],E};function tK(e){var t,n,r,o,a,i,l,s,c=(0,x.c)(12);return(c[0]!==e?(i=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"children\",\"onClose\",\"footer\"]),r=e.children,a=e.onClose,o=e.footer,c[0]=e,c[1]=r,c[2]=o,c[3]=a,c[4]=i):(r=c[1],o=c[2],a=c[3],i=c[4]),c[5]!==r||c[6]!==a||c[7]!==i)?(l=(0,A.jsx)(tY,(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"aria-labelledby\":\"nextjs__container_errors_label\",\"aria-describedby\":\"nextjs__container_errors_desc\",className:\"error-overlay-dialog-scroll\",onClose:a},i),n=n={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),c[5]=r,c[6]=a,c[7]=i,c[8]=l):l=c[8],c[9]!==o||c[10]!==l?(s=(0,A.jsxs)(\"div\",{className:\"error-overlay-dialog-container\",children:[l,o]}),c[9]=o,c[10]=l,c[11]=s):s=c[11],s}function tX(e){var t,n,r,o=(0,x.c)(2);return o[0]!==e?(r=(0,A.jsx)(\"div\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-header\":!0},e),n=n={children:e.children},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),o[0]=e,o[1]=r):r=o[1],r}function tG(e){var t,n=(0,x.c)(2),r=e.children;return n[0]!==r?(t=(0,A.jsx)(tX,{className:\"nextjs-container-errors-header\",children:r}),n[0]=r,n[1]=t):t=n[1],t}function tQ(e){var t,n=(0,x.c)(2),r=e.children;return n[0]!==r?(t=(0,A.jsx)(eK,{className:\"nextjs-container-errors-body\",children:r}),n[0]=r,n[1]=t):t=n[1],t}var tJ=0,t0=function(e){var t,n,r,o,a,i,l,s=(0,x.c)(9);return(s[0]!==e?(a=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"className\",\"children\"]),o=e.className,r=e.children,s[0]=e,s[1]=r,s[2]=o,s[3]=a):(r=s[1],o=s[2],a=s[3]),s[4]===Symbol.for(\"react.memo_cache_sentinel\")?(i=[],s[4]=i):i=s[4],w.useEffect(t2,i),s[5]!==r||s[6]!==o||s[7]!==a)?(l=(0,A.jsx)(\"div\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-overlay\":!0,className:o},a),n=n={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),s[5]=r,s[6]=o,s[7]=a,s[8]=l):l=s[8],l};function t1(){setTimeout(function(){0!==tJ&&0==--tJ&&(void 0!==n&&(document.body.style.paddingRight=n,n=void 0),void 0!==r&&(document.body.style.overflow=r,r=void 0))})}function t2(){return setTimeout(function(){if(!(tJ++>0)){var e=window.innerWidth-document.documentElement.clientWidth;e>0&&(n=document.body.style.paddingRight,document.body.style.paddingRight=\"\".concat(e,\"px\")),r=document.body.style.overflow,document.body.style.overflow=\"hidden\"}}),t1}function t4(){var e,t,n=(e=[\"\\n [data-nextjs-dialog-overlay] {\\n padding: initial;\\n top: 10vh;\\n }\\n\"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return t4=function(){return n},n}function t5(e){var t,n,r,o,a,i=(0,x.c)(6);return(i[0]!==e?(o=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"children\"]),r=e.children,i[0]=e,i[1]=r,i[2]=o):(r=i[1],o=i[2]),i[3]!==r||i[4]!==o)?(a=(0,A.jsx)(t0,(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},o),n=n={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),i[3]=r,i[4]=o,i[5]=a):a=i[5],a}var t3=eu(t4());function t6(e){var t,n,r,o=(0,x.c)(4),a=Math.min(e.errorCount-e.activeIdx-1,2);return o[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"div\",{className:\"error-overlay-bottom-stack-layer error-overlay-bottom-stack-layer-1\",children:\"1\"}),n=(0,A.jsx)(\"div\",{className:\"error-overlay-bottom-stack-layer error-overlay-bottom-stack-layer-2\",children:\"2\"}),o[0]=t,o[1]=n):(t=o[0],n=o[1]),o[2]!==a?(r=(0,A.jsx)(\"div\",{\"aria-hidden\":!0,className:\"error-overlay-bottom-stack\",children:(0,A.jsxs)(\"div\",{className:\"error-overlay-bottom-stack-stack\",\"data-stack-count\":a,children:[t,n]})}),o[2]=a,o[3]=r):r=o[3],r}function t9(e){var t,n=(0,x.c)(2),r=e.environmentName;return n[0]!==r?(t=(0,A.jsx)(\"span\",{\"data-nextjs-environment-name-label\":!0,children:r}),n[0]=r,n[1]=t):t=n[1],t}function t8(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function t7(e){var t,n,r=null==e?void 0:e.getRootNode();return(t=r,null!=(n=ShadowRoot)&&\"undefined\"!=typeof Symbol&&n[Symbol.hasInstance]?!!n[Symbol.hasInstance](t):t instanceof n)?null==r?void 0:r.activeElement:null}function ne(e,t,n,r,o){var a,i,l=(0,x.c)(7);l[0]!==n||l[1]!==r||l[2]!==o||l[3]!==e||l[4]!==t?(a=function(){if(n){var a,i=o||(null==(a=e.current)?void 0:a.ownerDocument),l=function(n){var o,a,i=n.target;!(e.current&&e.current.contains(i))&&(null!=(o=e.current)&&o.getBoundingClientRect()&&n.clientX>=e.current.getBoundingClientRect().left-10&&n.clientX<=e.current.getBoundingClientRect().right+10&&n.clientY>=e.current.getBoundingClientRect().top-10&&n.clientY<=e.current.getBoundingClientRect().bottom+10||null!=(a=t.current)&&a.getBoundingClientRect()&&n.clientX>=t.current.getBoundingClientRect().left-10&&n.clientX<=t.current.getBoundingClientRect().right+10&&n.clientY>=t.current.getBoundingClientRect().top-10&&n.clientY<=t.current.getBoundingClientRect().bottom+10||r(\"outside\"))},s=function(e){\"Escape\"===e.key&&r(\"escape\")};return null==i||i.addEventListener(\"mousedown\",l),null==i||i.addEventListener(\"keydown\",s),function(){null==i||i.removeEventListener(\"mousedown\",l),null==i||i.removeEventListener(\"keydown\",s)}}},i=[n,r,o,e,t],l[0]=n,l[1]=r,l[2]=o,l[3]=e,l[4]=t,l[5]=a,l[6]=i):(a=l[5],i=l[6]),(0,w.useEffect)(a,i)}var nt=\"cubic-bezier(0.175, 0.885, 0.32, 1.1)\",nn=(0,w.forwardRef)(function(e,t){var n,r,o=(0,x.c)(9),a=e.stop,i=e.blur,l=e.side,s=e.style,c=e.height,u=\"\".concat(c,\"px\");o[0]!==i||o[1]!==a||o[2]!==s||o[3]!==u?(n=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"--stop\":a,\"--blur\":i,\"--height\":u},s),o[0]=i,o[1]=a,o[2]=s,o[3]=u,o[4]=n):n=o[4];var d=n;return o[5]!==t||o[6]!==l||o[7]!==d?(r=(0,A.jsx)(\"div\",{ref:t,\"aria-hidden\":!0,\"data-nextjs-scroll-fader\":!0,className:\"nextjs-scroll-fader\",\"data-side\":l,style:d}),o[5]=t,o[6]=l,o[7]=d,o[8]=r):r=o[8],r});function nr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function no(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return nr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nr(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var na=(0,w.forwardRef)(function(e,t){var n,r,o,a,i,l,s,c,u,d,f,p,h,m,g,y,v,b,C,_,k=(0,x.c)(13);k[0]!==e?(v=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"children\",\"measure\"]),g=e.children,y=e.measure,k[0]=e,k[1]=g,k[2]=y,k[3]=v):(g=k[1],y=k[2],v=k[3]);var E=no((0,w.useState)(null),2),j=E[0],S=E[1],O=no((n=j,r=y,l=(0,x.c)(7),c=(s=no((0,w.useState)(0),2))[0],u=s[1],f=(d=no((0,w.useState)(!0),2))[0],p=d[1],l[0]!==n||l[1]!==r?(o=function(){if(r&&n){var e,t=new ResizeObserver(function(t){var n=no(t,1)[0].contentRect;clearTimeout(e),e=window.setTimeout(function(){p(!1)},100),u(n.height)});return t.observe(n),function(){return t.disconnect()}}},a=[r,n],l[0]=n,l[1]=r,l[2]=o,l[3]=a):(o=l[2],a=l[3]),(0,w.useEffect)(o,a),l[4]!==c||l[5]!==f?(i=[c,f],l[4]=c,l[5]=f,l[6]=i):i=l[6],i),2),B=O[0],P=O[1]?\"auto\":B;return(k[4]!==P?(b={height:P,transition:\"height 250ms var(--timing-swift)\"},k[4]=P,k[5]=b):b=k[5],k[6]!==g?(C=(0,A.jsx)(\"div\",{ref:S,children:g}),k[6]=g,k[7]=C):C=k[7],k[8]!==v||k[9]!==t||k[10]!==b||k[11]!==C)?(_=(0,A.jsx)(\"div\",(h=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},v),m=m={ref:t,style:b,children:C},Object.getOwnPropertyDescriptors?Object.defineProperties(h,Object.getOwnPropertyDescriptors(m)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(m)).forEach(function(e){Object.defineProperty(h,e,Object.getOwnPropertyDescriptor(m,e))}),h)),k[8]=v,k[9]=t,k[10]=b,k[11]=C,k[12]=_):_=k[12],_});function ni(e){var t,n,r,o=(0,x.c)(6);o[0]!==e?(n=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"fixed\"]),t=e.fixed,o[0]=e,o[1]=t,o[2]=n):(t=o[1],n=o[2]);var a=!!t||void 0;return o[3]!==n||o[4]!==a?(r=(0,A.jsx)(\"div\",function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-backdrop\":!0,\"data-nextjs-dialog-backdrop-fixed\":a},n)),o[3]=n,o[4]=a,o[5]=r):r=o[5],r}function nl(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ns(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function nc(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function nu(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return nl(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nl(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function nd(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h,m,g,y,v,b,C,_,k,E,j,S=(0,x.c)(65),O=e.errorMessage,B=e.errorType,P=e.children,I=e.errorCode,T=e.errorCount,z=e.error,D=e.debugInfo,L=e.isBuildError,N=e.onClose,R=e.versionInfo,M=e.runtimeErrors,Z=e.activeIdx,U=e.setActiveIndex,F=e.isTurbopack,q=e.dialogResizerRef,H=e.generateErrorInfo,V=e.rendered,$=e.transitionDurationMs,W=void 0===V||V,Y=\"\".concat($,\"ms\");S[0]!==Y?(r={\"--transition-duration\":Y},S[0]=Y,S[1]=r):r=S[1];var K=r;S[2]!==W||S[3]!==K?(o={\"data-rendered\":W,style:K},S[2]=W,S[3]=K,S[4]=o):o=S[4];var X=o,G=nu(w.useState(!!$),2),Q=G[0],J=G[1],ee=w.useRef(null),et=!!I,en=w.useRef(null);t=en,n=W,(0,w.useEffect)(function(){var e=function(e){if(\"Tab\"===e.key&&null!==r){var t,n,o,a=(n=(t=r.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'))?[t[0],t[t.length-1]]:[],o=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,t){if(e){if(\"string\"==typeof e)return t8(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return t8(e,t)}}(n,o)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),i=a[0],l=a[1],s=t7(r);e.shiftKey?s===i&&(null==l||l.focus(),e.preventDefault()):s===l&&(null==i||i.focus(),e.preventDefault())}},r=null,o=setTimeout(function(){if(r=t.current,n)null==r||r.focus(),null==r||r.addEventListener(\"keydown\",e);else t7(r)});return function(){clearTimeout(o),null==r||r.removeEventListener(\"keydown\",e)}},[n]),S[5]===Symbol.for(\"react.memo_cache_sentinel\")?(a=function(e){if(ee.current){var t,n,r=(t=e.currentTarget.scrollTop/17,Math.min(Math.max(t,(n=nu([0,1],2))[0]),n[1]));ee.current.style.opacity=String(r)}},S[5]=a):a=S[5];var er=a;S[6]===Symbol.for(\"react.memo_cache_sentinel\")?(i=function(e){var t=e.propertyName,n=e.target;\"scale\"===t&&n===en.current&&J(!1)},S[6]=i):i=S[6];var eo=i;S[7]!==L?(l=(0,A.jsx)(ni,{fixed:L}),S[7]=L,S[8]=l):l=S[8],S[9]!==Z||S[10]!==F||S[11]!==M||S[12]!==U||S[13]!==R?(s=(0,A.jsx)(tF,{runtimeErrors:M,activeIdx:Z,setActiveIndex:U,versionInfo:R,isTurbopack:F}),S[9]=Z,S[10]=F,S[11]=M,S[12]=U,S[13]=R,S[14]=s):s=S[14],S[15]!==I||S[16]!==et?(c=et&&(0,A.jsx)(tB,{errorCode:I}),S[15]=I,S[16]=et,S[17]=c):c=S[17];var ea=!Q;S[18]!==B?(u=(0,A.jsx)(tD,{errorType:B}),S[18]=B,S[19]=u):u=S[19],S[20]!==z.environmentName?(d=z.environmentName&&(0,A.jsx)(t9,{environmentName:z.environmentName}),S[20]=z.environmentName,S[21]=d):d=S[21],S[22]!==u||S[23]!==d?(f=(0,A.jsxs)(\"span\",{\"data-nextjs-error-label-group\":!0,children:[u,d]}),S[22]=u,S[23]=d,S[24]=f):f=S[24],S[25]!==D||S[26]!==z||S[27]!==H?(p=(0,A.jsx)(tC,{error:z,debugInfo:D,generateErrorInfo:H}),S[25]=D,S[26]=z,S[27]=H,S[28]=p):p=S[28],S[29]!==I||S[30]!==f||S[31]!==p?(h=(0,A.jsxs)(\"div\",{className:\"nextjs__container_errors__error_title\",\"data-nextjs-error-code\":I,children:[f,p]}),S[29]=I,S[30]=f,S[31]=p,S[32]=h):h=S[32],S[33]!==O?(m=(0,A.jsx)(tz,{errorMessage:O}),S[33]=O,S[34]=m):m=S[34],S[35]!==h||S[36]!==m?(g=(0,A.jsxs)(tG,{children:[h,m]}),S[35]=h,S[36]=m,S[37]=g):g=S[37],S[38]!==P?(y=(0,A.jsx)(tQ,{children:P}),S[38]=P,S[39]=y):y=S[39],S[40]!==g||S[41]!==y?(v=(0,A.jsxs)(eX,{children:[g,y]}),S[40]=g,S[41]=y,S[42]=v):v=S[42],S[43]!==q||S[44]!==ea||S[45]!==v?(b=(0,A.jsx)(na,{ref:q,measure:ea,\"data-nextjs-dialog-sizer\":!0,children:v}),S[43]=q,S[44]=ea,S[45]=v,S[46]=b):b=S[46];var ei=null!=Z?Z:0;return S[47]!==T||S[48]!==ei?(C=(0,A.jsx)(t6,{errorCount:T,activeIdx:ei}),S[47]=T,S[48]=ei,S[49]=C):C=S[49],S[50]!==et||S[51]!==N||S[52]!==c||S[53]!==b||S[54]!==C?(_=(0,A.jsxs)(tK,{onClose:N,\"data-has-footer\":et,onScroll:er,footer:c,children:[b,C]}),S[50]=et,S[51]=N,S[52]=c,S[53]=b,S[54]=C,S[55]=_):_=S[55],S[56]===Symbol.for(\"react.memo_cache_sentinel\")?(k=(0,A.jsx)(nn,{ref:ee,side:\"top\",stop:\"50%\",blur:\"4px\",height:48}),S[56]=k):k=S[56],S[57]!==X||S[58]!==_||S[59]!==s?(E=(0,A.jsxs)(\"div\",nc(ns({\"data-nextjs-dialog-root\":!0,onTransitionEnd:eo,ref:en},X),{children:[s,_,k]})),S[57]=X,S[58]=_,S[59]=s,S[60]=E):E=S[60],S[61]!==X||S[62]!==E||S[63]!==l?(j=(0,A.jsxs)(t5,nc(ns({},X),{children:[l,E]})),S[61]=X,S[62]=E,S[63]=l,S[64]=j):j=S[64],j}var nf=\"\\n \".concat(t3,\"\\n \").concat(\"\\n .error-overlay-dialog-container {\\n display: flex;\\n flex-direction: column;\\n background: var(--color-background-100);\\n background-clip: padding-box;\\n border: var(--next-dialog-border-width) solid var(--color-gray-400);\\n border-radius: 0 0 var(--next-dialog-radius) var(--next-dialog-radius);\\n box-shadow: var(--shadow-menu);\\n position: relative;\\n overflow: hidden;\\n }\\n\\n .error-overlay-dialog-scroll {\\n overflow-y: auto;\\n height: 100%;\\n }\\n\",\"\\n \").concat(\"\\n .nextjs-container-errors-header {\\n position: relative;\\n }\\n .nextjs-container-errors-header > h1 {\\n font-size: var(--size-20);\\n line-height: var(--size-24);\\n font-weight: bold;\\n margin: calc(16px * 1.5) 0;\\n color: var(--color-title-h1);\\n }\\n .nextjs-container-errors-header small {\\n font-size: var(--size-14);\\n color: var(--color-accents-1);\\n margin-left: 16px;\\n }\\n .nextjs-container-errors-header small > span {\\n font-family: var(--font-stack-monospace);\\n }\\n .nextjs-container-errors-header > div > small {\\n margin: 0;\\n margin-top: 4px;\\n }\\n .nextjs-container-errors-header > p > a {\\n color: inherit;\\n font-weight: bold;\\n }\\n .nextjs-container-errors-header\\n > .nextjs-container-build-error-version-status {\\n position: absolute;\\n top: 16px;\\n right: 16px;\\n }\\n\",\"\\n \").concat(\"\",\"\\n\\n \").concat(\"\\n [data-nextjs-error-overlay-nav] {\\n --stroke-color: var(--color-gray-400);\\n --background-color: var(--color-background-100);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n\\n width: 100%;\\n\\n position: relative;\\n z-index: 2;\\n outline: none;\\n translate: var(--next-dialog-border-width) var(--next-dialog-border-width);\\n max-width: var(--next-dialog-max-width);\\n\\n .error-overlay-notch {\\n translate: calc(var(--next-dialog-border-width) * -1);\\n width: auto;\\n height: var(--next-dialog-notch-height);\\n padding: 12px;\\n background: var(--background-color);\\n border: var(--next-dialog-border-width) solid var(--stroke-color);\\n border-bottom: none;\\n position: relative;\\n\\n &[data-side='left'] {\\n padding-right: 0;\\n border-radius: var(--next-dialog-radius) 0 0 0;\\n\\n .error-overlay-notch-tail {\\n right: -54px;\\n }\\n\\n > *:not(.error-overlay-notch-tail) {\\n margin-right: -10px;\\n }\\n }\\n\\n &[data-side='right'] {\\n padding-left: 0;\\n border-radius: 0 var(--next-dialog-radius) 0 0;\\n\\n .error-overlay-notch-tail {\\n left: -54px;\\n transform: rotateY(180deg);\\n }\\n\\n > *:not(.error-overlay-notch-tail) {\\n margin-left: -12px;\\n }\\n }\\n\\n .error-overlay-notch-tail {\\n position: absolute;\\n top: calc(var(--next-dialog-border-width) * -1);\\n pointer-events: none;\\n z-index: -1;\\n height: calc(100% + var(--next-dialog-border-width));\\n }\\n }\\n }\\n\\n @media (max-width: 600px) {\\n [data-nextjs-error-overlay-nav] {\\n background: var(--background-color);\\n border-radius: var(--next-dialog-radius) var(--next-dialog-radius) 0 0;\\n border: var(--next-dialog-border-width) solid var(--stroke-color);\\n border-bottom: none;\\n overflow: hidden;\\n translate: 0 var(--next-dialog-border-width);\\n \\n .error-overlay-notch {\\n border-radius: 0;\\n border: 0;\\n\\n &[data-side=\\\"left\\\"], &[data-side=\\\"right\\\"] {\\n border-radius: 0;\\n }\\n\\n .error-overlay-notch-tail {\\n display: none;\\n }\\n }\\n }\\n }\\n\",\"\\n \").concat(\"\\n .nextjs__container_errors_label {\\n padding: 2px 6px;\\n margin: 0;\\n border-radius: var(--rounded-md-2);\\n background: var(--color-red-100);\\n font-weight: 600;\\n font-size: var(--size-12);\\n color: var(--color-red-900);\\n font-family: var(--font-stack-monospace);\\n line-height: var(--size-20);\\n }\\n\",\"\\n \").concat(\"\\n .nextjs__container_errors_wrapper {\\n position: relative;\\n }\\n\\n .nextjs__container_errors_desc {\\n margin: 0;\\n margin-left: 4px;\\n color: var(--color-red-900);\\n font-weight: 500;\\n font-size: var(--size-16);\\n letter-spacing: -0.32px;\\n line-height: var(--size-24);\\n overflow-wrap: break-word;\\n white-space: pre-wrap;\\n }\\n\\n .nextjs__container_errors_desc.truncated {\\n max-height: 200px;\\n overflow: hidden;\\n }\\n\\n .nextjs__container_errors_gradient_overlay {\\n position: absolute;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n height: 85px;\\n background: linear-gradient(\\n 180deg,\\n rgba(250, 250, 250, 0) 0%,\\n var(--color-background-100) 100%\\n );\\n }\\n\\n .nextjs__container_errors_expand_button {\\n position: absolute;\\n bottom: 10px;\\n left: 50%;\\n transform: translateX(-50%);\\n display: flex;\\n align-items: center;\\n padding: 6px 8px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-alpha-400);\\n border-radius: 999px;\\n box-shadow:\\n 0px 2px 2px var(--color-gray-alpha-100),\\n 0px 8px 8px -8px var(--color-gray-alpha-100);\\n font-size: var(--size-13);\\n cursor: pointer;\\n color: var(--color-gray-900);\\n font-weight: 500;\\n transition: background-color 0.2s ease;\\n }\\n\\n .nextjs__container_errors_expand_button:hover {\\n background: var(--color-gray-100);\\n }\\n\",\"\\n \").concat(\"\\n .error-overlay-toolbar {\\n display: flex;\\n gap: 6px;\\n }\\n\\n .nodejs-inspector-button,\\n .copy-error-button,\\n .docs-link-button {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n\\n width: var(--size-28);\\n height: var(--size-28);\\n background: var(--color-background-100);\\n background-clip: padding-box;\\n border: 1px solid var(--color-gray-alpha-400);\\n box-shadow: var(--shadow-small);\\n border-radius: var(--rounded-full);\\n\\n svg {\\n width: var(--size-14);\\n height: var(--size-14);\\n }\\n\\n &:focus {\\n outline: var(--focus-ring);\\n }\\n\\n &:not(:disabled):hover {\\n background: var(--color-gray-alpha-100);\\n }\\n\\n &:not(:disabled):active {\\n background: var(--color-gray-alpha-200);\\n }\\n\\n &:disabled {\\n background-color: var(--color-gray-100);\\n cursor: not-allowed;\\n }\\n }\\n\\n .error-overlay-toolbar-button-icon {\\n color: var(--color-gray-900);\\n }\\n\",\"\\n\\n [data-nextjs-error-label-group] {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n }\\n\");function np(){var e,t,n=(e=[\"\\n [data-nextjs-dialog-overlay] {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n /* secondary z-index, -1 than toast z-index */\\n z-index: 2147483646;\\n\\n display: flex;\\n align-content: center;\\n align-items: center;\\n flex-direction: column;\\n padding: 10vh 15px 0;\\n }\\n\\n @media (max-height: 812px) {\\n [data-nextjs-dialog-overlay] {\\n padding: 15px 15px 0;\\n }\\n }\\n\\n [data-nextjs-dialog-backdrop] {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n background-color: var(--color-backdrop);\\n backdrop-filter: blur(10px);\\n pointer-events: all;\\n z-index: -1;\\n }\\n\\n [data-nextjs-dialog-backdrop-fixed] {\\n cursor: not-allowed;\\n -webkit-backdrop-filter: blur(8px);\\n backdrop-filter: blur(8px);\\n }\\n\"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return np=function(){return n},n}var nh=eu(np());function nm(e){var t,n,r,o,a,i=(0,x.c)(9),l=e.file,s=e.location,c=null!=(t=null==s?void 0:s.line)?t:1,u=null!=(n=null==s?void 0:s.column)?n:1;i[0]!==l||i[1]!==c||i[2]!==u?(r={file:l,line1:c,column1:u},i[0]=l,i[1]=c,i[2]=u,i[3]=r):r=i[3];var d=eB(r),f=s?\":\".concat(s.line,\":\").concat(s.column):null;return i[4]===Symbol.for(\"react.memo_cache_sentinel\")?(o=(0,A.jsxs)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[(0,A.jsx)(\"path\",{d:\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}),(0,A.jsx)(\"polyline\",{points:\"15 3 21 3 21 9\"}),(0,A.jsx)(\"line\",{x1:\"10\",y1:\"14\",x2:\"21\",y2:\"3\"})]}),i[4]=o):o=i[4],i[5]!==l||i[6]!==d||i[7]!==f?(a=(0,A.jsxs)(\"div\",{\"data-with-open-in-editor-link\":!0,\"data-with-open-in-editor-link-import-trace\":!0,role:\"link\",onClick:d,title:\"Click to open in your editor\",children:[l,f,o]}),i[5]=l,i[6]=d,i[7]=f,i[8]=a):a=i[8],a}function ng(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var ny=function(e){var t,n,r,o,a,i,l,s,c,u,d=e.content,f=w.useMemo(function(){var e,t,n;return t=function(e){var t,n,r=e.shift();if(!r)return null;var o=(t=r.split(\":\",3),n=3,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,3)||function(e,t){if(e){if(\"string\"==typeof e)return ng(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ng(e,t)}}(t,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=o[2],s=Number(i),c=Number(l),u=!Number.isNaN(s)&&!Number.isNaN(c);return{fileName:u?a:r,location:u?{line1:s,column1:c}:void 0}}(e=d.split(\"\\n\")),n=function(e){if(e.some(function(e){return/ReactServerComponentsError:/.test(e)})||e.some(function(e){return/Import trace for requested module:/.test(e)})){for(var t=[];/.+\\..+/.test(e[e.length-1])&&!e[e.length-1].includes(\":\");){var n=e.pop().trim();t.unshift(n)}return t}return[]}(e),{file:t,source:e.join(\"\\n\"),importTraceFiles:n}},[d]),p=f.file,h=f.source,m=f.importTraceFiles,g=w.useMemo(function(){return eq().ansiToJson(h,{json:!0,use_classes:!0,remove_empty:!0})},[h]);console.log({file:p});var y=eB({file:null==p?void 0:p.fileName,line1:null!=(i=null==p||null==(t=p.location)?void 0:t.line1)?i:1,column1:null!=(l=null==p||null==(n=p.location)?void 0:n.column1)?l:1}),v={file:null!=(s=null==p?void 0:p.fileName)?s:null,methodName:\"\",arguments:[],line1:null!=(c=null==p||null==(r=p.location)?void 0:r.line1)?c:null,column1:null!=(u=null==p||null==(o=p.location)?void 0:o.column1)?u:null},b=null==v||null==(a=v.file)?void 0:a.split(\".\").pop();return(0,A.jsxs)(\"div\",{\"data-nextjs-codeframe\":!0,children:[(0,A.jsx)(\"div\",{className:\"code-frame-header\",children:(0,A.jsxs)(\"div\",{className:\"code-frame-link\",children:[(0,A.jsx)(\"span\",{className:\"code-frame-icon\",children:(0,A.jsx)(eL,{lang:b})}),(0,A.jsx)(\"span\",{\"data-text\":!0,children:eO(v)}),(0,A.jsx)(\"button\",{\"aria-label\":\"Open in editor\",\"data-with-open-in-editor-link-source-file\":!0,onClick:y,children:(0,A.jsx)(\"span\",{className:\"code-frame-icon\",\"data-icon\":\"right\",children:(0,A.jsx)(ez,{width:16,height:16})})})]})}),(0,A.jsx)(\"pre\",{className:\"code-frame-pre\",children:(0,A.jsxs)(\"div\",{className:\"code-frame-lines\",children:[g.map(function(e,t){return(0,A.jsx)(\"span\",{style:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({color:e.fg?\"var(--color-\".concat(e.fg,\")\"):void 0},\"bold\"===e.decoration?{fontWeight:500}:\"italic\"===e.decoration?{fontStyle:\"italic\"}:void 0),children:(0,A.jsx)(eA,{text:e.content})},\"terminal-entry-\".concat(t))}),m.map(function(e){return(0,A.jsx)(nm,{isSourceFile:!1,file:e},e)})]})})]})},nv=function(e){var t=e.split(\"\\n\");return eV()(t[1]||\"\").replace(/^Error: /,\"\")},nb=function(e){var t,n,r,o,a,i,l,s,c,u,d=(0,x.c)(19);d[0]!==e?(o=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"message\"]),r=e.message,d[0]=e,d[1]=r,d[2]=o):(r=d[1],o=d[2]),d[3]!==r?(a=Error(r),d[3]=r,d[4]=a):a=d[4];var f=a;d[5]!==r?(l=nv(r)||\"Failed to compile\",d[5]=r,d[6]=l):l=d[6],i=l,d[7]!==i||d[8]!==r||d[9]!==o.versionInfo.installed?(s=function(){var e=[];if(e.push(\"## Error Type\\nBuild Error\"),i&&e.push(\"## Error Message\\n\".concat(i)),r){var t=eV()(r);e.push(\"## Build Output\\n\".concat(t))}return\"\".concat(e.join(\"\\n\\n\"),\"\\n\\nNext.js version: \").concat(o.versionInfo.installed,\" (\").concat(\"Webpack\",\")\\n\")},d[7]=i,d[8]=r,d[9]=o.versionInfo.installed,d[10]=s):s=d[10];var p=s;return(d[11]!==r?(c=(0,A.jsx)(ny,{content:r}),d[11]=r,d[12]=c):c=d[12],d[13]!==f||d[14]!==i||d[15]!==p||d[16]!==o||d[17]!==c)?(u=(0,A.jsx)(nd,(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({errorType:\"Build Error\",errorMessage:i,onClose:nA,error:f,generateErrorInfo:p},o),n=n={children:c},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),d[13]=f,d[14]=i,d[15]=p,d[16]=o,d[17]=c,d[18]=u):u=d[18],u};function nA(){}var nx=function(e){var t,n,r,o,a,i,l,s,c,u,d,f=(0,x.c)(26),p=e.frame,h=null!=(t=p.originalStackFrame)?t:p.sourceStackFrame,m=!!p.originalCodeFrame;f[0]!==h||f[1]!==m?(n=m?{file:h.file,line1:null!=(r=h.line1)?r:1,column1:null!=(o=h.column1)?o:1}:void 0,f[0]=h,f[1]=m,f[2]=n):n=f[2];var g=eB(n);f[3]!==h?(a=eO(h),f[3]=h,f[4]=a):a=f[4];var y=a;if(!y)return null;var v=!m;return f[5]!==h.methodName?(i=(0,A.jsx)(eA,{text:h.methodName}),f[5]=h.methodName,f[6]=i):i=f[6],f[7]!==h.methodName||f[8]!==m||f[9]!==g?(l=m&&(0,A.jsx)(\"button\",{onClick:g,className:\"open-in-editor-button\",\"aria-label\":\"Open \".concat(h.methodName,\" in editor\"),children:(0,A.jsx)(ez,{width:16,height:16})}),f[7]=h.methodName,f[8]=m,f[9]=g,f[10]=l):l=f[10],f[11]!==p.error||f[12]!==p.reason?(s=p.error?(0,A.jsx)(\"button\",{className:\"source-mapping-error-button\",onClick:function(){return console.error(p.reason)},title:\"Sourcemapping failed. Click to log cause of error.\",children:(0,A.jsx)(eD,{width:16,height:16})}):null,f[11]=p.error,f[12]=p.reason,f[13]=s):s=f[13],f[14]!==i||f[15]!==l||f[16]!==s?(c=(0,A.jsxs)(\"div\",{className:\"call-stack-frame-method-name\",children:[i,l,s]}),f[14]=i,f[15]=l,f[16]=s,f[17]=c):c=f[17],f[18]!==y||f[19]!==m?(u=(0,A.jsx)(\"span\",{className:\"call-stack-frame-file-source\",\"data-has-source\":m,children:y}),f[18]=y,f[19]=m,f[20]=u):u=f[20],f[21]!==p.ignored||f[22]!==v||f[23]!==c||f[24]!==u?(d=(0,A.jsxs)(\"div\",{\"data-nextjs-call-stack-frame\":!0,\"data-nextjs-call-stack-frame-no-source\":v,\"data-nextjs-call-stack-frame-ignored\":p.ignored,children:[c,u]}),f[21]=p.ignored,f[22]=v,f[23]=c,f[24]=u,f[25]=d):d=f[25],d};function nw(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8.70722 2.39641C8.3167 2.00588 7.68353 2.00588 7.29301 2.39641L4.46978 5.21963L3.93945 5.74996L5.00011 6.81062L5.53044 6.28029L8.00011 3.81062L10.4698 6.28029L11.0001 6.81062L12.0608 5.74996L11.5304 5.21963L8.70722 2.39641ZM5.53044 9.71963L5.00011 9.1893L3.93945 10.25L4.46978 10.7803L7.29301 13.6035C7.68353 13.994 8.3167 13.994 8.70722 13.6035L11.5304 10.7803L12.0608 10.25L11.0001 9.1893L10.4698 9.71963L8.00011 12.1893L5.53044 9.71963Z\",fill:\"currentColor\"})}),t[0]=e):e=t[0],e}function nC(){var e,t,n=(e=[\"\\n [data-nextjs-call-stack-container] {\\n position: relative;\\n margin-top: 8px;\\n }\\n\\n [data-nextjs-call-stack-header] {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n min-height: var(--size-28);\\n padding: 8px 8px 12px 4px;\\n width: 100%;\\n }\\n\\n [data-nextjs-call-stack-title] {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n gap: 8px;\\n\\n margin: 0;\\n\\n color: var(--color-gray-1000);\\n font-size: var(--size-16);\\n font-weight: 500;\\n }\\n\\n [data-nextjs-call-stack-count] {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n\\n width: var(--size-20);\\n height: var(--size-20);\\n gap: 4px;\\n\\n color: var(--color-gray-1000);\\n text-align: center;\\n font-size: var(--size-11);\\n font-weight: 500;\\n line-height: var(--size-16);\\n\\n border-radius: var(--rounded-full);\\n background: var(--color-gray-300);\\n }\\n\\n [data-nextjs-call-stack-ignored-list-toggle-button] {\\n all: unset;\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n color: var(--color-gray-900);\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n border-radius: 6px;\\n padding: 4px 6px;\\n margin-right: -6px;\\n transition: background 150ms ease;\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n\\n &:focus {\\n outline: var(--focus-ring);\\n }\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n }\\n\"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return nC=function(){return n},n}function n_(e){var t,n,r,o,a,i,l=(0,x.c)(17),s=e.frames,c=e.isIgnoreListOpen,u=e.ignoredFramesTally,d=e.onToggleIgnoreList;return l[0]!==s.length?(t=(0,A.jsxs)(\"p\",{\"data-nextjs-call-stack-title\":!0,children:[\"Call Stack \",(0,A.jsx)(\"span\",{\"data-nextjs-call-stack-count\":!0,children:s.length})]}),l[0]=s.length,l[1]=t):t=l[1],l[2]!==u||l[3]!==c||l[4]!==d?(n=u>0&&(0,A.jsxs)(\"button\",{\"data-nextjs-call-stack-ignored-list-toggle-button\":c,onClick:d,children:[\"\".concat(c?\"Hide\":\"Show\",\" \").concat(u,\" ignore-listed frame(s)\"),(0,A.jsx)(nw,{})]}),l[2]=u,l[3]=c,l[4]=d,l[5]=n):n=l[5],l[6]!==t||l[7]!==n?(r=(0,A.jsxs)(\"div\",{\"data-nextjs-call-stack-header\":!0,children:[t,n]}),l[6]=t,l[7]=n,l[8]=r):r=l[8],l[9]!==s||l[10]!==c?(l[12]!==c?(a=function(e,t){return!e.ignored||c?(0,A.jsx)(nx,{frame:e},t):null},l[12]=c,l[13]=a):a=l[13],o=s.map(a),l[9]=s,l[10]=c,l[11]=o):o=l[11],l[14]!==r||l[15]!==o?(i=(0,A.jsxs)(\"div\",{\"data-nextjs-call-stack-container\":!0,children:[r,o]}),l[14]=r,l[15]=o,l[16]=i):i=l[16],i}var nk=eu(nC());function nE(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function nj(e){var t,n,r=e.frames,o=e.dialogResizerRef,a=(0,w.useRef)(NaN),i=(t=(0,w.useState)(!1),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,2)||function(e,t){if(e){if(\"string\"==typeof e)return nE(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nE(e,t)}}(t,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),l=i[0],s=i[1],c=(0,w.useMemo)(function(){return r.reduce(function(e,t){return e+ +!!t.ignored},0)},[r]);return(0,A.jsx)(n_,{frames:r,isIgnoreListOpen:l,onToggleIgnoreList:function(){var e=null==o?void 0:o.current;if(e){var t=(null==e?void 0:e.getBoundingClientRect()).height;a.current||(a.current=t),l?(e.style.height=\"\".concat(a.current,\"px\"),e.addEventListener(\"transitionend\",function t(){e.removeEventListener(\"transitionend\",t),s(!1)})):s(!0)}},ignoredFramesTally:c})}function nS(e){var t,n,r,o,a,i,l=(0,x.c)(8);l[0]!==e?(r=void 0===e?{}:e,l[0]=e,l[1]=r):r=l[1];var s=r.collapsed;return(l[2]!==s?(o=\"boolean\"==typeof s?{style:{transform:s?void 0:\"rotate(90deg)\"}}:{},l[2]=s,l[3]=o):o=l[3],l[4]===Symbol.for(\"react.memo_cache_sentinel\")?(a=(0,A.jsx)(\"path\",{style:{fill:\"var(--color-font)\"},fillRule:\"evenodd\",d:\"m6.75 3.94.53.53 2.824 2.823a1 1 0 0 1 0 1.414L7.28 11.53l-.53.53L5.69 11l.53-.53L8.69 8 6.22 5.53 5.69 5l1.06-1.06Z\",clipRule:\"evenodd\"}),l[4]=a):a=l[4],l[5]!==s||l[6]!==o)?(i=(0,A.jsx)(\"svg\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-call-stack-chevron-icon\":!0,\"data-collapsed\":s,width:\"16\",height:\"16\",fill:\"none\"},o),n=n={children:a},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),l[5]=s,l[6]=o,l[7]=i):i=l[7],i}function nO(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function nB(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return nO(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nO(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function nP(e){var t,n,r,o,a,i,l,s=(0,x.c)(15),c=e.reactOutputComponentDiff,u=nB((0,w.useState)(!0),2),d=u[0],f=u[1];s[0]!==c?(n=[],c.split(\"\\n\").forEach(function(e,t){var r,o,a=\"+\"===e[0]||\"-\"===e[0],i=\">\"===e[0],l=a||i,s=l?e[0]:\"\",c=l?e.indexOf(s):-1,u=nB(l?[e.slice(0,c),e.slice(c+1)]:[e,\"\"],2),d=u[0],f=u[1];a?n.push((0,A.jsx)(\"span\",{\"data-nextjs-container-errors-pseudo-html-line\":!0,\"data-nextjs-container-errors-pseudo-html--diff\":\"+\"===s?\"add\":\"remove\",children:(0,A.jsxs)(\"span\",{children:[d,(0,A.jsx)(\"span\",{\"data-nextjs-container-errors-pseudo-html-line-sign\":!0,children:s}),f,\"\\n\"]})},\"comp-diff\"+t)):n.push((0,A.jsxs)(\"span\",(r=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-container-errors-pseudo-html-line\":!0},i?{\"data-nextjs-container-errors-pseudo-html--diff\":\"error\"}:void 0),o=o={children:[d,(0,A.jsx)(\"span\",{\"data-nextjs-container-errors-pseudo-html-line-sign\":!0,children:s}),f,\"\\n\"]},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))}),r),\"comp-diff\"+t))}),s[0]=c,s[1]=n):n=s[1],t=n;var p=!d;return s[2]!==d?(r=function(){return f(!d)},o=(0,A.jsx)(nS,{collapsed:d}),s[2]=d,s[3]=r,s[4]=o):(r=s[3],o=s[4]),s[5]!==p||s[6]!==r||s[7]!==o?(a=(0,A.jsx)(\"button\",{\"aria-expanded\":p,\"aria-label\":\"complete Component Stack\",\"data-nextjs-container-errors-pseudo-html-collapse-button\":!0,onClick:r,children:o}),s[5]=p,s[6]=r,s[7]=o,s[8]=a):a=s[8],s[9]!==t?(i=(0,A.jsx)(\"pre\",{className:\"nextjs__container_errors__component-stack\",children:(0,A.jsx)(\"code\",{children:t})}),s[9]=t,s[10]=i):i=s[10],s[11]!==d||s[12]!==a||s[13]!==i?(l=(0,A.jsxs)(\"div\",{\"data-nextjs-container-errors-pseudo-html\":!0,\"data-nextjs-container-errors-pseudo-html-collapse\":d,children:[a,i]}),s[11]=d,s[12]=a,s[13]=i,s[14]=l):l=s[14],l}var nI=Symbol.for(\"NextjsError\");function nT(e){return e[nI]||null}function nz(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){n(e);return}l.done?t(s):Promise.resolve(s).then(r,o)}function nD(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){nz(a,r,o,i,l,\"next\",e)}function l(e){nz(a,r,o,i,l,\"throw\",e)}i(void 0)})}}function nL(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function nN(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function nR(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(n)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var nM=function(e){if(!e)return[];if(\"use\"in w){var t=e.frames;if(\"function\"!=typeof t)throw Error(\"Invariant: frames must be a function when the React version has React.use. This is a bug in Next.js.\");return w.use(t())}if(!Array.isArray(e.frames))throw Error(\"Invariant: frames must be an array when the React version does not have React.use. This is a bug in Next.js.\");return e.frames};function nZ(e){var t,n,r,o,a,i=(0,x.c)(8),l=e.error,s=e.dialogResizerRef,c=nM(l),u=c.findIndex(nU);return t=null!=(n=c[u])?n:null,i[0]!==t?(r=t&&(0,A.jsx)(eY,{stackFrame:t.originalStackFrame,codeFrame:t.originalCodeFrame}),i[0]=t,i[1]=r):r=i[1],i[2]!==s||i[3]!==c?(o=c.length>0&&(0,A.jsx)(nj,{dialogResizerRef:s,frames:c}),i[2]=s,i[3]=c,i[4]=o):o=i[4],i[5]!==r||i[6]!==o?(a=(0,A.jsxs)(A.Fragment,{children:[r,o]}),i[5]=r,i[6]=o,i[7]=a):a=i[7],a}function nU(e){return!e.ignored&&!!e.originalCodeFrame&&!!e.originalStackFrame}var nF=\"\\n \".concat(\"\\n [data-nextjs-container-errors-pseudo-html] {\\n padding: 8px 0;\\n margin: 8px 0;\\n border: 1px solid var(--color-gray-400);\\n background: var(--color-background-200);\\n color: var(--color-syntax-constant);\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-12);\\n line-height: 1.33em; /* 16px in 12px font size */\\n border-radius: var(--rounded-md-2);\\n }\\n [data-nextjs-container-errors-pseudo-html-line] {\\n display: inline-block;\\n width: 100%;\\n padding-left: 40px;\\n line-height: calc(5 / 3);\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='error'] {\\n background: var(--color-amber-100);\\n box-shadow: 2px 0 0 0 var(--color-amber-900) inset;\\n font-weight: bold;\\n }\\n [data-nextjs-container-errors-pseudo-html-collapse-button] {\\n all: unset;\\n margin-left: 12px;\\n &:focus {\\n outline: none;\\n }\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='add'] {\\n background: var(--color-green-300);\\n }\\n [data-nextjs-container-errors-pseudo-html-line-sign] {\\n margin-left: calc(24px * -1);\\n margin-right: 24px;\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='add']\\n [data-nextjs-container-errors-pseudo-html-line-sign] {\\n color: var(--color-green-900);\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='remove'] {\\n background: var(--color-red-300);\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='remove']\\n [data-nextjs-container-errors-pseudo-html-line-sign] {\\n color: var(--color-red-900);\\n margin-left: calc(24px * -1);\\n margin-right: 24px;\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='error']\\n [data-nextjs-container-errors-pseudo-html-line-sign] {\\n color: var(--color-amber-900);\\n }\\n \\n [data-nextjs-container-errors-pseudo-html--hint] {\\n display: inline-block;\\n font-size: 0;\\n height: 0;\\n }\\n [data-nextjs-container-errors-pseudo-html--tag-adjacent='false'] {\\n color: var(--color-accents-1);\\n }\\n .nextjs__container_errors__component-stack {\\n margin: 0;\\n }\\n [data-nextjs-container-errors-pseudo-html-collapse='true']\\n .nextjs__container_errors__component-stack\\n code {\\n max-height: 120px;\\n mask-image: linear-gradient(to bottom,rgba(0,0,0,0) 0%,black 10%);\\n padding-bottom: 40px;\\n }\\n .nextjs__container_errors__component-stack code {\\n display: block;\\n width: 100%;\\n white-space: pre-wrap;\\n scroll-snap-type: y mandatory;\\n overflow-y: hidden;\\n }\\n [data-nextjs-container-errors-pseudo-html--diff] {\\n scroll-snap-align: center;\\n }\\n .error-overlay-hydration-error-diff-plus-icon {\\n color: var(--color-green-900);\\n }\\n .error-overlay-hydration-error-diff-minus-icon {\\n color: var(--color-red-900);\\n }\\n\",\"\\n\");function nq(e){return e&&\"undefined\"!=typeof Symbol&&e.constructor===Symbol?\"symbol\":typeof e}function nH(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function nV(e){return e.startsWith(\"https://nextjs.org\")}function n$(e){var t,n=(0,x.c)(2),r=e.message;return n[0]!==r?(t=(0,A.jsx)(eA,{text:r,matcher:nV}),n[0]=r,n[1]=t):t=n[1],t}function nW(e){var t,n,r=(0,x.c)(5),o=e.error,a=\"environmentName\"in o?o.environmentName:\"\",i=a?\"[ \".concat(a,\" ] \"):\"\",l=o.message;return l.startsWith(i)&&(r[0]!==i.length||r[1]!==l?(t=l.slice(i.length),r[0]=i.length,r[1]=l,r[2]=t):t=r[2],l=t),r[3]!==l?(n=(0,A.jsx)(A.Fragment,{children:(0,A.jsx)(eA,{text:l,matcher:nV})}),r[3]=l,r[4]=n):n=r[4],n}var nY={hydrationWarning:null,notes:null,reactOutputComponentDiff:null};function nK(e){var t,n,r=e.getSquashedHydrationErrorDetails,o=e.runtimeErrors,a=e.debugInfo,i=e.onClose,l=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"getSquashedHydrationErrorDetails\",\"runtimeErrors\",\"debugInfo\",\"onClose\"]),s=(0,w.useRef)(null),c=function(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h,m=(0,x.c)(17),g=e.runtimeErrors,y=e.getSquashedHydrationErrorDetails,v=(a=(0,w.useState)(0),i=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(a,2)||function(e,t){if(e){if(\"string\"==typeof e)return nH(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nH(e,t)}}(a,i)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),b=v[0],A=v[1];s=0===g.length;var C=(t=null==(c=null!=(u=g[b])?u:null)?void 0:c.error,n=y,(0,w.useMemo)(function(){if(void 0===t)return nY;var e,r,o,a=n(t);if(null!==a)return{hydrationWarning:null!=(r=a.warning)?r:null,notes:null,reactOutputComponentDiff:null!=(o=a.reactOutputComponentDiff)?o:null};if(!(tv((e=t).message)||/Hydration failed because the server rendered (text|HTML) didn't match the client\\./.test(e.message)||/A tree hydrated but some attributes of the server rendered HTML didn't match the client properties./.test(e.message)))return nY;var i=function(e){var t=e.message;if(tv(t)){var n=tf(t.split(\"\\n\\n\"),2),r=n[0],o=n[1],a=(void 0===o?\"\":o).trim();return{message:\"\"===a?t.trim():r.trim(),diff:a,notes:null}}var i=tf(t.split(\"\".concat(tm)),2),l=i[0],s=i[1],c=l.trim();if(void 0!==s&&s.length>1){var u=[];s.split(\"\\n\").forEach(function(e){\"\"!==e.trim()&&(e.trim().startsWith(\"at \")||u.push(e))});var d=tp(c.split(\"\\n\\n\")),f=d[0],p=d.slice(1);return{message:f,diff:u.join(\"\\n\"),notes:p.join(\"\\n\\n\")||null}}var h=tp(c.split(\"\\n\\n\"));return{message:h[0],diff:null,notes:h.slice(1).join(\"\\n\\n\")}}(t),l=i.message,s=i.notes,c=i.diff;return null===l?nY:{hydrationWarning:l,notes:s,reactOutputComponentDiff:c}},[t,n]));if(s||!c)return m[0]!==b||m[1]!==s?(d={isLoading:s,activeIdx:b,setActiveIndex:A,activeError:null,errorDetails:null,errorCode:null,errorType:null,notes:null,hydrationWarning:null},m[0]=b,m[1]=s,m[2]=d):d=m[2],d;var _=c.error;m[3]!==_?(f=(void 0===(l=_)?\"undefined\":nq(l))===\"object\"&&null!==l&&\"__NEXT_ERROR_CODE\"in l&&\"string\"==typeof l.__NEXT_ERROR_CODE?l.__NEXT_ERROR_CODE:(void 0===l?\"undefined\":nq(l))===\"object\"&&null!==l&&\"digest\"in l&&\"string\"==typeof l.digest?l.digest.split(\"@\").find(function(e){return e.startsWith(\"E\")}):void 0,m[3]=_,m[4]=f):f=m[4];var k=f;m[5]!==c.type||m[6]!==_?(r=_,p=\"recoverable\"===(o=c.type)?\"Recoverable \".concat(r.name):\"console\"===o?\"Console \".concat(r.name):\"Runtime \".concat(r.name),m[5]=c.type,m[6]=_,m[7]=p):p=m[7];var E=p,j=C.notes,S=C.hydrationWarning;return m[8]!==c||m[9]!==b||m[10]!==k||m[11]!==C||m[12]!==E||m[13]!==S||m[14]!==s||m[15]!==j?(h={isLoading:s,activeIdx:b,setActiveIndex:A,activeError:c,errorDetails:C,errorCode:k,errorType:E,notes:j,hydrationWarning:S},m[8]=c,m[9]=b,m[10]=k,m[11]=C,m[12]=E,m[13]=S,m[14]=s,m[15]=j,m[16]=h):h=m[16],h}({runtimeErrors:o,getSquashedHydrationErrorDetails:r}),u=c.isLoading,d=c.errorCode,f=c.errorType,p=c.notes,h=c.hydrationWarning,m=c.activeIdx,g=c.errorDetails,y=c.activeError,v=c.setActiveIndex,b=nM(y),C=(0,w.useMemo)(function(){var e,t=b.findIndex(function(e){return!e.ignored&&!!e.originalCodeFrame&&!!e.originalStackFrame});return null!=(e=b[t])?e:null},[b]),_=(0,w.useCallback)(function(){if(!y)return\"\";var e=[];f&&e.push(\"## Error Type\\n\".concat(f));var t=y.error,n=t.message;if(\"environmentName\"in t&&t.environmentName){var r=\"[ \".concat(t.environmentName,\" ] \");n.startsWith(r)&&(n=n.slice(r.length))}if(n&&e.push(\"## Error Message\\n\".concat(n)),b.length>0){var o=b.filter(function(e){return!e.ignored});if(o.length>0){var a=o.map(function(e){if(e.originalStackFrame){var t=e.originalStackFrame,n=t.methodName,r=t.file,o=t.line1,a=t.column1;return\" at \".concat(n,\" (\").concat(r,\":\").concat(o,\":\").concat(a,\")\")}if(e.sourceStackFrame){var i=e.sourceStackFrame,l=i.methodName,s=i.file,c=i.line1,u=i.column1;return\" at \".concat(l,\" (\").concat(s,\":\").concat(c,\":\").concat(u,\")\")}return\"\"}).filter(Boolean);a.length>0&&e.push(\"\\n\".concat(a.join(\"\\n\")))}}if(null==C?void 0:C.originalCodeFrame){var i=eV()(e$(C.originalCodeFrame));e.push(\"## Code Frame\\n\".concat(i))}return\"\".concat(e.join(\"\\n\\n\"),\"\\n\\nNext.js version: \").concat(l.versionInfo.installed,\" (\").concat(\"Webpack\",\")\\n\")},[y,f,C,b,l.versionInfo]);if(u)return(0,A.jsx)(t0,{children:(0,A.jsx)(ni,{})});if(!y)return null;var k=y.error,E=[\"server\",\"edge-server\"].includes(nT(k)||\"\");return(0,A.jsxs)(nd,(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({errorCode:d,errorType:f,errorMessage:h?(0,A.jsx)(n$,{message:h}):(0,A.jsx)(nW,{error:k}),onClose:E?void 0:i,debugInfo:a,error:k,runtimeErrors:o,activeIdx:m,setActiveIndex:v,dialogResizerRef:s,generateErrorInfo:_},l),n=n={children:[(0,A.jsxs)(\"div\",{className:\"error-overlay-notes-container\",children:[p?(0,A.jsx)(A.Fragment,{children:(0,A.jsx)(\"p\",{id:\"nextjs__container_errors__notes\",className:\"nextjs__container_errors__notes\",children:p})}):null,h?(0,A.jsx)(\"p\",{id:\"nextjs__container_errors__link\",className:\"nextjs__container_errors__link\",children:(0,A.jsx)(eA,{text:\"See more info here: \".concat(tg)})}):null]}),g.reactOutputComponentDiff?(0,A.jsx)(nP,{reactOutputComponentDiff:g.reactOutputComponentDiff||\"\"}):null,(0,A.jsx)(w.Suspense,{fallback:(0,A.jsx)(\"div\",{\"data-nextjs-error-suspended\":!0}),children:(0,A.jsx)(nZ,{error:y,dialogResizerRef:s},y.id.toString())})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t))}function nX(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h,m,g,y,v,b,w=(0,x.c)(19);return(w[0]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"pages\"}),w[0]=r):r=w[0],w[1]===Symbol.for(\"react.memo_cache_sentinel\")?(o=(0,A.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"Turbopack is an incremental bundler optimized for JavaScript and TypeScript, written in Rust, and built into Next.js. Turbopack can be used in Next.js in both the\",\" \",r,\" and\",\" \",(0,A.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"app\"}),\" directories for faster local development.\"]}),w[1]=o):o=w[1],w[2]===Symbol.for(\"react.memo_cache_sentinel\")?(a=(0,A.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"To enable Turbopack, use the\",\" \",(0,A.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"--turbopack\"}),\" flag when running the Next.js development server.\"]}),w[2]=a):a=w[2],w[3]!==e)?(i=(0,A.jsxs)(\"article\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({className:\"dev-tools-info-article\"},e),n=n={children:[o,a]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),w[3]=e,w[4]=i):i=w[4],w[5]===Symbol.for(\"react.memo_cache_sentinel\")?(l=(0,A.jsx)(e8,{actionLabel:\"Copy Next.js Turbopack Command\",successLabel:\"Next.js Turbopack Command Copied\",content:\"--turbopack\",className:\"dev-tools-info-copy-button\"}),w[5]=l):l=w[5],w[6]===Symbol.for(\"react.memo_cache_sentinel\")?(s=(0,A.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\" \"}),c=(0,A.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\"{\"}),w[6]=s,w[7]=c):(s=w[6],c=w[7]),w[8]===Symbol.for(\"react.memo_cache_sentinel\")?(u=(0,A.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\" \",(0,A.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"scripts\"'}),\": \",\"{\"]}),w[8]=u):u=w[8],w[9]===Symbol.for(\"react.memo_cache_sentinel\")?(d=(0,A.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"dev\"'}),w[9]=d):d=w[9],w[10]===Symbol.for(\"react.memo_cache_sentinel\")?(f=(0,A.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line dev-tools-info-highlight\",children:[\" \",d,\":\",\" \",(0,A.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next dev --turbopack\"'}),\",\"]}),w[10]=f):f=w[10],w[11]===Symbol.for(\"react.memo_cache_sentinel\")?(p=(0,A.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"build\"'}),w[11]=p):p=w[11],w[12]===Symbol.for(\"react.memo_cache_sentinel\")?(h=(0,A.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\" \",p,\":\",\" \",(0,A.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next build\"'}),\",\"]}),w[12]=h):h=w[12],w[13]===Symbol.for(\"react.memo_cache_sentinel\")?(m=(0,A.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"start\"'}),w[13]=m):m=w[13],w[14]===Symbol.for(\"react.memo_cache_sentinel\")?(g=(0,A.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\" \",m,\":\",\" \",(0,A.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next start\"'}),\",\"]}),w[14]=g):g=w[14],w[15]===Symbol.for(\"react.memo_cache_sentinel\")?(y=(0,A.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"lint\"'}),w[15]=y):y=w[15],w[16]===Symbol.for(\"react.memo_cache_sentinel\")?(v=(0,A.jsx)(\"div\",{className:\"dev-tools-info-code-block-container\",children:(0,A.jsxs)(\"div\",{className:\"dev-tools-info-code-block\",children:[l,(0,A.jsx)(\"pre\",{className:\"dev-tools-info-code-block-pre\",children:(0,A.jsxs)(\"code\",{children:[s,c,u,f,h,g,(0,A.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\" \",y,\":\",\" \",(0,A.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next lint\"'})]}),(0,A.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\" }\"}),(0,A.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\"}\"}),(0,A.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\" \"})]})})]})}),w[16]=v):v=w[16],w[17]!==i?(b=(0,A.jsxs)(A.Fragment,{children:[i,v]}),w[17]=i,w[18]=b):b=w[18],b}function nG(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function nQ(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function nJ(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function n0(e){var t,n,r,o,a,i,l=(0,x.c)(10);l[0]!==e?(t=nJ(e,[\"routerType\"]),n=e.routerType,l[0]=e,l[1]=t,l[2]=n):(t=l[1],n=l[2]),l[3]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"The path\",\" \",(0,A.jsx)(\"code\",{className:\"dev-tools-info-code\",children:window.location.pathname}),\" \",'is marked as \"static\" since it will be prerendered during the build time.']}),l[3]=r):r=l[3];var s=\"pages\"===n?\"https://nextjs.org/docs/pages/building-your-application/data-fetching/incremental-static-regeneration\":\"https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration\";return l[4]!==s?(o=(0,A.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"With Static Rendering, routes are rendered at build time, or in the background after\",\" \",(0,A.jsx)(\"a\",{className:\"dev-tools-info-link\",href:s,target:\"_blank\",rel:\"noopener noreferrer\",children:\"data revalidation\"}),\".\"]}),l[4]=s,l[5]=o):o=l[5],l[6]===Symbol.for(\"react.memo_cache_sentinel\")?(a=(0,A.jsx)(\"p\",{className:\"dev-tools-info-paragraph\",children:\"Static rendering is useful when a route has data that is not personalized to the user and can be known at build time, such as a static blog post or a product page.\"}),l[6]=a):a=l[6],l[7]!==t||l[8]!==o?(i=(0,A.jsxs)(\"article\",nQ(nG({className:\"dev-tools-info-article\"},t),{children:[r,o,a]})),l[7]=t,l[8]=o,l[9]=i):i=l[9],i}function n1(e){var t,n,r,o,a,i,l,s=(0,x.c)(11);return s[0]!==e?(t=nJ(e,[\"routerType\"]),n=e.routerType,s[0]=e,s[1]=t,s[2]=n):(t=s[1],n=s[2]),s[3]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(\"code\",{className:\"dev-tools-info-code\",children:window.location.pathname}),s[3]=r):r=s[3],s[4]===Symbol.for(\"react.memo_cache_sentinel\")?(o=(0,A.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"The path\",\" \",r,\" \",'is marked as \"dynamic\" since it will be rendered for each user at',\" \",(0,A.jsx)(\"strong\",{children:\"request time\"}),\".\"]}),a=(0,A.jsx)(\"p\",{className:\"dev-tools-info-paragraph\",children:\"Dynamic rendering is useful when a route has data that is personalized to the user or has information that can only be known at request time, such as cookies or the URL's search params.\"}),s[4]=o,s[5]=a):(o=s[4],a=s[5]),s[6]!==n?(i=\"pages\"===n?(0,A.jsxs)(\"p\",{className:\"dev-tools-info-pagraph\",children:[\"Exporting the\",\" \",(0,A.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"getServerSideProps\"}),\" \",\"function will opt the route into dynamic rendering. This function will be called by the server on every request.\"]}):(0,A.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"During rendering, if a\",\" \",(0,A.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-apis\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"Dynamic API\"}),\" \",\"or a\",\" \",(0,A.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"https://nextjs.org/docs/app/api-reference/functions/fetch\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"fetch\"}),\" \",\"option of\",\" \",(0,A.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"{ cache: 'no-store' }\"}),\" \",\"is discovered, Next.js will switch to dynamically rendering the whole route.\"]}),s[6]=n,s[7]=i):i=s[7],s[8]!==t||s[9]!==i?(l=(0,A.jsxs)(\"article\",nQ(nG({className:\"dev-tools-info-article\"},t),{children:[o,a,i]})),s[8]=t,s[9]=i,s[10]=l):l=s[10],l}var n2={pages:{static:\"https://nextjs.org/docs/pages/building-your-application/rendering/static-site-generation\",dynamic:\"https://nextjs.org/docs/pages/building-your-application/rendering/server-side-rendering\"},app:{static:\"https://nextjs.org/docs/app/building-your-application/rendering/server-components#static-rendering-default\",dynamic:\"https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-rendering\"}};function n4(e){var t,n,r,o,a=(0,x.c)(8);return a[0]!==e?(n=nJ(e,[\"routerType\",\"isStaticRoute\"]),r=e.routerType,t=e.isStaticRoute,a[0]=e,a[1]=t,a[2]=n,a[3]=r):(t=a[1],n=a[2],r=a[3]),a[4]!==t||a[5]!==n||a[6]!==r?(o=t?(0,A.jsx)(n0,nG({routerType:r},n)):(0,A.jsx)(n1,nG({routerType:r},n)),a[4]=t,a[5]=n,a[6]=r,a[7]=o):o=a[7],o}function n5(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",fill:\"none\",children:(0,A.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"m.191 2.063.56.498 13.5 12 .561.498.997-1.121-.56-.498-1.81-1.608 2.88-3.342v-.98l-3.204-3.72C10.645.923 6.365.686 3.594 3.08L1.748 1.44 1.188.94.19 2.063ZM14.761 8l-2.442 2.836-1.65-1.466a3.001 3.001 0 0 0-4.342-3.86l-1.6-1.422a5.253 5.253 0 0 1 7.251.682L14.76 8ZM7.526 6.576l1.942 1.727a1.499 1.499 0 0 0-1.942-1.727Zm-7.845.935 1.722-2 1.137.979L1.24 8l2.782 3.23A5.25 5.25 0 0 0 9.9 12.703l.54 1.4a6.751 6.751 0 0 1-7.555-1.892L-.318 8.49v-.98Z\",clipRule:\"evenodd\"})}),t[0]=e):e=t[0],e}function n3(){var e,t,n=(0,x.c)(2);return n[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"g\",{clipPath:\"url(#light_icon_clip_path)\",children:(0,A.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"M8.75.75V0h-1.5v2h1.5V.75ZM3.26 4.32l-.53-.53-.354-.353-.53-.53 1.06-1.061.53.53.354.354.53.53-1.06 1.06Zm8.42-1.06.53-.53.353-.354.53-.53 1.061 1.06-.53.53-.354.354-.53.53-1.06-1.06ZM8 11.25a3.25 3.25 0 1 0 0-6.5 3.25 3.25 0 0 0 0 6.5Zm0 1.5a4.75 4.75 0 1 0 0-9.5 4.75 4.75 0 0 0 0 9.5Zm6-5.5h2v1.5h-2v-1.5Zm-13.25 0H0v1.5h2v-1.5H.75Zm1.62 5.32-.53.53 1.06 1.06.53-.53.354-.353.53-.53-1.06-1.061-.53.53-.354.354Zm10.2 1.06.53.53 1.06-1.06-.53-.53-.354-.354-.53-.53-1.06 1.06.53.53.353.354ZM8.75 14v2h-1.5v-2h1.5Z\",clipRule:\"evenodd\"})}),n[0]=e):e=n[0],n[1]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsxs)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"20\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",children:[e,(0,A.jsx)(\"defs\",{children:(0,A.jsx)(\"clipPath\",{id:\"light_icon_clip_path\",children:(0,A.jsx)(\"path\",{fill:\"currentColor\",d:\"M0 0h16v16H0z\"})})})]}),n[1]=t):t=n[1],t}function n6(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{\"data-testid\":\"geist-icon\",height:\"16\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",width:\"16\",children:(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M1.5 8.00005C1.5 5.53089 2.99198 3.40932 5.12349 2.48889C4.88136 3.19858 4.75 3.95936 4.75 4.7501C4.75 8.61609 7.88401 11.7501 11.75 11.7501C11.8995 11.7501 12.048 11.7454 12.1953 11.7361C11.0955 13.1164 9.40047 14.0001 7.5 14.0001C4.18629 14.0001 1.5 11.3138 1.5 8.00005ZM6.41706 0.577759C2.78784 1.1031 0 4.22536 0 8.00005C0 12.1422 3.35786 15.5001 7.5 15.5001C10.5798 15.5001 13.2244 13.6438 14.3792 10.9921L13.4588 9.9797C12.9218 10.155 12.3478 10.2501 11.75 10.2501C8.71243 10.2501 6.25 7.78767 6.25 4.7501C6.25 3.63431 6.58146 2.59823 7.15111 1.73217L6.41706 0.577759ZM13.25 1V1.75V2.75L14.25 2.75H15V4.25H14.25H13.25V5.25V6H11.75V5.25V4.25H10.75L10 4.25V2.75H10.75L11.75 2.75V1.75V1H13.25Z\",fill:\"currentColor\"})}),t[0]=e):e=t[0],e}function n9(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{width:\"16\",height:\"16\",strokeLinejoin:\"round\",children:(0,A.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"M0 2a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v8.5a1 1 0 0 1-1 1H8.75v3h1.75V16h-5v-1.5h1.75v-3H1a1 1 0 0 1-1-1V2Zm1.5.5V10h13V2.5h-13Z\",clipRule:\"evenodd\"})}),t[0]=e):e=t[0],e}function n8(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function n7(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||rt(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function re(e){return function(e){if(Array.isArray(e))return n8(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||rt(e)||function(){throw TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rt(e,t){if(e){if(\"string\"==typeof e)return n8(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return n8(e,t)}}function rn(){var e,t,n=(e=[\"\\n .shortcut-recorder {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n position: relative;\\n font-family: var(--font-stack-sans);\\n\\n .shortcut-recorder-button {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n background: transparent;\\n border: 1px dashed var(--color-gray-500);\\n border-radius: var(--rounded-lg);\\n padding: 6px 8px;\\n font-weight: 400;\\n font-size: var(--size-14);\\n color: var(--color-gray-1000);\\n transition: border-color 150ms var(--timing-swift);\\n\\n &[data-has-shortcut='true'] {\\n border: 1px solid var(--color-gray-alpha-400);\\n\\n &:hover {\\n border-color: var(--color-gray-500);\\n }\\n }\\n\\n &:hover {\\n border-color: var(--color-gray-600);\\n }\\n\\n &::placeholder {\\n color: var(--color-gray-900);\\n }\\n\\n &[data-pristine='false']::placeholder {\\n color: transparent;\\n }\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n }\\n\\n kbd {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n font-family: var(--font-stack-sans);\\n background: var(--color-gray-200);\\n min-width: 20px;\\n height: 20px;\\n font-size: 14px;\\n border-radius: 4px;\\n color: var(--color-gray-1000);\\n\\n &[data-symbol='false'] {\\n padding: 0 4px;\\n }\\n }\\n\\n .shortcut-recorder-clear-button {\\n cursor: pointer;\\n color: var(--color-gray-1000);\\n width: 20px;\\n height: 20px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: 4px;\\n transition: background 150ms var(--timing-swift);\\n\\n &:hover {\\n background: var(--color-gray-300);\\n }\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n }\\n\\n svg {\\n width: 14px;\\n height: 14px;\\n }\\n }\\n }\\n\\n .shortcut-recorder-keys {\\n pointer-events: none;\\n user-select: none;\\n display: flex;\\n align-items: center;\\n gap: 2px;\\n }\\n\\n .shortcut-recorder-tooltip {\\n --gap: 8px;\\n --background: var(--color-gray-1000);\\n background: var(--background);\\n color: var(--color-background-100);\\n font-size: var(--size-14);\\n padding: 4px 8px;\\n border-radius: 8px;\\n position: absolute;\\n bottom: calc(100% + var(--gap));\\n text-align: center;\\n opacity: 0;\\n scale: 0.96;\\n white-space: nowrap;\\n user-select: none;\\n transition:\\n opacity 150ms var(--timing-swift),\\n scale 150ms var(--timing-swift);\\n\\n &[data-show='true'] {\\n opacity: 1;\\n scale: 1;\\n }\\n\\n svg {\\n position: absolute;\\n transform: translateX(-50%);\\n bottom: -6px;\\n left: 50%;\\n }\\n\\n .shortcut-recorder-status {\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n }\\n\\n .shortcut-recorder-status-icon {\\n width: 7px;\\n height: 7px;\\n border-radius: 50%;\\n flex-shrink: 0;\\n background: var(--color-red-700);\\n\\n &[data-success='true'] {\\n background: var(--color-green-700);\\n }\\n }\\n }\\n\"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return rn=function(){return n},n}var rr=[\"Meta\",\"Control\",\"Ctrl\",\"Alt\",\"Option\",\"Shift\"];function ro(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h=(0,x.c)(33),m=e.value,g=e.onChange,y=n7((0,w.useState)(!0),2),v=y[0],b=y[1],C=n7((0,w.useState)(!1),2),_=C[0],k=C[1];h[0]!==m?(t=null!=m?m:[],h[0]=m,h[1]=t):t=h[1];var E=n7((0,w.useState)(t),2),j=E[0],S=E[1],O=n7((0,w.useState)(!1),2),B=O[0],P=O[1],I=(0,w.useRef)(null),T=(0,w.useRef)(null),z=!!m||j.length>0;h[2]!==g||h[3]!==v||h[4]!==_?(n=function(e){if(e.target===T.current&&\"Tab\"!==e.key){I.current&&clearTimeout(I.current),_||k(!0),v&&(S([]),b(!1));var t=function(e){I.current=window.setTimeout(function(){P(!0),g(e.join(\"+\")),I.current=window.setTimeout(function(){k(!1)},1e3)},180)};e.preventDefault(),e.stopPropagation(),S(function(n){if(n.includes(e.code)||n.includes(e.key))return n;if(!rr.includes(e.key)){var r=n.findIndex(rl);if(-1!==r){var o=re(n);return o[r]=e.code,t(o),o}var a=re(n).concat([e.code]);return t(a),a}for(var i=re(n),l=rr.indexOf(e.key),s=0,c=0;c<i.length;c++)if(rr.includes(i[c])){if(l<rr.indexOf(i[c])){s=c;break}s=c+1}else break;return i.splice(s,0,e.key),t(i),i})}},h[2]=g,h[3]=v,h[4]=_,h[5]=n):n=h[5];var D=n;h[6]!==g?(r=function(){var e;null==(e=T.current)||e.focus(),S([]),P(!1),setTimeout(function(){k(!0)}),g(null)},h[6]=g,h[7]=r):r=h[7];var L=r;h[8]===Symbol.for(\"react.memo_cache_sentinel\")?(o=function(){P(!1),k(!1),b(!0)},h[8]=o):o=h[8];var N=o;h[9]===Symbol.for(\"react.memo_cache_sentinel\")?(a=function(){var e;I.current&&clearTimeout(I.current),k(!0),null==(e=T.current)||e.focus()},h[9]=a):a=h[9];var R=a;h[10]!==z||h[11]!==j?(i=z?(0,A.jsx)(\"div\",{className:\"shortcut-recorder-keys\",children:j.map(ri)}):\"Record Shortcut\",h[10]=z,h[11]=j,h[12]=i):i=h[12],h[13]!==L||h[14]!==z?(l=z&&(0,A.jsx)(\"div\",{className:\"shortcut-recorder-clear-button\",role:\"button\",onClick:L,onFocus:ra,onKeyDown:function(e){(\"Enter\"===e.key||\" \"===e.key)&&(L(),e.stopPropagation())},\"aria-label\":\"Clear shortcut\",tabIndex:0,children:(0,A.jsx)(rd,{})}),h[13]=L,h[14]=z,h[15]=l):l=h[15],h[16]!==D||h[17]!==z||h[18]!==i||h[19]!==l?(s=(0,A.jsxs)(\"button\",{className:\"shortcut-recorder-button\",ref:T,onClick:R,onFocus:R,onBlur:N,onKeyDown:D,\"data-has-shortcut\":z,\"data-shortcut-recorder\":\"true\",children:[i,l]}),h[16]=D,h[17]=z,h[18]=i,h[19]=l,h[20]=s):s=h[20],h[21]!==B?(c=(0,A.jsx)(\"div\",{className:\"shortcut-recorder-status-icon\",\"data-success\":B}),h[21]=B,h[22]=c):c=h[22];var M=B?\"Shortcut set\":\"Recording\";return h[23]!==M||h[24]!==c?(u=(0,A.jsxs)(\"div\",{className:\"shortcut-recorder-status\",children:[c,M]}),h[23]=M,h[24]=c,h[25]=u):u=h[25],h[26]===Symbol.for(\"react.memo_cache_sentinel\")?(d=(0,A.jsx)(rs,{}),h[26]=d):d=h[26],h[27]!==_||h[28]!==u?(f=(0,A.jsxs)(\"div\",{className:\"shortcut-recorder-tooltip\",\"data-show\":_,children:[u,d]}),h[27]=_,h[28]=u,h[29]=f):f=h[29],h[30]!==f||h[31]!==s?(p=(0,A.jsxs)(\"div\",{className:\"shortcut-recorder\",children:[s,f]}),h[30]=f,h[31]=s,h[32]=p):p=h[32],p}function ra(e){return e.stopPropagation()}function ri(e){return(0,A.jsx)(rc,{children:e},e)}function rl(e){return!rr.includes(e)}function rs(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{fill:\"none\",height:\"6\",viewBox:\"0 0 14 6\",width:\"14\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,A.jsx)(\"path\",{d:\"M13.8284 0H0.17157C0.702003 0 1.21071 0.210714 1.58578 0.585787L5.58578 4.58579C6.36683 5.36684 7.63316 5.36683 8.41421 4.58579L12.4142 0.585786C12.7893 0.210714 13.298 0 13.8284 0Z\",fill:\"var(--background)\"})}),t[0]=e):e=t[0],e}function rc(e){var t,n,r,o,a=(0,x.c)(9),i=e.children;a[0]!==i?(t=function(e){switch(e){case\"Meta\":return(0,A.jsx)(ru,{});case\"Alt\":case\"Option\":return\"⌥\";case\"Control\":case\"Ctrl\":return\"Ctrl\";case\"Shift\":return\"⇧\";case\"Enter\":return\"⏎\";case\"Escape\":case\"Esc\":return\"Esc\";case\" \":case\"Space\":case\"Spacebar\":return\"Space\";case\"ArrowUp\":return\"↑\";case\"ArrowDown\":return\"↓\";case\"ArrowLeft\":return\"←\";case\"ArrowRight\":return\"→\";case\"Tab\":return\"Tab\";case\"Backspace\":return\"⌫\";case\"Delete\":return\"⌦\";default:if(1===i.length)return i.toUpperCase();return i}},a[0]=i,a[1]=t):t=a[1];var l=t;if(a[2]!==i||a[3]!==l){var s=l(i);n=\"string\"==typeof s&&1===s.length,r=function(e){if(\"string\"!=typeof e)return e;var t={Minus:\"-\",Equal:\"=\",BracketLeft:\"[\",BracketRight:\"]\",Backslash:\"\\\\\",Semicolon:\";\",Quote:\"'\",Comma:\",\",Period:\".\",Backquote:\"`\",Space:\" \",Slash:\"/\",IntlBackslash:\"\\\\\"};return t[e]?t[e]:/^Key([A-Z])$/.test(e)?e.replace(/^Key/,\"\"):/^Digit([0-9])$/.test(e)?e.replace(/^Digit/,\"\"):/^Numpad([0-9])$/.test(e)?e.replace(/^Numpad/,\"\"):\"NumpadAdd\"===e?\"+\":\"NumpadSubtract\"===e?\"-\":\"NumpadMultiply\"===e?\"*\":\"NumpadDivide\"===e?\"/\":\"NumpadDecimal\"===e?\".\":\"NumpadEnter\"===e?\"Enter\":e}(s),a[2]=i,a[3]=l,a[4]=n,a[5]=r}else n=a[4],r=a[5];return a[6]!==n||a[7]!==r?(o=(0,A.jsx)(\"kbd\",{\"data-symbol\":n,children:r}),a[6]=n,a[7]=r,a[8]=o):o=a[8],o}function ru(){var e,t,n,r,o,a=(0,x.c)(6),i=n7((0,w.useState)(\"\\xa0\"),2),l=i[0],s=i[1];a[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=rp(/^Mac/)||rp(/^iPhone/)||rp(/^iPad/)||rp(/^Mac/)&&navigator.maxTouchPoints>1,a[0]=e):e=a[0];var c=e;return a[1]===Symbol.for(\"react.memo_cache_sentinel\")?(t=function(){!0===c&&s(\"⌘\"),!1===c&&s(\"Ctrl\")},n=[c],a[1]=t,a[2]=n):(t=a[1],n=a[2]),(0,w.useEffect)(t,n),a[3]===Symbol.for(\"react.memo_cache_sentinel\")?(r={minWidth:\"1em\",display:\"inline-block\"},a[3]=r):r=a[3],a[4]!==l?(o=(0,A.jsx)(\"span\",{style:r,children:l}),a[4]=l,a[5]=o):o=a[5],o}function rd(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{height:\"16\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",width:\"16\",children:(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M12.4697 13.5303L13 14.0607L14.0607 13L13.5303 12.4697L9.06065 7.99999L13.5303 3.53032L14.0607 2.99999L13 1.93933L12.4697 2.46966L7.99999 6.93933L3.53032 2.46966L2.99999 1.93933L1.93933 2.99999L2.46966 3.53032L6.93933 7.99999L2.46966 12.4697L1.93933 13L2.99999 14.0607L3.53032 13.5303L7.99999 9.06065L12.4697 13.5303Z\",fill:\"currentColor\"})}),t[0]=e):e=t[0],e}var rf=eu(rn());function rp(e){return\"undefined\"!=typeof window&&null!=window.navigator?e.test(window.navigator.platform):void 0}function rh(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function rm(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){n(e);return}l.done?t(s):Promise.resolve(s).then(r,o)}var rg=__nested_webpack_require_378273__(\"./dist/compiled/zod/index.cjs\"),ry=rg.z.object({theme:rg.z.enum([\"light\",\"dark\",\"system\"]).optional(),disableDevIndicator:rg.z.boolean().optional(),devToolsPosition:rg.z.enum([\"top-left\",\"top-right\",\"bottom-left\",\"bottom-right\"]).optional(),devToolsPanelPosition:rg.z.record(rg.z.string(),rg.z.enum([\"top-left\",\"top-right\",\"bottom-left\",\"bottom-right\"])).optional(),devToolsPanelSize:rg.z.record(rg.z.string(),rg.z.object({width:rg.z.number(),height:rg.z.number()})).optional(),scale:rg.z.number().optional(),hideShortcut:rg.z.string().nullable().optional()});function rv(e){return e&&\"undefined\"!=typeof Symbol&&e.constructor===Symbol?\"symbol\":typeof e}var rb={},rA=null;function rx(){if(0!==Object.keys(rb).length){var e=JSON.stringify(rb);rb={},fetch(\"/__nextjs_devtools_config\",{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:e,keepalive:!0}).catch(function(t){console.warn(\"[Next.js DevTools] Failed to save config:\",{data:e,error:t})})}}function rw(e){var t=ry.safeParse(e);if(!t.success)return void console.warn(\"[Next.js DevTools] Invalid config patch:\",t.error.message);rb=function e(t,n){if(!n||(void 0===n?\"undefined\":rv(n))!==\"object\"||Array.isArray(n)||!t||(void 0===t?\"undefined\":rv(t))!==\"object\"||Array.isArray(t))return n;var r=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},t);for(var o in n){var a=n[o],i=t[o];void 0!==a&&(a&&(void 0===a?\"undefined\":rv(a))===\"object\"&&!Array.isArray(a)&&i&&(void 0===i?\"undefined\":rv(i))===\"object\"&&!Array.isArray(i)?r[o]=e(i,a):r[o]=a)}return r}(rb,e),rA&&clearTimeout(rA),rA=setTimeout(rx,120)}function rC(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function r_(){var e,t,n=(e=[\"\\n .preferences-container {\\n width: 100%;\\n }\\n\\n @media (min-width: 576px) {\\n .preferences-container {\\n width: 480px;\\n }\\n }\\n\\n .preference-section:first-child {\\n padding-top: 0;\\n }\\n\\n .preference-section {\\n padding: 12px 0;\\n border-bottom: 1px solid var(--color-gray-400);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n gap: 24px;\\n }\\n\\n .preference-section:last-child {\\n border-bottom: none;\\n }\\n\\n .preference-header {\\n margin-bottom: 0;\\n flex: 1;\\n }\\n\\n .preference-header label {\\n font-size: var(--size-14);\\n font-weight: 500;\\n color: var(--color-gray-1000);\\n margin: 0;\\n }\\n\\n .preference-description {\\n color: var(--color-gray-900);\\n font-size: var(--size-14);\\n margin: 0;\\n }\\n\\n .select-button,\\n .action-button {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-lg);\\n font-weight: 400;\\n font-size: var(--size-14);\\n color: var(--color-gray-1000);\\n padding: 6px 8px;\\n transition: border-color 150ms var(--timing-swift);\\n\\n &:hover {\\n border-color: var(--color-gray-500);\\n }\\n\\n svg {\\n width: 14px;\\n height: 14px;\\n overflow: visible;\\n }\\n }\\n\\n .select-button {\\n &:focus-within {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n select {\\n all: unset;\\n }\\n\\n option {\\n color: var(--color-gray-1000);\\n background: var(--color-background-100);\\n }\\n }\\n\\n .preference-section button:disabled {\\n opacity: 0.6;\\n cursor: not-allowed;\\n }\\n\\n :global(.icon) {\\n width: 18px;\\n height: 18px;\\n color: #666;\\n }\\n\"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return r_=function(){return n},n}function rk(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h,m,g,y,v,b,C,_,k,E,j,S,O,P,I,T,z,D,L,N,R,M,Z,U,F,q,H,V,$,W,Y=(0,x.c)(65),K=e.theme,X=e.hide,G=e.hideShortcut,Q=e.setHideShortcut,J=e.scale,ee=e.setPosition,et=e.setScale,en=e.position,er=(o=(t=(0,w.useState)(!1),n=2,r=function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,2)||function(e,t){if(e){if(\"string\"==typeof e)return rh(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return rh(e,t)}}(t,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())[0],a=r[1],{restartServer:function(e){var t,n=e.invalidatePersistentCache;return(t=function(){var e,t,r,o,i,l;return function(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(n)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(s){switch(s.label){case 0:a(!0),e=n?\"/__nextjs_restart_dev?invalidatePersistentCache=1\":\"/__nextjs_restart_dev\",t=!1,s.label=1;case 1:return s.trys.push([1,11,12,13]),[4,fetch(\"/__nextjs_server_status\").then(function(e){return e.json()}).then(function(e){return e.executionId}).catch(function(e){return console.log(\"[Next.js DevTools] Failed to fetch server status while restarting dev server.\",e),null})];case 2:if(!(r=s.sent()))return console.log(\"[Next.js DevTools] Failed to get the current server execution ID while restarting dev server.\"),[2];return[4,fetch(e,{method:\"POST\"})];case 3:if(!(o=s.sent()).ok)return console.log(\"[Next.js DevTools] Failed to fetch restart server endpoint. Status:\",o.status),[2];i=0,s.label=4;case 4:if(!(i<10))return[3,10];return[4,new Promise(function(e){return setTimeout(e,1e3)})];case 5:s.sent(),s.label=6;case 6:return s.trys.push([6,8,,9]),[4,fetch(\"/__nextjs_server_status\").then(function(e){return e.json()}).then(function(e){return e.executionId})];case 7:if(l=s.sent(),r!==l)return t=!0,window.location.reload(),[2];return[3,9];case 8:return s.sent(),[3,9];case 9:return i++,[3,4];case 10:return console.log(\"[Next.js DevTools] Failed to restart server. Exhausted all polling attempts.\"),[2];case 11:return console.log(\"[Next.js DevTools] Failed to restart server.\",s.sent()),[2];case 12:return t||a(!1),[7];case 13:return[2]}})},function(){var e=this,n=arguments;return new Promise(function(r,o){var a=t.apply(e,n);function i(e){rm(a,r,o,i,l,\"next\",e)}function l(e){rm(a,r,o,i,l,\"throw\",e)}i(void 0)})})()},isPending:o}),eo=er.restartServer,ea=er.isPending,ei=dl().shadowRoot;Y[0]!==ei.host?(i=function(e){var t=ei.host;if(\"system\"===e.target.value){t.classList.remove(\"dark\"),t.classList.remove(\"light\"),rw({theme:\"system\"});return}\"dark\"===e.target.value?(t.classList.add(\"dark\"),t.classList.remove(\"light\"),rw({theme:\"dark\"})):(t.classList.remove(\"dark\"),t.classList.add(\"light\"),rw({theme:\"light\"}))},Y[0]=ei.host,Y[1]=i):i=Y[1];var el=i;Y[2]!==ee?(l=function(e){ee(e.target.value),rw({devToolsPosition:e.target.value})},Y[2]=ee,Y[3]=l):l=Y[3];var es=l;Y[4]!==et?(s=function(e){var t=Number(e.target.value);et(t),rw({scale:t})},Y[4]=et,Y[5]=s):s=Y[5];var ec=s;return Y[6]===Symbol.for(\"react.memo_cache_sentinel\")?(c=(0,A.jsx)(\"h2\",{className:\"dev-tools-info-section-title\",children:\"General\"}),Y[6]=c):c=Y[6],Y[7]===Symbol.for(\"react.memo_cache_sentinel\")?(u=(0,A.jsxs)(\"div\",{className:\"preference-header\",children:[(0,A.jsx)(\"label\",{htmlFor:\"theme\",children:\"Theme\"}),(0,A.jsx)(\"p\",{className:\"preference-description\",children:\"Select your theme preference.\"})]}),Y[7]=u):u=Y[7],Y[8]!==K?(d=(0,A.jsx)(rS,{theme:K}),Y[8]=K,Y[9]=d):d=Y[9],Y[10]===Symbol.for(\"react.memo_cache_sentinel\")?(p=(0,A.jsx)(\"option\",{value:\"system\",children:\"System\"}),h=(0,A.jsx)(\"option\",{value:\"light\",children:\"Light\"}),f=(0,A.jsx)(\"option\",{value:\"dark\",children:\"Dark\"}),Y[10]=f,Y[11]=p,Y[12]=h):(f=Y[10],p=Y[11],h=Y[12]),Y[13]!==el||Y[14]!==d||Y[15]!==K?(m=(0,A.jsxs)(\"div\",{className:\"preference-section\",children:[u,(0,A.jsxs)(rj,{id:\"theme\",name:\"theme\",prefix:d,value:K,onChange:el,children:[p,h,f]})]}),Y[13]=el,Y[14]=d,Y[15]=K,Y[16]=m):m=Y[16],Y[17]===Symbol.for(\"react.memo_cache_sentinel\")?(g=(0,A.jsxs)(\"div\",{className:\"preference-header\",children:[(0,A.jsx)(\"label\",{htmlFor:\"position\",children:\"Position\"}),(0,A.jsx)(\"p\",{className:\"preference-description\",children:\"Adjust the placement of your dev tools.\"})]}),Y[17]=g):g=Y[17],Y[18]===Symbol.for(\"react.memo_cache_sentinel\")?(y=(0,A.jsx)(\"option\",{value:\"bottom-left\",children:\"Bottom Left\"}),v=(0,A.jsx)(\"option\",{value:\"bottom-right\",children:\"Bottom Right\"}),b=(0,A.jsx)(\"option\",{value:\"top-left\",children:\"Top Left\"}),C=(0,A.jsx)(\"option\",{value:\"top-right\",children:\"Top Right\"}),Y[18]=y,Y[19]=v,Y[20]=b,Y[21]=C):(y=Y[18],v=Y[19],b=Y[20],C=Y[21]),Y[22]!==es||Y[23]!==en?(_=(0,A.jsxs)(\"div\",{className:\"preference-section\",children:[g,(0,A.jsxs)(rj,{id:\"position\",name:\"position\",value:en,onChange:es,children:[y,v,b,C]})]}),Y[22]=es,Y[23]=en,Y[24]=_):_=Y[24],Y[25]===Symbol.for(\"react.memo_cache_sentinel\")?(k=(0,A.jsxs)(\"div\",{className:\"preference-header\",children:[(0,A.jsx)(\"label\",{htmlFor:\"size\",children:\"Size\"}),(0,A.jsx)(\"p\",{className:\"preference-description\",children:\"Adjust the size of your dev tools.\"})]}),Y[25]=k):k=Y[25],Y[26]===Symbol.for(\"react.memo_cache_sentinel\")?(E=Object.entries(B).map(rE),Y[26]=E):E=Y[26],Y[27]!==ec||Y[28]!==J?(j=(0,A.jsxs)(\"div\",{className:\"preference-section\",children:[k,(0,A.jsx)(rj,{id:\"size\",name:\"size\",value:J,onChange:ec,children:E})]}),Y[27]=ec,Y[28]=J,Y[29]=j):j=Y[29],Y[30]===Symbol.for(\"react.memo_cache_sentinel\")?(S=(0,A.jsxs)(\"div\",{className:\"preference-header\",children:[(0,A.jsx)(\"label\",{id:\"hide-dev-tools\",children:\"Hide Dev Tools for this session\"}),(0,A.jsx)(\"p\",{className:\"preference-description\",children:\"Hide Dev Tools until you restart your dev server, or 1 day.\"})]}),Y[30]=S):S=Y[30],Y[31]===Symbol.for(\"react.memo_cache_sentinel\")?(O=(0,A.jsx)(n5,{}),P=(0,A.jsx)(\"span\",{children:\"Hide\"}),Y[31]=O,Y[32]=P):(O=Y[31],P=Y[32]),Y[33]!==X?(I=(0,A.jsxs)(\"div\",{className:\"preference-section\",children:[S,(0,A.jsx)(\"div\",{className:\"preference-control\",children:(0,A.jsxs)(\"button\",{\"aria-describedby\":\"hide-dev-tools\",name:\"hide-dev-tools\",\"data-hide-dev-tools\":!0,className:\"action-button\",onClick:X,children:[O,P]})})]}),Y[33]=X,Y[34]=I):I=Y[34],Y[35]===Symbol.for(\"react.memo_cache_sentinel\")?(T=(0,A.jsxs)(\"div\",{className:\"preference-header\",children:[(0,A.jsx)(\"label\",{id:\"hide-dev-tools\",children:\"Hide Dev Tools shortcut\"}),(0,A.jsx)(\"p\",{className:\"preference-description\",children:\"Set a custom keyboard shortcut to toggle visibility.\"})]}),Y[35]=T):T=Y[35],Y[36]!==G?(z=null!=(D=null==G?void 0:G.split(\"+\"))?D:null,Y[36]=G,Y[37]=z):z=Y[37],Y[38]!==Q||Y[39]!==z?(L=(0,A.jsxs)(\"div\",{className:\"preference-section\",children:[T,(0,A.jsx)(\"div\",{className:\"preference-control\",children:(0,A.jsx)(ro,{value:z,onChange:Q})})]}),Y[38]=Q,Y[39]=z,Y[40]=L):L=Y[40],Y[41]===Symbol.for(\"react.memo_cache_sentinel\")?(N=(0,A.jsx)(\"label\",{children:\"Disable Dev Tools for this project\"}),Y[41]=N):N=Y[41],Y[42]===Symbol.for(\"react.memo_cache_sentinel\")?(R=(0,A.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"devIndicators: false\"}),Y[42]=R):R=Y[42],Y[43]===Symbol.for(\"react.memo_cache_sentinel\")?(M=(0,A.jsx)(\"div\",{className:\"preference-section\",children:(0,A.jsxs)(\"div\",{className:\"preference-header\",children:[N,(0,A.jsxs)(\"p\",{className:\"preference-description\",children:[\"To disable this UI completely, set\",\" \",R,\" \",\"in your \",(0,A.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"next.config\"}),\" \",\"file.\"]})]})}),Y[43]=M):M=Y[43],Y[44]!==m||Y[45]!==_||Y[46]!==j||Y[47]!==I||Y[48]!==L?(Z=(0,A.jsxs)(\"div\",{className:\"preferences-container\",children:[m,_,j,I,L,M]}),Y[44]=m,Y[45]=_,Y[46]=j,Y[47]=I,Y[48]=L,Y[49]=Z):Z=Y[49],Y[50]===Symbol.for(\"react.memo_cache_sentinel\")?(U=(0,A.jsx)(\"h2\",{className:\"dev-tools-info-section-title\",children:\"Development Server\"}),Y[50]=U):U=Y[50],Y[51]===Symbol.for(\"react.memo_cache_sentinel\")?(F=(0,A.jsxs)(\"div\",{className:\"preference-header\",children:[(0,A.jsx)(\"label\",{id:\"restart-dev-server\",children:\"Restart Dev Server\"}),(0,A.jsx)(\"p\",{className:\"preference-description\",children:\"Restarts the development server without needing to leave the browser.\"})]}),Y[51]=F):F=Y[51],Y[52]!==eo?(q=function(){return eo({invalidatePersistentCache:!1})},Y[52]=eo,Y[53]=q):q=Y[53],Y[54]===Symbol.for(\"react.memo_cache_sentinel\")?(H=(0,A.jsx)(\"span\",{children:\"Restart\"}),Y[54]=H):H=Y[54],Y[55]!==ea||Y[56]!==q?(V=(0,A.jsx)(\"div\",{className:\"preferences-container\",children:(0,A.jsxs)(\"div\",{className:\"preference-section\",children:[F,(0,A.jsx)(\"div\",{className:\"preference-control\",children:(0,A.jsx)(\"button\",{\"aria-describedby\":\"restart-dev-server\",title:\"Restarts the development server without needing to leave the browser.\",name:\"restart-dev-server\",\"data-restart-dev-server\":!0,className:\"action-button\",onClick:q,disabled:ea,children:H})})]})}),Y[55]=ea,Y[56]=q,Y[57]=V):V=Y[57],Y[58]!==ea||Y[59]!==eo?($= true?(0,A.jsx)(\"div\",{className:\"preferences-container\",children:(0,A.jsxs)(\"div\",{className:\"preference-section\",children:[(0,A.jsxs)(\"div\",{className:\"preference-header\",children:[(0,A.jsx)(\"label\",{id:\"reset-bundler-cache\",children:\"Reset Bundler Cache\"}),(0,A.jsx)(\"p\",{className:\"preference-description\",children:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\"})]}),(0,A.jsx)(\"div\",{className:\"preference-control\",children:(0,A.jsx)(\"button\",{\"aria-describedby\":\"reset-bundler-cache\",title:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\",name:\"reset-bundler-cache\",\"data-reset-bundler-cache\":!0,className:\"action-button\",onClick:function(){return eo({invalidatePersistentCache:!0})},disabled:ea,children:(0,A.jsx)(\"span\",{children:\"Reset Cache\"})})})]})}):0,Y[58]=ea,Y[59]=eo,Y[60]=$):$=Y[60],Y[61]!==Z||Y[62]!==V||Y[63]!==$?(W=(0,A.jsxs)(A.Fragment,{children:[c,Z,U,V,$]}),Y[61]=Z,Y[62]=V,Y[63]=$,Y[64]=W):W=Y[64],W}function rE(e){var t,n,r=(n=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,2)||function(e,t){if(e){if(\"string\"==typeof e)return rC(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return rC(e,t)}}(t,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),o=r[0],a=r[1];return(0,A.jsx)(\"option\",{value:a,children:o},o)}function rj(e){var t,n,r,o,a,i,l,s,c=(0,x.c)(11);return(c[0]!==e?(a=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"children\",\"prefix\"]),r=e.children,o=e.prefix,c[0]=e,c[1]=r,c[2]=o,c[3]=a):(r=c[1],o=c[2],a=c[3]),c[4]!==r||c[5]!==a)?(i=(0,A.jsx)(\"select\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},a),n=n={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),c[4]=r,c[5]=a,c[6]=i):i=c[6],c[7]===Symbol.for(\"react.memo_cache_sentinel\")?(l=(0,A.jsx)(rB,{}),c[7]=l):l=c[7],c[8]!==o||c[9]!==i?(s=(0,A.jsxs)(\"div\",{className:\"select-button\",children:[o,i,l]}),c[8]=o,c[9]=i,c[10]=s):s=c[10],s}function rS(e){var t,n,r,o=(0,x.c)(3);switch(e.theme){case\"system\":return o[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(n9,{}),o[0]=t):t=o[0],t;case\"dark\":return o[1]===Symbol.for(\"react.memo_cache_sentinel\")?(n=(0,A.jsx)(n6,{}),o[1]=n):n=o[1],n;case\"light\":return o[2]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(n3,{}),o[2]=r):r=o[2],r;default:return null}}var rO=eu(r_());function rB(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",\"aria-hidden\":!0,children:(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M14.0607 5.49999L13.5303 6.03032L8.7071 10.8535C8.31658 11.2441 7.68341 11.2441 7.29289 10.8535L2.46966 6.03032L1.93933 5.49999L2.99999 4.43933L3.53032 4.96966L7.99999 9.43933L12.4697 4.96966L13 4.43933L14.0607 5.49999Z\",fill:\"currentColor\"})}),t[0]=e):e=t[0],e}function rP(){var e,t,n=(e=[\"\\n [data-nextjs-issue-feedback-button-group] {\\n display: flex;\\n align-items: center;\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-full);\\n background: var(--color-background-100);\\n box-shadow: var(--shadow-small);\\n }\\n\\n [data-nextjs-issue-feedback-button-group] button {\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n }\\n\\n [data-nextjs-issue-feedback-button-group] button:first-child {\\n padding: 4px 3px 4px 5px;\\n border-radius: var(--rounded-full) 0 0 var(--rounded-full);\\n }\\n\\n [data-nextjs-issue-feedback-button-group] button:last-child {\\n padding: 4px 5px 4px 3px;\\n border-radius: 0 var(--rounded-full) var(--rounded-full) 0;\\n }\\n\\n [data-nextjs-issue-feedback-separator] {\\n width: 1px;\\n height: 100%;\\n background: var(--color-gray-400);\\n }\\n\"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return rP=function(){return n},n}var rI=eu(rP());function rT(){var e,t,n=(e=[\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return rT=function(){return n},n}function rz(){return(0,A.jsx)(\"style\",{children:eu(rT(),\"\\n .nextjs-data-copy-button {\\n color: inherit;\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n }\\n .nextjs-data-copy-button:disabled {\\n background-color: var(--color-gray-100);\\n cursor: not-allowed;\\n }\\n .nextjs-data-copy-button--initial:hover:not(:disabled) {\\n cursor: pointer;\\n }\\n .nextjs-data-copy-button--error:not(:disabled),\\n .nextjs-data-copy-button--error:hover:not(:disabled) {\\n color: var(--color-ansi-red);\\n }\\n .nextjs-data-copy-button--success:not(:disabled) {\\n color: var(--color-ansi-green);\\n }\\n\",'\\n [data-nextjs-call-stack-frame-no-source] {\\n padding: 6px 8px;\\n margin-bottom: 4px;\\n\\n border-radius: var(--rounded-lg);\\n }\\n\\n [data-nextjs-call-stack-frame-no-source]:last-child {\\n margin-bottom: 0;\\n }\\n\\n [data-nextjs-call-stack-frame-ignored=\"true\"] {\\n opacity: 0.6;\\n }\\n\\n [data-nextjs-call-stack-frame] {\\n user-select: text;\\n display: block;\\n box-sizing: border-box;\\n\\n user-select: text;\\n -webkit-user-select: text;\\n -moz-user-select: text;\\n -ms-user-select: text;\\n\\n padding: 6px 8px;\\n\\n border-radius: var(--rounded-lg);\\n }\\n\\n .call-stack-frame-method-name {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n\\n margin-bottom: 4px;\\n font-family: var(--font-stack-monospace);\\n\\n color: var(--color-gray-1000);\\n font-size: var(--size-14);\\n font-weight: 500;\\n line-height: var(--size-20);\\n\\n svg {\\n width: var(--size-16px);\\n height: var(--size-16px);\\n }\\n }\\n\\n .open-in-editor-button, .source-mapping-error-button {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--rounded-full);\\n padding: 4px;\\n color: var(--color-font);\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -2px;\\n }\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n }\\n\\n .call-stack-frame-file-source {\\n color: var(--color-gray-900);\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n }\\n',nk,\"\\n [data-nextjs-environment-name-label] {\\n padding: 2px 6px;\\n margin: 0;\\n border-radius: var(--rounded-md-2);\\n background: var(--color-gray-100);\\n font-weight: 600;\\n font-size: var(--size-12);\\n color: var(--color-gray-900);\\n font-family: var(--font-stack-monospace);\\n line-height: var(--size-20);\\n }\\n\",nh,eQ,nf,tP,\"\\n .error-overlay-bottom-stack-layer {\\n width: 100%;\\n height: var(--stack-layer-height);\\n position: relative;\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-xl);\\n background: var(--color-background-200);\\n transition:\\n translate 350ms var(--timing-swift),\\n box-shadow 350ms var(--timing-swift);\\n }\\n\\n .error-overlay-bottom-stack-layer-1 {\\n width: calc(100% - var(--size-24));\\n }\\n\\n .error-overlay-bottom-stack-layer-2 {\\n width: calc(100% - var(--size-48));\\n z-index: -1;\\n }\\n\\n .error-overlay-bottom-stack {\\n width: 100%;\\n position: absolute;\\n bottom: -1px;\\n height: 0;\\n overflow: visible;\\n }\\n\\n .error-overlay-bottom-stack-stack {\\n --stack-layer-height: 44px;\\n --stack-layer-height-half: calc(var(--stack-layer-height) / 2);\\n --stack-layer-trim: 13px;\\n --shadow: 0px 0.925px 0.925px 0px rgba(0, 0, 0, 0.02),\\n 0px 3.7px 7.4px -3.7px rgba(0, 0, 0, 0.04),\\n 0px 14.8px 22.2px -7.4px rgba(0, 0, 0, 0.06);\\n\\n display: grid;\\n place-items: center center;\\n width: 100%;\\n position: fixed;\\n overflow: hidden;\\n z-index: -1;\\n max-width: var(--next-dialog-max-width);\\n\\n .error-overlay-bottom-stack-layer {\\n grid-area: 1 / 1;\\n /* Hide */\\n translate: 0 calc(var(--stack-layer-height) * -1);\\n }\\n\\n &[data-stack-count='1'],\\n &[data-stack-count='2'] {\\n .error-overlay-bottom-stack-layer-1 {\\n translate: 0\\n calc(var(--stack-layer-height-half) * -1 - var(--stack-layer-trim));\\n }\\n }\\n\\n &[data-stack-count='2'] {\\n .error-overlay-bottom-stack-layer-2 {\\n translate: 0 calc(var(--stack-layer-trim) * -1 * 2);\\n }\\n }\\n\\n /* Only the bottom stack should have the shadow */\\n &[data-stack-count='1'] .error-overlay-bottom-stack-layer-1 {\\n box-shadow: var(--shadow);\\n }\\n\\n &[data-stack-count='2'] {\\n .error-overlay-bottom-stack-layer-2 {\\n box-shadow: var(--shadow);\\n }\\n }\\n }\\n\",\"\\n .error-overlay-pagination {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n gap: 8px;\\n width: fit-content;\\n }\\n\\n .error-overlay-pagination-count {\\n color: var(--color-gray-900);\\n text-align: center;\\n font-size: var(--size-14);\\n font-weight: 500;\\n line-height: var(--size-16);\\n font-variant-numeric: tabular-nums;\\n }\\n\\n .error-overlay-pagination-button {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n\\n width: var(--size-24);\\n height: var(--size-24);\\n background: var(--color-gray-300);\\n flex-shrink: 0;\\n\\n border: none;\\n border-radius: var(--rounded-full);\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n }\\n\\n &:not(:disabled):active {\\n background: var(--color-gray-500);\\n }\\n\\n &:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n }\\n }\\n\\n .error-overlay-pagination-button-icon {\\n color: var(--color-gray-1000);\\n }\\n\",'\\n [data-nextjs-codeframe] {\\n --code-frame-padding: 12px;\\n --code-frame-line-height: var(--size-16);\\n background-color: var(--color-background-200);\\n color: var(--color-gray-1000);\\n text-overflow: ellipsis;\\n border: 1px solid var(--color-gray-400);\\n border-radius: 8px;\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-12);\\n line-height: var(--code-frame-line-height);\\n margin: 8px 0;\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n }\\n\\n .code-frame-link,\\n .code-frame-pre {\\n padding: var(--code-frame-padding);\\n }\\n\\n .code-frame-link svg {\\n flex-shrink: 0;\\n }\\n\\n .code-frame-lines {\\n min-width: max-content;\\n }\\n\\n .code-frame-link [data-text] {\\n text-align: left;\\n margin: auto 6px;\\n }\\n\\n .code-frame-header {\\n width: 100%;\\n transition: background 100ms ease-out;\\n border-radius: 8px 8px 0 0;\\n border-bottom: 1px solid var(--color-gray-400);\\n }\\n\\n [data-with-open-in-editor-link-source-file] {\\n padding: 4px;\\n margin: -4px 0 -4px auto;\\n border-radius: var(--rounded-full);\\n margin-left: auto;\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -2px;\\n }\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n }\\n\\n [data-nextjs-codeframe]::selection,\\n [data-nextjs-codeframe] *::selection {\\n background-color: var(--color-ansi-selection);\\n }\\n\\n [data-nextjs-codeframe] *:not(a) {\\n color: inherit;\\n background-color: transparent;\\n font-family: var(--font-stack-monospace);\\n }\\n\\n [data-nextjs-codeframe-line][data-nextjs-codeframe-line--errored=\"true\"] {\\n position: relative;\\n isolation: isolate;\\n\\n > span { \\n position: relative;\\n z-index: 1;\\n }\\n\\n &::after {\\n content: \"\";\\n width: calc(100% + var(--code-frame-padding) * 2);\\n height: var(--code-frame-line-height);\\n left: calc(-1 * var(--code-frame-padding));\\n background: var(--color-red-200);\\n box-shadow: 2px 0 0 0 var(--color-red-900) inset;\\n position: absolute;\\n }\\n }\\n\\n\\n [data-nextjs-codeframe] > * {\\n margin: 0;\\n }\\n\\n .code-frame-link {\\n display: flex;\\n margin: 0;\\n outline: 0;\\n }\\n .code-frame-link [data-icon=\\'right\\'] {\\n margin-left: auto;\\n }\\n\\n [data-nextjs-codeframe] div > pre {\\n overflow: hidden;\\n display: inline-block;\\n }\\n\\n [data-nextjs-codeframe] svg {\\n color: var(--color-gray-900);\\n }\\n',\"\\n [data-nextjs-terminal]::selection,\\n [data-nextjs-terminal] *::selection {\\n background-color: var(--color-ansi-selection);\\n }\\n\\n [data-nextjs-terminal] * {\\n color: inherit;\\n background-color: transparent;\\n font-family: var(--font-stack-monospace);\\n }\\n\\n [data-nextjs-terminal] > div > p {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n cursor: pointer;\\n margin: 0;\\n }\\n [data-nextjs-terminal] > div > p:hover {\\n text-decoration: underline dotted;\\n }\\n [data-nextjs-terminal] div > pre {\\n overflow: hidden;\\n display: inline-block;\\n }\\n\",\"\\n [data-with-open-in-editor-link] svg {\\n width: auto;\\n height: var(--size-14);\\n margin-left: 8px;\\n }\\n [data-with-open-in-editor-link] {\\n cursor: pointer;\\n }\\n [data-with-open-in-editor-link]:hover {\\n text-decoration: underline dotted;\\n }\\n [data-with-open-in-editor-link-import-trace] {\\n margin-left: 16px;\\n }\\n\",\"\",\"\\n .nextjs-error-with-static {\\n bottom: calc(16px * 4.5);\\n }\\n p.nextjs__container_errors__link {\\n font-size: var(--size-14);\\n }\\n p.nextjs__container_errors__notes {\\n color: var(--color-stack-notes);\\n font-size: var(--size-14);\\n line-height: 1.5;\\n }\\n .nextjs-container-errors-body > h2:not(:first-child) {\\n margin-top: calc(16px + 8px);\\n }\\n .nextjs-container-errors-body > h2 {\\n color: var(--color-title-color);\\n margin-bottom: 8px;\\n font-size: var(--size-20);\\n }\\n .nextjs-toast-errors-parent {\\n cursor: pointer;\\n transition: transform 0.2s ease;\\n }\\n .nextjs-toast-errors-parent:hover {\\n transform: scale(1.1);\\n }\\n .nextjs-toast-errors {\\n display: flex;\\n align-items: center;\\n justify-content: flex-start;\\n }\\n .nextjs-toast-errors > svg {\\n margin-right: 8px;\\n }\\n .nextjs-toast-hide-button {\\n margin-left: 24px;\\n border: none;\\n background: none;\\n color: var(--color-ansi-bright-white);\\n padding: 0;\\n transition: opacity 0.25s ease;\\n opacity: 0.7;\\n }\\n .nextjs-toast-hide-button:hover {\\n opacity: 1;\\n }\\n .nextjs__container_errors__error_title {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin-bottom: 14px;\\n }\\n .error-overlay-notes-container {\\n margin: 8px 2px;\\n }\\n .error-overlay-notes-container p {\\n white-space: pre-wrap;\\n }\\n\",nF,\"\\n .nextjs-container-build-error-version-status {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n gap: 4px;\\n\\n height: var(--size-26);\\n padding: 6px 8px 6px 6px;\\n background: var(--color-background-100);\\n background-clip: padding-box;\\n border: 1px solid var(--color-gray-alpha-400);\\n box-shadow: var(--shadow-small);\\n border-radius: var(--rounded-full);\\n\\n color: var(--color-gray-900);\\n font-size: var(--size-12);\\n font-weight: 500;\\n line-height: var(--size-16);\\n }\\n\\n a.nextjs-container-build-error-version-status {\\n text-decoration: none;\\n color: var(--color-gray-900);\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n\\n &:focus {\\n outline: var(--focus-ring);\\n }\\n }\\n\\n .version-staleness-indicator.fresh {\\n fill: var(--color-green-800);\\n stroke: var(--color-green-300);\\n }\\n .version-staleness-indicator.stale {\\n fill: var(--color-amber-800);\\n stroke: var(--color-amber-300);\\n }\\n .version-staleness-indicator.outdated {\\n fill: var(--color-red-800);\\n stroke: var(--color-red-300);\\n }\\n .version-staleness-indicator.unknown {\\n fill: var(--color-gray-800);\\n stroke: var(--color-gray-300);\\n }\\n\\n .nextjs-container-build-error-version-status > .turbopack-text {\\n background: linear-gradient(\\n to right,\\n var(--color-turbopack-text-red) 0%,\\n var(--color-turbopack-text-blue) 100%\\n );\\n background-clip: text;\\n -webkit-background-clip: text;\\n -webkit-text-fill-color: transparent;\\n }\\n\",\"\\n .dev-tools-info-code {\\n background: var(--color-gray-400);\\n color: var(--color-gray-1000);\\n font-family: var(--font-stack-monospace);\\n padding: 2px 4px;\\n margin: 0;\\n font-size: var(--size-13);\\n white-space: break-spaces;\\n border-radius: var(--rounded-md-2);\\n }\\n\\n .dev-tools-info-code-block-container {\\n padding: 6px;\\n }\\n\\n .dev-tools-info-code-block {\\n position: relative;\\n background: var(--color-background-200);\\n border: 1px solid var(--color-gray-alpha-400);\\n border-radius: var(--rounded-md-2);\\n min-width: 326px;\\n }\\n\\n .dev-tools-info-code-block-pre {\\n margin: 0;\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-12);\\n }\\n\\n .dev-tools-info-copy-button {\\n position: absolute;\\n\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n right: 8px;\\n top: 8px;\\n padding: 4px;\\n height: var(--size-24);\\n width: var(--size-24);\\n border-radius: var(--rounded-md-2);\\n border: 1px solid var(--color-gray-alpha-400);\\n background: var(--color-background-100);\\n }\\n\\n .dev-tools-info-code-block-line {\\n display: block;\\n line-height: 1.5;\\n padding: 0 16px;\\n }\\n\\n .dev-tools-info-code-block-line.dev-tools-info-highlight {\\n border-left: 2px solid var(--color-blue-900);\\n background: var(--color-blue-400);\\n }\\n\\n .dev-tools-info-code-block-json-key {\\n color: var(--color-syntax-keyword);\\n }\\n\\n .dev-tools-info-code-block-json-value {\\n color: var(--color-syntax-link);\\n }\\n\",\"\",rO,'\\n .nextjs-scroll-fader {\\n --blur: 1px;\\n --stop: 25%;\\n --height: 150px;\\n --color-bg: var(--color-background-100);\\n position: absolute;\\n pointer-events: none;\\n user-select: none;\\n width: 100%;\\n height: var(--height);\\n left: 0;\\n backdrop-filter: blur(var(--blur));\\n\\n &[data-side=\"top\"] {\\n top: 0;\\n background: linear-gradient(to top, transparent, var(--color-bg));\\n mask-image: linear-gradient(to bottom, var(--color-bg) var(--stop), transparent);\\n }\\n }\\n',rI,rf)})}function rD(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function rL(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return rD(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return rD(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rN(e,t){var n,r,o,a,i=(0,x.c)(10),l=void 0!==e&&e;i[0]!==t?(n=void 0===t?{}:t,i[0]=t,i[1]=n):n=i[1];var s=n,c=rL((0,w.useState)(l),2),u=c[0],d=c[1],f=rL((0,w.useState)(!1),2),p=f[0],h=f[1],m=s.enterDelay,g=s.exitDelay,y=void 0===m?1:m,v=void 0===g?0:g;return i[2]!==l||i[3]!==y||i[4]!==v?(r=function(){var e,t;return l?(d(!0),y<=0?h(!0):e=setTimeout(function(){h(!0)},y)):(h(!1),v<=0?d(!1):t=setTimeout(function(){d(!1)},v)),function(){clearTimeout(e),clearTimeout(t)}},o=[l,y,v],i[2]=l,i[3]=y,i[4]=v,i[5]=r,i[6]=o):(r=i[5],o=i[6]),(0,w.useEffect)(r,o),i[7]!==u||i[8]!==p?(a={mounted:u,rendered:p},i[7]=u,i[8]=p,i[9]=a):a=i[9],a}function rR(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function rM(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function rZ(e){var t,n,r,o,a,i,l,s=(0,x.c)(18),c=e.state,u=e.dispatch,d=e.getSquashedHydrationErrorDetails,f=e.runtimeErrors,p=e.errorCount,h=!!false;s[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t={exitDelay:200},s[0]=t):t=s[0];var m=rN(c.isErrorOverlayOpen,t),g=m.mounted,y=m.rendered;s[1]!==p||s[2]!==y||s[3]!==c.versionInfo?(n={rendered:y,transitionDurationMs:200,isTurbopack:h,versionInfo:c.versionInfo,errorCount:p},s[1]=p,s[2]=y,s[3]=c.versionInfo,s[4]=n):n=s[4];var v=n;return null!==c.buildError?(s[5]!==v||s[6]!==c.buildError?(r=(0,A.jsx)(nb,rM(rR({},v),{message:c.buildError,rendered:!0})),s[5]=v,s[6]=c.buildError,s[7]=r):r=s[7],r):f.length?g?(s[10]!==u?(i=function(){u({type:q})},s[10]=u,s[11]=i):i=s[11],s[12]!==v||s[13]!==d||s[14]!==f||s[15]!==c.debugInfo||s[16]!==i?(l=(0,A.jsx)(nK,rM(rR({},v),{debugInfo:c.debugInfo,getSquashedHydrationErrorDetails:d,runtimeErrors:f,onClose:i})),s[12]=v,s[13]=d,s[14]=f,s[15]=c.debugInfo,s[16]=i,s[17]=l):l=s[17],l):(s[9]===Symbol.for(\"react.memo_cache_sentinel\")?(a=(0,A.jsx)(w.Suspense,{}),s[9]=a):a=s[9],a):(s[8]===Symbol.for(\"react.memo_cache_sentinel\")?(o=(0,A.jsx)(w.Suspense,{}),s[8]=o):o=s[8],o)}function rU(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function rF(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rq(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){rF(e,t,n[t])})}return e}function rH(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return rU(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return rU(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var rV=function(e){var t,n,r=(0,x.c)(4);return e.state.buildError?(r[0]!==e?(t=(0,A.jsx)(rW,rq({},e)),r[0]=e,r[1]=t):t=r[1],t):(r[2]!==e?(n=(0,A.jsx)(r$,rq({},e)),r[2]=e,r[3]=n):n=r[3],n)},r$=function(e){var t,n,r,o,a,i=(0,x.c)(12),l=e.children,s=e.state,c=e.isAppDir,u=s.errors;i[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t={},i[0]=t):t=i[0];var d=rH((0,w.useState)(t),2),f=d[0],p=d[1];if(i[1]!==u||i[2]!==f){for(var h=[],m=null,g=0;g<u.length;++g){var y=u[g],v=y.id;if(v in f){h.push(f[v]);continue}m=y;break}n=[h,m],i[1]=u,i[2]=f,i[3]=n}else n=i[3];var b=rH(n,2),A=b[0],C=b[1];i[4]!==c||i[5]!==C?(r=function(){if(null!=C){var e,t,n=!0;return(e=C,t=c,nD(function(){var n,r,o;return nR(this,function(a){switch(a.label){case 0:var i,l;if(n={id:e.id,runtime:!0,error:e.error,type:e.type},!(\"use\"in w))return[3,1];return[2,nN(nL({},n),{frames:(l=(i=function(){return nD(function(){return nR(this,function(n){switch(n.label){case 0:return[4,eS(e.frames,nT(e.error),t)];case 1:return[2,n.sent()]}})})()})(),function(){return l})})];case 1:return r=[nL({},n)],o={},[4,eS(e.frames,nT(e.error),t)];case 2:return[2,nN.apply(void 0,r.concat([(o.frames=a.sent(),o)]))];case 3:return[2]}})})()).then(function(e){n&&p(function(t){var n,r;return n=rq({},t),r=null!=(r=rF({},e.id,e))?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))}),n})}),function(){n=!1}}},o=[C,c],i[4]=c,i[5]=C,i[6]=r,i[7]=o):(r=i[6],o=i[7]),(0,w.useEffect)(r,o);var _=u.length;return i[8]!==l||i[9]!==A||i[10]!==_?(a=l({runtimeErrors:A,totalErrorCount:_}),i[8]=l,i[9]=A,i[10]=_,i[11]=a):a=i[11],a},rW=function(e){return(0,e.children)({runtimeErrors:[],totalErrorCount:1})};function rY(){var e,t,n=(0,x.c)(4),r=dl(),o=r.shadowRoot,a=r.state;return n[0]!==o||n[1]!==a.scale?(e=function(){(null==o?void 0:o.host)&&o.host.style.setProperty(\"--nextjs-dev-tools-scale\",String(a.scale||1))},t=[o,a.scale],n[0]=o,n[1]=a.scale,n[2]=e,n[3]=t):(e=n[2],t=n[3]),(0,w.useLayoutEffect)(e,t),null}var rK=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/devtools-indicator/devtools-indicator.css\"),rX={};function rG(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function rQ(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function rJ(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return rQ(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return rQ(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function r0(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function r1(e){var t,n,r,o,a=(0,x.c)(3);return(a[0]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.08889 11.8384L2.62486 12.3024L1.69678 11.3744L2.16082 10.9103L6.07178 6.99937L2.16082 3.08841L1.69678 2.62437L2.62486 1.69629L3.08889 2.16033L6.99986 6.07129L10.9108 2.16033L11.3749 1.69629L12.3029 2.62437L11.8389 3.08841L7.92793 6.99937L11.8389 10.9103L12.3029 11.3744L11.3749 12.3024L10.9108 11.8384L6.99986 7.92744L3.08889 11.8384Z\",fill:\"currentColor\"}),a[0]=r):r=a[0],a[1]!==e)?(o=(0,A.jsx)(\"svg\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"12\",height:\"12\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),n=n={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),a[1]=e,a[2]=o):o=a[2],o}function r2(e){var t,n,r,o,a=(0,x.c)(3);return(a[0]===Symbol.for(\"react.memo_cache_sentinel\")?(r=(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.98071 1.125L1.125 3.98071L1.125 8.01929L3.98071 10.875H8.01929L10.875 8.01929V3.98071L8.01929 1.125H3.98071ZM3.82538 0C3.62647 0 3.4357 0.0790176 3.29505 0.21967L0.21967 3.29505C0.0790176 3.4357 0 3.62647 0 3.82538V8.17462C0 8.37353 0.0790178 8.5643 0.21967 8.70495L3.29505 11.7803C3.4357 11.921 3.62647 12 3.82538 12H8.17462C8.37353 12 8.5643 11.921 8.70495 11.7803L11.7803 8.70495C11.921 8.5643 12 8.37353 12 8.17462V3.82538C12 3.62647 11.921 3.4357 11.7803 3.29505L8.70495 0.21967C8.5643 0.0790177 8.37353 0 8.17462 0H3.82538ZM6.5625 2.8125V3.375V6V6.5625H5.4375V6V3.375V2.8125H6.5625ZM6 9C6.41421 9 6.75 8.66421 6.75 8.25C6.75 7.83579 6.41421 7.5 6 7.5C5.58579 7.5 5.25 7.83579 5.25 8.25C5.25 8.66421 5.58579 9 6 9Z\",fill:\"currentColor\"}),a[0]=r):r=a[0],a[1]!==e)?(o=(0,A.jsx)(\"svg\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"12\",height:\"12\",viewBox:\"0 0 12 12\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),n=n={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),a[1]=e,a[2]=o):o=a[2],o}rX.styleTagTransform=m(),rX.setAttributes=d(),rX.insert=c(),rX.domAPI=l(),rX.insertStyleElement=p(),a()(rK.Z,rX),rK.Z&&rK.Z.locals&&rK.Z.locals;var r4=(0,w.createContext)(null),r5=function(){return(0,w.useContext)(r4)};function r3(e){return ow+36/e.scale+9}function r6(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function r9(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function r8(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function r7(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function oe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return r6(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return r6(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function ot(){var e,t,n=(e=[\"\\n [data-next-badge-root] {\\n --timing: cubic-bezier(0.23, 0.88, 0.26, 0.92);\\n --duration-long: 250ms;\\n --color-outer-border: #171717;\\n --color-inner-border: hsla(0, 0%, 100%, 0.14);\\n --color-hover-alpha-subtle: hsla(0, 0%, 100%, 0.13);\\n --color-hover-alpha-error: hsla(0, 0%, 100%, 0.2);\\n --color-hover-alpha-error-2: hsla(0, 0%, 100%, 0.25);\\n --mark-size: calc(var(--size) - var(--size-2) * 2);\\n\\n --focus-color: var(--color-blue-800);\\n --focus-ring: 2px solid var(--focus-color);\\n\\n &:has([data-next-badge][data-error='true']) {\\n --focus-color: #fff;\\n }\\n }\\n\\n [data-disabled-icon] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding-right: 4px;\\n }\\n\\n [data-next-badge] {\\n width: var(--size);\\n height: var(--size);\\n display: flex;\\n align-items: center;\\n position: relative;\\n background: rgba(0, 0, 0, 0.8);\\n box-shadow:\\n 0 0 0 1px var(--color-outer-border),\\n inset 0 0 0 1px var(--color-inner-border),\\n 0px 16px 32px -8px rgba(0, 0, 0, 0.24);\\n backdrop-filter: blur(48px);\\n border-radius: var(--rounded-full);\\n user-select: none;\\n cursor: pointer;\\n scale: 1;\\n overflow: hidden;\\n will-change: scale, box-shadow, width, background;\\n transition:\\n scale var(--duration-short) var(--timing),\\n width var(--duration-long) var(--timing),\\n box-shadow var(--duration-long) var(--timing),\\n background var(--duration-short) ease;\\n\\n &:active[data-error='false'] {\\n scale: 0.95;\\n }\\n\\n &[data-animate='true']:not(:hover) {\\n scale: 1.02;\\n }\\n\\n &[data-error='false']:has([data-next-mark]:focus-visible) {\\n outline: var(--focus-ring);\\n outline-offset: 3px;\\n }\\n\\n &[data-error='true'] {\\n background: #ca2a30;\\n --color-inner-border: #e5484d;\\n\\n [data-next-mark] {\\n background: var(--color-hover-alpha-error);\\n outline-offset: 0px;\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n &:hover {\\n background: var(--color-hover-alpha-error-2);\\n }\\n }\\n }\\n\\n &[data-error-expanded='false'][data-error='true'] ~ [data-dot] {\\n scale: 1;\\n }\\n\\n > div {\\n display: flex;\\n }\\n }\\n\\n [data-issues-collapse]:focus-visible {\\n outline: var(--focus-ring);\\n }\\n\\n [data-issues]:has([data-issues-open]:focus-visible) {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n [data-dot] {\\n content: '';\\n width: var(--size-8);\\n height: var(--size-8);\\n background: #fff;\\n box-shadow: 0 0 0 1px var(--color-outer-border);\\n border-radius: 50%;\\n position: absolute;\\n top: 2px;\\n right: 0px;\\n scale: 0;\\n pointer-events: none;\\n transition: scale 200ms var(--timing);\\n transition-delay: var(--duration-short);\\n }\\n\\n [data-issues] {\\n --padding-left: 8px;\\n display: flex;\\n gap: 2px;\\n align-items: center;\\n padding-left: 8px;\\n padding-right: 8px;\\n height: var(--size-32);\\n margin-right: 2px;\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-short) ease;\\n\\n &:has([data-issues-open]:hover) {\\n background: var(--color-hover-alpha-error);\\n }\\n\\n &:has([data-issues-collapse]) {\\n padding-right: calc(var(--padding-left) / 2);\\n }\\n\\n [data-cross] {\\n translate: 0px -1px;\\n }\\n }\\n\\n [data-issues-open] {\\n font-size: var(--size-13);\\n color: white;\\n width: fit-content;\\n height: 100%;\\n display: flex;\\n gap: 2px;\\n align-items: center;\\n margin: 0;\\n line-height: var(--size-36);\\n font-weight: 500;\\n z-index: 2;\\n white-space: nowrap;\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n }\\n\\n [data-issues-collapse] {\\n width: var(--size-24);\\n height: var(--size-24);\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-short) ease;\\n\\n &:hover {\\n background: var(--color-hover-alpha-error);\\n }\\n }\\n\\n [data-cross] {\\n color: #fff;\\n width: var(--size-12);\\n height: var(--size-12);\\n }\\n\\n [data-next-mark] {\\n width: var(--mark-size);\\n height: var(--mark-size);\\n margin: 0 2px;\\n display: flex;\\n align-items: center;\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-long) var(--timing);\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n\\n &:hover {\\n background: var(--color-hover-alpha-subtle);\\n }\\n\\n svg {\\n flex-shrink: 0;\\n width: var(--size-40);\\n height: var(--size-40);\\n }\\n }\\n\\n [data-issues-count-animation] {\\n display: grid;\\n place-items: center center;\\n font-variant-numeric: tabular-nums;\\n\\n &[data-animate='false'] {\\n [data-issues-count-exit],\\n [data-issues-count-enter] {\\n animation-duration: 0ms;\\n }\\n }\\n\\n > * {\\n grid-area: 1 / 1;\\n }\\n\\n [data-issues-count-exit] {\\n animation: fadeOut 300ms var(--timing) forwards;\\n }\\n\\n [data-issues-count-enter] {\\n animation: fadeIn 300ms var(--timing) forwards;\\n }\\n }\\n\\n [data-issues-count-plural] {\\n display: inline-block;\\n &[data-animate='true'] {\\n animation: fadeIn 300ms var(--timing) forwards;\\n }\\n }\\n\\n .path0 {\\n animation: draw0 1.5s ease-in-out infinite;\\n }\\n\\n .path1 {\\n animation: draw1 1.5s ease-out infinite;\\n animation-delay: 0.3s;\\n }\\n\\n .paused {\\n stroke-dashoffset: 0;\\n }\\n\\n @keyframes fadeIn {\\n 0% {\\n opacity: 0;\\n filter: blur(2px);\\n transform: translateY(8px);\\n }\\n 100% {\\n opacity: 1;\\n filter: blur(0px);\\n transform: translateY(0);\\n }\\n }\\n\\n @keyframes fadeOut {\\n 0% {\\n opacity: 1;\\n filter: blur(0px);\\n transform: translateY(0);\\n }\\n 100% {\\n opacity: 0;\\n transform: translateY(-12px);\\n filter: blur(2px);\\n }\\n }\\n\\n @keyframes draw0 {\\n 0%,\\n 25% {\\n stroke-dashoffset: -29.6;\\n }\\n 25%,\\n 50% {\\n stroke-dashoffset: 0;\\n }\\n 50%,\\n 75% {\\n stroke-dashoffset: 0;\\n }\\n 75%,\\n 100% {\\n stroke-dashoffset: 29.6;\\n }\\n }\\n\\n @keyframes draw1 {\\n 0%,\\n 20% {\\n stroke-dashoffset: -11.6;\\n }\\n 20%,\\n 50% {\\n stroke-dashoffset: 0;\\n }\\n 50%,\\n 75% {\\n stroke-dashoffset: 0;\\n }\\n 75%,\\n 100% {\\n stroke-dashoffset: 11.6;\\n }\\n }\\n\\n @media (prefers-reduced-motion) {\\n [data-issues-count-exit],\\n [data-issues-count-enter],\\n [data-issues-count-plural] {\\n animation-duration: 0ms !important;\\n }\\n }\\n \"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return ot=function(){return n},n}function on(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h,m,g,y,v,b,C,_,k,E,j,S,O,B,P,I,T,z,D,L,N,R,M,Z,U,H,V,$,W,Y=(0,x.c)(40);Y[0]!==e?(D=r7(e,[\"onTriggerClick\"]),L=e.onTriggerClick,Y[0]=e,Y[1]=D,Y[2]=L):(D=Y[1],L=Y[2]);var K=dl(),X=K.state,G=K.dispatch,Q=u3().totalErrorCount,J=36/X.scale,ee=r5(),et=ee.panel,en=ee.triggerRef,er=ee.setPanel,eo=\"panel-selector\"===et,ea=Q>0,ei=oe((0,w.useState)(ea),2),el=ei[0],es=ei[1],ec=oe((0,w.useState)(ea),2),ed=ec[0],ef=ec[1];ed!==ea&&(ef(ea),es(ea));var ep=oe((0,w.useState)(!1),2),eh=ep[0],em=ep[1],eg=(t=Q,n=150,a=(0,x.c)(4),i=n,l=(0,w.useRef)(null),d=(s=(0,w.useState)(!1),c=2,u=function(e){if(Array.isArray(e))return e}(s)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(s,2)||function(e,t){if(e){if(\"string\"==typeof e)return rG(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return rG(e,t)}}(s,c)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())[0],f=u[1],a[0]!==i||a[1]!==t?(r=function(){if(t>0){var e=l.current?Date.now()-l.current:-1;if(l.current=Date.now(),!(e<=i)){f(!0);var n=window.setTimeout(function(){f(!1)},i);return function(){clearTimeout(n)}}}},o=[t,i],a[0]=i,a[1]=t,a[2]=r,a[3]=o):(r=a[2],o=a[3]),(0,w.useEffect)(r,o),d),ey=(0,w.useRef)(null),ev=(p=ey,g=(0,x.c)(4),v=(y=rJ((0,w.useState)(0),2))[0],b=y[1],g[0]!==p.current?(h=function(){var e=p.current;if(e){var t=new ResizeObserver(function(e){b(rJ(e,1)[0].contentRect.width)});return t.observe(e),function(){return t.disconnect()}}},g[0]=p.current,g[1]=h):h=g[1],g[2]!==p?(m=[p],g[2]=p,g[3]=m):m=g[3],(0,w.useEffect)(h,m),v),eb=(C=X.buildingIndicator||X.renderingIndicator,E=(0,x.c)(4),j=750,P=(S=(0,w.useState)(!1),O=2,B=function(e){if(Array.isArray(e))return e}(S)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(S,2)||function(e,t){if(e){if(\"string\"==typeof e)return r0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return r0(e,t)}}(S,O)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())[0],I=B[1],T=(0,w.useRef)(null),z=(0,w.useRef)(null),E[0]!==j||E[1]!==C?(_=function(){if(z.current&&(clearTimeout(z.current),z.current=null),C)null===T.current&&(T.current=Date.now()),I(!0);else if(null===T.current)I(!1);else{var e=Date.now()-T.current,t=j*Math.ceil(e/j)-e;t>0?z.current=setTimeout(function(){I(!1),T.current=null},t):(I(!1),T.current=null)}return function(){z.current&&clearTimeout(z.current)}},k=[C,j],E[0]=j,E[1]=C,E[2]=_,E[3]=k):(_=E[2],k=E[3]),(0,w.useEffect)(_,k),P),eA=el||X.disableDevIndicator,ex=0===ev?\"auto\":ev,ew=\"\".concat(J,\"px\"),eC=X.disableDevIndicator&&(!ea||eh)?\"none\":\"block\";Y[3]!==ew||Y[4]!==eC?(N={\"--size\":ew,\"--duration-short\":\"\".concat(150,\"ms\"),display:eC},Y[3]=ew,Y[4]=eC,Y[5]=N):N=Y[5];var e_=N;return Y[6]===Symbol.for(\"react.memo_cache_sentinel\")?(R=(0,A.jsx)(\"style\",{children:eu(ot())}),Y[6]=R):R=Y[6],Y[7]!==ex?(M={width:ex},Y[7]=ex,Y[8]=M):M=Y[8],Y[9]!==D||Y[10]!==eb||Y[11]!==eo||Y[12]!==L||Y[13]!==X.buildingIndicator||Y[14]!==X.disableDevIndicator||Y[15]!==en?(Z=!X.disableDevIndicator&&(0,A.jsx)(\"button\",r8(r9({id:\"next-logo\",ref:en,\"data-next-mark\":!0,\"data-next-mark-loading\":eb,onClick:L,disabled:X.disableDevIndicator,\"aria-haspopup\":\"menu\",\"aria-expanded\":eo,\"aria-controls\":\"nextjs-dev-tools-menu\",\"aria-label\":\"\".concat(eo?\"Close\":\"Open\",\" Next.js Dev Tools\"),\"data-nextjs-dev-tools-button\":!0},D),{children:(0,A.jsx)(oo,{isLoading:eb,isDevBuilding:X.buildingIndicator})})),Y[9]=D,Y[10]=eb,Y[11]=eo,Y[12]=L,Y[13]=X.buildingIndicator,Y[14]=X.disableDevIndicator,Y[15]=en,Y[16]=Z):Z=Y[16],Y[17]!==G||Y[18]!==eA||Y[19]!==eg||Y[20]!==er||Y[21]!==X.buildError||Y[22]!==X.disableDevIndicator||Y[23]!==X.isErrorOverlayOpen||Y[24]!==Q||Y[25]!==en?(U=eA&&(0,A.jsxs)(\"div\",{\"data-issues\":!0,children:[(0,A.jsxs)(\"button\",{\"data-issues-open\":!0,\"aria-label\":\"Open issues overlay\",onClick:function(){if(X.isErrorOverlayOpen)return void G({type:q});G({type:F}),er(null)},children:[X.disableDevIndicator&&(0,A.jsx)(\"div\",{\"data-disabled-icon\":!0,children:(0,A.jsx)(r2,{})}),(0,A.jsx)(or,{animate:eg,\"data-issues-count-animation\":!0,children:Q},Q),\" \",(0,A.jsxs)(\"div\",{children:[\"Issue\",Q>1&&(0,A.jsx)(\"span\",{\"aria-hidden\":!0,\"data-issues-count-plural\":!0,\"data-animate\":eg&&2===Q,children:\"s\"})]})]}),!X.buildError&&(0,A.jsx)(\"button\",{\"data-issues-collapse\":!0,\"aria-label\":\"Collapse issues badge\",onClick:function(){var e;X.disableDevIndicator?em(!0):es(!1),null==(e=en.current)||e.focus()},children:(0,A.jsx)(r1,{\"data-cross\":!0})})]}),Y[17]=G,Y[18]=eA,Y[19]=eg,Y[20]=er,Y[21]=X.buildError,Y[22]=X.disableDevIndicator,Y[23]=X.isErrorOverlayOpen,Y[24]=Q,Y[25]=en,Y[26]=U):U=Y[26],Y[27]!==Z||Y[28]!==U?(H=(0,A.jsxs)(\"div\",{ref:ey,children:[Z,U]}),Y[27]=Z,Y[28]=U,Y[29]=H):H=Y[29],Y[30]!==ea||Y[31]!==eA||Y[32]!==eg||Y[33]!==M||Y[34]!==H?(V=(0,A.jsx)(\"div\",{\"data-next-badge\":!0,\"data-error\":ea,\"data-error-expanded\":eA,\"data-animate\":eg,style:M,children:H}),Y[30]=ea,Y[31]=eA,Y[32]=eg,Y[33]=M,Y[34]=H,Y[35]=V):V=Y[35],Y[36]===Symbol.for(\"react.memo_cache_sentinel\")?($=(0,A.jsx)(\"div\",{\"aria-hidden\":!0,\"data-dot\":!0}),Y[36]=$):$=Y[36],Y[37]!==V||Y[38]!==e_?(W=(0,A.jsxs)(\"div\",{\"data-next-badge-root\":!0,style:e_,children:[R,V,$]}),Y[37]=V,Y[38]=e_,Y[39]=W):W=Y[39],W}function or(e){var t,n,r,o,a,i,l=(0,x.c)(13);l[0]!==e?(n=r7(e,[\"children\",\"animate\"]),t=e.children,r=e.animate,l[0]=e,l[1]=t,l[2]=n,l[3]=r):(t=l[1],n=l[2],r=l[3]);var s=void 0===r||r,c=t-1;return l[4]!==c?(o=(0,A.jsx)(\"div\",{\"aria-hidden\":!0,\"data-issues-count-exit\":!0,children:c}),l[4]=c,l[5]=o):o=l[5],l[6]!==t?(a=(0,A.jsx)(\"div\",{\"data-issues-count\":!0,\"data-issues-count-enter\":!0,children:t}),l[6]=t,l[7]=a):a=l[7],l[8]!==s||l[9]!==n||l[10]!==o||l[11]!==a?(i=(0,A.jsxs)(\"div\",r8(r9({},n),{\"data-animate\":s,children:[o,a]})),l[8]=s,l[9]=n,l[10]=o,l[11]=a,l[12]=i):i=l[12],i}function oo(e){var t,n,r,o,a,i,l,s,c=(0,x.c)(19),u=e.isLoading,d=e.isDevBuilding?\"rgba(255,255,255,0.7)\":\"white\",f=u?\"path0\":\"paused\";c[0]!==f?(t=(0,A.jsx)(\"path\",{className:f,d:\"M13.3 15.2 L2.34 1 V12.6\",fill:\"none\",stroke:\"url(#next_logo_paint0_linear_1357_10853)\",strokeWidth:\"1.86\",mask:\"url(#next_logo_mask0)\",strokeDasharray:\"29.6\",strokeDashoffset:\"29.6\"}),c[0]=f,c[1]=t):t=c[1];var p=u?\"path1\":\"paused\";return c[2]!==p?(n=(0,A.jsx)(\"path\",{className:p,d:\"M11.825 1.5 V13.1\",strokeWidth:\"1.86\",stroke:\"url(#next_logo_paint1_linear_1357_10853)\",strokeDasharray:\"11.6\",strokeDashoffset:\"11.6\"}),c[2]=p,c[3]=n):n=c[3],c[4]!==t||c[5]!==n?(r=(0,A.jsxs)(\"g\",{transform:\"translate(8.5, 13)\",children:[t,n]}),c[4]=t,c[5]=n,c[6]=r):r=c[6],c[7]!==d?(o=(0,A.jsxs)(\"linearGradient\",{id:\"next_logo_paint0_linear_1357_10853\",x1:\"9.95555\",y1:\"11.1226\",x2:\"15.4778\",y2:\"17.9671\",gradientUnits:\"userSpaceOnUse\",children:[(0,A.jsx)(\"stop\",{stopColor:d}),(0,A.jsx)(\"stop\",{offset:\"0.604072\",stopColor:d,stopOpacity:\"0\"}),(0,A.jsx)(\"stop\",{offset:\"1\",stopColor:d,stopOpacity:\"0\"})]}),c[7]=d,c[8]=o):o=c[8],c[9]!==d?(a=(0,A.jsxs)(\"linearGradient\",{id:\"next_logo_paint1_linear_1357_10853\",x1:\"11.8222\",y1:\"1.40039\",x2:\"11.791\",y2:\"9.62542\",gradientUnits:\"userSpaceOnUse\",children:[(0,A.jsx)(\"stop\",{stopColor:d}),(0,A.jsx)(\"stop\",{offset:\"1\",stopColor:d,stopOpacity:\"0\"})]}),c[9]=d,c[10]=a):a=c[10],c[11]===Symbol.for(\"react.memo_cache_sentinel\")?(i=(0,A.jsxs)(\"mask\",{id:\"next_logo_mask0\",children:[(0,A.jsx)(\"rect\",{width:\"100%\",height:\"100%\",fill:\"white\"}),(0,A.jsx)(\"rect\",{width:\"5\",height:\"1.5\",fill:\"black\"})]}),c[11]=i):i=c[11],c[12]!==o||c[13]!==a?(l=(0,A.jsxs)(\"defs\",{children:[o,a,i]}),c[12]=o,c[13]=a,c[14]=l):l=c[14],c[15]!==u||c[16]!==r||c[17]!==l?(s=(0,A.jsxs)(\"svg\",{width:\"40\",height:\"40\",viewBox:\"0 0 40 40\",fill:\"none\",\"data-next-mark-loading\":u,children:[r,l]}),c[15]=u,c[16]=r,c[17]=l,c[18]=s):s=c[18],s}var oa=w.forwardRef(function(e,t){var n,r,o,a,i,l,s,c,u,d=(0,x.c)(15);return(d[0]!==e?(l=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"onClick\",\"children\",\"className\"]),i=e.onClick,o=e.children,a=e.className,d[0]=e,d[1]=o,d[2]=a,d[3]=i,d[4]=l):(o=d[1],a=d[2],i=d[3],l=d[4]),d[5]!==i?(s=function(e){return e.target.closest(\"a\")||e.preventDefault(),null==i?void 0:i()},d[5]=i,d[6]=s):s=d[6],d[7]!==a?(c=eJ(\"nextjs-toast\",a),d[7]=a,d[8]=c):c=d[8],d[9]!==o||d[10]!==l||d[11]!==t||d[12]!==s||d[13]!==c)?(u=(0,A.jsx)(\"div\",(n=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},l),r=r={ref:t,onClick:s,className:c,children:o},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))}),n)),d[9]=o,d[10]=l,d[11]=t,d[12]=s,d[13]=c,d[14]=u):u=d[14],u});function oi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}var ol=(0,w.createContext)(null);function os(e){var t=e.children,n=e.disabled,r=void 0!==n&&n,o=(0,w.useRef)(new Set),a=(0,w.useCallback)(function(e){o.current.add(e)},[]),i=(0,w.useCallback)(function(e){o.current.delete(e)},[]),l=(0,w.useMemo)(function(){return{register:a,unregister:i,handles:o.current,disabled:r}},[a,i,r]);return(0,A.jsx)(ol.Provider,{value:l,children:t})}function oc(){return(0,w.useContext)(ol)}function ou(e){var t,n,r,o,a,i,l,s,c,u,d,f=(0,x.c)(19);f[0]!==e?(o=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"children\",\"ref\"]),r=e.children,a=e.ref,f[0]=e,f[1]=r,f[2]=o,f[3]=a):(r=f[1],o=f[2],a=f[3]);var p=(0,w.useRef)(null),h=oc();f[4]!==a?(i=function(e){if(p.current=null!=e?e:null,\"function\"==typeof a)a(e);else{var t;a&&(void 0===a?\"undefined\":(t=a)&&\"undefined\"!=typeof Symbol&&t.constructor===Symbol?\"symbol\":typeof t)==\"object\"&&(a.current=e)}},f[4]=a,f[5]=i):i=f[5];var m=i;f[6]!==h?(l=function(){if(h&&p.current&&!h.disabled){var e=p.current;return h.register(e),function(){return h.unregister(e)}}},s=[h],f[6]=h,f[7]=l,f[8]=s):(l=f[7],s=f[8]),(0,w.useEffect)(l,s);var g=(null==h?void 0:h.disabled)?\"default\":\"grab\";return(f[9]!==o.style?(c=o.style||{},f[9]=o.style,f[10]=c):c=f[10],f[11]!==g||f[12]!==c?(u=oi({cursor:g},c),f[11]=g,f[12]=c,f[13]=u):u=f[13],f[14]!==r||f[15]!==o||f[16]!==m||f[17]!==u)?(d=(0,A.jsx)(\"div\",(t=oi({ref:m},o),n=n={style:u,children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),f[14]=r,f[15]=o,f[16]=m,f[17]=u,f[18]=d):d=f[18],d}function od(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function of(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function op(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function oh(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function om(e){return function(e){if(Array.isArray(e))return od(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||og(e)||function(){throw TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function og(e,t){if(e){if(\"string\"==typeof e)return od(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return od(e,t)}}function oy(e){var t,n,r,o,a,i,l,s,c,u,d,f,p=(0,x.c)(18);p[0]!==e?(s=oh(e,[\"children\",\"padding\",\"position\",\"setPosition\",\"onDragStart\",\"dragHandleSelector\",\"disableDrag\",\"avoidZone\"]),r=e.children,l=e.padding,o=e.position,c=e.setPosition,i=e.onDragStart,a=e.dragHandleSelector,u=e.disableDrag,n=e.avoidZone,p[0]=e,p[1]=n,p[2]=r,p[3]=o,p[4]=a,p[5]=i,p[6]=l,p[7]=s,p[8]=c,p[9]=u):(n=p[1],r=p[2],o=p[3],a=p[4],i=p[5],l=p[6],s=p[7],c=p[8],u=p[9]);var h=function(e){var t=(0,w.useRef)(null),n=(0,w.useRef)({state:\"idle\"}),r=(0,w.useRef)(null),o=(0,w.useRef)({x:0,y:0}),a=(0,w.useRef)({x:0,y:0}),i=(0,w.useRef)(0),l=(0,w.useRef)([]),s=(0,w.useCallback)(function(){var e,o;\"drag\"===n.current.state&&(null==(o=t.current)||o.releasePointerCapture(n.current.pointerId)),n.current=\"drag\"===n.current.state?{state:\"drag-end\"}:{state:\"idle\"},null!==r.current&&(r.current(),r.current=null),l.current=[],null==(e=t.current)||e.classList.remove(\"dev-tools-grabbing\"),document.body.style.removeProperty(\"user-select\"),document.body.style.removeProperty(\"-webkit-user-select\")},[]);function c(e){t.current&&(a.current=e,t.current.style.translate=\"\".concat(e.x,\"px \").concat(e.y,\"px\"))}function u(n){var r=t.current;null!==r&&(r.style.transition=\"translate 491.22ms var(--timing-bounce)\",r.addEventListener(\"transitionend\",function t(o){if(\"translate\"===o.propertyName){var i;null==(i=e.onAnimationEnd)||i.call(e,n),a.current={x:0,y:0},r.style.transition=\"\",r.removeEventListener(\"transitionend\",t)}}),c(n.translation))}function d(e){if(\"drag-end\"===n.current.state){var r;e.preventDefault(),e.stopPropagation(),n.current={state:\"idle\"},null==(r=t.current)||r.removeEventListener(\"click\",d)}}function f(r){if(\"press\"===n.current.state){var s,u,d,f,p=r.clientX-o.current.x,h=r.clientY-o.current.y;Math.sqrt(p*p+h*h)>=e.threshold&&(n.current={state:\"drag\",pointerId:r.pointerId},null==(u=t.current)||u.setPointerCapture(r.pointerId),null==(d=t.current)||d.classList.add(\"dev-tools-grabbing\"),document.body.style.userSelect=\"none\",document.body.style.webkitUserSelect=\"none\",null==(f=e.onDragStart)||f.call(e))}if(\"drag\"===n.current.state){var m={x:r.clientX,y:r.clientY},g=m.x-o.current.x,y=m.y-o.current.y;o.current=m,c({x:a.current.x+g,y:a.current.y+y});var v=Date.now();v-i.current>=10&&(l.current=om(l.current.slice(-5)).concat([{position:m,timestamp:v}])),i.current=v,null==(s=e.onDrag)||s.call(e,a.current)}}function p(){var t,n=function(e){if(e.length<2)return{x:0,y:0};var t=e[0],n=e[e.length-1],r=n.timestamp-t.timestamp;return 0===r?{x:0,y:0}:{x:1e3*((n.position.x-t.position.x)/r),y:1e3*((n.position.y-t.position.y)/r)}}(l.current);s(),null==(t=e.onDragEnd)||t.call(e,a.current,n)}return(0,w.useLayoutEffect)(function(){e.disabled&&s()},[s,e.disabled]),e.disabled?{ref:t,animate:u}:{ref:t,onPointerDown:function(a){var i;0===a.button&&function(n){if(!n||!t.current)return!0;if(e.handles&&e.handles.size>0){for(var r=n;r&&r!==t.current;){if(e.handles.has(r))return!0;r=r.parentElement}return!1}return!e.dragHandleSelector||null!==n.closest(e.dragHandleSelector)}(a.target)&&(o.current={x:a.clientX,y:a.clientY},n.current={state:\"press\"},window.addEventListener(\"pointermove\",f),window.addEventListener(\"pointerup\",p),null!==r.current&&(r.current(),r.current=null),r.current=function(){window.removeEventListener(\"pointermove\",f),window.removeEventListener(\"pointerup\",p)},null==(i=t.current)||i.addEventListener(\"click\",d))},animate:u}}({disabled:void 0!==u&&u,handles:null==(t=oc())?void 0:t.handles,threshold:5,onDragStart:i,onDragEnd:function(e,t){var r,a,i,s,c,u,d,f,p,h,y,v,b,A,x,w,C,_;if(0===Math.sqrt(e.x*e.x+e.y*e.y)){null==(r=m.current)||r.style.removeProperty(\"translate\");return}g((b=(a={x:e.x+ob(t.x),y:e.y+ob(t.y)}).x,A=a.y,w=Object.entries(x=(c=2*l,u=(null==(i=m.current)?void 0:i.offsetWidth)||0,d=(null==(s=m.current)?void 0:s.offsetHeight)||0,f=window.innerWidth-document.documentElement.clientWidth,h=(p=function(e){var t=e.includes(\"right\"),r=e.includes(\"bottom\"),o=t?window.innerWidth-f-c-u:0,a=r?window.innerHeight-c-d:0;if(n&&n.corner===e){var i=n.square+n.padding;r?a-=i:a+=i}return{x:o,y:a}})(o),{\"top-left\":(y=function(e){return{x:e.x-h.x,y:e.y-h.y}})(p(\"top-left\")),\"top-right\":y(p(\"top-right\")),\"bottom-left\":y(p(\"bottom-left\")),\"bottom-right\":y(p(\"bottom-right\"))})).map(function(e){var t,n,r=(n=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,2)||og(t,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),o=r[0],a=r[1];return{key:o,distance:Math.sqrt(Math.pow(b-a.x,2)+Math.pow(A-a.y,2))}}),C=(v=Math).min.apply(v,om(w.map(ov))),(_=w.find(function(e){return e.distance===C}))?{translation:x[_.key],corner:_.key}:{corner:o,translation:x[o]}))},onAnimationEnd:function(e){var t=e.corner;setTimeout(function(){var e;null==(e=m.current)||e.style.removeProperty(\"translate\"),c(t)})},dragHandleSelector:a}),m=h.ref,g=h.animate,y=oh(h,[\"ref\",\"animate\"]);return p[10]!==s.style?(d=of({touchAction:\"none\",userSelect:\"none\",WebkitUserSelect:\"none\"},s.style),p[10]=s.style,p[11]=d):d=p[11],p[12]!==r||p[13]!==y||p[14]!==s||p[15]!==m||p[16]!==d?(f=(0,A.jsx)(\"div\",op(of(op(of({},s),{ref:m}),y),{style:d,children:r})),p[12]=r,p[13]=y,p[14]=s,p[15]=m,p[16]=d,p[17]=f):f=p[17],f}function ov(e){return e.distance}function ob(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.999;return e/1e3*t/(1-t)}function oA(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ox(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ow=20;function oC(){var e,t,n,r,o,a,i,l,s,c=(0,x.c)(20),u=dl(),d=u.state,f=u.dispatch,p=r5(),h=p.panel,m=p.setPanel,g=p.setSelectedIndex,y=o_();c[0]!==d.devToolsPosition?(n=d.devToolsPosition.split(\"-\",2),c[0]=d.devToolsPosition,c[1]=n):n=c[1];var v=(t=2,function(e){if(Array.isArray(e))return e}(e=n)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,2)||function(e,t){if(e){if(\"string\"==typeof e)return oA(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return oA(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),b=v[0],w=v[1];c[2]!==w||c[3]!==b?(ox(o={\"--animate-out-duration-ms\":\"\".concat(200,\"ms\"),\"--animate-out-timing-function\":nt,boxShadow:\"none\"},b,\"\".concat(ow,\"px\")),ox(o,w,\"\".concat(ow,\"px\")),r=o,c[2]=w,c[3]=b,c[4]=r):r=c[4];var C=r,_=null!==h;return c[5]!==f||c[6]!==y?(a=function(e){f({type:K,devToolsPosition:e}),rw({devToolsPosition:e}),y(e)},c[5]=f,c[6]=y,c[7]=a):a=c[7],c[8]!==h||c[9]!==m||c[10]!==g?(i=(0,A.jsx)(on,{onTriggerClick:function(){var e=\"panel-selector\"===h?null:\"panel-selector\";if(m(e),!e)return void g(-1)}}),c[8]=h,c[9]=m,c[10]=g,c[11]=i):i=c[11],c[12]!==d.devToolsPosition||c[13]!==_||c[14]!==a||c[15]!==i?(l=(0,A.jsx)(oy,{disableDrag:_,padding:ow,position:d.devToolsPosition,setPosition:a,children:i}),c[12]=d.devToolsPosition,c[13]=_,c[14]=a,c[15]=i,c[16]=l):l=c[16],c[17]!==C||c[18]!==l?(s=(0,A.jsx)(oa,{id:\"devtools-indicator\",\"data-nextjs-toast\":!0,style:C,children:l}),c[17]=C,c[18]=l,c[19]=s):s=c[19],s}var o_=function(){var e,t=(0,x.c)(3),n=dl(),r=n.state,o=n.dispatch;return t[0]!==o||t[1]!==r.devToolsPanelPosition?(e=function(e){o({type:X,devToolsPanelPosition:e,key:en});var t=Object.keys(r.devToolsPanelPosition).filter(ok),n=ox({},en,e);t.forEach(function(t){o({type:X,devToolsPanelPosition:e,key:t}),n[t]=e}),rw({devToolsPanelPosition:n})},t[0]=o,t[1]=r.devToolsPanelPosition,t[2]=e):e=t[2],e};function ok(e){return e.startsWith(J)}function oE(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function oj(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function oS(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){oj(e,t,n[t])})}return e}function oO(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function oB(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return oE(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return oE(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var oP=(0,w.createContext)({});function oI(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h=(0,x.c)(37);h[0]!==e?(a=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,[\"index\",\"label\",\"value\",\"onClick\",\"href\"]),n=e.index,r=e.label,i=e.value,o=e.onClick,t=e.href,h[0]=e,h[1]=t,h[2]=n,h[3]=r,h[4]=o,h[5]=a,h[6]=i):(t=h[1],n=h[2],r=h[3],o=h[4],a=h[5],i=h[6]);var m=\"function\"==typeof o||\"string\"==typeof t,g=(0,w.useContext)(oP),y=g.closeMenu,v=g.selectedIndex,b=g.setSelectedIndex,C=v===n;h[7]!==y||h[8]!==t||h[9]!==m||h[10]!==o?(l=function(){m&&(null==o||o(),null==y||y(),t&&window.open(t,\"_blank\",\"noopener, noreferrer\"))},h[7]=y,h[8]=t,h[9]=m,h[10]=o,h[11]=l):l=h[11];var _=l;h[12]!==n||h[13]!==m||h[14]!==v||h[15]!==b?(s=function(){m&&void 0!==n&&v!==n&&b(n)},h[12]=n,h[13]=m,h[14]=v,h[15]=b,h[16]=s):s=h[16],h[17]!==b?(c=function(){return b(-1)},h[17]=b,h[18]=c):c=h[18],h[19]!==_?(u=function(e){(\"Enter\"===e.key||\" \"===e.key)&&_()},h[19]=_,h[20]=u):u=h[20];var k=m?\"menuitem\":void 0,E=C?0:-1;return h[21]!==r?(d=(0,A.jsx)(\"span\",{className:\"dev-tools-indicator-label\",children:r}),h[21]=r,h[22]=d):d=h[22],h[23]!==i?(f=(0,A.jsx)(\"span\",{className:\"dev-tools-indicator-value\",children:i}),h[23]=i,h[24]=f):f=h[24],h[25]!==_||h[26]!==n||h[27]!==a||h[28]!==C||h[29]!==s||h[30]!==c||h[31]!==u||h[32]!==k||h[33]!==E||h[34]!==d||h[35]!==f?(p=(0,A.jsxs)(\"div\",oO(oS({className:\"dev-tools-indicator-item\",\"data-index\":n,\"data-selected\":C,onClick:_,onMouseMove:s,onMouseLeave:c,onKeyDown:u,role:k,tabIndex:E},a),{children:[d,f]})),h[25]=_,h[26]=n,h[27]=a,h[28]=C,h[29]=s,h[30]=c,h[31]=u,h[32]=k,h[33]=E,h[34]=d,h[35]=f,h[36]=p):p=h[36],p}var oT=function(e){var t,n=e.closeOnClickOutside,r=void 0===n||n,o=e.items,a=dl().state,i=r5(),l=i.setPanel,s=i.triggerRef,c=i.setSelectedIndex,u=i.selectedIndex,d=uQ().mounted,f=oB(a.devToolsPosition.split(\"-\",2),2),p=f[0],h=f[1],m=(0,w.useRef)(null);ne(m,s,r&&d,function(e){switch(e){case\"escape\":l(null),c(-1);return;case\"outside\":if(!r)return;l(null),c(-1);return;default:return null}}),(0,w.useLayoutEffect)(function(){var e;null==(e=m.current)||e.focus(),oN({index:-1===u?\"first\":u,menuRef:m,setSelectedIndex:c})},[]);var g=r3(a),y=oB(a.devToolsPosition.split(\"-\",2),2),v=y[0],b=y[1],x=p===v&&h===b?g:ow,C=(oj(t={},p,\"\".concat(x,\"px\")),oj(t,h,\"\".concat(ow,\"px\")),oj(t,\"top\"===p?\"bottom\":\"top\",\"auto\"),oj(t,\"left\"===h?\"right\":\"left\",\"auto\"),t),_=o.filter(function(e){return!!e}),k=_.filter(function(e){return!e.footer}),E=_.filter(function(e){return e.footer});return(0,A.jsx)(\"div\",{ref:m,onKeyDown:function(e){e.preventDefault();var t=_.filter(function(e){return e.onClick}).length;switch(e.key){case\"ArrowDown\":oN({index:u>=t-1?0:u+1,menuRef:m,setSelectedIndex:c});break;case\"ArrowUp\":oN({index:u<=0?t-1:u-1,menuRef:m,setSelectedIndex:c});break;case\"Home\":oN({index:\"first\",menuRef:m,setSelectedIndex:c});break;case\"End\":oN({index:\"last\",menuRef:m,setSelectedIndex:c});break;case\"n\":e.ctrlKey&&oN({index:u>=t-1?0:u+1,menuRef:m,setSelectedIndex:c});break;case\"p\":e.ctrlKey&&oN({index:u<=0?t-1:u-1,menuRef:m,setSelectedIndex:c})}},id:\"nextjs-dev-tools-menu\",role:\"menu\",dir:\"ltr\",\"aria-orientation\":\"vertical\",\"aria-label\":\"Next.js Dev Tools Items\",tabIndex:-1,style:oS({outline:0,WebkitFontSmoothing:\"antialiased\",display:\"flex\",flexDirection:\"column\",alignItems:\"flex-start\",background:\"var(--color-background-100)\",backgroundClip:\"padding-box\",boxShadow:\"var(--shadow-menu)\",borderRadius:\"var(--rounded-xl)\",position:\"fixed\",fontFamily:\"var(--font-stack-sans)\",zIndex:\"var(--top-z-index)\",overflow:\"hidden\",opacity:1,minWidth:\"248px\",transition:\"opacity var(--animate-out-duration-ms) var(--animate-out-timing-function)\",border:\"1px solid var(--color-gray-alpha-400)\"},C),children:(0,A.jsxs)(oP,{value:{selectedIndex:u,setSelectedIndex:c},children:[(0,A.jsx)(\"div\",{style:{padding:\"6px\",width:\"100%\"},children:k.map(function(e,t){return(0,A.jsx)(oI,oS({title:e.title,label:e.label,value:e.value,onClick:e.onClick,index:e.onClick?oz(k,t):void 0},e.attributes),e.label)})}),(0,A.jsx)(\"div\",{className:\"dev-tools-indicator-footer\",children:E.map(function(e,t){var n;return(0,A.jsx)(oI,oO(oS({title:e.title,label:e.label,value:e.value,onClick:e.onClick},e.attributes),{index:e.onClick?oz(E,t)+(n=k).filter(function(e){return e.onClick}).length:void 0}),e.label)})})]})})};function oz(e,t){for(var n=0,r=0;r<=t&&r<e.length;r++)if(e[r].onClick){if(r===t)return n;n++}return n}function oD(e){var t,n,r=(0,x.c)(4),o=e.children,a=o>0;return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"span\",{className:\"dev-tools-indicator-issue-count-indicator\"}),r[0]=t):t=r[0],r[1]!==o||r[2]!==a?(n=(0,A.jsxs)(\"span\",{className:\"dev-tools-indicator-issue-count\",\"data-has-issues\":a,children:[t,o]}),r[1]=o,r[2]=a,r[3]=n):n=r[3],n}function oL(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",children:(0,A.jsx)(\"path\",{fill:\"#666\",fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M5.50011 1.93945L6.03044 2.46978L10.8537 7.293C11.2442 7.68353 11.2442 8.31669 10.8537 8.70722L6.03044 13.5304L5.50011 14.0608L4.43945 13.0001L4.96978 12.4698L9.43945 8.00011L4.96978 3.53044L4.43945 3.00011L5.50011 1.93945Z\"})}),t[0]=e):e=t[0],e}function oN(e){var t,n=e.index,r=e.menuRef,o=e.setSelectedIndex;if(\"first\"===n)return void setTimeout(function(){var e,t=null==(e=r.current)?void 0:e.querySelectorAll('[role=\"menuitem\"]');t&&oN({index:Number(t[0].getAttribute(\"data-index\")),menuRef:r,setSelectedIndex:o})});if(\"last\"===n)return void setTimeout(function(){var e,t=null==(e=r.current)?void 0:e.querySelectorAll('[role=\"menuitem\"]');t&&oN({index:t.length-1,menuRef:r,setSelectedIndex:o})});var a=null==(t=r.current)?void 0:t.querySelector('[data-index=\"'.concat(n,'\"]'));a&&(o(n),null==a||a.focus())}function oR(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var oM=(0,w.createContext)(null),oZ=function(e){var t=.95*window.innerWidth,n=.95*window.innerHeight;return{width:Math.min(t,Math.max(e.minWidth,e.width)),height:Math.min(n,Math.max(e.minHeight,e.height))}},oU=function(e){var t,n,r,o,a,i,l,s=e.value,c=e.children,u=null!=(a=s.minWidth)?a:100,d=null!=(i=s.minHeight)?i:80,f=s.maxWidth,p=s.maxHeight,h=(t=(0,w.useState)(null),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,2)||function(e,t){if(e){if(\"string\"==typeof e)return oR(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return oR(e,t)}}(t,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),m=h[0],g=h[1],y=null!=(l=s.storageKey)?l:et,v=(0,w.useCallback)(function(){if(s.resizeRef.current&&null===m){var e=s.devToolsPanelSize[y];if(e){var t,n,r=oZ((t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},e),n=n={minWidth:null!=u?u:100,minHeight:null!=d?d:80},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),o=r.height,a=r.width;return s.resizeRef.current.style.width=\"\".concat(a,\"px\"),s.resizeRef.current.style.height=\"\".concat(o,\"px\"),!0}}},[s.resizeRef,m,y,u,d,s.devToolsPanelSize]);return(0,w.useLayoutEffect)(function(){var e;if(!v()&&s.resizeRef.current&&(null==(e=s.initialSize)?void 0:e.height)&&s.initialSize.width){var t=oZ({height:s.initialSize.height,width:s.initialSize.width,minWidth:null!=u?u:100,minHeight:null!=d?d:80}),n=t.height,r=t.width;s.resizeRef.current.style.width=\"\".concat(r,\"px\"),s.resizeRef.current.style.height=\"\".concat(n,\"px\")}},[]),(0,w.useLayoutEffect)(function(){return window.addEventListener(\"resize\",v),function(){return window.removeEventListener(\"resize\",v)}},[v,null==(r=s.initialSize)?void 0:r.height,null==(o=s.initialSize)?void 0:o.width,s.resizeRef]),(0,A.jsx)(oM.Provider,{value:{resizeRef:s.resizeRef,minWidth:u,minHeight:d,maxWidth:f,maxHeight:p,draggingDirection:m,setDraggingDirection:g,storageKey:y},children:c})},oF=function(){var e=(0,w.useContext)(oM);if(!e)throw Error(\"useResize must be used within a Resize provider\");return e},oq=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/devtools-panel/resize/resize-handle.css\"),oH={};function oV(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}oH.styleTagTransform=m(),oH.setAttributes=d(),oH.insert=c(),oH.domAPI=l(),oH.insertStyleElement=p(),a()(oq.Z,oH),oq.Z&&oq.Z.locals&&oq.Z.locals;var o$=function(e){var t,n,r,o,a,i,l,s,c,u,d=(0,x.c)(32),f=e.direction,p=e.position,h=oF(),m=h.resizeRef,g=h.minWidth,y=h.minHeight,v=h.maxWidth,b=h.maxHeight,C=h.storageKey,_=h.draggingDirection,k=h.setDraggingDirection;d[0]===Symbol.for(\"react.memo_cache_sentinel\")?(r={top:0,right:0,bottom:0,left:0},d[0]=r):r=d[0];var E=(t=(0,w.useState)(r),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,2)||function(e,t){if(e){if(\"string\"==typeof e)return oV(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return oV(e,t)}}(t,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),j=E[0],S=E[1];d[1]!==m.current?(o=function(){if(m.current){var e=m.current,t=window.getComputedStyle(e);S({top:parseFloat(t.borderTopWidth)||0,right:parseFloat(t.borderRightWidth)||0,bottom:parseFloat(t.borderBottomWidth)||0,left:parseFloat(t.borderLeftWidth)||0})}},d[1]=m.current,d[2]=o):o=d[2],d[3]!==m?(a=[m],d[3]=m,d[4]=a):a=d[4],(0,w.useLayoutEffect)(o,a),d[5]!==f||d[6]!==b||d[7]!==v||d[8]!==y||d[9]!==g||d[10]!==m.current||d[11]!==k||d[12]!==C?(i=function(e){if(e.preventDefault(),m.current){k(f);var t=m.current,n=t.getBoundingClientRect(),r=e.clientX,o=e.clientY,a=function(e){var a=oW(f,e.clientX-r,e.clientY-o,n,g,y,v,b),i=a.newWidth,l=a.newHeight;void 0!==i&&(t.style.width=\"\".concat(i,\"px\")),void 0!==l&&(t.style.height=\"\".concat(l,\"px\"))},i=function(){if(k(null),document.removeEventListener(\"mousemove\",a),document.removeEventListener(\"mouseup\",i),m.current){var e,t,n,r=m.current.getBoundingClientRect(),o=r.width,l=r.height;rw({devToolsPanelSize:(e={},t=C,n={width:o,height:l},t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e)})}};document.addEventListener(\"mousemove\",a),document.addEventListener(\"mouseup\",i)}},d[5]=f,d[6]=b,d[7]=v,d[8]=y,d[9]=g,d[10]=m.current,d[11]=k,d[12]=C,d[13]=i):i=d[13];var O=i;if(!(!p.split(\"-\").includes(f)&&(!f.includes(\"-\")||f===oY(p))))return null;var B=j.left+j.right,P=j.top+j.bottom;d[14]!==f?(l=f.includes(\"-\"),d[14]=f,d[15]=l):l=d[15];var I=l,T=\"resize-container \".concat(f,\" \").concat(_&&_!==f?\"no-hover\":\"\");return d[16]!==O||d[17]!==T?(s=(0,A.jsx)(\"div\",{className:T,onMouseDown:O}),d[16]=O,d[17]=T,d[18]=s):s=d[18],d[19]!==j.bottom||d[20]!==j.left||d[21]!==j.right||d[22]!==j.top||d[23]!==f||d[24]!==_||d[25]!==I||d[26]!==B||d[27]!==P?(c=!I&&(0,A.jsx)(\"div\",{className:\"resize-line \".concat(f,\" \").concat(_===f?\"dragging\":\"\"),style:{\"--border-horizontal\":\"\".concat(B,\"px\"),\"--border-vertical\":\"\".concat(P,\"px\"),\"--border-top\":\"\".concat(j.top,\"px\"),\"--border-right\":\"\".concat(j.right,\"px\"),\"--border-bottom\":\"\".concat(j.bottom,\"px\"),\"--border-left\":\"\".concat(j.left,\"px\")}}),d[19]=j.bottom,d[20]=j.left,d[21]=j.right,d[22]=j.top,d[23]=f,d[24]=_,d[25]=I,d[26]=B,d[27]=P,d[28]=c):c=d[28],d[29]!==s||d[30]!==c?(u=(0,A.jsxs)(A.Fragment,{children:[s,c]}),d[29]=s,d[30]=c,d[31]=u):u=d[31],u},oW=function(e,t,n,r,o,a,i,l){var s=null!=i?i:.95*window.innerWidth,c=null!=l?l:.95*window.innerHeight;switch(e){case\"right\":return{newWidth:Math.min(s,Math.max(o,r.width+t)),newHeight:r.height};case\"left\":return{newWidth:Math.min(s,Math.max(o,r.width-t)),newHeight:r.height};case\"bottom\":return{newWidth:r.width,newHeight:Math.min(c,Math.max(a,r.height+n))};case\"top\":return{newWidth:r.width,newHeight:Math.min(c,Math.max(a,r.height-n))};case\"top-left\":return{newWidth:Math.min(s,Math.max(o,r.width-t)),newHeight:Math.min(c,Math.max(a,r.height-n))};case\"top-right\":return{newWidth:Math.min(s,Math.max(o,r.width+t)),newHeight:Math.min(c,Math.max(a,r.height-n))};case\"bottom-left\":return{newWidth:Math.min(s,Math.max(o,r.width-t)),newHeight:Math.min(c,Math.max(a,r.height+n))};case\"bottom-right\":return{newWidth:Math.min(s,Math.max(o,r.width+t)),newHeight:Math.min(c,Math.max(a,r.height+n))};default:return null}};function oY(e){switch(e){case\"top-left\":return\"bottom-right\";case\"top-right\":return\"bottom-left\";case\"bottom-left\":return\"top-right\";case\"bottom-right\":return\"top-left\";default:return null}}var oK=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/panel/dynamic-panel.css\"),oX={};function oG(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function oQ(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function oJ(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){oQ(e,t,n[t])})}return e}function o0(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return oG(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return oG(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function o1(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"width\";if(\"number\"==typeof e)return e;var n=document.createElement(\"div\");n.style.position=\"absolute\",n.style.visibility=\"hidden\",\"width\"===t?n.style.width=e:n.style.height=e,document.body.appendChild(n);var r=\"width\"===t?n.offsetWidth:n.offsetHeight;return document.body.removeChild(n),r}function o2(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h,m,g=e.header,y=e.children,v=e.draggable,b=void 0!==v&&v,C=e.sizeConfig,_=void 0===C?{kind:\"resizable\",minWidth:400,minHeight:350,maxWidth:1e3,maxHeight:1e3,initialSize:{height:400,width:500}}:C,k=e.closeOnClickOutside,E=void 0!==k&&k,j=e.sharePanelSizeGlobally,S=e.sharePanelPositionGlobally,O=e.containerProps,B=r5().setPanel,P=uQ(),I=P.name,T=P.mounted,z=void 0===j||j?et:\"\".concat(ee,\"_\").concat(I),D=void 0===S||S?en:\"\".concat(J,\"_\").concat(I),L=dl(),N=L.dispatch,R=L.state,M=null!=(h=R.devToolsPanelPosition[D])?h:R.devToolsPosition,Z=o0(M.split(\"-\",2),2),U=Z[0],F=Z[1],q=(0,w.useRef)(null);ne(q,r5().triggerRef,T,function(e){switch(e){case\"escape\":return void B(\"panel-selector\");case\"outside\":E&&B(\"panel-selector\");return;default:return null}});var H=r3(R),V=o0(R.devToolsPosition.split(\"-\",2),2),$=V[0],W=V[1],Y=U===$&&F===W?H:ow,K=(oQ(m={},U,\"\".concat(Y,\"px\")),oQ(m,F,\"\".concat(ow,\"px\")),oQ(m,\"top\"===U?\"bottom\":\"top\",\"auto\"),oQ(m,\"left\"===F?\"right\":\"left\",\"auto\"),m),G=\"resizable\"===_.kind,Q=(t=G?_.minWidth:void 0,n=G?_.minHeight:void 0,r=G?_.maxWidth:void 0,o=G?_.maxHeight:void 0,(s=(0,x.c)(11))[0]!==o||s[1]!==r||s[2]!==n||s[3]!==t?(a=function(){return{minWidth:t?o1(t,\"width\"):void 0,minHeight:n?o1(n,\"height\"):void 0,maxWidth:r?o1(r,\"width\"):void 0,maxHeight:o?o1(o,\"height\"):void 0}},s[0]=o,s[1]=r,s[2]=n,s[3]=t,s[4]=a):a=s[4],u=(c=o0((0,w.useState)(a),2))[0],d=c[1],s[5]!==o||s[6]!==r||s[7]!==n||s[8]!==t?(i=function(){var e=function(){d({minWidth:t?o1(t,\"width\"):void 0,minHeight:n?o1(n,\"height\"):void 0,maxWidth:r?o1(r,\"width\"):void 0,maxHeight:o?o1(o,\"height\"):void 0})};return window.addEventListener(\"resize\",e),function(){return window.removeEventListener(\"resize\",e)}},l=[t,n,r,o],s[5]=o,s[6]=r,s[7]=n,s[8]=t,s[9]=i,s[10]=l):(i=s[9],l=s[10]),(0,w.useEffect)(i,l),u),er=Q.minWidth,eo=Q.minHeight,ea=Q.maxWidth,ei=Q.maxHeight,el=I?\"\".concat(ee,\"_\").concat(I):et,es=R.devToolsPanelSize[el];return(0,A.jsx)(oU,{value:{resizeRef:q,initialSize:\"resizable\"===_.kind?_.initialSize:_,minWidth:er,minHeight:eo,maxWidth:ea,maxHeight:ei,devToolsPosition:R.devToolsPosition,devToolsPanelSize:R.devToolsPanelSize,storageKey:z},children:(0,A.jsx)(\"div\",{tabIndex:-1,ref:q,className:\"dynamic-panel-container\",style:oJ({\"--panel-top\":K.top,\"--panel-bottom\":K.bottom,\"--panel-left\":K.left,\"--panel-right\":K.right},G?{\"--panel-min-width\":er?\"\".concat(er,\"px\"):void 0,\"--panel-min-height\":eo?\"\".concat(eo,\"px\"):void 0,\"--panel-max-width\":ea?\"\".concat(ea,\"px\"):void 0,\"--panel-max-height\":ei?\"\".concat(ei,\"px\"):void 0}:{\"--panel-height\":\"\".concat(es?es.height:_.height,\"px\"),\"--panel-width\":\"\".concat(es?es.width:_.width,\"px\")}),children:(0,A.jsx)(os,{disabled:!b,children:(0,A.jsx)(oy,{dragHandleSelector:\".resize-container\",avoidZone:{corner:R.devToolsPosition,square:25/R.scale,padding:ow},padding:ow,position:M,setPosition:function(e){N({type:X,devToolsPanelPosition:e,key:D}),\"resizable\"===_.kind&&rw({devToolsPanelPosition:oQ({},D,e)})},style:{overflow:\"auto\",width:\"100%\",height:\"100%\"},disableDrag:!b,children:(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(\"div\",(f=oJ({},O),p=p={className:\"panel-content-container \".concat((null==O?void 0:O.className)||\"\"),style:oJ({},null==O?void 0:O.style),children:[(0,A.jsx)(ou,{children:g}),(0,A.jsx)(\"div\",{\"data-nextjs-scrollable-content\":!0,className:\"draggable-content\",children:y})]},Object.getOwnPropertyDescriptors?Object.defineProperties(f,Object.getOwnPropertyDescriptors(p)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(p)).forEach(function(e){Object.defineProperty(f,e,Object.getOwnPropertyDescriptor(p,e))}),f)),G&&(0,A.jsxs)(A.Fragment,{children:[(!_.sides||_.sides.includes(\"vertical\"))&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(o$,{position:M,direction:\"top\"}),(0,A.jsx)(o$,{position:M,direction:\"bottom\"})]}),(!_.sides||_.sides.includes(\"horizontal\"))&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(o$,{position:M,direction:\"right\"}),(0,A.jsx)(o$,{position:M,direction:\"left\"})]}),(!_.sides||_.sides.includes(\"diagonal\"))&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(o$,{position:M,direction:\"top-left\"}),(0,A.jsx)(o$,{position:M,direction:\"top-right\"}),(0,A.jsx)(o$,{position:M,direction:\"bottom-left\"}),(0,A.jsx)(o$,{position:M,direction:\"bottom-right\"})]})]})]})})})})})}oX.styleTagTransform=m(),oX.setAttributes=d(),oX.insert=c(),oX.domAPI=l(),oX.insertStyleElement=p(),a()(oK.Z,oX),oK.Z&&oK.Z.locals&&oK.Z.locals;var o4=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-explorer.css\"),o5={};function o3(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}o5.styleTagTransform=m(),o5.setAttributes=d(),o5.insert=c(),o5.domAPI=l(),o5.insertStyleElement=p(),a()(o4.Z,o5),o4.Z&&o4.Z.locals&&o4.Z.locals;var o6=new Set,o9={subscribe:function(e){return o6.add(e),function(){return o6.delete(e)}},getSnapshot:function(){return at.getRoot()},getServerSnapshot:function(){return at.getRoot()}},o8=o9.subscribe,o7=o9.getSnapshot,ae=o9.getServerSnapshot,at=function(e){var t=e.getCharacters,n=void 0===t?function(e){return[e]}:t,r=e.compare,o=void 0===r?function(e,t){return e===t}:r,a={value:void 0,children:{}};function i(){var e=!0,t=!1,n=void 0;try{for(var r,o=o6[Symbol.iterator]();!(e=(r=o.next()).done);e=!0)(0,r.value)()}catch(e){t=!0,n=e}finally{try{e||null==o.return||o.return()}finally{if(t)throw n}}}return{insert:function(e){var t=a,r=n(e),o=!0,l=!1,s=void 0;try{for(var c,u=r[Symbol.iterator]();!(o=(c=u.next()).done);o=!0){var d=c.value;t.children[d]||(t.children[d]={value:void 0,children:{}}),t=t.children[d]}}catch(e){l=!0,s=e}finally{try{o||null==u.return||u.return()}finally{if(l)throw s}}t.value=e,a=o3({},a),i()},remove:function(e){var t=a,r=n(e),l=[],s=!0,c=!0,u=!1,d=void 0;try{for(var f,p=r[Symbol.iterator]();!(c=(f=p.next()).done);c=!0){var h=f.value;if(!t.children[h]){s=!1;break}l.push(t),t=t.children[h]}}catch(e){u=!0,d=e}finally{try{c||null==p.return||p.return()}finally{if(u)throw d}}if(s&&o(t.value,e)){t.value=void 0;for(var m=l.length-1;m>=0;m--){var g=l[m],y=r[m];0===Object.keys(g.children[y].children).length&&delete g.children[y]}a=o3({},a),i()}},getRoot:function(){return a}}}({compare:function(e,t){return!!e&&!!t&&e.pagePath===t.pagePath&&e.type===t.type&&e.boundaryType===t.boundaryType},getCharacters:function(e){return e.pagePath.split(\"/\")}}),an=at.insert,ar=at.remove,ao=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.css\"),aa={};aa.styleTagTransform=m(),aa.setAttributes=d(),aa.insert=c(),aa.domAPI=l(),aa.insertStyleElement=p(),a()(ao.Z,aa),ao.Z&&ao.Z.locals&&ao.Z.locals;let ai={};function al(e,t){let n=w.useRef(ai);return n.current===ai&&(n.current=e(t)),n}let as=[];function ac(e){w.useEffect(e,as)}class au{static create(){return new au}currentId=0;start(e,t){this.clear(),this.currentId=setTimeout(()=>{this.currentId=0,t()},e)}isStarted(){return 0!==this.currentId}clear=()=>{0!==this.currentId&&(clearTimeout(this.currentId),this.currentId=0)};disposeEffect=()=>this.clear}function ad(){let e=al(au.create).current;return ac(e.disposeEffect),e}let af=C[`useInsertionEffect${Math.random().toFixed(1)}`.slice(0,-3)],ap=af&&af!==w.useLayoutEffect?af:e=>e();function ah(e){let t=al(am).current;return t.next=e,ap(t.effect),t.trampoline}function am(){let e={next:void 0,callback:ag,trampoline:(...t)=>e.callback?.(...t),effect:()=>{e.callback=e.next}};return e}function ag(){}function ay({controlled:e,default:t,name:n,state:r=\"value\"}){let{current:o}=w.useRef(void 0!==e),[a,i]=w.useState(t),l=w.useCallback(e=>{o||i(e)},[]);return[o?e:a,l]}let av={...C},ab=0,aA=av.useId;function ax(e,t){if(void 0!==aA){let n=aA();return e??(t?`${t}-${n}`:n)}return function(e,t=\"mui\"){let[n,r]=w.useState(e),o=e||n;return w.useEffect(()=>{null==n&&(ab+=1,r(`${t}-${ab}`))},[n,t]),o}(e,t)}function aw(){let e=new Map;return{emit(t,n){e.get(t)?.forEach(e=>e(n))},on(t,n){e.has(t)||e.set(t,new Set),e.get(t).add(n)},off(t,n){e.get(t)?.delete(n)}}}let aC=\"undefined\"!=typeof document?w.useLayoutEffect:()=>{},a_=w.createContext(null),ak=w.createContext(null),aE=()=>w.useContext(a_)?.id||null,aj=()=>w.useContext(ak);function aS(e){let{children:t,id:n}=e,r=aE();return(0,A.jsx)(a_.Provider,{value:w.useMemo(()=>({id:n,parentId:r}),[n,r]),children:t})}function aO(e){let{children:t}=e,n=w.useRef([]),r=w.useCallback(e=>{n.current=[...n.current,e]},[]),o=w.useCallback(e=>{n.current=n.current.filter(t=>t!==e)},[]),[a]=w.useState(()=>aw());return(0,A.jsx)(ak.Provider,{value:w.useMemo(()=>({nodesRef:n,addNode:r,removeNode:o,events:a}),[r,o,a]),children:t})}function aB(e){let{open:t=!1,onOpenChange:n,elements:r}=e,o=ax(),a=w.useRef({}),[i]=w.useState(()=>aw()),l=null!=aE(),[s,c]=w.useState(r.reference),u=ah((e,t,r)=>{a.current.openEvent=e?t:void 0,i.emit(\"openchange\",{open:e,event:t,reason:r,nested:l}),n?.(e,t,r)}),d=w.useMemo(()=>({setPositionReference:c}),[]),f=w.useMemo(()=>({reference:s||r.reference||null,floating:r.floating||null,domReference:r.reference}),[s,r.reference,r.floating]);return w.useMemo(()=>({dataRef:a,open:t,onOpenChange:u,elements:f,events:i,floatingId:o,refs:d}),[t,u,f,i,o,d])}function aP(){return\"undefined\"!=typeof window}function aI(e){return aD(e)?(e.nodeName||\"\").toLowerCase():\"#document\"}function aT(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function az(e){var t;return null==(t=(aD(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function aD(e){return!!aP()&&(e instanceof Node||e instanceof aT(e).Node)}function aL(e){return!!aP()&&(e instanceof Element||e instanceof aT(e).Element)}function aN(e){return!!aP()&&(e instanceof HTMLElement||e instanceof aT(e).HTMLElement)}function aR(e){return!!aP()&&\"undefined\"!=typeof ShadowRoot&&(e instanceof ShadowRoot||e instanceof aT(e).ShadowRoot)}let aM=new Set([\"inline\",\"contents\"]);function aZ(e){let{overflow:t,overflowX:n,overflowY:r,display:o}=aG(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!aM.has(o)}let aU=new Set([\"table\",\"td\",\"th\"]),aF=[\":popover-open\",\":modal\"];function aq(e){return aF.some(t=>{try{return e.matches(t)}catch(e){return!1}})}let aH=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\"],aV=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\",\"filter\"],a$=[\"paint\",\"layout\",\"strict\",\"content\"];function aW(e){let t=aY(),n=aL(e)?aG(e):e;return aH.some(e=>!!n[e]&&\"none\"!==n[e])||!!n.containerType&&\"normal\"!==n.containerType||!t&&!!n.backdropFilter&&\"none\"!==n.backdropFilter||!t&&!!n.filter&&\"none\"!==n.filter||aV.some(e=>(n.willChange||\"\").includes(e))||a$.some(e=>(n.contain||\"\").includes(e))}function aY(){return\"undefined\"!=typeof CSS&&!!CSS.supports&&CSS.supports(\"-webkit-backdrop-filter\",\"none\")}let aK=new Set([\"html\",\"body\",\"#document\"]);function aX(e){return aK.has(aI(e))}function aG(e){return aT(e).getComputedStyle(e)}function aQ(e){return aL(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function aJ(e){if(\"html\"===aI(e))return e;let t=e.assignedSlot||e.parentNode||aR(e)&&e.host||az(e);return aR(t)?t.host:t}function a0(e,t,n){var r;void 0===t&&(t=[]),void 0===n&&(n=!0);let o=function e(t){let n=aJ(t);return aX(n)?t.ownerDocument?t.ownerDocument.body:t.body:aN(n)&&aZ(n)?n:e(n)}(e),a=o===(null==(r=e.ownerDocument)?void 0:r.body),i=aT(o);if(a){let e=a1(i);return t.concat(i,i.visualViewport||[],aZ(o)?o:[],e&&n?a0(e):[])}return t.concat(o,a0(o,[],n))}function a1(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function a2(e){let t=al(a4,e).current;return t.next=e,aC(t.effect),t}function a4(e){let t={current:e,next:e,effect:()=>{t.current=t.next}};return t}let a5=\"undefined\"!=typeof navigator,a3=function(){if(!a5)return{platform:\"\",maxTouchPoints:-1};let e=navigator.userAgentData;return e?.platform?{platform:e.platform,maxTouchPoints:navigator.maxTouchPoints}:{platform:navigator.platform??\"\",maxTouchPoints:navigator.maxTouchPoints??-1}}(),a6=function(){if(!a5)return\"\";let e=navigator.userAgentData;return e?.platform?e.platform:navigator.platform??\"\"}(),a9=function(){if(!a5)return\"\";let e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map(({brand:e,version:t})=>`${e}/${t}`).join(\" \"):navigator.userAgent}(),a8=\"undefined\"!=typeof CSS&&!!CSS.supports&&CSS.supports(\"-webkit-backdrop-filter:none\"),a7=\"MacIntel\"===a3.platform&&a3.maxTouchPoints>1||/iP(hone|ad|od)|iOS/.test(a3.platform);a5&&/firefox/i.test(a9);let ie=a5&&/apple/i.test(navigator.vendor),it=a5&&/android/i.test(a6)||/android/i.test(a9),ir=a5&&a6.toLowerCase().startsWith(\"mac\")&&!navigator.maxTouchPoints,io=a9.includes(\"jsdom/\");function ia(e){e.preventDefault(),e.stopPropagation()}function ii(e){return 0===e.mozInputSource&&!!e.isTrusted||(it&&e.pointerType?\"click\"===e.type&&1===e.buttons:0===e.detail&&!e.pointerType)}function il(e){return!io&&(!it&&0===e.width&&0===e.height||it&&1===e.width&&1===e.height&&0===e.pressure&&0===e.detail&&\"mouse\"===e.pointerType||e.width<1&&e.height<1&&0===e.pressure&&0===e.detail&&\"touch\"===e.pointerType)}function is(e,t){let n=[\"mouse\",\"pen\"];return t||n.push(\"\",void 0),n.includes(e)}let ic=\"data-base-ui-focusable\",iu=\"active\",id=\"selected\",ip=\"ArrowLeft\",ih=\"ArrowRight\",im=\"ArrowUp\",ig=\"ArrowDown\";function iy(e){let t=e.activeElement;for(;t?.shadowRoot?.activeElement!=null;)t=t.shadowRoot.activeElement;return t}function iv(e,t){if(!e||!t)return!1;let n=t.getRootNode?.();if(e.contains(t))return!0;if(n&&aR(n)){let n=t;for(;n;){if(e===n)return!0;n=n.parentNode||n.host}}return!1}function ib(e){return\"composedPath\"in e?e.composedPath()[0]:e.target}function iA(e,t){return null!=t&&(\"composedPath\"in e?e.composedPath().includes(t):null!=e.target&&t.contains(e.target))}function ix(e){return e?.ownerDocument||document}function iw(e){return aN(e)&&e.matches(\"input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\")}function iC(e){return!!e&&\"combobox\"===e.getAttribute(\"role\")&&iw(e)}function i_(e){return e?e.hasAttribute(ic)?e:e.querySelector(`[${ic}]`)||e:null}function ik(e){return`data-base-ui-${e}`}let iE=ik(\"safe-polygon\");function ij(e,t,n){if(n&&!is(n))return 0;if(\"number\"==typeof e)return e;if(\"function\"==typeof e){let n=e();return\"number\"==typeof n?n:n?.[t]}return e?.[t]}function iS(e){return\"function\"==typeof e?e():e}function iO(e,t={}){let{open:n,onOpenChange:r,dataRef:o,events:a,elements:i}=e,{enabled:l=!0,delay:s=0,handleClose:c=null,mouseOnly:u=!1,restMs:d=0,move:f=!0}=t,p=aj(),h=aE(),m=a2(c),g=a2(s),y=a2(n),v=a2(d),b=w.useRef(void 0),A=ad(),x=w.useRef(void 0),C=ad(),_=w.useRef(!0),k=w.useRef(!1),E=w.useRef(()=>{}),j=w.useRef(!1),S=ah(()=>{let e=o.current.openEvent?.type;return e?.includes(\"mouse\")&&\"mousedown\"!==e});w.useEffect(()=>{if(l)return a.on(\"openchange\",e),()=>{a.off(\"openchange\",e)};function e({open:e}){e||(A.clear(),C.clear(),_.current=!0,j.current=!1)}},[l,a,A,C]),w.useEffect(()=>{if(!l||!m.current||!n)return;function e(e){S()&&r(!1,e,\"hover\")}let t=ix(i.floating).documentElement;return t.addEventListener(\"mouseleave\",e),()=>{t.removeEventListener(\"mouseleave\",e)}},[i.floating,n,r,l,m,S]);let O=w.useCallback((e,t=!0,n=\"hover\")=>{let o=ij(g.current,\"close\",b.current);o&&!x.current?A.start(o,()=>r(!1,e,n)):t&&(A.clear(),r(!1,e,n))},[g,r,A]),B=ah(()=>{E.current(),x.current=void 0}),P=ah(()=>{if(k.current){let e=ix(i.floating).body;e.style.pointerEvents=\"\",e.removeAttribute(iE),k.current=!1}}),I=ah(()=>!!o.current.openEvent&&[\"click\",\"mousedown\"].includes(o.current.openEvent.type));w.useEffect(()=>{if(l&&aL(i.domReference)){let r=i.domReference,o=i.floating;return n&&r.addEventListener(\"mouseleave\",a),f&&r.addEventListener(\"mousemove\",e,{once:!0}),r.addEventListener(\"mouseenter\",e),r.addEventListener(\"mouseleave\",t),o&&(o.addEventListener(\"mouseleave\",a),o.addEventListener(\"mouseenter\",s),o.addEventListener(\"mouseleave\",c)),()=>{n&&r.removeEventListener(\"mouseleave\",a),f&&r.removeEventListener(\"mousemove\",e),r.removeEventListener(\"mouseenter\",e),r.removeEventListener(\"mouseleave\",t),o&&(o.removeEventListener(\"mouseleave\",a),o.removeEventListener(\"mouseenter\",s),o.removeEventListener(\"mouseleave\",c))}}function e(e){if(A.clear(),_.current=!1,u&&!is(b.current)||iS(v.current)>0&&!ij(g.current,\"open\"))return;let t=ij(g.current,\"open\",b.current);t?A.start(t,()=>{y.current||r(!0,e,\"hover\")}):n||r(!0,e,\"hover\")}function t(e){if(I())return void P();E.current();let t=ix(i.floating);if(C.clear(),j.current=!1,m.current&&o.current.floatingContext){n||A.clear(),x.current=m.current({...o.current.floatingContext,tree:p,x:e.clientX,y:e.clientY,onClose(){P(),B(),I()||O(e,!0,\"safe-polygon\")}});let r=x.current;t.addEventListener(\"mousemove\",r),E.current=()=>{t.removeEventListener(\"mousemove\",r)};return}\"touch\"===b.current&&iv(i.floating,e.relatedTarget)||O(e)}function a(e){!I()&&o.current.floatingContext&&m.current?.({...o.current.floatingContext,tree:p,x:e.clientX,y:e.clientY,onClose(){P(),B(),I()||O(e)}})(e)}function s(){A.clear()}function c(e){I()||O(e,!1)}},[i,l,e,u,f,O,B,P,r,n,y,p,g,m,o,I,v,A,C]),aC(()=>{if(l&&n&&m.current?.__options?.blockPointerEvents&&S()){k.current=!0;let e=i.floating;if(aL(i.domReference)&&e){let t=ix(i.floating).body;t.setAttribute(iE,\"\");let n=i.domReference,r=p?.nodesRef.current.find(e=>e.id===h)?.context?.elements.floating;return r&&(r.style.pointerEvents=\"\"),t.style.pointerEvents=\"none\",n.style.pointerEvents=\"auto\",e.style.pointerEvents=\"auto\",()=>{t.style.pointerEvents=\"\",n.style.pointerEvents=\"\",e.style.pointerEvents=\"\"}}}},[l,n,h,i,p,m,S]),aC(()=>{n||(b.current=void 0,j.current=!1,B(),P())},[n,B,P]),w.useEffect(()=>()=>{B(),A.clear(),C.clear(),P()},[l,i.domReference,B,P,A,C]);let T=w.useMemo(()=>{function e(e){b.current=e.pointerType}return{onPointerDown:e,onPointerEnter:e,onMouseMove(e){let{nativeEvent:t}=e;function o(){_.current||y.current||r(!0,t,\"hover\")}(!u||is(b.current))&&!n&&0!==iS(v.current)&&(j.current&&e.movementX**2+e.movementY**2<2||(C.clear(),\"touch\"===b.current?o():(j.current=!0,C.start(iS(v.current),o))))}}},[u,r,n,y,v,C]);return w.useMemo(()=>l?{reference:T}:{},[l,T])}function iB(e,t,n=!0){return e.filter(e=>e.parentId===t&&(!n||e.context?.open)).flatMap(t=>[t,...iB(e,t.id,n)])}function iP(e,t){let n=[],r=e.find(e=>e.id===t)?.parentId;for(;r;){let t=e.find(e=>e.id===r);r=t?.parentId,t&&(n=n.concat(t))}return n}function iI(e,t){let[n,r]=e,o=!1,a=t.length;for(let e=0,i=a-1;e<a;i=e++){let[a,l]=t[e]||[0,0],[s,c]=t[i]||[0,0];l>=r!=c>=r&&n<=(s-a)*(r-l)/(c-l)+a&&(o=!o)}return o}function iT(e={}){let{buffer:t=.5,blockPointerEvents:n=!1,requireIntent:r=!0}=e,o=new au,a=!1,i=null,l=null,s=\"undefined\"!=typeof performance?performance.now():0,c=({x:e,y:n,placement:c,elements:u,onClose:d,nodeId:f,tree:p})=>function(h){var m,g;function y(){o.clear(),d()}if(o.clear(),!u.domReference||!u.floating||null==c||null==e||null==n)return;let{clientX:v,clientY:b}=h,A=[v,b],x=ib(h),w=\"mouseleave\"===h.type,C=iv(u.floating,x),_=iv(u.domReference,x),k=u.domReference.getBoundingClientRect(),E=u.floating.getBoundingClientRect(),j=c.split(\"-\")[0],S=e>E.right-E.width/2,O=n>E.bottom-E.height/2,B=(m=A,g=k,m[0]>=g.x&&m[0]<=g.x+g.width&&m[1]>=g.y&&m[1]<=g.y+g.height),P=E.width>k.width,I=E.height>k.height,T=(P?k:E).left,z=(P?k:E).right,D=(I?k:E).top,L=(I?k:E).bottom;if(C&&(a=!0,!w))return;if(_&&(a=!1),_&&!w){a=!0;return}if(w&&aL(h.relatedTarget)&&iv(u.floating,h.relatedTarget)||p&&iB(p.nodesRef.current,f).some(({context:e})=>e?.open))return;if(\"top\"===j&&n>=k.bottom-1||\"bottom\"===j&&n<=k.top+1||\"left\"===j&&e>=k.right-1||\"right\"===j&&e<=k.left+1)return y();let N=[];switch(j){case\"top\":N=[[T,k.top+1],[T,E.bottom-1],[z,E.bottom-1],[z,k.top+1]];break;case\"bottom\":N=[[T,E.top+1],[T,k.bottom-1],[z,k.bottom-1],[z,E.top+1]];break;case\"left\":N=[[E.right-1,L],[E.right-1,D],[k.left+1,D],[k.left+1,L]];break;case\"right\":N=[[k.right-1,L],[k.right-1,D],[E.left+1,D],[E.left+1,L]]}if(!iI([v,b],N)){if(a&&!B)return y();if(!w&&r){let e=function(e,t){let n=performance.now(),r=n-s;if(null===i||null===l||0===r)return i=e,l=t,s=n,null;let o=e-i,a=t-l,c=Math.sqrt(o*o+a*a);return i=e,l=t,s=n,c/r}(h.clientX,h.clientY);if(null!==e&&e<.1)return y()}iI([v,b],function([e,n]){switch(j){case\"top\":{let r=[[E.left,S||P?E.bottom-t:E.top],[E.right,S?P?E.bottom-t:E.top:E.bottom-t]];return[[P?e+t/2:S?e+4*t:e-4*t,n+t+1],[P?e-t/2:S?e+4*t:e-4*t,n+t+1],...r]}case\"bottom\":{let r=[[E.left,S||P?E.top+t:E.bottom],[E.right,S?P?E.top+t:E.bottom:E.top+t]];return[[P?e+t/2:S?e+4*t:e-4*t,n-t],[P?e-t/2:S?e+4*t:e-4*t,n-t],...r]}case\"left\":return[[O||I?E.right-t:E.left,E.top],[O?I?E.right-t:E.left:E.right-t,E.bottom],[e+t+1,I?n+t/2:O?n+4*t:n-4*t],[e+t+1,I?n-t/2:O?n+4*t:n-4*t]];case\"right\":{let r=[[O||I?E.left+t:E.right,E.top],[O?I?E.left+t:E.right:E.left+t,E.bottom]];return[[e-t,I?n+t/2:O?n+4*t:n-4*t],[e-t,I?n-t/2:O?n+4*t:n-4*t],...r]}default:return[]}}([e,n]))?!a&&r&&o.start(40,y):y()}};return c.__options={blockPointerEvents:n},c}let iz=ir&&ie;function iD(e,t={}){let{open:n,onOpenChange:r,events:o,dataRef:a,elements:i}=e,{enabled:l=!0,visibleOnly:s=!0}=t,c=w.useRef(!1),u=ad(),d=w.useRef(!0);w.useEffect(()=>{if(!l)return;let e=aT(i.domReference);function t(){!n&&aN(i.domReference)&&i.domReference===iy(ix(i.domReference))&&(c.current=!0)}function r(){d.current=!0}function o(){d.current=!1}return e.addEventListener(\"blur\",t),iz&&(e.addEventListener(\"keydown\",r,!0),e.addEventListener(\"pointerdown\",o,!0)),()=>{e.removeEventListener(\"blur\",t),iz&&(e.removeEventListener(\"keydown\",r,!0),e.removeEventListener(\"pointerdown\",o,!0))}},[i.domReference,n,l]),w.useEffect(()=>{if(l)return o.on(\"openchange\",e),()=>{o.off(\"openchange\",e)};function e({reason:e}){(\"reference-press\"===e||\"escape-key\"===e)&&(c.current=!0)}},[o,l]);let f=w.useMemo(()=>({onMouseLeave(){c.current=!1},onFocus(e){if(c.current)return;let t=ib(e.nativeEvent);if(s&&aL(t)){if(iz&&!e.relatedTarget){if(!d.current&&!iw(t))return}else if(!function(e){if(!e||io)return!0;try{return e.matches(\":focus-visible\")}catch(e){return!0}}(t))return}r(!0,e.nativeEvent,\"focus\")},onBlur(e){c.current=!1;let t=e.relatedTarget,n=e.nativeEvent,o=aL(t)&&t.hasAttribute(ik(\"focus-guard\"))&&\"outside\"===t.getAttribute(\"data-type\");u.start(0,()=>{let e=iy(i.domReference?i.domReference.ownerDocument:document);(t||e!==i.domReference)&&(iv(a.current.floatingContext?.refs.floating.current,e)||iv(i.domReference,e)||o||r(!1,n,\"focus\"))})}}),[a,i.domReference,r,s,u]);return w.useMemo(()=>l?{reference:f}:{},[l,f])}globalThis.requestAnimationFrame;let iL=new class{callbacks=[];callbacksCount=0;nextId=1;startId=1;isScheduled=!1;tick=e=>{this.isScheduled=!1;let t=this.callbacks,n=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,n>0)for(let n=0;n<t.length;n+=1)t[n]?.(e)};request(e){let t=this.nextId;return this.nextId+=1,this.callbacks.push(e),this.callbacksCount+=1,this.isScheduled||(requestAnimationFrame(this.tick),this.isScheduled=!0),t}cancel(e){let t=e-this.startId;t<0||t>=this.callbacks.length||(this.callbacks[t]=null,this.callbacksCount-=1)}};class iN{static create(){return new iN}static request(e){return iL.request(e)}static cancel(e){return iL.cancel(e)}currentId=null;request(e){this.cancel(),this.currentId=iL.request(()=>{this.currentId=null,e()})}cancel=()=>{null!==this.currentId&&(iL.cancel(this.currentId),this.currentId=null)};disposeEffect=()=>this.cancel}function iR(){let e=al(iN.create).current;return ac(e.disposeEffect),e}let iM={style:{transition:\"none\"}},iZ={},iU=[],iF={fallbackAxisSide:\"none\"},iq={fallbackAxisSide:\"end\"},iH={intentional:\"onClick\",sloppy:\"onPointerDown\"};function iV(e){return{escapeKey:\"boolean\"==typeof e?e:e?.escapeKey??!1,outsidePress:\"boolean\"==typeof e?e:e?.outsidePress??!0}}function i$(e,t={}){let{open:n,onOpenChange:r,elements:o,dataRef:a}=e,{enabled:i=!0,escapeKey:l=!0,outsidePress:s=!0,outsidePressEvent:c=\"sloppy\",referencePress:u=!1,referencePressEvent:d=\"sloppy\",ancestorScroll:f=!1,bubbles:p,capture:h}=t,m=aj(),g=ah(\"function\"==typeof s?s:()=>!1),y=\"function\"==typeof s?g:s,v=w.useRef(!1),{escapeKey:b,outsidePress:A}=iV(p),{escapeKey:x,outsidePress:C}=iV(h),_=w.useRef(null),k=ad(),E=ad(),j=w.useRef(!1),S=w.useRef(\"\"),O=ah(e=>{S.current=e.pointerType}),B=ah(()=>{let e=S.current;return\"string\"==typeof c?c:c[\"pen\"!==e&&e?e:\"mouse\"]}),P=ah(e=>{if(!n||!i||!l||\"Escape\"!==e.key||j.current)return;let t=a.current.floatingContext?.nodeId,o=m?iB(m.nodesRef.current,t):[];if(!b&&(e.stopPropagation(),o.length>0)){let e=!0;if(o.forEach(t=>{t.context?.open&&!t.context.dataRef.current.__escapeKeyBubbles&&(e=!1)}),!e)return}r(!1,\"nativeEvent\"in e?e.nativeEvent:e,\"escape-key\")}),I=ah(e=>{let t=B();return\"intentional\"===t&&\"click\"!==e.type||\"sloppy\"===t&&\"click\"===e.type}),T=ah(e=>{let t=()=>{P(e),ib(e)?.removeEventListener(\"keydown\",t)};ib(e)?.addEventListener(\"keydown\",t)}),z=ah(e=>{if(I(e))return;let t=a.current.insideReactTree;a.current.insideReactTree=!1;let n=v.current;if(v.current=!1,\"intentional\"===B()&&n||t||\"function\"==typeof y&&!y(e))return;let i=ib(e),l=`[${ik(\"inert\")}]`,s=ix(o.floating).querySelectorAll(l),c=aL(i)?i:null;for(;c&&!aX(c);){let e=aJ(c);if(aX(e)||!aL(e))break;c=e}if(s.length&&aL(i)&&!i.matches(\"html,body\")&&!iv(i,o.floating)&&Array.from(s).every(e=>!iv(c,e)))return;if(aN(i)){let t=aX(i),n=aG(i),r=/auto|scroll/,o=t||r.test(n.overflowX),a=t||r.test(n.overflowY),l=o&&i.clientWidth>0&&i.scrollWidth>i.clientWidth,s=a&&i.clientHeight>0&&i.scrollHeight>i.clientHeight,c=\"rtl\"===n.direction,u=s&&(c?e.offsetX<=i.offsetWidth-i.clientWidth:e.offsetX>i.clientWidth),d=l&&e.offsetY>i.clientHeight;if(u||d)return}let u=a.current.floatingContext?.nodeId,d=m&&iB(m.nodesRef.current,u).some(t=>iA(e,t.context?.elements.floating));if(iA(e,o.floating)||iA(e,o.domReference)||d)return;let f=m?iB(m.nodesRef.current,u):[];if(f.length>0){let e=!0;if(f.forEach(t=>{t.context?.open&&!t.context.dataRef.current.__outsidePressBubbles&&(e=!1)}),!e)return}r(!1,e,\"outside-press\")}),D=ah(e=>{if(!(\"sloppy\"!==B()||!n||!i||iA(e,o.floating)||iA(e,o.domReference))){if(\"touch\"===e.pointerType){_.current={startTime:Date.now(),startX:e.clientX,startY:e.clientY,dismissOnPointerUp:!1,dismissOnMouseDown:!0},k.start(1e3,()=>{_.current&&(_.current.dismissOnPointerUp=!1,_.current.dismissOnMouseDown=!1)});return}z(e)}}),L=ah(e=>{if(I(e)||(k.clear(),\"mousedown\"===e.type&&_.current&&!_.current.dismissOnMouseDown))return;let t=()=>{\"pointerdown\"===e.type?D(e):z(e),ib(e)?.removeEventListener(e.type,t)};ib(e)?.addEventListener(e.type,t)}),N=ah(e=>{if(\"sloppy\"!==B()||\"touch\"!==e.pointerType||!_.current||iA(e,o.floating)||iA(e,o.domReference))return;let t=Math.abs(e.clientX-_.current.startX),n=Math.abs(e.clientY-_.current.startY),r=Math.sqrt(t*t+n*n);r>5&&(_.current.dismissOnPointerUp=!0),r>10&&(z(e),k.clear(),_.current=null)}),R=ah(e=>{\"sloppy\"!==B()||\"touch\"!==e.pointerType||!_.current||iA(e,o.floating)||iA(e,o.domReference)||(_.current.dismissOnPointerUp&&z(e),k.clear(),_.current=null)});w.useEffect(()=>{if(!n||!i)return;a.current.__escapeKeyBubbles=b,a.current.__outsidePressBubbles=A;let e=new au;function t(e){r(!1,e,\"ancestor-scroll\")}function s(){e.clear(),j.current=!0}function c(){e.start(5*!!aY(),()=>{j.current=!1})}let u=ix(o.floating);u.addEventListener(\"pointerdown\",O,!0),l&&(u.addEventListener(\"keydown\",x?T:P,x),u.addEventListener(\"compositionstart\",s),u.addEventListener(\"compositionend\",c)),y&&(u.addEventListener(\"click\",C?L:z,C),u.addEventListener(\"pointerdown\",C?L:z,C),u.addEventListener(\"pointermove\",N,C),u.addEventListener(\"pointerup\",R,C),u.addEventListener(\"mousedown\",L,C));let d=[];return f&&(aL(o.domReference)&&(d=a0(o.domReference)),aL(o.floating)&&(d=d.concat(a0(o.floating))),!aL(o.reference)&&o.reference&&o.reference.contextElement&&(d=d.concat(a0(o.reference.contextElement)))),(d=d.filter(e=>e!==u.defaultView?.visualViewport)).forEach(e=>{e.addEventListener(\"scroll\",t,{passive:!0})}),()=>{u.removeEventListener(\"pointerdown\",O,!0),l&&(u.removeEventListener(\"keydown\",x?T:P,x),u.removeEventListener(\"compositionstart\",s),u.removeEventListener(\"compositionend\",c)),y&&(u.removeEventListener(\"click\",C?L:z,C),u.removeEventListener(\"pointerdown\",C?L:z,C),u.removeEventListener(\"pointermove\",N,C),u.removeEventListener(\"pointerup\",R,C),u.removeEventListener(\"mousedown\",L,C)),d.forEach(e=>{e.removeEventListener(\"scroll\",t)}),e.clear()}},[a,o,l,y,c,n,r,f,i,b,A,P,x,T,z,C,L,D,N,R,O]),w.useEffect(()=>{a.current.insideReactTree=!1},[a,y]);let M=w.useMemo(()=>({onKeyDown:P,...u&&{[iH[d]]:e=>{r(!1,e.nativeEvent,\"reference-press\")},...\"intentional\"!==d&&{onClick(e){r(!1,e.nativeEvent,\"reference-press\")}}}}),[P,r,u,d]),Z=ah(e=>{let t=ib(e.nativeEvent);iv(o.floating,t)&&(v.current=!0)}),U=ah(()=>{a.current.insideReactTree=!0,E.start(0,()=>{a.current.insideReactTree=!1})}),F=w.useMemo(()=>({onKeyDown:P,onMouseDown:Z,onMouseUp:Z,onPointerDownCapture:U,onMouseDownCapture:U,onClickCapture:U}),[P,Z,U]);return w.useMemo(()=>i?{reference:M,floating:F}:{},[i,M,F])}let iW=new Map([[\"select\",\"listbox\"],[\"combobox\",\"listbox\"],[\"label\",!1]]),iY=[\"top\",\"right\",\"bottom\",\"left\"],iK=Math.min,iX=Math.max,iG=Math.round,iQ=Math.floor,iJ=e=>({x:e,y:e}),i0={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"},i1={start:\"end\",end:\"start\"};function i2(e,t){return\"function\"==typeof e?e(t):e}function i4(e){return e.split(\"-\")[0]}function i5(e){return e.split(\"-\")[1]}function i3(e){return\"x\"===e?\"y\":\"x\"}function i6(e){return\"y\"===e?\"height\":\"width\"}let i9=new Set([\"top\",\"bottom\"]);function i8(e){return i9.has(i4(e))?\"y\":\"x\"}function i7(e){return e.replace(/start|end/g,e=>i1[e])}let le=[\"left\",\"right\"],lt=[\"right\",\"left\"],ln=[\"top\",\"bottom\"],lr=[\"bottom\",\"top\"];function lo(e){return e.replace(/left|right|bottom|top/g,e=>i0[e])}function la(e){return\"number\"!=typeof e?{top:0,right:0,bottom:0,left:0,...e}:{top:e,right:e,bottom:e,left:e}}function li(e){let{x:t,y:n,width:r,height:o}=e;return{width:r,height:o,top:n,left:t,right:t+r,bottom:n+o,x:t,y:n}}function ll(e,t,n){return Math.floor(e/t)!==n}function ls(e,t){return t<0||t>=e.current.length}function lc(e,t){return ld(e,{disabledIndices:t})}function lu(e,t){return ld(e,{decrement:!0,startingIndex:e.current.length,disabledIndices:t})}function ld(e,{startingIndex:t=-1,decrement:n=!1,disabledIndices:r,amount:o=1}={}){let a=t;do a+=n?-o:o;while(a>=0&&a<=e.current.length-1&&lf(e,a,r));return a}function lf(e,t,n){if(\"function\"==typeof n)return n(t);if(n)return n.includes(t);let r=e.current[t];return null==r||r.hasAttribute(\"disabled\")||\"true\"===r.getAttribute(\"aria-disabled\")}let lp=0;function lh(e,t={}){let{preventScroll:n=!1,cancelPrevious:r=!0,sync:o=!1}=t;r&&cancelAnimationFrame(lp);let a=()=>e?.focus({preventScroll:n});o?a():lp=requestAnimationFrame(a)}function lm(e,t,n){switch(e){case\"vertical\":return t;case\"horizontal\":return n;default:return t||n}}function lg(e,t){return lm(t,e===im||e===ig,e===ip||e===ih)}function ly(e,t,n){return lm(t,e===ig,n?e===ip:e===ih)||\"Enter\"===e||\" \"===e||\"\"===e}function lv(e=[]){let t=e.map(e=>e?.reference),n=e.map(e=>e?.floating),r=e.map(e=>e?.item),o=w.useCallback(t=>lb(t,e,\"reference\"),t),a=w.useCallback(t=>lb(t,e,\"floating\"),n),i=w.useCallback(t=>lb(t,e,\"item\"),r);return w.useMemo(()=>({getReferenceProps:o,getFloatingProps:a,getItemProps:i}),[o,a,i])}function lb(e,t,n){let r=new Map,o=\"item\"===n,a={};for(let t in\"floating\"===n&&(a.tabIndex=-1,a[ic]=\"\"),e)o&&e&&(t===iu||t===id)||(a[t]=e[t]);for(let i=0;i<t.length;i+=1){let l,s=t[i]?.[n];(l=\"function\"==typeof s?e?s(e):null:s)&&lA(a,l,o,r)}return lA(a,e,o,r),a}function lA(e,t,n,r){for(let o in t){let a=t[o];n&&(o===iu||o===id)||(o.startsWith(\"on\")?(r.has(o)||r.set(o,[]),\"function\"==typeof a&&(r.get(o)?.push(a),e[o]=(...e)=>r.get(o)?.map(t=>t(...e)).find(e=>void 0!==e))):e[o]=a)}}let lx=w.createContext(void 0);function lw(e){let t=w.useContext(lx);if(void 0===t&&!e)throw Error(\"Base UI: MenuRootContext is missing. Menu parts must be placed within <Menu.Root>.\");return t}let lC=w.createContext(null);function l_(e,t=!1,n=!1){let[r,o]=w.useState(e&&t?\"idle\":void 0),[a,i]=w.useState(e);return e&&!a&&(i(!0),o(\"starting\")),e||!a||\"ending\"===r||n||o(\"ending\"),e||a||\"ending\"!==r||o(void 0),aC(()=>{if(!e&&a&&\"ending\"!==r&&n){let e=iN.request(()=>{o(\"ending\")});return()=>{iN.cancel(e)}}},[e,a,r,n]),aC(()=>{if(!e||t)return;let n=iN.request(()=>{eh.flushSync(()=>{o(void 0)})});return()=>{iN.cancel(n)}},[t,e]),aC(()=>{if(!e||!t)return;e&&a&&\"idle\"!==r&&o(\"starting\");let n=iN.request(()=>{o(\"idle\")});return()=>{iN.cancel(n)}},[t,e,a,o,r]),w.useMemo(()=>({mounted:a,setMounted:i,transitionStatus:r}),[a,r])}function lk(e){let{enabled:t=!0,open:n,ref:r,onComplete:o}=e,a=a2(n),i=ah(o),l=function(e,t=!1){let n=iR();return ah((r,o=null)=>{let a;if(n.cancel(),null!=e){if(\"current\"in e){if(null==e.current)return;a=e.current}else a=e;\"function\"!=typeof a.getAnimations||globalThis.BASE_UI_ANIMATIONS_DISABLED?r():n.request(()=>{function e(){a&&Promise.allSettled(a.getAnimations().map(e=>e.finished)).then(()=>{null!=o&&o.aborted||eh.flushSync(r)})}t?n.request(e):e()})}})}(r,n);w.useEffect(()=>{t&&l(()=>{n===a.current&&i()})},[t,n,i,l,a])}let lE=w.createContext(void 0);function lj(e=!0){let t=w.useContext(lE);if(void 0===t&&!e)throw Error(\"Base UI: DirectionContext is missing.\");return t?.direction??\"ltr\"}function lS(e){return e?.ownerDocument||document}let lO=()=>{},lB={},lP={},lI=\"\";class lT{lockCount=0;restore=null;timeoutLock=au.create();timeoutUnlock=au.create();acquire(e){return this.lockCount+=1,1===this.lockCount&&null===this.restore&&this.timeoutLock.start(0,()=>this.lock(e)),this.release}release=()=>{this.lockCount-=1,0===this.lockCount&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{0===this.lockCount&&this.restore&&(this.restore?.(),this.restore=null)};lock(e){if(0===this.lockCount||null!==this.restore)return;let t=lS(e).documentElement,n=aT(t).getComputedStyle(t).overflowY;if(\"hidden\"===n||\"clip\"===n){this.restore=lO;return}let r=a7||!function(e){if(\"undefined\"==typeof document)return!1;let t=lS(e);return aT(t).innerWidth-t.documentElement.clientWidth>0}(e);this.restore=r?function(e){let t=lS(e).documentElement,n=t.style.overflow;return t.style.overflow=\"hidden\",()=>{t.style.overflow=n}}(e):function(e){let t=lS(e),n=t.documentElement,r=t.body,o=aT(n),a=0,i=0,l=iN.create();if(a8&&(o.visualViewport?.scale??1)!==1)return()=>{};function s(){let e=o.getComputedStyle(n),t=o.getComputedStyle(r);a=n.scrollTop,i=n.scrollLeft,lB={scrollbarGutter:n.style.scrollbarGutter,overflowY:n.style.overflowY,overflowX:n.style.overflowX},lI=n.style.scrollBehavior,lP={position:r.style.position,height:r.style.height,width:r.style.width,boxSizing:r.style.boxSizing,overflowY:r.style.overflowY,overflowX:r.style.overflowX,scrollBehavior:r.style.scrollBehavior};let l=\"undefined\"!=typeof CSS&&CSS.supports?.(\"scrollbar-gutter\",\"stable\"),s=n.scrollHeight>n.clientHeight,c=n.scrollWidth>n.clientWidth,u=\"scroll\"===e.overflowY||\"scroll\"===t.overflowY,d=\"scroll\"===e.overflowX||\"scroll\"===t.overflowX,f=Math.max(0,o.innerWidth-n.clientWidth),p=Math.max(0,o.innerHeight-n.clientHeight),h=parseFloat(t.marginTop)+parseFloat(t.marginBottom),m=parseFloat(t.marginLeft)+parseFloat(t.marginRight);Object.assign(n.style,{scrollbarGutter:\"stable\",overflowY:!l&&(s||u)?\"scroll\":\"hidden\",overflowX:!l&&(c||d)?\"scroll\":\"hidden\"}),Object.assign(r.style,{position:\"relative\",height:h||p?`calc(100dvh - ${h+p}px)`:\"100dvh\",width:m||f?`calc(100vw - ${m+f}px)`:\"100vw\",boxSizing:\"border-box\",overflow:\"hidden\",scrollBehavior:\"unset\"}),r.scrollTop=a,r.scrollLeft=i,n.setAttribute(\"data-base-ui-scroll-locked\",\"\"),n.style.scrollBehavior=\"unset\"}function c(){Object.assign(n.style,lB),Object.assign(r.style,lP),n.scrollTop=a,n.scrollLeft=i,n.removeAttribute(\"data-base-ui-scroll-locked\"),n.style.scrollBehavior=lI}function u(){c(),l.request(s)}return s(),o.addEventListener(\"resize\",u),()=>{l.cancel(),c(),o.removeEventListener(\"resize\",u)}}(e)}}let lz=new lT;function lD(e){if(e)return({\"focus-out\":\"focus-out\",\"escape-key\":\"escape-key\",\"outside-press\":\"outside-press\",\"list-navigation\":\"list-navigation\",click:\"trigger-press\",hover:\"trigger-hover\",focus:\"trigger-focus\",\"reference-press\":\"trigger-press\",\"safe-polygon\":\"trigger-hover\",\"ancestor-scroll\":void 0})[e]}let lL=w.createContext(void 0);function lN(e=!0){let t=w.useContext(lL);if(void 0===t&&!e)throw Error(\"Base UI: ContextMenuRootContext is missing. ContextMenu parts must be placed within <ContextMenu.Root>.\");return t}let lR=w.createContext(!1);function lM(e,t){return e&&!t?e:!e&&t?t:e||t?{...e,...t}:void 0}let lZ={};function lU(e,t,n,r,o){let a={...lH(e,lZ)};return t&&(a=lF(a,t)),n&&(a=lF(a,n)),r&&(a=lF(a,r)),o&&(a=lF(a,o)),a}function lF(e,t){return lq(t)?t(e):function(e,t){if(!t)return e;for(let n in t){let r=t[n];switch(n){case\"style\":e[n]=lM(e.style,r);break;case\"className\":e[n]=l$(e.className,r);break;default:!function(e,t){let n=e.charCodeAt(0),r=e.charCodeAt(1),o=e.charCodeAt(2);return 111===n&&110===r&&o>=65&&o<=90&&(\"function\"==typeof t||void 0===t)}(n,r)?e[n]=r:e[n]=function(e,t){return t?e?n=>{var r;if(null!=(r=n)&&\"object\"==typeof r&&\"nativeEvent\"in r){lV(n);let r=t(n);return n.baseUIHandlerPrevented||e?.(n),r}let o=t(n);return e?.(n),o}:t:e}(e[n],r)}}return e}(e,t)}function lq(e){return\"function\"==typeof e}function lH(e,t){return lq(e)?e(t):e??lZ}function lV(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function l$(e,t){return t?e?t+\" \"+e:t:e}let lW=[],lY={current:!1},lK=function(e){let t,n,{children:r,open:o,onOpenChange:a,onOpenChangeComplete:i,defaultOpen:l=!1,disabled:s=!1,modal:c,loop:u=!0,orientation:d=\"vertical\",actionsRef:f,openOnHover:p,delay:h=100,closeDelay:m=0,closeParentOnEsc:g=!0}=e,[y,v]=w.useState(null),[b,x]=w.useState(null),[C,_]=w.useState(),[k,E]=w.useState(!0),[j,S]=w.useState(null),[O,B]=w.useState(null),[P,I]=w.useState(!0),[T,z]=w.useState(!1),D=w.useRef(null),L=w.useRef(null),N=w.useRef(null),R=w.useRef([]),M=w.useRef([]),Z=ad(),U=lN(!0),F=w.useContext(lR);{let e=lw(!0),n=function(e){let t=w.useContext(lC);if(null===t&&!e)throw Error(\"Base UI: MenubarContext is missing. Menubar parts must be placed within <Menubar>.\");return t}(!0);t=F&&e?{type:\"menu\",context:e}:n?{type:\"menubar\",context:n}:U?{type:\"context-menu\",context:U}:{type:void 0}}let q=ax();void 0!==t.type&&(q=t.context.rootId);let H=(void 0===t.type||\"context-menu\"===t.type)&&(c??!0),V=\"menu\"===t.type?t.context.allowMouseEnter:T,$=\"menu\"===t.type?t.context.setAllowMouseEnter:z,W=p??(\"menu\"===t.type||\"menubar\"===t.type&&t.context.hasSubmenuOpen),[Y,K]=ay({controlled:o,default:l,name:\"MenuRoot\",state:\"open\"}),X=w.useRef(\"context-menu\"!==t.type),G=ad();w.useEffect(()=>{if(Y||(D.current=null),\"context-menu\"===t.type){if(!Y){G.clear(),X.current=!1;return}G.start(500,()=>{X.current=!0})}},[G,Y,t.type]);let Q=w.useCallback(e=>{N.current=e,x(e)},[]),{mounted:J,setMounted:ee,transitionStatus:et}=l_(Y),{openMethod:en,triggerProps:er,reset:eo}=function(e){let[t,n]=w.useState(null),r=ah((t,r)=>{e||n(r)}),o=ah(()=>{n(null)}),{onClick:a,onPointerDown:i}=function(e){let t=w.useRef(\"\"),n=w.useCallback(n=>{n.defaultPrevented||(t.current=n.pointerType,e(n,n.pointerType))},[e]);return{onClick:w.useCallback(n=>{if(0===n.detail)return void e(n,\"keyboard\");\"pointerType\"in n&&e(n,n.pointerType),e(n,t.current),t.current=\"\"},[e]),onPointerDown:n}}(r);return w.useMemo(()=>({openMethod:t,reset:o,triggerProps:{onClick:a,onPointerDown:i}}),[t,o,a,i])}(Y);var ea={enabled:Y&&H&&\"trigger-hover\"!==O&&\"touch\"!==en,mounted:J,open:Y,referenceElement:b};let{enabled:ei=!0,mounted:el,open:es,referenceElement:ec=null}=ea;aC(()=>{if(ei&&a8&&el&&!es){let e=lS(ec),t=e.body.style.userSelect,n=e.body.style.webkitUserSelect;return e.body.style.userSelect=\"none\",e.body.style.webkitUserSelect=\"none\",()=>{e.body.style.userSelect=t,e.body.style.webkitUserSelect=n}}},[ei,el,es,ec]),aC(()=>{if(ei)return lz.acquire(ec)},[ei,ec]),Y||k||E(!0);let eu=ah(()=>{ee(!1),I(!0),$(!1),i?.(!1),eo()});lk({enabled:!f,open:Y,ref:L,onComplete(){Y||eu()}});let ed=w.useRef(!0),ef=ad(),ep=ah((e,n,r)=>{if(Y===e||!1===e&&n?.type===\"click\"&&\"touch\"===n.pointerType&&!ed.current)return;if(!e&&null!==j){let e=R.current[j];queueMicrotask(()=>{e?.setAttribute(\"tabindex\",\"-1\")})}e&&\"trigger-focus\"===r?(ed.current=!1,ef.start(300,()=>{ed.current=!0})):(ed.current=!0,ef.clear());let o=(\"trigger-press\"===r||\"item-press\"===r)&&0===n.detail&&n?.isTrusted,i=!e&&(\"escape-key\"===r||null==r);function l(){a?.(e,n,r),K(e),B(r??null),D.current=n??null}\"trigger-hover\"===r?(I(!0),Z.start(500,()=>{I(!1)}),eh.flushSync(l)):l(),\"menubar\"===t.type&&(\"trigger-focus\"===r||\"focus-out\"===r||\"trigger-hover\"===r||\"list-navigation\"===r||\"sibling-open\"===r)?_(\"group\"):o||i?_(o?\"click\":\"dismiss\"):_(void 0)});w.useImperativeHandle(f,()=>({unmount:eu}),[eu]),\"context-menu\"===t.type&&(n=t.context),w.useImperativeHandle(n?.positionerRef,()=>b,[b]),w.useImperativeHandle(n?.actionsRef,()=>({setOpen:ep}),[ep]),w.useEffect(()=>{Y||Z.clear()},[Z,Y]);let em=aB({elements:{reference:y,floating:b},open:Y,onOpenChange(e,t,n){ep(e,t,lD(n))}}),eg=iO(em,{enabled:k&&W&&!s&&\"context-menu\"!==t.type&&(\"menubar\"!==t.type||t.context.hasSubmenuOpen&&!Y),handleClose:iT({blockPointerEvents:!0}),mouseOnly:!0,move:\"menu\"===t.type,restMs:void 0===t.type||\"menu\"===t.type&&V?h:void 0,delay:\"menu\"===t.type?{open:V?h:1e10,close:m}:{close:m}}),ey=iD(em,{enabled:!s&&!Y&&\"menubar\"===t.type&&t.context.hasSubmenuOpen&&!U}),ev=function(e,t={}){let{open:n,onOpenChange:r,dataRef:o}=e,{enabled:a=!0,event:i=\"click\",toggle:l=!0,ignoreMouse:s=!1,stickIfOpen:c=!0}=t,u=w.useRef(void 0),d=iR(),f=w.useMemo(()=>({onPointerDown(e){u.current=e.pointerType},onMouseDown(e){let t=u.current,a=e.nativeEvent;if(0!==e.button||\"click\"===i||is(t,!0)&&s)return;let f=o.current.openEvent,p=f?.type,h=!(n&&l&&(!f||!c||\"click\"===p||\"mousedown\"===p));d.request(()=>{r(h,a,\"click\")})},onClick(e){let t=u.current;if(\"mousedown\"===i&&t){u.current=void 0;return}if(is(t,!0)&&s)return;let a=o.current.openEvent,d=a?.type;r(!(n&&l&&(!a||!c||\"click\"===d||\"mousedown\"===d||\"keydown\"===d||\"keyup\"===d)),e.nativeEvent,\"click\")},onKeyDown(){u.current=void 0}}),[o,i,s,r,n,c,l,d]);return w.useMemo(()=>a?{reference:f}:iZ,[a,f])}(em,{enabled:!s&&\"context-menu\"!==t.type,event:Y&&\"menubar\"===t.type?\"click\":\"mousedown\",toggle:!W||\"menu\"!==t.type,ignoreMouse:W&&\"menu\"===t.type,stickIfOpen:void 0===t.type&&P}),eb=i$(em,{enabled:!s,bubbles:g&&\"menu\"===t.type,outsidePress:()=>\"context-menu\"!==t.type||D.current?.type===\"contextmenu\"||X.current}),eA=function(e,t={}){let{open:n,elements:r,floatingId:o}=e,{enabled:a=!0,role:i=\"dialog\"}=t,l=ax(),s=r.domReference?.id||l,c=w.useMemo(()=>i_(r.floating)?.id||o,[r.floating,o]),u=iW.get(i)??i,d=null!=aE(),f=w.useMemo(()=>\"tooltip\"===u||\"label\"===i?{[`aria-${\"label\"===i?\"labelledby\":\"describedby\"}`]:n?c:void 0}:{\"aria-expanded\":n?\"true\":\"false\",\"aria-haspopup\":\"alertdialog\"===u?\"dialog\":u,\"aria-controls\":n?c:void 0,...\"listbox\"===u&&{role:\"combobox\"},...\"menu\"===u&&{id:s},...\"menu\"===u&&d&&{role:\"menuitem\"},...\"select\"===i&&{\"aria-autocomplete\":\"none\"},...\"combobox\"===i&&{\"aria-autocomplete\":\"list\"}},[u,c,d,n,s,i]),p=w.useMemo(()=>{let e={id:c,...u&&{role:u}};return\"tooltip\"===u||\"label\"===i?e:{...e,...\"menu\"===u&&{\"aria-labelledby\":s}}},[u,c,s,i]),h=w.useCallback(({active:e,selected:t})=>{let n={role:\"option\",...e&&{id:`${c}-fui-option`}};switch(i){case\"select\":case\"combobox\":return{...n,\"aria-selected\":t}}return{}},[c,i]);return w.useMemo(()=>a?{reference:f,floating:p,item:h}:{},[a,f,p,h])}(em,{role:\"menu\"}),ex=lj(),ew=function(e,t){let{open:n,onOpenChange:r,elements:o,floatingId:a}=e,{listRef:i,activeIndex:l,onNavigate:s=()=>{},enabled:c=!0,selectedIndex:u=null,allowEscape:d=!1,loop:f=!1,nested:p=!1,rtl:h=!1,virtual:m=!1,focusItemOnOpen:g=\"auto\",focusItemOnHover:y=!0,openOnArrowKeyDown:v=!0,disabledIndices:b,orientation:A=\"vertical\",parentOrientation:x,cols:C=1,scrollItemIntoView:_=!0,virtualItemRef:k,itemSizes:E,dense:j=!1}=t,S=a2(i_(o.floating)),O=aE(),B=aj();aC(()=>{e.dataRef.current.orientation=A},[e,A]);let P=iC(o.domReference),I=w.useRef(g),T=w.useRef(u??-1),z=w.useRef(null),D=w.useRef(!0),L=ah(()=>{s(-1===T.current?null:T.current)}),N=w.useRef(L),R=w.useRef(!!o.floating),M=w.useRef(n),Z=w.useRef(!1),U=w.useRef(!1),F=a2(b),q=a2(n),H=a2(_),V=a2(u),[$,W]=w.useState(),Y=ah(()=>{function e(e){m?(e.id?.endsWith(\"-fui-option\")&&(e.id=`${a}-${Math.random().toString(16).slice(2,10)}`),W(e.id),B?.events.emit(\"virtualfocus\",e),k&&(k.current=e)):lh(e,{sync:Z.current,preventScroll:!0})}let t=i.current[T.current],n=U.current;t&&e(t),(Z.current?e=>e():requestAnimationFrame)(()=>{let r=i.current[T.current]||t;if(!r)return;t||e(r);let o=H.current;o&&X&&(n||!D.current)&&r.scrollIntoView?.(\"boolean\"==typeof o?{block:\"nearest\",inline:\"nearest\"}:o)})});aC(()=>{c&&(n&&o.floating?I.current&&null!=u&&(U.current=!0,T.current=u,L()):R.current&&(T.current=-1,N.current()))},[c,n,o.floating,u,L]),aC(()=>{if(c&&n&&o.floating)if(null==l){if(Z.current=!1,null!=V.current)return;if(R.current&&(T.current=-1,Y()),(!M.current||!R.current)&&I.current&&(null!=z.current||!0===I.current&&null==z.current)){let e=0,t=()=>{null==i.current[0]?(e<2&&(e?requestAnimationFrame:queueMicrotask)(t),e+=1):(T.current=null==z.current||ly(z.current,A,h)||p?lc(i,F.current):lu(i,F.current),z.current=null,L())};t()}}else ls(i,l)||(T.current=l,Y(),U.current=!1)},[c,n,o.floating,l,V,p,i,A,h,L,Y,F]),aC(()=>{if(!c||o.floating||!B||m||!R.current)return;let e=B.nodesRef.current,t=e.find(e=>e.id===O)?.context?.elements.floating,n=iy(ix(o.floating)),r=e.some(e=>e.context&&iv(e.context.elements.floating,n));t&&!r&&D.current&&t.focus({preventScroll:!0})},[c,o.floating,B,O,m]),aC(()=>{N.current=L,M.current=n,R.current=!!o.floating}),aC(()=>{n||(z.current=null,I.current=g)},[n,g]);let K=null!=l,X=w.useMemo(()=>{function e(e){if(!q.current)return;let t=i.current.indexOf(e);-1!==t&&T.current!==t&&(T.current=t,L())}return{onFocus({currentTarget:t}){Z.current=!0,e(t)},onClick:({currentTarget:e})=>e.focus({preventScroll:!0}),onMouseMove({currentTarget:t}){Z.current=!0,U.current=!1,y&&e(t)},onPointerLeave({pointerType:e}){D.current&&\"touch\"!==e&&(Z.current=!0,y&&(T.current=-1,L(),m||S.current?.focus({preventScroll:!0})))}}},[q,S,y,i,L,m]),G=w.useCallback(()=>x??B?.nodesRef.current.find(e=>e.id===O)?.context?.dataRef?.current.orientation,[O,B,x]),Q=ah(e=>{var t,a,l,s,c;if(D.current=!1,Z.current=!0,229===e.which||!q.current&&e.currentTarget===S.current)return;if(p&&(t=e.key,a=A,l=h,s=C,\"both\"===a||\"horizontal\"===a&&s&&s>1?\"Escape\"===t:lm(a,l?t===ih:t===ip,t===im))){lg(e.key,G())||ia(e),r(!1,e.nativeEvent,\"list-navigation\"),aN(o.domReference)&&(m?B?.events.emit(\"virtualfocus\",o.domReference):o.domReference.focus());return}let u=T.current,g=lc(i,b),y=lu(i,b);if(P||(\"Home\"===e.key&&(ia(e),T.current=g,L()),\"End\"===e.key&&(ia(e),T.current=y,L())),C>1){let t=E||Array.from({length:i.current.length},()=>({width:1,height:1})),n=function(e,t,n){let r=[],o=0;return e.forEach(({width:e,height:a},i)=>{let l=!1;for(n&&(o=0);!l;){let n=[];for(let r=0;r<e;r+=1)for(let e=0;e<a;e+=1)n.push(o+r+e*t);o%t+e<=t&&n.every(e=>null==r[e])?(n.forEach(e=>{r[e]=i}),l=!0):o+=1}}),[...r]}(t,C,j),r=n.findIndex(e=>null!=e&&!lf(i,e,b)),o=n.reduce((e,t,n)=>null==t||lf(i,t,b)?e:n,-1),a=n[function(e,{event:t,orientation:n,loop:r,rtl:o,cols:a,disabledIndices:i,minIndex:l,maxIndex:s,prevIndex:c,stopEvent:u=!1}){let d=c;if(t.key===im){if(u&&ia(t),-1===c)d=s;else if(d=ld(e,{startingIndex:d,amount:a,decrement:!0,disabledIndices:i}),r&&(c-a<l||d<0)){let e=c%a,t=s%a,n=s-(t-e);d=t===e?s:t>e?n:n-a}ls(e,d)&&(d=c)}if(t.key===ig&&(u&&ia(t),-1===c?d=l:(d=ld(e,{startingIndex:c,amount:a,disabledIndices:i}),r&&c+a>s&&(d=ld(e,{startingIndex:c%a-a,amount:a,disabledIndices:i}))),ls(e,d)&&(d=c)),\"both\"===n){let n=iQ(c/a);t.key===(o?ip:ih)&&(u&&ia(t),c%a!=a-1?(d=ld(e,{startingIndex:c,disabledIndices:i}),r&&ll(d,a,n)&&(d=ld(e,{startingIndex:c-c%a-1,disabledIndices:i}))):r&&(d=ld(e,{startingIndex:c-c%a-1,disabledIndices:i})),ll(d,a,n)&&(d=c)),t.key===(o?ih:ip)&&(u&&ia(t),c%a!=0?(d=ld(e,{startingIndex:c,decrement:!0,disabledIndices:i}),r&&ll(d,a,n)&&(d=ld(e,{startingIndex:c+(a-c%a),decrement:!0,disabledIndices:i}))):r&&(d=ld(e,{startingIndex:c+(a-c%a),decrement:!0,disabledIndices:i})),ll(d,a,n)&&(d=c));let l=iQ(s/a)===n;ls(e,d)&&(d=r&&l?t.key===(o?ih:ip)?s:ld(e,{startingIndex:c-c%a-1,disabledIndices:i}):c)}return d}({current:n.map(e=>null!=e?i.current[e]:null)},{event:e,orientation:A,loop:f,rtl:h,cols:C,disabledIndices:(c=[...(\"function\"!=typeof b?b:null)||i.current.map((e,t)=>lf(i,t,b)?t:void 0),void 0],n.flatMap((e,t)=>c.includes(e)?[t]:[])),minIndex:r,maxIndex:o,prevIndex:function(e,t,n,r,o){if(-1===e)return -1;let a=n.indexOf(e),i=t[e];switch(o){case\"tl\":return a;case\"tr\":if(!i)return a;return a+i.width-1;case\"bl\":if(!i)return a;return a+(i.height-1)*r;case\"br\":return n.lastIndexOf(e);default:return -1}}(T.current>y?g:T.current,t,n,C,e.key===ig?\"bl\":e.key===(h?ip:ih)?\"tr\":\"tl\"),stopEvent:!0})];if(null!=a&&(T.current=a,L()),\"both\"===A)return}if(lg(e.key,A)){if(ia(e),n&&!m&&iy(e.currentTarget.ownerDocument)===e.currentTarget){T.current=ly(e.key,A,h)?g:y,L();return}ly(e.key,A,h)?f?T.current=u>=y?d&&u!==i.current.length?-1:g:ld(i,{startingIndex:u,disabledIndices:b}):T.current=Math.min(y,ld(i,{startingIndex:u,disabledIndices:b})):f?T.current=u<=g?d&&-1!==u?i.current.length:y:ld(i,{startingIndex:u,decrement:!0,disabledIndices:b}):T.current=Math.max(g,ld(i,{startingIndex:u,decrement:!0,disabledIndices:b})),ls(i,T.current)&&(T.current=-1),L()}}),J=w.useMemo(()=>m&&n&&K&&{\"aria-activedescendant\":$},[m,n,K,$]),ee=w.useMemo(()=>({\"aria-orientation\":\"both\"===A?void 0:A,...!P?J:{},onKeyDown(e){if(\"Tab\"===e.key&&e.shiftKey&&n&&!m){ia(e),r(!1,e.nativeEvent,\"list-navigation\"),aN(o.domReference)&&o.domReference.focus();return}Q(e)},onPointerMove(){D.current=!0}}),[J,Q,A,P,r,n,m,o.domReference]),et=w.useMemo(()=>{function e(e){\"auto\"===g&&ii(e.nativeEvent)&&(I.current=!0)}function t(e){I.current=g,\"auto\"===g&&il(e.nativeEvent)&&(I.current=!0)}return{...J,onKeyDown(e){var t,o;D.current=!1;let a=e.key.startsWith(\"Arrow\"),l=(t=e.key,o=G(),lm(o,h?t===ip:t===ih,t===ig)),s=lg(e.key,A),c=(p?l:s)||\"Enter\"===e.key||\"\"===e.key.trim();if(m&&n)return Q(e);if(n||v||!a){if(c){let t=lg(e.key,G());z.current=p&&t?null:e.key}if(p){l&&(ia(e),n?(T.current=lc(i,F.current),L()):r(!0,e.nativeEvent,\"list-navigation\"));return}s&&(null!=u&&(T.current=u),ia(e),!n&&v?r(!0,e.nativeEvent,\"list-navigation\"):Q(e),n&&L())}},onFocus(){n&&!m&&(T.current=-1,L())},onPointerDown:t,onPointerEnter:t,onMouseDown:e,onClick:e}},[J,Q,F,g,i,p,L,r,n,v,A,G,h,u,m]);return w.useMemo(()=>c?{reference:et,floating:ee,item:X}:{},[c,et,ee,X])}(em,{enabled:!s,listRef:R,activeIndex:j,nested:void 0!==t.type,loop:u,orientation:d,parentOrientation:\"menubar\"===t.type?t.context.orientation:void 0,rtl:\"rtl\"===ex,disabledIndices:lW,onNavigate:S,openOnArrowKeyDown:\"context-menu\"!==t.type}),eC=w.useRef(!1),e_=function(e,t){let{open:n,dataRef:r}=e,{listRef:o,activeIndex:a,onMatch:i,onTypingChange:l,enabled:s=!0,findMatch:c=null,resetMs:u=750,ignoreKeys:d=[],selectedIndex:f=null}=t,p=ad(),h=w.useRef(\"\"),m=w.useRef(f??a??-1),g=w.useRef(null),y=ah(i),v=ah(l),b=a2(c),A=a2(d);aC(()=>{n&&(p.clear(),g.current=null,h.current=\"\")},[n,p]),aC(()=>{n&&\"\"===h.current&&(m.current=f??a??-1)},[n,f,a]);let x=ah(e=>{e?r.current.typing||(r.current.typing=e,v(e)):r.current.typing&&(r.current.typing=e,v(e))}),C=ah(e=>{function t(e,t,n){let r=b.current?b.current(t,n):t.find(e=>e?.toLocaleLowerCase().indexOf(n.toLocaleLowerCase())===0);return r?e.indexOf(r):-1}let r=o.current;if(h.current.length>0&&\" \"!==h.current[0]&&(-1===t(r,r,h.current)?x(!1):\" \"===e.key&&ia(e)),null==r||A.current.includes(e.key)||1!==e.key.length||e.ctrlKey||e.metaKey||e.altKey)return;n&&\" \"!==e.key&&(ia(e),x(!0)),r.every(e=>!e||e[0]?.toLocaleLowerCase()!==e[1]?.toLocaleLowerCase())&&h.current===e.key&&(h.current=\"\",m.current=g.current),h.current+=e.key,p.start(u,()=>{h.current=\"\",m.current=g.current,x(!1)});let a=m.current,i=t(r,[...r.slice((a||0)+1),...r.slice(0,(a||0)+1)],h.current);-1!==i?(y(i),g.current=i):\" \"!==e.key&&(h.current=\"\",x(!1))}),_=w.useMemo(()=>({onKeyDown:C}),[C]),k=w.useMemo(()=>({onKeyDown:C,onKeyUp(e){\" \"===e.key&&x(!1)}}),[C,x]);return w.useMemo(()=>s?{reference:_,floating:k}:{},[s,_,k])}(em,{listRef:M,activeIndex:j,resetMs:500,onMatch:e=>{Y&&e!==j&&S(e)},onTypingChange:w.useCallback(e=>{eC.current=e},[])}),{getReferenceProps:ek,getFloatingProps:eE,getItemProps:ej}=lv([eg,ev,eb,ey,eA,ew,e_]),eS=function(e){let{enabled:t=!0,mouseDownAction:n,open:r}=e,o=w.useRef(!1);return w.useMemo(()=>t?{onMouseDown:e=>{(\"open\"===n&&!r||\"close\"===n&&r)&&(o.current=!0,lS(e.currentTarget).addEventListener(\"click\",()=>{o.current=!1},{once:!0}))},onClick:e=>{o.current&&(o.current=!1,e.preventBaseUIHandler())}}:iZ,[t,n,r])}({open:Y,enabled:\"menubar\"===t.type,mouseDownAction:\"open\"}),eO=w.useMemo(()=>{let e=lU(ek(),{onMouseEnter(){E(!0)},onMouseMove(){$(!0)}},er,eS);return delete e.role,e},[ek,eS,$,er]),eB=w.useMemo(()=>eE({onMouseEnter(){W&&\"menu\"!==t.type||E(!1)},onMouseMove(){$(!0)},onClick(){W&&E(!1)}}),[eE,W,t.type,$]),eP=w.useMemo(()=>ej(),[ej]),eI=w.useMemo(()=>({activeIndex:j,setActiveIndex:S,allowMouseUpTriggerRef:t.type?t.context.allowMouseUpTriggerRef:lY,floatingRootContext:em,itemProps:eP,popupProps:eB,triggerProps:eO,itemDomElements:R,itemLabels:M,mounted:J,open:Y,popupRef:L,positionerRef:N,setOpen:ep,setPositionerElement:Q,triggerElement:y,setTriggerElement:v,transitionStatus:et,lastOpenChangeReason:O,instantType:C,onOpenChangeComplete:i,setHoverEnabled:E,typingRef:eC,modal:H,disabled:s,parent:t,rootId:q,allowMouseEnter:V,setAllowMouseEnter:$}),[j,em,eP,eB,eO,R,M,J,Y,N,ep,et,y,Q,O,C,i,H,s,t,q,V,$]),eT=(0,A.jsx)(lx.Provider,{value:eI,children:r});return void 0===t.type||\"context-menu\"===t.type?(0,A.jsx)(aO,{children:eT}):eT};function lX(e,t,n,r){var o,a,i,l,s;let c=al(lG).current;return o=c,a=e,i=t,l=n,s=r,(o.refs[0]!==a||o.refs[1]!==i||o.refs[2]!==l||o.refs[3]!==s)&&lQ(c,[e,t,n,r]),c.callback}function lG(){return{callback:null,cleanup:null,refs:[]}}function lQ(e,t){if(e.refs=t,t.every(e=>null==e)){e.callback=null;return}e.callback=n=>{if(e.cleanup&&(e.cleanup(),e.cleanup=null),null!=n){let r=Array(t.length).fill(null);for(let e=0;e<t.length;e+=1){let o=t[e];if(null!=o)switch(typeof o){case\"function\":{let t=o(n);\"function\"==typeof t&&(r[e]=t);break}case\"object\":o.current=n}}e.cleanup=()=>{for(let e=0;e<t.length;e+=1){let n=t[e];if(null!=n)switch(typeof n){case\"function\":{let t=r[e];\"function\"==typeof t?t():n(null);break}case\"object\":n.current=null}}}}}}let lJ=function(e){return e.startingStyle=\"data-starting-style\",e.endingStyle=\"data-ending-style\",e}({}),l0={[lJ.startingStyle]:\"\"},l1={[lJ.endingStyle]:\"\"},l2={transitionStatus:e=>\"starting\"===e?l0:\"ending\"===e?l1:null},l4=function(e){return e.open=\"data-open\",e.closed=\"data-closed\",e[e.startingStyle=lJ.startingStyle]=\"startingStyle\",e[e.endingStyle=lJ.endingStyle]=\"endingStyle\",e.anchorHidden=\"data-anchor-hidden\",e}({}),l5=function(e){return e.popupOpen=\"data-popup-open\",e.pressed=\"data-pressed\",e}({}),l3={[l5.popupOpen]:\"\"},l6={[l5.popupOpen]:\"\",[l5.pressed]:\"\"},l9={[l4.open]:\"\"},l8={[l4.closed]:\"\"},l7={[l4.anchorHidden]:\"\"},se={open:e=>e?l3:null},st={open:e=>e?l6:null},sn={open:e=>e?l9:l8,anchorHidden:e=>e?l7:null},sr=parseInt(w.version,10);function so(e,t,n={}){let r=t.render,o=function(e,t={}){var n,r;let o,{className:a,render:i}=e,{state:l=iZ,ref:s,props:c,disableStyleHooks:u,customStyleHookMapping:d,enabled:f=!0}=t,p=f?(n=a,r=l,\"function\"==typeof n?n(r):n):void 0;!0!==u&&(o=w.useMemo(()=>f?function(e,t){let n={};for(let r in e){let o=e[r];if(t?.hasOwnProperty(r)){let e=t[r](o);null!=e&&Object.assign(n,e);continue}!0===o?n[`data-${r.toLowerCase()}`]=\"\":o&&(n[`data-${r.toLowerCase()}`]=o.toString())}return n}(l,d):iZ,[l,d,f]));let h=f?lM(o,Array.isArray(c)?function(e){if(0===e.length)return lZ;if(1===e.length)return lH(e[0],lZ);let t={...lH(e[0],lZ)};for(let n=1;n<e.length;n+=1)t=lF(t,e[n]);return t}(c):c)??iZ:iZ;return(\"undefined\"!=typeof document&&(f?Array.isArray(s)?h.ref=function(e){var t,n;let r=al(lG).current;return t=r,n=e,(t.refs.length!==n.length||t.refs.some((e,t)=>e!==n[t]))&&lQ(r,e),r.callback}([h.ref,sa(i),...s]):h.ref=lX(h.ref,sa(i),s):lX(null,null)),f)?(void 0!==p&&(h.className=l$(h.className,p)),h):iZ}(t,n);return!1===n.enabled?null:function(e,t,n,r){if(t){if(\"function\"==typeof t)return t(n,r);let e=lU(n,t.props);return e.ref=n.ref,w.cloneElement(t,e)}if(e&&\"string\"==typeof e){var o,a;return o=e,a=n,\"button\"===o?(0,A.jsx)(\"button\",{type:\"button\",...a}):\"img\"===o?(0,A.jsx)(\"img\",{alt:\"\",...a}):w.createElement(o,a)}throw Error(\"Base UI: Render element or function are not defined.\")}(e,r,o,n.state??iZ)}function sa(e){return e&&\"function\"!=typeof e?sr>=19?e.props.ref:e.ref:null}let si=w.createContext(void 0);function sl(e=!1){let t=w.useContext(si);if(void 0===t&&!e)throw Error(\"Base UI: CompositeRootContext is missing. Composite parts must be placed within <Composite.Root>.\");return t}function ss(e={}){let{disabled:t=!1,focusableWhenDisabled:n,tabIndex:r=0,native:o=!0}=e,a=w.useRef(null),i=void 0!==sl(!0),l=ah(()=>{let e=a.current;return!!(e?.tagName===\"A\"&&e?.href)}),{props:s}=function(e){let{focusableWhenDisabled:t,disabled:n,composite:r=!1,tabIndex:o=0,isNativeButton:a}=e,i=r&&!1!==t,l=r&&!1===t;return{props:w.useMemo(()=>{let e={onKeyDown(e){n&&t&&\"Tab\"!==e.key&&e.preventDefault()}};return r||(e.tabIndex=o,!a&&n&&(e.tabIndex=t?o:-1)),(a&&(t||i)||!a&&n)&&(e[\"aria-disabled\"]=n),a&&(!t||l)&&(e.disabled=n),e},[r,n,t,i,l,a,o])}}({focusableWhenDisabled:n,disabled:t,composite:i,tabIndex:r,isNativeButton:o});return aC(()=>{let e=a.current;e instanceof HTMLButtonElement&&i&&t&&void 0===s.disabled&&e.disabled&&(e.disabled=!1)},[t,s.disabled,i]),{getButtonProps:w.useCallback((e={})=>{let{onClick:n,onMouseDown:r,onKeyUp:a,onKeyDown:i,onPointerDown:c,...u}=e;return lU({type:o?\"button\":void 0,onClick(e){if(t)return void e.preventDefault();n?.(e)},onMouseDown(e){t||r?.(e)},onKeyDown(e){if(t||(lV(e),i?.(e)),e.baseUIHandlerPrevented)return;let r=e.target===e.currentTarget&&!o&&!l()&&!t,a=\"Enter\"===e.key,s=\" \"===e.key;r&&((s||a)&&e.preventDefault(),a&&n?.(e))},onKeyUp(e){t||(lV(e),a?.(e)),!e.baseUIHandlerPrevented&&(e.target!==e.currentTarget||o||t||\" \"!==e.key||n?.(e))},onPointerDown(e){if(t)return void e.preventDefault();c?.(e)}},o?void 0:{role:\"button\"},s,u)},[t,s,o,l]),buttonRef:a}}let sc=w.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},elementsRef:{current:[]},nextIndexRef:{current:0}}),su=function(e){return e[e.None=0]=\"None\",e[e.GuessFromOrder=1]=\"GuessFromOrder\",e}({});function sd(e={}){let{label:t,metadata:n,textRef:r,indexGuessBehavior:o}=e,{register:a,unregister:i,subscribeMapChange:l,elementsRef:s,labelsRef:c,nextIndexRef:u}=w.useContext(sc),d=w.useRef(-1),[f,p]=w.useState(o===su.GuessFromOrder?()=>{if(-1===d.current){let e=u.current;u.current+=1,d.current=e}return d.current}:-1),h=w.useRef(null),m=w.useCallback(e=>{if(h.current=e,-1!==f&&null!==e&&(s.current[f]=e,c)){let n=void 0!==t;c.current[f]=n?t:r?.current?.textContent??e.textContent}},[f,s,c,t,r]);return aC(()=>{let e=h.current;if(e)return a(e,n),()=>{i(e)}},[a,i,n]),aC(()=>l(e=>{let t=h.current?e.get(h.current)?.index:null;null!=t&&p(t)}),[l,p]),w.useMemo(()=>({ref:m,index:f}),[f,m])}function sf(e){let{render:t,className:n,state:r=iZ,props:o=iU,refs:a=iU,metadata:i,customStyleHookMapping:l,tag:s=\"div\",...c}=e,{compositeProps:u,compositeRef:d}=function(e={}){let{highlightItemOnHover:t,highlightedIndex:n,onHighlightedIndexChange:r}=sl(),{ref:o,index:a}=sd(e),i=n===a,l=w.useRef(null),s=lX(o,l);return{compositeProps:w.useMemo(()=>({tabIndex:i?0:-1,onFocus(){r(a)},onMouseMove(){let e=l.current;if(!t||!e)return;let n=e.hasAttribute(\"disabled\")||\"true\"===e.ariaDisabled;i||n||e.focus()}}),[i,r,a,t]),compositeRef:s,index:a}}({metadata:i});return so(s,e,{state:r,ref:[...a,d],props:[u,...o,c],customStyleHookMapping:l})}let sp=w.forwardRef(function(e,t){let{render:n,className:r,disabled:o=!1,nativeButton:a=!0,...i}=e,{triggerProps:l,disabled:s,setTriggerElement:c,open:u,allowMouseUpTriggerRef:d,positionerRef:f,parent:p,lastOpenChangeReason:h,rootId:m}=lw(),g=o||s,y=w.useRef(null),v=ad(),{getButtonProps:b,buttonRef:x}=ss({disabled:g,native:a}),C=lX(x,c),{events:_}=aj();w.useEffect(()=>{u||void 0!==p.type||(d.current=!1)},[d,u,p.type]);let k=ah(e=>{if(!y.current)return;v.clear(),d.current=!1;let t=e.target;if(iv(y.current,t)||iv(f.current,t)||t===y.current||null!=t&&function e(t){return aN(t)&&t.hasAttribute(\"data-rootownerid\")?t.getAttribute(\"data-rootownerid\")??void 0:aX(t)?void 0:e(aJ(t))}(t)===m)return;let n=function(e){let t=e.getBoundingClientRect(),n=window.getComputedStyle(e,\"::before\"),r=window.getComputedStyle(e,\"::after\");if(\"none\"===n.content&&\"none\"===r.content)return t;let o=parseFloat(n.width)||0,a=parseFloat(n.height)||0,i=parseFloat(r.width)||0,l=parseFloat(r.height)||0,s=Math.max(t.width,o,i),c=Math.max(t.height,a,l),u=s-t.width,d=c-t.height;return{left:t.left-u/2,right:t.right+u/2,top:t.top-d/2,bottom:t.bottom+d/2}}(y.current);e.clientX>=n.left-2&&e.clientX<=n.right+2&&e.clientY>=n.top-2&&e.clientY<=n.bottom+2||_.emit(\"close\",{domEvent:e,reason:\"cancel-open\"})});w.useEffect(()=>{u&&\"trigger-hover\"===h&&lS(y.current).addEventListener(\"mouseup\",k,{once:!0})},[u,k,h]);let E=\"menubar\"===p.type,j=w.useCallback(e=>lU(E?{role:\"menuitem\"}:{},{\"aria-haspopup\":\"menu\",ref:C,onMouseDown:e=>{u||(v.start(200,()=>{d.current=!0}),lS(e.currentTarget).addEventListener(\"mouseup\",k,{once:!0}))}},e,b),[b,C,u,d,v,k,E]),S=w.useMemo(()=>({disabled:g,open:u}),[g,u]),O=[y,t,x],B=[l,i,j],P=so(\"button\",e,{enabled:!E,customStyleHookMapping:st,state:S,ref:O,props:B});return E?(0,A.jsx)(sf,{tag:\"button\",render:n,className:r,state:S,refs:O,props:B,customStyleHookMapping:st}):P}),sh={clip:\"rect(0 0 0 0)\",overflow:\"hidden\",whiteSpace:\"nowrap\",position:\"fixed\",top:0,left:0,border:0,padding:0,width:1,height:1,margin:-1},sm=w.forwardRef(function(e,t){let[n,r]=w.useState();return aC(()=>{ie&&r(\"button\")},[]),(0,A.jsx)(\"span\",{...e,ref:t,tabIndex:0,role:n,\"aria-hidden\":!n||void 0,style:sh,\"data-base-ui-focus-guard\":\"\"})});var sg='input:not([inert]),select:not([inert]),textarea:not([inert]),a[href]:not([inert]),button:not([inert]),[tabindex]:not(slot):not([inert]),audio[controls]:not([inert]),video[controls]:not([inert]),[contenteditable]:not([contenteditable=\"false\"]):not([inert]),details>summary:first-of-type:not([inert]),details:not([inert])',sy=\"undefined\"==typeof Element,sv=sy?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,sb=!sy&&Element.prototype.getRootNode?function(e){var t;return null==e||null==(t=e.getRootNode)?void 0:t.call(e)}:function(e){return null==e?void 0:e.ownerDocument},sA=function e(t,n){void 0===n&&(n=!0);var r,o=null==t||null==(r=t.getAttribute)?void 0:r.call(t,\"inert\");return\"\"===o||\"true\"===o||n&&t&&e(t.parentNode)},sx=function(e){var t,n=null==e||null==(t=e.getAttribute)?void 0:t.call(e,\"contenteditable\");return\"\"===n||\"true\"===n},sw=function(e,t,n){if(sA(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(sg));return t&&sv.call(e,sg)&&r.unshift(e),r=r.filter(n)},sC=function e(t,n,r){for(var o=[],a=Array.from(t);a.length;){var i=a.shift();if(!sA(i,!1))if(\"SLOT\"===i.tagName){var l=i.assignedElements(),s=e(l.length?l:i.children,!0,r);r.flatten?o.push.apply(o,s):o.push({scopeParent:i,candidates:s})}else{sv.call(i,sg)&&r.filter(i)&&(n||!t.includes(i))&&o.push(i);var c=i.shadowRoot||\"function\"==typeof r.getShadowRoot&&r.getShadowRoot(i),u=!sA(c,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(c&&u){var d=e(!0===c?i.children:c.children,!0,r);r.flatten?o.push.apply(o,d):o.push({scopeParent:i,candidates:d})}else a.unshift.apply(a,i.children)}}return o},s_=function(e){return!isNaN(parseInt(e.getAttribute(\"tabindex\"),10))},sk=function(e){if(!e)throw Error(\"No node provided\");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||sx(e))&&!s_(e)?0:e.tabIndex},sE=function(e,t){var n=sk(e);return n<0&&t&&!s_(e)?0:n},sj=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},sS=function(e){return\"INPUT\"===e.tagName},sO=function(e,t){for(var n=0;n<e.length;n++)if(e[n].checked&&e[n].form===t)return e[n]},sB=function(e){if(!e.name)return!0;var t,n=e.form||sb(e),r=function(e){return n.querySelectorAll('input[type=\"radio\"][name=\"'+e+'\"]')};if(\"undefined\"!=typeof window&&void 0!==window.CSS&&\"function\"==typeof window.CSS.escape)t=r(window.CSS.escape(e.name));else try{t=r(e.name)}catch(e){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\",e.message),!1}var o=sO(t,e.form);return!o||o===e},sP=function(e){var t;return sS(t=e)&&\"radio\"===t.type&&!sB(e)},sI=function(e){var t,n,r,o,a,i,l,s=e&&sb(e),c=null==(t=s)?void 0:t.host,u=!1;if(s&&s!==e)for(u=!!(null!=(n=c)&&null!=(r=n.ownerDocument)&&r.contains(c)||null!=e&&null!=(o=e.ownerDocument)&&o.contains(e));!u&&c;)u=!!(null!=(i=c=null==(a=s=sb(c))?void 0:a.host)&&null!=(l=i.ownerDocument)&&l.contains(c));return u},sT=function(e){var t=e.getBoundingClientRect(),n=t.width,r=t.height;return 0===n&&0===r},sz=function(e,t){var n=t.displayCheck,r=t.getShadowRoot;if(\"hidden\"===getComputedStyle(e).visibility)return!0;var o=sv.call(e,\"details>summary:first-of-type\")?e.parentElement:e;if(sv.call(o,\"details:not([open]) *\"))return!0;if(n&&\"full\"!==n&&\"legacy-full\"!==n){if(\"non-zero-area\"===n)return sT(e)}else{if(\"function\"==typeof r){for(var a=e;e;){var i=e.parentElement,l=sb(e);if(i&&!i.shadowRoot&&!0===r(i))return sT(e);e=e.assignedSlot?e.assignedSlot:i||l===e.ownerDocument?i:l.host}e=a}if(sI(e))return!e.getClientRects().length;if(\"legacy-full\"!==n)return!0}return!1},sD=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(\"FIELDSET\"===t.tagName&&t.disabled){for(var n=0;n<t.children.length;n++){var r=t.children.item(n);if(\"LEGEND\"===r.tagName)return!!sv.call(t,\"fieldset[disabled] *\")||!r.contains(e)}return!0}t=t.parentElement}return!1},sL=function(e,t){var n,r;return!(t.disabled||sA(t)||sS(n=t)&&\"hidden\"===n.type||sz(t,e)||\"DETAILS\"===(r=t).tagName&&Array.prototype.slice.apply(r.children).some(function(e){return\"SUMMARY\"===e.tagName})||sD(t))},sN=function(e,t){return!(sP(t)||0>sk(t))&&!!sL(e,t)},sR=function(e){var t=parseInt(e.getAttribute(\"tabindex\"),10);return!!isNaN(t)||!!(t>=0)},sM=function e(t){var n=[],r=[];return t.forEach(function(t,o){var a=!!t.scopeParent,i=a?t.scopeParent:t,l=sE(i,a),s=a?e(t.candidates):i;0===l?a?n.push.apply(n,s):n.push(i):r.push({documentOrder:o,tabIndex:l,item:t,isScope:a,content:s})}),r.sort(sj).reduce(function(e,t){return t.isScope?e.push.apply(e,t.content):e.push(t.content),e},[]).concat(n)},sZ=function(e,t){return sM((t=t||{}).getShadowRoot?sC([e],t.includeContainer,{filter:sN.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:sR}):sw(e,t.includeContainer,sN.bind(null,t)))},sU=function(e,t){return(t=t||{}).getShadowRoot?sC([e],t.includeContainer,{filter:sL.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):sw(e,t.includeContainer,sL.bind(null,t))},sF=function(e,t){if(t=t||{},!e)throw Error(\"No node provided\");return!1!==sv.call(e,sg)&&sN(t,e)};let sq=()=>({getShadowRoot:!0,displayCheck:\"function\"==typeof ResizeObserver&&ResizeObserver.toString().includes(\"[native code]\")?\"full\":\"none\"});function sH(e,t){let n=sZ(e,sq()),r=n.length;if(0===r)return;let o=iy(ix(e)),a=n.indexOf(o);return n[-1===a?1===t?0:r-1:a+t]}function sV(e){return sH(ix(e).body,1)||e}function s$(e){return sH(ix(e).body,-1)||e}function sW(e,t){let n=t||e.currentTarget,r=e.relatedTarget;return!r||!iv(n,r)}function sY(e){sZ(e,sq()).forEach(e=>{e.dataset.tabindex=e.getAttribute(\"tabindex\")||\"\",e.setAttribute(\"tabindex\",\"-1\")})}function sK(e){e.querySelectorAll(\"[data-tabindex]\").forEach(e=>{let t=e.dataset.tabindex;delete e.dataset.tabindex,t?e.setAttribute(\"tabindex\",t):e.removeAttribute(\"tabindex\")})}let sX=w.createContext(null),sG=()=>w.useContext(sX),sQ=ik(\"portal\");function sJ(e={}){let{id:t,root:n}=e,r=ax(),o=sG(),[a,i]=w.useState(null),l=w.useRef(null);return aC(()=>()=>{a?.remove(),queueMicrotask(()=>{l.current=null})},[a]),aC(()=>{if(!r||l.current)return;let e=t?document.getElementById(t):null;if(!e)return;let n=document.createElement(\"div\");n.id=r,n.setAttribute(sQ,\"\"),e.appendChild(n),l.current=n,i(n)},[t,r]),aC(()=>{if(null===n||!r||l.current)return;let e=n||o?.portalNode;e&&!aD(e)&&(e=e.current),e=e||document.body;let a=null;t&&((a=document.createElement(\"div\")).id=t,e.appendChild(a));let s=document.createElement(\"div\");s.id=r,s.setAttribute(sQ,\"\"),(e=a||e).appendChild(s),l.current=s,i(s)},[t,n,r,o]),a}function s0(e){let{children:t,id:n,root:r,preserveTabOrder:o=!0}=e,a=sJ({id:n,root:r}),[i,l]=w.useState(null),s=w.useRef(null),c=w.useRef(null),u=w.useRef(null),d=w.useRef(null),f=i?.modal,p=i?.open,h=!!i&&!i.modal&&i.open&&o&&!!(r||a);return w.useEffect(()=>{if(a&&o&&!f)return a.addEventListener(\"focusin\",e,!0),a.addEventListener(\"focusout\",e,!0),()=>{a.removeEventListener(\"focusin\",e,!0),a.removeEventListener(\"focusout\",e,!0)};function e(e){if(a&&sW(e)){let t=\"focusin\"===e.type;(t?sK:sY)(a)}}},[a,o,f]),w.useEffect(()=>{a&&(p||sK(a))},[p,a]),(0,A.jsxs)(sX.Provider,{value:w.useMemo(()=>({preserveTabOrder:o,beforeOutsideRef:s,afterOutsideRef:c,beforeInsideRef:u,afterInsideRef:d,portalNode:a,setFocusManagerState:l}),[o,a]),children:[h&&a&&(0,A.jsx)(sm,{\"data-type\":\"outside\",ref:s,onFocus:e=>{if(sW(e,a))u.current?.focus();else{let e=s$(i?i.domReference:null);e?.focus()}}}),h&&a&&(0,A.jsx)(\"span\",{\"aria-owns\":a.id,style:sh}),a&&eh.createPortal(t,a),h&&a&&(0,A.jsx)(sm,{\"data-type\":\"outside\",ref:c,onFocus:e=>{if(sW(e,a))d.current?.focus();else{let t=sV(i?i.domReference:null);t?.focus(),i?.closeOnFocusOut&&i?.onOpenChange(!1,e.nativeEvent,\"focus-out\")}}})]})}let s1=w.createContext(void 0);function s2(e){let{children:t,keepMounted:n=!1,container:r}=e,{mounted:o}=lw();return o||n?(0,A.jsx)(s1.Provider,{value:n,children:(0,A.jsx)(s0,{root:r,children:t})}):null}let s4=w.createContext(void 0);function s5(e,t,n){let r,{reference:o,floating:a}=e,i=i8(t),l=i3(i8(t)),s=i6(l),c=i4(t),u=\"y\"===i,d=o.x+o.width/2-a.width/2,f=o.y+o.height/2-a.height/2,p=o[s]/2-a[s]/2;switch(c){case\"top\":r={x:d,y:o.y-a.height};break;case\"bottom\":r={x:d,y:o.y+o.height};break;case\"right\":r={x:o.x+o.width,y:f};break;case\"left\":r={x:o.x-a.width,y:f};break;default:r={x:o.x,y:o.y}}switch(i5(t)){case\"start\":r[l]-=p*(n&&u?-1:1);break;case\"end\":r[l]+=p*(n&&u?-1:1)}return r}let s3=async(e,t,n)=>{let{placement:r=\"bottom\",strategy:o=\"absolute\",middleware:a=[],platform:i}=n,l=a.filter(Boolean),s=await (null==i.isRTL?void 0:i.isRTL(t)),c=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:u,y:d}=s5(c,r,s),f=r,p={},h=0;for(let n=0;n<l.length;n++){let{name:a,fn:m}=l[n],{x:g,y:y,data:v,reset:b}=await m({x:u,y:d,initialPlacement:r,placement:f,strategy:o,middlewareData:p,rects:c,platform:i,elements:{reference:e,floating:t}});u=null!=g?g:u,d=null!=y?y:d,p={...p,[a]:{...p[a],...v}},b&&h<=50&&(h++,\"object\"==typeof b&&(b.placement&&(f=b.placement),b.rects&&(c=!0===b.rects?await i.getElementRects({reference:e,floating:t,strategy:o}):b.rects),{x:u,y:d}=s5(c,f,s)),n=-1)}return{x:u,y:d,placement:f,strategy:o,middlewareData:p}};async function s6(e,t){var n;void 0===t&&(t={});let{x:r,y:o,platform:a,rects:i,elements:l,strategy:s}=e,{boundary:c=\"clippingAncestors\",rootBoundary:u=\"viewport\",elementContext:d=\"floating\",altBoundary:f=!1,padding:p=0}=i2(t,e),h=la(p),m=l[f?\"floating\"===d?\"reference\":\"floating\":d],g=li(await a.getClippingRect({element:null==(n=await (null==a.isElement?void 0:a.isElement(m)))||n?m:m.contextElement||await (null==a.getDocumentElement?void 0:a.getDocumentElement(l.floating)),boundary:c,rootBoundary:u,strategy:s})),y=\"floating\"===d?{x:r,y:o,width:i.floating.width,height:i.floating.height}:i.reference,v=await (null==a.getOffsetParent?void 0:a.getOffsetParent(l.floating)),b=await (null==a.isElement?void 0:a.isElement(v))&&await (null==a.getScale?void 0:a.getScale(v))||{x:1,y:1},A=li(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:y,offsetParent:v,strategy:s}):y);return{top:(g.top-A.top+h.top)/b.y,bottom:(A.bottom-g.bottom+h.bottom)/b.y,left:(g.left-A.left+h.left)/b.x,right:(A.right-g.right+h.right)/b.x}}function s9(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function s8(e){return iY.some(t=>e[t]>=0)}let s7=new Set([\"left\",\"top\"]);async function ce(e,t){let{placement:n,platform:r,elements:o}=e,a=await (null==r.isRTL?void 0:r.isRTL(o.floating)),i=i4(n),l=i5(n),s=\"y\"===i8(n),c=s7.has(i)?-1:1,u=a&&s?-1:1,d=i2(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:h}=\"number\"==typeof d?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return l&&\"number\"==typeof h&&(p=\"end\"===l?-1*h:h),s?{x:p*u,y:f*c}:{x:f*c,y:p*u}}function ct(e){let t=aG(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,o=aN(e),a=o?e.offsetWidth:n,i=o?e.offsetHeight:r,l=iG(n)!==a||iG(r)!==i;return l&&(n=a,r=i),{width:n,height:r,$:l}}function cn(e){return aL(e)?e:e.contextElement}function cr(e){let t=cn(e);if(!aN(t))return iJ(1);let n=t.getBoundingClientRect(),{width:r,height:o,$:a}=ct(t),i=(a?iG(n.width):n.width)/r,l=(a?iG(n.height):n.height)/o;return i&&Number.isFinite(i)||(i=1),l&&Number.isFinite(l)||(l=1),{x:i,y:l}}let co=iJ(0);function ca(e){let t=aT(e);return aY()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:co}function ci(e,t,n,r){var o,a,i;void 0===t&&(t=!1),void 0===n&&(n=!1);let l=e.getBoundingClientRect(),s=cn(e),c=iJ(1);t&&(r?aL(r)&&(c=cr(r)):c=cr(e));let u=(o=s,void 0===(a=n)&&(a=!1),(i=r)&&(!a||i===aT(o))&&a)?ca(s):iJ(0),d=(l.left+u.x)/c.x,f=(l.top+u.y)/c.y,p=l.width/c.x,h=l.height/c.y;if(s){let e=aT(s),t=r&&aL(r)?aT(r):r,n=e,o=a1(n);for(;o&&r&&t!==n;){let e=cr(o),t=o.getBoundingClientRect(),r=aG(o),a=t.left+(o.clientLeft+parseFloat(r.paddingLeft))*e.x,i=t.top+(o.clientTop+parseFloat(r.paddingTop))*e.y;d*=e.x,f*=e.y,p*=e.x,h*=e.y,d+=a,f+=i,o=a1(n=aT(o))}}return li({width:p,height:h,x:d,y:f})}function cl(e,t){let n=aQ(e).scrollLeft;return t?t.left+n:ci(az(e)).left+n}function cs(e,t,n){void 0===n&&(n=!1);let r=e.getBoundingClientRect(),o=r.left+t.scrollLeft-(n?0:cl(e,r));return{x:o,y:r.top+t.scrollTop}}let cc=new Set([\"absolute\",\"fixed\"]);function cu(e,t,n){let r;if(\"viewport\"===t)r=function(e,t){let n=aT(e),r=az(e),o=n.visualViewport,a=r.clientWidth,i=r.clientHeight,l=0,s=0;if(o){a=o.width,i=o.height;let e=aY();(!e||e&&\"fixed\"===t)&&(l=o.offsetLeft,s=o.offsetTop)}return{width:a,height:i,x:l,y:s}}(e,n);else if(\"document\"===t)r=function(e){let t=az(e),n=aQ(e),r=e.ownerDocument.body,o=iX(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=iX(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),i=-n.scrollLeft+cl(e),l=-n.scrollTop;return\"rtl\"===aG(r).direction&&(i+=iX(t.clientWidth,r.clientWidth)-o),{width:o,height:a,x:i,y:l}}(az(e));else if(aL(t))r=function(e,t){let n=ci(e,!0,\"fixed\"===t),r=n.top+e.clientTop,o=n.left+e.clientLeft,a=aN(e)?cr(e):iJ(1),i=e.clientWidth*a.x,l=e.clientHeight*a.y,s=o*a.x;return{width:i,height:l,x:s,y:r*a.y}}(t,n);else{let n=ca(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return li(r)}function cd(e){return\"static\"===aG(e).position}function cf(e,t){if(!aN(e)||\"fixed\"===aG(e).position)return null;if(t)return t(e);let n=e.offsetParent;return az(e)===n&&(n=n.ownerDocument.body),n}function cp(e,t){var n;let r=aT(e);if(aq(e))return r;if(!aN(e)){let t=aJ(e);for(;t&&!aX(t);){if(aL(t)&&!cd(t))return t;t=aJ(t)}return r}let o=cf(e,t);for(;o&&(n=o,aU.has(aI(n)))&&cd(o);)o=cf(o,t);return o&&aX(o)&&cd(o)&&!aW(o)?r:o||function(e){let t=aJ(e);for(;aN(t)&&!aX(t);){if(aW(t))return t;if(aq(t))break;t=aJ(t)}return null}(e)||r}let ch=async function(e){let t=this.getOffsetParent||cp,n=this.getDimensions,r=await n(e.floating);return{reference:function(e,t,n){let r=aN(t),o=az(t),a=\"fixed\"===n,i=ci(e,!0,a,t),l={scrollLeft:0,scrollTop:0},s=iJ(0);if(r||!r&&!a)if((\"body\"!==aI(t)||aZ(o))&&(l=aQ(t)),r){let e=ci(t,!0,a,t);s.x=e.x+t.clientLeft,s.y=e.y+t.clientTop}else o&&(s.x=cl(o));a&&!r&&o&&(s.x=cl(o));let c=!o||r||a?iJ(0):cs(o,l),u=i.left+l.scrollLeft-s.x-c.x;return{x:u,y:i.top+l.scrollTop-s.y-c.y,width:i.width,height:i.height}}(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}},cm={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:n,offsetParent:r,strategy:o}=e,a=\"fixed\"===o,i=az(r),l=!!t&&aq(t.floating);if(r===i||l&&a)return n;let s={scrollLeft:0,scrollTop:0},c=iJ(1),u=iJ(0),d=aN(r);if((d||!d&&!a)&&((\"body\"!==aI(r)||aZ(i))&&(s=aQ(r)),aN(r))){let e=ci(r);c=cr(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=!i||d||a?iJ(0):cs(i,s,!0);return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-s.scrollLeft*c.x+u.x+f.x,y:n.y*c.y-s.scrollTop*c.y+u.y+f.y}},getDocumentElement:az,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e,a=[...\"clippingAncestors\"===n?aq(t)?[]:function(e,t){let n=t.get(e);if(n)return n;let r=a0(e,[],!1).filter(e=>aL(e)&&\"body\"!==aI(e)),o=null,a=\"fixed\"===aG(e).position,i=a?aJ(e):e;for(;aL(i)&&!aX(i);){let t=aG(i),n=aW(i);n||\"fixed\"!==t.position||(o=null),(a?!n&&!o:!n&&\"static\"===t.position&&!!o&&cc.has(o.position)||aZ(i)&&!n&&function e(t,n){let r=aJ(t);return!(r===n||!aL(r)||aX(r))&&(\"fixed\"===aG(r).position||e(r,n))}(e,i))?r=r.filter(e=>e!==i):o=t,i=aJ(i)}return t.set(e,r),r}(t,this._c):[].concat(n),r],i=a[0],l=a.reduce((e,n)=>{let r=cu(t,n,o);return e.top=iX(r.top,e.top),e.right=iK(r.right,e.right),e.bottom=iK(r.bottom,e.bottom),e.left=iX(r.left,e.left),e},cu(t,i,o));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}},getOffsetParent:cp,getElementRects:ch,getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){let{width:t,height:n}=ct(e);return{width:t,height:n}},getScale:cr,isElement:aL,isRTL:function(e){return\"rtl\"===aG(e).direction}};function cg(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function cy(e,t,n,r){let o;void 0===r&&(r={});let{ancestorScroll:a=!0,ancestorResize:i=!0,elementResize:l=\"function\"==typeof ResizeObserver,layoutShift:s=\"function\"==typeof IntersectionObserver,animationFrame:c=!1}=r,u=cn(e),d=a||i?[...u?a0(u):[],...a0(t)]:[];d.forEach(e=>{a&&e.addEventListener(\"scroll\",n,{passive:!0}),i&&e.addEventListener(\"resize\",n)});let f=u&&s?function(e,t){let n,r=null,o=az(e);function a(){var e;clearTimeout(n),null==(e=r)||e.disconnect(),r=null}return!function i(l,s){void 0===l&&(l=!1),void 0===s&&(s=1),a();let c=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=c;if(l||t(),!f||!p)return;let h=iQ(d),m=iQ(o.clientWidth-(u+f)),g=iQ(o.clientHeight-(d+p)),y={rootMargin:-h+\"px \"+-m+\"px \"+-g+\"px \"+-iQ(u)+\"px\",threshold:iX(0,iK(1,s))||1},v=!0;function b(t){let r=t[0].intersectionRatio;if(r!==s){if(!v)return i();r?i(!1,r):n=setTimeout(()=>{i(!1,1e-7)},1e3)}1!==r||cg(c,e.getBoundingClientRect())||i(),v=!1}try{r=new IntersectionObserver(b,{...y,root:o.ownerDocument})}catch(e){r=new IntersectionObserver(b,y)}r.observe(e)}(!0),a}(u,n):null,p=-1,h=null;l&&(h=new ResizeObserver(e=>{let[r]=e;r&&r.target===u&&h&&(h.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var e;null==(e=h)||e.observe(t)})),n()}),u&&!c&&h.observe(u),h.observe(t));let m=c?ci(e):null;return c&&function t(){let r=ci(e);m&&!cg(m,r)&&n(),m=r,o=requestAnimationFrame(t)}(),n(),()=>{var e;d.forEach(e=>{a&&e.removeEventListener(\"scroll\",n),i&&e.removeEventListener(\"resize\",n)}),null==f||f(),null==(e=h)||e.disconnect(),h=null,c&&cancelAnimationFrame(o)}}var cv=\"undefined\"!=typeof document,cb=cv?w.useLayoutEffect:function(){};function cA(e,t){let n,r,o;if(e===t)return!0;if(typeof e!=typeof t)return!1;if(\"function\"==typeof e&&e.toString()===t.toString())return!0;if(e&&t&&\"object\"==typeof e){if(Array.isArray(e)){if((n=e.length)!==t.length)return!1;for(r=n;0!=r--;)if(!cA(e[r],t[r]))return!1;return!0}if((n=(o=Object.keys(e)).length)!==Object.keys(t).length)return!1;for(r=n;0!=r--;)if(!({}).hasOwnProperty.call(t,o[r]))return!1;for(r=n;0!=r--;){let n=o[r];if((\"_owner\"!==n||!e.$$typeof)&&!cA(e[n],t[n]))return!1}return!0}return e!=e&&t!=t}function cx(e){return\"undefined\"==typeof window?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function cw(e,t){let n=cx(e);return Math.round(t*n)/n}function cC(e){let t=w.useRef(e);return cb(()=>{t.current=e}),t}function c_(e,t,n){let r=\"inline-start\"===e||\"inline-end\"===e;return({top:\"top\",right:r?n?\"inline-start\":\"inline-end\":\"right\",bottom:\"bottom\",left:r?n?\"inline-end\":\"inline-start\":\"left\"})[t]}function ck(e,t,n){let{rects:r,placement:o}=e;return{side:c_(t,i4(o),n),align:i5(o)||\"center\",anchor:{width:r.reference.width,height:r.reference.height},positioner:{width:r.floating.width,height:r.floating.height}}}function cE(e){var t,n,r,o,a;let i,l,s,c,u,d,f,p,h,m,g,y,v,{anchor:b,positionMethod:A=\"absolute\",side:x=\"bottom\",sideOffset:C=0,align:_=\"center\",alignOffset:k=0,collisionBoundary:E,collisionPadding:j=5,sticky:S=!1,arrowPadding:O=5,trackAnchor:B=!0,keepMounted:P=!1,floatingRootContext:I,mounted:T,collisionAvoidance:z,shiftCrossAxis:D=!1,nodeId:L,adaptiveOrigin:N}=e,R=z.side||\"flip\",M=z.align||\"flip\",Z=z.fallbackAxisSide||\"end\",U=\"function\"==typeof b?b:void 0,F=ah(U),q=U?F:b,H=a2(b),V=\"rtl\"===lj(),$={top:\"top\",right:\"right\",bottom:\"bottom\",left:\"left\",\"inline-end\":V?\"left\":\"right\",\"inline-start\":V?\"right\":\"left\"}[x],W=\"center\"===_?$:`${$}-${_}`,Y={boundary:\"clipping-ancestors\"===E?\"clippingAncestors\":E,padding:j},K=w.useRef(null),X=a2(C),G=a2(k),Q=\"function\"!=typeof C?C:0,J=[(i=e=>{let t=ck(e,x,V),n=\"function\"==typeof X.current?X.current(t):X.current,r=\"function\"==typeof G.current?G.current(t):G.current;return{mainAxis:n,crossAxis:r,alignmentAxis:r}},l=[Q,\"function\"!=typeof k?k:0,V,x],{...(void 0===(t=i)&&(t=0),{name:\"offset\",options:t,async fn(e){var n,r;let{x:o,y:a,placement:i,middlewareData:l}=e,s=await ce(e,t);return i===(null==(n=l.offset)?void 0:n.placement)&&null!=(r=l.arrow)&&r.alignmentOffset?{}:{x:o+s.x,y:a+s.y,data:{...s,placement:i}}}}),options:[i,l]})],ee=\"none\"===M&&\"shift\"!==R,et=!ee&&(S||D||\"shift\"===R),en=\"none\"===R?null:{...{name:\"flip\",options:n=s={...Y,mainAxis:!D&&\"flip\"===R,crossAxis:\"flip\"===M&&\"alignment\",fallbackAxisSideDirection:Z},async fn(e){var t,r,o,a,i;let{placement:l,middlewareData:s,rects:c,initialPlacement:u,platform:d,elements:f}=e,{mainAxis:p=!0,crossAxis:h=!0,fallbackPlacements:m,fallbackStrategy:g=\"bestFit\",fallbackAxisSideDirection:y=\"none\",flipAlignment:v=!0,...b}=i2(n,e);if(null!=(t=s.arrow)&&t.alignmentOffset)return{};let A=i4(l),x=i8(u),w=i4(u)===u,C=await (null==d.isRTL?void 0:d.isRTL(f.floating)),_=m||(w||!v?[lo(u)]:function(e){let t=lo(e);return[i7(e),t,i7(t)]}(u)),k=\"none\"!==y;!m&&k&&_.push(...function(e,t,n,r){let o=i5(e),a=function(e,t,n){switch(e){case\"top\":case\"bottom\":if(n)return t?lt:le;return t?le:lt;case\"left\":case\"right\":return t?ln:lr;default:return[]}}(i4(e),\"start\"===n,r);return o&&(a=a.map(e=>e+\"-\"+o),t&&(a=a.concat(a.map(i7)))),a}(u,v,y,C));let E=[u,..._],j=await s6(e,b),S=[],O=(null==(r=s.flip)?void 0:r.overflows)||[];if(p&&S.push(j[A]),h){let e=function(e,t,n){void 0===n&&(n=!1);let r=i5(e),o=i3(i8(e)),a=i6(o),i=\"x\"===o?r===(n?\"end\":\"start\")?\"right\":\"left\":\"start\"===r?\"bottom\":\"top\";return t.reference[a]>t.floating[a]&&(i=lo(i)),[i,lo(i)]}(l,c,C);S.push(j[e[0]],j[e[1]])}if(O=[...O,{placement:l,overflows:S}],!S.every(e=>e<=0)){let e=((null==(o=s.flip)?void 0:o.index)||0)+1,t=E[e];if(t&&(\"alignment\"!==h||x===i8(t)||O.every(e=>i8(e.placement)!==x||e.overflows[0]>0)))return{data:{index:e,overflows:O},reset:{placement:t}};let n=null==(a=O.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:a.placement;if(!n)switch(g){case\"bestFit\":{let e=null==(i=O.filter(e=>{if(k){let t=i8(e.placement);return t===x||\"y\"===t}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:i[0];e&&(n=e);break}case\"initialPlacement\":n=u}if(l!==n)return{reset:{placement:n}}}return{}}},options:[s,c]},er=ee?null:(u=e=>{var t;let n,r,o=lS(e.elements.floating).documentElement;return{...Y,rootBoundary:D?{x:0,y:0,width:o.clientWidth,height:o.clientHeight}:void 0,mainAxis:\"none\"!==M,crossAxis:et,limiter:S||D?void 0:{...(void 0===(t=n=()=>{if(!K.current)return{};let{height:e}=K.current.getBoundingClientRect();return{offset:e/2+(\"number\"==typeof j?j:0)}})&&(t={}),{options:t,fn(e){let{x:n,y:r,placement:o,rects:a,middlewareData:i}=e,{offset:l=0,mainAxis:s=!0,crossAxis:c=!0}=i2(t,e),u={x:n,y:r},d=i8(o),f=i3(d),p=u[f],h=u[d],m=i2(l,e),g=\"number\"==typeof m?{mainAxis:m,crossAxis:0}:{mainAxis:0,crossAxis:0,...m};if(s){let e=\"y\"===f?\"height\":\"width\",t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;p<t?p=t:p>n&&(p=n)}if(c){var y,v;let e=\"y\"===f?\"width\":\"height\",t=s7.has(i4(o)),n=a.reference[d]-a.floating[e]+(t&&(null==(y=i.offset)?void 0:y[d])||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:(null==(v=i.offset)?void 0:v[d])||0)-(t?g.crossAxis:0);h<n?h=n:h>r&&(h=r)}return{[f]:p,[d]:h}}}),options:[n,r]}}},d=[Y,S,D,j,M],{...(void 0===(r=u)&&(r={}),{name:\"shift\",options:r,async fn(e){let{x:t,y:n,placement:o}=e,{mainAxis:a=!0,crossAxis:i=!1,limiter:l={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...s}=i2(r,e),c={x:t,y:n},u=await s6(e,s),d=i8(i4(o)),f=i3(d),p=c[f],h=c[d];if(a){let e=\"y\"===f?\"top\":\"left\",t=\"y\"===f?\"bottom\":\"right\",n=p+u[e],r=p-u[t];p=iX(n,iK(p,r))}if(i){let e=\"y\"===d?\"top\":\"left\",t=\"y\"===d?\"bottom\":\"right\",n=h+u[e],r=h-u[t];h=iX(n,iK(h,r))}let m=l.fn({...e,[f]:p,[d]:h});return{...m,data:{x:m.x-t,y:m.y-n,enabled:{[f]:a,[d]:i}}}}}),options:[u,d]});\"shift\"===R||\"shift\"===M||\"center\"===_?J.push(er,en):J.push(en,er),J.push({...{name:\"size\",options:o=f={...Y,apply({elements:{floating:e},rects:{reference:t},availableWidth:n,availableHeight:r}){Object.entries({\"--available-width\":`${n}px`,\"--available-height\":`${r}px`,\"--anchor-width\":`${t.width}px`,\"--anchor-height\":`${t.height}px`}).forEach(([t,n])=>{e.style.setProperty(t,n)})}},async fn(e){var t,n;let r,a,{placement:i,rects:l,platform:s,elements:c}=e,{apply:u=()=>{},...d}=i2(o,e),f=await s6(e,d),p=i4(i),h=i5(i),m=\"y\"===i8(i),{width:g,height:y}=l.floating;\"top\"===p||\"bottom\"===p?(r=p,a=h===(await (null==s.isRTL?void 0:s.isRTL(c.floating))?\"start\":\"end\")?\"left\":\"right\"):(a=p,r=\"end\"===h?\"top\":\"bottom\");let v=y-f.top-f.bottom,b=g-f.left-f.right,A=iK(y-f[r],v),x=iK(g-f[a],b),w=!e.middlewareData.shift,C=A,_=x;if(null!=(t=e.middlewareData.shift)&&t.enabled.x&&(_=b),null!=(n=e.middlewareData.shift)&&n.enabled.y&&(C=v),w&&!h){let e=iX(f.left,0),t=iX(f.right,0),n=iX(f.top,0),r=iX(f.bottom,0);m?_=g-2*(0!==e||0!==t?e+t:iX(f.left,f.right)):C=y-2*(0!==n||0!==r?n+r:iX(f.top,f.bottom))}await u({...e,availableWidth:_,availableHeight:C});let k=await s.getDimensions(c.floating);return g!==k.width||y!==k.height?{reset:{rects:!0}}:{}}},options:[f,p]},(h=()=>({element:K.current||document.createElement(\"div\"),padding:O,offsetParent:\"floating\"}),m=[O],{...{name:\"arrow\",options:g=h,async fn(e){let{x:t,y:n,placement:r,rects:o,platform:a,elements:i,middlewareData:l}=e,{element:s,padding:c=0,offsetParent:u=\"real\"}=i2(g,e)||{};if(null==s)return{};let d=la(c),f={x:t,y:n},p=i3(i8(r)),h=i6(p),m=await a.getDimensions(s),y=\"y\"===p,v=y?\"clientHeight\":\"clientWidth\",b=o.reference[h]+o.reference[p]-f[p]-o.floating[h],A=f[p]-o.reference[p],x=\"real\"===u?await a.getOffsetParent?.(s):i.floating,w=i.floating[v]||o.floating[h];w&&await a.isElement?.(x)||(w=i.floating[v]||o.floating[h]);let C=w/2-m[h]/2-1,_=Math.min(d[y?\"top\":\"left\"],C),k=Math.min(d[y?\"bottom\":\"right\"],C),E=w-m[h]-k,j=w/2-m[h]/2+(b/2-A/2),S=iX(_,iK(j,E)),O=!l.arrow&&null!=i5(r)&&j!==S&&o.reference[h]/2-(j<_?_:k)-m[h]/2<0,B=O?j<_?j-_:j-E:0;return{[p]:f[p]+B,data:{[p]:S,centerOffset:j-S-B,...O&&{alignmentOffset:B}},reset:O}}},options:[h,m]}),{...(void 0===(a=y)&&(a={}),{name:\"hide\",options:a,async fn(e){let{rects:t}=e,{strategy:n=\"referenceHidden\",...r}=i2(a,e);switch(n){case\"referenceHidden\":{let n=s9(await s6(e,{...r,elementContext:\"reference\"}),t.reference);return{data:{referenceHiddenOffsets:n,referenceHidden:s8(n)}}}case\"escaped\":{let n=s9(await s6(e,{...r,altBoundary:!0}),t.floating);return{data:{escapedOffsets:n,escaped:s8(n)}}}default:return{}}}}),options:[y,v]},{name:\"transformOrigin\",fn(e){let{elements:t,middlewareData:n,placement:r,rects:o,y:a}=e,i=i4(r),l=i8(i),s=K.current,c=n.arrow?.x||0,u=n.arrow?.y||0,d=s?.clientWidth||0,f=s?.clientHeight||0,p=c+d/2,h=u+f/2,m=Math.abs(n.shift?.y||0),g=o.reference.height/2,y=m>(\"function\"==typeof C?C(ck(e,x,V)):C),v={top:`${p}px calc(100% + ${C}px)`,bottom:`${p}px ${-C}px`,left:`calc(100% + ${C}px) ${h}px`,right:`${-C}px ${h}px`}[i],b=`${p}px ${o.reference.y+g-a}px`;return t.floating.style.setProperty(\"--transform-origin\",et&&\"y\"===l&&y?b:v),{}}},N);let eo=I;!T&&I&&(eo={...I,elements:{reference:null,floating:null,domReference:null}});let ea=w.useMemo(()=>({elementResize:B&&\"undefined\"!=typeof ResizeObserver,layoutShift:B&&\"undefined\"!=typeof IntersectionObserver}),[B]),{refs:ei,elements:el,x:es,y:ec,middlewareData:eu,update:ed,placement:ef,context:ep,isPositioned:em,floatingStyles:eg}=function(e={}){let{nodeId:t}=e,n=aB({...e,elements:{reference:null,floating:null,...e.elements}}),r=e.rootContext||n,o=r.elements,[a,i]=w.useState(null),[l,s]=w.useState(null),c=o?.domReference||a,u=w.useRef(null),d=aj();aC(()=>{c&&(u.current=c)},[c]);let f=function(e){void 0===e&&(e={});let{placement:t=\"bottom\",strategy:n=\"absolute\",middleware:r=[],platform:o,elements:{reference:a,floating:i}={},transform:l=!0,whileElementsMounted:s,open:c}=e,[u,d]=w.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,p]=w.useState(r);cA(f,r)||p(r);let[h,m]=w.useState(null),[g,y]=w.useState(null),v=w.useCallback(e=>{e!==C.current&&(C.current=e,m(e))},[]),b=w.useCallback(e=>{e!==_.current&&(_.current=e,y(e))},[]),A=a||h,x=i||g,C=w.useRef(null),_=w.useRef(null),k=w.useRef(u),E=null!=s,j=cC(s),S=cC(o),O=cC(c),B=w.useCallback(()=>{if(!C.current||!_.current)return;let e={placement:t,strategy:n,middleware:f};S.current&&(e.platform=S.current),((e,t,n)=>{let r=new Map,o={platform:cm,...n},a={...o.platform,_c:r};return s3(e,t,{...o,platform:a})})(C.current,_.current,e).then(e=>{let t={...e,isPositioned:!1!==O.current};P.current&&!cA(k.current,t)&&(k.current=t,eh.flushSync(()=>{d(t)}))})},[f,t,n,S,O]);cb(()=>{!1===c&&k.current.isPositioned&&(k.current.isPositioned=!1,d(e=>({...e,isPositioned:!1})))},[c]);let P=w.useRef(!1);cb(()=>(P.current=!0,()=>{P.current=!1}),[]),cb(()=>{if(A&&(C.current=A),x&&(_.current=x),A&&x){if(j.current)return j.current(A,x,B);B()}},[A,x,B,j,E]);let I=w.useMemo(()=>({reference:C,floating:_,setReference:v,setFloating:b}),[v,b]),T=w.useMemo(()=>({reference:A,floating:x}),[A,x]),z=w.useMemo(()=>{let e={position:n,left:0,top:0};if(!T.floating)return e;let t=cw(T.floating,u.x),r=cw(T.floating,u.y);return l?{...e,transform:\"translate(\"+t+\"px, \"+r+\"px)\",...cx(T.floating)>=1.5&&{willChange:\"transform\"}}:{position:n,left:t,top:r}},[n,l,T.floating,u.x,u.y]);return w.useMemo(()=>({...u,update:B,refs:I,elements:T,floatingStyles:z}),[u,B,I,T,z])}({...e,elements:{...o,...l&&{reference:l}}}),p=w.useCallback(e=>{let t=aL(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),getClientRects:()=>e.getClientRects(),contextElement:e}:e;s(t),f.refs.setReference(t)},[f.refs]),h=w.useCallback(e=>{(aL(e)||null===e)&&(u.current=e,i(e)),(aL(f.refs.reference.current)||null===f.refs.reference.current||null!==e&&!aL(e))&&f.refs.setReference(e)},[f.refs]),m=w.useMemo(()=>({...f.refs,setReference:h,setPositionReference:p,domReference:u}),[f.refs,h,p]),g=w.useMemo(()=>({...f.elements,domReference:c}),[f.elements,c]),y=w.useMemo(()=>({...f,...r,refs:m,elements:g,nodeId:t}),[f,m,g,t,r]);return aC(()=>{r.dataRef.current.floatingContext=y;let e=d?.nodesRef.current.find(e=>e.id===t);e&&(e.context=y)}),w.useMemo(()=>({...f,context:y,refs:m,elements:g}),[f,m,g,y])}({rootContext:eo,placement:W,middleware:J,strategy:A,whileElementsMounted:P?void 0:(...e)=>cy(...e,ea),nodeId:L}),{sideX:ey,sideY:ev}=eu.adaptiveOrigin||{},eb=w.useMemo(()=>N?{position:A,[ey]:`${es}px`,[ev]:`${ec}px`}:eg,[N,ey,ev,A,es,ec,eg]),eA=w.useRef(null);aC(()=>{if(!T)return;let e=H.current,t=\"function\"==typeof e?e():e,n=(cj(t)?t.current:t)||null;n!==eA.current&&(ei.setPositionReference(n),eA.current=n)},[T,ei,q,H]),w.useEffect(()=>{if(!T)return;let e=H.current;\"function\"!=typeof e&&cj(e)&&e.current!==eA.current&&(ei.setPositionReference(e.current),eA.current=e.current)},[T,ei,q,H]),w.useEffect(()=>{if(P&&T&&el.domReference&&el.floating)return cy(el.domReference,el.floating,ed,ea)},[P,T,el,ed,ea]);let ex=c_(x,i4(ef),V),ew=i5(ef)||\"center\",eC=!!eu.hide?.referenceHidden,e_=w.useMemo(()=>({position:\"absolute\",top:eu.arrow?.y,left:eu.arrow?.x}),[eu.arrow]),ek=eu.arrow?.centerOffset!==0;return w.useMemo(()=>({positionerStyles:eb,arrowStyles:e_,arrowRef:K,arrowUncentered:ek,side:ex,align:ew,anchorHidden:eC,refs:ei,context:ep,isPositioned:em,update:ed}),[eb,e_,K,ek,ex,ew,eC,ei,ep,em,ed])}function cj(e){return null!=e&&\"current\"in e}function cS(e){let{children:t,elementsRef:n,labelsRef:r,onMapChange:o}=e,a=w.useRef(0),i=al(cB).current,l=al(cO).current,[s,c]=w.useState(0),u=w.useRef(s),d=ah((e,t)=>{l.set(e,t??null),u.current+=1,c(u.current)}),f=ah(e=>{l.delete(e),u.current+=1,c(u.current)}),p=w.useMemo(()=>{let e=new Map;return Array.from(l.keys()).sort(cP).forEach((t,n)=>{let r=l.get(t)??{};e.set(t,{...r,index:n})}),e},[l,s]);aC(()=>{u.current===s&&(n.current.length!==p.size&&(n.current.length=p.size),r&&r.current.length!==p.size&&(r.current.length=p.size)),o?.(p)},[o,p,n,r,s,u]);let h=ah(e=>(i.add(e),()=>{i.delete(e)}));aC(()=>{i.forEach(e=>e(p))},[i,p]);let m=w.useMemo(()=>({register:d,unregister:f,subscribeMapChange:h,elementsRef:n,labelsRef:r,nextIndexRef:a}),[d,f,h,n,r,a]);return(0,A.jsx)(sc.Provider,{value:m,children:t})}function cO(){return new Map}function cB(){return new Set}function cP(e,t){let n=e.compareDocumentPosition(t);return n&Node.DOCUMENT_POSITION_FOLLOWING||n&Node.DOCUMENT_POSITION_CONTAINED_BY?-1:n&Node.DOCUMENT_POSITION_PRECEDING||n&Node.DOCUMENT_POSITION_CONTAINS?1:0}let cI=w.forwardRef(function(e,t){let n,{cutout:r,...o}=e;if(r){let e=r?.getBoundingClientRect();n=`polygon(\n 0% 0%,\n 100% 0%,\n 100% 100%,\n 0% 100%,\n 0% 0%,\n ${e.left}px ${e.top}px,\n ${e.left}px ${e.bottom}px,\n ${e.right}px ${e.bottom}px,\n ${e.right}px ${e.top}px,\n ${e.left}px ${e.top}px\n )`}return(0,A.jsx)(\"div\",{ref:t,role:\"presentation\",\"data-base-ui-inert\":\"\",...o,style:{position:\"fixed\",inset:0,userSelect:\"none\",WebkitUserSelect:\"none\",clipPath:n}})}),cT=w.forwardRef(function(e,t){var n;let{anchor:r,positionMethod:o=\"absolute\",className:a,render:i,side:l,align:s,sideOffset:c=0,alignOffset:u=0,collisionBoundary:d=\"clipping-ancestors\",collisionPadding:f=5,arrowPadding:p=5,sticky:h=!1,trackAnchor:m=!0,collisionAvoidance:g=iF,...y}=e,{open:v,setOpen:b,floatingRootContext:x,setPositionerElement:C,itemDomElements:_,itemLabels:k,mounted:E,modal:j,lastOpenChangeReason:S,parent:O,setHoverEnabled:B,triggerElement:P}=lw(),I=function(){let e=w.useContext(s1);if(void 0===e)throw Error(\"Base UI: <Menu.Portal> is missing.\");return e}(),T=function(e){let t=ax(),n=aj(),r=aE(),o=r;return aC(()=>{if(!t)return;let e={id:t,parentId:o};return n?.addNode(e),()=>{n?.removeNode(e)}},[n,t,o]),t}(),z=aE(),D=lN(!0),L=r,N=c,R=u,M=s;\"context-menu\"===O.type&&(L=O.context?.anchor??r,M=e.align??\"start\",R=e.alignOffset??2,N=e.sideOffset??-5);let Z=l,U=M;\"menu\"===O.type?(Z=Z??\"inline-end\",U=U??\"start\"):\"menubar\"===O.type&&(Z=Z??\"bottom\",U=U??\"start\");let F=\"context-menu\"===O.type,q=cE({anchor:L,floatingRootContext:x,positionMethod:D?\"fixed\":o,mounted:E,side:Z,sideOffset:N,align:U,alignOffset:R,arrowPadding:F?0:p,collisionBoundary:d,collisionPadding:f,sticky:h,nodeId:T,keepMounted:I,trackAnchor:m,collisionAvoidance:g,shiftCrossAxis:F}),{events:H}=aj(),V=w.useMemo(()=>{let e={};return v||(e.pointerEvents=\"none\"),{role:\"presentation\",hidden:!E,style:{...q.positionerStyles,...e}}},[v,E,q.positionerStyles]);w.useEffect(()=>{function e(e){e.open?(e.parentNodeId===T&&B(!1),e.nodeId!==T&&e.parentNodeId===z&&b(!1,void 0,\"sibling-open\")):e.parentNodeId===T&&B(!0)}return H.on(\"openchange\",e),()=>{H.off(\"openchange\",e)}},[H,T,z,b,B]),w.useEffect(()=>{H.emit(\"openchange\",{open:v,nodeId:T,parentNodeId:z})},[H,v,T,z]);let $=w.useMemo(()=>({open:v,side:q.side,align:q.align,anchorHidden:q.anchorHidden,nested:\"menu\"===O.type}),[v,q.side,q.align,q.anchorHidden,O.type]),W=w.useMemo(()=>({side:q.side,align:q.align,arrowRef:q.arrowRef,arrowUncentered:q.arrowUncentered,arrowStyles:q.arrowStyles,floatingContext:q.context}),[q.side,q.align,q.arrowRef,q.arrowUncentered,q.arrowStyles,q.context]),Y=so(\"div\",e,{state:$,customStyleHookMapping:sn,ref:[t,C],props:{...V,...y}}),K=E&&\"menu\"!==O.type&&(\"menubar\"!==O.type&&j&&\"trigger-hover\"!==S||\"menubar\"===O.type&&O.context.modal),X=null;return\"menubar\"===O.type?X=O.context.contentElement:void 0===O.type&&(X=P),(0,A.jsxs)(s4.Provider,{value:W,children:[K&&(0,A.jsx)(cI,{ref:\"context-menu\"===O.type||\"nested-context-menu\"===O.type?O.context.internalBackdropRef:null,inert:(n=!v,sr>=19?n:n?\"true\":void 0),cutout:X}),(0,A.jsx)(aS,{id:T,children:(0,A.jsx)(cS,{elementsRef:_,labelsRef:k,children:Y})})]})}),cz={inert:new WeakMap,\"aria-hidden\":new WeakMap,none:new WeakMap};function cD(e){return\"inert\"===e?cz.inert:\"aria-hidden\"===e?cz[\"aria-hidden\"]:cz.none}let cL=new WeakSet,cN={},cR=0,cM=e=>e&&(e.host||cM(e.parentNode)),cZ=[];function cU(){cZ=cZ.filter(e=>e.isConnected)}function cF(){return cU(),cZ[cZ.length-1]}function cq(e,t){if(!t.current.includes(\"floating\")&&!e.getAttribute(\"role\")?.includes(\"dialog\"))return;let n=sq(),r=sU(e,n).filter(e=>{let t=e.getAttribute(\"data-tabindex\")||\"\";return sF(e,n)||e.hasAttribute(\"data-tabindex\")&&!t.startsWith(\"-\")}),o=e.getAttribute(\"tabindex\");t.current.includes(\"floating\")||0===r.length?\"0\"!==o&&e.setAttribute(\"tabindex\",\"0\"):(\"-1\"!==o||e.hasAttribute(\"data-tabindex\")&&\"-1\"!==e.getAttribute(\"data-tabindex\"))&&(e.setAttribute(\"tabindex\",\"-1\"),e.setAttribute(\"data-tabindex\",\"-1\"))}function cH(e){let{context:t,children:n,disabled:r=!1,order:o=[\"content\"],initialFocus:a=0,returnFocus:i=!0,restoreFocus:l=!1,modal:s=!0,closeOnFocusOut:c=!0,getInsideElements:u=()=>[]}=e,{open:d,onOpenChange:f,events:p,dataRef:h,elements:{domReference:m,floating:g}}=t,y=ah(()=>h.current.floatingContext?.nodeId),v=ah(u),b=\"number\"==typeof a&&a<0,x=iC(m)&&b,C=a2(o),_=a2(a),k=a2(i),E=aj(),j=sG(),S=w.useRef(null),O=w.useRef(null),B=w.useRef(!1),P=w.useRef(!1),I=w.useRef(-1),T=ad(),z=null!=j,D=i_(g),L=ah((e=D)=>e?sZ(e,sq()):[]),N=ah(e=>{let t=L(e);return C.current.map(()=>t).filter(Boolean).flat()});w.useEffect(()=>{if(r||!s)return;function e(e){\"Tab\"===e.key&&iv(D,iy(ix(D)))&&0===L().length&&!x&&ia(e)}let t=ix(D);return t.addEventListener(\"keydown\",e),()=>{t.removeEventListener(\"keydown\",e)}},[r,m,D,s,C,x,L,N]),w.useEffect(()=>{if(!r&&g)return g.addEventListener(\"focusin\",e),()=>{g.removeEventListener(\"focusin\",e)};function e(e){let t=ib(e),n=L().indexOf(t);-1!==n&&(I.current=n)}},[r,g,L]),w.useEffect(()=>{if(r||!c)return;function e(){P.current=!0}function t(e){let t=e.relatedTarget,n=e.currentTarget,r=ib(e);queueMicrotask(()=>{let o=y(),a=!(iv(m,t)||iv(g,t)||iv(t,g)||iv(j?.portalNode,t)||t?.hasAttribute(ik(\"focus-guard\"))||E&&(iB(E.nodesRef.current,o).find(e=>iv(e.context?.elements.floating,t)||iv(e.context?.elements.domReference,t))||iP(E.nodesRef.current,o).find(e=>[e.context?.elements.floating,i_(e.context?.elements.floating)].includes(t)||e.context?.elements.domReference===t)));if(n===m&&D&&cq(D,C),l&&n!==m&&!r?.isConnected&&iy(ix(D))===ix(D).body){aN(D)&&D.focus();let e=I.current,t=L(),n=t[e]||t[t.length-1]||D;aN(n)&&n.focus()}if(h.current.insideReactTree){h.current.insideReactTree=!1;return}if(P.current){P.current=!1;return}(x||!s)&&t&&a&&t!==cF()&&(B.current=!0,f(!1,e,\"focus-out\"))})}let n=!!(!E&&j);function o(){h.current.insideReactTree=!0,T.start(0,()=>{h.current.insideReactTree=!1})}if(g&&aN(m))return m.addEventListener(\"focusout\",t),m.addEventListener(\"pointerdown\",e),g.addEventListener(\"focusout\",t),n&&g.addEventListener(\"focusout\",o,!0),()=>{m.removeEventListener(\"focusout\",t),m.removeEventListener(\"pointerdown\",e),g.removeEventListener(\"focusout\",t),n&&g.removeEventListener(\"focusout\",o,!0)}},[r,m,g,D,s,E,j,f,c,l,L,x,y,C,h,T]);let R=w.useRef(null),M=w.useRef(null),Z=lX(R,j?.beforeInsideRef),U=lX(M,j?.afterInsideRef);w.useEffect(()=>{if(r||!g)return;let e=Array.from(j?.portalNode?.querySelectorAll(`[${ik(\"portal\")}]`)||[]),t=E?iP(E.nodesRef.current,y()):[],n=function(e,t=!1,n=!1){let r=ix(e[0]).body;return function(e,t,n,r){let o,a=\"data-base-ui-inert\",i=r?\"inert\":n?\"aria-hidden\":null,l=(o=t,e.map(e=>{if(o.contains(e))return e;let t=cM(e);return o.contains(t)?t:null}).filter(e=>null!=e)),s=new Set,c=new Set(l),u=[];cN[a]||(cN[a]=new WeakMap);let d=cN[a];return l.forEach(function e(t){!(!t||s.has(t))&&(s.add(t),t.parentNode&&e(t.parentNode))}),function e(t){!t||c.has(t)||[].forEach.call(t.children,t=>{if(\"script\"!==aI(t))if(s.has(t))e(t);else{let e=i?t.getAttribute(i):null,n=null!==e&&\"false\"!==e,r=cD(i),o=(r.get(t)||0)+1,l=(d.get(t)||0)+1;r.set(t,o),d.set(t,l),u.push(t),1===o&&n&&cL.add(t),1===l&&t.setAttribute(a,\"\"),!n&&i&&t.setAttribute(i,\"inert\"===i?\"\":\"true\")}})}(t),s.clear(),cR+=1,()=>{u.forEach(e=>{let t=cD(i),n=(t.get(e)||0)-1,r=(d.get(e)||0)-1;t.set(e,n),d.set(e,r),n||(!cL.has(e)&&i&&e.removeAttribute(i),cL.delete(e)),r||e.removeAttribute(a)}),(cR-=1)||(cz.inert=new WeakMap,cz[\"aria-hidden\"]=new WeakMap,cz.none=new WeakMap,cL=new WeakSet,cN={})}}(e.concat(Array.from(r.querySelectorAll(\"[aria-live]\"))),r,t,n)}([g,t.find(e=>iC(e.context?.elements.domReference||null))?.context?.elements.domReference,...e,...v(),S.current,O.current,R.current,M.current,j?.beforeOutsideRef.current,j?.afterOutsideRef.current,x?m:null].filter(e=>null!=e),s||x);return()=>{n()}},[r,m,g,s,C,j,x,E,y,v]),aC(()=>{if(r||!aN(D))return;let e=iy(ix(D));queueMicrotask(()=>{let t=N(D),n=_.current,r=(\"number\"==typeof n?t[n]:n.current)||D,o=iv(D,e);b||o||!d||lh(r,{preventScroll:r===D})})},[r,d,D,b,N,_]),aC(()=>{var e;if(r||!D)return;let t=ix(D);function n({reason:e,event:t,nested:n}){if([\"hover\",\"safe-polygon\"].includes(e)&&\"mouseleave\"===t.type&&(B.current=!0),\"outside-press\"===e)if(n)B.current=!1;else if(ii(t)||il(t))B.current=!1;else{let e=!1;document.createElement(\"div\").focus({get preventScroll(){return e=!0,!1}}),e?B.current=!1:B.current=!0}}e=iy(t),cU(),e&&\"body\"!==aI(e)&&(cZ.push(e),cZ.length>20&&(cZ=cZ.slice(-20))),p.on(\"openchange\",n);let o=t.createElement(\"span\");return o.setAttribute(\"tabindex\",\"-1\"),o.setAttribute(\"aria-hidden\",\"true\"),Object.assign(o.style,sh),z&&m&&m.insertAdjacentElement(\"afterend\",o),()=>{p.off(\"openchange\",n);let e=iy(t),r=iv(g,e)||E&&iB(E.nodesRef.current,y(),!1).some(t=>iv(t.context?.elements.floating,e)),a=function(){if(\"boolean\"==typeof k.current){let e=m||cF();return e&&e.isConnected?e:o}return k.current.current||o}();queueMicrotask(()=>{let n=function(e){let t=sq();return sF(e,t)?e:sZ(e,t)[0]||e}(a);k.current&&!B.current&&aN(n)&&(n===e||e===t.body||r)&&n.focus({preventScroll:!0}),o.remove()})}},[r,g,D,k,h,p,E,z,m,y]),w.useEffect(()=>{queueMicrotask(()=>{B.current=!1})},[r]),w.useEffect(()=>{if(r||!d)return;function e(e){let t=ib(e);t?.closest(\"[data-base-ui-click-trigger]\")&&(P.current=!0)}let t=ix(D);return t.addEventListener(\"pointerdown\",e,!0),()=>{t.removeEventListener(\"pointerdown\",e,!0)}},[r,d,D]),aC(()=>{if(!r&&j)return j.setFocusManagerState({modal:s,closeOnFocusOut:c,open:d,onOpenChange:f,domReference:m}),()=>{j.setFocusManagerState(null)}},[r,j,s,d,f,c,m]),aC(()=>{if(!r&&D)return cq(D,C),()=>{queueMicrotask(cU)}},[r,D,C]);let F=!r&&(!s||!x)&&(z||s);return(0,A.jsxs)(w.Fragment,{children:[F&&(0,A.jsx)(sm,{\"data-type\":\"inside\",ref:Z,onFocus:e=>{if(s){let e=N();lh(e[e.length-1])}else if(j?.preserveTabOrder&&j.portalNode)if(B.current=!1,sW(e,j.portalNode)){let e=sV(m);e?.focus()}else j.beforeOutsideRef.current?.focus()}}),n,F&&(0,A.jsx)(sm,{\"data-type\":\"inside\",ref:U,onFocus:e=>{if(s)lh(N()[0]);else if(j?.preserveTabOrder&&j.portalNode)if(c&&(B.current=!0),sW(e,j.portalNode)){let e=s$(m);e?.focus()}else j.afterOutsideRef.current?.focus()}})]})}let cV={...sn,...l2},c$=w.forwardRef(function(e,t){let{render:n,className:r,finalFocus:o,...a}=e,{open:i,setOpen:l,popupRef:s,transitionStatus:c,popupProps:u,mounted:d,instantType:f,onOpenChangeComplete:p,parent:h,lastOpenChangeReason:m,rootId:g}=lw(),{side:y,align:v,floatingContext:b}=function(){let e=w.useContext(s4);if(void 0===e)throw Error(\"Base UI: MenuPositionerContext is missing. MenuPositioner parts must be placed within <Menu.Positioner>.\");return e}();lk({open:i,ref:s,onComplete(){i&&p?.(!0)}});let{events:x}=aj();w.useEffect(()=>{function e(e){l(!1,e.domEvent,e.reason)}return x.on(\"close\",e),()=>{x.off(\"close\",e)}},[x,l]);let C=so(\"div\",e,{state:w.useMemo(()=>({transitionStatus:c,side:y,align:v,open:i,nested:\"menu\"===h.type,instant:f}),[c,y,v,i,h.type,f]),ref:[t,s],customStyleHookMapping:cV,props:[u,\"starting\"===c?iM:iZ,a,{\"data-rootownerid\":g}]}),_=void 0===h.type||\"context-menu\"===h.type;return\"menubar\"===h.type&&\"outside-press\"!==m&&(_=!0),(0,A.jsx)(cH,{context:b,modal:!1,disabled:!d,returnFocus:o||_,initialFocus:\"menu\"===h.type?-1:0,restoreFocus:!0,children:C})}),cW=w.createContext(void 0),cY=w.forwardRef(function(e,t){let{render:n,className:r,...o}=e,[a,i]=w.useState(void 0),l=w.useMemo(()=>({setLabelId:i}),[i]),s=so(\"div\",e,{ref:t,props:{role:\"group\",\"aria-labelledby\":a,...o}});return(0,A.jsx)(cW.Provider,{value:l,children:s})});function cK(e){return ax(e,\"base-ui\")}let cX=w.forwardRef(function(e,t){let{className:n,render:r,id:o,...a}=e,i=cK(o),{setLabelId:l}=function(){let e=w.useContext(cW);if(void 0===e)throw Error(\"Base UI: MenuGroupRootContext is missing. Menu group parts must be used within <Menu.Group>.\");return e}();return aC(()=>(l(i),()=>{l(void 0)}),[l,i]),so(\"div\",e,{ref:t,props:{id:i,role:\"presentation\",...a}})}),cG={type:\"regular-item\"},cQ=w.memo(w.forwardRef(function(e,t){let{className:n,closeOnClick:r=!0,disabled:o=!1,highlighted:a,id:i,menuEvents:l,itemProps:s,render:c,allowMouseUpTriggerRef:u,typingRef:d,nativeButton:f,...p}=e,{getItemProps:h,itemRef:m}=function(e){let{closeOnClick:t,disabled:n=!1,highlighted:r,id:o,menuEvents:a,allowMouseUpTriggerRef:i,typingRef:l,nativeButton:s,itemMetadata:c}=e,u=w.useRef(null),{getButtonProps:d,buttonRef:f}=ss({disabled:n,focusableWhenDisabled:!0,native:s}),p=w.useCallback(e=>lU({id:o,role:\"menuitem\",tabIndex:r?0:-1,onMouseEnter(){\"submenu-trigger\"===c.type&&c.setActive()},onKeyUp:e=>{\" \"===e.key&&l.current&&e.preventBaseUIHandler()},onClick:e=>{t&&a.emit(\"close\",{domEvent:e,reason:\"item-press\"})},onMouseUp:()=>{u.current&&i.current&&\"regular-item\"===c.type&&u.current.click()}},e,d),[o,r,d,l,t,a,i,c]),h=lX(u,f);return w.useMemo(()=>({getItemProps:p,itemRef:h}),[p,h])}({closeOnClick:r,disabled:o,highlighted:a,id:i,menuEvents:l,allowMouseUpTriggerRef:u,typingRef:d,nativeButton:f,itemMetadata:cG});return so(\"div\",e,{state:w.useMemo(()=>({disabled:o,highlighted:a}),[o,a]),ref:[m,t],props:[s,p,h]})})),cJ=w.forwardRef(function(e,t){let{id:n,label:r,nativeButton:o=!1,...a}=e,i=w.useRef(null),l=sd({label:r}),s=lX(t,l.ref,i),{itemProps:c,activeIndex:u,allowMouseUpTriggerRef:d,typingRef:f}=lw(),p=cK(n),h=l.index===u,{events:m}=aj();return(0,A.jsx)(cQ,{...a,id:p,ref:s,highlighted:h,menuEvents:m,itemProps:c,allowMouseUpTriggerRef:d,typingRef:f,nativeButton:o})});var c0=\"__next_builtin__\";function c1(e){return e.replace(new RegExp(\"^\".concat(c0)),\"\").replace(new RegExp(\"\".concat(\"@boundary\",\"$\")),\"\")}var c2=\"boundary:\";function c4(e){return e.startsWith(c2)}function c5(e){return e.replace(c2,\"\")}function c3(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function c6(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function c9(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function c8(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return c3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c3(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var c7=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){t.forEach(function(t){\"function\"==typeof t?t(e):t&&(t.current=e)})}};function ue(e){var t,n=e.nodeState,r=e.boundaries,o=n.pagePath,a=n.boundaryType,i=n.setBoundaryType,l=c8((0,w.useState)(!1),2),s=l[0],c=l[1],u=dl().shadowRoot,d=(0,w.useRef)(null),f=(0,w.useRef)(null);ne(f,d,s,function(){c(!1)},null==(t=d.current)?void 0:t.ownerDocument);var p=(Object.values(r).find(function(e){return null!==e})||\"\").split(\".\").pop()||\"js\",h=(0,w.useMemo)(function(){return Object.fromEntries(Object.entries(r).map(function(e){var t=c8(e,2),n=t[0],r=c1((t[1]||\"\").split(\"/\").pop()||\"\".concat(n,\".\").concat(p));return[n,r]}))},[r,p]),m=(o||\"\").split(\"/\").pop()||\"\",g=c1(a?\"page.\".concat(p):m||\"page.\".concat(p)),y=[{label:h.loading,value:\"loading\",icon:(0,A.jsx)(ut,{}),disabled:!r.loading},{label:h.error,value:\"error\",icon:(0,A.jsx)(un,{}),disabled:!r.error},{label:h[\"not-found\"],value:\"not-found\",icon:(0,A.jsx)(ur,{}),disabled:!r[\"not-found\"]}],v={label:a?\"Reset\":g,value:\"reset\",icon:(0,A.jsx)(uo,{}),disabled:null===a},b=(0,w.useCallback)(function(e){var t=new URLSearchParams({file:e.filePath,isAppRelativePath:\"1\"});fetch(\"\".concat( false||\"\",\"/__nextjs_launch-editor?\").concat(t.toString())).catch(console.warn)},[]),x=(0,w.useCallback)(function(e){switch(e){case\"not-found\":case\"loading\":case\"error\":i(e);break;case\"reset\":i(null);break;case\"open-editor\":o&&b({filePath:o})}},[i,o,b]),C=(0,w.useMemo)(function(){return\"layout\"!==n.type&&\"template\"!==n.type&&Object.values(r).some(function(e){return null!==e})},[n.type,r]);return(0,A.jsxs)(lK,{delay:0,modal:!1,open:s,onOpenChange:c,children:[(0,A.jsx)(sp,{className:\"segment-boundary-trigger\",\"data-nextjs-dev-overlay-segment-boundary-trigger-button\":!0,render:function(e){var t=c7(e.ref,d);return(0,A.jsx)(ui,c9(c6({},e),{ref:t}))},disabled:!C}),(0,A.jsx)(s2,{container:u,children:(0,A.jsx)(cT,{className:\"segment-boundary-dropdown-positioner\",side:\"bottom\",align:\"center\",sideOffset:6,arrowPadding:8,ref:f,children:(0,A.jsxs)(c$,{className:\"segment-boundary-dropdown\",children:[(0,A.jsxs)(cY,{children:[(0,A.jsx)(cX,{className:\"segment-boundary-group-label\",children:\"Toggle Overrides\"}),y.map(function(e){return(0,A.jsxs)(cJ,{className:\"segment-boundary-dropdown-item\",onClick:function(){return x(e.value)},disabled:e.disabled,children:[e.icon,e.label]},e.value)})]}),(0,A.jsx)(cY,{children:(0,A.jsxs)(cJ,{className:\"segment-boundary-dropdown-item\",onClick:function(){return x(v.value)},disabled:v.disabled,children:[v.icon,v.label]},v.value)})]})})})]})}function ut(){var e,t,n=(0,x.c)(2);return n[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"g\",{clipPath:\"url(#clip0_2759_1866)\",children:(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M10 3.5C13.5899 3.5 16.5 6.41015 16.5 10C16.5 13.5899 13.5899 16.5 10 16.5C6.41015 16.5 3.5 13.5899 3.5 10C3.5 6.41015 6.41015 3.5 10 3.5ZM2 10C2 14.4183 5.58172 18 10 18C14.4183 18 18 14.4183 18 10C18 5.58172 14.4183 2 10 2C5.58172 2 2 5.58172 2 10ZM10.75 9.62402V6H9.25V9.875C9.25 10.1898 9.39858 10.486 9.65039 10.6748L11.5498 12.0996L12.1504 12.5498L13.0498 11.3496L12.4502 10.9004L10.75 9.62402Z\",fill:\"currentColor\"})}),n[0]=e):e=n[0],n[1]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsxs)(\"svg\",{width:\"20px\",height:\"20px\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:[e,(0,A.jsx)(\"defs\",{children:(0,A.jsx)(\"clipPath\",{id:\"clip0_2759_1866\",children:(0,A.jsx)(\"rect\",{width:\"16\",height:\"16\",fill:\"white\",transform:\"translate(2 2)\"})})})]}),n[1]=t):t=n[1],t}function un(){var e,t,n=(0,x.c)(2);return n[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"g\",{clipPath:\"url(#clip0_2759_1881)\",children:(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.5 7.30762V12.6924L7.30762 16.5H12.6924L16.5 12.6924V7.30762L12.6924 3.5H7.30762L3.5 7.30762ZM18 12.8994L17.9951 12.998C17.9724 13.2271 17.8712 13.4423 17.707 13.6064L13.6064 17.707L13.5332 17.7734C13.3806 17.8985 13.1944 17.9757 12.998 17.9951L12.8994 18H7.10059L7.00195 17.9951C6.80562 17.9757 6.6194 17.8985 6.4668 17.7734L6.39355 17.707L2.29297 13.6064C2.12883 13.4423 2.02756 13.2271 2.00488 12.998L2 12.8994V7.10059C2 6.83539 2.10546 6.58109 2.29297 6.39355L6.39355 2.29297C6.55771 2.12883 6.77294 2.02756 7.00195 2.00488L7.10059 2H12.8994L12.998 2.00488C13.2271 2.02756 13.4423 2.12883 13.6064 2.29297L17.707 6.39355C17.8945 6.58109 18 6.83539 18 7.10059V12.8994ZM9.25 5.75H10.75L10.75 10.75H9.25L9.25 5.75ZM10 14C10.5523 14 11 13.5523 11 13C11 12.4477 10.5523 12 10 12C9.44772 12 9 12.4477 9 13C9 13.5523 9.44772 14 10 14Z\",fill:\"currentColor\"})}),n[0]=e):e=n[0],n[1]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsxs)(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:[e,(0,A.jsx)(\"defs\",{children:(0,A.jsx)(\"clipPath\",{id:\"clip0_2759_1881\",children:(0,A.jsx)(\"rect\",{width:\"16\",height:\"16\",fill:\"white\",transform:\"translate(2 2)\"})})})]}),n[1]=t):t=n[1],t}function ur(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{width:\"20px\",height:\"20px\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M10.5586 2.5C11.1341 2.50004 11.6588 2.8294 11.9091 3.34766L17.8076 15.5654C18.1278 16.2292 17.6442 16.9997 16.9072 17H3.09274C2.35574 16.9997 1.8721 16.2292 2.19235 15.5654L8.09079 3.34766C8.34109 2.8294 8.86583 2.50004 9.44137 2.5H10.5586ZM3.89059 15.5H16.1093L10.5586 4H9.44137L3.89059 15.5ZM9.24997 6.75H10.75L10.75 10.75H9.24997L9.24997 6.75ZM9.99997 14C10.5523 14 11 13.5523 11 13C11 12.4477 10.5523 12 9.99997 12C9.44768 12 8.99997 12.4477 8.99997 13C8.99997 13.5523 9.44768 14 9.99997 14Z\",fill:\"currentColor\"})}),t[0]=e):e=t[0],e}function uo(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,A.jsx)(\"path\",{d:\"M9.96484 3C13.8463 3.00018 17 6.13012 17 10C17 13.8699 13.8463 16.9998 9.96484 17C7.62404 17 5.54877 15.8617 4.27051 14.1123L3.82812 13.5068L5.03906 12.6221L5.48145 13.2275C6.48815 14.6053 8.12092 15.5 9.96484 15.5C13.0259 15.4998 15.5 13.0335 15.5 10C15.5 6.96654 13.0259 4.50018 9.96484 4.5C7.42905 4.5 5.29544 6.19429 4.63867 8.5H8V10H2.75C2.33579 10 2 9.66421 2 9.25V4H3.5V7.2373C4.57781 4.74376 7.06749 3 9.96484 3Z\",fill:\"currentColor\"})}),t[0]=e):e=t[0],e}function ua(e){var t,n,r=(0,x.c)(3);return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8.7071 2.39644C8.31658 2.00592 7.68341 2.00592 7.29289 2.39644L4.46966 5.21966L3.93933 5.74999L4.99999 6.81065L5.53032 6.28032L7.99999 3.81065L10.4697 6.28032L11 6.81065L12.0607 5.74999L11.5303 5.21966L8.7071 2.39644ZM5.53032 9.71966L4.99999 9.18933L3.93933 10.25L4.46966 10.7803L7.29289 13.6035C7.68341 13.9941 8.31658 13.9941 8.7071 13.6035L11.5303 10.7803L12.0607 10.25L11 9.18933L10.4697 9.71966L7.99999 12.1893L5.53032 9.71966Z\",fill:\"currentColor\"}),r[0]=t):t=r[0],r[1]!==e?(n=(0,A.jsx)(\"svg\",c9(c6({strokeLinejoin:\"round\",viewBox:\"0 0 16 16\"},e),{children:t})),r[1]=e,r[2]=n):n=r[2],n}function ui(e){var t,n,r=(0,x.c)(3);return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"span\",{className:\"segment-boundary-trigger-text\",children:(0,A.jsx)(ua,{className:\"plus-icon\"})}),r[0]=t):t=r[0],r[1]!==e?(n=(0,A.jsx)(\"button\",c9(c6({},e),{children:t})),r[1]=e,r[2]=n):n=r[2],n}let ul=w.createContext(void 0);function us(){let e=w.useContext(ul);if(void 0===e)throw Error(\"Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>.\");return e}let uc=w.forwardRef(function(e,t){let{className:n,render:r,...o}=e,{open:a,setTriggerElement:i,triggerProps:l}=us();return so(\"button\",e,{state:w.useMemo(()=>({open:a}),[a]),ref:[t,i],props:[l,o],customStyleHookMapping:se})}),uu=w.createContext(void 0);function ud(){let e=w.useContext(uu);if(void 0===e)throw Error(\"Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>.\");return e}let uf=w.forwardRef(function(e,t){let{className:n,render:r,...o}=e,{open:a,arrowRef:i,side:l,align:s,arrowUncentered:c,arrowStyles:u}=ud();return so(\"div\",e,{state:w.useMemo(()=>({open:a,side:l,align:s,uncentered:c}),[a,l,s,c]),ref:[t,i],props:[{style:u,\"aria-hidden\":!0},o],customStyleHookMapping:sn})}),up={...sn,...l2},uh=w.forwardRef(function(e,t){let{className:n,render:r,...o}=e,{open:a,instantType:i,transitionStatus:l,popupProps:s,popupRef:c,onOpenChangeComplete:u}=us(),{side:d,align:f}=ud();return lk({open:a,ref:c,onComplete(){a&&u?.(!0)}}),so(\"div\",e,{state:w.useMemo(()=>({open:a,side:d,align:f,instant:i,transitionStatus:l}),[a,d,f,i,l]),ref:[t,c],props:[s,\"starting\"===l?iM:iZ,o],customStyleHookMapping:up})}),um=w.createContext(void 0),ug=w.forwardRef(function(e,t){let{render:n,className:r,anchor:o,positionMethod:a=\"absolute\",side:i=\"top\",align:l=\"center\",sideOffset:s=0,alignOffset:c=0,collisionBoundary:u=\"clipping-ancestors\",collisionPadding:d=5,arrowPadding:f=5,sticky:p=!1,trackAnchor:h=!0,collisionAvoidance:m=iq,...g}=e,{open:y,setPositionerElement:v,mounted:b,floatingRootContext:x,trackCursorAxis:C,hoverable:_}=us(),k=cE({anchor:o,positionMethod:a,floatingRootContext:x,mounted:b,side:i,sideOffset:s,align:l,alignOffset:c,collisionBoundary:u,collisionPadding:d,sticky:p,arrowPadding:f,trackAnchor:h,keepMounted:function(){let e=w.useContext(um);if(void 0===e)throw Error(\"Base UI: <Tooltip.Portal> is missing.\");return e}(),collisionAvoidance:m}),E=w.useMemo(()=>{let e={};return y&&\"both\"!==C&&_||(e.pointerEvents=\"none\"),{role:\"presentation\",hidden:!b,style:{...k.positionerStyles,...e}}},[y,C,_,b,k.positionerStyles]),j=w.useMemo(()=>({props:E,...k}),[E,k]),S=w.useMemo(()=>({open:y,side:j.side,align:j.align,anchorHidden:j.anchorHidden}),[y,j.side,j.align,j.anchorHidden]),O=w.useMemo(()=>({...S,arrowRef:j.arrowRef,arrowStyles:j.arrowStyles,arrowUncentered:j.arrowUncentered}),[S,j.arrowRef,j.arrowStyles,j.arrowUncentered]),B=so(\"div\",e,{state:S,props:[j.props,g],ref:[t,v],customStyleHookMapping:sn});return(0,A.jsx)(uu.Provider,{value:O,children:B})});function uy(e){let t=sJ({root:e.root});return t&&eh.createPortal(e.children,t)}function uv(e){let{children:t,keepMounted:n=!1,container:r}=e,{mounted:o}=us();return o||n?(0,A.jsx)(um.Provider,{value:n,children:(0,A.jsx)(uy,{root:r,children:t})}):null}let ub=w.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new au,currentIdRef:{current:null},currentContextRef:{current:null}});function uA(e){let{children:t,delay:n,timeoutMs:r=0}=e,o=w.useRef(n),a=w.useRef(n),i=w.useRef(null),l=w.useRef(null),s=ad();return(0,A.jsx)(ub.Provider,{value:w.useMemo(()=>({hasProvider:!0,delayRef:o,initialDelayRef:a,currentIdRef:i,timeoutMs:r,currentContextRef:l,timeout:s}),[r,s]),children:t})}let ux=w.createContext(void 0),uw=function(e){let{delay:t,closeDelay:n,timeout:r=400}=e,o=w.useMemo(()=>({delay:t,closeDelay:n}),[t,n]),a=w.useMemo(()=>({open:t,close:n}),[t,n]);return(0,A.jsx)(ux.Provider,{value:o,children:(0,A.jsx)(uA,{delay:a,timeoutMs:r,children:e.children})})};function uC(e){return null!=e&&null!=e.clientX}function u_(e){let{disabled:t=!1,defaultOpen:n=!1,onOpenChange:r,open:o,delay:a,closeDelay:i,hoverable:l=!0,trackCursorAxis:s=\"none\",actionsRef:c,onOpenChangeComplete:u}=e,d=a??600,f=i??0,[p,h]=w.useState(null),[m,g]=w.useState(null),[y,v]=w.useState(),b=w.useRef(null),[x,C]=ay({controlled:o,default:n,name:\"Tooltip\",state:\"open\"}),_=!t&&x;function k(e,t,n){let o=\"trigger-hover\"===n,a=e&&\"trigger-focus\"===n,i=!e&&(\"trigger-press\"===n||\"escape-key\"===n);function l(){r?.(e,t,n),C(e)}o?eh.flushSync(l):l(),a||i?v(a?\"focus\":\"dismiss\"):\"trigger-hover\"===n&&v(void 0)}let E=ah(k);x&&t&&k(!1,void 0,\"disabled\");let{mounted:j,setMounted:S,transitionStatus:O}=l_(_),B=ah(()=>{S(!1),u?.(!1)});lk({enabled:!c,open:_,ref:b,onComplete(){_||B()}}),w.useImperativeHandle(c,()=>({unmount:B}),[B]);let P=aB({elements:{reference:p,floating:m},open:_,onOpenChange(e,t,n){E(e,t,lD(n))}}),I=w.useContext(ux),{delayRef:T,isInstantPhase:z,hasProvider:D}=function(e,t={}){let{open:n,onOpenChange:r,floatingId:o}=e,{enabled:a=!0}=t,{currentIdRef:i,delayRef:l,timeoutMs:s,initialDelayRef:c,currentContextRef:u,hasProvider:d,timeout:f}=w.useContext(ub),[p,h]=w.useState(!1);return aC(()=>{function e(){h(!1),u.current?.setIsInstantPhase(!1),i.current=null,u.current=null,l.current=c.current}if(a&&i.current&&!n&&i.current===o){if(h(!1),s)return f.start(s,e),()=>{f.clear()};e()}},[a,n,o,i,l,s,c,u,f]),aC(()=>{if(!a||!n)return;let e=u.current,t=i.current;u.current={onOpenChange:r,setIsInstantPhase:h},i.current=o,l.current={open:0,close:ij(c.current,\"close\")},null!==t&&t!==o?(f.clear(),h(!0),e?.setIsInstantPhase(!0),e?.onOpenChange(!1)):(h(!1),e?.setIsInstantPhase(!1))},[a,n,o,r,i,l,s,c,u,f]),aC(()=>()=>{u.current=null},[u]),w.useMemo(()=>({hasProvider:d,delayRef:l,isInstantPhase:p}),[d,l,p])}(P),L=z?\"delay\":y,N=iO(P,{enabled:!t,mouseOnly:!0,move:!1,handleClose:l&&\"both\"!==s?iT():null,restMs(){let e=I?.delay,t=\"object\"==typeof T.current?T.current.open:void 0,n=d;return D&&(n=0!==t?a??e??d:0),n},delay(){let e=\"object\"==typeof T.current?T.current.close:void 0,t=f;return null==i&&D&&(t=e),{close:t}}}),R=iD(P,{enabled:!t}),M=i$(P,{enabled:!t,referencePress:!0}),{getReferenceProps:Z,getFloatingProps:U}=lv([N,R,M,function(e,t={}){let{open:n,dataRef:r,elements:{floating:o,domReference:a},refs:i}=e,{enabled:l=!0,axis:s=\"both\",x:c=null,y:u=null}=t,d=w.useRef(!1),f=w.useRef(null),[p,h]=w.useState(),[m,g]=w.useState([]),y=ah((e,t)=>{if(!d.current&&(!r.current.openEvent||uC(r.current.openEvent))){var n,o;let l,c,u;i.setPositionReference((n=a,o={x:e,y:t,axis:s,dataRef:r,pointerType:p},l=null,c=null,u=!1,{contextElement:n||void 0,getBoundingClientRect(){let e=n?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},t=\"x\"===o.axis||\"both\"===o.axis,r=\"y\"===o.axis||\"both\"===o.axis,a=[\"mouseenter\",\"mousemove\"].includes(o.dataRef.current.openEvent?.type||\"\")&&\"touch\"!==o.pointerType,i=e.width,s=e.height,d=e.x,f=e.y;return null==l&&o.x&&t&&(l=e.x-o.x),null==c&&o.y&&r&&(c=e.y-o.y),d-=l||0,f-=c||0,i=0,s=0,!u||a?(i=\"y\"===o.axis?e.width:0,s=\"x\"===o.axis?e.height:0,d=t&&null!=o.x?o.x:d,f=r&&null!=o.y?o.y:f):u&&!a&&(s=\"x\"===o.axis?e.height:s,i=\"y\"===o.axis?e.width:i),u=!0,{width:i,height:s,x:d,y:f,top:f,right:d+i,bottom:f+s,left:d}}}))}}),v=ah(e=>{null==c&&null==u&&(n?f.current||g([]):y(e.clientX,e.clientY))}),b=is(p)?o:n,A=w.useCallback(()=>{if(!b||!l||null!=c||null!=u)return;let e=aT(o);function t(n){iv(o,ib(n))?(e.removeEventListener(\"mousemove\",t),f.current=null):y(n.clientX,n.clientY)}if(!r.current.openEvent||uC(r.current.openEvent)){e.addEventListener(\"mousemove\",t);let n=()=>{e.removeEventListener(\"mousemove\",t),f.current=null};return f.current=n,n}i.setPositionReference(a)},[b,l,c,u,o,r,i,a,y]);w.useEffect(()=>A(),[A,m]),w.useEffect(()=>{l&&!o&&(d.current=!1)},[l,o]),w.useEffect(()=>{!l&&n&&(d.current=!0)},[l,n]),aC(()=>{l&&(null!=c||null!=u)&&(d.current=!1,y(c,u))},[l,c,u,y]);let x=w.useMemo(()=>{function e(e){h(e.pointerType)}return{onPointerDown:e,onPointerEnter:e,onMouseMove:v,onMouseEnter:v}},[v]);return w.useMemo(()=>l?{reference:x}:{},[l,x])}(P,{enabled:!t&&\"none\"!==s,axis:\"none\"===s?void 0:s})]),F=w.useMemo(()=>({open:_,setOpen:E,mounted:j,setMounted:S,setTriggerElement:h,positionerElement:m,setPositionerElement:g,popupRef:b,triggerProps:Z(),popupProps:U(),floatingRootContext:P,instantType:L,transitionStatus:O,onOpenChangeComplete:u}),[_,E,j,S,h,m,g,b,Z,U,P,L,O,u]),q=w.useMemo(()=>({...F,delay:d,closeDelay:f,trackCursorAxis:s,hoverable:l}),[F,d,f,s,l]);return(0,A.jsx)(ul.Provider,{value:q,children:e.children})}var uk=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/tooltip/tooltip.css\"),uE={};uE.styleTagTransform=m(),uE.setAttributes=d(),uE.insert=c(),uE.domAPI=l(),uE.insertStyleElement=p(),a()(uk.Z,uE),uk.Z&&uk.Z.locals&&uk.Z.locals;var uj=(0,w.forwardRef)(function(e,t){var n,r,o,a,i,l,s,c,u,d,f,p,h=(0,x.c)(35),m=e.className,g=e.children,y=e.title,v=e.direction,b=e.arrowSize,w=e.offset,C=void 0===v?\"top\":v,_=void 0===b?6:b,k=dl().shadowRoot;if(!y)return g;h[0]!==g?(n=function(e){var t,n;return(0,A.jsx)(\"span\",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},e),n=n={children:g},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t))},h[0]=g,h[1]=n):n=h[1],h[2]!==t||h[3]!==n?(r=(0,A.jsx)(uc,{ref:t,render:n}),h[2]=t,h[3]=n,h[4]=r):r=h[4];var E=(void 0===w?8:w)+_,j=\"\".concat(_,\"px\"),S=\"\".concat(_,\"px\");h[5]!==j||h[6]!==S?(o={\"--anchor-width\":j,\"--anchor-height\":S},h[5]=j,h[6]=S,h[7]=o):o=h[7];var O=o;h[8]!==m?(a=eJ(\"tooltip\",m),h[8]=m,h[9]=a):a=h[9];var B=\"\".concat(_,\"px\");h[10]!==B?(i={\"--arrow-size\":B},h[10]=B,h[11]=i):i=h[11];var P=i,I=\"tooltip-arrow--\".concat(C);h[12]!==I?(l=eJ(\"tooltip-arrow\",I),h[12]=I,h[13]=l):l=h[13];var T=\"\".concat(_,\"px\");h[14]!==T?(s={\"--arrow-size\":T},h[14]=T,h[15]=s):s=h[15];var z=s;return h[16]!==l||h[17]!==z?(c=(0,A.jsx)(uf,{className:l,style:z}),h[16]=l,h[17]=z,h[18]=c):c=h[18],h[19]!==a||h[20]!==P||h[21]!==c||h[22]!==y?(u=(0,A.jsxs)(uh,{className:a,style:P,children:[y,c]}),h[19]=a,h[20]=P,h[21]=c,h[22]=y,h[23]=u):u=h[23],h[24]!==C||h[25]!==O||h[26]!==u||h[27]!==E?(d=(0,A.jsx)(ug,{side:C,sideOffset:E,className:\"tooltip-positioner\",style:O,children:u}),h[24]=C,h[25]=O,h[26]=u,h[27]=E,h[28]=d):d=h[28],h[29]!==k||h[30]!==d?(f=(0,A.jsx)(uv,{container:k,children:d}),h[29]=k,h[30]=d,h[31]=f):f=h[31],h[32]!==f||h[33]!==r?(p=(0,A.jsx)(uw,{children:(0,A.jsxs)(u_,{delay:400,children:[r,f]})}),h[32]=f,h[33]=r,h[34]=p):p=h[34],p});function uS(e){var t,n,r=(0,x.c)(3),o=e.possibleExtension,a=e.missingGlobalError?\"No global-error.\".concat(o,\" found: Add one to ensure users see a helpful message when an unexpected error occurs.\"):null;return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(uR,{}),r[0]=t):t=r[0],r[1]!==a?(n=(0,A.jsx)(\"span\",{className:\"segment-explorer-suggestions\",children:(0,A.jsx)(uj,{className:\"segment-explorer-suggestions-tooltip\",title:a,children:t})}),r[1]=a,r[2]=n):n=r[2],n}function uO(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function uB(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}var uP=function(e){var t,n;return!!(null==(t=e.value)?void 0:t.type)&&!!(null==(n=e.value)?void 0:n.pagePath)};function uI(e){var t,n,r=(0,x.c)(3),o=e.page;return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(uM,{}),r[0]=t):t=r[0],r[1]!==o?(n=(0,A.jsxs)(\"div\",{className:\"segment-explorer-page-route-bar\",children:[t,(0,A.jsx)(\"span\",{className:\"segment-explorer-page-route-bar-path\",children:o})]}),r[1]=o,r[2]=n):n=r[2],n}function uT(e){var t,n,r,o=(0,x.c)(9),a=e.activeBoundariesCount,i=e.onGlobalReset,l=a>0,s=\"segment-explorer-footer-button \".concat(l?\"\":\"segment-explorer-footer-button--disabled\"),c=l?i:void 0,u=!l;return o[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"span\",{className:\"segment-explorer-footer-text\",children:\"Clear Segment Overrides\"}),o[0]=t):t=o[0],o[1]!==a||o[2]!==l?(n=l&&(0,A.jsx)(\"span\",{className:\"segment-explorer-footer-badge\",children:a}),o[1]=a,o[2]=l,o[3]=n):n=o[3],o[4]!==s||o[5]!==c||o[6]!==u||o[7]!==n?(r=(0,A.jsx)(\"div\",{className:\"segment-explorer-footer\",children:(0,A.jsxs)(\"button\",{className:s,onClick:c,disabled:u,type:\"button\",children:[t,n]})}),o[4]=s,o[5]=c,o[6]=u,o[7]=n,o[8]=r):r=o[8],r}function uz(e){var t,n,r,o,a,i=(0,x.c)(15),l=e.type,s=e.isBuiltin,c=e.isOverridden,u=e.filePath,d=e.fileName,f=\"segment-explorer-file-label--\".concat(l),p=s&&\"segment-explorer-file-label--builtin\",h=c&&\"segment-explorer-file-label--overridden\";return i[0]!==f||i[1]!==p||i[2]!==h?(t=eJ(\"segment-explorer-file-label\",f,p,h),i[0]=f,i[1]=p,i[2]=h,i[3]=t):t=i[3],i[4]!==u?(n=function(){var e;e=new URLSearchParams({file:{filePath:u}.filePath,isAppRelativePath:\"1\"}),fetch(\"\".concat( false||\"\",\"/__nextjs_launch-editor?\").concat(e.toString()))},i[4]=u,i[5]=n):n=i[5],i[6]!==d?(r=(0,A.jsx)(\"span\",{className:\"segment-explorer-file-label-text\",children:d}),i[6]=d,i[7]=r):r=i[7],i[8]!==s?(o=s?(0,A.jsx)(uR,{}):(0,A.jsx)(uZ,{className:\"code-icon\"}),i[8]=s,i[9]=o):o=i[9],i[10]!==t||i[11]!==n||i[12]!==r||i[13]!==o?(a=(0,A.jsxs)(\"span\",{className:t,onClick:n,children:[r,o]}),i[10]=t,i[11]=n,i[12]=r,i[13]=o,i[14]=a):a=i[14],a}function uD(e){var t,n,r,o,a,i,l,s,c,u=(0,x.c)(17),d=e.page,f=(0,w.useSyncExternalStore)(o8,o7,ae);u[0]!==f?(n=function e(t){var n,r=0;return(null==(n=t.value)?void 0:n.setBoundaryType)&&null!==t.value.boundaryType&&!c4(t.value.type)&&r++,Object.values(t.children).forEach(function(t){t&&(r+=e(t))}),r}(f),u[0]=f,u[1]=n):n=u[1],t=n,u[2]!==f?(r=function(){!function e(t){var n;(null==(n=t.value)?void 0:n.setBoundaryType)&&t.value.setBoundaryType(null),Object.values(t.children).forEach(function(t){t&&e(t)})}(f)},u[2]=f,u[3]=r):r=u[3];var p=r;return u[4]===Symbol.for(\"react.memo_cache_sentinel\")?(o={display:\"flex\",flexDirection:\"column\",height:\"100%\"},u[4]=o):o=u[4],u[5]!==d?(a=(0,A.jsx)(uI,{page:d}),u[5]=d,u[6]=a):a=u[6],u[7]===Symbol.for(\"react.memo_cache_sentinel\")?(i={flex:\"1 1 auto\",overflow:\"auto\"},u[7]=i):i=u[7],u[8]!==f?(l=(0,A.jsx)(\"div\",{className:\"segment-explorer-content\",\"data-nextjs-devtool-segment-explorer\":!0,style:i,children:(0,A.jsx)(uN,{node:f,level:0,segment:\"\"})}),u[8]=f,u[9]=l):l=u[9],u[10]!==t||u[11]!==p?(s=(0,A.jsx)(uT,{activeBoundariesCount:t,onGlobalReset:p}),u[10]=t,u[11]=p,u[12]=s):s=u[12],u[13]!==a||u[14]!==l||u[15]!==s?(c=(0,A.jsxs)(\"div\",{\"data-nextjs-devtools-panel-segments-explorer\":!0,style:o,children:[a,l,s]}),u[13]=a,u[14]=l,u[15]=s,u[16]=c):c=u[16],c}var uL=\"global-error\";function uN(e){var t=e.segment,n=e.node,r=e.level,o=(0,w.useMemo)(function(){return Object.keys(n.children)},[n.children]),a=(0,w.useMemo)(function(){var e=[];return o.forEach(function(t){var r=n.children[t];if(r&&r.value){var o=c5(r.value.type),a=o===uL;(a&&!r.value.pagePath.startsWith(c0)||!a&&c4(r.value.type))&&e.push(o)}}),0===r&&!e.includes(uL)},[n.children,o,r]),i=o.sort(function(e,t){var r=e.includes(\".\"),o=t.includes(\".\");if(r&&!o)return -1;if(!r&&o)return 1;if(r&&o){var a,i,l,s,c,u,d,f,p=null==(i=n.children[e])||null==(a=i.value)?void 0:a.type,h=null==(s=n.children[t])||null==(l=s.value)?void 0:l.type,m=function(e){return e?\"layout\"===e?1:\"template\"===e?2:\"page\"===e?3:c4(e)?4:5:5},g=m(p),y=m(h);if(g!==y)return g-y;var v=(null==(u=n.children[e])||null==(c=u.value)?void 0:c.pagePath)||\"\",b=(null==(f=n.children[t])||null==(d=f.value)?void 0:d.pagePath)||\"\";return v.localeCompare(b)}return e.localeCompare(t)}),l=0!==r||t?t:\"app\",s=[],c=[],u=!0,d=!1,f=void 0;try{for(var p,h=i[Symbol.iterator]();!(u=(p=h.next()).done);u=!0){var m=p.value,g=n.children[m];if(g){if(uP(g)){c.push(m);continue}s.push(m)}}}catch(e){d=!0,f=e}finally{try{u||null==h.return||h.return()}finally{if(d)throw f}}for(var y=c1(c[0]||\"\").split(\".\").pop()||\"js\",v=null,b=i.length-1;b>=0;b--){var x=n.children[i[b]];if(x&&x.value){var C=c4(x.value.type);if(!v&&!C){v=x;break}}}var _=null,k=!0,E=!1,j=void 0;try{for(var S,O=i[Symbol.iterator]();!(k=(S=O.next()).done);k=!0){var B=S.value,P=n.children[B];if(P&&P.value&&c4(P.value.type)){_=P;break}}}catch(e){E=!0,j=e}finally{try{k||null==O.return||O.return()}finally{if(E)throw j}}v=v||_;var I=c.length>0,T={\"not-found\":null,loading:null,error:null,\"global-error\":null};return c.forEach(function(e){var t=n.children[e];if(t&&t.value&&c4(t.value.type)){var r=c5(t.value.type);r in T&&(T[r]=t.value.pagePath||null)}}),(0,A.jsxs)(A.Fragment,{children:[I&&(0,A.jsx)(\"div\",{className:\"segment-explorer-item\",\"data-nextjs-devtool-segment-explorer-segment\":t+\"-\"+r,children:(0,A.jsx)(\"div\",{className:\"segment-explorer-item-row\",style:uO({},{paddingLeft:\"\".concat((r+1)*8,\"px\")}),children:(0,A.jsx)(\"div\",{className:\"segment-explorer-item-row-main\",children:(0,A.jsxs)(\"div\",{className:\"segment-explorer-filename\",children:[l&&(0,A.jsxs)(\"span\",{className:\"segment-explorer-filename--path\",children:[l,(0,A.jsx)(\"small\",{children:\"/\"})]}),a&&(0,A.jsx)(uS,{possibleExtension:y,missingGlobalError:a}),c.length>0&&(0,A.jsx)(\"span\",{className:\"segment-explorer-files\",children:c.map(function(e){var t=n.children[e];if(!t||!t.value||c4(t.value.type))return null;var r=t.value.pagePath,o=r.split(\"/\").pop()||\"\",a=r.startsWith(c0),i=c1(o),l=a?\"The default Next.js \".concat(t.value.type,\" is being shown. You can customize this page by adding your own \").concat(i,\" file to the app/ directory.\"):null,s=null!==t.value.boundaryType;return(0,A.jsx)(uj,{className:\"segment-explorer-file-label-tooltip--\"+(a?\"lg\":\"sm\"),direction:a?\"right\":\"top\",title:l,offset:12,children:(0,A.jsx)(uz,{type:t.value.type,isBuiltin:a,isOverridden:s,filePath:r,fileName:i})},e)})}),v&&v.value&&(0,A.jsx)(ue,{nodeState:v.value,boundaries:T})]})})})}),s.map(function(e){var o=n.children[e];if(!o)return null;var a=I?e:t+\" / \"+e;return(0,A.jsx)(uN,{segment:a,node:o,level:I?r+1:r},e)})]})}function uR(e){var t,n,r,o=(0,x.c)(4);return o[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"path\",{d:\"M14 8C14 11.3137 11.3137 14 8 14C4.68629 14 2 11.3137 2 8C2 4.68629 4.68629 2 8 2C11.3137 2 14 4.68629 14 8Z\",fill:\"var(--color-gray-400)\"}),n=(0,A.jsx)(\"path\",{d:\"M7.75 7C8.30228 7.00001 8.75 7.44772 8.75 8V11.25H7.25V8.5H6.25V7H7.75ZM8 4C8.55228 4 9 4.44772 9 5C9 5.55228 8.55228 6 8 6C7.44772 6 7 5.55228 7 5C7 4.44772 7.44772 4 8 4Z\",fill:\"var(--color-gray-900)\"}),o[0]=t,o[1]=n):(t=o[0],n=o[1]),o[2]!==e?(r=(0,A.jsxs)(\"svg\",uB(uO({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:[t,n]})),o[2]=e,o[3]=r):r=o[3],r}function uM(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 20 20\",fill:\"var(--color-gray-600)\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,A.jsx)(\"path\",{d:\"M4.5 11.25C4.5 11.3881 4.61193 11.5 4.75 11.5H14.4395L11.9395 9L13 7.93945L16.7803 11.7197L16.832 11.7764C17.0723 12.0709 17.0549 12.5057 16.7803 12.7803L13 16.5605L11.9395 15.5L14.4395 13H4.75C3.7835 13 3 12.2165 3 11.25V4.25H4.5V11.25Z\"})}),t[0]=e):e=t[0],e}function uZ(e){var t,n,r=(0,x.c)(3);return r[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M7.22763 14.1819L10.2276 2.18193L10.4095 1.45432L8.95432 1.09052L8.77242 1.81812L5.77242 13.8181L5.59051 14.5457L7.04573 14.9095L7.22763 14.1819ZM3.75002 12.0607L3.21969 11.5304L0.39647 8.70713C0.00594559 8.31661 0.00594559 7.68344 0.39647 7.29292L3.21969 4.46969L3.75002 3.93936L4.81068 5.00002L4.28035 5.53035L1.81068 8.00003L4.28035 10.4697L4.81068 11L3.75002 12.0607ZM12.25 12.0607L12.7804 11.5304L15.6036 8.70713C15.9941 8.31661 15.9941 7.68344 15.6036 7.29292L12.7804 4.46969L12.25 3.93936L11.1894 5.00002L11.7197 5.53035L14.1894 8.00003L11.7197 10.4697L11.1894 11L12.25 12.0607Z\",fill:\"currentColor\"}),r[0]=t):t=r[0],r[1]!==e?(n=(0,A.jsx)(\"svg\",uB(uO({width:\"12\",height:\"12\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",fill:\"currentColor\"},e),{children:t})),r[1]=e,r[2]=n):n=r[2],n}function uU(){var e,t,n=(e=[\"\\n .dev-tools-info-close-button:focus-visible {\\n outline: var(--focus-ring);\\n }\\n \"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return uU=function(){return n},n}function uF(e){var t,n,r,o,a,i,l,s,c,u,d,f=(0,x.c)(18),p=e.title,h=e.children,m=e.ref,g=r5().setPanel,y=(0,w.useRef)(null);return f[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=function(){var e;null==(e=y.current)||e.focus()},n=[],f[0]=t,f[1]=n):(t=f[0],n=f[1]),(0,w.useLayoutEffect)(t,n),f[2]===Symbol.for(\"react.memo_cache_sentinel\")?(r={width:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"space-between\",padding:\"8px 20px\",userSelect:\"none\",WebkitUserSelect:\"none\",borderBottom:\"1px solid var(--color-gray-alpha-400)\"},f[2]=r):r=f[2],f[3]===Symbol.for(\"react.memo_cache_sentinel\")?(o={margin:0,fontSize:\"14px\",color:\"var(--color-text-primary)\",fontWeight:\"normal\"},f[3]=o):o=f[3],f[4]!==p?(a=(0,A.jsx)(\"h3\",{style:o,children:p}),f[4]=p,f[5]=a):a=f[5],f[6]!==g?(i=function(){g(\"panel-selector\")},f[6]=g,f[7]=i):i=f[7],f[8]===Symbol.for(\"react.memo_cache_sentinel\")?(l={background:\"none\",border:\"none\",cursor:\"pointer\",padding:\"4px\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",borderRadius:\"4px\",color:\"var(--color-gray-900)\"},s=(0,A.jsx)(uq,{}),f[8]=l,f[9]=s):(l=f[8],s=f[9]),f[10]!==i?(c=(0,A.jsx)(\"button\",{ref:y,id:\"_next-devtools-panel-close\",className:\"dev-tools-info-close-button\",onClick:i,\"aria-label\":\"Close devtools panel\",style:l,children:s}),f[10]=i,f[11]=c):c=f[11],f[12]===Symbol.for(\"react.memo_cache_sentinel\")?(u=(0,A.jsx)(\"style\",{children:eu(uU())}),f[12]=u):u=f[12],f[13]!==h||f[14]!==m||f[15]!==a||f[16]!==c?(d=(0,A.jsxs)(\"div\",{style:r,ref:m,children:[a,h,c,u]}),f[13]=h,f[14]=m,f[15]=a,f[16]=c,f[17]=d):d=f[17],d}function uq(e){var t,n,r,o=(0,x.c)(4),a=e.size,i=void 0===a?22:a;return o[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t=(0,A.jsx)(\"path\",{d:\"M18 6 6 18\"}),n=(0,A.jsx)(\"path\",{d:\"m6 6 12 12\"}),o[0]=t,o[1]=n):(t=o[0],n=o[1]),o[2]!==i?(r=(0,A.jsxs)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:i,height:i,viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[t,n]}),o[2]=i,o[3]=r):r=o[3],r}function uH(){var e,t=(0,x.c)(1);return t[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 20 20\",fill:\"none\",children:(0,A.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"m9.7 3.736.045-.236h.51l.044.236a2.024 2.024 0 0 0 1.334 1.536c.19.066.375.143.554.23.618.301 1.398.29 2.03-.143l.199-.136.36.361-.135.199a2.024 2.024 0 0 0-.143 2.03c.087.179.164.364.23.554.224.65.783 1.192 1.536 1.334l.236.044v.51l-.236.044a2.024 2.024 0 0 0-1.536 1.334 4.95 4.95 0 0 1-.23.554 2.024 2.024 0 0 0 .143 2.03l.136.199-.361.36-.199-.135a2.024 2.024 0 0 0-2.03-.143c-.179.087-.364.164-.554.23a2.024 2.024 0 0 0-1.334 1.536l-.044.236h-.51l-.044-.236a2.024 2.024 0 0 0-1.334-1.536 4.952 4.952 0 0 1-.554-.23 2.024 2.024 0 0 0-2.03.143l-.199.136-.36-.361.135-.199a2.024 2.024 0 0 0 .143-2.03 4.958 4.958 0 0 1-.23-.554 2.024 2.024 0 0 0-1.536-1.334l-.236-.044v-.51l.236-.044a2.024 2.024 0 0 0 1.536-1.334 4.96 4.96 0 0 1 .23-.554 2.024 2.024 0 0 0-.143-2.03l-.136-.199.361-.36.199.135a2.024 2.024 0 0 0 2.03.143c.179-.087.364-.164.554-.23a2.024 2.024 0 0 0 1.334-1.536ZM8.5 2h3l.274 1.46c.034.185.17.333.348.394.248.086.49.186.722.3.17.082.37.074.526-.033l1.226-.839 2.122 2.122-.84 1.226a.524.524 0 0 0-.032.526c.114.233.214.474.3.722.061.177.21.314.394.348L18 8.5v3l-1.46.274a.524.524 0 0 0-.394.348 6.47 6.47 0 0 1-.3.722.524.524 0 0 0 .033.526l.839 1.226-2.122 2.122-1.226-.84a.524.524 0 0 0-.526-.032 6.477 6.477 0 0 1-.722.3.524.524 0 0 0-.348.394L11.5 18h-3l-.274-1.46a.524.524 0 0 0-.348-.394 6.477 6.477 0 0 1-.722-.3.524.524 0 0 0-.526.033l-1.226.839-2.122-2.122.84-1.226a.524.524 0 0 0 .032-.526 6.453 6.453 0 0 1-.3-.722.524.524 0 0 0-.394-.348L2 11.5v-3l1.46-.274a.524.524 0 0 0 .394-.348c.086-.248.186-.49.3-.722a.524.524 0 0 0-.033-.526l-.839-1.226 2.122-2.122 1.226.84a.524.524 0 0 0 .526.032 6.46 6.46 0 0 1 .722-.3.524.524 0 0 0 .348-.394L8.5 2Zm3 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Zm1.5 0a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\",clipRule:\"evenodd\"})}),t[0]=e):e=t[0],e}var uV=__nested_webpack_require_378273__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/menu/panel-router.css\"),u$={};u$.styleTagTransform=m(),u$.setAttributes=d(),u$.insert=c(),u$.domAPI=l(),u$.insertStyleElement=p(),a()(uV.Z,u$),uV.Z&&uV.Z.locals&&uV.Z.locals;var uW=function(){var e,t,n,r,o,a,i,l,s,c,u,d=(0,x.c)(32),f=r5(),p=f.setPanel,h=f.setSelectedIndex,m=dl(),g=m.state,y=m.dispatch,v=u3().totalErrorCount,b=\"app\"===g.routerType;d[0]!==y||d[1]!==p||d[2]!==h||d[3]!==g.isErrorOverlayOpen||d[4]!==v?(e=v>0&&{title:\"\".concat(v,\" \").concat(1===v?\"issue\":\"issues\",\" found. Click to view details in the dev overlay.\"),label:\"Issues\",value:(0,A.jsx)(oD,{children:v}),onClick:function(){if(g.isErrorOverlayOpen){y({type:q}),p(null);return}p(null),h(-1),v>0&&y({type:F})}},d[0]=y,d[1]=p,d[2]=h,d[3]=g.isErrorOverlayOpen,d[4]=v,d[5]=e):e=d[5];var w=\"Current route is \".concat(g.staticIndicator?\"static\":\"dynamic\",\".\"),C=g.staticIndicator?\"Static\":\"Dynamic\";d[6]!==p?(t=function(){return p(\"route-type\")},d[6]=p,d[7]=t):t=d[7];var _=g.staticIndicator?\"static\":\"dynamic\";return d[8]!==_?(n={\"data-nextjs-route-type\":_},d[8]=_,d[9]=n):n=d[9],d[10]!==w||d[11]!==C||d[12]!==t||d[13]!==n?(r={title:w,label:\"Route\",value:C,onClick:t,attributes:n},d[10]=w,d[11]=C,d[12]=t,d[13]=n,d[14]=r):r=d[14],d[15]!==p?(o= false?0:{title:\"Learn about Turbopack and how to enable it in your application.\",label:\"Try Turbopack\",value:(0,A.jsx)(oL,{}),onClick:function(){return p(\"turbo-info\")}},d[15]=p,d[16]=o):o=d[16],d[17]!==b||d[18]!==p?(a= true&&b&&{label:\"Route Info\",value:(0,A.jsx)(oL,{}),onClick:function(){return p(\"segment-explorer\")},attributes:{\"data-segment-explorer\":!0}},d[17]=b,d[18]=p,d[19]=a):a=d[19],d[20]===Symbol.for(\"react.memo_cache_sentinel\")?(i=(0,A.jsx)(uH,{}),d[20]=i):i=d[20],d[21]!==p?(l=function(){return p(\"preferences\")},d[21]=p,d[22]=l):l=d[22],d[23]===Symbol.for(\"react.memo_cache_sentinel\")?(s={\"data-preferences\":!0},d[23]=s):s=d[23],d[24]!==l?(c={label:\"Preferences\",value:i,onClick:l,footer:!0,attributes:s},d[24]=l,d[25]=c):c=d[25],d[26]!==e||d[27]!==c||d[28]!==r||d[29]!==o||d[30]!==a?(u=(0,A.jsx)(oT,{items:[e,r,o,a,c]}),d[26]=e,d[27]=c,d[28]=r,d[29]=o,d[30]=a,d[31]=u):u=d[31],u},uY=function(){var e,t=(0,x.c)(4),n=dl(),r=n.state,o=n.dispatch,a=n.shadowRoot;return t[0]!==o||t[1]!==a||t[2]!==r.disableDevIndicator?(e=function(){o({type:U,disabled:!r.disableDevIndicator});var e=a.getElementById(\"panel-route\"),t=a.getElementById(\"data-devtools-indicator\");if(e&&e.firstElementChild){var n=e.firstElementChild,i=\"none\"===n.style.display;n.style.display=i?\"\":\"none\"}if(t){var l=\"none\"===t.style.display;t.style.display=l?\"\":\"none\"}},t[0]=o,t[1]=a,t[2]=r.disableDevIndicator,t[3]=e):e=t[3],e},uK=function(){var e,t,n,r,o,a,i,l,s,c,u,d,f,p,h,m,g,y,v,b,C,_,k,E,j,S,O=(0,x.c)(44),B=dl().state,P=r5().triggerRef,I=uY(),T=\"app\"===B.routerType;O[0]!==B.hideShortcut||O[1]!==I?(s=B.hideShortcut?(e={},t=B.hideShortcut,n=I,t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e):{},O[0]=B.hideShortcut,O[1]=I,O[2]=s):s=O[2],r=s,o=P,(l=(0,x.c)(4))[0]!==o||l[1]!==r?(a=function(){var e=function(e){if(!((n=t7((t=o).current))&&(\"true\"===n.contentEditable||\"INPUT\"===n.tagName||\"TEXTAREA\"===n.tagName||\"SELECT\"===n.tagName||\"true\"===n.dataset[\"shortcut-recorder\"])&&!n.hasAttribute(\"readonly\"))){var t,n,a=[];e.metaKey&&a.push(\"Meta\"),e.ctrlKey&&a.push(\"Control\"),e.altKey&&a.push(\"Alt\"),e.shiftKey&&a.push(\"Shift\"),\"Meta\"!==e.key&&\"Control\"!==e.key&&\"Alt\"!==e.key&&\"Shift\"!==e.key&&a.push(e.code);var i=a.join(\"+\");r[i]&&(e.preventDefault(),r[i]())}};return window.addEventListener(\"keydown\",e),function(){return window.removeEventListener(\"keydown\",e)}},i=[o,r],l[0]=o,l[1]=r,l[2]=a,l[3]=i):(a=l[2],i=l[3]),(0,w.useEffect)(a,i),O[3]===Symbol.for(\"react.memo_cache_sentinel\")?(c=(0,A.jsx)(u0,{name:\"panel-selector\",children:(0,A.jsx)(uW,{})}),O[3]=c):c=O[3];var z=500/B.scale;O[4]!==z?(u={kind:\"fixed\",height:z,width:512},O[4]=z,O[5]=u):u=O[5],O[6]===Symbol.for(\"react.memo_cache_sentinel\")?(d=(0,A.jsx)(uF,{title:\"Preferences\"}),f=(0,A.jsx)(uG,{}),O[6]=d,O[7]=f):(d=O[6],f=O[7]),O[8]!==u?(p=(0,A.jsx)(u0,{name:\"preferences\",children:(0,A.jsx)(o2,{sharePanelSizeGlobally:!1,sizeConfig:u,closeOnClickOutside:!0,header:d,children:f})}),O[8]=u,O[9]=p):p=O[9];var D=B.staticIndicator?\"static\":\"dynamic\",L=B.staticIndicator?300/B.scale:325/B.scale,N=400/B.scale;O[10]!==L||O[11]!==N?(h={kind:\"fixed\",height:L,width:N},O[10]=L,O[11]=N,O[12]=h):h=O[12];var R=\"\".concat(B.staticIndicator?\"Static\":\"Dynamic\",\" Route\");O[13]!==R?(m=(0,A.jsx)(uF,{title:R}),O[13]=R,O[14]=m):m=O[14],O[15]!==B.routerType||O[16]!==B.staticIndicator?(g=(0,A.jsx)(n4,{routerType:B.routerType,isStaticRoute:B.staticIndicator}),O[15]=B.routerType,O[16]=B.staticIndicator,O[17]=g):g=O[17];var M=n2[B.routerType][B.staticIndicator?\"static\":\"dynamic\"];O[18]!==M?(y=(0,A.jsx)(uX,{href:M}),O[18]=M,O[19]=y):y=O[19],O[20]!==g||O[21]!==y?(v=(0,A.jsxs)(\"div\",{className:\"panel-content\",children:[g,y]}),O[20]=g,O[21]=y,O[22]=v):v=O[22],O[23]!==h||O[24]!==m||O[25]!==v||O[26]!==D?(b=(0,A.jsx)(u0,{name:\"route-type\",children:(0,A.jsx)(o2,{sharePanelSizeGlobally:!1,sizeConfig:h,closeOnClickOutside:!0,header:m,children:v},D)}),O[23]=h,O[24]=m,O[25]=v,O[26]=D,O[27]=b):b=O[27],O[28]!==T||O[29]!==B.page||O[30]!==B.scale?(C= true&&T&&(0,A.jsx)(u0,{name:\"segment-explorer\",children:(0,A.jsx)(o2,{sharePanelSizeGlobally:!1,sharePanelPositionGlobally:!1,draggable:!0,sizeConfig:{kind:\"resizable\",maxHeight:\"90vh\",maxWidth:\"90vw\",minHeight:200/B.scale,minWidth:250/B.scale,initialSize:{height:375/B.scale,width:400/B.scale}},header:(0,A.jsx)(uF,{title:\"Route Info\"}),children:(0,A.jsx)(uD,{page:B.page})})}),O[28]=T,O[29]=B.page,O[30]=B.scale,O[31]=C):C=O[31];var Z=470/B.scale,U=400/B.scale;return O[32]!==Z||O[33]!==U?(_={kind:\"fixed\",height:Z,width:U},O[32]=Z,O[33]=U,O[34]=_):_=O[34],O[35]===Symbol.for(\"react.memo_cache_sentinel\")?(k=(0,A.jsx)(uF,{title:\"Try Turbopack\"}),O[35]=k):k=O[35],O[36]===Symbol.for(\"react.memo_cache_sentinel\")?(E=(0,A.jsxs)(\"div\",{className:\"panel-content\",children:[(0,A.jsx)(nX,{}),(0,A.jsx)(uX,{href:\"https://nextjs.org/docs/app/api-reference/turbopack\"})]}),O[36]=E):E=O[36],O[37]!==_?(j=(0,A.jsx)(u0,{name:\"turbo-info\",children:(0,A.jsx)(o2,{sharePanelSizeGlobally:!1,sizeConfig:_,closeOnClickOutside:!0,header:k,children:E})}),O[37]=_,O[38]=j):j=O[38],O[39]!==b||O[40]!==C||O[41]!==j||O[42]!==p?(S=(0,A.jsxs)(A.Fragment,{children:[c,p,b,C,j]}),O[39]=b,O[40]=C,O[41]=j,O[42]=p,O[43]=S):S=O[43],S},uX=function(e){var t,n=(0,x.c)(2),r=e.href;return n[0]!==r?(t=(0,A.jsx)(\"div\",{className:\"dev-tools-info-button-container\",children:(0,A.jsx)(\"a\",{className:\"dev-tools-info-learn-more-button\",href:r,target:\"_blank\",rel:\"noreferrer noopener\",children:\"Learn More\"})}),n[0]=r,n[1]=t):t=n[1],t},uG=function(){var e,t,n,r,o=(0,x.c)(17),a=dl(),i=a.dispatch,l=a.state,s=r5(),c=s.setPanel,u=s.setSelectedIndex,d=o_();return o[0]!==i?(e=function(e){i({type:G,scale:e})},o[0]=i,o[1]=e):e=o[1],o[2]!==i||o[3]!==d?(t=function(e){i({type:K,devToolsPosition:e}),d(e)},o[2]=i,o[3]=d,o[4]=t):t=o[4],o[5]!==i||o[6]!==c||o[7]!==u?(n=function(){i({type:U,disabled:!0}),u(-1),c(null),fetch(\"/__nextjs_disable_dev_indicator\",{method:\"POST\"})},o[5]=i,o[6]=c,o[7]=u,o[8]=n):n=o[8],o[9]!==l.devToolsPosition||o[10]!==l.hideShortcut||o[11]!==l.scale||o[12]!==l.theme||o[13]!==e||o[14]!==t||o[15]!==n?(r=(0,A.jsx)(\"div\",{className:\"user-preferences-wrapper\",children:(0,A.jsx)(rk,{theme:l.theme,position:l.devToolsPosition,scale:l.scale,setScale:e,setPosition:t,hideShortcut:l.hideShortcut,setHideShortcut:u1,hide:n})}),o[9]=l.devToolsPosition,o[10]=l.hideShortcut,o[11]=l.scale,o[12]=l.theme,o[13]=e,o[14]=t,o[15]=n,o[16]=r):r=o[16],r},uQ=function(){return(0,w.useContext)(uJ)},uJ=(0,w.createContext)(null);function u0(e){var t,n,r,o,a,i=(0,x.c)(12),l=e.children,s=e.name,c=r5().panel;i[0]===Symbol.for(\"react.memo_cache_sentinel\")?(t={enterDelay:0,exitDelay:200},i[0]=t):t=i[0];var u=rN(s===c,t),d=u.mounted,f=u.rendered;if(!d)return null;i[1]!==d||i[2]!==s?(n={name:s,mounted:d},i[1]=d,i[2]=s,i[3]=n):n=i[3];var p=+!!f;i[4]!==p?(r={\"--panel-opacity\":p,\"--panel-transition\":\"opacity \".concat(200,\"ms \").concat(nt)},i[4]=p,i[5]=r):r=i[5];var h=r;return i[6]!==l||i[7]!==h?(o=(0,A.jsx)(\"div\",{id:\"panel-route\",className:\"panel-route\",style:h,children:l}),i[6]=l,i[7]=h,i[8]=o):o=i[8],i[9]!==n||i[10]!==o?(a=(0,A.jsx)(uJ,{value:n,children:o}),i[9]=n,i[10]=o,i[11]=a):a=i[11],a}function u1(e){rw({hideShortcut:e})}function u2(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function u4(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return u2(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u2(e,t)}}(e,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var u5=(0,w.createContext)(null),u3=function(){return(0,w.useContext)(u5)};function u6(){var e,t,n,r,o=(0,x.c)(11),a=u4((0,w.useState)(null),2),i=a[0],l=a[1],s=u4((0,w.useState)(-1),2),c=s[0],u=s[1],d=dl(),f=d.state,p=d.dispatch,h=d.getSquashedHydrationErrorDetails,m=(0,w.useRef)(null);return o[0]===Symbol.for(\"react.memo_cache_sentinel\")?(e=(0,A.jsx)(rY,{}),t=(0,A.jsx)(rz,{}),o[0]=e,o[1]=t):(e=o[0],t=o[1]),o[2]!==p||o[3]!==h||o[4]!==i||o[5]!==c||o[6]!==f?(n=function(e){var t=e.runtimeErrors,n=e.totalErrorCount;return(0,A.jsx)(A.Fragment,{children:f.showIndicator?(0,A.jsx)(A.Fragment,{children:(0,A.jsx)(u5,{value:{runtimeErrors:t,totalErrorCount:n},children:(0,A.jsxs)(r4,{value:{panel:i,setPanel:l,triggerRef:m,selectedIndex:c,setSelectedIndex:u},children:[(0,A.jsx)(rZ,{state:f,dispatch:p,getSquashedHydrationErrorDetails:h,runtimeErrors:t,errorCount:n}),(0,A.jsx)(uK,{}),(0,A.jsx)(oC,{})]})})}):null})},o[2]=p,o[3]=h,o[4]=i,o[5]=c,o[6]=f,o[7]=n):n=o[7],o[8]!==f||o[9]!==n?(r=(0,A.jsxs)(em,{children:[e,t,(0,A.jsx)(rV,{state:f,isAppDir:!0,children:n})]}),o[8]=f,o[9]=n,o[10]=r):r=o[10],r}function u9(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function u8(e){return function(e){if(Array.isArray(e))return u9(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||u7(e)||function(){throw TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function u7(e,t){if(e){if(\"string\"==typeof e)return u9(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u9(e,t)}}var de=null,dt=[];function dn(e){return function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];de?e.apply(void 0,[de].concat(u8(n))):dt.push(function(t){e.apply(void 0,[t].concat(u8(n)))})}}var dr={onBuildOk:dn(function(e){e({type:I})}),onBuildError:dn(function(e,t){e({type:T,message:t})}),onBeforeRefresh:dn(function(e){e({type:z})}),onRefresh:dn(function(e){e({type:D})}),onVersionInfo:dn(function(e,t){e({type:L,versionInfo:t})}),onStaticIndicator:dn(function(e,t){e({type:P,staticIndicator:t})}),onDebugInfo:dn(function(e,t){e({type:M,debugInfo:t})}),onDevIndicator:dn(function(e,t){e({type:Z,devIndicator:t})}),onDevToolsConfig:dn(function(e,t){e({type:Q,devToolsConfig:t})}),onUnhandledError:dn(function(e,t){e({type:N,reason:t})}),onUnhandledRejection:dn(function(e,t){e({type:R,reason:t})}),openErrorOverlay:dn(function(e){e({type:F})}),closeErrorOverlay:dn(function(e){e({type:q})}),toggleErrorOverlay:dn(function(e){e({type:H})}),buildingIndicatorHide:dn(function(e){e({type:$})}),buildingIndicatorShow:dn(function(e){e({type:V})}),renderingIndicatorHide:dn(function(e){e({type:Y})}),renderingIndicatorShow:dn(function(e){e({type:W})}),segmentExplorerNodeAdd:dn(function(e,t){an(t)}),segmentExplorerNodeRemove:dn(function(e,t){ar(t)}),segmentExplorerUpdateRouteState:dn(function(e,t){e({type:er,page:t})})};function da(e){var t,n,r,o,a,i,l,s,c,u,d,f,p,h,m,g,y,v,b,C=(0,x.c)(18),B=e.getOwnerStack,J=e.getSquashedHydrationErrorDetails,ee=e.isRecoverableError,et=e.routerType,en=e.shadowRoot,eo=(t=et,n=B,r=ee,(s=(0,x.c)(7))[0]!==n||s[1]!==r?(a=function(e,t,o){var a,i=n(o),l=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"/home/nicholai/Documents/dev/multi-agent_chat_interface/.next\";return e?(e=e.split(\"\\n\").map(function(e){return e.includes(\"(eval \")&&(e=e.replace(/eval code/g,\"eval\").replace(/\\(eval at [^()]* \\(/,\"(file://\").replace(/\\),.*$/g,\")\")),e}).join(\"\\n\"),(0,_.parse)(e).map(function(e){try{var n=new URL(e.file),r=k.exec(n.pathname);if(r){var o,a=null==t||null==(o=t.replace(/\\\\/g,\"/\"))?void 0:o.replace(/\\/$/,\"\");a&&(e.file=\"file://\"+a.concat(r.pop())+n.search)}}catch(e){}return{file:e.file,line1:e.lineNumber,column1:e.column,methodName:e.methodName,arguments:e.arguments}})):[]}((o.stack||\"\")+(i||\"\")),s={id:t,error:o,frames:l,type:r(o)?\"recoverable\":(a=o)&&\"NEXT_CONSOLE_ERROR\"===a[E]?\"console\":\"runtime\"},c=e.filter(function(e){return e.error.stack!==s.error.stack&&ea(e.error.stack)!==ea(s.error.stack)||n(e.error)!==n(s.error)});return c.length===e.length?(c.push(s),c):e},s[0]=n,s[1]=r,s[2]=a):a=s[2],c=a,(s[3]!==c?(i=function(e,t){switch(t.type){case M:return O(S({},e),{debugInfo:t.debugInfo});case P:return O(S({},e),{staticIndicator:t.staticIndicator});case I:return O(S({},e),{buildError:null});case T:return O(S({},e),{buildError:t.message});case z:return O(S({},e),{refreshState:{type:\"pending\",errors:[]}});case D:return O(S({},e),{buildError:null,errors:\"pending\"===e.refreshState.type?e.refreshState.errors:[],refreshState:{type:\"idle\"}});case N:case R:switch(e.refreshState.type){case\"idle\":return O(S({},e),{nextId:e.nextId+1,errors:c(e.errors,e.nextId,t.reason)});case\"pending\":return O(S({},e),{nextId:e.nextId+1,refreshState:O(S({},e.refreshState),{errors:c(e.errors,e.nextId,t.reason)})});default:return e}case L:return O(S({},e),{versionInfo:t.versionInfo});case U:return O(S({},e),{disableDevIndicator:t.disabled});case Z:return O(S({},e),{showIndicator:!0,disableDevIndicator:ei||!!t.devIndicator.disabledUntil});case F:return O(S({},e),{isErrorOverlayOpen:!0});case q:return O(S({},e),{isErrorOverlayOpen:!1});case H:return O(S({},e),{isErrorOverlayOpen:!e.isErrorOverlayOpen});case V:return O(S({},e),{buildingIndicator:!0});case $:return O(S({},e),{buildingIndicator:!1});case W:return O(S({},e),{renderingIndicator:!0});case Y:return O(S({},e),{renderingIndicator:!1});case K:return O(S({},e),{devToolsPosition:t.devToolsPosition});case X:return O(S({},e),{devToolsPanelPosition:O(S({},e.devToolsPanelPosition),j({},t.key,t.devToolsPanelPosition))});case G:return O(S({},e),{scale:t.scale});case er:return O(S({},e),{page:t.page});case Q:var n=t.devToolsConfig,r=n.theme,o=n.disableDevIndicator,a=n.devToolsPosition,i=n.devToolsPanelPosition,l=n.devToolsPanelSize,s=n.scale,u=n.hideShortcut;return O(S({},e),{theme:null!=r?r:e.theme,disableDevIndicator:null!=o?o:e.disableDevIndicator,devToolsPosition:null!=a?a:e.devToolsPosition,devToolsPanelPosition:null!=i?i:e.devToolsPanelPosition,scale:null!=s?s:e.scale,devToolsPanelSize:null!=l?l:e.devToolsPanelSize,hideShortcut:void 0!==u?u:e.hideShortcut});default:return e}},s[3]=c,s[4]=i):i=s[4],s[5]!==t)?(o=t,l=O(S({},es),{isErrorOverlayOpen:\"pages\"===o,routerType:o}),s[5]=t,s[6]=l):l=s[6],u=(0,w.useReducer)(i,l),d=2,function(e){if(Array.isArray(e))return e}(u)||function(e,t){var n,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(u,2)||u7(u,d)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),el=eo[0],ec=eo[1];return C[0]!==en.host||C[1]!==el.theme?(f=function(){var e=en.host;\"dark\"===el.theme?(e.classList.add(\"dark\"),e.classList.remove(\"light\")):\"light\"===el.theme?(e.classList.add(\"light\"),e.classList.remove(\"dark\")):(e.classList.remove(\"dark\"),e.classList.remove(\"light\"))},C[0]=en.host,C[1]=el.theme,C[2]=f):f=C[2],C[3]!==en||C[4]!==el.theme?(p=[en,el.theme],C[3]=en,C[4]=el.theme,C[5]=p):p=C[5],(0,w.useLayoutEffect)(f,p),C[6]!==ec?(h=function(){de=ec;var e=setTimeout(function(){!function(e){try{var t=!0,n=!1,r=void 0;try{for(var o,a=dt[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)(0,o.value)(e)}catch(e){n=!0,r=e}finally{try{t||null==a.return||a.return()}finally{if(n)throw r}}}finally{dt.length=0}}(ec)});return function(){de=null,clearTimeout(e)}},C[6]=ec,C[7]=h):h=C[7],C[8]===Symbol.for(\"react.memo_cache_sentinel\")?(m=[],C[8]=m):m=C[8],(0,w.useInsertionEffect)(h,m),C[9]===Symbol.for(\"react.memo_cache_sentinel\")?(g=(0,A.jsx)(ef,{}),C[9]=g):g=C[9],C[10]!==ec||C[11]!==J||C[12]!==en||C[13]!==el?(y={dispatch:ec,getSquashedHydrationErrorDetails:J,shadowRoot:en,state:el},C[10]=ec,C[11]=J,C[12]=en,C[13]=el,C[14]=y):y=C[14],C[15]===Symbol.for(\"react.memo_cache_sentinel\")?(v=(0,A.jsx)(u6,{}),C[15]=v):v=C[15],C[16]!==y?(b=(0,A.jsxs)(A.Fragment,{children:[g,(0,A.jsx)(di,{value:y,children:v})]}),C[16]=y,C[17]=b):b=C[17],b}var di=(0,w.createContext)(null),dl=function(){return(0,w.useContext)(di)},ds=!1,dc=!1;function du(){return null}function dd(e,t){if(ds)throw Error(\"Next DevTools: Pages Dev Overlay is already mounted. This is a bug in Next.js\");if(!dc){var n=document.createElement(\"script\");n.style.display=\"block\",n.style.position=\"absolute\",n.setAttribute(\"data-nextjs-dev-overlay\",\"true\");var r=document.createElement(\"nextjs-portal\");n.appendChild(r),document.body.appendChild(n);var o=(0,ec.createRoot)(r,{identifierPrefix:\"ndt-\"}),a=r.attachShadow({mode:\"open\"});(0,w.startTransition)(function(){o.render((0,A.jsx)(da,{getOwnerStack:e,getSquashedHydrationErrorDetails:du,isRecoverableError:t,routerType:\"app\",shadowRoot:a}))}),dc=!0}}function df(e,t,n){if(dc)throw Error(\"Next DevTools: App Dev Overlay is already mounted. This is a bug in Next.js\");if(!ds){var r=document.createElement(\"nextjs-portal\");r.style.position=\"absolute\",new MutationObserver(function(e){var t=!0,n=!1,o=void 0;try{for(var a,i=e[Symbol.iterator]();!(t=(a=i.next()).done);t=!0){var l=a.value;if(\"childList\"===l.type){var s=!0,c=!1,u=void 0;try{for(var d,f=l.removedNodes[Symbol.iterator]();!(s=(d=f.next()).done);s=!0)d.value===r&&document.body.appendChild(r)}catch(e){c=!0,u=e}finally{try{s||null==f.return||f.return()}finally{if(c)throw u}}}}}catch(e){n=!0,o=e}finally{try{t||null==i.return||i.return()}finally{if(n)throw o}}}).observe(document.body,{childList:!0}),document.body.appendChild(r);var o=(0,ec.createRoot)(r,{identifierPrefix:\"ndt-\"}),a=r.attachShadow({mode:\"open\"});(0,w.startTransition)(function(){o.render((0,A.jsx)(da,{getOwnerStack:e,getSquashedHydrationErrorDetails:t,isRecoverableError:n,routerType:\"pages\",shadowRoot:a}))}),ds=!0}}})(),exports.DevOverlayContext=__nested_webpack_exports__.DevOverlayContext,exports.dispatcher=__nested_webpack_exports__.dispatcher,exports.renderAppDevOverlay=__nested_webpack_exports__.renderAppDevOverlay,exports.renderPagesDevOverlay=__nested_webpack_exports__.renderPagesDevOverlay,exports.useDevOverlayContext=__nested_webpack_exports__.useDevOverlayContext,__nested_webpack_exports__)-1===[\"DevOverlayContext\",\"dispatcher\",\"renderAppDevOverlay\",\"renderPagesDevOverlay\",\"useDevOverlayContext\"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__nested_webpack_exports__[__webpack_i__]);Object.defineProperty(exports, \"__esModule\", ({value:!0}));\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1kZXZ0b29scy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiO0FBQUEseUJBQXlCLDZSQUE2UixhQUFhLE9BQU8sUUFBUSxFQUFFLDhhQUE4YTtBQUNsd0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLDZJQUE2SSxL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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sMklBQTJJLFlBQVksYUFBYSxXQUFXLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxZQUFZLE1BQU0sWUFBWSxPQUFPLE1BQU0sVUFBVSxVQUFVLFVBQVUsWUFBWSxPQUFPLGFBQWEsT0FBTyxVQUFVLFVBQVUsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLEtBQUssS0FBSyxVQUFVLEtBQUssS0FBSyxVQUFVLEtBQUssS0FBSyxVQUFVLE1BQU0sUUFBUSxVQUFVLFVBQVUsVUFBVSxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksT0FBTyxNQUFNLFVBQVUsVUFBVSxZQUFZLE9BQU8sTUFBTSxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0saUlBQWlJLFlBQVksV0FBVyxVQUFVLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsV0FBVyxNQUFNLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxNQUFNLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLE1BQU0sS0FBSyxVQUFVLFlBQVksYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxLQUFLLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLFdBQVcsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsTUFBTSxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsV0FBVyxVQUFVLE1BQU0sS0FBSyxZQUFZLGFBQWEsT0FBTyxZQUFZLE1BQU0sVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLFdBQVcsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsV0FBVyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksV0FBVyxNQUFNLEtBQUssVUFBVSxrREFBa0QsOEJBQThCLG1CQUFtQixnQkFBZ0IsaUJBQWlCLEdB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSxzR0FBc0csV0FBVyxZQUFZLFdBQVcsT0FBTyxVQUFVLEtBQUssT0FBTyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sY0FBYyxVQUFVLE9BQU8sS0FBSyxVQUFVLE1BQU0sT0FBTyxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksV0FBVyxZQUFZLE9BQU8sVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLE1BQU0sWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsT0FBTyxPQUFPLFVBQVUsWUFBWSxPQUFPLFFBQVEsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLE9BQU8sS0FBSyxZQUFZLE9BQU8sTUFBTSxZQUFZLE9BQU8sS0FBSyxVQUFVLE9BQU8sTUFBTSxZQUFZLFdBQVcsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksYUFBYSxP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Q0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSw4R0FBOEcsWUFBWSxhQUFhLGNBQWMsYUFBYSxjQUFjLGFBQWEsYUFBYSxjQUFjLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGNBQWMsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxjQUFjLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsY0FBYyxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGNBQWMsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxjQUFjLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsY0FBYyxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGNBQWMsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssS0FBSyxZQUFZLGFBQWEsY0FBYyxhQUFhLGNBQWMsYUFB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGlIQUFpSCxVQUFVLEtBQUssYUFBYSxhQUFhLGFBQWEsY0FBYyxhQUFhLGNBQWMsYUFBYSxhQUFhLGNBQWMsTUFBTSxPQUFPLE1BQU0sTUFBTSxZQUFZLGNBQWMsYUFBYSxhQUFhLGFBQWEsYUFBYSxNQUFNLE9BQU8sTUFBTSxPQUFPLGFBQWEsYUFBYSxjQUFjLGFBQWEsTUFBTSxRQUFRLGFBQWEsY0FBYyxhQUFhLGFBQWEsYUFBYSxnQkFBZ0IsY0FBYyxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsY0FBYyxnQkFBZ0IsS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFh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QUF1QixvQkFBb0IsU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxlQUFlLFFBQVEsYUFBYSxLQUFLLEVBQUUsa0JBQWtCLHlCQUF5QiwyTEFBMkwsbUVBQW1FLHNFQUFzRSx1SEFBdUgsdURBQXVELDBCQUEwQixtQkFBbUIsR0FBRyw2QkFBNkIsK0NBQStDLDJCQUEyQixhQUFhLGNBQWMsWUFBWSxpQkFBaUIsbUdBQW1HLFFBQVEsdUNBQXVDLHFHQUFxRyw4Q0FBOEMsOENBQThDLDJCQUEyQix3QkFBd0Isb0JBQW9CLFlBQVksRUFBRSxpQ0FBaUMsdUJBQXVCLHVHQUF1RyxHQUFHLFNBQVMsbUJBQW1CLGlHQUFpRyxRQUFRLDhDQUE4Qyw2REFBNkQsdUJBQXVCLElBQUksaUNBQWlDLHVCQUF1QixNQUFNLGNBQWMseUJBQXlCLHVCQUF1QixJQUFJLDhDQUE4Qyx1QkFBdUIsK0NBQStDLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsaUJBQWlCLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsZUFBZSx5QkFBeUIsYUFBYSwrQkFBK0IsMkJBQTJCLHdCQUF3QixvQkFBb0IsWUFBWSxFQUFFLGlDQUFpQyx1QkFBdUIsd0dBQXdHLEdBQUcsVUFBVSxJQUFJLHlCQUF5QixDQUFDLDBCQUFtQixtQkFBbUIsa0JBQWtCLENBQUMsMEJBQW1CLFlBQVksMkJBQTJCLENBQUMsMEJBQW1CLHFCQUFxQiw2QkFBNkIsQ0FBQywwQkFBbUIsdUJBQXVCLDRCQUE0QixDQUFDLDBCQUFtQixzQkFBc0IsMEJBQW1CLDhKQUE4SiwwQkFBbUIsaUJBQWlCLDhDQUEyQyxDQUFDLFNBQVMsRUFBQztBQUMxem1FIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1kZXZ0b29scy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX193ZWJwYWNrX21vZHVsZXNfXz17XCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9kZXZ0b29scy1pbmRpY2F0b3IvZGV2dG9vbHMtaW5kaWNhdG9yLmNzc1wiOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtuLmQodCx7WjooKT0+bH0pO3ZhciByPW4oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCIpLG89bi5uKHIpLGE9bihcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiKSxpPW4ubihhKSgpKG8oKSk7aS5wdXNoKFtlLmlkLGBbZGF0YS1uZXh0anMtdG9hc3RdIHtcbiAgJltkYXRhLWhpZGRlbj0ndHJ1ZSddIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5kZXYtdG9vbHMtaW5kaWNhdG9yLW1lbnUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZW51KTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC14bCk7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stc2Fucyk7XG4gIHotaW5kZXg6IDM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG9wYWNpdHk6IDA7XG4gIG91dGxpbmU6IDA7XG4gIG1pbi13aWR0aDogMjQ4cHg7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tYW5pbWF0ZS1vdXQtZHVyYXRpb24tbXMpXG4gICAgdmFyKC0tYW5pbWF0ZS1vdXQtdGltaW5nLWZ1bmN0aW9uKTtcblxuICAmW2RhdGEtcmVuZGVyZWQ9J3RydWUnXSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBzY2FsZTogMTtcbiAgfVxufVxuXG4uZGV2LXRvb2xzLWluZGljYXRvci1pbm5lciB7XG4gIHBhZGRpbmc6IDZweDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5kZXYtdG9vbHMtaW5kaWNhdG9yLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiA4cHggNnB4O1xuICBoZWlnaHQ6IHZhcigtLXNpemUtMzYpO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICBzdmcge1xuICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xuICB9XG5cbiAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICBvdXRsaW5lOiAwO1xuICB9XG59XG5cbi5kZXYtdG9vbHMtaW5kaWNhdG9yLWZvb3RlciB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcbiAgcGFkZGluZzogNnB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmRldi10b29scy1pbmRpY2F0b3ItaXRlbVtkYXRhLXNlbGVjdGVkPSd0cnVlJ10ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcbn1cblxuLmRldi10b29scy1pbmRpY2F0b3ItbGFiZWwge1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xuICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xufVxuXG4uZGV2LXRvb2xzLWluZGljYXRvci12YWx1ZSB7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi5kZXYtdG9vbHMtaW5kaWNhdG9yLWlzc3VlLWNvdW50IHtcbiAgLS1jb2xvci1wcmltYXJ5OiB2YXIoLS1jb2xvci1ncmF5LTgwMCk7XG4gIC0tY29sb3Itc2Vjb25kYXJ5OiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBnYXA6IDhweDtcbiAgbWluLXdpZHRoOiB2YXIoLS1zaXplLTQwKTtcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbWFsbCk7XG4gIHBhZGRpbmc6IDJweDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XG4gIGJvcmRlci1yYWRpdXM6IDEyOHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTMpO1xuICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuXG4gICZbZGF0YS1oYXMtaXNzdWVzPSd0cnVlJ10ge1xuICAgIC0tY29sb3ItcHJpbWFyeTogdmFyKC0tY29sb3ItcmVkLTgwMCk7XG4gICAgLS1jb2xvci1zZWNvbmRhcnk6IHZhcigtLWNvbG9yLXJlZC0xMDApO1xuICB9XG5cbiAgLmRldi10b29scy1pbmRpY2F0b3ItaXNzdWUtY291bnQtaW5kaWNhdG9yIHtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZS04KTtcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtOCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICB9XG59XG5cbi5kZXYtdG9vbHMtaW5kaWNhdG9yLXNob3J0Y3V0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiA0cHg7XG5cbiAga2JkIHtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZS0yMCk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZCk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLXNhbnMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0xNik7XG4gIH1cbn1cblxuLmRldi10b29scy1ncmFiYmluZyB7XG4gIGN1cnNvcjogZ3JhYmJpbmc7XG5cbiAgPiAqIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2RldnRvb2xzLWluZGljYXRvci9kZXZ0b29scy1pbmRpY2F0b3IuY3NzXCJdLG5hbWVzOltdLG1hcHBpbmdzOlwiQUFBQTtFQUNFO0lBQ0UsYUFBYTtFQUNmO0FBQ0Y7O0FBRUE7RUFDRSxhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLHVCQUF1QjtFQUN2Qix1Q0FBdUM7RUFDdkMsNkNBQTZDO0VBQzdDLDRCQUE0QjtFQUM1Qiw4QkFBOEI7RUFDOUIsZ0NBQWdDO0VBQ2hDLGtCQUFrQjtFQUNsQixtQ0FBbUM7RUFDbkMsVUFBVTtFQUNWLGdCQUFnQjtFQUNoQixVQUFVO0VBQ1YsVUFBVTtFQUNWLGdCQUFnQjtFQUNoQjtzQ0FDb0M7O0VBRXBDO0lBQ0UsVUFBVTtJQUNWLFFBQVE7RUFDVjtBQUNGOztBQUVBO0VBQ0UsWUFBWTtFQUNaLFdBQVc7QUFDYjs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsZ0JBQWdCO0VBQ2hCLHNCQUFzQjtFQUN0QixrQkFBa0I7RUFDbEIsZ0NBQWdDO0VBQ2hDLGlCQUFpQjtFQUNqQixtQkFBbUI7O0VBRW5CO0lBQ0UscUJBQXFCO0lBQ3JCLHNCQUFzQjtFQUN4Qjs7RUFFQTtJQUNFLFVBQVU7RUFDWjtBQUNGOztBQUVBO0VBQ0UsdUNBQXVDO0VBQ3ZDLFlBQVk7RUFDWiwyQ0FBMkM7RUFDM0MsV0FBVztBQUNiOztBQUVBO0VBQ0UsZUFBZTtFQUNmLHVDQUF1QztBQUN6Qzs7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QiwyQkFBMkI7RUFDM0IsNkJBQTZCO0FBQy9COztBQUVBO0VBQ0UseUJBQXlCO0VBQ3pCLDJCQUEyQjtFQUMzQiw0QkFBNEI7RUFDNUIsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0Usc0NBQXNDO0VBQ3RDLHdDQUF3QztFQUN4QyxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsUUFBUTtFQUNSLHlCQUF5QjtFQUN6QixzQkFBc0I7RUFDdEIsdUNBQXVDO0VBQ3ZDLDZDQUE2QztFQUM3Qyw0QkFBNEI7RUFDNUIsK0JBQStCO0VBQy9CLFlBQVk7RUFDWiw2QkFBNkI7RUFDN0Isb0JBQW9CO0VBQ3BCLGdCQUFnQjtFQUNoQix5QkFBeUI7RUFDekIsa0NBQWtDOztFQUVsQztJQUNFLHFDQUFxQztJQUNyQyx1Q0FBdUM7RUFDekM7O0VBRUE7SUFDRSxvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLGdDQUFnQztJQUNoQyw0Q0FBNEM7SUFDNUMsa0JBQWtCO0VBQ3BCO0FBQ0Y7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsUUFBUTs7RUFFUjtJQUNFLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIsYUFBYTtJQUNiLHVCQUF1QjtJQUN2QixtQkFBbUI7SUFDbkIsZ0NBQWdDO0lBQ2hDLHVDQUF1QztJQUN2QyxtQ0FBbUM7SUFDbkMsdUNBQXVDO0lBQ3ZDLDZCQUE2QjtJQUM3QixrQkFBa0I7SUFDbEIseUJBQXlCO0lBQ3pCLDJCQUEyQjtFQUM3QjtBQUNGOztBQUVBO0VBQ0UsZ0JBQWdCOztFQUVoQjtJQUNFLG9CQUFvQjtFQUN0QjtBQUNGXCIsc291cmNlc0NvbnRlbnQ6W1wiW2RhdGEtbmV4dGpzLXRvYXN0XSB7XFxuICAmW2RhdGEtaGlkZGVuPSd0cnVlJ10ge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG5cXG4uZGV2LXRvb2xzLWluZGljYXRvci1tZW51IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1lbnUpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC14bCk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1zYW5zKTtcXG4gIHotaW5kZXg6IDM7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgb3BhY2l0eTogMDtcXG4gIG91dGxpbmU6IDA7XFxuICBtaW4td2lkdGg6IDI0OHB4O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1hbmltYXRlLW91dC1kdXJhdGlvbi1tcylcXG4gICAgdmFyKC0tYW5pbWF0ZS1vdXQtdGltaW5nLWZ1bmN0aW9uKTtcXG5cXG4gICZbZGF0YS1yZW5kZXJlZD0ndHJ1ZSddIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgc2NhbGU6IDE7XFxuICB9XFxufVxcblxcbi5kZXYtdG9vbHMtaW5kaWNhdG9yLWlubmVyIHtcXG4gIHBhZGRpbmc6IDZweDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uZGV2LXRvb2xzLWluZGljYXRvci1pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogOHB4IDZweDtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS0zNik7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG5cXG4gIHN2ZyB7XFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gIH1cXG5cXG4gICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgIG91dGxpbmU6IDA7XFxuICB9XFxufVxcblxcbi5kZXYtdG9vbHMtaW5kaWNhdG9yLWZvb3RlciB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxuICBwYWRkaW5nOiA2cHg7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5kZXYtdG9vbHMtaW5kaWNhdG9yLWl0ZW1bZGF0YS1zZWxlY3RlZD0ndHJ1ZSddIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcXG59XFxuXFxuLmRldi10b29scy1pbmRpY2F0b3ItbGFiZWwge1xcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbn1cXG5cXG4uZGV2LXRvb2xzLWluZGljYXRvci12YWx1ZSB7XFxuICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4uZGV2LXRvb2xzLWluZGljYXRvci1pc3N1ZS1jb3VudCB7XFxuICAtLWNvbG9yLXByaW1hcnk6IHZhcigtLWNvbG9yLWdyYXktODAwKTtcXG4gIC0tY29sb3Itc2Vjb25kYXJ5OiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGdhcDogOHB4O1xcbiAgbWluLXdpZHRoOiB2YXIoLS1zaXplLTQwKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS0yNCk7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNtYWxsKTtcXG4gIHBhZGRpbmc6IDJweDtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgYm9yZGVyLXJhZGl1czogMTI4cHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEzKTtcXG4gIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XFxuXFxuICAmW2RhdGEtaGFzLWlzc3Vlcz0ndHJ1ZSddIHtcXG4gICAgLS1jb2xvci1wcmltYXJ5OiB2YXIoLS1jb2xvci1yZWQtODAwKTtcXG4gICAgLS1jb2xvci1zZWNvbmRhcnk6IHZhcigtLWNvbG9yLXJlZC0xMDApO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmRpY2F0b3ItaXNzdWUtY291bnQtaW5kaWNhdG9yIHtcXG4gICAgd2lkdGg6IHZhcigtLXNpemUtOCk7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS04KTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcHJpbWFyeSk7XFxuICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1jb2xvci1zZWNvbmRhcnkpO1xcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB9XFxufVxcblxcbi5kZXYtdG9vbHMtaW5kaWNhdG9yLXNob3J0Y3V0IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDRweDtcXG5cXG4gIGtiZCB7XFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTIwKTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbWQpO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLXNhbnMpO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gIH1cXG59XFxuXFxuLmRldi10b29scy1ncmFiYmluZyB7XFxuICBjdXJzb3I6IGdyYWJiaW5nO1xcblxcbiAgPiAqIHtcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICB9XFxufVxcblwiXSxzb3VyY2VSb290OlwiXCJ9XSk7bGV0IGw9aX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9kZXZ0b29scy1wYW5lbC9yZXNpemUvcmVzaXplLWhhbmRsZS5jc3NcIjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1o6KCk9Pmx9KTt2YXIgcj1uKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPW4ubihyKSxhPW4oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT1uLm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLnJlc2l6ZS1jb250YWluZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIC8qIHRvZG86IGJldHRlciB6IGluZGV4ICovXG4gIHotaW5kZXg6IDEwO1xuICAvKiB0b2RvOiBpcyB0aGlzIG5lZWRlZCAqL1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuLnJlc2l6ZS1saW5lIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICAvKiB0b2RvIHNtYXJ0ZXIgeiBpbmRleCAqL1xuICB6LWluZGV4OiAtMTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIC8qIGEgbm9ybWFsIGV4aXQgYW5pbWF0aW9uIGN1cnZlLSBhdCB0aGlzIHBvaW50IHRoZSBleGl0IGFuaW1hdGlvbiBpcyAqL1xuICAvKiBpbW1lZGlhdGVseSByZXNwb25zaXZlIHNvIHdlIGRvbid0IG5lZWQgYSBiZXNwb2tlIGN1cnZlICovXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjRzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG4gIC8qIHRvZG86IGJldHRlciB2YXI/ICovXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbn1cblxuLyogc3RhcnQgcmVhbGx5IGZhc3QgYmVjYXVzZSB3ZSBzdGFydCBzdXBlciBoaWRkZW4gaW5pdGlhbGx5IGJlaGluZCB0aGUgcGFuZWwsIG90aGVyd2lzZSBmZWVscyBsaWtlIGFuIHVuaW50ZW5kZWQgYW5pbWF0aW9uIGRlbGF5ICovXG4ucmVzaXplLWNvbnRhaW5lcjpob3ZlciB+IC5yZXNpemUtbGluZSB7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMC45KTtcbn1cblxuLnJlc2l6ZS1jb250YWluZXIucmlnaHQsXG4ucmVzaXplLWNvbnRhaW5lci5sZWZ0IHtcbiAgdG9wOiAwO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAyMnB4O1xuICBjdXJzb3I6IGV3LXJlc2l6ZTtcbn1cblxuLyogdG9kbzogZG9uJ3QgaGFyZCBjb2RlIGFsbCB0aGVzZSB2YWx1ZXMvdXNlIHZhcnMgKi9cblxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLFxuLnJlc2l6ZS1jb250YWluZXIudG9wIHtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMjJweDtcbiAgY3Vyc29yOiBucy1yZXNpemU7XG59XG5cbi5yZXNpemUtY29udGFpbmVyLnRvcCB7XG4gIHRvcDogLTdweDtcbn1cbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbSB7XG4gIGJvdHRvbTogLTdweDtcbn1cbi5yZXNpemUtY29udGFpbmVyLmxlZnQge1xuICBsZWZ0OiAtN3B4O1xufVxuLnJlc2l6ZS1jb250YWluZXIucmlnaHQge1xuICByaWdodDogLTdweDtcbn1cblxuLnJlc2l6ZS1jb250YWluZXIudG9wLWxlZnQsXG4ucmVzaXplLWNvbnRhaW5lci50b3AtcmlnaHQsXG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b20tbGVmdCxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbS1yaWdodCB7XG4gIHdpZHRoOiAyNnB4O1xuICBoZWlnaHQ6IDI2cHg7XG4gIHotaW5kZXg6IDE1O1xufVxuXG4ucmVzaXplLWNvbnRhaW5lci50b3AtbGVmdCB7XG4gIHRvcDogLTVweDtcbiAgbGVmdDogLTVweDtcbiAgY3Vyc29yOiBud3NlLXJlc2l6ZTtcbn1cbi5yZXNpemUtY29udGFpbmVyLnRvcC1yaWdodCB7XG4gIHRvcDogLTVweDtcbiAgcmlnaHQ6IC01cHg7XG4gIGN1cnNvcjogbmVzdy1yZXNpemU7XG59XG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b20tbGVmdCB7XG4gIGJvdHRvbTogLTVweDtcbiAgbGVmdDogLTVweDtcbiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTtcbn1cbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbS1yaWdodCB7XG4gIGJvdHRvbTogLTVweDtcbiAgcmlnaHQ6IC01cHg7XG4gIGN1cnNvcjogbndzZS1yZXNpemU7XG59XG5cbi5yZXNpemUtbGluZS50b3AsXG4ucmVzaXplLWxpbmUuYm90dG9tIHtcbiAgaGVpZ2h0OiAxOHB4O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xufVxuXG4ucmVzaXplLWxpbmUubGVmdCxcbi5yZXNpemUtbGluZS5yaWdodCB7XG4gIHdpZHRoOiAxOHB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcbn1cblxuLnJlc2l6ZS1saW5lLnRvcCB7XG4gIHRvcDogLTdweDtcbiAgbGVmdDogY2FsYygtMSAqIHZhcigtLWJvcmRlci1sZWZ0LCAycHgpKTtcbiAgd2lkdGg6IGNhbGMoMTAwJSArIHZhcigtLWJvcmRlci1ob3Jpem9udGFsLCA0cHgpKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1sZykgdmFyKC0tcm91bmRlZC1sZykgMCAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMThweCk7XG59XG5cbi5yZXNpemUtbGluZS5ib3R0b20ge1xuICBib3R0b206IC03cHg7XG4gIGxlZnQ6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItbGVmdCwgMnB4KSk7XG4gIHdpZHRoOiBjYWxjKDEwMCUgKyB2YXIoLS1ib3JkZXItaG9yaXpvbnRhbCwgNHB4KSk7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCB2YXIoLS1yb3VuZGVkLWxnKSB2YXIoLS1yb3VuZGVkLWxnKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xOHB4KTtcbn1cblxuLnJlc2l6ZS1saW5lLmxlZnQge1xuICB0b3A6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItdG9wLCAycHgpKTtcbiAgbGVmdDogLTdweDtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgKyB2YXIoLS1ib3JkZXItdmVydGljYWwsIDRweCkpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWxnKSAwIDAgdmFyKC0tcm91bmRlZC1sZyk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxOHB4KTtcbn1cblxuLnJlc2l6ZS1saW5lLnJpZ2h0IHtcbiAgdG9wOiBjYWxjKC0xICogdmFyKC0tYm9yZGVyLXRvcCwgMnB4KSk7XG4gIHJpZ2h0OiAtN3B4O1xuICBoZWlnaHQ6IGNhbGMoMTAwJSArIHZhcigtLWJvcmRlci12ZXJ0aWNhbCwgNHB4KSk7XG4gIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tcm91bmRlZC1sZykgdmFyKC0tcm91bmRlZC1sZykgMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xOHB4KTtcbn1cblxuLnJlc2l6ZS1jb250YWluZXIucmlnaHQ6aG92ZXIgfiAucmVzaXplLWxpbmUucmlnaHQsXG4ucmVzaXplLWNvbnRhaW5lci5sZWZ0OmhvdmVyIH4gLnJlc2l6ZS1saW5lLmxlZnQsXG4ucmVzaXplLWxpbmUucmlnaHQuZHJhZ2dpbmcsXG4ucmVzaXplLWxpbmUubGVmdC5kcmFnZ2luZyB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbn1cblxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tOmhvdmVyIH4gLnJlc2l6ZS1saW5lLmJvdHRvbSxcbi5yZXNpemUtY29udGFpbmVyLnRvcDpob3ZlciB+IC5yZXNpemUtbGluZS50b3AsXG4ucmVzaXplLWxpbmUuYm90dG9tLmRyYWdnaW5nLFxuLnJlc2l6ZS1saW5lLnRvcC5kcmFnZ2luZyB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLyogbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3Qgc2hvdyBtdWx0aXBsZSBoYW5kbGVzIGF0IG9uY2VcbiAqIHdlIHNob3VsZCBvbmx5IGV2ZXIgc2hvdyB0aGUgY3VycmVudGx5IHJlc2l6aW5nIGhhbmRsZVxuICogcmVnYXJkbGVzcyBvZiBob3ZlciBzdGF0ZSBcbiAqL1xuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIucmlnaHQ6aG92ZXIgfiAucmVzaXplLWxpbmUucmlnaHQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTIwcHgpO1xufVxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIubGVmdDpob3ZlciB+IC5yZXNpemUtbGluZS5sZWZ0IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDIwcHgpO1xufVxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIuYm90dG9tOmhvdmVyIH4gLnJlc2l6ZS1saW5lLmJvdHRvbSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XG59XG4ucmVzaXplLWNvbnRhaW5lci5uby1ob3Zlci50b3A6aG92ZXIgfiAucmVzaXplLWxpbmUudG9wIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwcHgpO1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2RldnRvb2xzLXBhbmVsL3Jlc2l6ZS9yZXNpemUtaGFuZGxlLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRSxrQkFBa0I7RUFDbEIseUJBQXlCO0VBQ3pCLFdBQVc7RUFDWCx5QkFBeUI7RUFDekIsdUJBQXVCO0FBQ3pCOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLHlCQUF5QjtFQUN6QixXQUFXO0VBQ1gsb0JBQW9CO0VBQ3BCLHVFQUF1RTtFQUN2RSw0REFBNEQ7RUFDNUQsdURBQXVEO0VBQ3ZELHNCQUFzQjtFQUN0Qix1Q0FBdUM7QUFDekM7O0FBRUEsbUlBQW1JO0FBQ25JO0VBQ0UsNERBQTREO0FBQzlEOztBQUVBOztFQUVFLE1BQU07RUFDTixZQUFZO0VBQ1osV0FBVztFQUNYLGlCQUFpQjtBQUNuQjs7QUFFQSxvREFBb0Q7O0FBRXBEOztFQUVFLE9BQU87RUFDUCxXQUFXO0VBQ1gsWUFBWTtFQUNaLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLFNBQVM7QUFDWDtBQUNBO0VBQ0UsWUFBWTtBQUNkO0FBQ0E7RUFDRSxVQUFVO0FBQ1o7QUFDQTtFQUNFLFdBQVc7QUFDYjs7QUFFQTs7OztFQUlFLFdBQVc7RUFDWCxZQUFZO0VBQ1osV0FBVztBQUNiOztBQUVBO0VBQ0UsU0FBUztFQUNULFVBQVU7RUFDVixtQkFBbUI7QUFDckI7QUFDQTtFQUNFLFNBQVM7RUFDVCxXQUFXO0VBQ1gsbUJBQW1CO0FBQ3JCO0FBQ0E7RUFDRSxZQUFZO0VBQ1osVUFBVTtFQUNWLG1CQUFtQjtBQUNyQjtBQUNBO0VBQ0UsWUFBWTtFQUNaLFdBQVc7RUFDWCxtQkFBbUI7QUFDckI7O0FBRUE7O0VBRUUsWUFBWTtFQUNaLFdBQVc7RUFDWCw2Q0FBNkM7QUFDL0M7O0FBRUE7O0VBRUUsV0FBVztFQUNYLFlBQVk7RUFDWiw2Q0FBNkM7QUFDL0M7O0FBRUE7RUFDRSxTQUFTO0VBQ1Qsd0NBQXdDO0VBQ3hDLGlEQUFpRDtFQUNqRCxzREFBc0Q7RUFDdEQsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0UsWUFBWTtFQUNaLHdDQUF3QztFQUN4QyxpREFBaUQ7RUFDakQsc0RBQXNEO0VBQ3RELDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLHNDQUFzQztFQUN0QyxVQUFVO0VBQ1YsZ0RBQWdEO0VBQ2hELHNEQUFzRDtFQUN0RCwyQkFBMkI7QUFDN0I7O0FBRUE7RUFDRSxzQ0FBc0M7RUFDdEMsV0FBVztFQUNYLGdEQUFnRDtFQUNoRCxzREFBc0Q7RUFDdEQsNEJBQTRCO0FBQzlCOztBQUVBOzs7O0VBSUUsd0JBQXdCO0FBQzFCOztBQUVBOzs7O0VBSUUsd0JBQXdCO0FBQzFCOztBQUVBOzs7RUFHRTtBQUNGO0VBQ0UsNEJBQTRCO0FBQzlCO0FBQ0E7RUFDRSwyQkFBMkI7QUFDN0I7QUFDQTtFQUNFLDRCQUE0QjtBQUM5QjtBQUNBO0VBQ0UsMkJBQTJCO0FBQzdCXCIsc291cmNlc0NvbnRlbnQ6W1wiLnJlc2l6ZS1jb250YWluZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgLyogdG9kbzogYmV0dGVyIHogaW5kZXggKi9cXG4gIHotaW5kZXg6IDEwO1xcbiAgLyogdG9kbzogaXMgdGhpcyBuZWVkZWQgKi9cXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4ucmVzaXplLWxpbmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgLyogdG9kbyBzbWFydGVyIHogaW5kZXggKi9cXG4gIHotaW5kZXg6IC0xO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAvKiBhIG5vcm1hbCBleGl0IGFuaW1hdGlvbiBjdXJ2ZS0gYXQgdGhpcyBwb2ludCB0aGUgZXhpdCBhbmltYXRpb24gaXMgKi9cXG4gIC8qIGltbWVkaWF0ZWx5IHJlc3BvbnNpdmUgc28gd2UgZG9uJ3QgbmVlZCBhIGJlc3Bva2UgY3VydmUgKi9cXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjRzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XFxuICAvKiB0b2RvOiBiZXR0ZXIgdmFyPyAqL1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbn1cXG5cXG4vKiBzdGFydCByZWFsbHkgZmFzdCBiZWNhdXNlIHdlIHN0YXJ0IHN1cGVyIGhpZGRlbiBpbml0aWFsbHkgYmVoaW5kIHRoZSBwYW5lbCwgb3RoZXJ3aXNlIGZlZWxzIGxpa2UgYW4gdW5pbnRlbmRlZCBhbmltYXRpb24gZGVsYXkgKi9cXG4ucmVzaXplLWNvbnRhaW5lcjpob3ZlciB+IC5yZXNpemUtbGluZSB7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDAuOSk7XFxufVxcblxcbi5yZXNpemUtY29udGFpbmVyLnJpZ2h0LFxcbi5yZXNpemUtY29udGFpbmVyLmxlZnQge1xcbiAgdG9wOiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDIycHg7XFxuICBjdXJzb3I6IGV3LXJlc2l6ZTtcXG59XFxuXFxuLyogdG9kbzogZG9uJ3QgaGFyZCBjb2RlIGFsbCB0aGVzZSB2YWx1ZXMvdXNlIHZhcnMgKi9cXG5cXG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b20sXFxuLnJlc2l6ZS1jb250YWluZXIudG9wIHtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMjJweDtcXG4gIGN1cnNvcjogbnMtcmVzaXplO1xcbn1cXG5cXG4ucmVzaXplLWNvbnRhaW5lci50b3Age1xcbiAgdG9wOiAtN3B4O1xcbn1cXG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b20ge1xcbiAgYm90dG9tOiAtN3B4O1xcbn1cXG4ucmVzaXplLWNvbnRhaW5lci5sZWZ0IHtcXG4gIGxlZnQ6IC03cHg7XFxufVxcbi5yZXNpemUtY29udGFpbmVyLnJpZ2h0IHtcXG4gIHJpZ2h0OiAtN3B4O1xcbn1cXG5cXG4ucmVzaXplLWNvbnRhaW5lci50b3AtbGVmdCxcXG4ucmVzaXplLWNvbnRhaW5lci50b3AtcmlnaHQsXFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLWxlZnQsXFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLXJpZ2h0IHtcXG4gIHdpZHRoOiAyNnB4O1xcbiAgaGVpZ2h0OiAyNnB4O1xcbiAgei1pbmRleDogMTU7XFxufVxcblxcbi5yZXNpemUtY29udGFpbmVyLnRvcC1sZWZ0IHtcXG4gIHRvcDogLTVweDtcXG4gIGxlZnQ6IC01cHg7XFxuICBjdXJzb3I6IG53c2UtcmVzaXplO1xcbn1cXG4ucmVzaXplLWNvbnRhaW5lci50b3AtcmlnaHQge1xcbiAgdG9wOiAtNXB4O1xcbiAgcmlnaHQ6IC01cHg7XFxuICBjdXJzb3I6IG5lc3ctcmVzaXplO1xcbn1cXG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b20tbGVmdCB7XFxuICBib3R0b206IC01cHg7XFxuICBsZWZ0OiAtNXB4O1xcbiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLXJpZ2h0IHtcXG4gIGJvdHRvbTogLTVweDtcXG4gIHJpZ2h0OiAtNXB4O1xcbiAgY3Vyc29yOiBud3NlLXJlc2l6ZTtcXG59XFxuXFxuLnJlc2l6ZS1saW5lLnRvcCxcXG4ucmVzaXplLWxpbmUuYm90dG9tIHtcXG4gIGhlaWdodDogMThweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xcbn1cXG5cXG4ucmVzaXplLWxpbmUubGVmdCxcXG4ucmVzaXplLWxpbmUucmlnaHQge1xcbiAgd2lkdGg6IDE4cHg7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxufVxcblxcbi5yZXNpemUtbGluZS50b3Age1xcbiAgdG9wOiAtN3B4O1xcbiAgbGVmdDogY2FsYygtMSAqIHZhcigtLWJvcmRlci1sZWZ0LCAycHgpKTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgKyB2YXIoLS1ib3JkZXItaG9yaXpvbnRhbCwgNHB4KSk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWxnKSB2YXIoLS1yb3VuZGVkLWxnKSAwIDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMThweCk7XFxufVxcblxcbi5yZXNpemUtbGluZS5ib3R0b20ge1xcbiAgYm90dG9tOiAtN3B4O1xcbiAgbGVmdDogY2FsYygtMSAqIHZhcigtLWJvcmRlci1sZWZ0LCAycHgpKTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgKyB2YXIoLS1ib3JkZXItaG9yaXpvbnRhbCwgNHB4KSk7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tcm91bmRlZC1sZykgdmFyKC0tcm91bmRlZC1sZyk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE4cHgpO1xcbn1cXG5cXG4ucmVzaXplLWxpbmUubGVmdCB7XFxuICB0b3A6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItdG9wLCAycHgpKTtcXG4gIGxlZnQ6IC03cHg7XFxuICBoZWlnaHQ6IGNhbGMoMTAwJSArIHZhcigtLWJvcmRlci12ZXJ0aWNhbCwgNHB4KSk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWxnKSAwIDAgdmFyKC0tcm91bmRlZC1sZyk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMThweCk7XFxufVxcblxcbi5yZXNpemUtbGluZS5yaWdodCB7XFxuICB0b3A6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItdG9wLCAycHgpKTtcXG4gIHJpZ2h0OiAtN3B4O1xcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgKyB2YXIoLS1ib3JkZXItdmVydGljYWwsIDRweCkpO1xcbiAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1yb3VuZGVkLWxnKSB2YXIoLS1yb3VuZGVkLWxnKSAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xOHB4KTtcXG59XFxuXFxuLnJlc2l6ZS1jb250YWluZXIucmlnaHQ6aG92ZXIgfiAucmVzaXplLWxpbmUucmlnaHQsXFxuLnJlc2l6ZS1jb250YWluZXIubGVmdDpob3ZlciB+IC5yZXNpemUtbGluZS5sZWZ0LFxcbi5yZXNpemUtbGluZS5yaWdodC5kcmFnZ2luZyxcXG4ucmVzaXplLWxpbmUubGVmdC5kcmFnZ2luZyB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XFxufVxcblxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbTpob3ZlciB+IC5yZXNpemUtbGluZS5ib3R0b20sXFxuLnJlc2l6ZS1jb250YWluZXIudG9wOmhvdmVyIH4gLnJlc2l6ZS1saW5lLnRvcCxcXG4ucmVzaXplLWxpbmUuYm90dG9tLmRyYWdnaW5nLFxcbi5yZXNpemUtbGluZS50b3AuZHJhZ2dpbmcge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbn1cXG5cXG4vKiBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBzaG93IG11bHRpcGxlIGhhbmRsZXMgYXQgb25jZVxcbiAqIHdlIHNob3VsZCBvbmx5IGV2ZXIgc2hvdyB0aGUgY3VycmVudGx5IHJlc2l6aW5nIGhhbmRsZVxcbiAqIHJlZ2FyZGxlc3Mgb2YgaG92ZXIgc3RhdGUgXFxuICovXFxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIucmlnaHQ6aG92ZXIgfiAucmVzaXplLWxpbmUucmlnaHQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0yMHB4KTtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIubGVmdDpob3ZlciB+IC5yZXNpemUtbGluZS5sZWZ0IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgyMHB4KTtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIuYm90dG9tOmhvdmVyIH4gLnJlc2l6ZS1saW5lLmJvdHRvbSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xcbn1cXG4ucmVzaXplLWNvbnRhaW5lci5uby1ob3Zlci50b3A6aG92ZXIgfiAucmVzaXplLWxpbmUudG9wIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTtcXG59XFxuXCJdLHNvdXJjZVJvb3Q6XCJcIn1dKTtsZXQgbD1pfSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL292ZXJ2aWV3L3NlZ21lbnQtYm91bmRhcnktdHJpZ2dlci5jc3NcIjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1o6KCk9Pmx9KTt2YXIgcj1uKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPW4ubihyKSxhPW4oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT1uLm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNHB4O1xuICBwYWRkaW5nOiA0cHggNnB4O1xuICBsaW5lLWhlaWdodDogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XG4gIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLXRleHQge1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xuICBmb250LXdlaWdodDogNTAwO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLXRleHQgLnBsdXMtaWNvbiB7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cyBlYXNlO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLXRleHQ6aG92ZXIgLnBsdXMtaWNvbiB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTgwMCk7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIgc3ZnIHtcbiAgd2lkdGg6IDE0cHg7XG4gIGhlaWdodDogMTRweDtcbiAgZmxleC1zaHJpbms6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXI6aG92ZXIgc3ZnIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNzAwKTtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlcltkaXNhYmxlZF0gc3ZnLFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlcltkaXNhYmxlZF06aG92ZXIgc3ZnIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24ge1xuICBwYWRkaW5nOiA4cHg7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xuICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICBtaW4td2lkdGg6IDEyMHB4O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBib3gtc2hhZG93OiAwcHggNHB4IDhweCAtNHB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb2xvci1ncmF5LTkwMCkgNCUsIHRyYW5zcGFyZW50KTtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24tcG9zaXRpb25lciB7XG4gIHotaW5kZXg6IHZhcigtLXRvcC16LWluZGV4KTtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24taXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDhweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBtaW4td2lkdGg6IDIyMHB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtW2RhdGEtZGlzYWJsZWRdIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24taXRlbSBzdmcge1xuICBtYXJnaW4tcmlnaHQ6IDEycHg7XG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZ3JvdXAtbGFiZWwge1xuICBwYWRkaW5nOiA4cHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XG59XG5gLFwiXCIse3ZlcnNpb246Myxzb3VyY2VzOltcIndlYnBhY2s6Ly8uL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLFFBQVE7RUFDUixnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLGdCQUFnQjtFQUNoQiw2QkFBNkI7RUFDN0Isb0JBQW9CO0VBQ3BCLFlBQVk7RUFDWix5QkFBeUI7RUFDekIsZUFBZTtFQUNmLHVDQUF1QztBQUN6Qzs7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLG9CQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsdUJBQXVCO0FBQ3pCOztBQUVBO0VBQ0UsZ0NBQWdDO0FBQ2xDOztBQUVBO0VBQ0UsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsV0FBVztFQUNYLFlBQVk7RUFDWixjQUFjO0VBQ2Qsc0JBQXNCO0FBQ3hCOztBQUVBO0VBQ0UsNEJBQTRCO0FBQzlCOztBQUVBOztFQUVFLDRCQUE0QjtFQUM1QixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxZQUFZO0VBQ1osdUNBQXVDO0VBQ3ZDLHVDQUF1QztFQUN2QyxtQkFBbUI7RUFDbkIsZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixlQUFlO0VBQ2Ysc0ZBQXNGO0FBQ3hGOztBQUVBO0VBQ0UsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixZQUFZO0VBQ1osaUJBQWlCO0VBQ2pCLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIsNkJBQTZCO0VBQzdCLGVBQWU7RUFDZixnQkFBZ0I7RUFDaEIsWUFBWTtFQUNaLGdCQUFnQjtFQUNoQixXQUFXO0FBQ2I7O0FBRUE7RUFDRSw0QkFBNEI7RUFDNUIsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGlDQUFpQztBQUNuQzs7QUFFQTtFQUNFLDJCQUEyQjtFQUMzQiw0QkFBNEI7QUFDOUI7O0FBRUE7RUFDRSw4QkFBOEI7RUFDOUIsK0JBQStCO0FBQ2pDOztBQUVBO0VBQ0UsWUFBWTtFQUNaLGVBQWU7RUFDZixpQkFBaUI7RUFDakIsZ0JBQWdCO0VBQ2hCLDRCQUE0QjtBQUM5QlwiLHNvdXJjZXNDb250ZW50OltcIi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDRweDtcXG4gIHBhZGRpbmc6IDRweCA2cHg7XFxuICBsaW5lLWhlaWdodDogMTZweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTtcXG59XFxuXFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci10ZXh0IHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci10ZXh0IC5wbHVzLWljb24ge1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzIGVhc2U7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXItdGV4dDpob3ZlciAucGx1cy1pY29uIHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTgwMCk7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIgc3ZnIHtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgaGVpZ2h0OiAxNHB4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyOmhvdmVyIHN2ZyB7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS03MDApO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyW2Rpc2FibGVkXSBzdmcsXFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlcltkaXNhYmxlZF06aG92ZXIgc3ZnIHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93biB7XFxuICBwYWRkaW5nOiA4cHg7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICBib3JkZXItcmFkaXVzOiAxNnB4O1xcbiAgbWluLXdpZHRoOiAxMjBweDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgYm94LXNoYWRvdzogMHB4IDRweCA4cHggLTRweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29sb3ItZ3JheS05MDApIDQlLCB0cmFuc3BhcmVudCk7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLXBvc2l0aW9uZXIge1xcbiAgei1pbmRleDogdmFyKC0tdG9wLXotaW5kZXgpO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogOHB4O1xcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG1pbi13aWR0aDogMjIwcHg7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW1bZGF0YS1kaXNhYmxlZF0ge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW0gc3ZnIHtcXG4gIG1hcmdpbi1yaWdodDogMTJweDtcXG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06aG92ZXIge1xcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4O1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1ncm91cC1sYWJlbCB7XFxuICBwYWRkaW5nOiA4cHg7XFxuICBmb250LXNpemU6IDEzcHg7XFxuICBsaW5lLWhlaWdodDogMTZweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1leHBsb3Jlci5jc3NcIjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1o6KCk9Pmx9KTt2YXIgcj1uKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPW4ubihyKSxhPW4oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT1uLm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLnNlZ21lbnQtZXhwbG9yZXItY29udGVudCB7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XG4gIHBhZGRpbmc6IDAgOHB4O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1wYWdlLXJvdXRlLWJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE0cHggMTZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xuICBnYXA6IDEycHg7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLXBhZ2Utcm91dGUtYmFyLXBhdGgge1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1pdGVtIHtcbiAgbWFyZ2luOiA0cHggMDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1pdGVtOm50aC1jaGlsZChldmVuKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcbn1cbi5zZWdtZW50LWV4cGxvcmVyLWl0ZW0tcm93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcGFkZGluZy10b3A6IDEwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICBwYWRkaW5nLXJpZ2h0OiA0cHg7XG59XG4uc2VnbWVudC1leHBsb3Jlci1pdGVtLXJvdy1tYWluIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2hpdGUtc3BhY2U6IHByZTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItY2hpbGRyZW4tLWludGVuZGVkIHtcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlbmFtZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB3aWR0aDogMTAwJTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUgc2VsZWN0IHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG4uc2VnbWVudC1leHBsb3Jlci1maWxlbmFtZS0tcGF0aCB7XG4gIG1hcmdpbi1yaWdodDogOHB4O1xufVxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLXBhdGggc21hbGwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAwO1xuICBvcGFjaXR5OiAwO1xufVxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLW5hbWUge1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS04MDApO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlcyB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBnYXA6IDhweDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVzICsgLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlciB7XG4gIG1hcmdpbi1sZWZ0OiA4cHg7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAgNnB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xuICBmb250LXdlaWdodDogNTAwO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xufVxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC10ZXh0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLW92ZXJyaWRkZW4ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbWJlci0zMDApO1xuICBjb2xvcjogdmFyKC0tY29sb3ItYW1iZXItOTAwKTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbCAuY29kZS1pY29uIHtcbiAgb3BhY2l0eTogMDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gIHdpZHRoOiAwO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZS1pbi1vdXQ7XG59XG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsOmhvdmVyIC5jb2RlLWljb24ge1xuICBvcGFjaXR5OiAxO1xuICB3aWR0aDogMTJweDtcbiAgbWFyZ2luLWxlZnQ6IDRweDtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbDpob3ZlciB7XG4gIGZpbHRlcjogYnJpZ2h0bmVzcygwLjk1KTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC0tYnVpbHRpbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xuICBib3JkZXI6IDFweCBkYXNoZWQgdmFyKC0tY29sb3ItZ3JheS01MDApO1xuICBoZWlnaHQ6IDI0cHg7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLWJ1aWx0aW4gc3ZnIHtcbiAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgbWFyZ2luLXJpZ2h0OiAtNHB4O1xufVxuXG4vKiBGb290ZXIgc3R5bGVzICovXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXIge1xuICBwYWRkaW5nOiA4cHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogOHB4O1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogNnB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1idXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1idXR0b24tLWRpc2FibGVkIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLXRleHQge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1iYWRnZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWluLXdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIHBhZGRpbmc6IDAgNnB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hbWJlci0zMDApO1xuICBjb2xvcjogdmFyKC0tY29sb3ItYW1iZXItOTAwKTtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbGluZS1oZWlnaHQ6IDE7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtdG9vbHRpcC0tc20ge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLXRvb2x0aXAtLWxnIHtcbiAgbWluLXdpZHRoOiAyMDBweDtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItc3VnZ2VzdGlvbnMge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZ2FwOiA4cHg7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLXN1Z2dlc3Rpb25zLXRvb2x0aXAge1xuICB3aWR0aDogMjAwcHg7XG59XG5gLFwiXCIse3ZlcnNpb246Myxzb3VyY2VzOltcIndlYnBhY2s6Ly8uL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1leHBsb3Jlci5jc3NcIl0sbmFtZXM6W10sbWFwcGluZ3M6XCJBQUFBO0VBQ0UseUJBQXlCO0VBQ3pCLGNBQWM7RUFDZCxXQUFXO0VBQ1gsWUFBWTtBQUNkOztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixrQkFBa0I7RUFDbEIsNkNBQTZDO0VBQzdDLFNBQVM7QUFDWDs7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixnQkFBZ0I7RUFDaEIsNkJBQTZCO0VBQzdCLDZCQUE2QjtFQUM3QixtQkFBbUI7RUFDbkIsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsYUFBYTtFQUNiLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLDZDQUE2QztBQUMvQztBQUNBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixpQkFBaUI7RUFDakIsb0JBQW9CO0VBQ3BCLGtCQUFrQjtBQUNwQjtBQUNBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixnQkFBZ0I7RUFDaEIsZUFBZTtFQUNmLDZCQUE2QjtBQUMvQjs7QUFFQTtFQUNFLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLG9CQUFvQjtFQUNwQixXQUFXO0VBQ1gsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UsaUJBQWlCO0FBQ25CO0FBQ0E7RUFDRSxpQkFBaUI7QUFDbkI7QUFDQTtFQUNFLHFCQUFxQjtFQUNyQixRQUFRO0VBQ1IsVUFBVTtBQUNaO0FBQ0E7RUFDRSw0QkFBNEI7QUFDOUI7O0FBRUE7RUFDRSxvQkFBb0I7RUFDcEIsUUFBUTtFQUNSLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLG9CQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsdUJBQXVCO0VBQ3ZCLGNBQWM7RUFDZCxZQUFZO0VBQ1osbUJBQW1CO0VBQ25CLGlCQUFpQjtFQUNqQix5QkFBeUI7RUFDekIsZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixlQUFlO0VBQ2YsdUNBQXVDO0VBQ3ZDLDZCQUE2QjtBQUMvQjtBQUNBO0VBQ0Usb0JBQW9CO0VBQ3BCLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLHdDQUF3QztFQUN4Qyw2QkFBNkI7QUFDL0I7O0FBRUE7RUFDRSxVQUFVO0VBQ1YsY0FBYztFQUNkLFFBQVE7RUFDUixpQ0FBaUM7QUFDbkM7QUFDQTtFQUNFLFVBQVU7RUFDVixXQUFXO0VBQ1gsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0Usd0JBQXdCO0FBQzFCOztBQUVBO0VBQ0UsNkJBQTZCO0VBQzdCLDRCQUE0QjtFQUM1Qix3Q0FBd0M7RUFDeEMsWUFBWTtFQUNaLGVBQWU7QUFDakI7QUFDQTtFQUNFLGdCQUFnQjtFQUNoQixrQkFBa0I7QUFDcEI7O0FBRUEsa0JBQWtCO0FBQ2xCO0VBQ0UsWUFBWTtFQUNaLDJDQUEyQztFQUMzQyxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1QjtFQUN2QixRQUFRO0VBQ1IsV0FBVztFQUNYLFlBQVk7RUFDWix1Q0FBdUM7RUFDdkMsdUNBQXVDO0VBQ3ZDLGtCQUFrQjtFQUNsQiw2QkFBNkI7RUFDN0IseUJBQXlCO0VBQ3pCLGdCQUFnQjtFQUNoQixlQUFlO0VBQ2YsdUNBQXVDO0FBQ3pDOztBQUVBO0VBQ0UsaUNBQWlDO0FBQ25DOztBQUVBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0Usb0JBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsZUFBZTtFQUNmLFlBQVk7RUFDWixjQUFjO0VBQ2Qsa0NBQWtDO0VBQ2xDLDZCQUE2QjtFQUM3QixtQkFBbUI7RUFDbkIseUJBQXlCO0VBQ3pCLGdCQUFnQjtFQUNoQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0Usb0JBQW9CO0VBQ3BCLFFBQVE7QUFDVjs7QUFFQTtFQUNFLFlBQVk7QUFDZFwiLHNvdXJjZXNDb250ZW50OltcIi5zZWdtZW50LWV4cGxvcmVyLWNvbnRlbnQge1xcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gIHBhZGRpbmc6IDAgOHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLXBhZ2Utcm91dGUtYmFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogMTRweCAxNnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xcbiAgZ2FwOiAxMnB4O1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1wYWdlLXJvdXRlLWJhci1wYXRoIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBsaW5lLWhlaWdodDogMjBweDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItaXRlbSB7XFxuICBtYXJnaW46IDRweCAwO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1pdGVtOm50aC1jaGlsZChldmVuKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxufVxcbi5zZWdtZW50LWV4cGxvcmVyLWl0ZW0tcm93IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcGFkZGluZy10b3A6IDEwcHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMTBweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDRweDtcXG59XFxuLnNlZ21lbnQtZXhwbG9yZXItaXRlbS1yb3ctbWFpbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHdoaXRlLXNwYWNlOiBwcmU7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItY2hpbGRyZW4tLWludGVuZGVkIHtcXG4gIHBhZGRpbmctbGVmdDogMTZweDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICB3aWR0aDogMTAwJTtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lIHNlbGVjdCB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLXBhdGgge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lLS1wYXRoIHNtYWxsIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAwO1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLW5hbWUge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktODAwKTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZXMge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBnYXA6IDhweDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlcyArIC5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDAgNnB4O1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbn1cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLXRleHQge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLS1vdmVycmlkZGVuIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFtYmVyLTMwMCk7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItYW1iZXItOTAwKTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbCAuY29kZS1pY29uIHtcXG4gIG9wYWNpdHk6IDA7XFxuICBtYXJnaW4tbGVmdDogMDtcXG4gIHdpZHRoOiAwO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2UtaW4tb3V0O1xcbn1cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsOmhvdmVyIC5jb2RlLWljb24ge1xcbiAgb3BhY2l0eTogMTtcXG4gIHdpZHRoOiAxMnB4O1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbDpob3ZlciB7XFxuICBmaWx0ZXI6IGJyaWdodG5lc3MoMC45NSk7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLWJ1aWx0aW4ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLWNvbG9yLWdyYXktNTAwKTtcXG4gIGhlaWdodDogMjRweDtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC0tYnVpbHRpbiBzdmcge1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG4gIG1hcmdpbi1yaWdodDogLTRweDtcXG59XFxuXFxuLyogRm9vdGVyIHN0eWxlcyAqL1xcbi5zZWdtZW50LWV4cGxvcmVyLWZvb3RlciB7XFxuICBwYWRkaW5nOiA4cHg7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGdhcDogOHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiA2cHg7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJ1dHRvbi0tZGlzYWJsZWQge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLXRleHQge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItYmFkZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBtaW4td2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBwYWRkaW5nOiAwIDZweDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFtYmVyLTMwMCk7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItYW1iZXItOTAwKTtcXG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XFxuICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLXRvb2x0aXAtLXNtIHtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtdG9vbHRpcC0tbGcge1xcbiAgbWluLXdpZHRoOiAyMDBweDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItc3VnZ2VzdGlvbnMge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBnYXA6IDhweDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItc3VnZ2VzdGlvbnMtdG9vbHRpcCB7XFxuICB3aWR0aDogMjAwcHg7XFxufVxcblwiXSxzb3VyY2VSb290OlwiXCJ9XSk7bGV0IGw9aX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy90b2FzdC9zdHlsZS5jc3NcIjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1o6KCk9Pmx9KTt2YXIgcj1uKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPW4ubihyKSxhPW4oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT1uLm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLm5leHRqcy10b2FzdCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogdmFyKC0tdG9wLXotaW5kZXgpO1xuICBtYXgtd2lkdGg6IDQyMHB4O1xuICBib3gtc2hhZG93OiAwcHggMTZweCAzMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG59XG5cbi5uZXh0anMtdG9hc3QtZXJyb3JzLXBhcmVudCB7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtNHhsKTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktYnJpZ2h0LXdoaXRlKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL3RvYXN0L3N0eWxlLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRSxlQUFlO0VBQ2YsMkJBQTJCO0VBQzNCLGdCQUFnQjtFQUNoQiw2Q0FBNkM7QUFDL0M7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsaUNBQWlDO0VBQ2pDLGdCQUFnQjtFQUNoQixxQ0FBcUM7RUFDckMsdUNBQXVDO0FBQ3pDXCIsc291cmNlc0NvbnRlbnQ6W1wiLm5leHRqcy10b2FzdCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB6LWluZGV4OiB2YXIoLS10b3Atei1pbmRleCk7XFxuICBtYXgtd2lkdGg6IDQyMHB4O1xcbiAgYm94LXNoYWRvdzogMHB4IDE2cHggMzJweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xcbn1cXG5cXG4ubmV4dGpzLXRvYXN0LWVycm9ycy1wYXJlbnQge1xcbiAgcGFkZGluZzogMTZweDtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtNHhsKTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1icmlnaHQtd2hpdGUpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvdG9vbHRpcC90b29sdGlwLmNzc1wiOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtuLmQodCx7WjooKT0+bH0pO3ZhciByPW4oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCIpLG89bi5uKHIpLGE9bihcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiKSxpPW4ubihhKSgpKG8oKSk7aS5wdXNoKFtlLmlkLGAudG9vbHRpcC13cmFwcGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4udG9vbHRpcCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogNnB4IDEycHg7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMS40O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbn1cblxuLnRvb2x0aXAtYXJyb3cge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci13aWR0aDogdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KTtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLnRvb2x0aXAtYXJyb3ctLXRvcCB7XG4gIGJvcmRlci13aWR0aDogdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIDBcbiAgICB2YXIoLS1hcnJvdy1zaXplLCA2cHgpO1xuICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xuICBib3R0b206IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbn1cblxuLnRvb2x0aXAtYXJyb3ctLWJvdHRvbSB7XG4gIGJvcmRlci13aWR0aDogMCB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIHZhcigtLWFycm93LXNpemUsIDZweClcbiAgICB2YXIoLS1hcnJvdy1zaXplLCA2cHgpO1xuICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xuICB0b3A6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7XG59XG5cbi50b29sdGlwLWFycm93LS1sZWZ0IHtcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIDAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KVxuICAgIHZhcigtLWFycm93LXNpemUsIDZweCk7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xuICByaWdodDogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xufVxuXG4udG9vbHRpcC1hcnJvdy0tcmlnaHQge1xuICBib3JkZXItd2lkdGg6IHZhcigtLWFycm93LXNpemUsIDZweCkgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KVxuICAgIHZhcigtLWFycm93LXNpemUsIDZweCkgMDtcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xuICBsZWZ0OiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xufVxuXG4udG9vbHRpcC1wb3NpdGlvbmVyIHtcbiAgei1pbmRleDogdmFyKC0tdG9wLXotaW5kZXgpO1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL3Rvb2x0aXAvdG9vbHRpcC5jc3NcIl0sbmFtZXM6W10sbWFwcGluZ3M6XCJBQUFBO0VBQ0Usa0JBQWtCO0VBQ2xCLHFCQUFxQjtFQUNyQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLGlCQUFpQjtFQUNqQixrQkFBa0I7RUFDbEIsZUFBZTtFQUNmLGdCQUFnQjtFQUNoQixvQkFBb0I7RUFDcEIsNEJBQTRCO0VBQzVCLHdDQUF3QztBQUMxQzs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixRQUFRO0VBQ1IsU0FBUztFQUNULG1CQUFtQjtFQUNuQixvQ0FBb0M7RUFDcEMseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0U7MEJBQ3dCO0VBQ3hCLHdDQUF3QztFQUN4QyxTQUFTO0VBQ1QsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0U7MEJBQ3dCO0VBQ3hCLDJDQUEyQztFQUMzQyxNQUFNO0VBQ04sNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0U7MEJBQ3dCO0VBQ3hCLHlDQUF5QztFQUN6QyxRQUFRO0VBQ1IsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0U7NEJBQzBCO0VBQzFCLDBDQUEwQztFQUMxQyxPQUFPO0VBQ1AsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsMkJBQTJCO0FBQzdCXCIsc291cmNlc0NvbnRlbnQ6W1wiLnRvb2x0aXAtd3JhcHBlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBsaW5lLWhlaWdodDogMTtcXG59XFxuXFxuLnRvb2x0aXAge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZzogNnB4IDEycHg7XFxuICBib3JkZXItcmFkaXVzOiA4cHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMS40O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG59XFxuXFxuLnRvb2x0aXAtYXJyb3cge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpO1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRvb2x0aXAtYXJyb3ctLXRvcCB7XFxuICBib3JkZXItd2lkdGg6IHZhcigtLWFycm93LXNpemUsIDZweCkgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSAwXFxuICAgIHZhcigtLWFycm93LXNpemUsIDZweCk7XFxuICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgYm90dG9tOiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xcbn1cXG5cXG4udG9vbHRpcC1hcnJvdy0tYm90dG9tIHtcXG4gIGJvcmRlci13aWR0aDogMCB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIHZhcigtLWFycm93LXNpemUsIDZweClcXG4gICAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KTtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICB0b3A6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpO1xcbn1cXG5cXG4udG9vbHRpcC1hcnJvdy0tbGVmdCB7XFxuICBib3JkZXItd2lkdGg6IHZhcigtLWFycm93LXNpemUsIDZweCkgMCB2YXIoLS1hcnJvdy1zaXplLCA2cHgpXFxuICAgIHZhcigtLWFycm93LXNpemUsIDZweCk7XFxuICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIHJpZ2h0OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xcbn1cXG5cXG4udG9vbHRpcC1hcnJvdy0tcmlnaHQge1xcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIHZhcigtLWFycm93LXNpemUsIDZweClcXG4gICAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSAwO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgbGVmdDogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XFxufVxcblxcbi50b29sdGlwLXBvc2l0aW9uZXIge1xcbiAgei1pbmRleDogdmFyKC0tdG9wLXotaW5kZXgpO1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2dsb2JhbC5jc3NcIjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1o6KCk9PmZ9KTt2YXIgcj1uKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPW4ubihyKSxhPW4oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT1uLm4oYSksbD1uKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L25vcm1hbGl6ZS5jc3NcIikscz1uKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3N0eWxlcy9kZWZhdWx0LXRoZW1lLmNzc1wiKSxjPW4oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvc3R5bGVzL2RhcmstdGhlbWUuY3NzXCIpLHU9bihcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9zdHlsZXMvY29sb3JzLmNzc1wiKSxkPWkoKShvKCkpO2QuaShsLlopLGQuaShzLlopLGQuaShjLlopLGQuaSh1LlopLGQucHVzaChbZS5pZCxgLyogZGV2dG9vbCBnbG9iYWwgY3NzIHZhcmlhYmxlcyAqL1xuOmhvc3Qge1xuICAvKiB2YXJpYWJsZXMgKi9cbiAgLS10b3Atei1pbmRleDogMjE0NzQ4MzY0Nztcbn1cblxuLyogZ2xvYmFsIHN0eWxlcyAqL1xuKiB7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xufVxuXG4vKiBnbG9iYWwgcmVzZXQgZm9yIGRyYWdnYWJsZSBjb250ZW50IHNjcm9sbGJhciBzdHlsZXMgKi9cbltkYXRhLW5leHRqcy1zY3JvbGxhYmxlLWNvbnRlbnRdLFxuW2RhdGEtbmV4dGpzLXNjcm9sbGFibGUtY29udGVudF0gKiB7XG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogNnB4O1xuICAgIGhlaWdodDogNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDAgMCAxcmVtIDFyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgfVxuXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICBib3JkZXItcmFkaXVzOiAwIDAgMXJlbSAxcmVtO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcbiAgfVxuXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBib3JkZXItcmFkaXVzOiAxcmVtO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNTAwKTtcbiAgfVxufVxuXG4vKiBQbGFjZSBvdmVyZmxvdzogaGlkZGVuIG9uIHRoaXMgc28gd2UgY2FuIGJyZWFrIG91dCBmcm9tIFtkYXRhLW5leHRqcy1kaWFsb2ddICovXG5bZGF0YS1uZXh0anMtc2Nyb2xsYWJsZS1jb250ZW50XSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XG59XG5gLFwiXCIse3ZlcnNpb246Myxzb3VyY2VzOltcIndlYnBhY2s6Ly8uL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2dsb2JhbC5jc3NcIl0sbmFtZXM6W10sbWFwcGluZ3M6XCJBQUtBLGlDQUFpQztBQUNqQztFQUNFLGNBQWM7RUFDZCx5QkFBeUI7QUFDM0I7O0FBRUEsa0JBQWtCO0FBQ2xCO0VBQ0UsbUNBQW1DO0FBQ3JDOztBQUVBLHdEQUF3RDtBQUN4RDs7RUFFRTtJQUNFLFVBQVU7SUFDVixXQUFXO0lBQ1gsNEJBQTRCO0lBQzVCLG1CQUFtQjtFQUNyQjs7RUFFQTtJQUNFLGFBQWE7RUFDZjs7RUFFQTtJQUNFLDRCQUE0QjtJQUM1Qiw2Q0FBNkM7RUFDL0M7O0VBRUE7SUFDRSxtQkFBbUI7SUFDbkIsdUNBQXVDO0VBQ3pDO0FBQ0Y7O0FBRUEsaUZBQWlGO0FBQ2pGO0VBQ0UsZ0JBQWdCO0VBQ2hCLHNCQUFzQjtBQUN4QlwiLHNvdXJjZXNDb250ZW50OltcIkBpbXBvcnQgJy4vbm9ybWFsaXplLmNzcyc7XFxuQGltcG9ydCAnLi9zdHlsZXMvZGVmYXVsdC10aGVtZS5jc3MnO1xcbkBpbXBvcnQgJy4vc3R5bGVzL2RhcmstdGhlbWUuY3NzJztcXG5AaW1wb3J0ICcuL3N0eWxlcy9jb2xvcnMuY3NzJztcXG5cXG4vKiBkZXZ0b29sIGdsb2JhbCBjc3MgdmFyaWFibGVzICovXFxuOmhvc3Qge1xcbiAgLyogdmFyaWFibGVzICovXFxuICAtLXRvcC16LWluZGV4OiAyMTQ3NDgzNjQ3O1xcbn1cXG5cXG4vKiBnbG9iYWwgc3R5bGVzICovXFxuKiB7XFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG59XFxuXFxuLyogZ2xvYmFsIHJlc2V0IGZvciBkcmFnZ2FibGUgY29udGVudCBzY3JvbGxiYXIgc3R5bGVzICovXFxuW2RhdGEtbmV4dGpzLXNjcm9sbGFibGUtY29udGVudF0sXFxuW2RhdGEtbmV4dGpzLXNjcm9sbGFibGUtY29udGVudF0gKiB7XFxuICAmOjotd2Via2l0LXNjcm9sbGJhciB7XFxuICAgIHdpZHRoOiA2cHg7XFxuICAgIGhlaWdodDogNnB4O1xcbiAgICBib3JkZXItcmFkaXVzOiAwIDAgMXJlbSAxcmVtO1xcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgfVxcblxcbiAgJjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG5cXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcXG4gICAgYm9yZGVyLXJhZGl1czogMCAwIDFyZW0gMXJlbTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgfVxcblxcbiAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xcbiAgICBib3JkZXItcmFkaXVzOiAxcmVtO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTUwMCk7XFxuICB9XFxufVxcblxcbi8qIFBsYWNlIG92ZXJmbG93OiBoaWRkZW4gb24gdGhpcyBzbyB3ZSBjYW4gYnJlYWsgb3V0IGZyb20gW2RhdGEtbmV4dGpzLWRpYWxvZ10gKi9cXG5bZGF0YS1uZXh0anMtc2Nyb2xsYWJsZS1jb250ZW50XSB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG59XFxuXCJdLHNvdXJjZVJvb3Q6XCJcIn1dKTtsZXQgZj1kfSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9tZW51L3BhbmVsLXJvdXRlci5jc3NcIjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1o6KCk9Pmx9KTt2YXIgcj1uKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPW4ubihyKSxhPW4oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT1uLm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLyogUGFuZWwgY29udGVudCBwYWRkaW5nIHN0eWxlcyAqL1xuLnBhbmVsLWNvbnRlbnQge1xuICBwYWRkaW5nOiAxNnB4O1xuICBwYWRkaW5nLXRvcDogOHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBVc2VyIHByZWZlcmVuY2VzIHdyYXBwZXIgc3R5bGVzICovXG4udXNlci1wcmVmZXJlbmNlcy13cmFwcGVyIHtcbiAgcGFkZGluZzogMjBweDtcbiAgcGFkZGluZy10b3A6IDhweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLyogUGFuZWwgcm91dGUgYmFzZSBzdHlsZXMgKi9cbi5wYW5lbC1yb3V0ZSB7XG4gIG9wYWNpdHk6IHZhcigtLXBhbmVsLW9wYWNpdHkpO1xuICB0cmFuc2l0aW9uOiB2YXIoLS1wYW5lbC10cmFuc2l0aW9uKTtcbn1cbmAsXCJcIix7dmVyc2lvbjozLHNvdXJjZXM6W1wid2VicGFjazovLy4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvbWVudS9wYW5lbC1yb3V0ZXIuY3NzXCJdLG5hbWVzOltdLG1hcHBpbmdzOlwiQUFBQSxpQ0FBaUM7QUFDakM7RUFDRSxhQUFhO0VBQ2IsZ0JBQWdCO0VBQ2hCLGdCQUFnQjtBQUNsQjs7QUFFQSxvQ0FBb0M7QUFDcEM7RUFDRSxhQUFhO0VBQ2IsZ0JBQWdCO0VBQ2hCLGdCQUFnQjtBQUNsQjs7QUFFQSw0QkFBNEI7QUFDNUI7RUFDRSw2QkFBNkI7RUFDN0IsbUNBQW1DO0FBQ3JDXCIsc291cmNlc0NvbnRlbnQ6W1wiLyogUGFuZWwgY29udGVudCBwYWRkaW5nIHN0eWxlcyAqL1xcbi5wYW5lbC1jb250ZW50IHtcXG4gIHBhZGRpbmc6IDE2cHg7XFxuICBwYWRkaW5nLXRvcDogOHB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLyogVXNlciBwcmVmZXJlbmNlcyB3cmFwcGVyIHN0eWxlcyAqL1xcbi51c2VyLXByZWZlcmVuY2VzLXdyYXBwZXIge1xcbiAgcGFkZGluZzogMjBweDtcXG4gIHBhZGRpbmctdG9wOiA4cHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4vKiBQYW5lbCByb3V0ZSBiYXNlIHN0eWxlcyAqL1xcbi5wYW5lbC1yb3V0ZSB7XFxuICBvcGFjaXR5OiB2YXIoLS1wYW5lbC1vcGFjaXR5KTtcXG4gIHRyYW5zaXRpb246IHZhcigtLXBhbmVsLXRyYW5zaXRpb24pO1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L25vcm1hbGl6ZS5jc3NcIjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1o6KCk9Pmx9KTt2YXIgcj1uKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPW4ubihyKSxhPW4oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT1uLm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgOmhvc3Qge1xuICBhbGw6IGluaXRpYWw7XG5cbiAgLyogdGhlIGRpcmVjdGlvbiBwcm9wZXJ0eSBpcyBub3QgcmVzZXQgYnkgJ2FsbCcgKi9cbiAgZGlyZWN0aW9uOiBsdHI7XG59XG5cbi8qIVxuICogQm9vdHN0cmFwIFJlYm9vdCB2NC40LjEgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFRoZSBCb290c3RyYXAgQXV0aG9yc1xuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogRm9ya2VkIGZyb20gTm9ybWFsaXplLmNzcywgbGljZW5zZWQgTUlUIChodHRwczovL2dpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpXG4gKi9cbiosXG4qOjpiZWZvcmUsXG4qOjphZnRlciB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbjpob3N0IHtcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XG4gIGxpbmUtaGVpZ2h0OiAxLjE1O1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbn1cblxuYXJ0aWNsZSxcbmFzaWRlLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1haW4sXG5uYXYsXG5zZWN0aW9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbjpob3N0IHtcbiAgbWFyZ2luOiAwO1xuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sXG4gICAgJ0hlbHZldGljYSBOZXVlJywgQXJpYWwsICdOb3RvIFNhbnMnLCBzYW5zLXNlcmlmLCAnQXBwbGUgQ29sb3IgRW1vamknLFxuICAgICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnLCAnTm90byBDb2xvciBFbW9qaSc7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWZvbnQpO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG46aG9zdDpub3QoYnV0dG9uKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cblt0YWJpbmRleD0nLTEnXTpmb2N1czpub3QoOmZvY3VzLXZpc2libGUpIHtcbiAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xufVxuXG5ociB7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICBoZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG59XG5cbnAge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xufVxuXG5hYmJyW3RpdGxlXSxcbmFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV0ge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcbiAgY3Vyc29yOiBoZWxwO1xuICBib3JkZXItYm90dG9tOiAwO1xuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTtcbiAgdGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rOiBub25lO1xufVxuXG5hZGRyZXNzIHtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cblxub2wsXG51bCxcbmRsIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn1cblxub2wgb2wsXG51bCB1bCxcbm9sIHVsLFxudWwgb2wge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG5kdCB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbmRkIHtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuYmxvY2txdW90ZSB7XG4gIG1hcmdpbjogMCAwIDE2cHg7XG59XG5cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODAlO1xufVxuXG5zdWIsXG5zdXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5zdWIge1xuICBib3R0b206IC0wLjI1ZW07XG59XG5cbnN1cCB7XG4gIHRvcDogLTAuNWVtO1xufVxuXG5hIHtcbiAgY29sb3I6ICMwMDdiZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbmE6aG92ZXIge1xuICBjb2xvcjogIzAwNTZiMztcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbmE6bm90KFtocmVmXSkge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG5hOm5vdChbaHJlZl0pOmhvdmVyIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxucHJlLFxuY29kZSxcbmtiZCxcbnNhbXAge1xuICBmb250LWZhbWlseTogU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJyxcbiAgICAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMWVtO1xufVxuXG5wcmUge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuZmlndXJlIHtcbiAgbWFyZ2luOiAwIDAgMTZweDtcbn1cblxuaW1nIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuXG5zdmcge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG59XG5cbmNhcHRpb24ge1xuICBwYWRkaW5nLXRvcDogMTJweDtcbiAgcGFkZGluZy1ib3R0b206IDEycHg7XG4gIGNvbG9yOiAjNmM3NTdkO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBjYXB0aW9uLXNpZGU6IGJvdHRvbTtcbn1cblxudGgge1xuICB0ZXh0LWFsaWduOiBpbmhlcml0O1xufVxuXG5sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuXG5idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG5idXR0b246Zm9jdXMge1xuICBvdXRsaW5lOiAxcHggZG90dGVkO1xuICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7XG59XG5cbmJ1dHRvbjpmb2N1czpub3QoOmZvY3VzLXZpc2libGUpIHtcbiAgb3V0bGluZTogbm9uZTtcbn1cblxuaW5wdXQsXG5idXR0b24sXG5zZWxlY3QsXG5vcHRncm91cCxcbnRleHRhcmVhIHtcbiAgbWFyZ2luOiAwO1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cblxuYnV0dG9uLFxuaW5wdXQge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuYnV0dG9uLFxuc2VsZWN0IHtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG5cbnNlbGVjdCB7XG4gIHdvcmQtd3JhcDogbm9ybWFsO1xufVxuXG5idXR0b24sXG5bdHlwZT0nYnV0dG9uJ10sXG5bdHlwZT0ncmVzZXQnXSxcblt0eXBlPSdzdWJtaXQnXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xufVxuXG5idXR0b246bm90KDpkaXNhYmxlZCksXG5bdHlwZT0nYnV0dG9uJ106bm90KDpkaXNhYmxlZCksXG5bdHlwZT0ncmVzZXQnXTpub3QoOmRpc2FibGVkKSxcblt0eXBlPSdzdWJtaXQnXTpub3QoOmRpc2FibGVkKSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxuW3R5cGU9J2J1dHRvbiddOjotbW96LWZvY3VzLWlubmVyLFxuW3R5cGU9J3Jlc2V0J106Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT0nc3VibWl0J106Oi1tb3otZm9jdXMtaW5uZXIge1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG5cbmlucHV0W3R5cGU9J3JhZGlvJ10sXG5pbnB1dFt0eXBlPSdjaGVja2JveCddIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogMDtcbn1cblxuaW5wdXRbdHlwZT0nZGF0ZSddLFxuaW5wdXRbdHlwZT0ndGltZSddLFxuaW5wdXRbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSxcbmlucHV0W3R5cGU9J21vbnRoJ10ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGxpc3Rib3g7XG59XG5cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHJlc2l6ZTogdmVydGljYWw7XG59XG5cbmZpZWxkc2V0IHtcbiAgbWluLXdpZHRoOiAwO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIGJvcmRlcjogMDtcbn1cblxubGVnZW5kIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG5cbnByb2dyZXNzIHtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5bdHlwZT0nbnVtYmVyJ106Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5bdHlwZT0nbnVtYmVyJ106Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cblt0eXBlPSdzZWFyY2gnXSB7XG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cblt0eXBlPSdzZWFyY2gnXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XG4gIGZvbnQ6IGluaGVyaXQ7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xufVxuXG5vdXRwdXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbnN1bW1hcnkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxudGVtcGxhdGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5baGlkZGVuXSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbmAsXCJcIix7dmVyc2lvbjozLHNvdXJjZXM6W1wid2VicGFjazovLy4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvbm9ybWFsaXplLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRSxZQUFZOztFQUVaLGlEQUFpRDtFQUNqRCxjQUFjO0FBQ2hCOztBQUVBOzs7Ozs7RUFNRTtBQUNGOzs7RUFHRSxzQkFBc0I7QUFDeEI7O0FBRUE7RUFDRSx1QkFBdUI7RUFDdkIsaUJBQWlCO0VBQ2pCLDhCQUE4QjtFQUM5Qiw2Q0FBNkM7QUFDL0M7O0FBRUE7Ozs7Ozs7Ozs7RUFVRSxjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsU0FBUztFQUNUOzsyREFFeUQ7RUFDekQsZUFBZTtFQUNmLGdCQUFnQjtFQUNoQixn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RUE7O0VBRUUsWUFBWTtBQUNkOztBQUVBO0VBQ0Usb0JBQW9CO0VBQ3BCLHdCQUF3QjtBQUMxQjs7QUFFQTtFQUNFLHdCQUF3QjtBQUMxQjs7QUFFQTtFQUNFLGFBQWE7RUFDYiwwQkFBMEI7QUFDNUI7O0FBRUE7RUFDRSxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGFBQWE7QUFDZjs7QUFFQTtFQUNFLHdCQUF3QjtBQUMxQlwiLHNvdXJjZXNDb250ZW50OltcIjpob3N0IHtcXG4gIGFsbDogaW5pdGlhbDtcXG5cXG4gIC8qIHRoZSBkaXJlY3Rpb24gcHJvcGVydHkgaXMgbm90IHJlc2V0IGJ5ICdhbGwnICovXFxuICBkaXJlY3Rpb246IGx0cjtcXG59XFxuXFxuLyohXFxuICogQm9vdHN0cmFwIFJlYm9vdCB2NC40LjEgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXFxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUaGUgQm9vdHN0cmFwIEF1dGhvcnNcXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxcbiAqIEZvcmtlZCBmcm9tIE5vcm1hbGl6ZS5jc3MsIGxpY2Vuc2VkIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcy9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxcbiAqL1xcbiosXFxuKjo6YmVmb3JlLFxcbio6OmFmdGVyIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbjpob3N0IHtcXG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xcbiAgbGluZS1oZWlnaHQ6IDEuMTU7XFxuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XFxufVxcblxcbmFydGljbGUsXFxuYXNpZGUsXFxuZmlnY2FwdGlvbixcXG5maWd1cmUsXFxuZm9vdGVyLFxcbmhlYWRlcixcXG5oZ3JvdXAsXFxubWFpbixcXG5uYXYsXFxuc2VjdGlvbiB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuOmhvc3Qge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLFxcbiAgICAnSGVsdmV0aWNhIE5ldWUnLCBBcmlhbCwgJ05vdG8gU2FucycsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsXFxuICAgICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnLCAnTm90byBDb2xvciBFbW9qaSc7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1mb250KTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbjpob3N0Om5vdChidXR0b24pIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcblt0YWJpbmRleD0nLTEnXTpmb2N1czpub3QoOmZvY3VzLXZpc2libGUpIHtcXG4gIG91dGxpbmU6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuaHIge1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICBoZWlnaHQ6IDA7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG59XFxuXFxuaDEsXFxuaDIsXFxuaDMsXFxuaDQsXFxuaDUsXFxuaDYge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG59XFxuXFxucCB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG59XFxuXFxuYWJiclt0aXRsZV0sXFxuYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7XFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgY3Vyc29yOiBoZWxwO1xcbiAgYm9yZGVyLWJvdHRvbTogMDtcXG4gIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rOiBub25lO1xcbiAgdGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rOiBub25lO1xcbn1cXG5cXG5hZGRyZXNzIHtcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG59XFxuXFxub2wsXFxudWwsXFxuZGwge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxufVxcblxcbm9sIG9sLFxcbnVsIHVsLFxcbm9sIHVsLFxcbnVsIG9sIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbmR0IHtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcblxcbmRkIHtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG5cXG5ibG9ja3F1b3RlIHtcXG4gIG1hcmdpbjogMCAwIDE2cHg7XFxufVxcblxcbmIsXFxuc3Ryb25nIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XFxufVxcblxcbnNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbn1cXG5cXG5zdWIsXFxuc3VwIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGZvbnQtc2l6ZTogNzUlO1xcbiAgbGluZS1oZWlnaHQ6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxufVxcblxcbnN1YiB7XFxuICBib3R0b206IC0wLjI1ZW07XFxufVxcblxcbnN1cCB7XFxuICB0b3A6IC0wLjVlbTtcXG59XFxuXFxuYSB7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG5hOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA1NmIzO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbmE6bm90KFtocmVmXSkge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbmE6bm90KFtocmVmXSk6aG92ZXIge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbnByZSxcXG5jb2RlLFxcbmtiZCxcXG5zYW1wIHtcXG4gIGZvbnQtZmFtaWx5OiBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLFxcbiAgICAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuICBmb250LXNpemU6IDFlbTtcXG59XFxuXFxucHJlIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxufVxcblxcbmZpZ3VyZSB7XFxuICBtYXJnaW46IDAgMCAxNnB4O1xcbn1cXG5cXG5pbWcge1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGJvcmRlci1zdHlsZTogbm9uZTtcXG59XFxuXFxuc3ZnIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG5cXG50YWJsZSB7XFxuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xcbn1cXG5cXG5jYXB0aW9uIHtcXG4gIHBhZGRpbmctdG9wOiAxMnB4O1xcbiAgcGFkZGluZy1ib3R0b206IDEycHg7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBjYXB0aW9uLXNpZGU6IGJvdHRvbTtcXG59XFxuXFxudGgge1xcbiAgdGV4dC1hbGlnbjogaW5oZXJpdDtcXG59XFxuXFxubGFiZWwge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG5cXG5idXR0b24ge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIGJvcmRlcjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IDA7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuYnV0dG9uOmZvY3VzIHtcXG4gIG91dGxpbmU6IDFweCBkb3R0ZWQ7XFxuICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7XFxufVxcblxcbmJ1dHRvbjpmb2N1czpub3QoOmZvY3VzLXZpc2libGUpIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbmlucHV0LFxcbmJ1dHRvbixcXG5zZWxlY3QsXFxub3B0Z3JvdXAsXFxudGV4dGFyZWEge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG59XFxuXFxuYnV0dG9uLFxcbmlucHV0IHtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG5cXG5idXR0b24sXFxuc2VsZWN0IHtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbn1cXG5cXG5zZWxlY3Qge1xcbiAgd29yZC13cmFwOiBub3JtYWw7XFxufVxcblxcbmJ1dHRvbixcXG5bdHlwZT0nYnV0dG9uJ10sXFxuW3R5cGU9J3Jlc2V0J10sXFxuW3R5cGU9J3N1Ym1pdCddIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xcbn1cXG5cXG5idXR0b246bm90KDpkaXNhYmxlZCksXFxuW3R5cGU9J2J1dHRvbiddOm5vdCg6ZGlzYWJsZWQpLFxcblt0eXBlPSdyZXNldCddOm5vdCg6ZGlzYWJsZWQpLFxcblt0eXBlPSdzdWJtaXQnXTpub3QoOmRpc2FibGVkKSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcXG5bdHlwZT0nYnV0dG9uJ106Oi1tb3otZm9jdXMtaW5uZXIsXFxuW3R5cGU9J3Jlc2V0J106Oi1tb3otZm9jdXMtaW5uZXIsXFxuW3R5cGU9J3N1Ym1pdCddOjotbW96LWZvY3VzLWlubmVyIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBib3JkZXItc3R5bGU6IG5vbmU7XFxufVxcblxcbmlucHV0W3R5cGU9J3JhZGlvJ10sXFxuaW5wdXRbdHlwZT0nY2hlY2tib3gnXSB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuaW5wdXRbdHlwZT0nZGF0ZSddLFxcbmlucHV0W3R5cGU9J3RpbWUnXSxcXG5pbnB1dFt0eXBlPSdkYXRldGltZS1sb2NhbCddLFxcbmlucHV0W3R5cGU9J21vbnRoJ10ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBsaXN0Ym94O1xcbn1cXG5cXG50ZXh0YXJlYSB7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIHJlc2l6ZTogdmVydGljYWw7XFxufVxcblxcbmZpZWxkc2V0IHtcXG4gIG1pbi13aWR0aDogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IDA7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbmxlZ2VuZCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogMDtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xcbn1cXG5cXG5wcm9ncmVzcyB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxufVxcblxcblt0eXBlPSdudW1iZXInXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcXG5bdHlwZT0nbnVtYmVyJ106Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xcbiAgaGVpZ2h0OiBhdXRvO1xcbn1cXG5cXG5bdHlwZT0nc2VhcmNoJ10ge1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxufVxcblxcblt0eXBlPSdzZWFyY2gnXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxufVxcblxcbjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xcbiAgZm9udDogaW5oZXJpdDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xcbn1cXG5cXG5vdXRwdXQge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG5cXG5zdW1tYXJ5IHtcXG4gIGRpc3BsYXk6IGxpc3QtaXRlbTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxudGVtcGxhdGUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuW2hpZGRlbl0ge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3BhbmVsL2R5bmFtaWMtcGFuZWwuY3NzXCI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO24uZCh0LHtaOigpPT5sfSk7dmFyIHI9bihcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIiksbz1uLm4ociksYT1uKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpLGk9bi5uKGEpKCkobygpKTtpLnB1c2goW2UuaWQsYC8qIFBhbmVsIGNvbnRhaW5lciBiYXNlIHN0eWxlcyB3aXRoIGR5bmFtaWMgcG9zaXRpb25pbmcgYW5kIHNpemluZyAqL1xuLmR5bmFtaWMtcGFuZWwtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ2O1xuICBvdXRsaW5lOiBub25lO1xuICB0b3A6IHZhcigtLXBhbmVsLXRvcCwgYXV0byk7XG4gIGJvdHRvbTogdmFyKC0tcGFuZWwtYm90dG9tLCBhdXRvKTtcbiAgbGVmdDogdmFyKC0tcGFuZWwtbGVmdCwgYXV0byk7XG4gIHJpZ2h0OiB2YXIoLS1wYW5lbC1yaWdodCwgYXV0byk7XG4gIHdpZHRoOiB2YXIoLS1wYW5lbC13aWR0aCk7XG4gIGhlaWdodDogdmFyKC0tcGFuZWwtaGVpZ2h0KTtcbiAgbWluLXdpZHRoOiB2YXIoLS1wYW5lbC1taW4td2lkdGgpO1xuICBtaW4taGVpZ2h0OiB2YXIoLS1wYW5lbC1taW4taGVpZ2h0KTtcbiAgbWF4LXdpZHRoOiB2YXIoLS1wYW5lbC1tYXgtd2lkdGgpO1xuICBtYXgtaGVpZ2h0OiB2YXIoLS1wYW5lbC1tYXgtaGVpZ2h0KTtcbn1cblxuLyogUGFuZWwgY29udGVudCBjb250YWluZXIgc3R5bGVzICovXG4ucGFuZWwtY29udGVudC1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC14bCk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLyogRHJhZ2dhYmxlIGNvbnRlbnQgYXJlYSBzdHlsZXMgKi9cbi5kcmFnZ2FibGUtY29udGVudCB7XG4gIGZsZXg6IDE7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9wYW5lbC9keW5hbWljLXBhbmVsLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUEsb0VBQW9FO0FBQ3BFO0VBQ0UsZUFBZTtFQUNmLG1CQUFtQjtFQUNuQixhQUFhO0VBQ2IsMkJBQTJCO0VBQzNCLGlDQUFpQztFQUNqQyw2QkFBNkI7RUFDN0IsK0JBQStCO0VBQy9CLHlCQUF5QjtFQUN6QiwyQkFBMkI7RUFDM0IsaUNBQWlDO0VBQ2pDLG1DQUFtQztFQUNuQyxpQ0FBaUM7RUFDakMsbUNBQW1DO0FBQ3JDOztBQUVBLG1DQUFtQztBQUNuQztFQUNFLGtCQUFrQjtFQUNsQixXQUFXO0VBQ1gsWUFBWTtFQUNaLDZDQUE2QztFQUM3QyxnQ0FBZ0M7RUFDaEMsdUNBQXVDO0VBQ3ZDLGFBQWE7RUFDYixzQkFBc0I7QUFDeEI7O0FBRUEsa0NBQWtDO0FBQ2xDO0VBQ0UsT0FBTztFQUNQLGNBQWM7QUFDaEJcIixzb3VyY2VzQ29udGVudDpbXCIvKiBQYW5lbCBjb250YWluZXIgYmFzZSBzdHlsZXMgd2l0aCBkeW5hbWljIHBvc2l0aW9uaW5nIGFuZCBzaXppbmcgKi9cXG4uZHluYW1pYy1wYW5lbC1jb250YWluZXIge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgei1pbmRleDogMjE0NzQ4MzY0NjtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICB0b3A6IHZhcigtLXBhbmVsLXRvcCwgYXV0byk7XFxuICBib3R0b206IHZhcigtLXBhbmVsLWJvdHRvbSwgYXV0byk7XFxuICBsZWZ0OiB2YXIoLS1wYW5lbC1sZWZ0LCBhdXRvKTtcXG4gIHJpZ2h0OiB2YXIoLS1wYW5lbC1yaWdodCwgYXV0byk7XFxuICB3aWR0aDogdmFyKC0tcGFuZWwtd2lkdGgpO1xcbiAgaGVpZ2h0OiB2YXIoLS1wYW5lbC1oZWlnaHQpO1xcbiAgbWluLXdpZHRoOiB2YXIoLS1wYW5lbC1taW4td2lkdGgpO1xcbiAgbWluLWhlaWdodDogdmFyKC0tcGFuZWwtbWluLWhlaWdodCk7XFxuICBtYXgtd2lkdGg6IHZhcigtLXBhbmVsLW1heC13aWR0aCk7XFxuICBtYXgtaGVpZ2h0OiB2YXIoLS1wYW5lbC1tYXgtaGVpZ2h0KTtcXG59XFxuXFxuLyogUGFuZWwgY29udGVudCBjb250YWluZXIgc3R5bGVzICovXFxuLnBhbmVsLWNvbnRlbnQtY29udGFpbmVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC14bCk7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuXFxuLyogRHJhZ2dhYmxlIGNvbnRlbnQgYXJlYSBzdHlsZXMgKi9cXG4uZHJhZ2dhYmxlLWNvbnRlbnQge1xcbiAgZmxleDogMTtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3N0eWxlcy9jb2xvcnMuY3NzXCI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO24uZCh0LHtaOigpPT5sfSk7dmFyIHI9bihcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIiksbz1uLm4ociksYT1uKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpLGk9bi5uKGEpKCkobygpKTtpLnB1c2goW2UuaWQsYDpob3N0IHtcbiAgLyogXG4gICAqIENBVVRJT046IFRISVMgSVMgQSBXT1JLQVJPVU5EIVxuICAgKiBGb3Igbm93LCB3ZSB1c2UgQGJhYmVsL2NvZGUtZnJhbWUgdG8gcGFyc2UgdGhlIGNvZGUgZnJhbWUgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCBvcHRpb24gdG8gY2hhbmdlIHRoZSBjb2xvci5cbiAgICogeC1yZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWJlbC9iYWJlbC9ibG9iL2VmYTUyMzI0ZmY4MzViNzk0YzQ4MDgwZjE0ODc3YjZjYWYzMmNkMTUvcGFja2FnZXMvYmFiZWwtY29kZS1mcmFtZS9zcmMvZGVmcy50cyNMNDAtTDU0XG4gICAqIFNvLCB3ZSBkbyBhIHdvcmthcm91bmQgbWFwcGluZyB0byBjaGFuZ2UgdGhlIGNvbG9yIG1hdGNoaW5nIHRoZSB0aGVtZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGluIEBiYWJlbC9jb2RlLWZyYW1lLCB0aGUgXCJrZXl3b3JkXCIgaXMgbWFwcGVkIHRvIEFOU0kgXCJjeWFuXCIuXG4gICAqIFdlIHdhbnQgdGhlIFwia2V5d29yZFwiIHRvIHVzZSB0aGUgXCJzeW50YXgta2V5d29yZFwiIGNvbG9yIGluIHRoZSB0aGVtZS5cbiAgICogU28sIHdlIG1hcCB0aGUgXCJjeWFuXCIgdG8gdGhlIFwic3ludGF4LWtleXdvcmRcIiBpbiB0aGUgdGhlbWUuXG4gICAqL1xuICAvKiBjeWFuOiBrZXl3b3JkICovXG4gIC0tY29sb3ItYW5zaS1jeWFuOiB2YXIoLS1jb2xvci1zeW50YXgta2V5d29yZCk7XG4gIC8qIHllbGxvdzogY2FwaXRhbGl6ZWQsIGpzeElkZW50aWZpZXIsIHB1bmN0dWF0aW9uICovXG4gIC0tY29sb3ItYW5zaS15ZWxsb3c6IHZhcigtLWNvbG9yLXN5bnRheC1mdW5jdGlvbik7XG4gIC8qIG1hZ2VudGE6IG51bWJlciwgcmVnZXggKi9cbiAgLS1jb2xvci1hbnNpLW1hZ2VudGE6IHZhcigtLWNvbG9yLXN5bnRheC1rZXl3b3JkKTtcbiAgLyogZ3JlZW46IHN0cmluZyAqL1xuICAtLWNvbG9yLWFuc2ktZ3JlZW46IHZhcigtLWNvbG9yLXN5bnRheC1zdHJpbmcpO1xuICAvKiBncmF5IChicmlnaHQgYmxhY2spOiBjb21tZW50LCBndXR0ZXIgKi9cbiAgLS1jb2xvci1hbnNpLWJyaWdodC1ibGFjazogdmFyKC0tY29sb3Itc3ludGF4LWNvbW1lbnQpO1xuXG4gIC8qIEFuc2kgLSBUZW1wb3JhcnkgKi9cbiAgLS1jb2xvci1hbnNpLXNlbGVjdGlvbjogdmFyKC0tY29sb3ItZ3JheS1hbHBoYS0zMDApO1xuICAtLWNvbG9yLWFuc2ktYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcbiAgLS1jb2xvci1hbnNpLWZnOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xuXG4gIC0tY29sb3ItYW5zaS13aGl0ZTogdmFyKC0tY29sb3ItZ3JheS03MDApO1xuICAtLWNvbG9yLWFuc2ktYmxhY2s6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcbiAgLS1jb2xvci1hbnNpLWJsdWU6IHZhcigtLWNvbG9yLWJsdWUtNzAwKTtcbiAgLS1jb2xvci1hbnNpLXJlZDogdmFyKC0tY29sb3ItcmVkLTcwMCk7XG4gIC0tY29sb3ItYW5zaS1icmlnaHQtd2hpdGU6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XG4gIC0tY29sb3ItYW5zaS1icmlnaHQtYmx1ZTogdmFyKC0tY29sb3ItYmx1ZS04MDApO1xuICAtLWNvbG9yLWFuc2ktYnJpZ2h0LWN5YW46IHZhcigtLWNvbG9yLWJsdWUtODAwKTtcbiAgLS1jb2xvci1hbnNpLWJyaWdodC1ncmVlbjogdmFyKC0tY29sb3ItZ3JlZW4tODAwKTtcbiAgLS1jb2xvci1hbnNpLWJyaWdodC1tYWdlbnRhOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XG4gIC0tY29sb3ItYW5zaS1icmlnaHQtcmVkOiB2YXIoLS1jb2xvci1yZWQtODAwKTtcbiAgLS1jb2xvci1hbnNpLWJyaWdodC15ZWxsb3c6IHZhcigtLWNvbG9yLWFtYmVyLTkwMCk7XG5cbiAgLyogQmFja2dyb3VuZCBMaWdodCAqL1xuICAtLWNvbG9yLWJhY2tncm91bmQtMTAwOiAjZmZmZmZmO1xuICAtLWNvbG9yLWJhY2tncm91bmQtMjAwOiAjZmFmYWZhO1xuXG4gIC8qIFN5bnRheCBMaWdodCAqL1xuICAtLWNvbG9yLXN5bnRheC1jb21tZW50OiAjNTQ1NDU0O1xuICAtLWNvbG9yLXN5bnRheC1jb25zdGFudDogIzE3MTcxNztcbiAgLS1jb2xvci1zeW50YXgtZnVuY3Rpb246ICMwMDU0YWQ7XG4gIC0tY29sb3Itc3ludGF4LWtleXdvcmQ6ICNhNTE4NTA7XG4gIC0tY29sb3Itc3ludGF4LWxpbms6ICMwNjYwNTY7XG4gIC0tY29sb3Itc3ludGF4LXBhcmFtZXRlcjogIzhmM2UwMDtcbiAgLS1jb2xvci1zeW50YXgtcHVuY3R1YXRpb246ICMxNzE3MTc7XG4gIC0tY29sb3Itc3ludGF4LXN0cmluZzogIzAzNjE1NztcbiAgLS1jb2xvci1zeW50YXgtc3RyaW5nLWV4cHJlc3Npb246ICMwNjYwNTY7XG5cbiAgLyogR3JheSBTY2FsZSBMaWdodCAqL1xuICAtLWNvbG9yLWdyYXktMTAwOiAjZjJmMmYyO1xuICAtLWNvbG9yLWdyYXktMjAwOiAjZWJlYmViO1xuICAtLWNvbG9yLWdyYXktMzAwOiAjZTZlNmU2O1xuICAtLWNvbG9yLWdyYXktNDAwOiAjZWFlYWVhO1xuICAtLWNvbG9yLWdyYXktNTAwOiAjYzljOWM5O1xuICAtLWNvbG9yLWdyYXktNjAwOiAjYThhOGE4O1xuICAtLWNvbG9yLWdyYXktNzAwOiAjOGY4ZjhmO1xuICAtLWNvbG9yLWdyYXktODAwOiAjN2Q3ZDdkO1xuICAtLWNvbG9yLWdyYXktOTAwOiAjNjY2NjY2O1xuICAtLWNvbG9yLWdyYXktMTAwMDogIzE3MTcxNztcblxuICAvKiBHcmF5IEFscGhhIFNjYWxlIExpZ2h0ICovXG4gIC0tY29sb3ItZ3JheS1hbHBoYS0xMDA6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIC0tY29sb3ItZ3JheS1hbHBoYS0yMDA6IHJnYmEoMCwgMCwgMCwgMC4wODEpO1xuICAtLWNvbG9yLWdyYXktYWxwaGEtMzAwOiByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIC0tY29sb3ItZ3JheS1hbHBoYS00MDA6IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gIC0tY29sb3ItZ3JheS1hbHBoYS01MDA6IHJnYmEoMCwgMCwgMCwgMC4yMSk7XG4gIC0tY29sb3ItZ3JheS1hbHBoYS02MDA6IHJnYmEoMCwgMCwgMCwgMC4zNCk7XG4gIC0tY29sb3ItZ3JheS1hbHBoYS03MDA6IHJnYmEoMCwgMCwgMCwgMC40NCk7XG4gIC0tY29sb3ItZ3JheS1hbHBoYS04MDA6IHJnYmEoMCwgMCwgMCwgMC41MSk7XG4gIC0tY29sb3ItZ3JheS1hbHBoYS05MDA6IHJnYmEoMCwgMCwgMCwgMC42MDUpO1xuICAtLWNvbG9yLWdyYXktYWxwaGEtMTAwMDogcmdiYSgwLCAwLCAwLCAwLjkxKTtcblxuICAvKiBCbHVlIFNjYWxlIExpZ2h0ICovXG4gIC0tY29sb3ItYmx1ZS0xMDA6ICNmMGY3ZmY7XG4gIC0tY29sb3ItYmx1ZS0yMDA6ICNlZGY2ZmY7XG4gIC0tY29sb3ItYmx1ZS0zMDA6ICNlMWYwZmY7XG4gIC0tY29sb3ItYmx1ZS00MDA6ICNjZGU3ZmY7XG4gIC0tY29sb3ItYmx1ZS01MDA6ICM5OWNlZmY7XG4gIC0tY29sb3ItYmx1ZS02MDA6ICM1MmFlZmY7XG4gIC0tY29sb3ItYmx1ZS03MDA6ICMwMDcwZjM7XG4gIC0tY29sb3ItYmx1ZS04MDA6ICMwMDYwZDE7XG4gIC0tY29sb3ItYmx1ZS05MDA6ICMwMDY3ZDY7XG4gIC0tY29sb3ItYmx1ZS0xMDAwOiAjMDAyNWFkO1xuXG4gIC8qIFJlZCBTY2FsZSBMaWdodCAqL1xuICAtLWNvbG9yLXJlZC0xMDA6ICNmZmYwZjA7XG4gIC0tY29sb3ItcmVkLTIwMDogI2ZmZWJlYjtcbiAgLS1jb2xvci1yZWQtMzAwOiAjZmZlNWU1O1xuICAtLWNvbG9yLXJlZC00MDA6ICNmZGQ4ZDg7XG4gIC0tY29sb3ItcmVkLTUwMDogI2Y4YmFiYTtcbiAgLS1jb2xvci1yZWQtNjAwOiAjZjg3Mjc0O1xuICAtLWNvbG9yLXJlZC03MDA6ICNlNTQ4NGQ7XG4gIC0tY29sb3ItcmVkLTgwMDogI2RhMzAzNjtcbiAgLS1jb2xvci1yZWQtOTAwOiAjY2EyYTMwO1xuICAtLWNvbG9yLXJlZC0xMDAwOiAjMzgxMzE2O1xuXG4gIC8qIEFtYmVyIFNjYWxlIExpZ2h0ICovXG4gIC0tY29sb3ItYW1iZXItMTAwOiAjZmZmNmU1O1xuICAtLWNvbG9yLWFtYmVyLTIwMDogI2ZmZjRkNTtcbiAgLS1jb2xvci1hbWJlci0zMDA6ICNmZWYwY2Q7XG4gIC0tY29sb3ItYW1iZXItNDAwOiAjZmZkZGJmO1xuICAtLWNvbG9yLWFtYmVyLTUwMDogI2ZmYzk2YjtcbiAgLS1jb2xvci1hbWJlci02MDA6ICNmNWIwNDc7XG4gIC0tY29sb3ItYW1iZXItNzAwOiAjZmZiMjI0O1xuICAtLWNvbG9yLWFtYmVyLTgwMDogI2ZmOTkwYTtcbiAgLS1jb2xvci1hbWJlci05MDA6ICNhMzUyMDA7XG4gIC0tY29sb3ItYW1iZXItMTAwMDogIzRlMjAwOTtcblxuICAvKiBHcmVlbiBTY2FsZSBMaWdodCAqL1xuICAtLWNvbG9yLWdyZWVuLTEwMDogI2VmZmJlZjtcbiAgLS1jb2xvci1ncmVlbi0yMDA6ICNlYWZhZWE7XG4gIC0tY29sb3ItZ3JlZW4tMzAwOiAjZGNmNmRjO1xuICAtLWNvbG9yLWdyZWVuLTQwMDogI2M4ZjFjOTtcbiAgLS1jb2xvci1ncmVlbi01MDA6ICM5OWU1OWY7XG4gIC0tY29sb3ItZ3JlZW4tNjAwOiAjNmNkYTc2O1xuICAtLWNvbG9yLWdyZWVuLTcwMDogIzQ2YTc1ODtcbiAgLS1jb2xvci1ncmVlbi04MDA6ICMzODhlNGE7XG4gIC0tY29sb3ItZ3JlZW4tOTAwOiAjMjk3YzNiO1xuICAtLWNvbG9yLWdyZWVuLTEwMDA6ICMxODMxMWU7XG5cbiAgLyogVHVyYm9wYWNrIExpZ2h0IC0gVGVtcG9yYXJ5ICovXG4gIC0tY29sb3ItdHVyYm9wYWNrLXRleHQtcmVkOiAjZmYxZTU2O1xuICAtLWNvbG9yLXR1cmJvcGFjay10ZXh0LWJsdWU6ICMwMDk2ZmY7XG4gIC0tY29sb3ItdHVyYm9wYWNrLWJvcmRlci1yZWQ6ICNmMGFkYmU7XG4gIC0tY29sb3ItdHVyYm9wYWNrLWJvcmRlci1ibHVlOiAjYWRjY2VhO1xuICAtLWNvbG9yLXR1cmJvcGFjay1iYWNrZ3JvdW5kLXJlZDogI2ZmZjdmOTtcbiAgLS1jb2xvci10dXJib3BhY2stYmFja2dyb3VuZC1ibHVlOiAjZjZmYmZmO1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9zdHlsZXMvY29sb3JzLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRTs7Ozs7Ozs7O0lBU0U7RUFDRixrQkFBa0I7RUFDbEIsOENBQThDO0VBQzlDLG9EQUFvRDtFQUNwRCxpREFBaUQ7RUFDakQsMkJBQTJCO0VBQzNCLGlEQUFpRDtFQUNqRCxrQkFBa0I7RUFDbEIsOENBQThDO0VBQzlDLHlDQUF5QztFQUN6QyxzREFBc0Q7O0VBRXRELHFCQUFxQjtFQUNyQixtREFBbUQ7RUFDbkQsNENBQTRDO0VBQzVDLHVDQUF1Qzs7RUFFdkMseUNBQXlDO0VBQ3pDLHlDQUF5QztFQUN6Qyx3Q0FBd0M7RUFDeEMsc0NBQXNDO0VBQ3RDLGlEQUFpRDtFQUNqRCwrQ0FBK0M7RUFDL0MsK0NBQStDO0VBQy9DLGlEQUFpRDtFQUNqRCxrREFBa0Q7RUFDbEQsNkNBQTZDO0VBQzdDLGtEQUFrRDs7RUFFbEQscUJBQXFCO0VBQ3JCLCtCQUErQjtFQUMvQiwrQkFBK0I7O0VBRS9CLGlCQUFpQjtFQUNqQiwrQkFBK0I7RUFDL0IsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQywrQkFBK0I7RUFDL0IsNEJBQTRCO0VBQzVCLGlDQUFpQztFQUNqQyxtQ0FBbUM7RUFDbkMsOEJBQThCO0VBQzlCLHlDQUF5Qzs7RUFFekMscUJBQXFCO0VBQ3JCLHlCQUF5QjtFQUN6Qix5QkFBeUI7RUFDekIseUJBQXlCO0VBQ3pCLHlCQUF5QjtFQUN6Qix5QkFBeUI7RUFDekIseUJBQXlCO0VBQ3pCLHlCQUF5QjtFQUN6Qix5QkFBeUI7RUFDekIseUJBQXlCO0VBQ3pCLDBCQUEwQjs7RUFFMUIsMkJBQTJCO0VBQzNCLDJDQUEyQztFQUMzQyw0Q0FBNEM7RUFDNUMsMENBQTBDO0VBQzFDLDJDQUEyQztFQUMzQywyQ0FBMkM7RUFDM0MsMkNBQTJDO0VBQzNDLDJDQUEyQztFQUMzQywyQ0FBMkM7RUFDM0MsNENBQTRDO0VBQzVDLDRDQUE0Qzs7RUFFNUMscUJBQXFCO0VBQ3JCLHlCQUF5QjtFQUN6Qix5QkFBeUI7RUFDekIseUJBQXlCO0VBQ3pCLHlCQUF5QjtFQUN6Qix5QkFBeUI7RUFDekIseUJBQXlCO0VBQ3pCLHlCQUF5QjtFQUN6Qix5QkFBeUI7RUFDekIseUJBQXlCO0VBQ3pCLDBCQUEwQjs7RUFFMUIsb0JBQW9CO0VBQ3BCLHdCQUF3QjtFQUN4Qix3QkFBd0I7RUFDeEIsd0JBQXdCO0VBQ3hCLHdCQUF3QjtFQUN4Qix3QkFBd0I7RUFDeEIsd0JBQXdCO0VBQ3hCLHdCQUF3QjtFQUN4Qix3QkFBd0I7RUFDeEIsd0JBQXdCO0VBQ3hCLHlCQUF5Qjs7RUFFekIsc0JBQXNCO0VBQ3RCLDBCQUEwQjtFQUMxQiwwQkFBMEI7RUFDMUIsMEJBQTBCO0VBQzFCLDBCQUEwQjtFQUMxQiwwQkFBMEI7RUFDMUIsMEJBQTBCO0VBQzFCLDBCQUEwQjtFQUMxQiwwQkFBMEI7RUFDMUIsMEJBQTBCO0VBQzFCLDJCQUEyQjs7RUFFM0Isc0JBQXNCO0VBQ3RCLDBCQUEwQjtFQUMxQiwwQkFBMEI7RUFDMUIsMEJBQTBCO0VBQzFCLDBCQUEwQjtFQUMxQiwwQkFBMEI7RUFDMUIsMEJBQTBCO0VBQzFCLDBCQUEwQjtFQUMxQiwwQkFBMEI7RUFDMUIsMEJBQTBCO0VBQzFCLDJCQUEyQjs7RUFFM0IsZ0NBQWdDO0VBQ2hDLG1DQUFtQztFQUNuQyxvQ0FBb0M7RUFDcEMscUNBQXFDO0VBQ3JDLHNDQUFzQztFQUN0Qyx5Q0FBeUM7RUFDekMsMENBQTBDO0FBQzVDXCIsc291cmNlc0NvbnRlbnQ6Wyc6aG9zdCB7XFxuICAvKiBcXG4gICAqIENBVVRJT046IFRISVMgSVMgQSBXT1JLQVJPVU5EIVxcbiAgICogRm9yIG5vdywgd2UgdXNlIEBiYWJlbC9jb2RlLWZyYW1lIHRvIHBhcnNlIHRoZSBjb2RlIGZyYW1lIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgb3B0aW9uIHRvIGNoYW5nZSB0aGUgY29sb3IuXFxuICAgKiB4LXJlZjogaHR0cHM6Ly9naXRodWIuY29tL2JhYmVsL2JhYmVsL2Jsb2IvZWZhNTIzMjRmZjgzNWI3OTRjNDgwODBmMTQ4NzdiNmNhZjMyY2QxNS9wYWNrYWdlcy9iYWJlbC1jb2RlLWZyYW1lL3NyYy9kZWZzLnRzI0w0MC1MNTRcXG4gICAqIFNvLCB3ZSBkbyBhIHdvcmthcm91bmQgbWFwcGluZyB0byBjaGFuZ2UgdGhlIGNvbG9yIG1hdGNoaW5nIHRoZSB0aGVtZS5cXG4gICAqXFxuICAgKiBGb3IgZXhhbXBsZSwgaW4gQGJhYmVsL2NvZGUtZnJhbWUsIHRoZSBcImtleXdvcmRcIiBpcyBtYXBwZWQgdG8gQU5TSSBcImN5YW5cIi5cXG4gICAqIFdlIHdhbnQgdGhlIFwia2V5d29yZFwiIHRvIHVzZSB0aGUgXCJzeW50YXgta2V5d29yZFwiIGNvbG9yIGluIHRoZSB0aGVtZS5cXG4gICAqIFNvLCB3ZSBtYXAgdGhlIFwiY3lhblwiIHRvIHRoZSBcInN5bnRheC1rZXl3b3JkXCIgaW4gdGhlIHRoZW1lLlxcbiAgICovXFxuICAvKiBjeWFuOiBrZXl3b3JkICovXFxuICAtLWNvbG9yLWFuc2ktY3lhbjogdmFyKC0tY29sb3Itc3ludGF4LWtleXdvcmQpO1xcbiAgLyogeWVsbG93OiBjYXBpdGFsaXplZCwganN4SWRlbnRpZmllciwgcHVuY3R1YXRpb24gKi9cXG4gIC0tY29sb3ItYW5zaS15ZWxsb3c6IHZhcigtLWNvbG9yLXN5bnRheC1mdW5jdGlvbik7XFxuICAvKiBtYWdlbnRhOiBudW1iZXIsIHJlZ2V4ICovXFxuICAtLWNvbG9yLWFuc2ktbWFnZW50YTogdmFyKC0tY29sb3Itc3ludGF4LWtleXdvcmQpO1xcbiAgLyogZ3JlZW46IHN0cmluZyAqL1xcbiAgLS1jb2xvci1hbnNpLWdyZWVuOiB2YXIoLS1jb2xvci1zeW50YXgtc3RyaW5nKTtcXG4gIC8qIGdyYXkgKGJyaWdodCBibGFjayk6IGNvbW1lbnQsIGd1dHRlciAqL1xcbiAgLS1jb2xvci1hbnNpLWJyaWdodC1ibGFjazogdmFyKC0tY29sb3Itc3ludGF4LWNvbW1lbnQpO1xcblxcbiAgLyogQW5zaSAtIFRlbXBvcmFyeSAqL1xcbiAgLS1jb2xvci1hbnNpLXNlbGVjdGlvbjogdmFyKC0tY29sb3ItZ3JheS1hbHBoYS0zMDApO1xcbiAgLS1jb2xvci1hbnNpLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxuICAtLWNvbG9yLWFuc2ktZmc6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuXFxuICAtLWNvbG9yLWFuc2ktd2hpdGU6IHZhcigtLWNvbG9yLWdyYXktNzAwKTtcXG4gIC0tY29sb3ItYW5zaS1ibGFjazogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xcbiAgLS1jb2xvci1hbnNpLWJsdWU6IHZhcigtLWNvbG9yLWJsdWUtNzAwKTtcXG4gIC0tY29sb3ItYW5zaS1yZWQ6IHZhcigtLWNvbG9yLXJlZC03MDApO1xcbiAgLS1jb2xvci1hbnNpLWJyaWdodC13aGl0ZTogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIC0tY29sb3ItYW5zaS1icmlnaHQtYmx1ZTogdmFyKC0tY29sb3ItYmx1ZS04MDApO1xcbiAgLS1jb2xvci1hbnNpLWJyaWdodC1jeWFuOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XFxuICAtLWNvbG9yLWFuc2ktYnJpZ2h0LWdyZWVuOiB2YXIoLS1jb2xvci1ncmVlbi04MDApO1xcbiAgLS1jb2xvci1hbnNpLWJyaWdodC1tYWdlbnRhOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XFxuICAtLWNvbG9yLWFuc2ktYnJpZ2h0LXJlZDogdmFyKC0tY29sb3ItcmVkLTgwMCk7XFxuICAtLWNvbG9yLWFuc2ktYnJpZ2h0LXllbGxvdzogdmFyKC0tY29sb3ItYW1iZXItOTAwKTtcXG5cXG4gIC8qIEJhY2tncm91bmQgTGlnaHQgKi9cXG4gIC0tY29sb3ItYmFja2dyb3VuZC0xMDA6ICNmZmZmZmY7XFxuICAtLWNvbG9yLWJhY2tncm91bmQtMjAwOiAjZmFmYWZhO1xcblxcbiAgLyogU3ludGF4IExpZ2h0ICovXFxuICAtLWNvbG9yLXN5bnRheC1jb21tZW50OiAjNTQ1NDU0O1xcbiAgLS1jb2xvci1zeW50YXgtY29uc3RhbnQ6ICMxNzE3MTc7XFxuICAtLWNvbG9yLXN5bnRheC1mdW5jdGlvbjogIzAwNTRhZDtcXG4gIC0tY29sb3Itc3ludGF4LWtleXdvcmQ6ICNhNTE4NTA7XFxuICAtLWNvbG9yLXN5bnRheC1saW5rOiAjMDY2MDU2O1xcbiAgLS1jb2xvci1zeW50YXgtcGFyYW1ldGVyOiAjOGYzZTAwO1xcbiAgLS1jb2xvci1zeW50YXgtcHVuY3R1YXRpb246ICMxNzE3MTc7XFxuICAtLWNvbG9yLXN5bnRheC1zdHJpbmc6ICMwMzYxNTc7XFxuICAtLWNvbG9yLXN5bnRheC1zdHJpbmctZXhwcmVzc2lvbjogIzA2NjA1NjtcXG5cXG4gIC8qIEdyYXkgU2NhbGUgTGlnaHQgKi9cXG4gIC0tY29sb3ItZ3JheS0xMDA6ICNmMmYyZjI7XFxuICAtLWNvbG9yLWdyYXktMjAwOiAjZWJlYmViO1xcbiAgLS1jb2xvci1ncmF5LTMwMDogI2U2ZTZlNjtcXG4gIC0tY29sb3ItZ3JheS00MDA6ICNlYWVhZWE7XFxuICAtLWNvbG9yLWdyYXktNTAwOiAjYzljOWM5O1xcbiAgLS1jb2xvci1ncmF5LTYwMDogI2E4YThhODtcXG4gIC0tY29sb3ItZ3JheS03MDA6ICM4ZjhmOGY7XFxuICAtLWNvbG9yLWdyYXktODAwOiAjN2Q3ZDdkO1xcbiAgLS1jb2xvci1ncmF5LTkwMDogIzY2NjY2NjtcXG4gIC0tY29sb3ItZ3JheS0xMDAwOiAjMTcxNzE3O1xcblxcbiAgLyogR3JheSBBbHBoYSBTY2FsZSBMaWdodCAqL1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTEwMDogcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS0yMDA6IHJnYmEoMCwgMCwgMCwgMC4wODEpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTMwMDogcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTQwMDogcmdiYSgwLCAwLCAwLCAwLjA4KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS01MDA6IHJnYmEoMCwgMCwgMCwgMC4yMSk7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtNjAwOiByZ2JhKDAsIDAsIDAsIDAuMzQpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTcwMDogcmdiYSgwLCAwLCAwLCAwLjQ0KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS04MDA6IHJnYmEoMCwgMCwgMCwgMC41MSk7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtOTAwOiByZ2JhKDAsIDAsIDAsIDAuNjA1KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS0xMDAwOiByZ2JhKDAsIDAsIDAsIDAuOTEpO1xcblxcbiAgLyogQmx1ZSBTY2FsZSBMaWdodCAqL1xcbiAgLS1jb2xvci1ibHVlLTEwMDogI2YwZjdmZjtcXG4gIC0tY29sb3ItYmx1ZS0yMDA6ICNlZGY2ZmY7XFxuICAtLWNvbG9yLWJsdWUtMzAwOiAjZTFmMGZmO1xcbiAgLS1jb2xvci1ibHVlLTQwMDogI2NkZTdmZjtcXG4gIC0tY29sb3ItYmx1ZS01MDA6ICM5OWNlZmY7XFxuICAtLWNvbG9yLWJsdWUtNjAwOiAjNTJhZWZmO1xcbiAgLS1jb2xvci1ibHVlLTcwMDogIzAwNzBmMztcXG4gIC0tY29sb3ItYmx1ZS04MDA6ICMwMDYwZDE7XFxuICAtLWNvbG9yLWJsdWUtOTAwOiAjMDA2N2Q2O1xcbiAgLS1jb2xvci1ibHVlLTEwMDA6ICMwMDI1YWQ7XFxuXFxuICAvKiBSZWQgU2NhbGUgTGlnaHQgKi9cXG4gIC0tY29sb3ItcmVkLTEwMDogI2ZmZjBmMDtcXG4gIC0tY29sb3ItcmVkLTIwMDogI2ZmZWJlYjtcXG4gIC0tY29sb3ItcmVkLTMwMDogI2ZmZTVlNTtcXG4gIC0tY29sb3ItcmVkLTQwMDogI2ZkZDhkODtcXG4gIC0tY29sb3ItcmVkLTUwMDogI2Y4YmFiYTtcXG4gIC0tY29sb3ItcmVkLTYwMDogI2Y4NzI3NDtcXG4gIC0tY29sb3ItcmVkLTcwMDogI2U1NDg0ZDtcXG4gIC0tY29sb3ItcmVkLTgwMDogI2RhMzAzNjtcXG4gIC0tY29sb3ItcmVkLTkwMDogI2NhMmEzMDtcXG4gIC0tY29sb3ItcmVkLTEwMDA6ICMzODEzMTY7XFxuXFxuICAvKiBBbWJlciBTY2FsZSBMaWdodCAqL1xcbiAgLS1jb2xvci1hbWJlci0xMDA6ICNmZmY2ZTU7XFxuICAtLWNvbG9yLWFtYmVyLTIwMDogI2ZmZjRkNTtcXG4gIC0tY29sb3ItYW1iZXItMzAwOiAjZmVmMGNkO1xcbiAgLS1jb2xvci1hbWJlci00MDA6ICNmZmRkYmY7XFxuICAtLWNvbG9yLWFtYmVyLTUwMDogI2ZmYzk2YjtcXG4gIC0tY29sb3ItYW1iZXItNjAwOiAjZjViMDQ3O1xcbiAgLS1jb2xvci1hbWJlci03MDA6ICNmZmIyMjQ7XFxuICAtLWNvbG9yLWFtYmVyLTgwMDogI2ZmOTkwYTtcXG4gIC0tY29sb3ItYW1iZXItOTAwOiAjYTM1MjAwO1xcbiAgLS1jb2xvci1hbWJlci0xMDAwOiAjNGUyMDA5O1xcblxcbiAgLyogR3JlZW4gU2NhbGUgTGlnaHQgKi9cXG4gIC0tY29sb3ItZ3JlZW4tMTAwOiAjZWZmYmVmO1xcbiAgLS1jb2xvci1ncmVlbi0yMDA6ICNlYWZhZWE7XFxuICAtLWNvbG9yLWdyZWVuLTMwMDogI2RjZjZkYztcXG4gIC0tY29sb3ItZ3JlZW4tNDAwOiAjYzhmMWM5O1xcbiAgLS1jb2xvci1ncmVlbi01MDA6ICM5OWU1OWY7XFxuICAtLWNvbG9yLWdyZWVuLTYwMDogIzZjZGE3NjtcXG4gIC0tY29sb3ItZ3JlZW4tNzAwOiAjNDZhNzU4O1xcbiAgLS1jb2xvci1ncmVlbi04MDA6ICMzODhlNGE7XFxuICAtLWNvbG9yLWdyZWVuLTkwMDogIzI5N2MzYjtcXG4gIC0tY29sb3ItZ3JlZW4tMTAwMDogIzE4MzExZTtcXG5cXG4gIC8qIFR1cmJvcGFjayBMaWdodCAtIFRlbXBvcmFyeSAqL1xcbiAgLS1jb2xvci10dXJib3BhY2stdGV4dC1yZWQ6ICNmZjFlNTY7XFxuICAtLWNvbG9yLXR1cmJvcGFjay10ZXh0LWJsdWU6ICMwMDk2ZmY7XFxuICAtLWNvbG9yLXR1cmJvcGFjay1ib3JkZXItcmVkOiAjZjBhZGJlO1xcbiAgLS1jb2xvci10dXJib3BhY2stYm9yZGVyLWJsdWU6ICNhZGNjZWE7XFxuICAtLWNvbG9yLXR1cmJvcGFjay1iYWNrZ3JvdW5kLXJlZDogI2ZmZjdmOTtcXG4gIC0tY29sb3ItdHVyYm9wYWNrLWJhY2tncm91bmQtYmx1ZTogI2Y2ZmJmZjtcXG59XFxuJ10sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3N0eWxlcy9kYXJrLXRoZW1lLmNzc1wiOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtuLmQodCx7WjooKT0+bH0pO3ZhciByPW4oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCIpLG89bi5uKHIpLGE9bihcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiKSxpPW4ubihhKSgpKG8oKSk7aS5wdXNoKFtlLmlkLGA6aG9zdCguZGFyaykge1xuICAtLWNvbG9yLWZvbnQ6IHdoaXRlO1xuICAtLWNvbG9yLWJhY2tkcm9wOiByZ2JhKDAsIDAsIDAsIDAuOCk7XG4gIC0tY29sb3ItYm9yZGVyLXNoYWRvdzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0NSk7XG5cbiAgLS1jb2xvci10aXRsZS1jb2xvcjogI2ZhZmFmYTtcbiAgLS1jb2xvci1zdGFjay1ub3RlczogI2E5YTlhOTtcblxuICAvKiBCYWNrZ3JvdW5kIERhcmsgKi9cbiAgLS1jb2xvci1iYWNrZ3JvdW5kLTEwMDogIzBhMGEwYTtcbiAgLS1jb2xvci1iYWNrZ3JvdW5kLTIwMDogIzAwMDAwMDtcblxuICAvKiBTeW50YXggRGFyayAqL1xuICAtLWNvbG9yLXN5bnRheC1jb21tZW50OiAjYTBhMGEwO1xuICAtLWNvbG9yLXN5bnRheC1jb25zdGFudDogI2VkZWRlZDtcbiAgLS1jb2xvci1zeW50YXgtZnVuY3Rpb246ICM1MmE5ZmY7XG4gIC0tY29sb3Itc3ludGF4LWtleXdvcmQ6ICNmNzZlOTk7XG4gIC0tY29sb3Itc3ludGF4LWxpbms6ICMwYWM1YjI7XG4gIC0tY29sb3Itc3ludGF4LXBhcmFtZXRlcjogI2YxYTEwZDtcbiAgLS1jb2xvci1zeW50YXgtcHVuY3R1YXRpb246ICNlZGVkZWQ7XG4gIC0tY29sb3Itc3ludGF4LXN0cmluZzogIzBhYzViMjtcbiAgLS1jb2xvci1zeW50YXgtc3RyaW5nLWV4cHJlc3Npb246ICMwYWM1YjI7XG5cbiAgLyogR3JheSBTY2FsZSBEYXJrICovXG4gIC0tY29sb3ItZ3JheS0xMDA6ICMxYTFhMWE7XG4gIC0tY29sb3ItZ3JheS0yMDA6ICMxZjFmMWY7XG4gIC0tY29sb3ItZ3JheS0zMDA6ICMyOTI5Mjk7XG4gIC0tY29sb3ItZ3JheS00MDA6ICMyZTJlMmU7XG4gIC0tY29sb3ItZ3JheS01MDA6ICM0NTQ1NDU7XG4gIC0tY29sb3ItZ3JheS02MDA6ICM4Nzg3ODc7XG4gIC0tY29sb3ItZ3JheS03MDA6ICM4ZjhmOGY7XG4gIC0tY29sb3ItZ3JheS04MDA6ICM3ZDdkN2Q7XG4gIC0tY29sb3ItZ3JheS05MDA6ICNhMGEwYTA7XG4gIC0tY29sb3ItZ3JheS0xMDAwOiAjZWRlZGVkO1xuXG4gIC8qIEdyYXkgQWxwaGEgU2NhbGUgRGFyayAqL1xuICAtLWNvbG9yLWdyYXktYWxwaGEtMTAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDY2KTtcbiAgLS1jb2xvci1ncmF5LWFscGhhLTIwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4Nyk7XG4gIC0tY29sb3ItZ3JheS1hbHBoYS0zMDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMjUpO1xuICAtLWNvbG9yLWdyYXktYWxwaGEtNDAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQ1KTtcbiAgLS1jb2xvci1ncmF5LWFscGhhLTUwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzOSk7XG4gIC0tY29sb3ItZ3JheS1hbHBoYS02MDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41MDYpO1xuICAtLWNvbG9yLWdyYXktYWxwaGEtNzAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpO1xuICAtLWNvbG9yLWdyYXktYWxwaGEtODAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDcpO1xuICAtLWNvbG9yLWdyYXktYWxwaGEtOTAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjEpO1xuICAtLWNvbG9yLWdyYXktYWxwaGEtMTAwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyMyk7XG5cbiAgLyogQmx1ZSBTY2FsZSBEYXJrICovXG4gIC0tY29sb3ItYmx1ZS0xMDA6ICMwZjFiMmQ7XG4gIC0tY29sb3ItYmx1ZS0yMDA6ICMxMDI0M2U7XG4gIC0tY29sb3ItYmx1ZS0zMDA6ICMwZjMwNTg7XG4gIC0tY29sb3ItYmx1ZS00MDA6ICMwZDM4Njg7XG4gIC0tY29sb3ItYmx1ZS01MDA6ICMwYTQ0ODE7XG4gIC0tY29sb3ItYmx1ZS02MDA6ICMwMDkxZmY7XG4gIC0tY29sb3ItYmx1ZS03MDA6ICMwMDcwZjM7XG4gIC0tY29sb3ItYmx1ZS04MDA6ICMwMDYwZDE7XG4gIC0tY29sb3ItYmx1ZS05MDA6ICM1MmE5ZmY7XG4gIC0tY29sb3ItYmx1ZS0xMDAwOiAjZWFmNmZmO1xuXG4gIC8qIFJlZCBTY2FsZSBEYXJrICovXG4gIC0tY29sb3ItcmVkLTEwMDogIzJhMTMxNDtcbiAgLS1jb2xvci1yZWQtMjAwOiAjM2QxNzE5O1xuICAtLWNvbG9yLXJlZC0zMDA6ICM1NTFhMWU7XG4gIC0tY29sb3ItcmVkLTQwMDogIzY3MWUyMjtcbiAgLS1jb2xvci1yZWQtNTAwOiAjODIyMDI1O1xuICAtLWNvbG9yLXJlZC02MDA6ICNlNTQ4NGQ7XG4gIC0tY29sb3ItcmVkLTcwMDogI2U1NDg0ZDtcbiAgLS1jb2xvci1yZWQtODAwOiAjZGEzMDM2O1xuICAtLWNvbG9yLXJlZC05MDA6ICNmZjYzNjk7XG4gIC0tY29sb3ItcmVkLTEwMDA6ICNmZmVjZWU7XG5cbiAgLyogQW1iZXIgU2NhbGUgRGFyayAqL1xuICAtLWNvbG9yLWFtYmVyLTEwMDogIzI3MTcwMDtcbiAgLS1jb2xvci1hbWJlci0yMDA6ICMzNDFjMDA7XG4gIC0tY29sb3ItYW1iZXItMzAwOiAjNGEyOTAwO1xuICAtLWNvbG9yLWFtYmVyLTQwMDogIzU3MzMwMDtcbiAgLS1jb2xvci1hbWJlci01MDA6ICM2OTNmMDU7XG4gIC0tY29sb3ItYW1iZXItNjAwOiAjZTc5YzEzO1xuICAtLWNvbG9yLWFtYmVyLTcwMDogI2ZmYjIyNDtcbiAgLS1jb2xvci1hbWJlci04MDA6ICNmZjk5MGE7XG4gIC0tY29sb3ItYW1iZXItOTAwOiAjZjFhMTBkO1xuICAtLWNvbG9yLWFtYmVyLTEwMDA6ICNmZWYzZGQ7XG5cbiAgLyogR3JlZW4gU2NhbGUgRGFyayAqL1xuICAtLWNvbG9yLWdyZWVuLTEwMDogIzBiMjIxMTtcbiAgLS1jb2xvci1ncmVlbi0yMDA6ICMwZjJjMTc7XG4gIC0tY29sb3ItZ3JlZW4tMzAwOiAjMTEzNTFiO1xuICAtLWNvbG9yLWdyZWVuLTQwMDogIzBjNDYxYjtcbiAgLS1jb2xvci1ncmVlbi01MDA6ICMxMjY0Mjc7XG4gIC0tY29sb3ItZ3JlZW4tNjAwOiAjMWE5MzM4O1xuICAtLWNvbG9yLWdyZWVuLTcwMDogIzQ2YTc1ODtcbiAgLS1jb2xvci1ncmVlbi04MDA6ICMzODhlNGE7XG4gIC0tY29sb3ItZ3JlZW4tOTAwOiAjNjNjMTc0O1xuICAtLWNvbG9yLWdyZWVuLTEwMDA6ICNlNWZiZWI7XG5cbiAgLyogVHVyYm9wYWNrIERhcmsgLSBUZW1wb3JhcnkgKi9cbiAgLS1jb2xvci10dXJib3BhY2stdGV4dC1yZWQ6ICNmZjZkOTI7XG4gIC0tY29sb3ItdHVyYm9wYWNrLXRleHQtYmx1ZTogIzQ1YjJmZjtcbiAgLS1jb2xvci10dXJib3BhY2stYm9yZGVyLXJlZDogIzZlMjkzYjtcbiAgLS1jb2xvci10dXJib3BhY2stYm9yZGVyLWJsdWU6ICMyODRmODA7XG4gIC0tY29sb3ItdHVyYm9wYWNrLWJhY2tncm91bmQtcmVkOiAjMjUwZDEyO1xuICAtLWNvbG9yLXR1cmJvcGFjay1iYWNrZ3JvdW5kLWJsdWU6ICMwYTE3MjM7XG59XG5cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgOmhvc3QoOm5vdCgubGlnaHQpKSB7XG4gICAgLS1jb2xvci1mb250OiB3aGl0ZTtcbiAgICAtLWNvbG9yLWJhY2tkcm9wOiByZ2JhKDAsIDAsIDAsIDAuOCk7XG4gICAgLS1jb2xvci1ib3JkZXItc2hhZG93OiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQ1KTtcblxuICAgIC0tY29sb3ItdGl0bGUtY29sb3I6ICNmYWZhZmE7XG4gICAgLS1jb2xvci1zdGFjay1ub3RlczogI2E5YTlhOTtcblxuICAgIC8qIEJhY2tncm91bmQgRGFyayAqL1xuICAgIC0tY29sb3ItYmFja2dyb3VuZC0xMDA6ICMwYTBhMGE7XG4gICAgLS1jb2xvci1iYWNrZ3JvdW5kLTIwMDogIzAwMDAwMDtcblxuICAgIC8qIFN5bnRheCBEYXJrICovXG4gICAgLS1jb2xvci1zeW50YXgtY29tbWVudDogI2EwYTBhMDtcbiAgICAtLWNvbG9yLXN5bnRheC1jb25zdGFudDogI2VkZWRlZDtcbiAgICAtLWNvbG9yLXN5bnRheC1mdW5jdGlvbjogIzUyYTlmZjtcbiAgICAtLWNvbG9yLXN5bnRheC1rZXl3b3JkOiAjZjc2ZTk5O1xuICAgIC0tY29sb3Itc3ludGF4LWxpbms6ICMwYWM1YjI7XG4gICAgLS1jb2xvci1zeW50YXgtcGFyYW1ldGVyOiAjZjFhMTBkO1xuICAgIC0tY29sb3Itc3ludGF4LXB1bmN0dWF0aW9uOiAjZWRlZGVkO1xuICAgIC0tY29sb3Itc3ludGF4LXN0cmluZzogIzBhYzViMjtcbiAgICAtLWNvbG9yLXN5bnRheC1zdHJpbmctZXhwcmVzc2lvbjogIzBhYzViMjtcblxuICAgIC8qIEdyYXkgU2NhbGUgRGFyayAqL1xuICAgIC0tY29sb3ItZ3JheS0xMDA6ICMxYTFhMWE7XG4gICAgLS1jb2xvci1ncmF5LTIwMDogIzFmMWYxZjtcbiAgICAtLWNvbG9yLWdyYXktMzAwOiAjMjkyOTI5O1xuICAgIC0tY29sb3ItZ3JheS00MDA6ICMyZTJlMmU7XG4gICAgLS1jb2xvci1ncmF5LTUwMDogIzQ1NDU0NTtcbiAgICAtLWNvbG9yLWdyYXktNjAwOiAjODc4Nzg3O1xuICAgIC0tY29sb3ItZ3JheS03MDA6ICM4ZjhmOGY7XG4gICAgLS1jb2xvci1ncmF5LTgwMDogIzdkN2Q3ZDtcbiAgICAtLWNvbG9yLWdyYXktOTAwOiAjYTBhMGEwO1xuICAgIC0tY29sb3ItZ3JheS0xMDAwOiAjZWRlZGVkO1xuXG4gICAgLyogR3JheSBBbHBoYSBTY2FsZSBEYXJrICovXG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTEwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2Nik7XG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTIwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4Nyk7XG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTMwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyNSk7XG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTQwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0NSk7XG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTUwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzOSk7XG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTYwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUwNik7XG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTcwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KTtcbiAgICAtLWNvbG9yLWdyYXktYWxwaGEtODAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDcpO1xuICAgIC0tY29sb3ItZ3JheS1hbHBoYS05MDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42MSk7XG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTEwMDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45MjMpO1xuXG4gICAgLyogQmx1ZSBTY2FsZSBEYXJrICovXG4gICAgLS1jb2xvci1ibHVlLTEwMDogIzBmMWIyZDtcbiAgICAtLWNvbG9yLWJsdWUtMjAwOiAjMTAyNDNlO1xuICAgIC0tY29sb3ItYmx1ZS0zMDA6ICMwZjMwNTg7XG4gICAgLS1jb2xvci1ibHVlLTQwMDogIzBkMzg2ODtcbiAgICAtLWNvbG9yLWJsdWUtNTAwOiAjMGE0NDgxO1xuICAgIC0tY29sb3ItYmx1ZS02MDA6ICMwMDkxZmY7XG4gICAgLS1jb2xvci1ibHVlLTcwMDogIzAwNzBmMztcbiAgICAtLWNvbG9yLWJsdWUtODAwOiAjMDA2MGQxO1xuICAgIC0tY29sb3ItYmx1ZS05MDA6ICM1MmE5ZmY7XG4gICAgLS1jb2xvci1ibHVlLTEwMDA6ICNlYWY2ZmY7XG5cbiAgICAvKiBSZWQgU2NhbGUgRGFyayAqL1xuICAgIC0tY29sb3ItcmVkLTEwMDogIzJhMTMxNDtcbiAgICAtLWNvbG9yLXJlZC0yMDA6ICMzZDE3MTk7XG4gICAgLS1jb2xvci1yZWQtMzAwOiAjNTUxYTFlO1xuICAgIC0tY29sb3ItcmVkLTQwMDogIzY3MWUyMjtcbiAgICAtLWNvbG9yLXJlZC01MDA6ICM4MjIwMjU7XG4gICAgLS1jb2xvci1yZWQtNjAwOiAjZTU0ODRkO1xuICAgIC0tY29sb3ItcmVkLTcwMDogI2U1NDg0ZDtcbiAgICAtLWNvbG9yLXJlZC04MDA6ICNkYTMwMzY7XG4gICAgLS1jb2xvci1yZWQtOTAwOiAjZmY2MzY5O1xuICAgIC0tY29sb3ItcmVkLTEwMDA6ICNmZmVjZWU7XG5cbiAgICAvKiBBbWJlciBTY2FsZSBEYXJrICovXG4gICAgLS1jb2xvci1hbWJlci0xMDA6ICMyNzE3MDA7XG4gICAgLS1jb2xvci1hbWJlci0yMDA6ICMzNDFjMDA7XG4gICAgLS1jb2xvci1hbWJlci0zMDA6ICM0YTI5MDA7XG4gICAgLS1jb2xvci1hbWJlci00MDA6ICM1NzMzMDA7XG4gICAgLS1jb2xvci1hbWJlci01MDA6ICM2OTNmMDU7XG4gICAgLS1jb2xvci1hbWJlci02MDA6ICNlNzljMTM7XG4gICAgLS1jb2xvci1hbWJlci03MDA6ICNmZmIyMjQ7XG4gICAgLS1jb2xvci1hbWJlci04MDA6ICNmZjk5MGE7XG4gICAgLS1jb2xvci1hbWJlci05MDA6ICNmMWExMGQ7XG4gICAgLS1jb2xvci1hbWJlci0xMDAwOiAjZmVmM2RkO1xuXG4gICAgLyogR3JlZW4gU2NhbGUgRGFyayAqL1xuICAgIC0tY29sb3ItZ3JlZW4tMTAwOiAjMGIyMjExO1xuICAgIC0tY29sb3ItZ3JlZW4tMjAwOiAjMGYyYzE3O1xuICAgIC0tY29sb3ItZ3JlZW4tMzAwOiAjMTEzNTFiO1xuICAgIC0tY29sb3ItZ3JlZW4tNDAwOiAjMGM0NjFiO1xuICAgIC0tY29sb3ItZ3JlZW4tNTAwOiAjMTI2NDI3O1xuICAgIC0tY29sb3ItZ3JlZW4tNjAwOiAjMWE5MzM4O1xuICAgIC0tY29sb3ItZ3JlZW4tNzAwOiAjNDZhNzU4O1xuICAgIC0tY29sb3ItZ3JlZW4tODAwOiAjMzg4ZTRhO1xuICAgIC0tY29sb3ItZ3JlZW4tOTAwOiAjNjNjMTc0O1xuICAgIC0tY29sb3ItZ3JlZW4tMTAwMDogI2U1ZmJlYjtcblxuICAgIC8qIFR1cmJvcGFjayBEYXJrIC0gVGVtcG9yYXJ5ICovXG4gICAgLS1jb2xvci10dXJib3BhY2stdGV4dC1yZWQ6ICNmZjZkOTI7XG4gICAgLS1jb2xvci10dXJib3BhY2stdGV4dC1ibHVlOiAjNDViMmZmO1xuICAgIC0tY29sb3ItdHVyYm9wYWNrLWJvcmRlci1yZWQ6ICM2ZTI5M2I7XG4gICAgLS1jb2xvci10dXJib3BhY2stYm9yZGVyLWJsdWU6ICMyODRmODA7XG4gICAgLS1jb2xvci10dXJib3BhY2stYmFja2dyb3VuZC1yZWQ6ICMyNTBkMTI7XG4gICAgLS1jb2xvci10dXJib3BhY2stYmFja2dyb3VuZC1ibHVlOiAjMGExNzIzO1xuICB9XG59XG5gLFwiXCIse3ZlcnNpb246Myxzb3VyY2VzOltcIndlYnBhY2s6Ly8uL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3N0eWxlcy9kYXJrLXRoZW1lLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRSxtQkFBbUI7RUFDbkIsb0NBQW9DO0VBQ3BDLGlEQUFpRDs7RUFFakQsNEJBQTRCO0VBQzVCLDRCQUE0Qjs7RUFFNUIsb0JBQW9CO0VBQ3BCLCtCQUErQjtFQUMvQiwrQkFBK0I7O0VBRS9CLGdCQUFnQjtFQUNoQiwrQkFBK0I7RUFDL0IsZ0NBQWdDO0VBQ2hD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QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLHlCQUF5Qjs7SUFFekIscUJBQXFCO0lBQ3JCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLDJCQUEyQjs7SUFFM0IscUJBQXFCO0lBQ3JCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLDJCQUEyQjs7SUFFM0IsK0JBQStCO0lBQy9CLG1DQUFtQztJQUNuQyxvQ0FBb0M7SUFDcEMscUNBQXFDO0lBQ3JDLHNDQUFzQztJQUN0Qyx5Q0FBeUM7SUFDekMsMENBQTBDO0VBQzVDO0FBQ0ZcIixzb3VyY2VzQ29udGVudDpbXCI6aG9zdCguZGFyaykge1xcbiAgLS1jb2xvci1mb250OiB3aGl0ZTtcXG4gIC0tY29sb3ItYmFja2Ryb3A6IHJnYmEoMCwgMCwgMCwgMC44KTtcXG4gIC0tY29sb3ItYm9yZGVyLXNoYWRvdzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0NSk7XFxuXFxuICAtLWNvbG9yLXRpdGxlLWNvbG9yOiAjZmFmYWZhO1xcbiAgLS1jb2xvci1zdGFjay1ub3RlczogI2E5YTlhOTtcXG5cXG4gIC8qIEJhY2tncm91bmQgRGFyayAqL1xcbiAgLS1jb2xvci1iYWNrZ3JvdW5kLTEwMDogIzBhMGEwYTtcXG4gIC0tY29sb3ItYmFja2dyb3VuZC0yMDA6ICMwMDAwMDA7XFxuXFxuICAvKiBTeW50YXggRGFyayAqL1xcbiAgLS1jb2xvci1zeW50YXgtY29tbWVudDogI2EwYTBhMDtcXG4gIC0tY29sb3Itc3ludGF4LWNvbnN0YW50OiAjZWRlZGVkO1xcbiAgLS1jb2xvci1zeW50YXgtZnVuY3Rpb246ICM1MmE5ZmY7XFxuICAtLWNvbG9yLXN5bnRheC1rZXl3b3JkOiAjZjc2ZTk5O1xcbiAgLS1jb2xvci1zeW50YXgtbGluazogIzBhYzViMjtcXG4gIC0tY29sb3Itc3ludGF4LXBhcmFtZXRlcjogI2YxYTEwZDtcXG4gIC0tY29sb3Itc3ludGF4LXB1bmN0dWF0aW9uOiAjZWRlZGVkO1xcbiAgLS1jb2xvci1zeW50YXgtc3RyaW5nOiAjMGFjNWIyO1xcbiAgLS1jb2xvci1zeW50YXgtc3RyaW5nLWV4cHJlc3Npb246ICMwYWM1YjI7XFxuXFxuICAvKiBHcmF5IFNjYWxlIERhcmsgKi9cXG4gIC0tY29sb3ItZ3JheS0xMDA6ICMxYTFhMWE7XFxuICAtLWNvbG9yLWdyYXktMjAwOiAjMWYxZjFmO1xcbiAgLS1jb2xvci1ncmF5LTMwMDogIzI5MjkyOTtcXG4gIC0tY29sb3ItZ3JheS00MDA6ICMyZTJlMmU7XFxuICAtLWNvbG9yLWdyYXktNTAwOiAjNDU0NTQ1O1xcbiAgLS1jb2xvci1ncmF5LTYwMDogIzg3ODc4NztcXG4gIC0tY29sb3ItZ3JheS03MDA6ICM4ZjhmOGY7XFxuICAtLWNvbG9yLWdyYXktODAwOiAjN2Q3ZDdkO1xcbiAgLS1jb2xvci1ncmF5LTkwMDogI2EwYTBhMDtcXG4gIC0tY29sb3ItZ3JheS0xMDAwOiAjZWRlZGVkO1xcblxcbiAgLyogR3JheSBBbHBoYSBTY2FsZSBEYXJrICovXFxuICAtLWNvbG9yLWdyYXktYWxwaGEtMTAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDY2KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS0yMDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wODcpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTMwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyNSk7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtNDAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQ1KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS01MDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMzkpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTYwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUwNik7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtNzAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTgwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ3KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS05MDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42MSk7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtMTAwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyMyk7XFxuXFxuICAvKiBCbHVlIFNjYWxlIERhcmsgKi9cXG4gIC0tY29sb3ItYmx1ZS0xMDA6ICMwZjFiMmQ7XFxuICAtLWNvbG9yLWJsdWUtMjAwOiAjMTAyNDNlO1xcbiAgLS1jb2xvci1ibHVlLTMwMDogIzBmMzA1ODtcXG4gIC0tY29sb3ItYmx1ZS00MDA6ICMwZDM4Njg7XFxuICAtLWNvbG9yLWJsdWUtNTAwOiAjMGE0NDgxO1xcbiAgLS1jb2xvci1ibHVlLTYwMDogIzAwOTFmZjtcXG4gIC0tY29sb3ItYmx1ZS03MDA6ICMwMDcwZjM7XFxuICAtLWNvbG9yLWJsdWUtODAwOiAjMDA2MGQxO1xcbiAgLS1jb2xvci1ibHVlLTkwMDogIzUyYTlmZjtcXG4gIC0tY29sb3ItYmx1ZS0xMDAwOiAjZWFmNmZmO1xcblxcbiAgLyogUmVkIFNjYWxlIERhcmsgKi9cXG4gIC0tY29sb3ItcmVkLTEwMDogIzJhMTMxNDtcXG4gIC0tY29sb3ItcmVkLTIwMDogIzNkMTcxOTtcXG4gIC0tY29sb3ItcmVkLTMwMDogIzU1MWExZTtcXG4gIC0tY29sb3ItcmVkLTQwMDogIzY3MWUyMjtcXG4gIC0tY29sb3ItcmVkLTUwMDogIzgyMjAyNTtcXG4gIC0tY29sb3ItcmVkLTYwMDogI2U1NDg0ZDtcXG4gIC0tY29sb3ItcmVkLTcwMDogI2U1NDg0ZDtcXG4gIC0tY29sb3ItcmVkLTgwMDogI2RhMzAzNjtcXG4gIC0tY29sb3ItcmVkLTkwMDogI2ZmNjM2OTtcXG4gIC0tY29sb3ItcmVkLTEwMDA6ICNmZmVjZWU7XFxuXFxuICAvKiBBbWJlciBTY2FsZSBEYXJrICovXFxuICAtLWNvbG9yLWFtYmVyLTEwMDogIzI3MTcwMDtcXG4gIC0tY29sb3ItYW1iZXItMjAwOiAjMzQxYzAwO1xcbiAgLS1jb2xvci1hbWJlci0zMDA6ICM0YTI5MDA7XFxuICAtLWNvbG9yLWFtYmVyLTQwMDogIzU3MzMwMDtcXG4gIC0tY29sb3ItYW1iZXItNTAwOiAjNjkzZjA1O1xcbiAgLS1jb2xvci1hbWJlci02MDA6ICNlNzljMTM7XFxuICAtLWNvbG9yLWFtYmVyLTcwMDogI2ZmYjIyNDtcXG4gIC0tY29sb3ItYW1iZXItODAwOiAjZmY5OTBhO1xcbiAgLS1jb2xvci1hbWJlci05MDA6ICNmMWExMGQ7XFxuICAtLWNvbG9yLWFtYmVyLTEwMDA6ICNmZWYzZGQ7XFxuXFxuICAvKiBHcmVlbiBTY2FsZSBEYXJrICovXFxuICAtLWNvbG9yLWdyZWVuLTEwMDogIzBiMjIxMTtcXG4gIC0tY29sb3ItZ3JlZW4tMjAwOiAjMGYyYzE3O1xcbiAgLS1jb2xvci1ncmVlbi0zMDA6ICMxMTM1MWI7XFxuICAtLWNvbG9yLWdyZWVuLTQwMDogIzBjNDYxYjtcXG4gIC0tY29sb3ItZ3JlZW4tNTAwOiAjMTI2NDI3O1xcbiAgLS1jb2xvci1ncmVlbi02MDA6ICMxYTkzMzg7XFxuICAtLWNvbG9yLWdyZWVuLTcwMDogIzQ2YTc1ODtcXG4gIC0tY29sb3ItZ3JlZW4tODAwOiAjMzg4ZTRhO1xcbiAgLS1jb2xvci1ncmVlbi05MDA6ICM2M2MxNzQ7XFxuICAtLWNvbG9yLWdyZWVuLTEwMDA6ICNlNWZiZWI7XFxuXFxuICAvKiBUdXJib3BhY2sgRGFyayAtIFRlbXBvcmFyeSAqL1xcbiAgLS1jb2xvci10dXJib3BhY2stdGV4dC1yZWQ6ICNmZjZkOTI7XFxuICAtLWNvbG9yLXR1cmJvcGFjay10ZXh0LWJsdWU6ICM0NWIyZmY7XFxuICAtLWNvbG9yLXR1cmJvcGFjay1ib3JkZXItcmVkOiAjNmUyOTNiO1xcbiAgLS1jb2xvci10dXJib3BhY2stYm9yZGVyLWJsdWU6ICMyODRmODA7XFxuICAtLWNvbG9yLXR1cmJvcGFjay1iYWNrZ3JvdW5kLXJlZDogIzI1MGQxMjtcXG4gIC0tY29sb3ItdHVyYm9wYWNrLWJhY2tncm91bmQtYmx1ZTogIzBhMTcyMztcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xcbiAgOmhvc3QoOm5vdCgubGlnaHQpKSB7XFxuICAgIC0tY29sb3ItZm9udDogd2hpdGU7XFxuICAgIC0tY29sb3ItYmFja2Ryb3A6IHJnYmEoMCwgMCwgMCwgMC44KTtcXG4gICAgLS1jb2xvci1ib3JkZXItc2hhZG93OiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQ1KTtcXG5cXG4gICAgLS1jb2xvci10aXRsZS1jb2xvcjogI2ZhZmFmYTtcXG4gICAgLS1jb2xvci1zdGFjay1ub3RlczogI2E5YTlhOTtcXG5cXG4gICAgLyogQmFja2dyb3VuZCBEYXJrICovXFxuICAgIC0tY29sb3ItYmFja2dyb3VuZC0xMDA6ICMwYTBhMGE7XFxuICAgIC0tY29sb3ItYmFja2dyb3VuZC0yMDA6ICMwMDAwMDA7XFxuXFxuICAgIC8qIFN5bnRheCBEYXJrICovXFxuICAgIC0tY29sb3Itc3ludGF4LWNvbW1lbnQ6ICNhMGEwYTA7XFxuICAgIC0tY29sb3Itc3ludGF4LWNvbnN0YW50OiAjZWRlZGVkO1xcbiAgICAtLWNvbG9yLXN5bnRheC1mdW5jdGlvbjogIzUyYTlmZjtcXG4gICAgLS1jb2xvci1zeW50YXgta2V5d29yZDogI2Y3NmU5OTtcXG4gICAgLS1jb2xvci1zeW50YXgtbGluazogIzBhYzViMjtcXG4gICAgLS1jb2xvci1zeW50YXgtcGFyYW1ldGVyOiAjZjFhMTBkO1xcbiAgICAtLWNvbG9yLXN5bnRheC1wdW5jdHVhdGlvbjogI2VkZWRlZDtcXG4gICAgLS1jb2xvci1zeW50YXgtc3RyaW5nOiAjMGFjNWIyO1xcbiAgICAtLWNvbG9yLXN5bnRheC1zdHJpbmctZXhwcmVzc2lvbjogIzBhYzViMjtcXG5cXG4gICAgLyogR3JheSBTY2FsZSBEYXJrICovXFxuICAgIC0tY29sb3ItZ3JheS0xMDA6ICMxYTFhMWE7XFxuICAgIC0tY29sb3ItZ3JheS0yMDA6ICMxZjFmMWY7XFxuICAgIC0tY29sb3ItZ3JheS0zMDA6ICMyOTI5Mjk7XFxuICAgIC0tY29sb3ItZ3JheS00MDA6ICMyZTJlMmU7XFxuICAgIC0tY29sb3ItZ3JheS01MDA6ICM0NTQ1NDU7XFxuICAgIC0tY29sb3ItZ3JheS02MDA6ICM4Nzg3ODc7XFxuICAgIC0tY29sb3ItZ3JheS03MDA6ICM4ZjhmOGY7XFxuICAgIC0tY29sb3ItZ3JheS04MDA6ICM3ZDdkN2Q7XFxuICAgIC0tY29sb3ItZ3JheS05MDA6ICNhMGEwYTA7XFxuICAgIC0tY29sb3ItZ3JheS0xMDAwOiAjZWRlZGVkO1xcblxcbiAgICAvKiBHcmF5IEFscGhhIFNjYWxlIERhcmsgKi9cXG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTEwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2Nik7XFxuICAgIC0tY29sb3ItZ3JheS1hbHBoYS0yMDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wODcpO1xcbiAgICAtLWNvbG9yLWdyYXktYWxwaGEtMzAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTI1KTtcXG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTQwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0NSk7XFxuICAgIC0tY29sb3ItZ3JheS1hbHBoYS01MDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMzkpO1xcbiAgICAtLWNvbG9yLWdyYXktYWxwaGEtNjAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTA2KTtcXG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTcwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KTtcXG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTgwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ3KTtcXG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTkwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYxKTtcXG4gICAgLS1jb2xvci1ncmF5LWFscGhhLTEwMDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45MjMpO1xcblxcbiAgICAvKiBCbHVlIFNjYWxlIERhcmsgKi9cXG4gICAgLS1jb2xvci1ibHVlLTEwMDogIzBmMWIyZDtcXG4gICAgLS1jb2xvci1ibHVlLTIwMDogIzEwMjQzZTtcXG4gICAgLS1jb2xvci1ibHVlLTMwMDogIzBmMzA1ODtcXG4gICAgLS1jb2xvci1ibHVlLTQwMDogIzBkMzg2ODtcXG4gICAgLS1jb2xvci1ibHVlLTUwMDogIzBhNDQ4MTtcXG4gICAgLS1jb2xvci1ibHVlLTYwMDogIzAwOTFmZjtcXG4gICAgLS1jb2xvci1ibHVlLTcwMDogIzAwNzBmMztcXG4gICAgLS1jb2xvci1ibHVlLTgwMDogIzAwNjBkMTtcXG4gICAgLS1jb2xvci1ibHVlLTkwMDogIzUyYTlmZjtcXG4gICAgLS1jb2xvci1ibHVlLTEwMDA6ICNlYWY2ZmY7XFxuXFxuICAgIC8qIFJlZCBTY2FsZSBEYXJrICovXFxuICAgIC0tY29sb3ItcmVkLTEwMDogIzJhMTMxNDtcXG4gICAgLS1jb2xvci1yZWQtMjAwOiAjM2QxNzE5O1xcbiAgICAtLWNvbG9yLXJlZC0zMDA6ICM1NTFhMWU7XFxuICAgIC0tY29sb3ItcmVkLTQwMDogIzY3MWUyMjtcXG4gICAgLS1jb2xvci1yZWQtNTAwOiAjODIyMDI1O1xcbiAgICAtLWNvbG9yLXJlZC02MDA6ICNlNTQ4NGQ7XFxuICAgIC0tY29sb3ItcmVkLTcwMDogI2U1NDg0ZDtcXG4gICAgLS1jb2xvci1yZWQtODAwOiAjZGEzMDM2O1xcbiAgICAtLWNvbG9yLXJlZC05MDA6ICNmZjYzNjk7XFxuICAgIC0tY29sb3ItcmVkLTEwMDA6ICNmZmVjZWU7XFxuXFxuICAgIC8qIEFtYmVyIFNjYWxlIERhcmsgKi9cXG4gICAgLS1jb2xvci1hbWJlci0xMDA6ICMyNzE3MDA7XFxuICAgIC0tY29sb3ItYW1iZXItMjAwOiAjMzQxYzAwO1xcbiAgICAtLWNvbG9yLWFtYmVyLTMwMDogIzRhMjkwMDtcXG4gICAgLS1jb2xvci1hbWJlci00MDA6ICM1NzMzMDA7XFxuICAgIC0tY29sb3ItYW1iZXItNTAwOiAjNjkzZjA1O1xcbiAgICAtLWNvbG9yLWFtYmVyLTYwMDogI2U3OWMxMztcXG4gICAgLS1jb2xvci1hbWJlci03MDA6ICNmZmIyMjQ7XFxuICAgIC0tY29sb3ItYW1iZXItODAwOiAjZmY5OTBhO1xcbiAgICAtLWNvbG9yLWFtYmVyLTkwMDogI2YxYTEwZDtcXG4gICAgLS1jb2xvci1hbWJlci0xMDAwOiAjZmVmM2RkO1xcblxcbiAgICAvKiBHcmVlbiBTY2FsZSBEYXJrICovXFxuICAgIC0tY29sb3ItZ3JlZW4tMTAwOiAjMGIyMjExO1xcbiAgICAtLWNvbG9yLWdyZWVuLTIwMDogIzBmMmMxNztcXG4gICAgLS1jb2xvci1ncmVlbi0zMDA6ICMxMTM1MWI7XFxuICAgIC0tY29sb3ItZ3JlZW4tNDAwOiAjMGM0NjFiO1xcbiAgICAtLWNvbG9yLWdyZWVuLTUwMDogIzEyNjQyNztcXG4gICAgLS1jb2xvci1ncmVlbi02MDA6ICMxYTkzMzg7XFxuICAgIC0tY29sb3ItZ3JlZW4tNzAwOiAjNDZhNzU4O1xcbiAgICAtLWNvbG9yLWdyZWVuLTgwMDogIzM4OGU0YTtcXG4gICAgLS1jb2xvci1ncmVlbi05MDA6ICM2M2MxNzQ7XFxuICAgIC0tY29sb3ItZ3JlZW4tMTAwMDogI2U1ZmJlYjtcXG5cXG4gICAgLyogVHVyYm9wYWNrIERhcmsgLSBUZW1wb3JhcnkgKi9cXG4gICAgLS1jb2xvci10dXJib3BhY2stdGV4dC1yZWQ6ICNmZjZkOTI7XFxuICAgIC0tY29sb3ItdHVyYm9wYWNrLXRleHQtYmx1ZTogIzQ1YjJmZjtcXG4gICAgLS1jb2xvci10dXJib3BhY2stYm9yZGVyLXJlZDogIzZlMjkzYjtcXG4gICAgLS1jb2xvci10dXJib3BhY2stYm9yZGVyLWJsdWU6ICMyODRmODA7XFxuICAgIC0tY29sb3ItdHVyYm9wYWNrLWJhY2tncm91bmQtcmVkOiAjMjUwZDEyO1xcbiAgICAtLWNvbG9yLXR1cmJvcGFjay1iYWNrZ3JvdW5kLWJsdWU6ICMwYTE3MjM7XFxuICB9XFxufVxcblwiXSxzb3VyY2VSb290OlwiXCJ9XSk7bGV0IGw9aX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvc3R5bGVzL2RlZmF1bHQtdGhlbWUuY3NzXCI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO24uZCh0LHtaOigpPT5sfSk7dmFyIHI9bihcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIiksbz1uLm4ociksYT1uKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpLGk9bi5uKGEpKCkobygpKTtpLnB1c2goW2UuaWQsYDpob3N0IHtcbiAgLyogXG4gICAqIEFsdGhvdWdoIHRoZSBzdHlsZSBhcHBsaWVkIHRvIHRoZSBzaGFkb3cgaG9zdCBpcyBpc29sYXRlZCxcbiAgICogdGhlIGVsZW1lbnQgdGhhdCBhdHRhY2hlZCB0aGUgc2hhZG93IGhvc3QgKGkuZS4gXCJuZXh0anMtcG9ydGFsXCIpXG4gICAqIGlzIHN0aWxsIGFmZmVjdGVkIGJ5IHRoZSBwYXJlbnQncyBzdHlsZSAoZS5nLiBcImJvZHlcIikuIFRoaXMgbWF5XG4gICAqIG9jY3VyIHN0eWxlIGNvbmZsaWN0cyBsaWtlIFwiZGlzcGxheTogZmxleFwiLCB3aXRoIG90aGVyIGNoaWxkcmVuXG4gICAqIGVsZW1lbnRzIHRoZXJlZm9yZSBnaXZlIHRoZSBzaGFkb3cgaG9zdCBhbiBhYnNvbHV0ZSBwb3NpdGlvbi5cbiAgICovXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAtLWNvbG9yLWZvbnQ6ICM3NTc1NzU7XG4gIC0tY29sb3ItYmFja2Ryb3A6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC44KTtcbiAgLS1jb2xvci1ib3JkZXItc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMTQ1KTtcblxuICAtLWNvbG9yLXRpdGxlLWNvbG9yOiAjMWYxZjFmO1xuICAtLWNvbG9yLXN0YWNrLW5vdGVzOiAjNzc3O1xuXG4gIC0tY29sb3ItYWNjZW50cy0xOiAjODA4MDgwO1xuICAtLWNvbG9yLWFjY2VudHMtMjogIzIyMjIyMjtcbiAgLS1jb2xvci1hY2NlbnRzLTM6ICM0MDQwNDA7XG5cbiAgLS1mb250LXN0YWNrLW1vbm9zcGFjZTogJ19fbmV4dGpzLUdlaXN0IE1vbm8nLCAnR2Vpc3QgTW9ubycsICdTRk1vbm8tUmVndWxhcicsXG4gICAgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlO1xuICAtLWZvbnQtc3RhY2stc2FuczogJ19fbmV4dGpzLUdlaXN0JywgJ0dlaXN0JywgLWFwcGxlLXN5c3RlbSwgJ1NvdXJjZSBTYW5zIFBybycsXG4gICAgc2Fucy1zZXJpZjtcblxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1zYW5zKTtcbiAgZm9udC12YXJpYW50LWxpZ2F0dXJlczogbm9uZTtcblxuICAvKiBUT0RPOiBSZW1vdmUgcmVwbGFjZWQgb25lcy4gKi9cbiAgLS1zaGFkb3ctc206IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIDAuMDUpO1xuICAtLXNoYWRvdzogMCAxcHggM3B4IDAgcmdiKDAgMCAwIC8gMC4xKSwgMCAxcHggMnB4IC0xcHggcmdiKDAgMCAwIC8gMC4xKTtcbiAgLS1zaGFkb3ctbWQ6IDAgNHB4IDZweCAtMXB4IHJnYigwIDAgMCAvIDAuMSksIDAgMnB4IDRweCAtMnB4IHJnYigwIDAgMCAvIDAuMSk7XG4gIC0tc2hhZG93LWxnOiAwIDEwcHggMTVweCAtM3B4IHJnYigwIDAgMCAvIDAuMSksXG4gICAgMCA0cHggNnB4IC00cHggcmdiKDAgMCAwIC8gMC4xKTtcbiAgLS1zaGFkb3cteGw6IDAgMjBweCAyNXB4IC01cHggcmdiKDAgMCAwIC8gMC4xKSxcbiAgICAwIDhweCAxMHB4IC02cHggcmdiKDAgMCAwIC8gMC4xKTtcbiAgLS1zaGFkb3ctMnhsOiAwIDI1cHggNTBweCAtMTJweCByZ2IoMCAwIDAgLyAwLjI1KTtcbiAgLS1zaGFkb3ctaW5uZXI6IGluc2V0IDAgMnB4IDRweCAwIHJnYigwIDAgMCAvIDAuMDUpO1xuICAtLXNoYWRvdy1ub25lOiAwIDAgIzAwMDA7XG5cbiAgLS1zaGFkb3ctc21hbGw6IDBweCAycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gIC0tc2hhZG93LW1lbnU6IDBweCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wMiksXG4gICAgMHB4IDRweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMDQpLCAwcHggMTZweCAyNHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjA2KTtcblxuICAtLWZvY3VzLWNvbG9yOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XG4gIC0tZm9jdXMtcmluZzogMnB4IHNvbGlkIHZhcigtLWZvY3VzLWNvbG9yKTtcblxuICAtLXRpbWluZy1zd2lmdDogY3ViaWMtYmV6aWVyKDAuMjMsIDAuODgsIDAuMjYsIDAuOTIpO1xuICAtLXRpbWluZy1vdmVybGF5OiBjdWJpYy1iZXppZXIoMC4xNzUsIDAuODg1LCAwLjMyLCAxLjEpO1xuICAvKiBwcmV0dGllci1pZ25vcmUgKi9cbiAgLS10aW1pbmctYm91bmNlOiBsaW5lYXIoMCAwJSwgMC4wMDU4NzEgMSUsIDAuMDIyMDU4IDIlLCAwLjA0NjYxMiAzJSwgMC4wNzc4MjMgNCUsIDAuMTE0MTk5IDUlLCAwLjE1NDQ0MSA2JSwgMC4xOTc0MzEgNy4wMDAwMDAwMDAwMDAwMDElLCAwLjI0MjIwOCA4JSwgMC4yODc5NTkgOSUsIDAuMzMzOTk1IDEwJSwgMC4zNzk3NDMgMTElLCAwLjQyNDczMiAxMiUsIDAuNDY4NTggMTMlLCAwLjUxMDk4MiAxNC4wMDAwMDAwMDAwMDAwMDIlLCAwLjU1MTcwMiAxNSUsIDAuNTkwNTY0IDE2JSwgMC42Mjc0NDUgMTclLCAwLjY2MjI2MSAxOCUsIDAuNjk0OTcxIDE5JSwgMC43MjU1NjEgMjAlLCAwLjc1NDA0NyAyMSUsIDAuNzgwNDYyIDIyJSwgMC44MDQ4NjEgMjMlLCAwLjgyNzMxIDI0JSwgMC44NDc4ODggMjUlLCAwLjg2NjY3OSAyNiUsIDAuODgzNzc1IDI3JSwgMC44OTkyNzIgMjguMDAwMDAwMDAwMDAwMDA0JSwgMC45MTMyNjcgMjguOTk5OTk5OTk5OTk5OTk2JSwgMC45MjU4NTYgMzAlLCAwLjkzNzEzNyAzMSUsIDAuOTQ3MjA1IDMyJSwgMC45NTYxNTMgMzMlLCAwLjk2NDA3IDM0JSwgMC45NzEwNDMgMzUlLCAwLjk3NzE1MyAzNiUsIDAuOTgyNDc5IDM3JSwgMC45ODcwOTQgMzglLCAwLjk5MTA2NiAzOSUsIDAuOTk0NDYyIDQwJSwgMC45OTczMzkgNDElLCAwLjk5OTc1NSA0MiUsIDEuMDAxNzYxIDQzJSwgMS4wMDM0MDQgNDQlLCAxLjAwNDcyNyA0NSUsIDEuMDA1NzcgNDYlLCAxLjAwNjU2OSA0NyUsIDEuMDA3MTU3IDQ4JSwgMS4wMDc1NjMgNDklLCAxLjAwNzgxMyA1MCUsIDEuMDA3OTMxIDUxJSwgMS4wMDc5MzkgNTIlLCAxLjAwNzg1NSA1MyUsIDEuMDA3Njk3IDU0JSwgMS4wMDc0NzcgNTUuMDAwMDAwMDAwMDAwMDElLCAxLjAwNzIxIDU2LjAwMDAwMDAwMDAwMDAxJSwgMS4wMDY5MDcgNTYuOTk5OTk5OTk5OTk5OTklLCAxLjAwNjU3NiA1Ny45OTk5OTk5OTk5OTk5OSUsIDEuMDA2MjI4IDU5JSwgMS4wMDU4NjggNjAlLCAxLjAwNTUwMyA2MSUsIDEuMDA1MTM3IDYyJSwgMS4wMDQ3NzYgNjMlLCAxLjAwNDQyMiA2NCUsIDEuMDA0MDc4IDY1JSwgMS4wMDM3NDYgNjYlLCAxLjAwMzQyOSA2NyUsIDEuMDAzMTI3IDY4JSwgMS4wMDI4NCA2OSUsIDEuMDAyNTcxIDcwJSwgMS4wMDIzMTggNzElLCAxLjAwMjA4MiA3MiUsIDEuMDAxODYzIDczJSwgMS4wMDE2NiA3NCUsIDEuMDAxNDczIDc1JSwgMS4wMDEzMDEgNzYlLCAxLjAwMTE0MyA3NyUsIDEuMDAxIDc4JSwgMS4wMDA4NjkgNzklLCAxLjAwMDc1MiA4MCUsIDEuMDAwNjQ1IDgxJSwgMS4wMDA1NSA4MiUsIDEuMDAwNDY0IDgzJSwgMS4wMDAzODggODQlLCAxLjAwMDMyMSA4NSUsIDEuMDAwMjYxIDg2JSwgMS4wMDAyMDkgODclLCAxLjAwMDE2MyA4OCUsIDEuMDAwMTIzIDg5JSwgMS4wMDAwODggOTAlKTtcblxuICAtLXJvdW5kZWQtbm9uZTogMHB4O1xuICAtLXJvdW5kZWQtc206IDJweDtcbiAgLS1yb3VuZGVkLW1kOiA0cHg7XG4gIC0tcm91bmRlZC1tZC0yOiA2cHg7XG4gIC0tcm91bmRlZC1sZzogOHB4O1xuICAtLXJvdW5kZWQteGw6IDEycHg7XG4gIC0tcm91bmRlZC0yeGw6IDE2cHg7XG4gIC0tcm91bmRlZC0zeGw6IDI0cHg7XG4gIC0tcm91bmRlZC00eGw6IDMycHg7XG4gIC0tcm91bmRlZC1mdWxsOiA5OTk5cHg7XG5cbiAgLyogXG4gICAgVGhpcyB2YWx1ZSBnZXRzIHNldCBmcm9tIHRoZSBEZXYgVG9vbHMgcHJlZmVyZW5jZXMsXG4gICAgYW5kIHdlIHVzZSB0aGUgZm9sbG93aW5nIC0tc2l6ZS0qIHZhcmlhYmxlcyB0byBcbiAgICBzY2FsZSB0aGUgcmVsZXZhbnQgZWxlbWVudHMuXG5cbiAgICBUaGUgcmVhc29uIHdoeSB3ZSBkb24ndCByZWx5IG9uIHJlbSB2YWx1ZXMgaXMgYmVjYXVzZVxuICAgIGlmIGFuIGFwcCBzZXRzIHRoZWlyIHJvb3QgZm9udCBzaXplIHRvIHNvbWV0aGluZyB0aW55LCBcbiAgICBpdCBmZWVscyB1bmV4cGVjdGVkIHRvIGhhdmUgdGhlIGFwcCByb290IHNpemUgbGVhayBcbiAgICBpbnRvIGEgTmV4dC5qcyBzdXJmYWNlLlxuXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2Rpc2N1c3Npb25zLzc2ODEyXG4gICovXG4gIC0tbmV4dGpzLWRldi10b29scy1zY2FsZTogMTtcbiAgLS1zaXplLTE6IGNhbGMoMXB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xuICAtLXNpemUtMjogY2FsYygycHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XG4gIC0tc2l6ZS0zOiBjYWxjKDNweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcbiAgLS1zaXplLTQ6IGNhbGMoNHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xuICAtLXNpemUtNTogY2FsYyg1cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XG4gIC0tc2l6ZS02OiBjYWxjKDZweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcbiAgLS1zaXplLTc6IGNhbGMoN3B4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xuICAtLXNpemUtODogY2FsYyg4cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XG4gIC0tc2l6ZS05OiBjYWxjKDlweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcbiAgLS1zaXplLTEwOiBjYWxjKDEwcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XG4gIC0tc2l6ZS0xMTogY2FsYygxMXB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xuICAtLXNpemUtMTI6IGNhbGMoMTJweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcbiAgLS1zaXplLTEzOiBjYWxjKDEzcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XG4gIC0tc2l6ZS0xNDogY2FsYygxNHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xuICAtLXNpemUtMTU6IGNhbGMoMTVweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcbiAgLS1zaXplLTE2OiBjYWxjKDE2cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XG4gIC0tc2l6ZS0xNzogY2FsYygxN3B4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xuICAtLXNpemUtMTg6IGNhbGMoMThweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcbiAgLS1zaXplLTIwOiBjYWxjKDIwcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XG4gIC0tc2l6ZS0yMjogY2FsYygyMnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xuICAtLXNpemUtMjQ6IGNhbGMoMjRweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcbiAgLS1zaXplLTI2OiBjYWxjKDI2cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XG4gIC0tc2l6ZS0yODogY2FsYygyOHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xuICAtLXNpemUtMzA6IGNhbGMoMzBweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcbiAgLS1zaXplLTMyOiBjYWxjKDMycHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XG4gIC0tc2l6ZS0zNDogY2FsYygzNHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xuICAtLXNpemUtMzY6IGNhbGMoMzZweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcbiAgLS1zaXplLTM4OiBjYWxjKDM4cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XG4gIC0tc2l6ZS00MDogY2FsYyg0MHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xuICAtLXNpemUtNDI6IGNhbGMoNDJweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcbiAgLS1zaXplLTQ0OiBjYWxjKDQ0cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XG4gIC0tc2l6ZS00NjogY2FsYyg0NnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xuICAtLXNpemUtNDg6IGNhbGMoNDhweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcblxuICBAbWVkaWEgcHJpbnQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBsaW5lLWhlaWdodDogMS41O1xufVxuXG5hIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWJsdWUtOTAwKTtcbiAgJjpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWJsdWUtOTAwKTtcbiAgfVxuICAmOmZvY3VzLXZpc2libGUge1xuICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xuICB9XG59XG5gLFwiXCIse3ZlcnNpb246Myxzb3VyY2VzOltcIndlYnBhY2s6Ly8uL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3N0eWxlcy9kZWZhdWx0LXRoZW1lLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRTs7Ozs7O0lBTUU7RUFDRixrQkFBa0I7O0VBRWxCLHFCQUFxQjtFQUNyQiwwQ0FBMEM7RUFDMUMsMkNBQTJDOztFQUUzQyw0QkFBNEI7RUFDNUIseUJBQXlCOztFQUV6QiwwQkFBMEI7RUFDMUIsMEJBQTBCO0VBQzFCLDBCQUEwQjs7RUFFMUI7MERBQ3dEO0VBQ3hEO2NBQ1k7O0VBRVosbUNBQW1DO0VBQ25DLDRCQUE0Qjs7RUFFNUIsZ0NBQWdDO0VBQ2hDLDBDQUEwQztFQUMxQyx1RUFBdUU7RUFDdkUsNkVBQTZFO0VBQzdFO21DQUNpQztFQUNqQztvQ0FDa0M7RUFDbEMsaURBQWlEO0VBQ2pELG1EQUFtRDtFQUNuRCx3QkFBd0I7O0VBRXhCLCtDQUErQztFQUMvQztnRkFDOEU7O0VBRTlFLG9DQUFvQztFQUNwQywwQ0FBMEM7O0VBRTFDLG9EQUFvRDtFQUNwRCx1REFBdUQ7RUFDdkQsb0JBQW9CO0VBQ3BCLGkzQ0FBaTNDOztFQUVqM0MsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQUNqQixpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQUNqQixrQkFBa0I7RUFDbEIsbUJBQW1CO0VBQ25CLG1CQUFtQjtFQUNuQixtQkFBbUI7RUFDbkIsc0JBQXNCOztFQUV0Qjs7Ozs7Ozs7Ozs7R0FXQztFQUNELDJCQUEyQjtFQUMzQixtREFBbUQ7RUFDbkQsbURBQW1EO0VBQ25ELG1EQUFtRDtFQUNuRCxtREFBbUQ7RUFDbkQsbURBQW1EO0VBQ25ELG1EQUFtRDtFQUNuRCxtREFBbUQ7RUFDbkQsbURBQW1EO0VBQ25ELG1EQUFtRDtFQUNuRCxxREFBcUQ7RUFDckQscURBQXFEO0VBQ3JELHFEQUFxRDtFQUNyRCxxREFBcUQ7RUFDckQscURBQXFEO0VBQ3JELHFEQUFxRDtFQUNyRCxxREFBcUQ7RUFDckQscURBQXFEO0VBQ3JELHFEQUFxRDtFQUNyRCxxREFBcUQ7RUFDckQscURBQXFEO0VBQ3JELHFEQUFxRDtFQUNyRCxxREFBcUQ7RUFDckQscURBQXFEO0VBQ3JELHFEQUFxRDtFQUNyRCxxREFBcUQ7RUFDckQscURBQXFEO0VBQ3JELHFEQUFxRDtFQUNyRCxxREFBcUQ7RUFDckQscURBQXFEO0VBQ3JELHFEQUFxRDtFQUNyRCxxREFBcUQ7RUFDckQscURBQXFEO0VBQ3JELHFEQUFxRDs7RUFFckQ7SUFDRSxhQUFhO0VBQ2Y7QUFDRjs7QUFFQTs7Ozs7O0VBTUUsa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSw0QkFBNEI7RUFDNUI7SUFDRSw0QkFBNEI7RUFDOUI7RUFDQTtJQUNFLDBCQUEwQjtFQUM1QjtBQUNGXCIsc291cmNlc0NvbnRlbnQ6W1wiOmhvc3Qge1xcbiAgLyogXFxuICAgKiBBbHRob3VnaCB0aGUgc3R5bGUgYXBwbGllZCB0byB0aGUgc2hhZG93IGhvc3QgaXMgaXNvbGF0ZWQsXFxuICAgKiB0aGUgZWxlbWVudCB0aGF0IGF0dGFjaGVkIHRoZSBzaGFkb3cgaG9zdCAoaS5lLiBcXFwibmV4dGpzLXBvcnRhbFxcXCIpXFxuICAgKiBpcyBzdGlsbCBhZmZlY3RlZCBieSB0aGUgcGFyZW50J3Mgc3R5bGUgKGUuZy4gXFxcImJvZHlcXFwiKS4gVGhpcyBtYXlcXG4gICAqIG9jY3VyIHN0eWxlIGNvbmZsaWN0cyBsaWtlIFxcXCJkaXNwbGF5OiBmbGV4XFxcIiwgd2l0aCBvdGhlciBjaGlsZHJlblxcbiAgICogZWxlbWVudHMgdGhlcmVmb3JlIGdpdmUgdGhlIHNoYWRvdyBob3N0IGFuIGFic29sdXRlIHBvc2l0aW9uLlxcbiAgICovXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFxuICAtLWNvbG9yLWZvbnQ6ICM3NTc1NzU7XFxuICAtLWNvbG9yLWJhY2tkcm9wOiByZ2JhKDI1MCwgMjUwLCAyNTAsIDAuOCk7XFxuICAtLWNvbG9yLWJvcmRlci1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4xNDUpO1xcblxcbiAgLS1jb2xvci10aXRsZS1jb2xvcjogIzFmMWYxZjtcXG4gIC0tY29sb3Itc3RhY2stbm90ZXM6ICM3Nzc7XFxuXFxuICAtLWNvbG9yLWFjY2VudHMtMTogIzgwODA4MDtcXG4gIC0tY29sb3ItYWNjZW50cy0yOiAjMjIyMjIyO1xcbiAgLS1jb2xvci1hY2NlbnRzLTM6ICM0MDQwNDA7XFxuXFxuICAtLWZvbnQtc3RhY2stbW9ub3NwYWNlOiAnX19uZXh0anMtR2Vpc3QgTW9ubycsICdHZWlzdCBNb25vJywgJ1NGTW9uby1SZWd1bGFyJyxcXG4gICAgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlO1xcbiAgLS1mb250LXN0YWNrLXNhbnM6ICdfX25leHRqcy1HZWlzdCcsICdHZWlzdCcsIC1hcHBsZS1zeXN0ZW0sICdTb3VyY2UgU2FucyBQcm8nLFxcbiAgICBzYW5zLXNlcmlmO1xcblxcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stc2Fucyk7XFxuICBmb250LXZhcmlhbnQtbGlnYXR1cmVzOiBub25lO1xcblxcbiAgLyogVE9ETzogUmVtb3ZlIHJlcGxhY2VkIG9uZXMuICovXFxuICAtLXNoYWRvdy1zbTogMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gMC4wNSk7XFxuICAtLXNoYWRvdzogMCAxcHggM3B4IDAgcmdiKDAgMCAwIC8gMC4xKSwgMCAxcHggMnB4IC0xcHggcmdiKDAgMCAwIC8gMC4xKTtcXG4gIC0tc2hhZG93LW1kOiAwIDRweCA2cHggLTFweCByZ2IoMCAwIDAgLyAwLjEpLCAwIDJweCA0cHggLTJweCByZ2IoMCAwIDAgLyAwLjEpO1xcbiAgLS1zaGFkb3ctbGc6IDAgMTBweCAxNXB4IC0zcHggcmdiKDAgMCAwIC8gMC4xKSxcXG4gICAgMCA0cHggNnB4IC00cHggcmdiKDAgMCAwIC8gMC4xKTtcXG4gIC0tc2hhZG93LXhsOiAwIDIwcHggMjVweCAtNXB4IHJnYigwIDAgMCAvIDAuMSksXFxuICAgIDAgOHB4IDEwcHggLTZweCByZ2IoMCAwIDAgLyAwLjEpO1xcbiAgLS1zaGFkb3ctMnhsOiAwIDI1cHggNTBweCAtMTJweCByZ2IoMCAwIDAgLyAwLjI1KTtcXG4gIC0tc2hhZG93LWlubmVyOiBpbnNldCAwIDJweCA0cHggMCByZ2IoMCAwIDAgLyAwLjA1KTtcXG4gIC0tc2hhZG93LW5vbmU6IDAgMCAjMDAwMDtcXG5cXG4gIC0tc2hhZG93LXNtYWxsOiAwcHggMnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xcbiAgLS1zaGFkb3ctbWVudTogMHB4IDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjAyKSxcXG4gICAgMHB4IDRweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMDQpLCAwcHggMTZweCAyNHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjA2KTtcXG5cXG4gIC0tZm9jdXMtY29sb3I6IHZhcigtLWNvbG9yLWJsdWUtODAwKTtcXG4gIC0tZm9jdXMtcmluZzogMnB4IHNvbGlkIHZhcigtLWZvY3VzLWNvbG9yKTtcXG5cXG4gIC0tdGltaW5nLXN3aWZ0OiBjdWJpYy1iZXppZXIoMC4yMywgMC44OCwgMC4yNiwgMC45Mik7XFxuICAtLXRpbWluZy1vdmVybGF5OiBjdWJpYy1iZXppZXIoMC4xNzUsIDAuODg1LCAwLjMyLCAxLjEpO1xcbiAgLyogcHJldHRpZXItaWdub3JlICovXFxuICAtLXRpbWluZy1ib3VuY2U6IGxpbmVhcigwIDAlLCAwLjAwNTg3MSAxJSwgMC4wMjIwNTggMiUsIDAuMDQ2NjEyIDMlLCAwLjA3NzgyMyA0JSwgMC4xMTQxOTkgNSUsIDAuMTU0NDQxIDYlLCAwLjE5NzQzMSA3LjAwMDAwMDAwMDAwMDAwMSUsIDAuMjQyMjA4IDglLCAwLjI4Nzk1OSA5JSwgMC4zMzM5OTUgMTAlLCAwLjM3OTc0MyAxMSUsIDAuNDI0NzMyIDEyJSwgMC40Njg1OCAxMyUsIDAuNTEwOTgyIDE0LjAwMDAwMDAwMDAwMDAwMiUsIDAuNTUxNzAyIDE1JSwgMC41OTA1NjQgMTYlLCAwLjYyNzQ0NSAxNyUsIDAuNjYyMjYxIDE4JSwgMC42OTQ5NzEgMTklLCAwLjcyNTU2MSAyMCUsIDAuNzU0MDQ3IDIxJSwgMC43ODA0NjIgMjIlLCAwLjgwNDg2MSAyMyUsIDAuODI3MzEgMjQlLCAwLjg0Nzg4OCAyNSUsIDAuODY2Njc5IDI2JSwgMC44ODM3NzUgMjclLCAwLjg5OTI3MiAyOC4wMDAwMDAwMDAwMDAwMDQlLCAwLjkxMzI2NyAyOC45OTk5OTk5OTk5OTk5OTYlLCAwLjkyNTg1NiAzMCUsIDAuOTM3MTM3IDMxJSwgMC45NDcyMDUgMzIlLCAwLjk1NjE1MyAzMyUsIDAuOTY0MDcgMzQlLCAwLjk3MTA0MyAzNSUsIDAuOTc3MTUzIDM2JSwgMC45ODI0NzkgMzclLCAwLjk4NzA5NCAzOCUsIDAuOTkxMDY2IDM5JSwgMC45OTQ0NjIgNDAlLCAwLjk5NzMzOSA0MSUsIDAuOTk5NzU1IDQyJSwgMS4wMDE3NjEgNDMlLCAxLjAwMzQwNCA0NCUsIDEuMDA0NzI3IDQ1JSwgMS4wMDU3NyA0NiUsIDEuMDA2NTY5IDQ3JSwgMS4wMDcxNTcgNDglLCAxLjAwNzU2MyA0OSUsIDEuMDA3ODEzIDUwJSwgMS4wMDc5MzEgNTElLCAxLjAwNzkzOSA1MiUsIDEuMDA3ODU1IDUzJSwgMS4wMDc2OTcgNTQlLCAxLjAwNzQ3NyA1NS4wMDAwMDAwMDAwMDAwMSUsIDEuMDA3MjEgNTYuMDAwMDAwMDAwMDAwMDElLCAxLjAwNjkwNyA1Ni45OTk5OTk5OTk5OTk5OSUsIDEuMDA2NTc2IDU3Ljk5OTk5OTk5OTk5OTk5JSwgMS4wMDYyMjggNTklLCAxLjAwNTg2OCA2MCUsIDEuMDA1NTAzIDYxJSwgMS4wMDUxMzcgNjIlLCAxLjAwNDc3NiA2MyUsIDEuMDA0NDIyIDY0JSwgMS4wMDQwNzggNjUlLCAxLjAwMzc0NiA2NiUsIDEuMDAzNDI5IDY3JSwgMS4wMDMxMjcgNjglLCAxLjAwMjg0IDY5JSwgMS4wMDI1NzEgNzAlLCAxLjAwMjMxOCA3MSUsIDEuMDAyMDgyIDcyJSwgMS4wMDE4NjMgNzMlLCAxLjAwMTY2IDc0JSwgMS4wMDE0NzMgNzUlLCAxLjAwMTMwMSA3NiUsIDEuMDAxMTQzIDc3JSwgMS4wMDEgNzglLCAxLjAwMDg2OSA3OSUsIDEuMDAwNzUyIDgwJSwgMS4wMDA2NDUgODElLCAxLjAwMDU1IDgyJSwgMS4wMDA0NjQgODMlLCAxLjAwMDM4OCA4NCUsIDEuMDAwMzIxIDg1JSwgMS4wMDAyNjEgODYlLCAxLjAwMDIwOSA4NyUsIDEuMDAwMTYzIDg4JSwgMS4wMDAxMjMgODklLCAxLjAwMDA4OCA5MCUpO1xcblxcbiAgLS1yb3VuZGVkLW5vbmU6IDBweDtcXG4gIC0tcm91bmRlZC1zbTogMnB4O1xcbiAgLS1yb3VuZGVkLW1kOiA0cHg7XFxuICAtLXJvdW5kZWQtbWQtMjogNnB4O1xcbiAgLS1yb3VuZGVkLWxnOiA4cHg7XFxuICAtLXJvdW5kZWQteGw6IDEycHg7XFxuICAtLXJvdW5kZWQtMnhsOiAxNnB4O1xcbiAgLS1yb3VuZGVkLTN4bDogMjRweDtcXG4gIC0tcm91bmRlZC00eGw6IDMycHg7XFxuICAtLXJvdW5kZWQtZnVsbDogOTk5OXB4O1xcblxcbiAgLyogXFxuICAgIFRoaXMgdmFsdWUgZ2V0cyBzZXQgZnJvbSB0aGUgRGV2IFRvb2xzIHByZWZlcmVuY2VzLFxcbiAgICBhbmQgd2UgdXNlIHRoZSBmb2xsb3dpbmcgLS1zaXplLSogdmFyaWFibGVzIHRvIFxcbiAgICBzY2FsZSB0aGUgcmVsZXZhbnQgZWxlbWVudHMuXFxuXFxuICAgIFRoZSByZWFzb24gd2h5IHdlIGRvbid0IHJlbHkgb24gcmVtIHZhbHVlcyBpcyBiZWNhdXNlXFxuICAgIGlmIGFuIGFwcCBzZXRzIHRoZWlyIHJvb3QgZm9udCBzaXplIHRvIHNvbWV0aGluZyB0aW55LCBcXG4gICAgaXQgZmVlbHMgdW5leHBlY3RlZCB0byBoYXZlIHRoZSBhcHAgcm9vdCBzaXplIGxlYWsgXFxuICAgIGludG8gYSBOZXh0LmpzIHN1cmZhY2UuXFxuXFxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9kaXNjdXNzaW9ucy83NjgxMlxcbiAgKi9cXG4gIC0tbmV4dGpzLWRldi10b29scy1zY2FsZTogMTtcXG4gIC0tc2l6ZS0xOiBjYWxjKDFweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS0yOiBjYWxjKDJweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS0zOiBjYWxjKDNweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS00OiBjYWxjKDRweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS01OiBjYWxjKDVweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS02OiBjYWxjKDZweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS03OiBjYWxjKDdweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS04OiBjYWxjKDhweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS05OiBjYWxjKDlweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS0xMDogY2FsYygxMHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgLS1zaXplLTExOiBjYWxjKDExcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAtLXNpemUtMTI6IGNhbGMoMTJweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS0xMzogY2FsYygxM3B4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgLS1zaXplLTE0OiBjYWxjKDE0cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAtLXNpemUtMTU6IGNhbGMoMTVweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS0xNjogY2FsYygxNnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgLS1zaXplLTE3OiBjYWxjKDE3cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAtLXNpemUtMTg6IGNhbGMoMThweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS0yMDogY2FsYygyMHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgLS1zaXplLTIyOiBjYWxjKDIycHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAtLXNpemUtMjQ6IGNhbGMoMjRweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS0yNjogY2FsYygyNnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgLS1zaXplLTI4OiBjYWxjKDI4cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAtLXNpemUtMzA6IGNhbGMoMzBweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS0zMjogY2FsYygzMnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgLS1zaXplLTM0OiBjYWxjKDM0cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAtLXNpemUtMzY6IGNhbGMoMzZweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS0zODogY2FsYygzOHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgLS1zaXplLTQwOiBjYWxjKDQwcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAtLXNpemUtNDI6IGNhbGMoNDJweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gIC0tc2l6ZS00NDogY2FsYyg0NHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgLS1zaXplLTQ2OiBjYWxjKDQ2cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAtLXNpemUtNDg6IGNhbGMoNDhweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG5cXG4gIEBtZWRpYSBwcmludCB7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxuICB9XFxufVxcblxcbmgxLFxcbmgyLFxcbmgzLFxcbmg0LFxcbmg1LFxcbmg2IHtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbn1cXG5cXG5hIHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ibHVlLTkwMCk7XFxuICAmOmhvdmVyIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWJsdWUtOTAwKTtcXG4gIH1cXG4gICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgfVxcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI6ZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPVwiXCIscj12b2lkIDAhPT10WzVdO3JldHVybiB0WzRdJiYobis9XCJAc3VwcG9ydHMgKFwiLmNvbmNhdCh0WzRdLFwiKSB7XCIpKSx0WzJdJiYobis9XCJAbWVkaWEgXCIuY29uY2F0KHRbMl0sXCIge1wiKSksciYmKG4rPVwiQGxheWVyXCIuY29uY2F0KHRbNV0ubGVuZ3RoPjA/XCIgXCIuY29uY2F0KHRbNV0pOlwiXCIsXCIge1wiKSksbis9ZSh0KSxyJiYobis9XCJ9XCIpLHRbMl0mJihuKz1cIn1cIiksdFs0XSYmKG4rPVwifVwiKSxufSkuam9pbihcIlwiKX0sdC5pPWZ1bmN0aW9uKGUsbixyLG8sYSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtbbnVsbCxlLHZvaWQgMF1dKTt2YXIgaT17fTtpZihyKWZvcih2YXIgbD0wO2w8dGhpcy5sZW5ndGg7bCsrKXt2YXIgcz10aGlzW2xdWzBdO251bGwhPXMmJihpW3NdPSEwKX1mb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIHU9W10uY29uY2F0KGVbY10pO3ImJmlbdVswXV18fCh2b2lkIDAhPT1hJiYodm9pZCAwPT09dVs1XXx8KHVbMV09XCJAbGF5ZXJcIi5jb25jYXQodVs1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQodVs1XSk6XCJcIixcIiB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSksdVs1XT1hKSxuJiYodVsyXSYmKHVbMV09XCJAbWVkaWEgXCIuY29uY2F0KHVbMl0sXCIge1wiKS5jb25jYXQodVsxXSxcIn1cIikpLHVbMl09biksbyYmKHVbNF0/KHVbMV09XCJAc3VwcG9ydHMgKFwiLmNvbmNhdCh1WzRdLFwiKSB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSx1WzRdPW8pOnVbNF09XCJcIi5jb25jYXQobykpLHQucHVzaCh1KSl9fSx0fX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI6ZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMV0sbj1lWzNdO2lmKCFuKXJldHVybiB0O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGJ0b2Epe3ZhciByPWJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KG4pKSkpO3JldHVyblt0XS5jb25jYXQoW1wiLyojIFwiLmNvbmNhdChcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChyKSxcIiAqL1wiKV0pLmpvaW4oXCJcXG5cIil9cmV0dXJuW3RdLmpvaW4oXCJcXG5cIil9fSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiOmZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO3ZhciB0PVtdO2Z1bmN0aW9uIG4oZSl7Zm9yKHZhciBuPS0xLHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdLmlkZW50aWZpZXI9PT1lKXtuPXI7YnJlYWt9cmV0dXJuIG59ZnVuY3Rpb24gcihlLHIpe2Zvcih2YXIgbz17fSxhPVtdLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGw9ZVtpXSxzPXIuYmFzZT9sWzBdK3IuYmFzZTpsWzBdLGM9b1tzXXx8MCx1PVwiXCIuY29uY2F0KHMsXCIgXCIpLmNvbmNhdChjKTtvW3NdPWMrMTt2YXIgZD1uKHUpLGY9e2NzczpsWzFdLG1lZGlhOmxbMl0sc291cmNlTWFwOmxbM10sc3VwcG9ydHM6bFs0XSxsYXllcjpsWzVdfTtpZigtMSE9PWQpdFtkXS5yZWZlcmVuY2VzKyssdFtkXS51cGRhdGVyKGYpO2Vsc2V7dmFyIHA9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmRvbUFQSSh0KTtyZXR1cm4gbi51cGRhdGUoZSksZnVuY3Rpb24odCl7dD8odC5jc3MhPT1lLmNzc3x8dC5tZWRpYSE9PWUubWVkaWF8fHQuc291cmNlTWFwIT09ZS5zb3VyY2VNYXB8fHQuc3VwcG9ydHMhPT1lLnN1cHBvcnRzfHx0LmxheWVyIT09ZS5sYXllcikmJm4udXBkYXRlKGU9dCk6bi5yZW1vdmUoKX19KGYscik7ci5ieUluZGV4PWksdC5zcGxpY2UoaSwwLHtpZGVudGlmaWVyOnUsdXBkYXRlcjpwLHJlZmVyZW5jZXM6MX0pfWEucHVzaCh1KX1yZXR1cm4gYX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSxvKXt2YXIgYT1yKGU9ZXx8W10sbz1vfHx7fSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2U9ZXx8W107Zm9yKHZhciBpPTA7aTxhLmxlbmd0aDtpKyspe3ZhciBsPW4oYVtpXSk7dFtsXS5yZWZlcmVuY2VzLS19Zm9yKHZhciBzPXIoZSxvKSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PW4oYVtjXSk7MD09PXRbdV0ucmVmZXJlbmNlcyYmKHRbdV0udXBkYXRlcigpLHQuc3BsaWNlKHUsMSkpfWE9c319fSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiOmZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7cmV0dXJuIGUuc2V0QXR0cmlidXRlcyh0LGUuYXR0cmlidXRlcyksZS5pbnNlcnQodCxlLm9wdGlvbnMpLHR9fSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bi5uYzt0JiZlLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsdCl9fSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI6ZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBkb2N1bWVudClyZXR1cm57dXBkYXRlOmZ1bmN0aW9uKCl7fSxyZW1vdmU6ZnVuY3Rpb24oKXt9fTt2YXIgdD1lLmluc2VydFN0eWxlRWxlbWVudChlKTtyZXR1cm57dXBkYXRlOmZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPVwiXCIsbi5zdXBwb3J0cyYmKHIrPVwiQHN1cHBvcnRzIChcIi5jb25jYXQobi5zdXBwb3J0cyxcIikge1wiKSksbi5tZWRpYSYmKHIrPVwiQG1lZGlhIFwiLmNvbmNhdChuLm1lZGlhLFwiIHtcIikpLChvPXZvaWQgMCE9PW4ubGF5ZXIpJiYocis9XCJAbGF5ZXJcIi5jb25jYXQobi5sYXllci5sZW5ndGg+MD9cIiBcIi5jb25jYXQobi5sYXllcik6XCJcIixcIiB7XCIpKSxyKz1uLmNzcyxvJiYocis9XCJ9XCIpLG4ubWVkaWEmJihyKz1cIn1cIiksbi5zdXBwb3J0cyYmKHIrPVwifVwiKSwoYT1uLnNvdXJjZU1hcCkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBidG9hJiYocis9XCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShhKSkpKSxcIiAqL1wiKSksZS5zdHlsZVRhZ1RyYW5zZm9ybShyLHQsZS5vcHRpb25zKX0scmVtb3ZlOmZ1bmN0aW9uKCl7IWZ1bmN0aW9uKGUpe2lmKG51bGwhPT1lLnBhcmVudE5vZGUpZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfSh0KX19fX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiOmZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKHQuc3R5bGVTaGVldCl0LnN0eWxlU2hlZXQuY3NzVGV4dD1lO2Vsc2V7Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKTt0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKX19fSxcIi4vZGlzdC9jb21waWxlZC9hbnNlci9pbmRleC5qc1wiOmZ1bmN0aW9uKGUpeygoKT0+e1widXNlIHN0cmljdFwiO3ZhciB0PXsyMTE6ZT0+e3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksbj1bW3tjb2xvcjpcIjAsIDAsIDBcIixjbGFzczpcImFuc2ktYmxhY2tcIn0se2NvbG9yOlwiMTg3LCAwLCAwXCIsY2xhc3M6XCJhbnNpLXJlZFwifSx7Y29sb3I6XCIwLCAxODcsIDBcIixjbGFzczpcImFuc2ktZ3JlZW5cIn0se2NvbG9yOlwiMTg3LCAxODcsIDBcIixjbGFzczpcImFuc2kteWVsbG93XCJ9LHtjb2xvcjpcIjAsIDAsIDE4N1wiLGNsYXNzOlwiYW5zaS1ibHVlXCJ9LHtjb2xvcjpcIjE4NywgMCwgMTg3XCIsY2xhc3M6XCJhbnNpLW1hZ2VudGFcIn0se2NvbG9yOlwiMCwgMTg3LCAxODdcIixjbGFzczpcImFuc2ktY3lhblwifSx7Y29sb3I6XCIyNTUsMjU1LDI1NVwiLGNsYXNzOlwiYW5zaS13aGl0ZVwifV0sW3tjb2xvcjpcIjg1LCA4NSwgODVcIixjbGFzczpcImFuc2ktYnJpZ2h0LWJsYWNrXCJ9LHtjb2xvcjpcIjI1NSwgODUsIDg1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1yZWRcIn0se2NvbG9yOlwiMCwgMjU1LCAwXCIsY2xhc3M6XCJhbnNpLWJyaWdodC1ncmVlblwifSx7Y29sb3I6XCIyNTUsIDI1NSwgODVcIixjbGFzczpcImFuc2ktYnJpZ2h0LXllbGxvd1wifSx7Y29sb3I6XCI4NSwgODUsIDI1NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtYmx1ZVwifSx7Y29sb3I6XCIyNTUsIDg1LCAyNTVcIixjbGFzczpcImFuc2ktYnJpZ2h0LW1hZ2VudGFcIn0se2NvbG9yOlwiODUsIDI1NSwgMjU1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1jeWFuXCJ9LHtjb2xvcjpcIjI1NSwgMjU1LCAyNTVcIixjbGFzczpcImFuc2ktYnJpZ2h0LXdoaXRlXCJ9XV07ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXRocm93IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTt0aGlzLmZnPXRoaXMuYmc9dGhpcy5mZ190cnVlY29sb3I9dGhpcy5iZ190cnVlY29sb3I9bnVsbCx0aGlzLmJyaWdodD0wfXJldHVybiB0KGUsbnVsbCxbe2tleTpcImVzY2FwZUZvckh0bWxcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4obmV3IGUpLmVzY2FwZUZvckh0bWwodCl9fSx7a2V5OlwibGlua2lmeVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybihuZXcgZSkubGlua2lmeSh0KX19LHtrZXk6XCJhbnNpVG9IdG1sXCIsdmFsdWU6ZnVuY3Rpb24odCxuKXtyZXR1cm4obmV3IGUpLmFuc2lUb0h0bWwodCxuKX19LHtrZXk6XCJhbnNpVG9Kc29uXCIsdmFsdWU6ZnVuY3Rpb24odCxuKXtyZXR1cm4obmV3IGUpLmFuc2lUb0pzb24odCxuKX19LHtrZXk6XCJhbnNpVG9UZXh0XCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuKG5ldyBlKS5hbnNpVG9UZXh0KHQpfX1dKSx0KGUsW3trZXk6XCJzZXR1cFBhbGV0dGVcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuUEFMRVRURV9DT0xPUlM9W107Zm9yKHZhciBlPTA7ZTwyOysrZSlmb3IodmFyIHQ9MDt0PDg7Kyt0KXRoaXMuUEFMRVRURV9DT0xPUlMucHVzaChuW2VdW3RdLmNvbG9yKTtmb3IodmFyIHI9WzAsOTUsMTM1LDE3NSwyMTUsMjU1XSxvPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcltlXStcIiwgXCIrclt0XStcIiwgXCIrcltuXX0sYT0wO2E8NjsrK2EpZm9yKHZhciBpPTA7aTw2OysraSlmb3IodmFyIGw9MDtsPDY7KytsKXRoaXMuUEFMRVRURV9DT0xPUlMucHVzaChvKGEsaSxsKSk7Zm9yKHZhciBzPTgsYz0wO2M8MjQ7KytjLHMrPTEwKXRoaXMuUEFMRVRURV9DT0xPUlMucHVzaChvKHMscyxzKSl9fSx7a2V5OlwiZXNjYXBlRm9ySHRtbFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1smPD5dL2dtLGZ1bmN0aW9uKGUpe3JldHVyblwiJlwiPT1lP1wiJmFtcDtcIjpcIjxcIj09ZT9cIiZsdDtcIjpcIj5cIj09ZT9cIiZndDtcIjpcIlwifSl9fSx7a2V5OlwibGlua2lmeVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyhodHRwcz86XFwvXFwvW15cXHNdKykvZ20sZnVuY3Rpb24oZSl7cmV0dXJuJzxhIGhyZWY9XCInK2UrJ1wiPicrZStcIjwvYT5cIn0pfX0se2tleTpcImFuc2lUb0h0bWxcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnByb2Nlc3MoZSx0LCEwKX19LHtrZXk6XCJhbnNpVG9Kc29uXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4odD10fHx7fSkuanNvbj0hMCx0LmNsZWFyTGluZT0hMSx0aGlzLnByb2Nlc3MoZSx0LCEwKX19LHtrZXk6XCJhbnNpVG9UZXh0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHJvY2VzcyhlLHt9LCExKX19LHtrZXk6XCJwcm9jZXNzXCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMsbz1lLnNwbGl0KC9cXDAzM1xcWy8pLGE9by5zaGlmdCgpO251bGw9PXQmJih0PXt9KSx0LmNsZWFyTGluZT0vXFxyLy50ZXN0KGUpO3ZhciBpPW8ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiByLnByb2Nlc3NDaHVuayhlLHQsbil9KTtpZih0JiZ0Lmpzb24pe3ZhciBsPXRoaXMucHJvY2Vzc0NodW5rSnNvbihcIlwiKTtyZXR1cm4gbC5jb250ZW50PWEsbC5jbGVhckxpbmU9dC5jbGVhckxpbmUsaS51bnNoaWZ0KGwpLHQucmVtb3ZlX2VtcHR5JiYoaT1pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5pc0VtcHR5KCl9KSksaX1yZXR1cm4gaS51bnNoaWZ0KGEpLGkuam9pbihcIlwiKX19LHtrZXk6XCJwcm9jZXNzQ2h1bmtKc29uXCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBvPSh0PXZvaWQgMD09PXQ/e306dCkudXNlX2NsYXNzZXM9dm9pZCAwIT09dC51c2VfY2xhc3NlcyYmdC51c2VfY2xhc3NlcyxhPXQua2V5PW8/XCJjbGFzc1wiOlwiY29sb3JcIixpPXtjb250ZW50OmUsZmc6bnVsbCxiZzpudWxsLGZnX3RydWVjb2xvcjpudWxsLGJnX3RydWVjb2xvcjpudWxsLGNsZWFyTGluZTp0LmNsZWFyTGluZSxkZWNvcmF0aW9uOm51bGwsd2FzX3Byb2Nlc3NlZDohMSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIWkuY29udGVudH19LGw9ZS5tYXRjaCgvXihbIVxceDNjLVxceDNmXSopKFtcXGQ7XSopKFtcXHgyMC1cXHgyY10qW1xceDQwLVxceDdlXSkoW1xcc1xcU10qKS9tKTtpZighbClyZXR1cm4gaTtpLmNvbnRlbnQ9bFs0XTt2YXIgcz1sWzJdLnNwbGl0KFwiO1wiKTtpZihcIlwiIT09bFsxXXx8XCJtXCIhPT1sWzNdfHwhcilyZXR1cm4gaTtmb3IodGhpcy5kZWNvcmF0aW9uPW51bGw7cy5sZW5ndGg+MDspe3ZhciBjPXBhcnNlSW50KHMuc2hpZnQoKSk7aWYoaXNOYU4oYyl8fDA9PT1jKXRoaXMuZmc9dGhpcy5iZz10aGlzLmRlY29yYXRpb249bnVsbDtlbHNlIGlmKDE9PT1jKXRoaXMuZGVjb3JhdGlvbj1cImJvbGRcIjtlbHNlIGlmKDI9PT1jKXRoaXMuZGVjb3JhdGlvbj1cImRpbVwiO2Vsc2UgaWYoMz09Yyl0aGlzLmRlY29yYXRpb249XCJpdGFsaWNcIjtlbHNlIGlmKDQ9PWMpdGhpcy5kZWNvcmF0aW9uPVwidW5kZXJsaW5lXCI7ZWxzZSBpZig1PT1jKXRoaXMuZGVjb3JhdGlvbj1cImJsaW5rXCI7ZWxzZSBpZig3PT09Yyl0aGlzLmRlY29yYXRpb249XCJyZXZlcnNlXCI7ZWxzZSBpZig4PT09Yyl0aGlzLmRlY29yYXRpb249XCJoaWRkZW5cIjtlbHNlIGlmKDk9PT1jKXRoaXMuZGVjb3JhdGlvbj1cInN0cmlrZXRocm91Z2hcIjtlbHNlIGlmKDM5PT1jKXRoaXMuZmc9bnVsbDtlbHNlIGlmKDQ5PT1jKXRoaXMuYmc9bnVsbDtlbHNlIGlmKGM+PTMwJiZjPDM4KXRoaXMuZmc9blswXVtjJTEwXVthXTtlbHNlIGlmKGM+PTkwJiZjPDk4KXRoaXMuZmc9blsxXVtjJTEwXVthXTtlbHNlIGlmKGM+PTQwJiZjPDQ4KXRoaXMuYmc9blswXVtjJTEwXVthXTtlbHNlIGlmKGM+PTEwMCYmYzwxMDgpdGhpcy5iZz1uWzFdW2MlMTBdW2FdO2Vsc2UgaWYoMzg9PT1jfHw0OD09PWMpe3ZhciB1PTM4PT09YztpZihzLmxlbmd0aD49MSl7dmFyIGQ9cy5zaGlmdCgpO2lmKFwiNVwiPT09ZCYmcy5sZW5ndGg+PTEpe3ZhciBmPXBhcnNlSW50KHMuc2hpZnQoKSk7aWYoZj49MCYmZjw9MjU1KWlmKG8pe3ZhciBwPWY+PTE2P1wiYW5zaS1wYWxldHRlLVwiK2Y6blsrKGY+NyldW2YlOF0uY2xhc3M7dT90aGlzLmZnPXA6dGhpcy5iZz1wfWVsc2UgdGhpcy5QQUxFVFRFX0NPTE9SU3x8dGhpcy5zZXR1cFBhbGV0dGUoKSx1P3RoaXMuZmc9dGhpcy5QQUxFVFRFX0NPTE9SU1tmXTp0aGlzLmJnPXRoaXMuUEFMRVRURV9DT0xPUlNbZl19ZWxzZSBpZihcIjJcIj09PWQmJnMubGVuZ3RoPj0zKXt2YXIgaD1wYXJzZUludChzLnNoaWZ0KCkpLG09cGFyc2VJbnQocy5zaGlmdCgpKSxnPXBhcnNlSW50KHMuc2hpZnQoKSk7aWYoaD49MCYmaDw9MjU1JiZtPj0wJiZtPD0yNTUmJmc+PTAmJmc8PTI1NSl7dmFyIHk9aCtcIiwgXCIrbStcIiwgXCIrZztvP3U/KHRoaXMuZmc9XCJhbnNpLXRydWVjb2xvclwiLHRoaXMuZmdfdHJ1ZWNvbG9yPXkpOih0aGlzLmJnPVwiYW5zaS10cnVlY29sb3JcIix0aGlzLmJnX3RydWVjb2xvcj15KTp1P3RoaXMuZmc9eTp0aGlzLmJnPXl9fX19fXJldHVybiBudWxsPT09dGhpcy5mZyYmbnVsbD09PXRoaXMuYmcmJm51bGw9PT10aGlzLmRlY29yYXRpb258fChpLmZnPXRoaXMuZmcsaS5iZz10aGlzLmJnLGkuZmdfdHJ1ZWNvbG9yPXRoaXMuZmdfdHJ1ZWNvbG9yLGkuYmdfdHJ1ZWNvbG9yPXRoaXMuYmdfdHJ1ZWNvbG9yLGkuZGVjb3JhdGlvbj10aGlzLmRlY29yYXRpb24saS53YXNfcHJvY2Vzc2VkPSEwKSxpfX0se2tleTpcInByb2Nlc3NDaHVua1wiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3Q9dHx8e307dmFyIG89dGhpcy5wcm9jZXNzQ2h1bmtKc29uKGUsdCxuKTtpZih0Lmpzb24pcmV0dXJuIG87aWYoby5pc0VtcHR5KCkpcmV0dXJuXCJcIjtpZighby53YXNfcHJvY2Vzc2VkKXJldHVybiBvLmNvbnRlbnQ7dmFyIGE9dC51c2VfY2xhc3NlcyxpPVtdLGw9W10scz17fSxjPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49dm9pZCAwO2ZvcihuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmdC5wdXNoKFwiZGF0YS1cIituKyc9XCInK3IuZXNjYXBlRm9ySHRtbChlW25dKSsnXCInKTtyZXR1cm4gdC5sZW5ndGg+MD9cIiBcIit0LmpvaW4oXCIgXCIpOlwiXCJ9O3JldHVybihvLmZnJiYoYT8obC5wdXNoKG8uZmcrXCItZmdcIiksbnVsbCE9PW8uZmdfdHJ1ZWNvbG9yJiYoc1tcImFuc2ktdHJ1ZWNvbG9yLWZnXCJdPW8uZmdfdHJ1ZWNvbG9yLG8uZmdfdHJ1ZWNvbG9yPW51bGwpKTppLnB1c2goXCJjb2xvcjpyZ2IoXCIrby5mZytcIilcIikpLG8uYmcmJihhPyhsLnB1c2goby5iZytcIi1iZ1wiKSxudWxsIT09by5iZ190cnVlY29sb3ImJihzW1wiYW5zaS10cnVlY29sb3ItYmdcIl09by5iZ190cnVlY29sb3Isby5iZ190cnVlY29sb3I9bnVsbCkpOmkucHVzaChcImJhY2tncm91bmQtY29sb3I6cmdiKFwiK28uYmcrXCIpXCIpKSxvLmRlY29yYXRpb24mJihhP2wucHVzaChcImFuc2ktXCIrby5kZWNvcmF0aW9uKTpcImJvbGRcIj09PW8uZGVjb3JhdGlvbj9pLnB1c2goXCJmb250LXdlaWdodDpib2xkXCIpOlwiZGltXCI9PT1vLmRlY29yYXRpb24/aS5wdXNoKFwib3BhY2l0eTowLjVcIik6XCJpdGFsaWNcIj09PW8uZGVjb3JhdGlvbj9pLnB1c2goXCJmb250LXN0eWxlOml0YWxpY1wiKTpcInJldmVyc2VcIj09PW8uZGVjb3JhdGlvbj9pLnB1c2goXCJmaWx0ZXI6aW52ZXJ0KDEwMCUpXCIpOlwiaGlkZGVuXCI9PT1vLmRlY29yYXRpb24/aS5wdXNoKFwidmlzaWJpbGl0eTpoaWRkZW5cIik6XCJzdHJpa2V0aHJvdWdoXCI9PT1vLmRlY29yYXRpb24/aS5wdXNoKFwidGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaFwiKTppLnB1c2goXCJ0ZXh0LWRlY29yYXRpb246XCIrby5kZWNvcmF0aW9uKSksYSk/JzxzcGFuIGNsYXNzPVwiJytsLmpvaW4oXCIgXCIpKydcIicrYyhzKStcIj5cIitvLmNvbnRlbnQrXCI8L3NwYW4+XCI6JzxzcGFuIHN0eWxlPVwiJytpLmpvaW4oXCI7XCIpKydcIicrYyhzKStcIj5cIitvLmNvbnRlbnQrXCI8L3NwYW4+XCJ9fV0pLGV9KCl9fSxuPXt9O2Z1bmN0aW9uIHIoZSl7dmFyIG89bltlXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGE9bltlXT17ZXhwb3J0czp7fX0saT0hMDt0cnl7dFtlXShhLGEuZXhwb3J0cyxyKSxpPSExfWZpbmFsbHl7aSYmZGVsZXRlIG5bZV19cmV0dXJuIGEuZXhwb3J0c31yLmFiPVwiLy9cIixlLmV4cG9ydHM9cigyMTEpfSkoKX0sXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20tY2xpZW50LnByb2R1Y3Rpb24uanNcIjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsbz1uKFwiLi9kaXN0L2NvbXBpbGVkL3NjaGVkdWxlci9pbmRleC5qc1wiKSxhPW4oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIiksaT1uKFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9pbmRleC5qc1wiKTtmdW5jdGlvbiBsKGUpe3ZhciB0PVwiaHR0cHM6Ly9yZWFjdC5kZXYvZXJyb3JzL1wiK2U7aWYoMTxhcmd1bWVudHMubGVuZ3RoKXt0Kz1cIj9hcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1sxXSk7Zm9yKHZhciBuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0Kz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tuXSl9cmV0dXJuXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrZStcIjsgdmlzaXQgXCIrdCtcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCJ9ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLG49ZTtpZihlLmFsdGVybmF0ZSlmb3IoO3QucmV0dXJuOyl0PXQucmV0dXJuO2Vsc2V7ZT10O2RvIDAhPSg0MDk4Jih0PWUpLmZsYWdzKSYmKG49dC5yZXR1cm4pLGU9dC5yZXR1cm47d2hpbGUoZSl9cmV0dXJuIDM9PT10LnRhZz9uOm51bGx9ZnVuY3Rpb24gYyhlKXtpZigxMz09PWUudGFnKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYobnVsbD09PXQmJm51bGwhPT0oZT1lLmFsdGVybmF0ZSkmJih0PWUubWVtb2l6ZWRTdGF0ZSksbnVsbCE9PXQpcmV0dXJuIHQuZGVoeWRyYXRlZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiB1KGUpe2lmKDMxPT09ZS50YWcpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZTtpZihudWxsPT09dCYmbnVsbCE9PShlPWUuYWx0ZXJuYXRlKSYmKHQ9ZS5tZW1vaXplZFN0YXRlKSxudWxsIT09dClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIGQoZSl7aWYocyhlKSE9PWUpdGhyb3cgRXJyb3IobCgxODgpKX12YXIgZj1PYmplY3QuYXNzaWduLHA9U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksaD1TeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIiksbT1TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLGc9U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLHk9U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLHY9U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLGI9U3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLEE9U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIikseD1TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksdz1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksQz1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxfPVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLGs9U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik7U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpO3ZhciBFPVN5bWJvbC5mb3IoXCJyZWFjdC5hY3Rpdml0eVwiKTtTeW1ib2wuZm9yKFwicmVhY3QubGVnYWN5X2hpZGRlblwiKSxTeW1ib2wuZm9yKFwicmVhY3QudHJhY2luZ19tYXJrZXJcIik7dmFyIGo9U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik7U3ltYm9sLmZvcihcInJlYWN0LnZpZXdfdHJhbnNpdGlvblwiKTt2YXIgUz1TeW1ib2wuaXRlcmF0b3I7ZnVuY3Rpb24gTyhlKXtyZXR1cm4gbnVsbD09PWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlP251bGw6XCJmdW5jdGlvblwiPT10eXBlb2YoZT1TJiZlW1NdfHxlW1wiQEBpdGVyYXRvclwiXSk/ZTpudWxsfXZhciBCPVN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFA9QXJyYXkuaXNBcnJheSxJPWEuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFQ9aS5fX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUsej17cGVuZGluZzohMSxkYXRhOm51bGwsbWV0aG9kOm51bGwsYWN0aW9uOm51bGx9LEQ9W10sTD0tMTtmdW5jdGlvbiBOKGUpe3JldHVybntjdXJyZW50OmV9fWZ1bmN0aW9uIFIoZSl7MD5MfHwoZS5jdXJyZW50PURbTF0sRFtMXT1udWxsLEwtLSl9ZnVuY3Rpb24gTShlLHQpe0RbKytMXT1lLmN1cnJlbnQsZS5jdXJyZW50PXR9dmFyIFo9TihudWxsKSxVPU4obnVsbCksRj1OKG51bGwpLHE9TihudWxsKTtmdW5jdGlvbiBIKGUsdCl7c3dpdGNoKE0oRix0KSxNKFUsZSksTShaLG51bGwpLHQubm9kZVR5cGUpe2Nhc2UgOTpjYXNlIDExOmU9KGU9dC5kb2N1bWVudEVsZW1lbnQpJiYoZT1lLm5hbWVzcGFjZVVSSSk/Y2goZSk6MDticmVhaztkZWZhdWx0OmlmKGU9dC50YWdOYW1lLHQ9dC5uYW1lc3BhY2VVUkkpZT1jbSh0PWNoKHQpLGUpO2Vsc2Ugc3dpdGNoKGUpe2Nhc2VcInN2Z1wiOmU9MTticmVhaztjYXNlXCJtYXRoXCI6ZT0yO2JyZWFrO2RlZmF1bHQ6ZT0wfX1SKFopLE0oWixlKX1mdW5jdGlvbiBWKCl7UihaKSxSKFUpLFIoRil9ZnVuY3Rpb24gJChlKXtudWxsIT09ZS5tZW1vaXplZFN0YXRlJiZNKHEsZSk7dmFyIHQ9Wi5jdXJyZW50LG49Y20odCxlLnR5cGUpO3QhPT1uJiYoTShVLGUpLE0oWixuKSl9ZnVuY3Rpb24gVyhlKXtVLmN1cnJlbnQ9PT1lJiYoUihaKSxSKFUpKSxxLmN1cnJlbnQ9PT1lJiYoUihxKSxjOS5fY3VycmVudFZhbHVlPXopfWZ1bmN0aW9uIFkoZSl7aWYodm9pZCAwPT09dEwpdHJ5e3Rocm93IEVycm9yKCl9Y2F0Y2goZSl7dmFyIHQ9ZS5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTt0TD10JiZ0WzFdfHxcIlwiLHROPS0xPGUuc3RhY2suaW5kZXhPZihcIlxcbiAgICBhdFwiKT9cIiAoPGFub255bW91cz4pXCI6LTE8ZS5zdGFjay5pbmRleE9mKFwiQFwiKT9cIkB1bmtub3duOjA6MFwiOlwiXCJ9cmV0dXJuXCJcXG5cIit0TCtlK3ROfXZhciBLPSExO2Z1bmN0aW9uIFgoZSx0KXtpZighZXx8SylyZXR1cm5cIlwiO0s9ITA7dmFyIG49RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9dm9pZCAwO3RyeXt2YXIgcj17RGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OmZ1bmN0aW9uKCl7dHJ5e2lmKHQpe3ZhciBuPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX07aWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwicHJvcHNcIix7c2V0OmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX19KSxcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5jb25zdHJ1Y3Qpe3RyeXtSZWZsZWN0LmNvbnN0cnVjdChuLFtdKX1jYXRjaChlKXt2YXIgcj1lfVJlZmxlY3QuY29uc3RydWN0KGUsW10sbil9ZWxzZXt0cnl7bi5jYWxsKCl9Y2F0Y2goZSl7cj1lfWUuY2FsbChuLnByb3RvdHlwZSl9fWVsc2V7dHJ5e3Rocm93IEVycm9yKCl9Y2F0Y2goZSl7cj1lfShuPWUoKSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4uY2F0Y2gmJm4uY2F0Y2goZnVuY3Rpb24oKXt9KX19Y2F0Y2goZSl7aWYoZSYmciYmXCJzdHJpbmdcIj09dHlwZW9mIGUuc3RhY2spcmV0dXJuW2Uuc3RhY2ssci5zdGFja119cmV0dXJuW251bGwsbnVsbF19fTtyLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdC5kaXNwbGF5TmFtZT1cIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioci5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsXCJuYW1lXCIpO28mJm8uY29uZmlndXJhYmxlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoci5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsXCJuYW1lXCIse3ZhbHVlOlwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCJ9KTt2YXIgYT1yLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCgpLGk9YVswXSxsPWFbMV07aWYoaSYmbCl7dmFyIHM9aS5zcGxpdChcIlxcblwiKSxjPWwuc3BsaXQoXCJcXG5cIik7Zm9yKG89cj0wO3I8cy5sZW5ndGgmJiFzW3JdLmluY2x1ZGVzKFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCIpOylyKys7Zm9yKDtvPGMubGVuZ3RoJiYhY1tvXS5pbmNsdWRlcyhcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiKTspbysrO2lmKHI9PT1zLmxlbmd0aHx8bz09PWMubGVuZ3RoKWZvcihyPXMubGVuZ3RoLTEsbz1jLmxlbmd0aC0xOzE8PXImJjA8PW8mJnNbcl0hPT1jW29dOylvLS07Zm9yKDsxPD1yJiYwPD1vO3ItLSxvLS0paWYoc1tyXSE9PWNbb10pe2lmKDEhPT1yfHwxIT09bylkbyBpZihyLS0sby0tLDA+b3x8c1tyXSE9PWNbb10pe3ZhciB1PVwiXFxuXCIrc1tyXS5yZXBsYWNlKFwiIGF0IG5ldyBcIixcIiBhdCBcIik7cmV0dXJuIGUuZGlzcGxheU5hbWUmJnUuaW5jbHVkZXMoXCI8YW5vbnltb3VzPlwiKSYmKHU9dS5yZXBsYWNlKFwiPGFub255bW91cz5cIixlLmRpc3BsYXlOYW1lKSksdX13aGlsZSgxPD1yJiYwPD1vKTticmVha319fWZpbmFsbHl7Sz0hMSxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1ufXJldHVybihuPWU/ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lOlwiXCIpP1kobik6XCJcIn1mdW5jdGlvbiBHKGUpe3RyeXt2YXIgdD1cIlwiLG49bnVsbDtkbyB0Kz1mdW5jdGlvbihlLHQpe3N3aXRjaChlLnRhZyl7Y2FzZSAyNjpjYXNlIDI3OmNhc2UgNTpyZXR1cm4gWShlLnR5cGUpO2Nhc2UgMTY6cmV0dXJuIFkoXCJMYXp5XCIpO2Nhc2UgMTM6cmV0dXJuIGUuY2hpbGQhPT10JiZudWxsIT09dD9ZKFwiU3VzcGVuc2UgRmFsbGJhY2tcIik6WShcIlN1c3BlbnNlXCIpO2Nhc2UgMTk6cmV0dXJuIFkoXCJTdXNwZW5zZUxpc3RcIik7Y2FzZSAwOmNhc2UgMTU6cmV0dXJuIFgoZS50eXBlLCExKTtjYXNlIDExOnJldHVybiBYKGUudHlwZS5yZW5kZXIsITEpO2Nhc2UgMTpyZXR1cm4gWChlLnR5cGUsITApO2Nhc2UgMzE6cmV0dXJuIFkoXCJBY3Rpdml0eVwiKTtkZWZhdWx0OnJldHVyblwiXCJ9fShlLG4pLG49ZSxlPWUucmV0dXJuO3doaWxlKGUpO3JldHVybiB0fWNhdGNoKGUpe3JldHVyblwiXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogXCIrZS5tZXNzYWdlK1wiXFxuXCIrZS5zdGFja319dmFyIFE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxKPW8udW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxlZT1vLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLGV0PW8udW5zdGFibGVfc2hvdWxkWWllbGQsZW49by51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsZXI9by51bnN0YWJsZV9ub3csZW89by51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxlYT1vLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LGVpPW8udW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksZWw9by51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxlcz1vLnVuc3RhYmxlX0xvd1ByaW9yaXR5LGVjPW8udW5zdGFibGVfSWRsZVByaW9yaXR5LGV1PW8ubG9nLGVkPW8udW5zdGFibGVfc2V0RGlzYWJsZVlpZWxkVmFsdWUsZWY9bnVsbCxlcD1udWxsO2Z1bmN0aW9uIGVoKGUpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGV1JiZlZChlKSxlcCYmXCJmdW5jdGlvblwiPT10eXBlb2YgZXAuc2V0U3RyaWN0TW9kZSl0cnl7ZXAuc2V0U3RyaWN0TW9kZShlZixlKX1jYXRjaChlKXt9fXZhciBlbT1NYXRoLmNsejMyP01hdGguY2x6MzI6ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PShlPj4+PTApPzMyOjMxLShlZyhlKS9leXwwKXwwfSxlZz1NYXRoLmxvZyxleT1NYXRoLkxOMixldj0yNTYsZWI9NDE5NDMwNDtmdW5jdGlvbiBlQShlKXt2YXIgdD00MiZlO2lmKDAhPT10KXJldHVybiB0O3N3aXRjaChlJi1lKXtjYXNlIDE6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDg6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gMTY7Y2FzZSAzMjpyZXR1cm4gMzI7Y2FzZSA2NDpyZXR1cm4gNjQ7Y2FzZSAxMjg6cmV0dXJuIDEyODtjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gNDE5NDA0OCZlO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAweDEwMDAwMDA6Y2FzZSAweDIwMDAwMDA6cmV0dXJuIDB4M2MwMDAwMCZlO2Nhc2UgMHg0MDAwMDAwOnJldHVybiAweDQwMDAwMDA7Y2FzZSAweDgwMDAwMDA6cmV0dXJuIDB4ODAwMDAwMDtjYXNlIDB4MTAwMDAwMDA6cmV0dXJuIDB4MTAwMDAwMDA7Y2FzZSAweDIwMDAwMDAwOnJldHVybiAweDIwMDAwMDAwO2Nhc2UgMHg0MDAwMDAwMDpyZXR1cm4gMDtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBleChlLHQsbil7dmFyIHI9ZS5wZW5kaW5nTGFuZXM7aWYoMD09PXIpcmV0dXJuIDA7dmFyIG89MCxhPWUuc3VzcGVuZGVkTGFuZXMsaT1lLnBpbmdlZExhbmVzO2U9ZS53YXJtTGFuZXM7dmFyIGw9MHg3ZmZmZmZmJnI7cmV0dXJuIDAhPT1sPzAhPShyPWwmfmEpP289ZUEocik6MCE9KGkmPWwpP289ZUEoaSk6bnx8MCE9KG49bCZ+ZSkmJihvPWVBKG4pKTowIT0obD1yJn5hKT9vPWVBKGwpOjAhPT1pP289ZUEoaSk6bnx8MCE9KG49ciZ+ZSkmJihvPWVBKG4pKSwwPT09bz8wOjAhPT10JiZ0IT09byYmMD09KHQmYSkmJigoYT1vJi1vKT49KG49dCYtdCl8fDMyPT09YSYmMCE9KDQxOTQwNDgmbikpP3Q6b31mdW5jdGlvbiBldyhlLHQpe3JldHVybiAwPT0oZS5wZW5kaW5nTGFuZXMmfihlLnN1c3BlbmRlZExhbmVzJn5lLnBpbmdlZExhbmVzKSZ0KX1mdW5jdGlvbiBlQygpe3ZhciBlPWV2O3JldHVybiAwPT0oNDE5NDA0OCYoZXY8PD0xKSkmJihldj0yNTYpLGV9ZnVuY3Rpb24gZV8oKXt2YXIgZT1lYjtyZXR1cm4gMD09KDB4M2MwMDAwMCYoZWI8PD0xKSkmJihlYj00MTk0MzA0KSxlfWZ1bmN0aW9uIGVrKGUpe2Zvcih2YXIgdD1bXSxuPTA7MzE+bjtuKyspdC5wdXNoKGUpO3JldHVybiB0fWZ1bmN0aW9uIGVFKGUsdCl7ZS5wZW5kaW5nTGFuZXN8PXQsMHgxMDAwMDAwMCE9PXQmJihlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wLGUud2FybUxhbmVzPTApfWZ1bmN0aW9uIGVqKGUsdCxuKXtlLnBlbmRpbmdMYW5lc3w9dCxlLnN1c3BlbmRlZExhbmVzJj1+dDt2YXIgcj0zMS1lbSh0KTtlLmVudGFuZ2xlZExhbmVzfD10LGUuZW50YW5nbGVtZW50c1tyXT0weDQwMDAwMDAwfGUuZW50YW5nbGVtZW50c1tyXXw0MTk0MDkwJm59ZnVuY3Rpb24gZVMoZSx0KXt2YXIgbj1lLmVudGFuZ2xlZExhbmVzfD10O2ZvcihlPWUuZW50YW5nbGVtZW50cztuOyl7dmFyIHI9MzEtZW0obiksbz0xPDxyO28mdHxlW3JdJnQmJihlW3JdfD10KSxuJj1+b319ZnVuY3Rpb24gZU8oZSx0KXt2YXIgbj10Ji10O3JldHVybiAwIT0oKG49MCE9KDQyJm4pPzE6ZUIobikpJihlLnN1c3BlbmRlZExhbmVzfHQpKT8wOm59ZnVuY3Rpb24gZUIoZSl7c3dpdGNoKGUpe2Nhc2UgMjplPTE7YnJlYWs7Y2FzZSA4OmU9NDticmVhaztjYXNlIDMyOmU9MTY7YnJlYWs7Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDB4MTAwMDAwMDpjYXNlIDB4MjAwMDAwMDplPTEyODticmVhaztjYXNlIDB4MTAwMDAwMDA6ZT0weDgwMDAwMDA7YnJlYWs7ZGVmYXVsdDplPTB9cmV0dXJuIGV9ZnVuY3Rpb24gZVAoZSl7cmV0dXJuIDI8KGUmPS1lKT84PGU/MCE9KDB4N2ZmZmZmZiZlKT8zMjoweDEwMDAwMDAwOjg6Mn1mdW5jdGlvbiBlSSgpe3ZhciBlPVQucDtyZXR1cm4gMCE9PWU/ZTp2b2lkIDA9PT0oZT13aW5kb3cuZXZlbnQpPzMyOnVkKGUudHlwZSl9ZnVuY3Rpb24gZVQoZSx0KXt2YXIgbj1ULnA7dHJ5e3JldHVybiBULnA9ZSx0KCl9ZmluYWxseXtULnA9bn19dmFyIGV6PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLGVEPVwiX19yZWFjdEZpYmVyJFwiK2V6LGVMPVwiX19yZWFjdFByb3BzJFwiK2V6LGVOPVwiX19yZWFjdENvbnRhaW5lciRcIitleixlUj1cIl9fcmVhY3RFdmVudHMkXCIrZXosZU09XCJfX3JlYWN0TGlzdGVuZXJzJFwiK2V6LGVaPVwiX19yZWFjdEhhbmRsZXMkXCIrZXosZVU9XCJfX3JlYWN0UmVzb3VyY2VzJFwiK2V6LGVGPVwiX19yZWFjdE1hcmtlciRcIitlejtmdW5jdGlvbiBlcShlKXtkZWxldGUgZVtlRF0sZGVsZXRlIGVbZUxdLGRlbGV0ZSBlW2VSXSxkZWxldGUgZVtlTV0sZGVsZXRlIGVbZVpdfWZ1bmN0aW9uIGVIKGUpe3ZhciB0PWVbZURdO2lmKHQpcmV0dXJuIHQ7Zm9yKHZhciBuPWUucGFyZW50Tm9kZTtuOyl7aWYodD1uW2VOXXx8bltlRF0pe2lmKG49dC5hbHRlcm5hdGUsbnVsbCE9PXQuY2hpbGR8fG51bGwhPT1uJiZudWxsIT09bi5jaGlsZClmb3IoZT1jVChlKTtudWxsIT09ZTspe2lmKG49ZVtlRF0pcmV0dXJuIG47ZT1jVChlKX1yZXR1cm4gdH1uPShlPW4pLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZVYoZSl7aWYoZT1lW2VEXXx8ZVtlTl0pe3ZhciB0PWUudGFnO2lmKDU9PT10fHw2PT09dHx8MTM9PT10fHwzMT09PXR8fDI2PT09dHx8Mjc9PT10fHwzPT09dClyZXR1cm4gZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlJChlKXt2YXIgdD1lLnRhZztpZig1PT09dHx8MjY9PT10fHwyNz09PXR8fDY9PT10KXJldHVybiBlLnN0YXRlTm9kZTt0aHJvdyBFcnJvcihsKDMzKSl9ZnVuY3Rpb24gZVcoZSl7dmFyIHQ9ZVtlVV07cmV0dXJuIHR8fCh0PWVbZVVdPXtob2lzdGFibGVTdHlsZXM6bmV3IE1hcCxob2lzdGFibGVTY3JpcHRzOm5ldyBNYXB9KSx0fWZ1bmN0aW9uIGVZKGUpe2VbZUZdPSEwfXZhciBlSz1uZXcgU2V0LGVYPXt9O2Z1bmN0aW9uIGVHKGUsdCl7ZVEoZSx0KSxlUShlK1wiQ2FwdHVyZVwiLHQpfWZ1bmN0aW9uIGVRKGUsdCl7Zm9yKGVYW2VdPXQsZT0wO2U8dC5sZW5ndGg7ZSsrKWVLLmFkZCh0W2VdKX12YXIgZUo9UmVnRXhwKFwiXls6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXVs6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBdKiRcIiksZTA9e30sZTE9e307ZnVuY3Rpb24gZTIoZSx0LG4pe2lmKFEuY2FsbChlMSx0KXx8IVEuY2FsbChlMCx0KSYmKGVKLnRlc3QodCk/ZTFbdF09ITA6KGUwW3RdPSEwLCExKSkpaWYobnVsbD09PW4pZS5yZW1vdmVBdHRyaWJ1dGUodCk7ZWxzZXtzd2l0Y2godHlwZW9mIG4pe2Nhc2VcInVuZGVmaW5lZFwiOmNhc2VcImZ1bmN0aW9uXCI6Y2FzZVwic3ltYm9sXCI6ZS5yZW1vdmVBdHRyaWJ1dGUodCk7cmV0dXJuO2Nhc2VcImJvb2xlYW5cIjp2YXIgcj10LnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw1KTtpZihcImRhdGEtXCIhPT1yJiZcImFyaWEtXCIhPT1yKXJldHVybiB2b2lkIGUucmVtb3ZlQXR0cmlidXRlKHQpfWUuc2V0QXR0cmlidXRlKHQsXCJcIituKX19ZnVuY3Rpb24gZTQoZSx0LG4pe2lmKG51bGw9PT1uKWUucmVtb3ZlQXR0cmlidXRlKHQpO2Vsc2V7c3dpdGNoKHR5cGVvZiBuKXtjYXNlXCJ1bmRlZmluZWRcIjpjYXNlXCJmdW5jdGlvblwiOmNhc2VcInN5bWJvbFwiOmNhc2VcImJvb2xlYW5cIjplLnJlbW92ZUF0dHJpYnV0ZSh0KTtyZXR1cm59ZS5zZXRBdHRyaWJ1dGUodCxcIlwiK24pfX1mdW5jdGlvbiBlNShlLHQsbixyKXtpZihudWxsPT09cillLnJlbW92ZUF0dHJpYnV0ZShuKTtlbHNle3N3aXRjaCh0eXBlb2Ygcil7Y2FzZVwidW5kZWZpbmVkXCI6Y2FzZVwiZnVuY3Rpb25cIjpjYXNlXCJzeW1ib2xcIjpjYXNlXCJib29sZWFuXCI6ZS5yZW1vdmVBdHRyaWJ1dGUobik7cmV0dXJufWUuc2V0QXR0cmlidXRlTlModCxuLFwiXCIrcil9fWZ1bmN0aW9uIGUzKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZVwiYmlnaW50XCI6Y2FzZVwiYm9vbGVhblwiOmNhc2VcIm51bWJlclwiOmNhc2VcInN0cmluZ1wiOmNhc2VcInVuZGVmaW5lZFwiOmNhc2VcIm9iamVjdFwiOnJldHVybiBlO2RlZmF1bHQ6cmV0dXJuXCJcIn19ZnVuY3Rpb24gZTYoZSl7dmFyIHQ9ZS50eXBlO3JldHVybihlPWUubm9kZU5hbWUpJiZcImlucHV0XCI9PT1lLnRvTG93ZXJDYXNlKCkmJihcImNoZWNrYm94XCI9PT10fHxcInJhZGlvXCI9PT10KX1mdW5jdGlvbiBlOShlKXtpZighZS5fdmFsdWVUcmFja2VyKXt2YXIgdD1lNihlKT9cImNoZWNrZWRcIjpcInZhbHVlXCI7ZS5fdmFsdWVUcmFja2VyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUuY29uc3RydWN0b3IucHJvdG90eXBlLHQpO2lmKCFlLmhhc093blByb3BlcnR5KHQpJiZ2b2lkIDAhPT1yJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmdldCYmXCJmdW5jdGlvblwiPT10eXBlb2Ygci5zZXQpe3ZhciBvPXIuZ2V0LGE9ci5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oZSl7bj1cIlwiK2UsYS5jYWxsKHRoaXMsZSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTpyLmVudW1lcmFibGV9KSx7Z2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbn0sc2V0VmFsdWU6ZnVuY3Rpb24oZSl7bj1cIlwiK2V9LHN0b3BUcmFja2luZzpmdW5jdGlvbigpe2UuX3ZhbHVlVHJhY2tlcj1udWxsLGRlbGV0ZSBlW3RdfX19fShlLHQsXCJcIitlW3RdKX19ZnVuY3Rpb24gZTgoZSl7aWYoIWUpcmV0dXJuITE7dmFyIHQ9ZS5fdmFsdWVUcmFja2VyO2lmKCF0KXJldHVybiEwO3ZhciBuPXQuZ2V0VmFsdWUoKSxyPVwiXCI7cmV0dXJuIGUmJihyPWU2KGUpP2UuY2hlY2tlZD9cInRydWVcIjpcImZhbHNlXCI6ZS52YWx1ZSksKGU9cikhPT1uJiYodC5zZXRWYWx1ZShlKSwhMCl9ZnVuY3Rpb24gZTcoZSl7aWYodm9pZCAwPT09KGU9ZXx8KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudDp2b2lkIDApKSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGUuYWN0aXZlRWxlbWVudHx8ZS5ib2R5fWNhdGNoKHQpe3JldHVybiBlLmJvZHl9fXZhciB0ZT0vW1xcblwiXFxcXF0vZztmdW5jdGlvbiB0dChlKXtyZXR1cm4gZS5yZXBsYWNlKHRlLGZ1bmN0aW9uKGUpe3JldHVyblwiXFxcXFwiK2UuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikrXCIgXCJ9KX1mdW5jdGlvbiB0bihlLHQsbixyLG8sYSxpLGwpe2UubmFtZT1cIlwiLG51bGwhPWkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGkmJlwic3ltYm9sXCIhPXR5cGVvZiBpJiZcImJvb2xlYW5cIiE9dHlwZW9mIGk/ZS50eXBlPWk6ZS5yZW1vdmVBdHRyaWJ1dGUoXCJ0eXBlXCIpLG51bGwhPXQ/XCJudW1iZXJcIj09PWk/KDA9PT10JiZcIlwiPT09ZS52YWx1ZXx8ZS52YWx1ZSE9dCkmJihlLnZhbHVlPVwiXCIrZTModCkpOmUudmFsdWUhPT1cIlwiK2UzKHQpJiYoZS52YWx1ZT1cIlwiK2UzKHQpKTpcInN1Ym1pdFwiIT09aSYmXCJyZXNldFwiIT09aXx8ZS5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSxudWxsIT10P3RvKGUsaSxlMyh0KSk6bnVsbCE9bj90byhlLGksZTMobikpOm51bGwhPXImJmUucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIiksbnVsbD09byYmbnVsbCE9YSYmKGUuZGVmYXVsdENoZWNrZWQ9ISFhKSxudWxsIT1vJiYoZS5jaGVja2VkPW8mJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG8mJlwic3ltYm9sXCIhPXR5cGVvZiBvKSxudWxsIT1sJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBsJiZcInN5bWJvbFwiIT10eXBlb2YgbCYmXCJib29sZWFuXCIhPXR5cGVvZiBsP2UubmFtZT1cIlwiK2UzKGwpOmUucmVtb3ZlQXR0cmlidXRlKFwibmFtZVwiKX1mdW5jdGlvbiB0cihlLHQsbixyLG8sYSxpLGwpe2lmKG51bGwhPWEmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGEmJlwic3ltYm9sXCIhPXR5cGVvZiBhJiZcImJvb2xlYW5cIiE9dHlwZW9mIGEmJihlLnR5cGU9YSksbnVsbCE9dHx8bnVsbCE9bil7aWYoKFwic3VibWl0XCI9PT1hfHxcInJlc2V0XCI9PT1hKSYmbnVsbD09dClyZXR1cm4gdm9pZCBlOShlKTtuPW51bGwhPW4/XCJcIitlMyhuKTpcIlwiLHQ9bnVsbCE9dD9cIlwiK2UzKHQpOm4sbHx8dD09PWUudmFsdWV8fChlLnZhbHVlPXQpLGUuZGVmYXVsdFZhbHVlPXR9cj1cImZ1bmN0aW9uXCIhPXR5cGVvZihyPW51bGwhPXI/cjpvKSYmXCJzeW1ib2xcIiE9dHlwZW9mIHImJiEhcixlLmNoZWNrZWQ9bD9lLmNoZWNrZWQ6ISFyLGUuZGVmYXVsdENoZWNrZWQ9ISFyLG51bGwhPWkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGkmJlwic3ltYm9sXCIhPXR5cGVvZiBpJiZcImJvb2xlYW5cIiE9dHlwZW9mIGkmJihlLm5hbWU9aSksZTkoZSl9ZnVuY3Rpb24gdG8oZSx0LG4pe1wibnVtYmVyXCI9PT10JiZlNyhlLm93bmVyRG9jdW1lbnQpPT09ZXx8ZS5kZWZhdWx0VmFsdWU9PT1cIlwiK258fChlLmRlZmF1bHRWYWx1ZT1cIlwiK24pfWZ1bmN0aW9uIHRhKGUsdCxuLHIpe2lmKGU9ZS5vcHRpb25zLHQpe3Q9e307Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspdFtcIiRcIituW29dXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKW89dC5oYXNPd25Qcm9wZXJ0eShcIiRcIitlW25dLnZhbHVlKSxlW25dLnNlbGVjdGVkIT09byYmKGVbbl0uc2VsZWN0ZWQ9byksbyYmciYmKGVbbl0uZGVmYXVsdFNlbGVjdGVkPSEwKX1lbHNle2ZvcihvPTAsbj1cIlwiK2UzKG4pLHQ9bnVsbDtvPGUubGVuZ3RoO28rKyl7aWYoZVtvXS52YWx1ZT09PW4pe2Vbb10uc2VsZWN0ZWQ9ITAsciYmKGVbb10uZGVmYXVsdFNlbGVjdGVkPSEwKTtyZXR1cm59bnVsbCE9PXR8fGVbb10uZGlzYWJsZWR8fCh0PWVbb10pfW51bGwhPT10JiYodC5zZWxlY3RlZD0hMCl9fWZ1bmN0aW9uIHRpKGUsdCxuKXtpZihudWxsIT10JiYoKHQ9XCJcIitlMyh0KSkhPT1lLnZhbHVlJiYoZS52YWx1ZT10KSxudWxsPT1uKSl7ZS5kZWZhdWx0VmFsdWUhPT10JiYoZS5kZWZhdWx0VmFsdWU9dCk7cmV0dXJufWUuZGVmYXVsdFZhbHVlPW51bGwhPW4/XCJcIitlMyhuKTpcIlwifWZ1bmN0aW9uIHRsKGUsdCxuLHIpe2lmKG51bGw9PXQpe2lmKG51bGwhPXIpe2lmKG51bGwhPW4pdGhyb3cgRXJyb3IobCg5MikpO2lmKFAocikpe2lmKDE8ci5sZW5ndGgpdGhyb3cgRXJyb3IobCg5MykpO3I9clswXX1uPXJ9bnVsbD09biYmKG49XCJcIiksdD1ufWUuZGVmYXVsdFZhbHVlPW49ZTModCksKHI9ZS50ZXh0Q29udGVudCk9PT1uJiZcIlwiIT09ciYmbnVsbCE9PXImJihlLnZhbHVlPXIpLGU5KGUpfWZ1bmN0aW9uIHRzKGUsdCl7aWYodCl7dmFyIG49ZS5maXJzdENoaWxkO2lmKG4mJm49PT1lLmxhc3RDaGlsZCYmMz09PW4ubm9kZVR5cGUpe24ubm9kZVZhbHVlPXQ7cmV0dXJufX1lLnRleHRDb250ZW50PXR9dmFyIHRjPW5ldyBTZXQoXCJhbmltYXRpb25JdGVyYXRpb25Db3VudCBhc3BlY3RSYXRpbyBib3JkZXJJbWFnZU91dHNldCBib3JkZXJJbWFnZVNsaWNlIGJvcmRlckltYWdlV2lkdGggYm94RmxleCBib3hGbGV4R3JvdXAgYm94T3JkaW5hbEdyb3VwIGNvbHVtbkNvdW50IGNvbHVtbnMgZmxleCBmbGV4R3JvdyBmbGV4UG9zaXRpdmUgZmxleFNocmluayBmbGV4TmVnYXRpdmUgZmxleE9yZGVyIGdyaWRBcmVhIGdyaWRSb3cgZ3JpZFJvd0VuZCBncmlkUm93U3BhbiBncmlkUm93U3RhcnQgZ3JpZENvbHVtbiBncmlkQ29sdW1uRW5kIGdyaWRDb2x1bW5TcGFuIGdyaWRDb2x1bW5TdGFydCBmb250V2VpZ2h0IGxpbmVDbGFtcCBsaW5lSGVpZ2h0IG9wYWNpdHkgb3JkZXIgb3JwaGFucyBzY2FsZSB0YWJTaXplIHdpZG93cyB6SW5kZXggem9vbSBmaWxsT3BhY2l0eSBmbG9vZE9wYWNpdHkgc3RvcE9wYWNpdHkgc3Ryb2tlRGFzaGFycmF5IHN0cm9rZURhc2hvZmZzZXQgc3Ryb2tlTWl0ZXJsaW1pdCBzdHJva2VPcGFjaXR5IHN0cm9rZVdpZHRoIE1vekFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IE1vekJveEZsZXggTW96Qm94RmxleEdyb3VwIE1vekxpbmVDbGFtcCBtc0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IG1zRmxleCBtc1pvb20gbXNGbGV4R3JvdyBtc0ZsZXhOZWdhdGl2ZSBtc0ZsZXhPcmRlciBtc0ZsZXhQb3NpdGl2ZSBtc0ZsZXhTaHJpbmsgbXNHcmlkQ29sdW1uIG1zR3JpZENvbHVtblNwYW4gbXNHcmlkUm93IG1zR3JpZFJvd1NwYW4gV2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgV2Via2l0Qm94RmxleCBXZWJLaXRCb3hGbGV4R3JvdXAgV2Via2l0Qm94T3JkaW5hbEdyb3VwIFdlYmtpdENvbHVtbkNvdW50IFdlYmtpdENvbHVtbnMgV2Via2l0RmxleCBXZWJraXRGbGV4R3JvdyBXZWJraXRGbGV4UG9zaXRpdmUgV2Via2l0RmxleFNocmluayBXZWJraXRMaW5lQ2xhbXBcIi5zcGxpdChcIiBcIikpO2Z1bmN0aW9uIHR1KGUsdCxuKXt2YXIgcj0wPT09dC5pbmRleE9mKFwiLS1cIik7bnVsbD09bnx8XCJib29sZWFuXCI9PXR5cGVvZiBufHxcIlwiPT09bj9yP2Uuc2V0UHJvcGVydHkodCxcIlwiKTpcImZsb2F0XCI9PT10P2UuY3NzRmxvYXQ9XCJcIjplW3RdPVwiXCI6cj9lLnNldFByb3BlcnR5KHQsbik6XCJudW1iZXJcIiE9dHlwZW9mIG58fDA9PT1ufHx0Yy5oYXModCk/XCJmbG9hdFwiPT09dD9lLmNzc0Zsb2F0PW46ZVt0XT0oXCJcIituKS50cmltKCk6ZVt0XT1uK1wicHhcIn1mdW5jdGlvbiB0ZChlLHQsbil7aWYobnVsbCE9dCYmXCJvYmplY3RcIiE9dHlwZW9mIHQpdGhyb3cgRXJyb3IobCg2MikpO2lmKGU9ZS5zdHlsZSxudWxsIT1uKXtmb3IodmFyIHIgaW4gbikhbi5oYXNPd25Qcm9wZXJ0eShyKXx8bnVsbCE9dCYmdC5oYXNPd25Qcm9wZXJ0eShyKXx8KDA9PT1yLmluZGV4T2YoXCItLVwiKT9lLnNldFByb3BlcnR5KHIsXCJcIik6XCJmbG9hdFwiPT09cj9lLmNzc0Zsb2F0PVwiXCI6ZVtyXT1cIlwiKTtmb3IodmFyIG8gaW4gdClyPXRbb10sdC5oYXNPd25Qcm9wZXJ0eShvKSYmbltvXSE9PXImJnR1KGUsbyxyKX1lbHNlIGZvcih2YXIgYSBpbiB0KXQuaGFzT3duUHJvcGVydHkoYSkmJnR1KGUsYSx0W2FdKX1mdW5jdGlvbiB0ZihlKXtpZigtMT09PWUuaW5kZXhPZihcIi1cIikpcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2VcImFubm90YXRpb24teG1sXCI6Y2FzZVwiY29sb3ItcHJvZmlsZVwiOmNhc2VcImZvbnQtZmFjZVwiOmNhc2VcImZvbnQtZmFjZS1zcmNcIjpjYXNlXCJmb250LWZhY2UtdXJpXCI6Y2FzZVwiZm9udC1mYWNlLWZvcm1hdFwiOmNhc2VcImZvbnQtZmFjZS1uYW1lXCI6Y2FzZVwibWlzc2luZy1nbHlwaFwiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fXZhciB0cD1uZXcgTWFwKFtbXCJhY2NlcHRDaGFyc2V0XCIsXCJhY2NlcHQtY2hhcnNldFwiXSxbXCJodG1sRm9yXCIsXCJmb3JcIl0sW1wiaHR0cEVxdWl2XCIsXCJodHRwLWVxdWl2XCJdLFtcImNyb3NzT3JpZ2luXCIsXCJjcm9zc29yaWdpblwiXSxbXCJhY2NlbnRIZWlnaHRcIixcImFjY2VudC1oZWlnaHRcIl0sW1wiYWxpZ25tZW50QmFzZWxpbmVcIixcImFsaWdubWVudC1iYXNlbGluZVwiXSxbXCJhcmFiaWNGb3JtXCIsXCJhcmFiaWMtZm9ybVwiXSxbXCJiYXNlbGluZVNoaWZ0XCIsXCJiYXNlbGluZS1zaGlmdFwiXSxbXCJjYXBIZWlnaHRcIixcImNhcC1oZWlnaHRcIl0sW1wiY2xpcFBhdGhcIixcImNsaXAtcGF0aFwiXSxbXCJjbGlwUnVsZVwiLFwiY2xpcC1ydWxlXCJdLFtcImNvbG9ySW50ZXJwb2xhdGlvblwiLFwiY29sb3ItaW50ZXJwb2xhdGlvblwiXSxbXCJjb2xvckludGVycG9sYXRpb25GaWx0ZXJzXCIsXCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnNcIl0sW1wiY29sb3JQcm9maWxlXCIsXCJjb2xvci1wcm9maWxlXCJdLFtcImNvbG9yUmVuZGVyaW5nXCIsXCJjb2xvci1yZW5kZXJpbmdcIl0sW1wiZG9taW5hbnRCYXNlbGluZVwiLFwiZG9taW5hbnQtYmFzZWxpbmVcIl0sW1wiZW5hYmxlQmFja2dyb3VuZFwiLFwiZW5hYmxlLWJhY2tncm91bmRcIl0sW1wiZmlsbE9wYWNpdHlcIixcImZpbGwtb3BhY2l0eVwiXSxbXCJmaWxsUnVsZVwiLFwiZmlsbC1ydWxlXCJdLFtcImZsb29kQ29sb3JcIixcImZsb29kLWNvbG9yXCJdLFtcImZsb29kT3BhY2l0eVwiLFwiZmxvb2Qtb3BhY2l0eVwiXSxbXCJmb250RmFtaWx5XCIsXCJmb250LWZhbWlseVwiXSxbXCJmb250U2l6ZVwiLFwiZm9udC1zaXplXCJdLFtcImZvbnRTaXplQWRqdXN0XCIsXCJmb250LXNpemUtYWRqdXN0XCJdLFtcImZvbnRTdHJldGNoXCIsXCJmb250LXN0cmV0Y2hcIl0sW1wiZm9udFN0eWxlXCIsXCJmb250LXN0eWxlXCJdLFtcImZvbnRWYXJpYW50XCIsXCJmb250LXZhcmlhbnRcIl0sW1wiZm9udFdlaWdodFwiLFwiZm9udC13ZWlnaHRcIl0sW1wiZ2x5cGhOYW1lXCIsXCJnbHlwaC1uYW1lXCJdLFtcImdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsXCIsXCJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsXCJdLFtcImdseXBoT3JpZW50YXRpb25WZXJ0aWNhbFwiLFwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWxcIl0sW1wiaG9yaXpBZHZYXCIsXCJob3Jpei1hZHYteFwiXSxbXCJob3Jpek9yaWdpblhcIixcImhvcml6LW9yaWdpbi14XCJdLFtcImltYWdlUmVuZGVyaW5nXCIsXCJpbWFnZS1yZW5kZXJpbmdcIl0sW1wibGV0dGVyU3BhY2luZ1wiLFwibGV0dGVyLXNwYWNpbmdcIl0sW1wibGlnaHRpbmdDb2xvclwiLFwibGlnaHRpbmctY29sb3JcIl0sW1wibWFya2VyRW5kXCIsXCJtYXJrZXItZW5kXCJdLFtcIm1hcmtlck1pZFwiLFwibWFya2VyLW1pZFwiXSxbXCJtYXJrZXJTdGFydFwiLFwibWFya2VyLXN0YXJ0XCJdLFtcIm92ZXJsaW5lUG9zaXRpb25cIixcIm92ZXJsaW5lLXBvc2l0aW9uXCJdLFtcIm92ZXJsaW5lVGhpY2tuZXNzXCIsXCJvdmVybGluZS10aGlja25lc3NcIl0sW1wicGFpbnRPcmRlclwiLFwicGFpbnQtb3JkZXJcIl0sW1wicGFub3NlLTFcIixcInBhbm9zZS0xXCJdLFtcInBvaW50ZXJFdmVudHNcIixcInBvaW50ZXItZXZlbnRzXCJdLFtcInJlbmRlcmluZ0ludGVudFwiLFwicmVuZGVyaW5nLWludGVudFwiXSxbXCJzaGFwZVJlbmRlcmluZ1wiLFwic2hhcGUtcmVuZGVyaW5nXCJdLFtcInN0b3BDb2xvclwiLFwic3RvcC1jb2xvclwiXSxbXCJzdG9wT3BhY2l0eVwiLFwic3RvcC1vcGFjaXR5XCJdLFtcInN0cmlrZXRocm91Z2hQb3NpdGlvblwiLFwic3RyaWtldGhyb3VnaC1wb3NpdGlvblwiXSxbXCJzdHJpa2V0aHJvdWdoVGhpY2tuZXNzXCIsXCJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzc1wiXSxbXCJzdHJva2VEYXNoYXJyYXlcIixcInN0cm9rZS1kYXNoYXJyYXlcIl0sW1wic3Ryb2tlRGFzaG9mZnNldFwiLFwic3Ryb2tlLWRhc2hvZmZzZXRcIl0sW1wic3Ryb2tlTGluZWNhcFwiLFwic3Ryb2tlLWxpbmVjYXBcIl0sW1wic3Ryb2tlTGluZWpvaW5cIixcInN0cm9rZS1saW5lam9pblwiXSxbXCJzdHJva2VNaXRlcmxpbWl0XCIsXCJzdHJva2UtbWl0ZXJsaW1pdFwiXSxbXCJzdHJva2VPcGFjaXR5XCIsXCJzdHJva2Utb3BhY2l0eVwiXSxbXCJzdHJva2VXaWR0aFwiLFwic3Ryb2tlLXdpZHRoXCJdLFtcInRleHRBbmNob3JcIixcInRleHQtYW5jaG9yXCJdLFtcInRleHREZWNvcmF0aW9uXCIsXCJ0ZXh0LWRlY29yYXRpb25cIl0sW1widGV4dFJlbmRlcmluZ1wiLFwidGV4dC1yZW5kZXJpbmdcIl0sW1widHJhbnNmb3JtT3JpZ2luXCIsXCJ0cmFuc2Zvcm0tb3JpZ2luXCJdLFtcInVuZGVybGluZVBvc2l0aW9uXCIsXCJ1bmRlcmxpbmUtcG9zaXRpb25cIl0sW1widW5kZXJsaW5lVGhpY2tuZXNzXCIsXCJ1bmRlcmxpbmUtdGhpY2tuZXNzXCJdLFtcInVuaWNvZGVCaWRpXCIsXCJ1bmljb2RlLWJpZGlcIl0sW1widW5pY29kZVJhbmdlXCIsXCJ1bmljb2RlLXJhbmdlXCJdLFtcInVuaXRzUGVyRW1cIixcInVuaXRzLXBlci1lbVwiXSxbXCJ2QWxwaGFiZXRpY1wiLFwidi1hbHBoYWJldGljXCJdLFtcInZIYW5naW5nXCIsXCJ2LWhhbmdpbmdcIl0sW1widklkZW9ncmFwaGljXCIsXCJ2LWlkZW9ncmFwaGljXCJdLFtcInZNYXRoZW1hdGljYWxcIixcInYtbWF0aGVtYXRpY2FsXCJdLFtcInZlY3RvckVmZmVjdFwiLFwidmVjdG9yLWVmZmVjdFwiXSxbXCJ2ZXJ0QWR2WVwiLFwidmVydC1hZHYteVwiXSxbXCJ2ZXJ0T3JpZ2luWFwiLFwidmVydC1vcmlnaW4teFwiXSxbXCJ2ZXJ0T3JpZ2luWVwiLFwidmVydC1vcmlnaW4teVwiXSxbXCJ3b3JkU3BhY2luZ1wiLFwid29yZC1zcGFjaW5nXCJdLFtcIndyaXRpbmdNb2RlXCIsXCJ3cml0aW5nLW1vZGVcIl0sW1wieG1sbnNYbGlua1wiLFwieG1sbnM6eGxpbmtcIl0sW1wieEhlaWdodFwiLFwieC1oZWlnaHRcIl1dKSx0aD0vXltcXHUwMDAwLVxcdTAwMUYgXSpqW1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnZbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qc1tcXHJcXG5cXHRdKmNbXFxyXFxuXFx0XSpyW1xcclxcblxcdF0qaVtcXHJcXG5cXHRdKnBbXFxyXFxuXFx0XSp0W1xcclxcblxcdF0qOi9pO2Z1bmN0aW9uIHRtKGUpe3JldHVybiB0aC50ZXN0KFwiXCIrZSk/XCJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignUmVhY3QgaGFzIGJsb2NrZWQgYSBqYXZhc2NyaXB0OiBVUkwgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLicpXCI6ZX1mdW5jdGlvbiB0Zygpe312YXIgdHk9bnVsbDtmdW5jdGlvbiB0dihlKXtyZXR1cm4oZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3cpLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoZT1lLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSwzPT09ZS5ub2RlVHlwZT9lLnBhcmVudE5vZGU6ZX12YXIgdGI9bnVsbCx0QT1udWxsO2Z1bmN0aW9uIHR4KGUpe3ZhciB0PWVWKGUpO2lmKHQmJihlPXQuc3RhdGVOb2RlKSl7dmFyIG49ZVtlTF18fG51bGw7c3dpdGNoKGU9dC5zdGF0ZU5vZGUsdC50eXBlKXtjYXNlXCJpbnB1dFwiOmlmKHRuKGUsbi52YWx1ZSxuLmRlZmF1bHRWYWx1ZSxuLmRlZmF1bHRWYWx1ZSxuLmNoZWNrZWQsbi5kZWZhdWx0Q2hlY2tlZCxuLnR5cGUsbi5uYW1lKSx0PW4ubmFtZSxcInJhZGlvXCI9PT1uLnR5cGUmJm51bGwhPXQpe2ZvcihuPWU7bi5wYXJlbnROb2RlOyluPW4ucGFyZW50Tm9kZTtmb3Iobj1uLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W25hbWU9XCInK3R0KFwiXCIrdCkrJ1wiXVt0eXBlPVwicmFkaW9cIl0nKSx0PTA7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07aWYociE9PWUmJnIuZm9ybT09PWUuZm9ybSl7dmFyIG89cltlTF18fG51bGw7aWYoIW8pdGhyb3cgRXJyb3IobCg5MCkpO3RuKHIsby52YWx1ZSxvLmRlZmF1bHRWYWx1ZSxvLmRlZmF1bHRWYWx1ZSxvLmNoZWNrZWQsby5kZWZhdWx0Q2hlY2tlZCxvLnR5cGUsby5uYW1lKX19Zm9yKHQ9MDt0PG4ubGVuZ3RoO3QrKykocj1uW3RdKS5mb3JtPT09ZS5mb3JtJiZlOChyKX1icmVhaztjYXNlXCJ0ZXh0YXJlYVwiOnRpKGUsbi52YWx1ZSxuLmRlZmF1bHRWYWx1ZSk7YnJlYWs7Y2FzZVwic2VsZWN0XCI6bnVsbCE9KHQ9bi52YWx1ZSkmJnRhKGUsISFuLm11bHRpcGxlLHQsITEpfX19dmFyIHR3PSExO2Z1bmN0aW9uIHRDKGUsdCxuKXtpZih0dylyZXR1cm4gZSh0LG4pO3R3PSEwO3RyeXtyZXR1cm4gZSh0KX1maW5hbGx5e2lmKHR3PSExLChudWxsIT09dGJ8fG51bGwhPT10QSkmJihzYygpLHRiJiYodD10YixlPXRBLHRBPXRiPW51bGwsdHgodCksZSkpKWZvcih0PTA7dDxlLmxlbmd0aDt0KyspdHgoZVt0XSl9fWZ1bmN0aW9uIHRfKGUsdCl7dmFyIG49ZS5zdGF0ZU5vZGU7aWYobnVsbD09PW4pcmV0dXJuIG51bGw7dmFyIHI9bltlTF18fG51bGw7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7c3dpdGNoKG49clt0XSx0KXtjYXNlXCJvbkNsaWNrXCI6Y2FzZVwib25DbGlja0NhcHR1cmVcIjpjYXNlXCJvbkRvdWJsZUNsaWNrXCI6Y2FzZVwib25Eb3VibGVDbGlja0NhcHR1cmVcIjpjYXNlXCJvbk1vdXNlRG93blwiOmNhc2VcIm9uTW91c2VEb3duQ2FwdHVyZVwiOmNhc2VcIm9uTW91c2VNb3ZlXCI6Y2FzZVwib25Nb3VzZU1vdmVDYXB0dXJlXCI6Y2FzZVwib25Nb3VzZVVwXCI6Y2FzZVwib25Nb3VzZVVwQ2FwdHVyZVwiOmNhc2VcIm9uTW91c2VFbnRlclwiOihyPSFyLmRpc2FibGVkKXx8KHI9XCJidXR0b25cIiE9PShlPWUudHlwZSkmJlwiaW5wdXRcIiE9PWUmJlwic2VsZWN0XCIhPT1lJiZcInRleHRhcmVhXCIhPT1lKSxlPSFyO2JyZWFrO2RlZmF1bHQ6ZT0hMX1pZihlKXJldHVybiBudWxsO2lmKG4mJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG4pdGhyb3cgRXJyb3IobCgyMzEsdCx0eXBlb2YgbikpO3JldHVybiBufXZhciB0az1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuZG9jdW1lbnQmJnZvaWQgMCE9PXdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50LHRFPSExO2lmKHRrKXRyeXt2YXIgdGo9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHRqLFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXt0RT0hMH19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIix0aix0aiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsdGosdGopfWNhdGNoKGUpe3RFPSExfXZhciB0Uz1udWxsLHRPPW51bGwsdEI9bnVsbDtmdW5jdGlvbiB0UCgpe2lmKHRCKXJldHVybiB0Qjt2YXIgZSx0LG49dE8scj1uLmxlbmd0aCxvPVwidmFsdWVcImluIHRTP3RTLnZhbHVlOnRTLnRleHRDb250ZW50LGE9by5sZW5ndGg7Zm9yKGU9MDtlPHImJm5bZV09PT1vW2VdO2UrKyk7dmFyIGk9ci1lO2Zvcih0PTE7dDw9aSYmbltyLXRdPT09b1thLXRdO3QrKyk7cmV0dXJuIHRCPW8uc2xpY2UoZSwxPHQ/MS10OnZvaWQgMCl9ZnVuY3Rpb24gdEkoZSl7dmFyIHQ9ZS5rZXlDb2RlO3JldHVyblwiY2hhckNvZGVcImluIGU/MD09PShlPWUuY2hhckNvZGUpJiYxMz09PXQmJihlPTEzKTplPXQsMTA9PT1lJiYoZT0xMyksMzI8PWV8fDEzPT09ZT9lOjB9ZnVuY3Rpb24gdFQoKXtyZXR1cm4hMH1mdW5jdGlvbiB0eigpe3JldHVybiExfWZ1bmN0aW9uIHREKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxhKXtmb3IodmFyIGkgaW4gdGhpcy5fcmVhY3ROYW1lPXQsdGhpcy5fdGFyZ2V0SW5zdD1yLHRoaXMudHlwZT1uLHRoaXMubmF0aXZlRXZlbnQ9byx0aGlzLnRhcmdldD1hLHRoaXMuY3VycmVudFRhcmdldD1udWxsLGUpZS5oYXNPd25Qcm9wZXJ0eShpKSYmKHQ9ZVtpXSx0aGlzW2ldPXQ/dChvKTpvW2ldKTtyZXR1cm4gdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9KG51bGwhPW8uZGVmYXVsdFByZXZlbnRlZD9vLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1vLnJldHVyblZhbHVlKT90VDp0eix0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXR6LHRoaXN9cmV0dXJuIGYodC5wcm90b3R5cGUse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwO3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZSYmKGUucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOlwidW5rbm93blwiIT10eXBlb2YgZS5yZXR1cm5WYWx1ZSYmKGUucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXRUKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5uYXRpdmVFdmVudDtlJiYoZS5zdG9wUHJvcGFnYXRpb24/ZS5zdG9wUHJvcGFnYXRpb24oKTpcInVua25vd25cIiE9dHlwZW9mIGUuY2FuY2VsQnViYmxlJiYoZS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dFQpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7fSxpc1BlcnNpc3RlbnQ6dFR9KSx0fXZhciB0TCx0Tix0Uix0TSx0Wix0VT17ZXZlbnRQaGFzZTowLGJ1YmJsZXM6MCxjYW5jZWxhYmxlOjAsdGltZVN0YW1wOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDowLGlzVHJ1c3RlZDowfSx0Rj10RCh0VSksdHE9Zih7fSx0VSx7dmlldzowLGRldGFpbDowfSksdEg9dEQodHEpLHRWPWYoe30sdHEse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6dDIsYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUucmVsYXRlZFRhcmdldD9lLmZyb21FbGVtZW50PT09ZS5zcmNFbGVtZW50P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQ6ZS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oZSl7cmV0dXJuXCJtb3ZlbWVudFhcImluIGU/ZS5tb3ZlbWVudFg6KGUhPT10WiYmKHRaJiZcIm1vdXNlbW92ZVwiPT09ZS50eXBlPyh0Uj1lLnNjcmVlblgtdFouc2NyZWVuWCx0TT1lLnNjcmVlblktdFouc2NyZWVuWSk6dE09dFI9MCx0Wj1lKSx0Uil9LG1vdmVtZW50WTpmdW5jdGlvbihlKXtyZXR1cm5cIm1vdmVtZW50WVwiaW4gZT9lLm1vdmVtZW50WTp0TX19KSx0JD10RCh0ViksdFc9dEQoZih7fSx0Vix7ZGF0YVRyYW5zZmVyOjB9KSksdFk9dEQoZih7fSx0cSx7cmVsYXRlZFRhcmdldDowfSkpLHRLPXREKGYoe30sdFUse2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pKSx0WD10RChmKHt9LHRVLHtjbGlwYm9hcmREYXRhOmZ1bmN0aW9uKGUpe3JldHVyblwiY2xpcGJvYXJkRGF0YVwiaW4gZT9lLmNsaXBib2FyZERhdGE6d2luZG93LmNsaXBib2FyZERhdGF9fSkpLHRHPXREKGYoe30sdFUse2RhdGE6MH0pKSx0UT17RXNjOlwiRXNjYXBlXCIsU3BhY2ViYXI6XCIgXCIsTGVmdDpcIkFycm93TGVmdFwiLFVwOlwiQXJyb3dVcFwiLFJpZ2h0OlwiQXJyb3dSaWdodFwiLERvd246XCJBcnJvd0Rvd25cIixEZWw6XCJEZWxldGVcIixXaW46XCJPU1wiLE1lbnU6XCJDb250ZXh0TWVudVwiLEFwcHM6XCJDb250ZXh0TWVudVwiLFNjcm9sbDpcIlNjcm9sbExvY2tcIixNb3pQcmludGFibGVLZXk6XCJVbmlkZW50aWZpZWRcIn0sdEo9ezg6XCJCYWNrc3BhY2VcIiw5OlwiVGFiXCIsMTI6XCJDbGVhclwiLDEzOlwiRW50ZXJcIiwxNjpcIlNoaWZ0XCIsMTc6XCJDb250cm9sXCIsMTg6XCJBbHRcIiwxOTpcIlBhdXNlXCIsMjA6XCJDYXBzTG9ja1wiLDI3OlwiRXNjYXBlXCIsMzI6XCIgXCIsMzM6XCJQYWdlVXBcIiwzNDpcIlBhZ2VEb3duXCIsMzU6XCJFbmRcIiwzNjpcIkhvbWVcIiwzNzpcIkFycm93TGVmdFwiLDM4OlwiQXJyb3dVcFwiLDM5OlwiQXJyb3dSaWdodFwiLDQwOlwiQXJyb3dEb3duXCIsNDU6XCJJbnNlcnRcIiw0NjpcIkRlbGV0ZVwiLDExMjpcIkYxXCIsMTEzOlwiRjJcIiwxMTQ6XCJGM1wiLDExNTpcIkY0XCIsMTE2OlwiRjVcIiwxMTc6XCJGNlwiLDExODpcIkY3XCIsMTE5OlwiRjhcIiwxMjA6XCJGOVwiLDEyMTpcIkYxMFwiLDEyMjpcIkYxMVwiLDEyMzpcIkYxMlwiLDE0NDpcIk51bUxvY2tcIiwxNDU6XCJTY3JvbGxMb2NrXCIsMjI0OlwiTWV0YVwifSx0MD17QWx0OlwiYWx0S2V5XCIsQ29udHJvbDpcImN0cmxLZXlcIixNZXRhOlwibWV0YUtleVwiLFNoaWZ0Olwic2hpZnRLZXlcIn07ZnVuY3Rpb24gdDEoZSl7dmFyIHQ9dGhpcy5uYXRpdmVFdmVudDtyZXR1cm4gdC5nZXRNb2RpZmllclN0YXRlP3QuZ2V0TW9kaWZpZXJTdGF0ZShlKTohIShlPXQwW2VdKSYmISF0W2VdfWZ1bmN0aW9uIHQyKCl7cmV0dXJuIHQxfXZhciB0ND10RChmKHt9LHRxLHtrZXk6ZnVuY3Rpb24oZSl7aWYoZS5rZXkpe3ZhciB0PXRRW2Uua2V5XXx8ZS5rZXk7aWYoXCJVbmlkZW50aWZpZWRcIiE9PXQpcmV0dXJuIHR9cmV0dXJuXCJrZXlwcmVzc1wiPT09ZS50eXBlPzEzPT09KGU9dEkoZSkpP1wiRW50ZXJcIjpTdHJpbmcuZnJvbUNoYXJDb2RlKGUpOlwia2V5ZG93blwiPT09ZS50eXBlfHxcImtleXVwXCI9PT1lLnR5cGU/dEpbZS5rZXlDb2RlXXx8XCJVbmlkZW50aWZpZWRcIjpcIlwifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTp0MixjaGFyQ29kZTpmdW5jdGlvbihlKXtyZXR1cm5cImtleXByZXNzXCI9PT1lLnR5cGU/dEkoZSk6MH0sa2V5Q29kZTpmdW5jdGlvbihlKXtyZXR1cm5cImtleWRvd25cIj09PWUudHlwZXx8XCJrZXl1cFwiPT09ZS50eXBlP2Uua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihlKXtyZXR1cm5cImtleXByZXNzXCI9PT1lLnR5cGU/dEkoZSk6XCJrZXlkb3duXCI9PT1lLnR5cGV8fFwia2V5dXBcIj09PWUudHlwZT9lLmtleUNvZGU6MH19KSksdDU9dEQoZih7fSx0Vix7cG9pbnRlcklkOjAsd2lkdGg6MCxoZWlnaHQ6MCxwcmVzc3VyZTowLHRhbmdlbnRpYWxQcmVzc3VyZTowLHRpbHRYOjAsdGlsdFk6MCx0d2lzdDowLHBvaW50ZXJUeXBlOjAsaXNQcmltYXJ5OjB9KSksdDM9dEQoZih7fSx0cSx7dG91Y2hlczowLHRhcmdldFRvdWNoZXM6MCxjaGFuZ2VkVG91Y2hlczowLGFsdEtleTowLG1ldGFLZXk6MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxnZXRNb2RpZmllclN0YXRlOnQyfSkpLHQ2PXREKGYoe30sdFUse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSkpLHQ5PXREKGYoe30sdFYse2RlbHRhWDpmdW5jdGlvbihlKXtyZXR1cm5cImRlbHRhWFwiaW4gZT9lLmRlbHRhWDpcIndoZWVsRGVsdGFYXCJpbiBlPy1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbihlKXtyZXR1cm5cImRlbHRhWVwiaW4gZT9lLmRlbHRhWTpcIndoZWVsRGVsdGFZXCJpbiBlPy1lLndoZWVsRGVsdGFZOlwid2hlZWxEZWx0YVwiaW4gZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSkpLHQ4PXREKGYoe30sdFUse25ld1N0YXRlOjAsb2xkU3RhdGU6MH0pKSx0Nz1bOSwxMywyNywzMl0sbmU9dGsmJlwiQ29tcG9zaXRpb25FdmVudFwiaW4gd2luZG93LG50PW51bGw7dGsmJlwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCYmKG50PWRvY3VtZW50LmRvY3VtZW50TW9kZSk7dmFyIG5uPXRrJiZcIlRleHRFdmVudFwiaW4gd2luZG93JiYhbnQsbnI9dGsmJighbmV8fG50JiY4PG50JiYxMT49bnQpLG5vPSExO2Z1bmN0aW9uIG5hKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImtleXVwXCI6cmV0dXJuIC0xIT09dDcuaW5kZXhPZih0LmtleUNvZGUpO2Nhc2VcImtleWRvd25cIjpyZXR1cm4gMjI5IT09dC5rZXlDb2RlO2Nhc2VcImtleXByZXNzXCI6Y2FzZVwibW91c2Vkb3duXCI6Y2FzZVwiZm9jdXNvdXRcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBuaShlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YoZT1lLmRldGFpbCkmJlwiZGF0YVwiaW4gZT9lLmRhdGE6bnVsbH12YXIgbmw9ITEsbnM9e2NvbG9yOiEwLGRhdGU6ITAsZGF0ZXRpbWU6ITAsXCJkYXRldGltZS1sb2NhbFwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07ZnVuY3Rpb24gbmMoZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVyblwiaW5wdXRcIj09PXQ/ISFuc1tlLnR5cGVdOlwidGV4dGFyZWFcIj09PXR9ZnVuY3Rpb24gbnUoZSx0LG4scil7dGI/dEE/dEEucHVzaChyKTp0QT1bcl06dGI9ciwwPCh0PWN0KHQsXCJvbkNoYW5nZVwiKSkubGVuZ3RoJiYobj1uZXcgdEYoXCJvbkNoYW5nZVwiLFwiY2hhbmdlXCIsbnVsbCxuLHIpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgbmQ9bnVsbCxuZj1udWxsO2Z1bmN0aW9uIG5wKGUpe3M0KGUsMCl9ZnVuY3Rpb24gbmgoZSl7aWYoZTgoZSQoZSkpKXJldHVybiBlfWZ1bmN0aW9uIG5tKGUsdCl7aWYoXCJjaGFuZ2VcIj09PWUpcmV0dXJuIHR9dmFyIG5nPSExO2lmKHRrKXtpZih0ayl7dmFyIG55PVwib25pbnB1dFwiaW4gZG9jdW1lbnQ7aWYoIW55KXt2YXIgbnY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtudi5zZXRBdHRyaWJ1dGUoXCJvbmlucHV0XCIsXCJyZXR1cm47XCIpLG55PVwiZnVuY3Rpb25cIj09dHlwZW9mIG52Lm9uaW5wdXR9cj1ueX1lbHNlIHI9ITE7bmc9ciYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiBuYigpe25kJiYobmQuZGV0YWNoRXZlbnQoXCJvbnByb3BlcnR5Y2hhbmdlXCIsbkEpLG5mPW5kPW51bGwpfWZ1bmN0aW9uIG5BKGUpe2lmKFwidmFsdWVcIj09PWUucHJvcGVydHlOYW1lJiZuaChuZikpe3ZhciB0PVtdO251KHQsbmYsZSx0dihlKSksdEMobnAsdCl9fWZ1bmN0aW9uIG54KGUsdCxuKXtcImZvY3VzaW5cIj09PWU/KG5iKCksbmQ9dCxuZj1uLG5kLmF0dGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLG5BKSk6XCJmb2N1c291dFwiPT09ZSYmbmIoKX1mdW5jdGlvbiBudyhlKXtpZihcInNlbGVjdGlvbmNoYW5nZVwiPT09ZXx8XCJrZXl1cFwiPT09ZXx8XCJrZXlkb3duXCI9PT1lKXJldHVybiBuaChuZil9ZnVuY3Rpb24gbkMoZSx0KXtpZihcImNsaWNrXCI9PT1lKXJldHVybiBuaCh0KX1mdW5jdGlvbiBuXyhlLHQpe2lmKFwiaW5wdXRcIj09PWV8fFwiY2hhbmdlXCI9PT1lKXJldHVybiBuaCh0KX12YXIgbms9XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpmdW5jdGlvbihlLHQpe3JldHVybiBlPT09dCYmKDAhPT1lfHwxL2U9PTEvdCl8fGUhPWUmJnQhPXR9O2Z1bmN0aW9uIG5FKGUsdCl7aWYobmsoZSx0KSlyZXR1cm4hMDtpZihcIm9iamVjdFwiIT10eXBlb2YgZXx8bnVsbD09PWV8fFwib2JqZWN0XCIhPXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4hMTt2YXIgbj1PYmplY3Qua2V5cyhlKSxyPU9iamVjdC5rZXlzKHQpO2lmKG4ubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXTtpZighUS5jYWxsKHQsbyl8fCFuayhlW29dLHRbb10pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIG5qKGUpe2Zvcig7ZSYmZS5maXJzdENoaWxkOyllPWUuZmlyc3RDaGlsZDtyZXR1cm4gZX1mdW5jdGlvbiBuUyhlLHQpe3ZhciBuLHI9bmooZSk7Zm9yKGU9MDtyOyl7aWYoMz09PXIubm9kZVR5cGUpe2lmKG49ZStyLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZuPj10KXJldHVybntub2RlOnIsb2Zmc2V0OnQtZX07ZT1ufWU6e2Zvcig7cjspe2lmKHIubmV4dFNpYmxpbmcpe3I9ci5uZXh0U2libGluZzticmVhayBlfXI9ci5wYXJlbnROb2RlfXI9dm9pZCAwfXI9bmoocil9fWZ1bmN0aW9uIG5PKGUpe2U9bnVsbCE9ZSYmbnVsbCE9ZS5vd25lckRvY3VtZW50JiZudWxsIT1lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc/ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3OndpbmRvdztmb3IodmFyIHQ9ZTcoZS5kb2N1bWVudCk7dCBpbnN0YW5jZW9mIGUuSFRNTElGcmFtZUVsZW1lbnQ7KXt0cnl7dmFyIG49XCJzdHJpbmdcIj09dHlwZW9mIHQuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmfWNhdGNoKGUpe249ITF9aWYobillPXQuY29udGVudFdpbmRvdztlbHNlIGJyZWFrO3Q9ZTcoZS5kb2N1bWVudCl9cmV0dXJuIHR9ZnVuY3Rpb24gbkIoZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0JiYoXCJpbnB1dFwiPT09dCYmKFwidGV4dFwiPT09ZS50eXBlfHxcInNlYXJjaFwiPT09ZS50eXBlfHxcInRlbFwiPT09ZS50eXBlfHxcInVybFwiPT09ZS50eXBlfHxcInBhc3N3b3JkXCI9PT1lLnR5cGUpfHxcInRleHRhcmVhXCI9PT10fHxcInRydWVcIj09PWUuY29udGVudEVkaXRhYmxlKX12YXIgblA9dGsmJlwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxuST1udWxsLG5UPW51bGwsbno9bnVsbCxuRD0hMTtmdW5jdGlvbiBuTChlLHQsbil7dmFyIHI9bi53aW5kb3c9PT1uP24uZG9jdW1lbnQ6OT09PW4ubm9kZVR5cGU/bjpuLm93bmVyRG9jdW1lbnQ7bkR8fG51bGw9PW5JfHxuSSE9PWU3KHIpfHwocj1cInNlbGVjdGlvblN0YXJ0XCJpbihyPW5JKSYmbkIocik/e3N0YXJ0OnIuc2VsZWN0aW9uU3RhcnQsZW5kOnIuc2VsZWN0aW9uRW5kfTp7YW5jaG9yTm9kZToocj0oci5vd25lckRvY3VtZW50JiZyLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKCkpLmFuY2hvck5vZGUsYW5jaG9yT2Zmc2V0OnIuYW5jaG9yT2Zmc2V0LGZvY3VzTm9kZTpyLmZvY3VzTm9kZSxmb2N1c09mZnNldDpyLmZvY3VzT2Zmc2V0fSxueiYmbkUobnoscil8fChuej1yLDA8KHI9Y3QoblQsXCJvblNlbGVjdFwiKSkubGVuZ3RoJiYodD1uZXcgdEYoXCJvblNlbGVjdFwiLFwic2VsZWN0XCIsbnVsbCx0LG4pLGUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6cn0pLHQudGFyZ2V0PW5JKSkpfWZ1bmN0aW9uIG5OKGUsdCl7dmFyIG49e307cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJDYXNlKCksbltcIldlYmtpdFwiK2VdPVwid2Via2l0XCIrdCxuW1wiTW96XCIrZV09XCJtb3pcIit0LG59dmFyIG5SPXthbmltYXRpb25lbmQ6bk4oXCJBbmltYXRpb25cIixcIkFuaW1hdGlvbkVuZFwiKSxhbmltYXRpb25pdGVyYXRpb246bk4oXCJBbmltYXRpb25cIixcIkFuaW1hdGlvbkl0ZXJhdGlvblwiKSxhbmltYXRpb25zdGFydDpuTihcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uU3RhcnRcIiksdHJhbnNpdGlvbnJ1bjpuTihcIlRyYW5zaXRpb25cIixcIlRyYW5zaXRpb25SdW5cIiksdHJhbnNpdGlvbnN0YXJ0Om5OKFwiVHJhbnNpdGlvblwiLFwiVHJhbnNpdGlvblN0YXJ0XCIpLHRyYW5zaXRpb25jYW5jZWw6bk4oXCJUcmFuc2l0aW9uXCIsXCJUcmFuc2l0aW9uQ2FuY2VsXCIpLHRyYW5zaXRpb25lbmQ6bk4oXCJUcmFuc2l0aW9uXCIsXCJUcmFuc2l0aW9uRW5kXCIpfSxuTT17fSxuWj17fTtmdW5jdGlvbiBuVShlKXtpZihuTVtlXSlyZXR1cm4gbk1bZV07aWYoIW5SW2VdKXJldHVybiBlO3ZhciB0LG49blJbZV07Zm9yKHQgaW4gbilpZihuLmhhc093blByb3BlcnR5KHQpJiZ0IGluIG5aKXJldHVybiBuTVtlXT1uW3RdO3JldHVybiBlfXRrJiYoblo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZSxcIkFuaW1hdGlvbkV2ZW50XCJpbiB3aW5kb3d8fChkZWxldGUgblIuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbixkZWxldGUgblIuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixkZWxldGUgblIuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uKSxcIlRyYW5zaXRpb25FdmVudFwiaW4gd2luZG93fHxkZWxldGUgblIudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTt2YXIgbkY9blUoXCJhbmltYXRpb25lbmRcIiksbnE9blUoXCJhbmltYXRpb25pdGVyYXRpb25cIiksbkg9blUoXCJhbmltYXRpb25zdGFydFwiKSxuVj1uVShcInRyYW5zaXRpb25ydW5cIiksbiQ9blUoXCJ0cmFuc2l0aW9uc3RhcnRcIiksblc9blUoXCJ0cmFuc2l0aW9uY2FuY2VsXCIpLG5ZPW5VKFwidHJhbnNpdGlvbmVuZFwiKSxuSz1uZXcgTWFwLG5YPVwiYWJvcnQgYXV4Q2xpY2sgYmVmb3JlVG9nZ2xlIGNhbmNlbCBjYW5QbGF5IGNhblBsYXlUaHJvdWdoIGNsaWNrIGNsb3NlIGNvbnRleHRNZW51IGNvcHkgY3V0IGRyYWcgZHJhZ0VuZCBkcmFnRW50ZXIgZHJhZ0V4aXQgZHJhZ0xlYXZlIGRyYWdPdmVyIGRyYWdTdGFydCBkcm9wIGR1cmF0aW9uQ2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGdvdFBvaW50ZXJDYXB0dXJlIGlucHV0IGludmFsaWQga2V5RG93biBrZXlQcmVzcyBrZXlVcCBsb2FkIGxvYWRlZERhdGEgbG9hZGVkTWV0YWRhdGEgbG9hZFN0YXJ0IGxvc3RQb2ludGVyQ2FwdHVyZSBtb3VzZURvd24gbW91c2VNb3ZlIG1vdXNlT3V0IG1vdXNlT3ZlciBtb3VzZVVwIHBhc3RlIHBhdXNlIHBsYXkgcGxheWluZyBwb2ludGVyQ2FuY2VsIHBvaW50ZXJEb3duIHBvaW50ZXJNb3ZlIHBvaW50ZXJPdXQgcG9pbnRlck92ZXIgcG9pbnRlclVwIHByb2dyZXNzIHJhdGVDaGFuZ2UgcmVzZXQgcmVzaXplIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VibWl0IHN1c3BlbmQgdGltZVVwZGF0ZSB0b3VjaENhbmNlbCB0b3VjaEVuZCB0b3VjaFN0YXJ0IHZvbHVtZUNoYW5nZSBzY3JvbGwgdG9nZ2xlIHRvdWNoTW92ZSB3YWl0aW5nIHdoZWVsXCIuc3BsaXQoXCIgXCIpO2Z1bmN0aW9uIG5HKGUsdCl7bksuc2V0KGUsdCksZUcodCxbZV0pfW5YLnB1c2goXCJzY3JvbGxFbmRcIik7dmFyIG5RPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcG9ydEVycm9yP3JlcG9ydEVycm9yOmZ1bmN0aW9uKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5FcnJvckV2ZW50KXt2YXIgdD1uZXcgd2luZG93LkVycm9yRXZlbnQoXCJlcnJvclwiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsbWVzc2FnZTpcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJlwic3RyaW5nXCI9PXR5cGVvZiBlLm1lc3NhZ2U/U3RyaW5nKGUubWVzc2FnZSk6U3RyaW5nKGUpLGVycm9yOmV9KTtpZighd2luZG93LmRpc3BhdGNoRXZlbnQodCkpcmV0dXJufWVsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHByb2Nlc3MuZW1pdClyZXR1cm4gdm9pZCBwcm9jZXNzLmVtaXQoXCJ1bmNhdWdodEV4Y2VwdGlvblwiLGUpO2NvbnNvbGUuZXJyb3IoZSl9LG5KPVtdLG4wPTAsbjE9MDtmdW5jdGlvbiBuMigpe2Zvcih2YXIgZT1uMCx0PW4xPW4wPTA7dDxlOyl7dmFyIG49bkpbdF07bkpbdCsrXT1udWxsO3ZhciByPW5KW3RdO25KW3QrK109bnVsbDt2YXIgbz1uSlt0XTtuSlt0KytdPW51bGw7dmFyIGE9bkpbdF07aWYobkpbdCsrXT1udWxsLG51bGwhPT1yJiZudWxsIT09byl7dmFyIGk9ci5wZW5kaW5nO251bGw9PT1pP28ubmV4dD1vOihvLm5leHQ9aS5uZXh0LGkubmV4dD1vKSxyLnBlbmRpbmc9b30wIT09YSYmbjYobixvLGEpfX1mdW5jdGlvbiBuNChlLHQsbixyKXtuSltuMCsrXT1lLG5KW24wKytdPXQsbkpbbjArK109bixuSltuMCsrXT1yLG4xfD1yLGUubGFuZXN8PXIsbnVsbCE9PShlPWUuYWx0ZXJuYXRlKSYmKGUubGFuZXN8PXIpfWZ1bmN0aW9uIG41KGUsdCxuLHIpe3JldHVybiBuNChlLHQsbixyKSxuOShlKX1mdW5jdGlvbiBuMyhlLHQpe3JldHVybiBuNChlLG51bGwsbnVsbCx0KSxuOShlKX1mdW5jdGlvbiBuNihlLHQsbil7ZS5sYW5lc3w9bjt2YXIgcj1lLmFsdGVybmF0ZTtudWxsIT09ciYmKHIubGFuZXN8PW4pO2Zvcih2YXIgbz0hMSxhPWUucmV0dXJuO251bGwhPT1hOylhLmNoaWxkTGFuZXN8PW4sbnVsbCE9PShyPWEuYWx0ZXJuYXRlKSYmKHIuY2hpbGRMYW5lc3w9biksMjI9PT1hLnRhZyYmKG51bGw9PT0oZT1hLnN0YXRlTm9kZSl8fDEmZS5fdmlzaWJpbGl0eXx8KG89ITApKSxlPWEsYT1hLnJldHVybjtyZXR1cm4gMz09PWUudGFnPyhhPWUuc3RhdGVOb2RlLG8mJm51bGwhPT10JiYobz0zMS1lbShuKSxudWxsPT09KHI9KGU9YS5oaWRkZW5VcGRhdGVzKVtvXSk/ZVtvXT1bdF06ci5wdXNoKHQpLHQubGFuZT0weDIwMDAwMDAwfG4pLGEpOm51bGx9ZnVuY3Rpb24gbjkoZSl7aWYoNTA8c3QpdGhyb3cgc3Q9MCxzbj1udWxsLEVycm9yKGwoMTg1KSk7Zm9yKHZhciB0PWUucmV0dXJuO251bGwhPT10Oyl0PShlPXQpLnJldHVybjtyZXR1cm4gMz09PWUudGFnP2Uuc3RhdGVOb2RlOm51bGx9dmFyIG44PXt9O2Z1bmN0aW9uIG43KGUsdCxuLHIpe3RoaXMudGFnPWUsdGhpcy5rZXk9bix0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsLHRoaXMuaW5kZXg9MCx0aGlzLnJlZkNsZWFudXA9dGhpcy5yZWY9bnVsbCx0aGlzLnBlbmRpbmdQcm9wcz10LHRoaXMuZGVwZW5kZW5jaWVzPXRoaXMubWVtb2l6ZWRTdGF0ZT10aGlzLnVwZGF0ZVF1ZXVlPXRoaXMubWVtb2l6ZWRQcm9wcz1udWxsLHRoaXMubW9kZT1yLHRoaXMuc3VidHJlZUZsYWdzPXRoaXMuZmxhZ3M9MCx0aGlzLmRlbGV0aW9ucz1udWxsLHRoaXMuY2hpbGRMYW5lcz10aGlzLmxhbmVzPTAsdGhpcy5hbHRlcm5hdGU9bnVsbH1mdW5jdGlvbiByZShlLHQsbixyKXtyZXR1cm4gbmV3IG43KGUsdCxuLHIpfWZ1bmN0aW9uIHJ0KGUpe3JldHVybiEoIShlPWUucHJvdG90eXBlKXx8IWUuaXNSZWFjdENvbXBvbmVudCl9ZnVuY3Rpb24gcm4oZSx0KXt2YXIgbj1lLmFsdGVybmF0ZTtyZXR1cm4gbnVsbD09PW4/KChuPXJlKGUudGFnLHQsZS5rZXksZS5tb2RlKSkuZWxlbWVudFR5cGU9ZS5lbGVtZW50VHlwZSxuLnR5cGU9ZS50eXBlLG4uc3RhdGVOb2RlPWUuc3RhdGVOb2RlLG4uYWx0ZXJuYXRlPWUsZS5hbHRlcm5hdGU9bik6KG4ucGVuZGluZ1Byb3BzPXQsbi50eXBlPWUudHlwZSxuLmZsYWdzPTAsbi5zdWJ0cmVlRmxhZ3M9MCxuLmRlbGV0aW9ucz1udWxsKSxuLmZsYWdzPTB4M2UwMDAwMCZlLmZsYWdzLG4uY2hpbGRMYW5lcz1lLmNoaWxkTGFuZXMsbi5sYW5lcz1lLmxhbmVzLG4uY2hpbGQ9ZS5jaGlsZCxuLm1lbW9pemVkUHJvcHM9ZS5tZW1vaXplZFByb3BzLG4ubWVtb2l6ZWRTdGF0ZT1lLm1lbW9pemVkU3RhdGUsbi51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLHQ9ZS5kZXBlbmRlbmNpZXMsbi5kZXBlbmRlbmNpZXM9bnVsbD09PXQ/bnVsbDp7bGFuZXM6dC5sYW5lcyxmaXJzdENvbnRleHQ6dC5maXJzdENvbnRleHR9LG4uc2libGluZz1lLnNpYmxpbmcsbi5pbmRleD1lLmluZGV4LG4ucmVmPWUucmVmLG4ucmVmQ2xlYW51cD1lLnJlZkNsZWFudXAsbn1mdW5jdGlvbiBycihlLHQpe2UuZmxhZ3MmPTB4M2UwMDAwMjt2YXIgbj1lLmFsdGVybmF0ZTtyZXR1cm4gbnVsbD09PW4/KGUuY2hpbGRMYW5lcz0wLGUubGFuZXM9dCxlLmNoaWxkPW51bGwsZS5zdWJ0cmVlRmxhZ3M9MCxlLm1lbW9pemVkUHJvcHM9bnVsbCxlLm1lbW9pemVkU3RhdGU9bnVsbCxlLnVwZGF0ZVF1ZXVlPW51bGwsZS5kZXBlbmRlbmNpZXM9bnVsbCxlLnN0YXRlTm9kZT1udWxsKTooZS5jaGlsZExhbmVzPW4uY2hpbGRMYW5lcyxlLmxhbmVzPW4ubGFuZXMsZS5jaGlsZD1uLmNoaWxkLGUuc3VidHJlZUZsYWdzPTAsZS5kZWxldGlvbnM9bnVsbCxlLm1lbW9pemVkUHJvcHM9bi5tZW1vaXplZFByb3BzLGUubWVtb2l6ZWRTdGF0ZT1uLm1lbW9pemVkU3RhdGUsZS51cGRhdGVRdWV1ZT1uLnVwZGF0ZVF1ZXVlLGUudHlwZT1uLnR5cGUsZS5kZXBlbmRlbmNpZXM9bnVsbD09PSh0PW4uZGVwZW5kZW5jaWVzKT9udWxsOntsYW5lczp0LmxhbmVzLGZpcnN0Q29udGV4dDp0LmZpcnN0Q29udGV4dH0pLGV9ZnVuY3Rpb24gcm8oZSx0LG4scixvLGEpe3ZhciBpPTA7aWYocj1lLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpcnQoZSkmJihpPTEpO2Vsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpaT0hZnVuY3Rpb24oZSx0LG4pe2lmKDE9PT1ufHxudWxsIT10Lml0ZW1Qcm9wKXJldHVybiExO3N3aXRjaChlKXtjYXNlXCJtZXRhXCI6Y2FzZVwidGl0bGVcIjpyZXR1cm4hMDtjYXNlXCJzdHlsZVwiOmlmKFwic3RyaW5nXCIhPXR5cGVvZiB0LnByZWNlZGVuY2V8fFwic3RyaW5nXCIhPXR5cGVvZiB0LmhyZWZ8fFwiXCI9PT10LmhyZWYpYnJlYWs7cmV0dXJuITA7Y2FzZVwibGlua1wiOmlmKFwic3RyaW5nXCIhPXR5cGVvZiB0LnJlbHx8XCJzdHJpbmdcIiE9dHlwZW9mIHQuaHJlZnx8XCJcIj09PXQuaHJlZnx8dC5vbkxvYWR8fHQub25FcnJvcilicmVhaztpZihcInN0eWxlc2hlZXRcIj09PXQucmVsKXJldHVybiBlPXQuZGlzYWJsZWQsXCJzdHJpbmdcIj09dHlwZW9mIHQucHJlY2VkZW5jZSYmbnVsbD09ZTtyZXR1cm4hMDtjYXNlXCJzY3JpcHRcIjppZih0LmFzeW5jJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LmFzeW5jJiZcInN5bWJvbFwiIT10eXBlb2YgdC5hc3luYyYmIXQub25Mb2FkJiYhdC5vbkVycm9yJiZ0LnNyYyYmXCJzdHJpbmdcIj09dHlwZW9mIHQuc3JjKXJldHVybiEwfXJldHVybiExfShlLG4sWi5jdXJyZW50KT9cImh0bWxcIj09PWV8fFwiaGVhZFwiPT09ZXx8XCJib2R5XCI9PT1lPzI3OjU6MjY7ZWxzZSBlOnN3aXRjaChlKXtjYXNlIEU6cmV0dXJuKGU9cmUoMzEsbix0LG8pKS5lbGVtZW50VHlwZT1FLGUubGFuZXM9YSxlO2Nhc2UgZzpyZXR1cm4gcmEobi5jaGlsZHJlbixvLGEsdCk7Y2FzZSB5Omk9OCxvfD0yNDticmVhaztjYXNlIHY6cmV0dXJuKGU9cmUoMTIsbix0LDJ8bykpLmVsZW1lbnRUeXBlPXYsZS5sYW5lcz1hLGU7Y2FzZSB3OnJldHVybihlPXJlKDEzLG4sdCxvKSkuZWxlbWVudFR5cGU9dyxlLmxhbmVzPWEsZTtjYXNlIEM6cmV0dXJuKGU9cmUoMTksbix0LG8pKS5lbGVtZW50VHlwZT1DLGUubGFuZXM9YSxlO2RlZmF1bHQ6aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIEE6aT0xMDticmVhayBlO2Nhc2UgYjppPTk7YnJlYWsgZTtjYXNlIHg6aT0xMTticmVhayBlO2Nhc2UgXzppPTE0O2JyZWFrIGU7Y2FzZSBrOmk9MTYscj1udWxsO2JyZWFrIGV9aT0yOSxuPUVycm9yKGwoMTMwLG51bGw9PT1lP1wibnVsbFwiOnR5cGVvZiBlLFwiXCIpKSxyPW51bGx9cmV0dXJuKHQ9cmUoaSxuLHQsbykpLmVsZW1lbnRUeXBlPWUsdC50eXBlPXIsdC5sYW5lcz1hLHR9ZnVuY3Rpb24gcmEoZSx0LG4scil7cmV0dXJuKGU9cmUoNyxlLHIsdCkpLmxhbmVzPW4sZX1mdW5jdGlvbiByaShlLHQsbil7cmV0dXJuKGU9cmUoNixlLG51bGwsdCkpLmxhbmVzPW4sZX1mdW5jdGlvbiBybChlKXt2YXIgdD1yZSgxOCxudWxsLG51bGwsMCk7cmV0dXJuIHQuc3RhdGVOb2RlPWUsdH1mdW5jdGlvbiBycyhlLHQsbil7cmV0dXJuKHQ9cmUoNCxudWxsIT09ZS5jaGlsZHJlbj9lLmNoaWxkcmVuOltdLGUua2V5LHQpKS5sYW5lcz1uLHQuc3RhdGVOb2RlPXtjb250YWluZXJJbmZvOmUuY29udGFpbmVySW5mbyxwZW5kaW5nQ2hpbGRyZW46bnVsbCxpbXBsZW1lbnRhdGlvbjplLmltcGxlbWVudGF0aW9ufSx0fXZhciByYz1uZXcgV2Vha01hcDtmdW5jdGlvbiBydShlLHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSl7dmFyIG49cmMuZ2V0KGUpO3JldHVybiB2b2lkIDAhPT1uP246KHQ9e3ZhbHVlOmUsc291cmNlOnQsc3RhY2s6Ryh0KX0scmMuc2V0KGUsdCksdCl9cmV0dXJue3ZhbHVlOmUsc291cmNlOnQsc3RhY2s6Ryh0KX19dmFyIHJkPVtdLHJmPTAscnA9bnVsbCxyaD0wLHJtPVtdLHJnPTAscnk9bnVsbCxydj0xLHJiPVwiXCI7ZnVuY3Rpb24gckEoZSx0KXtyZFtyZisrXT1yaCxyZFtyZisrXT1ycCxycD1lLHJoPXR9ZnVuY3Rpb24gcngoZSx0LG4pe3JtW3JnKytdPXJ2LHJtW3JnKytdPXJiLHJtW3JnKytdPXJ5LHJ5PWU7dmFyIHI9cnY7ZT1yYjt2YXIgbz0zMi1lbShyKS0xO3ImPX4oMTw8byksbis9MTt2YXIgYT0zMi1lbSh0KStvO2lmKDMwPGEpe3ZhciBpPW8tbyU1O2E9KHImKDE8PGkpLTEpLnRvU3RyaW5nKDMyKSxyPj49aSxvLT1pLHJ2PTE8PDMyLWVtKHQpK298bjw8b3xyLHJiPWErZX1lbHNlIHJ2PTE8PGF8bjw8b3xyLHJiPWV9ZnVuY3Rpb24gcncoZSl7bnVsbCE9PWUucmV0dXJuJiYockEoZSwxKSxyeChlLDEsMCkpfWZ1bmN0aW9uIHJDKGUpe2Zvcig7ZT09PXJwOylycD1yZFstLXJmXSxyZFtyZl09bnVsbCxyaD1yZFstLXJmXSxyZFtyZl09bnVsbDtmb3IoO2U9PT1yeTspcnk9cm1bLS1yZ10scm1bcmddPW51bGwscmI9cm1bLS1yZ10scm1bcmddPW51bGwscnY9cm1bLS1yZ10scm1bcmddPW51bGx9ZnVuY3Rpb24gcl8oZSx0KXtybVtyZysrXT1ydixybVtyZysrXT1yYixybVtyZysrXT1yeSxydj10LmlkLHJiPXQub3ZlcmZsb3cscnk9ZX12YXIgcms9bnVsbCxyRT1udWxsLHJqPSExLHJTPW51bGwsck89ITEsckI9RXJyb3IobCg1MTkpKTtmdW5jdGlvbiByUChlKXt2YXIgdD1FcnJvcihsKDQxOCwxPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdP1widGV4dFwiOlwiSFRNTFwiLFwiXCIpKTt0aHJvdyByTihydSh0LGUpKSxyQn1mdW5jdGlvbiBySShlKXt2YXIgdD1lLnN0YXRlTm9kZSxuPWUudHlwZSxyPWUubWVtb2l6ZWRQcm9wcztzd2l0Y2godFtlRF09ZSx0W2VMXT1yLG4pe2Nhc2VcImRpYWxvZ1wiOnM1KFwiY2FuY2VsXCIsdCksczUoXCJjbG9zZVwiLHQpO2JyZWFrO2Nhc2VcImlmcmFtZVwiOmNhc2VcIm9iamVjdFwiOmNhc2VcImVtYmVkXCI6czUoXCJsb2FkXCIsdCk7YnJlYWs7Y2FzZVwidmlkZW9cIjpjYXNlXCJhdWRpb1wiOmZvcihuPTA7bjxzMS5sZW5ndGg7bisrKXM1KHMxW25dLHQpO2JyZWFrO2Nhc2VcInNvdXJjZVwiOnM1KFwiZXJyb3JcIix0KTticmVhaztjYXNlXCJpbWdcIjpjYXNlXCJpbWFnZVwiOmNhc2VcImxpbmtcIjpzNShcImVycm9yXCIsdCksczUoXCJsb2FkXCIsdCk7YnJlYWs7Y2FzZVwiZGV0YWlsc1wiOnM1KFwidG9nZ2xlXCIsdCk7YnJlYWs7Y2FzZVwiaW5wdXRcIjpzNShcImludmFsaWRcIix0KSx0cih0LHIudmFsdWUsci5kZWZhdWx0VmFsdWUsci5jaGVja2VkLHIuZGVmYXVsdENoZWNrZWQsci50eXBlLHIubmFtZSwhMCk7YnJlYWs7Y2FzZVwic2VsZWN0XCI6czUoXCJpbnZhbGlkXCIsdCk7YnJlYWs7Y2FzZVwidGV4dGFyZWFcIjpzNShcImludmFsaWRcIix0KSx0bCh0LHIudmFsdWUsci5kZWZhdWx0VmFsdWUsci5jaGlsZHJlbil9XCJzdHJpbmdcIiE9dHlwZW9mKG49ci5jaGlsZHJlbikmJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZcImJpZ2ludFwiIT10eXBlb2Ygbnx8dC50ZXh0Q29udGVudD09PVwiXCIrbnx8ITA9PT1yLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZ3x8Y2wodC50ZXh0Q29udGVudCxuKT8obnVsbCE9ci5wb3BvdmVyJiYoczUoXCJiZWZvcmV0b2dnbGVcIix0KSxzNShcInRvZ2dsZVwiLHQpKSxudWxsIT1yLm9uU2Nyb2xsJiZzNShcInNjcm9sbFwiLHQpLG51bGwhPXIub25TY3JvbGxFbmQmJnM1KFwic2Nyb2xsZW5kXCIsdCksbnVsbCE9ci5vbkNsaWNrJiYodC5vbmNsaWNrPXRnKSx0PSEwKTp0PSExLHR8fHJQKGUsITApfWZ1bmN0aW9uIHJUKGUpe2Zvcihyaz1lLnJldHVybjtyazspc3dpdGNoKHJrLnRhZyl7Y2FzZSA1OmNhc2UgMzE6Y2FzZSAxMzpyTz0hMTtyZXR1cm47Y2FzZSAyNzpjYXNlIDM6ck89ITA7cmV0dXJuO2RlZmF1bHQ6cms9cmsucmV0dXJufX1mdW5jdGlvbiByeihlKXtpZihlIT09cmspcmV0dXJuITE7aWYoIXJqKXJldHVybiByVChlKSxyaj0hMCwhMTt2YXIgdCxuPWUudGFnO2lmKCh0PTMhPT1uJiYyNyE9PW4pJiYoKHQ9NT09PW4pJiYodD1cImZvcm1cIj09PSh0PWUudHlwZSl8fFwiYnV0dG9uXCI9PT10fHxjZyhlLnR5cGUsZS5tZW1vaXplZFByb3BzKSksdD0hdCksdCYmckUmJnJQKGUpLHJUKGUpLDEzPT09bil7aWYoIShlPW51bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpP2UuZGVoeWRyYXRlZDpudWxsKSl0aHJvdyBFcnJvcihsKDMxNykpO3JFPWNJKGUpfWVsc2UgaWYoMzE9PT1uKXtpZighKGU9bnVsbCE9PShlPWUubWVtb2l6ZWRTdGF0ZSk/ZS5kZWh5ZHJhdGVkOm51bGwpKXRocm93IEVycm9yKGwoMzE3KSk7ckU9Y0koZSl9ZWxzZSAyNz09PW4/KG49ckUsY0MoZS50eXBlKT8oZT1jUCxjUD1udWxsLHJFPWUpOnJFPW4pOnJFPXJrP2NCKGUuc3RhdGVOb2RlLm5leHRTaWJsaW5nKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIHJEKCl7ckU9cms9bnVsbCxyaj0hMX1mdW5jdGlvbiByTCgpe3ZhciBlPXJTO3JldHVybiBudWxsIT09ZSYmKG51bGw9PT1sUT9sUT1lOmxRLnB1c2guYXBwbHkobFEsZSksclM9bnVsbCksZX1mdW5jdGlvbiByTihlKXtudWxsPT09clM/clM9W2VdOnJTLnB1c2goZSl9dmFyIHJSPU4obnVsbCksck09bnVsbCxyWj1udWxsO2Z1bmN0aW9uIHJVKGUsdCxuKXtNKHJSLHQuX2N1cnJlbnRWYWx1ZSksdC5fY3VycmVudFZhbHVlPW59ZnVuY3Rpb24gckYoZSl7ZS5fY3VycmVudFZhbHVlPXJSLmN1cnJlbnQsUihyUil9ZnVuY3Rpb24gcnEoZSx0LG4pe2Zvcig7bnVsbCE9PWU7KXt2YXIgcj1lLmFsdGVybmF0ZTtpZigoZS5jaGlsZExhbmVzJnQpIT09dD8oZS5jaGlsZExhbmVzfD10LG51bGwhPT1yJiYoci5jaGlsZExhbmVzfD10KSk6bnVsbCE9PXImJihyLmNoaWxkTGFuZXMmdCkhPT10JiYoci5jaGlsZExhbmVzfD10KSxlPT09bilicmVhaztlPWUucmV0dXJufX1mdW5jdGlvbiBySChlLHQsbixyKXt2YXIgbz1lLmNoaWxkO2ZvcihudWxsIT09byYmKG8ucmV0dXJuPWUpO251bGwhPT1vOyl7dmFyIGE9by5kZXBlbmRlbmNpZXM7aWYobnVsbCE9PWEpe3ZhciBpPW8uY2hpbGQ7YT1hLmZpcnN0Q29udGV4dDtlOmZvcig7bnVsbCE9PWE7KXt2YXIgcz1hO2E9bztmb3IodmFyIGM9MDtjPHQubGVuZ3RoO2MrKylpZihzLmNvbnRleHQ9PT10W2NdKXthLmxhbmVzfD1uLG51bGwhPT0ocz1hLmFsdGVybmF0ZSkmJihzLmxhbmVzfD1uKSxycShhLnJldHVybixuLGUpLHJ8fChpPW51bGwpO2JyZWFrIGV9YT1zLm5leHR9fWVsc2UgaWYoMTg9PT1vLnRhZyl7aWYobnVsbD09PShpPW8ucmV0dXJuKSl0aHJvdyBFcnJvcihsKDM0MSkpO2kubGFuZXN8PW4sbnVsbCE9PShhPWkuYWx0ZXJuYXRlKSYmKGEubGFuZXN8PW4pLHJxKGksbixlKSxpPW51bGx9ZWxzZSBpPW8uY2hpbGQ7aWYobnVsbCE9PWkpaS5yZXR1cm49bztlbHNlIGZvcihpPW87bnVsbCE9PWk7KXtpZihpPT09ZSl7aT1udWxsO2JyZWFrfWlmKG51bGwhPT0obz1pLnNpYmxpbmcpKXtvLnJldHVybj1pLnJldHVybixpPW87YnJlYWt9aT1pLnJldHVybn1vPWl9fWZ1bmN0aW9uIHJWKGUsdCxuLHIpe2U9bnVsbDtmb3IodmFyIG89dCxhPSExO251bGwhPT1vOyl7aWYoIWEpe2lmKDAhPSg1MjQyODgmby5mbGFncykpYT0hMDtlbHNlIGlmKDAhPSgyNjIxNDQmby5mbGFncykpYnJlYWt9aWYoMTA9PT1vLnRhZyl7dmFyIGk9by5hbHRlcm5hdGU7aWYobnVsbD09PWkpdGhyb3cgRXJyb3IobCgzODcpKTtpZihudWxsIT09KGk9aS5tZW1vaXplZFByb3BzKSl7dmFyIHM9by50eXBlO25rKG8ucGVuZGluZ1Byb3BzLnZhbHVlLGkudmFsdWUpfHwobnVsbCE9PWU/ZS5wdXNoKHMpOmU9W3NdKX19ZWxzZSBpZihvPT09cS5jdXJyZW50KXtpZihudWxsPT09KGk9by5hbHRlcm5hdGUpKXRocm93IEVycm9yKGwoMzg3KSk7aS5tZW1vaXplZFN0YXRlLm1lbW9pemVkU3RhdGUhPT1vLm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSYmKG51bGwhPT1lP2UucHVzaChjOSk6ZT1bYzldKX1vPW8ucmV0dXJufW51bGwhPT1lJiZySCh0LGUsbixyKSx0LmZsYWdzfD0yNjIxNDR9ZnVuY3Rpb24gciQoZSl7Zm9yKGU9ZS5maXJzdENvbnRleHQ7bnVsbCE9PWU7KXtpZighbmsoZS5jb250ZXh0Ll9jdXJyZW50VmFsdWUsZS5tZW1vaXplZFZhbHVlKSlyZXR1cm4hMDtlPWUubmV4dH1yZXR1cm4hMX1mdW5jdGlvbiByVyhlKXtyTT1lLHJaPW51bGwsbnVsbCE9PShlPWUuZGVwZW5kZW5jaWVzKSYmKGUuZmlyc3RDb250ZXh0PW51bGwpfWZ1bmN0aW9uIHJZKGUpe3JldHVybiByWChyTSxlKX1mdW5jdGlvbiBySyhlLHQpe3JldHVybiBudWxsPT09ck0mJnJXKGUpLHJYKGUsdCl9ZnVuY3Rpb24gclgoZSx0KXt2YXIgbj10Ll9jdXJyZW50VmFsdWU7aWYodD17Y29udGV4dDp0LG1lbW9pemVkVmFsdWU6bixuZXh0Om51bGx9LG51bGw9PT1yWil7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IobCgzMDgpKTtyWj10LGUuZGVwZW5kZW5jaWVzPXtsYW5lczowLGZpcnN0Q29udGV4dDp0fSxlLmZsYWdzfD01MjQyODh9ZWxzZSByWj1yWi5uZXh0PXQ7cmV0dXJuIG59dmFyIHJHPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBBYm9ydENvbnRyb2xsZXI/QWJvcnRDb250cm9sbGVyOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLnNpZ25hbD17YWJvcnRlZDohMSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKHQsbil7ZS5wdXNoKG4pfX07dGhpcy5hYm9ydD1mdW5jdGlvbigpe3QuYWJvcnRlZD0hMCxlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pfX0sclE9by51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLHJKPW8udW5zdGFibGVfTm9ybWFsUHJpb3JpdHkscjA9eyQkdHlwZW9mOkEsQ29uc3VtZXI6bnVsbCxQcm92aWRlcjpudWxsLF9jdXJyZW50VmFsdWU6bnVsbCxfY3VycmVudFZhbHVlMjpudWxsLF90aHJlYWRDb3VudDowfTtmdW5jdGlvbiByMSgpe3JldHVybntjb250cm9sbGVyOm5ldyByRyxkYXRhOm5ldyBNYXAscmVmQ291bnQ6MH19ZnVuY3Rpb24gcjIoZSl7ZS5yZWZDb3VudC0tLDA9PT1lLnJlZkNvdW50JiZyUShySixmdW5jdGlvbigpe2UuY29udHJvbGxlci5hYm9ydCgpfSl9dmFyIHI0PW51bGwscjU9MCxyMz0wLHI2PW51bGw7ZnVuY3Rpb24gcjkoKXtpZigwPT0tLXI1JiZudWxsIT09cjQpe251bGwhPT1yNiYmKHI2LnN0YXR1cz1cImZ1bGZpbGxlZFwiKTt2YXIgZT1yNDtyND1udWxsLHIzPTAscjY9bnVsbDtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKykoMCxlW3RdKSgpfX12YXIgcjg9SS5TO0kuUz1mdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC50aGVuJiZmdW5jdGlvbihlLHQpe2lmKG51bGw9PT1yNCl7dmFyIG49cjQ9W107cjU9MCxyMz1zWCgpLHI2PXtzdGF0dXM6XCJwZW5kaW5nXCIsdmFsdWU6dm9pZCAwLHRoZW46ZnVuY3Rpb24oZSl7bi5wdXNoKGUpfX19cjUrKyx0LnRoZW4ocjkscjkpfSgwLHQpLG51bGwhPT1yOCYmcjgoZSx0KX07dmFyIHI3PU4obnVsbCk7ZnVuY3Rpb24gb2UoKXt2YXIgZT1yNy5jdXJyZW50O3JldHVybiBudWxsIT09ZT9lOmxMLnBvb2xlZENhY2hlfWZ1bmN0aW9uIG90KGUsdCl7bnVsbD09PXQ/TShyNyxyNy5jdXJyZW50KTpNKHI3LHQucG9vbCl9ZnVuY3Rpb24gb24oKXt2YXIgZT1vZSgpO3JldHVybiBudWxsPT09ZT9udWxsOntwYXJlbnQ6cjAuX2N1cnJlbnRWYWx1ZSxwb29sOmV9fXZhciBvcj1FcnJvcihsKDQ2MCkpLG9vPUVycm9yKGwoNDc0KSksb2E9RXJyb3IobCg1NDIpKSxvaT17dGhlbjpmdW5jdGlvbigpe319O2Z1bmN0aW9uIG9sKGUpe3JldHVyblwiZnVsZmlsbGVkXCI9PT0oZT1lLnN0YXR1cyl8fFwicmVqZWN0ZWRcIj09PWV9ZnVuY3Rpb24gb3MoZSx0LG4pe3N3aXRjaCh2b2lkIDA9PT0obj1lW25dKT9lLnB1c2godCk6biE9PXQmJih0LnRoZW4odGcsdGcpLHQ9biksdC5zdGF0dXMpe2Nhc2VcImZ1bGZpbGxlZFwiOnJldHVybiB0LnZhbHVlO2Nhc2VcInJlamVjdGVkXCI6dGhyb3cgb2YoZT10LnJlYXNvbiksZTtkZWZhdWx0OmlmKFwic3RyaW5nXCI9PXR5cGVvZiB0LnN0YXR1cyl0LnRoZW4odGcsdGcpO2Vsc2V7aWYobnVsbCE9PShlPWxMKSYmMTAwPGUuc2hlbGxTdXNwZW5kQ291bnRlcil0aHJvdyBFcnJvcihsKDQ4MikpOyhlPXQpLnN0YXR1cz1cInBlbmRpbmdcIixlLnRoZW4oZnVuY3Rpb24oZSl7aWYoXCJwZW5kaW5nXCI9PT10LnN0YXR1cyl7dmFyIG49dDtuLnN0YXR1cz1cImZ1bGZpbGxlZFwiLG4udmFsdWU9ZX19LGZ1bmN0aW9uKGUpe2lmKFwicGVuZGluZ1wiPT09dC5zdGF0dXMpe3ZhciBuPXQ7bi5zdGF0dXM9XCJyZWplY3RlZFwiLG4ucmVhc29uPWV9fSl9c3dpdGNoKHQuc3RhdHVzKXtjYXNlXCJmdWxmaWxsZWRcIjpyZXR1cm4gdC52YWx1ZTtjYXNlXCJyZWplY3RlZFwiOnRocm93IG9mKGU9dC5yZWFzb24pLGV9dGhyb3cgb3U9dCxvcn19ZnVuY3Rpb24gb2MoZSl7dHJ5e3JldHVybigwLGUuX2luaXQpKGUuX3BheWxvYWQpfWNhdGNoKGUpe2lmKG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aGVuKXRocm93IG91PWUsb3I7dGhyb3cgZX19dmFyIG91PW51bGw7ZnVuY3Rpb24gb2QoKXtpZihudWxsPT09b3UpdGhyb3cgRXJyb3IobCg0NTkpKTt2YXIgZT1vdTtyZXR1cm4gb3U9bnVsbCxlfWZ1bmN0aW9uIG9mKGUpe2lmKGU9PT1vcnx8ZT09PW9hKXRocm93IEVycm9yKGwoNDgzKSl9dmFyIG9wPW51bGwsb2g9MDtmdW5jdGlvbiBvbShlKXt2YXIgdD1vaDtyZXR1cm4gb2grPTEsbnVsbD09PW9wJiYob3A9W10pLG9zKG9wLGUsdCl9ZnVuY3Rpb24gb2coZSx0KXtlLnJlZj12b2lkIDAhPT0odD10LnByb3BzLnJlZik/dDpudWxsfWZ1bmN0aW9uIG95KGUsdCl7aWYodC4kJHR5cGVvZj09PXApdGhyb3cgRXJyb3IobCg1MjUpKTt0aHJvdyBFcnJvcihsKDMxLFwiW29iamVjdCBPYmplY3RdXCI9PT0oZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpP1wib2JqZWN0IHdpdGgga2V5cyB7XCIrT2JqZWN0LmtleXModCkuam9pbihcIiwgXCIpK1wifVwiOmUpKX1mdW5jdGlvbiBvdihlKXtmdW5jdGlvbiB0KHQsbil7aWYoZSl7dmFyIHI9dC5kZWxldGlvbnM7bnVsbD09PXI/KHQuZGVsZXRpb25zPVtuXSx0LmZsYWdzfD0xNik6ci5wdXNoKG4pfX1mdW5jdGlvbiBuKG4scil7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKDtudWxsIT09cjspdChuLHIpLHI9ci5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PW5ldyBNYXA7bnVsbCE9PWU7KW51bGwhPT1lLmtleT90LnNldChlLmtleSxlKTp0LnNldChlLmluZGV4LGUpLGU9ZS5zaWJsaW5nO3JldHVybiB0fWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4oZT1ybihlLHQpKS5pbmRleD0wLGUuc2libGluZz1udWxsLGV9ZnVuY3Rpb24gYSh0LG4scil7cmV0dXJuKHQuaW5kZXg9cixlKT9udWxsIT09KHI9dC5hbHRlcm5hdGUpPyhyPXIuaW5kZXgpPG4/KHQuZmxhZ3N8PTB4NDAwMDAwMixuKTpyOih0LmZsYWdzfD0weDQwMDAwMDIsbik6KHQuZmxhZ3N8PTEwNDg1NzYsbil9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZSYmbnVsbD09PXQuYWx0ZXJuYXRlJiYodC5mbGFnc3w9MHg0MDAwMDAyKSx0fWZ1bmN0aW9uIHMoZSx0LG4scil7cmV0dXJuIG51bGw9PT10fHw2IT09dC50YWc/KHQ9cmkobixlLm1vZGUscikpLnJldHVybj1lOih0PW8odCxuKSkucmV0dXJuPWUsdH1mdW5jdGlvbiBjKGUsdCxuLHIpe3ZhciBhPW4udHlwZTtyZXR1cm4gYT09PWc/ZChlLHQsbi5wcm9wcy5jaGlsZHJlbixyLG4ua2V5KToobnVsbCE9PXQmJih0LmVsZW1lbnRUeXBlPT09YXx8XCJvYmplY3RcIj09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09ayYmb2MoYSk9PT10LnR5cGUpP29nKHQ9byh0LG4ucHJvcHMpLG4pOm9nKHQ9cm8obi50eXBlLG4ua2V5LG4ucHJvcHMsbnVsbCxlLm1vZGUsciksbiksdC5yZXR1cm49ZSx0KX1mdW5jdGlvbiB1KGUsdCxuLHIpe3JldHVybiBudWxsPT09dHx8NCE9PXQudGFnfHx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvIT09bi5jb250YWluZXJJbmZvfHx0LnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiE9PW4uaW1wbGVtZW50YXRpb24/KHQ9cnMobixlLm1vZGUscikpLnJldHVybj1lOih0PW8odCxuLmNoaWxkcmVufHxbXSkpLnJldHVybj1lLHR9ZnVuY3Rpb24gZChlLHQsbixyLGEpe3JldHVybiBudWxsPT09dHx8NyE9PXQudGFnPyh0PXJhKG4sZS5tb2RlLHIsYSkpLnJldHVybj1lOih0PW8odCxuKSkucmV0dXJuPWUsdH1mdW5jdGlvbiBmKGUsdCxuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmXCJcIiE9PXR8fFwibnVtYmVyXCI9PXR5cGVvZiB0fHxcImJpZ2ludFwiPT10eXBlb2YgdClyZXR1cm4odD1yaShcIlwiK3QsZS5tb2RlLG4pKS5yZXR1cm49ZSx0O2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dCl7c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgaDpyZXR1cm4gb2cobj1ybyh0LnR5cGUsdC5rZXksdC5wcm9wcyxudWxsLGUubW9kZSxuKSx0KSxuLnJldHVybj1lLG47Y2FzZSBtOnJldHVybih0PXJzKHQsZS5tb2RlLG4pKS5yZXR1cm49ZSx0O2Nhc2UgazpyZXR1cm4gZihlLHQ9b2ModCksbil9aWYoUCh0KXx8Tyh0KSlyZXR1cm4odD1yYSh0LGUubW9kZSxuLG51bGwpKS5yZXR1cm49ZSx0O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQudGhlbilyZXR1cm4gZihlLG9tKHQpLG4pO2lmKHQuJCR0eXBlb2Y9PT1BKXJldHVybiBmKGUscksoZSx0KSxuKTtveShlLHQpfXJldHVybiBudWxsfWZ1bmN0aW9uIHAoZSx0LG4scil7dmFyIG89bnVsbCE9PXQ/dC5rZXk6bnVsbDtpZihcInN0cmluZ1wiPT10eXBlb2YgbiYmXCJcIiE9PW58fFwibnVtYmVyXCI9PXR5cGVvZiBufHxcImJpZ2ludFwiPT10eXBlb2YgbilyZXR1cm4gbnVsbCE9PW8/bnVsbDpzKGUsdCxcIlwiK24scik7aWYoXCJvYmplY3RcIj09dHlwZW9mIG4mJm51bGwhPT1uKXtzd2l0Y2gobi4kJHR5cGVvZil7Y2FzZSBoOnJldHVybiBuLmtleT09PW8/YyhlLHQsbixyKTpudWxsO2Nhc2UgbTpyZXR1cm4gbi5rZXk9PT1vP3UoZSx0LG4scik6bnVsbDtjYXNlIGs6cmV0dXJuIHAoZSx0LG49b2Mobikscil9aWYoUChuKXx8TyhuKSlyZXR1cm4gbnVsbCE9PW8/bnVsbDpkKGUsdCxuLHIsbnVsbCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50aGVuKXJldHVybiBwKGUsdCxvbShuKSxyKTtpZihuLiQkdHlwZW9mPT09QSlyZXR1cm4gcChlLHQscksoZSxuKSxyKTtveShlLG4pfXJldHVybiBudWxsfWZ1bmN0aW9uIHkoZSx0LG4scixvKXtpZihcInN0cmluZ1wiPT10eXBlb2YgciYmXCJcIiE9PXJ8fFwibnVtYmVyXCI9PXR5cGVvZiByfHxcImJpZ2ludFwiPT10eXBlb2YgcilyZXR1cm4gcyh0LGU9ZS5nZXQobil8fG51bGwsXCJcIityLG8pO2lmKFwib2JqZWN0XCI9PXR5cGVvZiByJiZudWxsIT09cil7c3dpdGNoKHIuJCR0eXBlb2Ype2Nhc2UgaDpyZXR1cm4gYyh0LGU9ZS5nZXQobnVsbD09PXIua2V5P246ci5rZXkpfHxudWxsLHIsbyk7Y2FzZSBtOnJldHVybiB1KHQsZT1lLmdldChudWxsPT09ci5rZXk/bjpyLmtleSl8fG51bGwscixvKTtjYXNlIGs6cmV0dXJuIHkoZSx0LG4scj1vYyhyKSxvKX1pZihQKHIpfHxPKHIpKXJldHVybiBkKHQsZT1lLmdldChuKXx8bnVsbCxyLG8sbnVsbCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygci50aGVuKXJldHVybiB5KGUsdCxuLG9tKHIpLG8pO2lmKHIuJCR0eXBlb2Y9PT1BKXJldHVybiB5KGUsdCxuLHJLKHQsciksbyk7b3kodCxyKX1yZXR1cm4gbnVsbH1yZXR1cm4gZnVuY3Rpb24ocyxjLHUsZCl7dHJ5e29oPTA7dmFyIHY9ZnVuY3Rpb24gcyhjLHUsZCx2KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZCYmbnVsbCE9PWQmJmQudHlwZT09PWcmJm51bGw9PT1kLmtleSYmKGQ9ZC5wcm9wcy5jaGlsZHJlbiksXCJvYmplY3RcIj09dHlwZW9mIGQmJm51bGwhPT1kKXtzd2l0Y2goZC4kJHR5cGVvZil7Y2FzZSBoOmU6e2Zvcih2YXIgYj1kLmtleTtudWxsIT09dTspe2lmKHUua2V5PT09Yil7aWYoKGI9ZC50eXBlKT09PWcpe2lmKDc9PT11LnRhZyl7bihjLHUuc2libGluZyksKHY9byh1LGQucHJvcHMuY2hpbGRyZW4pKS5yZXR1cm49YyxjPXY7YnJlYWsgZX19ZWxzZSBpZih1LmVsZW1lbnRUeXBlPT09Ynx8XCJvYmplY3RcIj09dHlwZW9mIGImJm51bGwhPT1iJiZiLiQkdHlwZW9mPT09ayYmb2MoYik9PT11LnR5cGUpe24oYyx1LnNpYmxpbmcpLG9nKHY9byh1LGQucHJvcHMpLGQpLHYucmV0dXJuPWMsYz12O2JyZWFrIGV9bihjLHUpO2JyZWFrfXQoYyx1KSx1PXUuc2libGluZ31kLnR5cGU9PT1nPyh2PXJhKGQucHJvcHMuY2hpbGRyZW4sYy5tb2RlLHYsZC5rZXkpKS5yZXR1cm49Yzoob2codj1ybyhkLnR5cGUsZC5rZXksZC5wcm9wcyxudWxsLGMubW9kZSx2KSxkKSx2LnJldHVybj1jKSxjPXZ9cmV0dXJuIGkoYyk7Y2FzZSBtOmU6e2ZvcihiPWQua2V5O251bGwhPT11Oyl7aWYodS5rZXk9PT1iKWlmKDQ9PT11LnRhZyYmdS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PWQuY29udGFpbmVySW5mbyYmdS5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT1kLmltcGxlbWVudGF0aW9uKXtuKGMsdS5zaWJsaW5nKSwodj1vKHUsZC5jaGlsZHJlbnx8W10pKS5yZXR1cm49YyxjPXY7YnJlYWsgZX1lbHNle24oYyx1KTticmVha310KGMsdSksdT11LnNpYmxpbmd9KHY9cnMoZCxjLm1vZGUsdikpLnJldHVybj1jLGM9dn1yZXR1cm4gaShjKTtjYXNlIGs6cmV0dXJuIHMoYyx1LGQ9b2MoZCksdil9aWYoUChkKSlyZXR1cm4gZnVuY3Rpb24obyxpLGwscyl7Zm9yKHZhciBjPW51bGwsdT1udWxsLGQ9aSxoPWk9MCxtPW51bGw7bnVsbCE9PWQmJmg8bC5sZW5ndGg7aCsrKXtkLmluZGV4Pmg/KG09ZCxkPW51bGwpOm09ZC5zaWJsaW5nO3ZhciBnPXAobyxkLGxbaF0scyk7aWYobnVsbD09PWcpe251bGw9PT1kJiYoZD1tKTticmVha31lJiZkJiZudWxsPT09Zy5hbHRlcm5hdGUmJnQobyxkKSxpPWEoZyxpLGgpLG51bGw9PT11P2M9Zzp1LnNpYmxpbmc9Zyx1PWcsZD1tfWlmKGg9PT1sLmxlbmd0aClyZXR1cm4gbihvLGQpLHJqJiZyQShvLGgpLGM7aWYobnVsbD09PWQpe2Zvcig7aDxsLmxlbmd0aDtoKyspbnVsbCE9PShkPWYobyxsW2hdLHMpKSYmKGk9YShkLGksaCksbnVsbD09PXU/Yz1kOnUuc2libGluZz1kLHU9ZCk7cmV0dXJuIHJqJiZyQShvLGgpLGN9Zm9yKGQ9cihkKTtoPGwubGVuZ3RoO2grKyludWxsIT09KG09eShkLG8saCxsW2hdLHMpKSYmKGUmJm51bGwhPT1tLmFsdGVybmF0ZSYmZC5kZWxldGUobnVsbD09PW0ua2V5P2g6bS5rZXkpLGk9YShtLGksaCksbnVsbD09PXU/Yz1tOnUuc2libGluZz1tLHU9bSk7cmV0dXJuIGUmJmQuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdChvLGUpfSkscmomJnJBKG8saCksY30oYyx1LGQsdik7aWYoTyhkKSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YoYj1PKGQpKSl0aHJvdyBFcnJvcihsKDE1MCkpO3JldHVybiBmdW5jdGlvbihvLGkscyxjKXtpZihudWxsPT1zKXRocm93IEVycm9yKGwoMTUxKSk7Zm9yKHZhciB1PW51bGwsZD1udWxsLGg9aSxtPWk9MCxnPW51bGwsdj1zLm5leHQoKTtudWxsIT09aCYmIXYuZG9uZTttKyssdj1zLm5leHQoKSl7aC5pbmRleD5tPyhnPWgsaD1udWxsKTpnPWguc2libGluZzt2YXIgYj1wKG8saCx2LnZhbHVlLGMpO2lmKG51bGw9PT1iKXtudWxsPT09aCYmKGg9Zyk7YnJlYWt9ZSYmaCYmbnVsbD09PWIuYWx0ZXJuYXRlJiZ0KG8saCksaT1hKGIsaSxtKSxudWxsPT09ZD91PWI6ZC5zaWJsaW5nPWIsZD1iLGg9Z31pZih2LmRvbmUpcmV0dXJuIG4obyxoKSxyaiYmckEobyxtKSx1O2lmKG51bGw9PT1oKXtmb3IoOyF2LmRvbmU7bSsrLHY9cy5uZXh0KCkpbnVsbCE9PSh2PWYobyx2LnZhbHVlLGMpKSYmKGk9YSh2LGksbSksbnVsbD09PWQ/dT12OmQuc2libGluZz12LGQ9dik7cmV0dXJuIHJqJiZyQShvLG0pLHV9Zm9yKGg9cihoKTshdi5kb25lO20rKyx2PXMubmV4dCgpKW51bGwhPT0odj15KGgsbyxtLHYudmFsdWUsYykpJiYoZSYmbnVsbCE9PXYuYWx0ZXJuYXRlJiZoLmRlbGV0ZShudWxsPT09di5rZXk/bTp2LmtleSksaT1hKHYsaSxtKSxudWxsPT09ZD91PXY6ZC5zaWJsaW5nPXYsZD12KTtyZXR1cm4gZSYmaC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0KG8sZSl9KSxyaiYmckEobyxtKSx1fShjLHUsZD1iLmNhbGwoZCksdil9aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZC50aGVuKXJldHVybiBzKGMsdSxvbShkKSx2KTtpZihkLiQkdHlwZW9mPT09QSlyZXR1cm4gcyhjLHUscksoYyxkKSx2KTtveShjLGQpfXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBkJiZcIlwiIT09ZHx8XCJudW1iZXJcIj09dHlwZW9mIGR8fFwiYmlnaW50XCI9PXR5cGVvZiBkPyhkPVwiXCIrZCxudWxsIT09dSYmNj09PXUudGFnPyhuKGMsdS5zaWJsaW5nKSwodj1vKHUsZCkpLnJldHVybj1jKToobihjLHUpLCh2PXJpKGQsYy5tb2RlLHYpKS5yZXR1cm49YyksaShjPXYpKTpuKGMsdSl9KHMsYyx1LGQpO3JldHVybiBvcD1udWxsLHZ9Y2F0Y2goZSl7aWYoZT09PW9yfHxlPT09b2EpdGhyb3cgZTt2YXIgYj1yZSgyOSxlLG51bGwscy5tb2RlKTtyZXR1cm4gYi5sYW5lcz1kLGIucmV0dXJuPXMsYn1maW5hbGx5e319fXZhciBvYj1vdighMCksb0E9b3YoITEpLG94PSExO2Z1bmN0aW9uIG93KGUpe2UudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLm1lbW9pemVkU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm51bGwsbGFzdEJhc2VVcGRhdGU6bnVsbCxzaGFyZWQ6e3BlbmRpbmc6bnVsbCxsYW5lczowLGhpZGRlbkNhbGxiYWNrczpudWxsfSxjYWxsYmFja3M6bnVsbH19ZnVuY3Rpb24gb0MoZSx0KXtlPWUudXBkYXRlUXVldWUsdC51cGRhdGVRdWV1ZT09PWUmJih0LnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6ZS5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmUuZmlyc3RCYXNlVXBkYXRlLGxhc3RCYXNlVXBkYXRlOmUubGFzdEJhc2VVcGRhdGUsc2hhcmVkOmUuc2hhcmVkLGNhbGxiYWNrczpudWxsfSl9ZnVuY3Rpb24gb18oZSl7cmV0dXJue2xhbmU6ZSx0YWc6MCxwYXlsb2FkOm51bGwsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9fWZ1bmN0aW9uIG9rKGUsdCxuKXt2YXIgcj1lLnVwZGF0ZVF1ZXVlO2lmKG51bGw9PT1yKXJldHVybiBudWxsO2lmKHI9ci5zaGFyZWQsMCE9KDImbEQpKXt2YXIgbz1yLnBlbmRpbmc7cmV0dXJuIG51bGw9PT1vP3QubmV4dD10Oih0Lm5leHQ9by5uZXh0LG8ubmV4dD10KSxyLnBlbmRpbmc9dCx0PW45KGUpLG42KGUsbnVsbCxuKSx0fXJldHVybiBuNChlLHIsdCxuKSxuOShlKX1mdW5jdGlvbiBvRShlLHQsbil7aWYobnVsbCE9PSh0PXQudXBkYXRlUXVldWUpJiYodD10LnNoYXJlZCwwIT0oNDE5NDA0OCZuKSkpe3ZhciByPXQubGFuZXM7ciY9ZS5wZW5kaW5nTGFuZXMsbnw9cix0LmxhbmVzPW4sZVMoZSxuKX19ZnVuY3Rpb24gb2ooZSx0KXt2YXIgbj1lLnVwZGF0ZVF1ZXVlLHI9ZS5hbHRlcm5hdGU7aWYobnVsbCE9PXImJm49PT0ocj1yLnVwZGF0ZVF1ZXVlKSl7dmFyIG89bnVsbCxhPW51bGw7aWYobnVsbCE9PShuPW4uZmlyc3RCYXNlVXBkYXRlKSl7ZG97dmFyIGk9e2xhbmU6bi5sYW5lLHRhZzpuLnRhZyxwYXlsb2FkOm4ucGF5bG9hZCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH07bnVsbD09PWE/bz1hPWk6YT1hLm5leHQ9aSxuPW4ubmV4dH13aGlsZShudWxsIT09bik7bnVsbD09PWE/bz1hPXQ6YT1hLm5leHQ9dH1lbHNlIG89YT10O249e2Jhc2VTdGF0ZTpyLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6byxsYXN0QmFzZVVwZGF0ZTphLHNoYXJlZDpyLnNoYXJlZCxjYWxsYmFja3M6ci5jYWxsYmFja3N9LGUudXBkYXRlUXVldWU9bjtyZXR1cm59bnVsbD09PShlPW4ubGFzdEJhc2VVcGRhdGUpP24uZmlyc3RCYXNlVXBkYXRlPXQ6ZS5uZXh0PXQsbi5sYXN0QmFzZVVwZGF0ZT10fXZhciBvUz0hMTtmdW5jdGlvbiBvTygpe2lmKG9TKXt2YXIgZT1yNjtpZihudWxsIT09ZSl0aHJvdyBlfX1mdW5jdGlvbiBvQihlLHQsbixyKXtvUz0hMTt2YXIgbz1lLnVwZGF0ZVF1ZXVlO294PSExO3ZhciBhPW8uZmlyc3RCYXNlVXBkYXRlLGk9by5sYXN0QmFzZVVwZGF0ZSxsPW8uc2hhcmVkLnBlbmRpbmc7aWYobnVsbCE9PWwpe28uc2hhcmVkLnBlbmRpbmc9bnVsbDt2YXIgcz1sLGM9cy5uZXh0O3MubmV4dD1udWxsLG51bGw9PT1pP2E9YzppLm5leHQ9YyxpPXM7dmFyIHU9ZS5hbHRlcm5hdGU7bnVsbCE9PXUmJihsPSh1PXUudXBkYXRlUXVldWUpLmxhc3RCYXNlVXBkYXRlKSE9PWkmJihudWxsPT09bD91LmZpcnN0QmFzZVVwZGF0ZT1jOmwubmV4dD1jLHUubGFzdEJhc2VVcGRhdGU9cyl9aWYobnVsbCE9PWEpe3ZhciBkPW8uYmFzZVN0YXRlO2ZvcihpPTAsdT1jPXM9bnVsbCxsPWE7Oyl7dmFyIHA9LTB4MjAwMDAwMDEmbC5sYW5lLGg9cCE9PWwubGFuZTtpZihoPyhsUiZwKT09PXA6KHImcCk9PT1wKXswIT09cCYmcD09PXIzJiYob1M9ITApLG51bGwhPT11JiYodT11Lm5leHQ9e2xhbmU6MCx0YWc6bC50YWcscGF5bG9hZDpsLnBheWxvYWQsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9KTtlOnt2YXIgbT1lLGc9bDtzd2l0Y2gocD10LGcudGFnKXtjYXNlIDE6aWYoXCJmdW5jdGlvblwiPT10eXBlb2YobT1nLnBheWxvYWQpKXtkPW0uY2FsbChuLGQscCk7YnJlYWsgZX1kPW07YnJlYWsgZTtjYXNlIDM6bS5mbGFncz0tNjU1MzcmbS5mbGFnc3wxMjg7Y2FzZSAwOmlmKG51bGw9PShwPVwiZnVuY3Rpb25cIj09dHlwZW9mKG09Zy5wYXlsb2FkKT9tLmNhbGwobixkLHApOm0pKWJyZWFrIGU7ZD1mKHt9LGQscCk7YnJlYWsgZTtjYXNlIDI6b3g9ITB9fW51bGwhPT0ocD1sLmNhbGxiYWNrKSYmKGUuZmxhZ3N8PTY0LGgmJihlLmZsYWdzfD04MTkyKSxudWxsPT09KGg9by5jYWxsYmFja3MpP28uY2FsbGJhY2tzPVtwXTpoLnB1c2gocCkpfWVsc2UgaD17bGFuZTpwLHRhZzpsLnRhZyxwYXlsb2FkOmwucGF5bG9hZCxjYWxsYmFjazpsLmNhbGxiYWNrLG5leHQ6bnVsbH0sbnVsbD09PXU/KGM9dT1oLHM9ZCk6dT11Lm5leHQ9aCxpfD1wO2lmKG51bGw9PT0obD1sLm5leHQpKWlmKG51bGw9PT0obD1vLnNoYXJlZC5wZW5kaW5nKSlicmVhaztlbHNlIGw9KGg9bCkubmV4dCxoLm5leHQ9bnVsbCxvLmxhc3RCYXNlVXBkYXRlPWgsby5zaGFyZWQucGVuZGluZz1udWxsfW51bGw9PT11JiYocz1kKSxvLmJhc2VTdGF0ZT1zLG8uZmlyc3RCYXNlVXBkYXRlPWMsby5sYXN0QmFzZVVwZGF0ZT11LG51bGw9PT1hJiYoby5zaGFyZWQubGFuZXM9MCksbCR8PWksZS5sYW5lcz1pLGUubWVtb2l6ZWRTdGF0ZT1kfX1mdW5jdGlvbiBvUChlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgRXJyb3IobCgxOTEsZSkpO2UuY2FsbCh0KX1mdW5jdGlvbiBvSShlLHQpe3ZhciBuPWUuY2FsbGJhY2tzO2lmKG51bGwhPT1uKWZvcihlLmNhbGxiYWNrcz1udWxsLGU9MDtlPG4ubGVuZ3RoO2UrKylvUChuW2VdLHQpfXZhciBvVD1OKG51bGwpLG96PU4oMCk7ZnVuY3Rpb24gb0QoZSx0KXtNKG96LGU9bEgpLE0ob1QsdCksbEg9ZXx0LmJhc2VMYW5lc31mdW5jdGlvbiBvTCgpe00ob3osbEgpLE0ob1Qsb1QuY3VycmVudCl9ZnVuY3Rpb24gb04oKXtsSD1vei5jdXJyZW50LFIob1QpLFIob3opfXZhciBvUj1OKG51bGwpLG9NPW51bGw7ZnVuY3Rpb24gb1ooZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7TShvViwxJm9WLmN1cnJlbnQpLE0ob1IsZSksbnVsbD09PW9NJiYobnVsbD09PXR8fG51bGwhPT1vVC5jdXJyZW50P29NPWU6bnVsbCE9PXQubWVtb2l6ZWRTdGF0ZSYmKG9NPWUpKX1mdW5jdGlvbiBvVShlKXtNKG9WLG9WLmN1cnJlbnQpLE0ob1IsZSksbnVsbD09PW9NJiYob009ZSl9ZnVuY3Rpb24gb0YoZSl7MjI9PT1lLnRhZz8oTShvVixvVi5jdXJyZW50KSxNKG9SLGUpLG51bGw9PT1vTSYmKG9NPWUpKTpvcShlKX1mdW5jdGlvbiBvcSgpe00ob1Ysb1YuY3VycmVudCksTShvUixvUi5jdXJyZW50KX1mdW5jdGlvbiBvSChlKXtSKG9SKSxvTT09PWUmJihvTT1udWxsKSxSKG9WKX12YXIgb1Y9TigwKTtmdW5jdGlvbiBvJChlKXtmb3IodmFyIHQ9ZTtudWxsIT09dDspe2lmKDEzPT09dC50YWcpe3ZhciBuPXQubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09biYmKG51bGw9PT0obj1uLmRlaHlkcmF0ZWQpfHxjUyhuKXx8Y08obikpKXJldHVybiB0fWVsc2UgaWYoMTk9PT10LnRhZyYmKFwiZm9yd2FyZHNcIj09PXQubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlcnx8XCJiYWNrd2FyZHNcIj09PXQubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlcnx8XCJ1bnN0YWJsZV9sZWdhY3ktYmFja3dhcmRzXCI9PT10Lm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXJ8fFwidG9nZXRoZXJcIj09PXQubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlcikpe2lmKDAhPSgxMjgmdC5mbGFncykpcmV0dXJuIHR9ZWxzZSBpZihudWxsIT09dC5jaGlsZCl7dC5jaGlsZC5yZXR1cm49dCx0PXQuY2hpbGQ7Y29udGludWV9aWYodD09PWUpYnJlYWs7Zm9yKDtudWxsPT09dC5zaWJsaW5nOyl7aWYobnVsbD09PXQucmV0dXJufHx0LnJldHVybj09PWUpcmV0dXJuIG51bGw7dD10LnJldHVybn10LnNpYmxpbmcucmV0dXJuPXQucmV0dXJuLHQ9dC5zaWJsaW5nfXJldHVybiBudWxsfXZhciBvVz0wLG9ZPW51bGwsb0s9bnVsbCxvWD1udWxsLG9HPSExLG9RPSExLG9KPSExLG8wPTAsbzE9MCxvMj1udWxsLG80PTA7ZnVuY3Rpb24gbzUoKXt0aHJvdyBFcnJvcihsKDMyMSkpfWZ1bmN0aW9uIG8zKGUsdCl7aWYobnVsbD09PXQpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmbjxlLmxlbmd0aDtuKyspaWYoIW5rKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbzYoZSx0LG4scixvLGEpe3JldHVybiBvVz1hLG9ZPXQsdC5tZW1vaXplZFN0YXRlPW51bGwsdC51cGRhdGVRdWV1ZT1udWxsLHQubGFuZXM9MCxJLkg9bnVsbD09PWV8fG51bGw9PT1lLm1lbW9pemVkU3RhdGU/aXQ6aXIsb0o9ITEsYT1uKHIsbyksb0o9ITEsb1EmJihhPW84KHQsbixyLG8pKSxvOShlKSxhfWZ1bmN0aW9uIG85KGUpe0kuSD1pZTt2YXIgdD1udWxsIT09b0smJm51bGwhPT1vSy5uZXh0O2lmKG9XPTAsb1g9b0s9b1k9bnVsbCxvRz0hMSxvMT0wLG8yPW51bGwsdCl0aHJvdyBFcnJvcihsKDMwMCkpO251bGw9PT1lfHxpQXx8bnVsbCE9PShlPWUuZGVwZW5kZW5jaWVzKSYmciQoZSkmJihpQT0hMCl9ZnVuY3Rpb24gbzgoZSx0LG4scil7b1k9ZTt2YXIgbz0wO2Rve2lmKG9RJiYobzI9bnVsbCksbzE9MCxvUT0hMSwyNTw9byl0aHJvdyBFcnJvcihsKDMwMSkpO2lmKG8rPTEsb1g9b0s9bnVsbCxudWxsIT1lLnVwZGF0ZVF1ZXVlKXt2YXIgYT1lLnVwZGF0ZVF1ZXVlO2EubGFzdEVmZmVjdD1udWxsLGEuZXZlbnRzPW51bGwsYS5zdG9yZXM9bnVsbCxudWxsIT1hLm1lbW9DYWNoZSYmKGEubWVtb0NhY2hlLmluZGV4PTApfUkuSD1pbyxhPXQobixyKX13aGlsZShvUSk7cmV0dXJuIGF9ZnVuY3Rpb24gbzcoKXt2YXIgZT1JLkgsdD1lLnVzZVN0YXRlKClbMF07cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdC50aGVuP2FpKHQpOnQsZT1lLnVzZVN0YXRlKClbMF0sKG51bGwhPT1vSz9vSy5tZW1vaXplZFN0YXRlOm51bGwpIT09ZSYmKG9ZLmZsYWdzfD0xMDI0KSx0fWZ1bmN0aW9uIGFlKCl7dmFyIGU9MCE9PW8wO3JldHVybiBvMD0wLGV9ZnVuY3Rpb24gYXQoZSx0LG4pe3QudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0LmZsYWdzJj0tMjA1MyxlLmxhbmVzJj1+bn1mdW5jdGlvbiBhbihlKXtpZihvRyl7Zm9yKGU9ZS5tZW1vaXplZFN0YXRlO251bGwhPT1lOyl7dmFyIHQ9ZS5xdWV1ZTtudWxsIT09dCYmKHQucGVuZGluZz1udWxsKSxlPWUubmV4dH1vRz0hMX1vVz0wLG9YPW9LPW9ZPW51bGwsb1E9ITEsbzE9bzA9MCxvMj1udWxsfWZ1bmN0aW9uIGFyKCl7dmFyIGU9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxiYXNlUXVldWU6bnVsbCxxdWV1ZTpudWxsLG5leHQ6bnVsbH07cmV0dXJuIG51bGw9PT1vWD9vWS5tZW1vaXplZFN0YXRlPW9YPWU6b1g9b1gubmV4dD1lLG9YfWZ1bmN0aW9uIGFvKCl7aWYobnVsbD09PW9LKXt2YXIgZT1vWS5hbHRlcm5hdGU7ZT1udWxsIT09ZT9lLm1lbW9pemVkU3RhdGU6bnVsbH1lbHNlIGU9b0submV4dDt2YXIgdD1udWxsPT09b1g/b1kubWVtb2l6ZWRTdGF0ZTpvWC5uZXh0O2lmKG51bGwhPT10KW9YPXQsb0s9ZTtlbHNle2lmKG51bGw9PT1lKXtpZihudWxsPT09b1kuYWx0ZXJuYXRlKXRocm93IEVycm9yKGwoNDY3KSk7dGhyb3cgRXJyb3IobCgzMTApKX1lPXttZW1vaXplZFN0YXRlOihvSz1lKS5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpvSy5iYXNlU3RhdGUsYmFzZVF1ZXVlOm9LLmJhc2VRdWV1ZSxxdWV1ZTpvSy5xdWV1ZSxuZXh0Om51bGx9LG51bGw9PT1vWD9vWS5tZW1vaXplZFN0YXRlPW9YPWU6b1g9b1gubmV4dD1lfXJldHVybiBvWH1mdW5jdGlvbiBhYSgpe3JldHVybntsYXN0RWZmZWN0Om51bGwsZXZlbnRzOm51bGwsc3RvcmVzOm51bGwsbWVtb0NhY2hlOm51bGx9fWZ1bmN0aW9uIGFpKGUpe3ZhciB0PW8xO3JldHVybiBvMSs9MSxudWxsPT09bzImJihvMj1bXSksZT1vcyhvMixlLHQpLHQ9b1ksbnVsbD09PShudWxsPT09b1g/dC5tZW1vaXplZFN0YXRlOm9YLm5leHQpJiYoSS5IPW51bGw9PT0odD10LmFsdGVybmF0ZSl8fG51bGw9PT10Lm1lbW9pemVkU3RhdGU/aXQ6aXIpLGV9ZnVuY3Rpb24gYWwoZSl7aWYobnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW4pcmV0dXJuIGFpKGUpO2lmKGUuJCR0eXBlb2Y9PT1BKXJldHVybiByWShlKX10aHJvdyBFcnJvcihsKDQzOCxTdHJpbmcoZSkpKX1mdW5jdGlvbiBhcyhlKXt2YXIgdD1udWxsLG49b1kudXBkYXRlUXVldWU7aWYobnVsbCE9PW4mJih0PW4ubWVtb0NhY2hlKSxudWxsPT10KXt2YXIgcj1vWS5hbHRlcm5hdGU7bnVsbCE9PXImJm51bGwhPT0ocj1yLnVwZGF0ZVF1ZXVlKSYmbnVsbCE9KHI9ci5tZW1vQ2FjaGUpJiYodD17ZGF0YTpyLmRhdGEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKCl9KSxpbmRleDowfSl9aWYobnVsbD09dCYmKHQ9e2RhdGE6W10saW5kZXg6MH0pLG51bGw9PT1uJiYobj1hYSgpLG9ZLnVwZGF0ZVF1ZXVlPW4pLG4ubWVtb0NhY2hlPXQsdm9pZCAwPT09KG49dC5kYXRhW3QuaW5kZXhdKSlmb3Iobj10LmRhdGFbdC5pbmRleF09QXJyYXkoZSkscj0wO3I8ZTtyKyspbltyXT1qO3JldHVybiB0LmluZGV4Kyssbn1mdW5jdGlvbiBhYyhlLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChlKTp0fWZ1bmN0aW9uIGF1KGUpe3JldHVybiBhZChhbygpLG9LLGUpfWZ1bmN0aW9uIGFkKGUsdCxuKXt2YXIgcj1lLnF1ZXVlO2lmKG51bGw9PT1yKXRocm93IEVycm9yKGwoMzExKSk7ci5sYXN0UmVuZGVyZWRSZWR1Y2VyPW47dmFyIG89ZS5iYXNlUXVldWUsYT1yLnBlbmRpbmc7aWYobnVsbCE9PWEpe2lmKG51bGwhPT1vKXt2YXIgaT1vLm5leHQ7by5uZXh0PWEubmV4dCxhLm5leHQ9aX10LmJhc2VRdWV1ZT1vPWEsci5wZW5kaW5nPW51bGx9aWYoYT1lLmJhc2VTdGF0ZSxudWxsPT09byllLm1lbW9pemVkU3RhdGU9YTtlbHNle3Q9by5uZXh0O3ZhciBzPWk9bnVsbCxjPW51bGwsdT10LGQ9ITE7ZG97dmFyIGY9LTB4MjAwMDAwMDEmdS5sYW5lO2lmKGYhPT11LmxhbmU/KGxSJmYpPT09Zjoob1cmZik9PT1mKXt2YXIgcD11LnJldmVydExhbmU7aWYoMD09PXApbnVsbCE9PWMmJihjPWMubmV4dD17bGFuZTowLHJldmVydExhbmU6MCxnZXN0dXJlOm51bGwsYWN0aW9uOnUuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6dS5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6dS5lYWdlclN0YXRlLG5leHQ6bnVsbH0pLGY9PT1yMyYmKGQ9ITApO2Vsc2UgaWYoKG9XJnApPT09cCl7dT11Lm5leHQscD09PXIzJiYoZD0hMCk7Y29udGludWV9ZWxzZSBmPXtsYW5lOjAscmV2ZXJ0TGFuZTp1LnJldmVydExhbmUsZ2VzdHVyZTpudWxsLGFjdGlvbjp1LmFjdGlvbixoYXNFYWdlclN0YXRlOnUuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOnUuZWFnZXJTdGF0ZSxuZXh0Om51bGx9LG51bGw9PT1jPyhzPWM9ZixpPWEpOmM9Yy5uZXh0PWYsb1kubGFuZXN8PXAsbCR8PXA7Zj11LmFjdGlvbixvSiYmbihhLGYpLGE9dS5oYXNFYWdlclN0YXRlP3UuZWFnZXJTdGF0ZTpuKGEsZil9ZWxzZSBwPXtsYW5lOmYscmV2ZXJ0TGFuZTp1LnJldmVydExhbmUsZ2VzdHVyZTp1Lmdlc3R1cmUsYWN0aW9uOnUuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6dS5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6dS5lYWdlclN0YXRlLG5leHQ6bnVsbH0sbnVsbD09PWM/KHM9Yz1wLGk9YSk6Yz1jLm5leHQ9cCxvWS5sYW5lc3w9ZixsJHw9Zjt1PXUubmV4dH13aGlsZShudWxsIT09dSYmdSE9PXQpO2lmKG51bGw9PT1jP2k9YTpjLm5leHQ9cywhbmsoYSxlLm1lbW9pemVkU3RhdGUpJiYoaUE9ITAsZCYmbnVsbCE9PShuPXI2KSkpdGhyb3cgbjtlLm1lbW9pemVkU3RhdGU9YSxlLmJhc2VTdGF0ZT1pLGUuYmFzZVF1ZXVlPWMsci5sYXN0UmVuZGVyZWRTdGF0ZT1hfXJldHVybiBudWxsPT09byYmKHIubGFuZXM9MCksW2UubWVtb2l6ZWRTdGF0ZSxyLmRpc3BhdGNoXX1mdW5jdGlvbiBhZihlKXt2YXIgdD1hbygpLG49dC5xdWV1ZTtpZihudWxsPT09bil0aHJvdyBFcnJvcihsKDMxMSkpO24ubGFzdFJlbmRlcmVkUmVkdWNlcj1lO3ZhciByPW4uZGlzcGF0Y2gsbz1uLnBlbmRpbmcsYT10Lm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PW8pe24ucGVuZGluZz1udWxsO3ZhciBpPW89by5uZXh0O2RvIGE9ZShhLGkuYWN0aW9uKSxpPWkubmV4dDt3aGlsZShpIT09byk7bmsoYSx0Lm1lbW9pemVkU3RhdGUpfHwoaUE9ITApLHQubWVtb2l6ZWRTdGF0ZT1hLG51bGw9PT10LmJhc2VRdWV1ZSYmKHQuYmFzZVN0YXRlPWEpLG4ubGFzdFJlbmRlcmVkU3RhdGU9YX1yZXR1cm5bYSxyXX1mdW5jdGlvbiBhcChlLHQsbil7dmFyIHI9b1ksbz1hbygpLGE9cmo7aWYoYSl7aWYodm9pZCAwPT09bil0aHJvdyBFcnJvcihsKDQwNykpO249bigpfWVsc2Ugbj10KCk7dmFyIGk9IW5rKChvS3x8bykubWVtb2l6ZWRTdGF0ZSxuKTtpZihpJiYoby5tZW1vaXplZFN0YXRlPW4saUE9ITApLG89by5xdWV1ZSxhUihhZy5iaW5kKG51bGwscixvLGUpLFtlXSksby5nZXRTbmFwc2hvdCE9PXR8fGl8fG51bGwhPT1vWCYmMSZvWC5tZW1vaXplZFN0YXRlLnRhZyl7aWYoci5mbGFnc3w9MjA0OCxhVCg5LHtkZXN0cm95OnZvaWQgMH0sYW0uYmluZChudWxsLHIsbyxuLHQpLG51bGwpLG51bGw9PT1sTCl0aHJvdyBFcnJvcihsKDM0OSkpO2F8fDAhPSgxMjQmb1cpfHxhaChyLHQsbil9cmV0dXJuIG59ZnVuY3Rpb24gYWgoZSx0LG4pe2UuZmxhZ3N8PTE2Mzg0LGU9e2dldFNuYXBzaG90OnQsdmFsdWU6bn0sbnVsbD09PSh0PW9ZLnVwZGF0ZVF1ZXVlKT8odD1hYSgpLG9ZLnVwZGF0ZVF1ZXVlPXQsdC5zdG9yZXM9W2VdKTpudWxsPT09KG49dC5zdG9yZXMpP3Quc3RvcmVzPVtlXTpuLnB1c2goZSl9ZnVuY3Rpb24gYW0oZSx0LG4scil7dC52YWx1ZT1uLHQuZ2V0U25hcHNob3Q9cixheSh0KSYmYXYoZSl9ZnVuY3Rpb24gYWcoZSx0LG4pe3JldHVybiBuKGZ1bmN0aW9uKCl7YXkodCkmJmF2KGUpfSl9ZnVuY3Rpb24gYXkoZSl7dmFyIHQ9ZS5nZXRTbmFwc2hvdDtlPWUudmFsdWU7dHJ5e3ZhciBuPXQoKTtyZXR1cm4hbmsoZSxuKX1jYXRjaChlKXtyZXR1cm4hMH19ZnVuY3Rpb24gYXYoZSl7dmFyIHQ9bjMoZSwyKTtudWxsIT09dCYmc2EodCxlLDIpfWZ1bmN0aW9uIGFiKGUpe3ZhciB0PWFyKCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSl7dmFyIG49ZTtpZihlPW4oKSxvSil7ZWgoITApO3RyeXtuKCl9ZmluYWxseXtlaCghMSl9fX1yZXR1cm4gdC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWUsdC5xdWV1ZT17cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmFjLGxhc3RSZW5kZXJlZFN0YXRlOmV9LHR9ZnVuY3Rpb24gYUEoZSx0LG4scil7cmV0dXJuIGUuYmFzZVN0YXRlPW4sYWQoZSxvSyxcImZ1bmN0aW9uXCI9PXR5cGVvZiByP3I6YWMpfWZ1bmN0aW9uIGF4KGUsdCxuLHIsbyl7aWYoYTkoZSkpdGhyb3cgRXJyb3IobCg0ODUpKTtpZihudWxsIT09KGU9dC5hY3Rpb24pKXt2YXIgYT17cGF5bG9hZDpvLGFjdGlvbjplLG5leHQ6bnVsbCxpc1RyYW5zaXRpb246ITAsc3RhdHVzOlwicGVuZGluZ1wiLHZhbHVlOm51bGwscmVhc29uOm51bGwsbGlzdGVuZXJzOltdLHRoZW46ZnVuY3Rpb24oZSl7YS5saXN0ZW5lcnMucHVzaChlKX19O251bGwhPT1JLlQ/bighMCk6YS5pc1RyYW5zaXRpb249ITEscihhKSxudWxsPT09KG49dC5wZW5kaW5nKT8oYS5uZXh0PXQucGVuZGluZz1hLGF3KHQsYSkpOihhLm5leHQ9bi5uZXh0LHQucGVuZGluZz1uLm5leHQ9YSl9fWZ1bmN0aW9uIGF3KGUsdCl7dmFyIG49dC5hY3Rpb24scj10LnBheWxvYWQsbz1lLnN0YXRlO2lmKHQuaXNUcmFuc2l0aW9uKXt2YXIgYT1JLlQsaT17fTtJLlQ9aTt0cnl7dmFyIGw9bihvLHIpLHM9SS5TO251bGwhPT1zJiZzKGksbCksYUMoZSx0LGwpfWNhdGNoKG4pe2FrKGUsdCxuKX1maW5hbGx5e251bGwhPT1hJiZudWxsIT09aS50eXBlcyYmKGEudHlwZXM9aS50eXBlcyksSS5UPWF9fWVsc2UgdHJ5e2E9bihvLHIpLGFDKGUsdCxhKX1jYXRjaChuKXthayhlLHQsbil9fWZ1bmN0aW9uIGFDKGUsdCxuKXtudWxsIT09biYmXCJvYmplY3RcIj09dHlwZW9mIG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4udGhlbj9uLnRoZW4oZnVuY3Rpb24obil7YV8oZSx0LG4pfSxmdW5jdGlvbihuKXtyZXR1cm4gYWsoZSx0LG4pfSk6YV8oZSx0LG4pfWZ1bmN0aW9uIGFfKGUsdCxuKXt0LnN0YXR1cz1cImZ1bGZpbGxlZFwiLHQudmFsdWU9bixhRSh0KSxlLnN0YXRlPW4sbnVsbCE9PSh0PWUucGVuZGluZykmJigobj10Lm5leHQpPT09dD9lLnBlbmRpbmc9bnVsbDoobj1uLm5leHQsdC5uZXh0PW4sYXcoZSxuKSkpfWZ1bmN0aW9uIGFrKGUsdCxuKXt2YXIgcj1lLnBlbmRpbmc7aWYoZS5wZW5kaW5nPW51bGwsbnVsbCE9PXIpe3I9ci5uZXh0O2RvIHQuc3RhdHVzPVwicmVqZWN0ZWRcIix0LnJlYXNvbj1uLGFFKHQpLHQ9dC5uZXh0O3doaWxlKHQhPT1yKX1lLmFjdGlvbj1udWxsfWZ1bmN0aW9uIGFFKGUpe2U9ZS5saXN0ZW5lcnM7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspKDAsZVt0XSkoKX1mdW5jdGlvbiBhaihlLHQpe3JldHVybiB0fWZ1bmN0aW9uIGFTKGUsdCl7aWYocmope3ZhciBuPWxMLmZvcm1TdGF0ZTtpZihudWxsIT09bil7ZTp7dmFyIHI9b1k7aWYocmope2lmKHJFKXt0Ontmb3IodmFyIG89ckUsYT1yTzs4IT09by5ub2RlVHlwZTspaWYoIWF8fG51bGw9PT0obz1jQihvLm5leHRTaWJsaW5nKSkpe289bnVsbDticmVhayB0fW89XCJGIVwiPT09KGE9by5kYXRhKXx8XCJGXCI9PT1hP286bnVsbH1pZihvKXtyRT1jQihvLm5leHRTaWJsaW5nKSxyPVwiRiFcIj09PW8uZGF0YTticmVhayBlfX1yUChyKX1yPSExfXImJih0PW5bMF0pfX1yZXR1cm4obj1hcigpKS5tZW1vaXplZFN0YXRlPW4uYmFzZVN0YXRlPXQscj17cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmFqLGxhc3RSZW5kZXJlZFN0YXRlOnR9LG4ucXVldWU9cixuPWE1LmJpbmQobnVsbCxvWSxyKSxyLmRpc3BhdGNoPW4scj1hYighMSksYT1hNi5iaW5kKG51bGwsb1ksITEsci5xdWV1ZSkscj1hcigpLG89e3N0YXRlOnQsZGlzcGF0Y2g6bnVsbCxhY3Rpb246ZSxwZW5kaW5nOm51bGx9LHIucXVldWU9byxuPWF4LmJpbmQobnVsbCxvWSxvLGEsbiksby5kaXNwYXRjaD1uLHIubWVtb2l6ZWRTdGF0ZT1lLFt0LG4sITFdfWZ1bmN0aW9uIGFPKGUpe3JldHVybiBhQihhbygpLG9LLGUpfWZ1bmN0aW9uIGFCKGUsdCxuKXtpZih0PWFkKGUsdCxhailbMF0sZT1hdShhYylbMF0sXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRoZW4pdHJ5e3ZhciByPWFpKHQpfWNhdGNoKGUpe2lmKGU9PT1vcil0aHJvdyBvYTt0aHJvdyBlfWVsc2Ugcj10O3ZhciBvPSh0PWFvKCkpLnF1ZXVlLGE9by5kaXNwYXRjaDtyZXR1cm4gbiE9PXQubWVtb2l6ZWRTdGF0ZSYmKG9ZLmZsYWdzfD0yMDQ4LGFUKDkse2Rlc3Ryb3k6dm9pZCAwfSxhUC5iaW5kKG51bGwsbyxuKSxudWxsKSksW3IsYSxlXX1mdW5jdGlvbiBhUChlLHQpe2UuYWN0aW9uPXR9ZnVuY3Rpb24gYUkoZSl7dmFyIHQ9YW8oKSxuPW9LO2lmKG51bGwhPT1uKXJldHVybiBhQih0LG4sZSk7YW8oKSx0PXQubWVtb2l6ZWRTdGF0ZTt2YXIgcj0obj1hbygpKS5xdWV1ZS5kaXNwYXRjaDtyZXR1cm4gbi5tZW1vaXplZFN0YXRlPWUsW3QsciwhMV19ZnVuY3Rpb24gYVQoZSx0LG4scil7cmV0dXJuIGU9e3RhZzplLGNyZWF0ZTpuLGRlcHM6cixpbnN0OnQsbmV4dDpudWxsfSxudWxsPT09KHQ9b1kudXBkYXRlUXVldWUpJiYodD1hYSgpLG9ZLnVwZGF0ZVF1ZXVlPXQpLG51bGw9PT0obj10Lmxhc3RFZmZlY3QpP3QubGFzdEVmZmVjdD1lLm5leHQ9ZToocj1uLm5leHQsbi5uZXh0PWUsZS5uZXh0PXIsdC5sYXN0RWZmZWN0PWUpLGV9ZnVuY3Rpb24gYXooKXtyZXR1cm4gYW8oKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIGFEKGUsdCxuLHIpe3ZhciBvPWFyKCk7b1kuZmxhZ3N8PWUsby5tZW1vaXplZFN0YXRlPWFUKDF8dCx7ZGVzdHJveTp2b2lkIDB9LG4sdm9pZCAwPT09cj9udWxsOnIpfWZ1bmN0aW9uIGFMKGUsdCxuLHIpe3ZhciBvPWFvKCk7cj12b2lkIDA9PT1yP251bGw6cjt2YXIgYT1vLm1lbW9pemVkU3RhdGUuaW5zdDtudWxsIT09b0smJm51bGwhPT1yJiZvMyhyLG9LLm1lbW9pemVkU3RhdGUuZGVwcyk/by5tZW1vaXplZFN0YXRlPWFUKHQsYSxuLHIpOihvWS5mbGFnc3w9ZSxvLm1lbW9pemVkU3RhdGU9YVQoMXx0LGEsbixyKSl9ZnVuY3Rpb24gYU4oZSx0KXthRCg4MzkwNjU2LDgsZSx0KX1mdW5jdGlvbiBhUihlLHQpe2FMKDIwNDgsOCxlLHQpfWZ1bmN0aW9uIGFNKGUsdCl7cmV0dXJuIGFMKDQsMixlLHQpfWZ1bmN0aW9uIGFaKGUsdCl7cmV0dXJuIGFMKDQsNCxlLHQpfWZ1bmN0aW9uIGFVKGUsdCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl7dmFyIG49dChlPWUoKSk7cmV0dXJuIGZ1bmN0aW9uKCl7XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uKCk6dChudWxsKX19aWYobnVsbCE9dClyZXR1cm4gdC5jdXJyZW50PWU9ZSgpLGZ1bmN0aW9uKCl7dC5jdXJyZW50PW51bGx9fWZ1bmN0aW9uIGFGKGUsdCxuKXtuPW51bGwhPW4/bi5jb25jYXQoW2VdKTpudWxsLGFMKDQsNCxhVS5iaW5kKG51bGwsdCxlKSxuKX1mdW5jdGlvbiBhcSgpe31mdW5jdGlvbiBhSChlLHQpe3ZhciBuPWFvKCk7dD12b2lkIDA9PT10P251bGw6dDt2YXIgcj1uLm1lbW9pemVkU3RhdGU7cmV0dXJuIG51bGwhPT10JiZvMyh0LHJbMV0pP3JbMF06KG4ubWVtb2l6ZWRTdGF0ZT1bZSx0XSxlKX1mdW5jdGlvbiBhVihlLHQpe3ZhciBuPWFvKCk7dD12b2lkIDA9PT10P251bGw6dDt2YXIgcj1uLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PXQmJm8zKHQsclsxXSkpcmV0dXJuIHJbMF07aWYocj1lKCksb0ope2VoKCEwKTt0cnl7ZSgpfWZpbmFsbHl7ZWgoITEpfX1yZXR1cm4gbi5tZW1vaXplZFN0YXRlPVtyLHRdLHJ9ZnVuY3Rpb24gYSQoZSx0LG4pe3JldHVybiB2b2lkIDA9PT1ufHwwIT0oMHg0MDAwMDAwMCZvVyk/ZS5tZW1vaXplZFN0YXRlPXQ6KGUubWVtb2l6ZWRTdGF0ZT1uLGU9c28oKSxvWS5sYW5lc3w9ZSxsJHw9ZSxuKX1mdW5jdGlvbiBhVyhlLHQsbixyKXtyZXR1cm4gbmsobix0KT9uOm51bGwhPT1vVC5jdXJyZW50PyhuayhlPWEkKGUsbixyKSx0KXx8KGlBPSEwKSxlKTowPT0oNDImb1cpfHwwIT0oMHg0MDAwMDAwMCZvVyk/KGlBPSEwLGUubWVtb2l6ZWRTdGF0ZT1uKTooZT1zbygpLG9ZLmxhbmVzfD1lLGwkfD1lLHQpfWZ1bmN0aW9uIGFZKGUsdCxuLHIsbyl7dmFyIGE9VC5wO1QucD0wIT09YSYmOD5hP2E6ODt2YXIgaT1JLlQsbD17fTtJLlQ9bCxhNihlLCExLHQsbik7dHJ5e3ZhciBzPW8oKSxjPUkuUztpZihudWxsIT09YyYmYyhsLHMpLG51bGwhPT1zJiZcIm9iamVjdFwiPT10eXBlb2YgcyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygcy50aGVuKXt2YXIgdSxkLGY9KHU9W10sZD17c3RhdHVzOlwicGVuZGluZ1wiLHZhbHVlOm51bGwscmVhc29uOm51bGwsdGhlbjpmdW5jdGlvbihlKXt1LnB1c2goZSl9fSxzLnRoZW4oZnVuY3Rpb24oKXtkLnN0YXR1cz1cImZ1bGZpbGxlZFwiLGQudmFsdWU9cjtmb3IodmFyIGU9MDtlPHUubGVuZ3RoO2UrKykoMCx1W2VdKShyKX0sZnVuY3Rpb24oZSl7Zm9yKGQuc3RhdHVzPVwicmVqZWN0ZWRcIixkLnJlYXNvbj1lLGU9MDtlPHUubGVuZ3RoO2UrKykoMCx1W2VdKSh2b2lkIDApfSksZCk7YTMoZSx0LGYsc3IoZSkpfWVsc2UgYTMoZSx0LHIsc3IoZSkpfWNhdGNoKG4pe2EzKGUsdCx7dGhlbjpmdW5jdGlvbigpe30sc3RhdHVzOlwicmVqZWN0ZWRcIixyZWFzb246bn0sc3IoKSl9ZmluYWxseXtULnA9YSxudWxsIT09aSYmbnVsbCE9PWwudHlwZXMmJihpLnR5cGVzPWwudHlwZXMpLEkuVD1pfX1mdW5jdGlvbiBhSygpe31mdW5jdGlvbiBhWChlLHQsbixyKXtpZig1IT09ZS50YWcpdGhyb3cgRXJyb3IobCg0NzYpKTt2YXIgbz1hRyhlKS5xdWV1ZTthWShlLG8sdCx6LG51bGw9PT1uP2FLOmZ1bmN0aW9uKCl7cmV0dXJuIGFRKGUpLG4ocil9KX1mdW5jdGlvbiBhRyhlKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PXQpcmV0dXJuIHQ7dmFyIG49e307cmV0dXJuKHQ9e21lbW9pemVkU3RhdGU6eixiYXNlU3RhdGU6eixiYXNlUXVldWU6bnVsbCxxdWV1ZTp7cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmFjLGxhc3RSZW5kZXJlZFN0YXRlOnp9LG5leHQ6bnVsbH0pLm5leHQ9e21lbW9pemVkU3RhdGU6bixiYXNlU3RhdGU6bixiYXNlUXVldWU6bnVsbCxxdWV1ZTp7cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmFjLGxhc3RSZW5kZXJlZFN0YXRlOm59LG5leHQ6bnVsbH0sZS5tZW1vaXplZFN0YXRlPXQsbnVsbCE9PShlPWUuYWx0ZXJuYXRlKSYmKGUubWVtb2l6ZWRTdGF0ZT10KSx0fWZ1bmN0aW9uIGFRKGUpe3ZhciB0PWFHKGUpO251bGw9PT10Lm5leHQmJih0PWUuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUpLGEzKGUsdC5uZXh0LnF1ZXVlLHt9LHNyKCkpfWZ1bmN0aW9uIGFKKCl7cmV0dXJuIHJZKGM5KX1mdW5jdGlvbiBhMCgpe3JldHVybiBhbygpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gYTEoKXtyZXR1cm4gYW8oKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIGEyKGUpe2Zvcih2YXIgdD1lLnJldHVybjtudWxsIT09dDspe3N3aXRjaCh0LnRhZyl7Y2FzZSAyNDpjYXNlIDM6dmFyIG49c3IoKSxyPW9rKHQsZT1vXyhuKSxuKTtudWxsIT09ciYmKHNhKHIsdCxuKSxvRShyLHQsbikpLHQ9e2NhY2hlOnIxKCl9LGUucGF5bG9hZD10O3JldHVybn10PXQucmV0dXJufX1mdW5jdGlvbiBhNChlLHQsbil7dmFyIHI9c3IoKTtuPXtsYW5lOnIscmV2ZXJ0TGFuZTowLGdlc3R1cmU6bnVsbCxhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LGE5KGUpP2E4KHQsbik6bnVsbCE9PShuPW41KGUsdCxuLHIpKSYmKHNhKG4sZSxyKSxhNyhuLHQscikpfWZ1bmN0aW9uIGE1KGUsdCxuKXthMyhlLHQsbixzcigpKX1mdW5jdGlvbiBhMyhlLHQsbixyKXt2YXIgbz17bGFuZTpyLHJldmVydExhbmU6MCxnZXN0dXJlOm51bGwsYWN0aW9uOm4saGFzRWFnZXJTdGF0ZTohMSxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfTtpZihhOShlKSlhOCh0LG8pO2Vsc2V7dmFyIGE9ZS5hbHRlcm5hdGU7aWYoMD09PWUubGFuZXMmJihudWxsPT09YXx8MD09PWEubGFuZXMpJiZudWxsIT09KGE9dC5sYXN0UmVuZGVyZWRSZWR1Y2VyKSl0cnl7dmFyIGk9dC5sYXN0UmVuZGVyZWRTdGF0ZSxsPWEoaSxuKTtpZihvLmhhc0VhZ2VyU3RhdGU9ITAsby5lYWdlclN0YXRlPWwsbmsobCxpKSlyZXR1cm4gbjQoZSx0LG8sMCksbnVsbD09PWxMJiZuMigpLCExfWNhdGNoKGUpe31maW5hbGx5e31pZihudWxsIT09KG49bjUoZSx0LG8scikpKXJldHVybiBzYShuLGUsciksYTcobix0LHIpLCEwfXJldHVybiExfWZ1bmN0aW9uIGE2KGUsdCxuLHIpe2lmKHI9e2xhbmU6MixyZXZlcnRMYW5lOnNYKCksZ2VzdHVyZTpudWxsLGFjdGlvbjpyLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sYTkoZSkpe2lmKHQpdGhyb3cgRXJyb3IobCg0NzkpKX1lbHNlIG51bGwhPT0odD1uNShlLG4sciwyKSkmJnNhKHQsZSwyKX1mdW5jdGlvbiBhOShlKXt2YXIgdD1lLmFsdGVybmF0ZTtyZXR1cm4gZT09PW9ZfHxudWxsIT09dCYmdD09PW9ZfWZ1bmN0aW9uIGE4KGUsdCl7b1E9b0c9ITA7dmFyIG49ZS5wZW5kaW5nO251bGw9PT1uP3QubmV4dD10Oih0Lm5leHQ9bi5uZXh0LG4ubmV4dD10KSxlLnBlbmRpbmc9dH1mdW5jdGlvbiBhNyhlLHQsbil7aWYoMCE9KDQxOTQwNDgmbikpe3ZhciByPXQubGFuZXM7ciY9ZS5wZW5kaW5nTGFuZXMsdC5sYW5lcz1ufD1yLGVTKGUsbil9fXZhciBpZT17cmVhZENvbnRleHQ6clksdXNlOmFsLHVzZUNhbGxiYWNrOm81LHVzZUNvbnRleHQ6bzUsdXNlRWZmZWN0Om81LHVzZUltcGVyYXRpdmVIYW5kbGU6bzUsdXNlTGF5b3V0RWZmZWN0Om81LHVzZUluc2VydGlvbkVmZmVjdDpvNSx1c2VNZW1vOm81LHVzZVJlZHVjZXI6bzUsdXNlUmVmOm81LHVzZVN0YXRlOm81LHVzZURlYnVnVmFsdWU6bzUsdXNlRGVmZXJyZWRWYWx1ZTpvNSx1c2VUcmFuc2l0aW9uOm81LHVzZVN5bmNFeHRlcm5hbFN0b3JlOm81LHVzZUlkOm81LHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOm81LHVzZUZvcm1TdGF0ZTpvNSx1c2VBY3Rpb25TdGF0ZTpvNSx1c2VPcHRpbWlzdGljOm81LHVzZU1lbW9DYWNoZTpvNSx1c2VDYWNoZVJlZnJlc2g6bzV9LGl0PXtyZWFkQ29udGV4dDpyWSx1c2U6YWwsdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXIoKS5tZW1vaXplZFN0YXRlPVtlLHZvaWQgMD09PXQ/bnVsbDp0XSxlfSx1c2VDb250ZXh0OnJZLHVzZUVmZmVjdDphTix1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGUsdCxuKXtuPW51bGwhPW4/bi5jb25jYXQoW2VdKTpudWxsLGFEKDQxOTQzMDgsNCxhVS5iaW5kKG51bGwsdCxlKSxuKX0sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFEKDQxOTQzMDgsNCxlLHQpfSx1c2VJbnNlcnRpb25FZmZlY3Q6ZnVuY3Rpb24oZSx0KXthRCg0LDIsZSx0KX0sdXNlTWVtbzpmdW5jdGlvbihlLHQpe3ZhciBuPWFyKCk7dD12b2lkIDA9PT10P251bGw6dDt2YXIgcj1lKCk7aWYob0ope2VoKCEwKTt0cnl7ZSgpfWZpbmFsbHl7ZWgoITEpfX1yZXR1cm4gbi5tZW1vaXplZFN0YXRlPVtyLHRdLHJ9LHVzZVJlZHVjZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWFyKCk7aWYodm9pZCAwIT09bil7dmFyIG89bih0KTtpZihvSil7ZWgoITApO3RyeXtuKHQpfWZpbmFsbHl7ZWgoITEpfX19ZWxzZSBvPXQ7cmV0dXJuIHIubWVtb2l6ZWRTdGF0ZT1yLmJhc2VTdGF0ZT1vLHIucXVldWU9ZT17cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmUsbGFzdFJlbmRlcmVkU3RhdGU6b30sZT1lLmRpc3BhdGNoPWE0LmJpbmQobnVsbCxvWSxlKSxbci5tZW1vaXplZFN0YXRlLGVdfSx1c2VSZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIGFyKCkubWVtb2l6ZWRTdGF0ZT1lPXtjdXJyZW50OmV9fSx1c2VTdGF0ZTpmdW5jdGlvbihlKXt2YXIgdD0oZT1hYihlKSkucXVldWUsbj1hNS5iaW5kKG51bGwsb1ksdCk7cmV0dXJuIHQuZGlzcGF0Y2g9bixbZS5tZW1vaXplZFN0YXRlLG5dfSx1c2VEZWJ1Z1ZhbHVlOmFxLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYSQoYXIoKSxlLHQpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9YWIoITEpO3JldHVybiBlPWFZLmJpbmQobnVsbCxvWSxlLnF1ZXVlLCEwLCExKSxhcigpLm1lbW9pemVkU3RhdGU9ZSxbITEsZV19LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1vWSxvPWFyKCk7aWYocmope2lmKHZvaWQgMD09PW4pdGhyb3cgRXJyb3IobCg0MDcpKTtuPW4oKX1lbHNle2lmKG49dCgpLG51bGw9PT1sTCl0aHJvdyBFcnJvcihsKDM0OSkpOzAhPSgxMjQmbFIpfHxhaChyLHQsbil9by5tZW1vaXplZFN0YXRlPW47dmFyIGE9e3ZhbHVlOm4sZ2V0U25hcHNob3Q6dH07cmV0dXJuIG8ucXVldWU9YSxhTihhZy5iaW5kKG51bGwscixhLGUpLFtlXSksci5mbGFnc3w9MjA0OCxhVCg5LHtkZXN0cm95OnZvaWQgMH0sYW0uYmluZChudWxsLHIsYSxuLHQpLG51bGwpLG59LHVzZUlkOmZ1bmN0aW9uKCl7dmFyIGU9YXIoKSx0PWxMLmlkZW50aWZpZXJQcmVmaXg7aWYocmope3ZhciBuPXJiLHI9cnY7dD1cIl9cIit0K1wiUl9cIisobj0ociZ+KDE8PDMyLWVtKHIpLTEpKS50b1N0cmluZygzMikrbiksMDwobj1vMCsrKSYmKHQrPVwiSFwiK24udG9TdHJpbmcoMzIpKSx0Kz1cIl9cIn1lbHNlIHQ9XCJfXCIrdCtcInJfXCIrKG49bzQrKykudG9TdHJpbmcoMzIpK1wiX1wiO3JldHVybiBlLm1lbW9pemVkU3RhdGU9dH0sdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6YUosdXNlRm9ybVN0YXRlOmFTLHVzZUFjdGlvblN0YXRlOmFTLHVzZU9wdGltaXN0aWM6ZnVuY3Rpb24oZSl7dmFyIHQ9YXIoKTt0Lm1lbW9pemVkU3RhdGU9dC5iYXNlU3RhdGU9ZTt2YXIgbj17cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOm51bGwsbGFzdFJlbmRlcmVkU3RhdGU6bnVsbH07cmV0dXJuIHQucXVldWU9bix0PWE2LmJpbmQobnVsbCxvWSwhMCxuKSxuLmRpc3BhdGNoPXQsW2UsdF19LHVzZU1lbW9DYWNoZTphcyx1c2VDYWNoZVJlZnJlc2g6ZnVuY3Rpb24oKXtyZXR1cm4gYXIoKS5tZW1vaXplZFN0YXRlPWEyLmJpbmQobnVsbCxvWSl9fSxpcj17cmVhZENvbnRleHQ6clksdXNlOmFsLHVzZUNhbGxiYWNrOmFILHVzZUNvbnRleHQ6clksdXNlRWZmZWN0OmFSLHVzZUltcGVyYXRpdmVIYW5kbGU6YUYsdXNlSW5zZXJ0aW9uRWZmZWN0OmFNLHVzZUxheW91dEVmZmVjdDphWix1c2VNZW1vOmFWLHVzZVJlZHVjZXI6YXUsdXNlUmVmOmF6LHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGF1KGFjKX0sdXNlRGVidWdWYWx1ZTphcSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFXKGFvKCksb0subWVtb2l6ZWRTdGF0ZSxlLHQpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9YXUoYWMpWzBdLHQ9YW8oKS5tZW1vaXplZFN0YXRlO3JldHVybltcImJvb2xlYW5cIj09dHlwZW9mIGU/ZTphaShlKSx0XX0sdXNlU3luY0V4dGVybmFsU3RvcmU6YXAsdXNlSWQ6YTAsdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6YUosdXNlRm9ybVN0YXRlOmFPLHVzZUFjdGlvblN0YXRlOmFPLHVzZU9wdGltaXN0aWM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYUEoYW8oKSxvSyxlLHQpfSx1c2VNZW1vQ2FjaGU6YXMsdXNlQ2FjaGVSZWZyZXNoOmExfSxpbz17cmVhZENvbnRleHQ6clksdXNlOmFsLHVzZUNhbGxiYWNrOmFILHVzZUNvbnRleHQ6clksdXNlRWZmZWN0OmFSLHVzZUltcGVyYXRpdmVIYW5kbGU6YUYsdXNlSW5zZXJ0aW9uRWZmZWN0OmFNLHVzZUxheW91dEVmZmVjdDphWix1c2VNZW1vOmFWLHVzZVJlZHVjZXI6YWYsdXNlUmVmOmF6LHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGFmKGFjKX0sdXNlRGVidWdWYWx1ZTphcSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49YW8oKTtyZXR1cm4gbnVsbD09PW9LP2EkKG4sZSx0KTphVyhuLG9LLm1lbW9pemVkU3RhdGUsZSx0KX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPWFmKGFjKVswXSx0PWFvKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bXCJib29sZWFuXCI9PXR5cGVvZiBlP2U6YWkoZSksdF19LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmFwLHVzZUlkOmEwLHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOmFKLHVzZUZvcm1TdGF0ZTphSSx1c2VBY3Rpb25TdGF0ZTphSSx1c2VPcHRpbWlzdGljOmZ1bmN0aW9uKGUsdCl7dmFyIG49YW8oKTtyZXR1cm4gbnVsbCE9PW9LP2FBKG4sb0ssZSx0KToobi5iYXNlU3RhdGU9ZSxbZSxuLnF1ZXVlLmRpc3BhdGNoXSl9LHVzZU1lbW9DYWNoZTphcyx1c2VDYWNoZVJlZnJlc2g6YTF9O2Z1bmN0aW9uIGlhKGUsdCxuLHIpe249bnVsbD09KG49bihyLHQ9ZS5tZW1vaXplZFN0YXRlKSk/dDpmKHt9LHQsbiksZS5tZW1vaXplZFN0YXRlPW4sMD09PWUubGFuZXMmJihlLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1uKX12YXIgaWk9e2VucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1zcigpLG89b18ocik7by5wYXlsb2FkPXQsbnVsbCE9biYmKG8uY2FsbGJhY2s9biksbnVsbCE9PSh0PW9rKGUsbyxyKSkmJihzYSh0LGUsciksb0UodCxlLHIpKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1zcigpLG89b18ocik7by50YWc9MSxvLnBheWxvYWQ9dCxudWxsIT1uJiYoby5jYWxsYmFjaz1uKSxudWxsIT09KHQ9b2soZSxvLHIpKSYmKHNhKHQsZSxyKSxvRSh0LGUscikpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciBuPXNyKCkscj1vXyhuKTtyLnRhZz0yLG51bGwhPXQmJihyLmNhbGxiYWNrPXQpLG51bGwhPT0odD1vayhlLHIsbikpJiYoc2EodCxlLG4pLG9FKHQsZSxuKSl9fTtmdW5jdGlvbiBpbChlLHQsbixyLG8sYSxpKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZihlPWUuc3RhdGVOb2RlKS5zaG91bGRDb21wb25lbnRVcGRhdGU/ZS5zaG91bGRDb21wb25lbnRVcGRhdGUocixhLGkpOiF0LnByb3RvdHlwZXx8IXQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50fHwhbkUobixyKXx8IW5FKG8sYSl9ZnVuY3Rpb24gaXMoZSx0LG4scil7ZT10LnN0YXRlLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmdC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLHIpLHQuc3RhdGUhPT1lJiZpaS5lbnF1ZXVlUmVwbGFjZVN0YXRlKHQsdC5zdGF0ZSxudWxsKX1mdW5jdGlvbiBpYyhlLHQpe3ZhciBuPXQ7aWYoXCJyZWZcImluIHQpZm9yKHZhciByIGluIG49e30sdClcInJlZlwiIT09ciYmKG5bcl09dFtyXSk7aWYoZT1lLmRlZmF1bHRQcm9wcylmb3IodmFyIG8gaW4gbj09PXQmJihuPWYoe30sbikpLGUpdm9pZCAwPT09bltvXSYmKG5bb109ZVtvXSk7cmV0dXJuIG59ZnVuY3Rpb24gaXUoZSl7blEoZSl9ZnVuY3Rpb24gaWQoZSl7Y29uc29sZS5lcnJvcihlKX1mdW5jdGlvbiBpcChlKXtuUShlKX1mdW5jdGlvbiBpaChlLHQpe3RyeXsoMCxlLm9uVW5jYXVnaHRFcnJvcikodC52YWx1ZSx7Y29tcG9uZW50U3RhY2s6dC5zdGFja30pfWNhdGNoKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9fWZ1bmN0aW9uIGltKGUsdCxuKXt0cnl7KDAsZS5vbkNhdWdodEVycm9yKShuLnZhbHVlLHtjb21wb25lbnRTdGFjazpuLnN0YWNrLGVycm9yQm91bmRhcnk6MT09PXQudGFnP3Quc3RhdGVOb2RlOm51bGx9KX1jYXRjaChlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfX1mdW5jdGlvbiBpZyhlLHQsbil7cmV0dXJuKG49b18obikpLnRhZz0zLG4ucGF5bG9hZD17ZWxlbWVudDpudWxsfSxuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7aWgoZSx0KX0sbn1mdW5jdGlvbiBpeShlKXtyZXR1cm4oZT1vXyhlKSkudGFnPTMsZX1mdW5jdGlvbiBpdihlLHQsbixyKXt2YXIgbz1uLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG8pe3ZhciBhPXIudmFsdWU7ZS5wYXlsb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIG8oYSl9LGUuY2FsbGJhY2s9ZnVuY3Rpb24oKXtpbSh0LG4scil9fXZhciBpPW4uc3RhdGVOb2RlO251bGwhPT1pJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmNvbXBvbmVudERpZENhdGNoJiYoZS5jYWxsYmFjaz1mdW5jdGlvbigpe2ltKHQsbixyKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBvJiYobnVsbD09PWw0P2w0PW5ldyBTZXQoW3RoaXNdKTpsNC5hZGQodGhpcykpO3ZhciBlPXIuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaChyLnZhbHVlLHtjb21wb25lbnRTdGFjazpudWxsIT09ZT9lOlwiXCJ9KX0pfXZhciBpYj1FcnJvcihsKDQ2MSkpLGlBPSExO2Z1bmN0aW9uIGl4KGUsdCxuLHIpe3QuY2hpbGQ9bnVsbD09PWU/b0EodCxudWxsLG4scik6b2IodCxlLmNoaWxkLG4scil9ZnVuY3Rpb24gaXcoZSx0LG4scixvKXtuPW4ucmVuZGVyO3ZhciBhPXQucmVmO2lmKFwicmVmXCJpbiByKXt2YXIgaT17fTtmb3IodmFyIGwgaW4gcilcInJlZlwiIT09bCYmKGlbbF09cltsXSl9ZWxzZSBpPXI7cmV0dXJuKHJXKHQpLHI9bzYoZSx0LG4saSxhLG8pLGw9YWUoKSxudWxsPT09ZXx8aUEpPyhyaiYmbCYmcncodCksdC5mbGFnc3w9MSxpeChlLHQscixvKSx0LmNoaWxkKTooYXQoZSx0LG8pLGlWKGUsdCxvKSl9ZnVuY3Rpb24gaUMoZSx0LG4scixvKXtpZihudWxsPT09ZSl7dmFyIGE9bi50eXBlO3JldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIGF8fHJ0KGEpfHx2b2lkIDAhPT1hLmRlZmF1bHRQcm9wc3x8bnVsbCE9PW4uY29tcGFyZT8oKGU9cm8obi50eXBlLG51bGwscix0LHQubW9kZSxvKSkucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lKToodC50YWc9MTUsdC50eXBlPWEsaV8oZSx0LGEscixvKSl9aWYoYT1lLmNoaWxkLCFpJChlLG8pKXt2YXIgaT1hLm1lbW9pemVkUHJvcHM7aWYoKG49bnVsbCE9PShuPW4uY29tcGFyZSk/bjpuRSkoaSxyKSYmZS5yZWY9PT10LnJlZilyZXR1cm4gaVYoZSx0LG8pfXJldHVybiB0LmZsYWdzfD0xLChlPXJuKGEscikpLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZX1mdW5jdGlvbiBpXyhlLHQsbixyLG8pe2lmKG51bGwhPT1lKXt2YXIgYT1lLm1lbW9pemVkUHJvcHM7aWYobkUoYSxyKSYmZS5yZWY9PT10LnJlZilpZihpQT0hMSx0LnBlbmRpbmdQcm9wcz1yPWEsIWkkKGUsbykpcmV0dXJuIHQubGFuZXM9ZS5sYW5lcyxpVihlLHQsbyk7ZWxzZSAwIT0oMTMxMDcyJmUuZmxhZ3MpJiYoaUE9ITApfXJldHVybiBpUChlLHQsbixyLG8pfWZ1bmN0aW9uIGlrKGUsdCxuLHIpe3ZhciBvPXIuY2hpbGRyZW4sYT1udWxsIT09ZT9lLm1lbW9pemVkU3RhdGU6bnVsbDtpZihudWxsPT09ZSYmbnVsbD09PXQuc3RhdGVOb2RlJiYodC5zdGF0ZU5vZGU9e192aXNpYmlsaXR5OjEsX3BlbmRpbmdNYXJrZXJzOm51bGwsX3JldHJ5Q2FjaGU6bnVsbCxfdHJhbnNpdGlvbnM6bnVsbH0pLFwiaGlkZGVuXCI9PT1yLm1vZGUpe2lmKDAhPSgxMjgmdC5mbGFncykpe2lmKHI9bnVsbCE9PWE/YS5iYXNlTGFuZXN8bjpuLG51bGwhPT1lKXtmb3IoYT0wLG89dC5jaGlsZD1lLmNoaWxkO251bGwhPT1vOylhPWF8by5sYW5lc3xvLmNoaWxkTGFuZXMsbz1vLnNpYmxpbmc7dC5jaGlsZExhbmVzPWEmfnJ9ZWxzZSB0LmNoaWxkTGFuZXM9MCx0LmNoaWxkPW51bGw7cmV0dXJuIGlqKGUsdCxyLG4pfWlmKDA9PSgweDIwMDAwMDAwJm4pKXJldHVybiB0LmxhbmVzPXQuY2hpbGRMYW5lcz0weDIwMDAwMDAwLGlqKGUsdCxudWxsIT09YT9hLmJhc2VMYW5lc3xuOm4sbik7dC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbH0sbnVsbCE9PWUmJm90KHQsbnVsbCE9PWE/YS5jYWNoZVBvb2w6bnVsbCksbnVsbCE9PWE/b0QodCxhKTpvTCgpLG9GKHQpfWVsc2UgbnVsbCE9PWE/KG90KHQsYS5jYWNoZVBvb2wpLG9EKHQsYSksb3EodCksdC5tZW1vaXplZFN0YXRlPW51bGwpOihudWxsIT09ZSYmb3QodCxudWxsKSxvTCgpLG9xKHQpKTtyZXR1cm4gaXgoZSx0LG8sbiksdC5jaGlsZH1mdW5jdGlvbiBpRShlLHQpe3JldHVybiBudWxsIT09ZSYmMjI9PT1lLnRhZ3x8bnVsbCE9PXQuc3RhdGVOb2RlfHwodC5zdGF0ZU5vZGU9e192aXNpYmlsaXR5OjEsX3BlbmRpbmdNYXJrZXJzOm51bGwsX3JldHJ5Q2FjaGU6bnVsbCxfdHJhbnNpdGlvbnM6bnVsbH0pLHQuc2libGluZ31mdW5jdGlvbiBpaihlLHQsbixyKXt2YXIgbz1vZSgpO3JldHVybiB0Lm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczpuLGNhY2hlUG9vbDpvPW51bGw9PT1vP251bGw6e3BhcmVudDpyMC5fY3VycmVudFZhbHVlLHBvb2w6b319LG51bGwhPT1lJiZvdCh0LG51bGwpLG9MKCksb0YodCksbnVsbCE9PWUmJnJWKGUsdCxyLCEwKSxudWxsfWZ1bmN0aW9uIGlTKGUsdCl7cmV0dXJuKHQ9aVooe21vZGU6dC5tb2RlLGNoaWxkcmVuOnQuY2hpbGRyZW59LGUubW9kZSkpLnJlZj1lLnJlZixlLmNoaWxkPXQsdC5yZXR1cm49ZSx0fWZ1bmN0aW9uIGlPKGUsdCxuKXtyZXR1cm4gb2IodCxlLmNoaWxkLG51bGwsbiksZT1pUyh0LHQucGVuZGluZ1Byb3BzKSxlLmZsYWdzfD0yLG9IKHQpLHQubWVtb2l6ZWRTdGF0ZT1udWxsLGV9ZnVuY3Rpb24gaUIoZSx0KXt2YXIgbj10LnJlZjtpZihudWxsPT09biludWxsIT09ZSYmbnVsbCE9PWUucmVmJiYodC5mbGFnc3w9NDE5NDgxNik7ZWxzZXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBuJiZcIm9iamVjdFwiIT10eXBlb2Ygbil0aHJvdyBFcnJvcihsKDI4NCkpOyhudWxsPT09ZXx8ZS5yZWYhPT1uKSYmKHQuZmxhZ3N8PTQxOTQ4MTYpfX1mdW5jdGlvbiBpUChlLHQsbixyLG8pe3JldHVybihyVyh0KSxuPW82KGUsdCxuLHIsdm9pZCAwLG8pLHI9YWUoKSxudWxsPT09ZXx8aUEpPyhyaiYmciYmcncodCksdC5mbGFnc3w9MSxpeChlLHQsbixvKSx0LmNoaWxkKTooYXQoZSx0LG8pLGlWKGUsdCxvKSl9ZnVuY3Rpb24gaUkoZSx0LG4scixvLGEpe3JldHVybihyVyh0KSx0LnVwZGF0ZVF1ZXVlPW51bGwsbj1vOCh0LHIsbixvKSxvOShlKSxyPWFlKCksbnVsbD09PWV8fGlBKT8ocmomJnImJnJ3KHQpLHQuZmxhZ3N8PTEsaXgoZSx0LG4sYSksdC5jaGlsZCk6KGF0KGUsdCxhKSxpVihlLHQsYSkpfWZ1bmN0aW9uIGlUKGUsdCxuLHIsbyl7aWYoclcodCksbnVsbD09PXQuc3RhdGVOb2RlKXt2YXIgYT1uOCxpPW4uY29udGV4dFR5cGU7XCJvYmplY3RcIj09dHlwZW9mIGkmJm51bGwhPT1pJiYoYT1yWShpKSksdC5tZW1vaXplZFN0YXRlPW51bGwhPT0oYT1uZXcgbihyLGEpKS5zdGF0ZSYmdm9pZCAwIT09YS5zdGF0ZT9hLnN0YXRlOm51bGwsYS51cGRhdGVyPWlpLHQuc3RhdGVOb2RlPWEsYS5fcmVhY3RJbnRlcm5hbHM9dCwoYT10LnN0YXRlTm9kZSkucHJvcHM9cixhLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSxhLnJlZnM9e30sb3codCksaT1uLmNvbnRleHRUeXBlLGEuY29udGV4dD1cIm9iamVjdFwiPT10eXBlb2YgaSYmbnVsbCE9PWk/clkoaSk6bjgsYS5zdGF0ZT10Lm1lbW9pemVkU3RhdGUsXCJmdW5jdGlvblwiPT10eXBlb2YoaT1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcykmJihpYSh0LG4saSxyKSxhLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHN8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmXCJmdW5jdGlvblwiIT10eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnR8fChpPWEuc3RhdGUsXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnQmJmEuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSxpIT09YS5zdGF0ZSYmaWkuZW5xdWV1ZVJlcGxhY2VTdGF0ZShhLGEuc3RhdGUsbnVsbCksb0IodCxyLGEsbyksb08oKSxhLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnREaWRNb3VudCYmKHQuZmxhZ3N8PTQxOTQzMDgpLHI9ITB9ZWxzZSBpZihudWxsPT09ZSl7YT10LnN0YXRlTm9kZTt2YXIgbD10Lm1lbW9pemVkUHJvcHMscz1pYyhuLGwpO2EucHJvcHM9czt2YXIgYz1hLmNvbnRleHQsdT1uLmNvbnRleHRUeXBlO2k9bjgsXCJvYmplY3RcIj09dHlwZW9mIHUmJm51bGwhPT11JiYoaT1yWSh1KSk7dmFyIGQ9bi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7dT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBkfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlLGw9dC5wZW5kaW5nUHJvcHMhPT1sLHV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc3x8KGx8fGMhPT1pKSYmaXModCxhLHIsaSksb3g9ITE7dmFyIGY9dC5tZW1vaXplZFN0YXRlO2Euc3RhdGU9ZixvQih0LHIsYSxvKSxvTygpLGM9dC5tZW1vaXplZFN0YXRlLGx8fGYhPT1jfHxveD8oXCJmdW5jdGlvblwiPT10eXBlb2YgZCYmKGlhKHQsbixkLHIpLGM9dC5tZW1vaXplZFN0YXRlKSwocz1veHx8aWwodCxuLHMscixmLGMsaSkpPyh1fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuY29tcG9uZW50V2lsbE1vdW50fHwoXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnQmJmEuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnREaWRNb3VudCYmKHQuZmxhZ3N8PTQxOTQzMDgpKTooXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnREaWRNb3VudCYmKHQuZmxhZ3N8PTQxOTQzMDgpLHQubWVtb2l6ZWRQcm9wcz1yLHQubWVtb2l6ZWRTdGF0ZT1jKSxhLnByb3BzPXIsYS5zdGF0ZT1jLGEuY29udGV4dD1pLHI9cyk6KFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuY29tcG9uZW50RGlkTW91bnQmJih0LmZsYWdzfD00MTk0MzA4KSxyPSExKX1lbHNle2E9dC5zdGF0ZU5vZGUsb0MoZSx0KSx1PWljKG4saT10Lm1lbW9pemVkUHJvcHMpLGEucHJvcHM9dSxkPXQucGVuZGluZ1Byb3BzLGY9YS5jb250ZXh0LGM9bi5jb250ZXh0VHlwZSxzPW44LFwib2JqZWN0XCI9PXR5cGVvZiBjJiZudWxsIT09YyYmKHM9clkoYykpLChjPVwiZnVuY3Rpb25cIj09dHlwZW9mKGw9bi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKXx8XCJmdW5jdGlvblwiIT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmXCJmdW5jdGlvblwiIT10eXBlb2YgYS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwoaSE9PWR8fGYhPT1zKSYmaXModCxhLHIscyksb3g9ITEsZj10Lm1lbW9pemVkU3RhdGUsYS5zdGF0ZT1mLG9CKHQscixhLG8pLG9PKCk7dmFyIHA9dC5tZW1vaXplZFN0YXRlO2khPT1kfHxmIT09cHx8b3h8fG51bGwhPT1lJiZudWxsIT09ZS5kZXBlbmRlbmNpZXMmJnIkKGUuZGVwZW5kZW5jaWVzKT8oXCJmdW5jdGlvblwiPT10eXBlb2YgbCYmKGlhKHQsbixsLHIpLHA9dC5tZW1vaXplZFN0YXRlKSwodT1veHx8aWwodCxuLHUscixmLHAscyl8fG51bGwhPT1lJiZudWxsIT09ZS5kZXBlbmRlbmNpZXMmJnIkKGUuZGVwZW5kZW5jaWVzKSk/KGN8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuY29tcG9uZW50V2lsbFVwZGF0ZXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuY29tcG9uZW50V2lsbFVwZGF0ZSYmYS5jb21wb25lbnRXaWxsVXBkYXRlKHIscCxzKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiZhLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKHIscCxzKSksXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnREaWRVcGRhdGUmJih0LmZsYWdzfD00KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYodC5mbGFnc3w9MTAyNCkpOihcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLmNvbXBvbmVudERpZFVwZGF0ZXx8aT09PWUubWVtb2l6ZWRQcm9wcyYmZj09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fGk9PT1lLm1lbW9pemVkUHJvcHMmJmY9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD0xMDI0KSx0Lm1lbW9pemVkUHJvcHM9cix0Lm1lbW9pemVkU3RhdGU9cCksYS5wcm9wcz1yLGEuc3RhdGU9cCxhLmNvbnRleHQ9cyxyPXUpOihcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLmNvbXBvbmVudERpZFVwZGF0ZXx8aT09PWUubWVtb2l6ZWRQcm9wcyYmZj09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fGk9PT1lLm1lbW9pemVkUHJvcHMmJmY9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD0xMDI0KSxyPSExKX1yZXR1cm4gYT1yLGlCKGUsdCkscj0wIT0oMTI4JnQuZmxhZ3MpLGF8fHI/KGE9dC5zdGF0ZU5vZGUsbj1yJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBuLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj9udWxsOmEucmVuZGVyKCksdC5mbGFnc3w9MSxudWxsIT09ZSYmcj8odC5jaGlsZD1vYih0LGUuY2hpbGQsbnVsbCxvKSx0LmNoaWxkPW9iKHQsbnVsbCxuLG8pKTppeChlLHQsbixvKSx0Lm1lbW9pemVkU3RhdGU9YS5zdGF0ZSxlPXQuY2hpbGQpOmU9aVYoZSx0LG8pLGV9ZnVuY3Rpb24gaXooZSx0LG4scil7cmV0dXJuIHJEKCksdC5mbGFnc3w9MjU2LGl4KGUsdCxuLHIpLHQuY2hpbGR9dmFyIGlEPXtkZWh5ZHJhdGVkOm51bGwsdHJlZUNvbnRleHQ6bnVsbCxyZXRyeUxhbmU6MCxoeWRyYXRpb25FcnJvcnM6bnVsbH07ZnVuY3Rpb24gaUwoZSl7cmV0dXJue2Jhc2VMYW5lczplLGNhY2hlUG9vbDpvbigpfX1mdW5jdGlvbiBpTihlLHQsbil7cmV0dXJuIGU9bnVsbCE9PWU/ZS5jaGlsZExhbmVzJn5uOjAsdCYmKGV8PWxLKSxlfWZ1bmN0aW9uIGlSKGUsdCxuKXt2YXIgcixvPXQucGVuZGluZ1Byb3BzLGE9ITEsaT0wIT0oMTI4JnQuZmxhZ3MpO2lmKChyPWkpfHwocj0obnVsbD09PWV8fG51bGwhPT1lLm1lbW9pemVkU3RhdGUpJiYwIT0oMiZvVi5jdXJyZW50KSksciYmKGE9ITAsdC5mbGFncyY9LTEyOSkscj0wIT0oMzImdC5mbGFncyksdC5mbGFncyY9LTMzLG51bGw9PT1lKXtpZihyail7aWYoYT9vWih0KTpvcSh0KSwoZT1yRSk/bnVsbCE9PShlPW51bGwhPT0oZT1jaihlLHJPKSkmJlwiJlwiIT09ZS5kYXRhP2U6bnVsbCkmJih0Lm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6ZSx0cmVlQ29udGV4dDpudWxsIT09cnk/e2lkOnJ2LG92ZXJmbG93OnJifTpudWxsLHJldHJ5TGFuZToweDIwMDAwMDAwLGh5ZHJhdGlvbkVycm9yczpudWxsfSwobj1ybChlKSkucmV0dXJuPXQsdC5jaGlsZD1uLHJrPXQsckU9bnVsbCk6ZT1udWxsLG51bGw9PT1lKXRocm93IHJQKHQpO3JldHVybiBjTyhlKT90LmxhbmVzPTMyOnQubGFuZXM9MHgyMDAwMDAwMCxudWxsfXZhciBzPW8uY2hpbGRyZW47cmV0dXJuKG89by5mYWxsYmFjayxhKT8ob3EodCkscz1pWih7bW9kZTpcImhpZGRlblwiLGNoaWxkcmVuOnN9LGE9dC5tb2RlKSxvPXJhKG8sYSxuLG51bGwpLHMucmV0dXJuPXQsby5yZXR1cm49dCxzLnNpYmxpbmc9byx0LmNoaWxkPXMsKG89dC5jaGlsZCkubWVtb2l6ZWRTdGF0ZT1pTChuKSxvLmNoaWxkTGFuZXM9aU4oZSxyLG4pLHQubWVtb2l6ZWRTdGF0ZT1pRCxpRShudWxsLG8pKToob1oodCksaU0odCxzKSl9dmFyIGM9ZS5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1jJiZudWxsIT09KHM9Yy5kZWh5ZHJhdGVkKSl7aWYoaSkyNTYmdC5mbGFncz8ob1oodCksdC5mbGFncyY9LTI1Nyx0PWlVKGUsdCxuKSk6bnVsbCE9PXQubWVtb2l6ZWRTdGF0ZT8ob3EodCksdC5jaGlsZD1lLmNoaWxkLHQuZmxhZ3N8PTEyOCx0PW51bGwpOihvcSh0KSxzPW8uZmFsbGJhY2ssYT10Lm1vZGUsbz1pWih7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjpvLmNoaWxkcmVufSxhKSxzPXJhKHMsYSxuLG51bGwpLHMuZmxhZ3N8PTIsby5yZXR1cm49dCxzLnJldHVybj10LG8uc2libGluZz1zLHQuY2hpbGQ9byxvYih0LGUuY2hpbGQsbnVsbCxuKSwobz10LmNoaWxkKS5tZW1vaXplZFN0YXRlPWlMKG4pLG8uY2hpbGRMYW5lcz1pTihlLHIsbiksdC5tZW1vaXplZFN0YXRlPWlELHQ9aUUobnVsbCxvKSk7ZWxzZSBpZihvWih0KSxjTyhzKSl7aWYocj1zLm5leHRTaWJsaW5nJiZzLm5leHRTaWJsaW5nLmRhdGFzZXQpdmFyIHU9ci5kZ3N0O3I9dSwobz1FcnJvcihsKDQxOSkpKS5zdGFjaz1cIlwiLG8uZGlnZXN0PXIsck4oe3ZhbHVlOm8sc291cmNlOm51bGwsc3RhY2s6bnVsbH0pLHQ9aVUoZSx0LG4pfWVsc2UgaWYoaUF8fHJWKGUsdCxuLCExKSxyPTAhPShuJmUuY2hpbGRMYW5lcyksaUF8fHIpe2lmKG51bGwhPT0ocj1sTCkmJjAhPT0obz1lTyhyLG4pKSYmbyE9PWMucmV0cnlMYW5lKXRocm93IGMucmV0cnlMYW5lPW8sbjMoZSxvKSxzYShyLGUsbyksaWI7Y1Mocyl8fHNnKCksdD1pVShlLHQsbil9ZWxzZSBjUyhzKT8odC5mbGFnc3w9MTkyLHQuY2hpbGQ9ZS5jaGlsZCx0PW51bGwpOihlPWMudHJlZUNvbnRleHQsckU9Y0Iocy5uZXh0U2libGluZykscms9dCxyaj0hMCxyUz1udWxsLHJPPSExLG51bGwhPT1lJiZyXyh0LGUpLHQ9aU0odCxvLmNoaWxkcmVuKSx0LmZsYWdzfD00MDk2KTtyZXR1cm4gdH1yZXR1cm4gYT8ob3EodCkscz1vLmZhbGxiYWNrLGE9dC5tb2RlLHU9KGM9ZS5jaGlsZCkuc2libGluZywobz1ybihjLHttb2RlOlwiaGlkZGVuXCIsY2hpbGRyZW46by5jaGlsZHJlbn0pKS5zdWJ0cmVlRmxhZ3M9MHgzZTAwMDAwJmMuc3VidHJlZUZsYWdzLG51bGwhPT11P3M9cm4odSxzKToocz1yYShzLGEsbixudWxsKSxzLmZsYWdzfD0yKSxzLnJldHVybj10LG8ucmV0dXJuPXQsby5zaWJsaW5nPXMsdC5jaGlsZD1vLGlFKG51bGwsbyksbz10LmNoaWxkLG51bGw9PT0ocz1lLmNoaWxkLm1lbW9pemVkU3RhdGUpP3M9aUwobik6KG51bGwhPT0oYT1zLmNhY2hlUG9vbCk/KGM9cjAuX2N1cnJlbnRWYWx1ZSxhPWEucGFyZW50IT09Yz97cGFyZW50OmMscG9vbDpjfTphKTphPW9uKCkscz17YmFzZUxhbmVzOnMuYmFzZUxhbmVzfG4sY2FjaGVQb29sOmF9KSxvLm1lbW9pemVkU3RhdGU9cyxvLmNoaWxkTGFuZXM9aU4oZSxyLG4pLHQubWVtb2l6ZWRTdGF0ZT1pRCxpRShlLmNoaWxkLG8pKToob1oodCksZT0obj1lLmNoaWxkKS5zaWJsaW5nLChuPXJuKG4se21vZGU6XCJ2aXNpYmxlXCIsY2hpbGRyZW46by5jaGlsZHJlbn0pKS5yZXR1cm49dCxuLnNpYmxpbmc9bnVsbCxudWxsIT09ZSYmKG51bGw9PT0ocj10LmRlbGV0aW9ucyk/KHQuZGVsZXRpb25zPVtlXSx0LmZsYWdzfD0xNik6ci5wdXNoKGUpKSx0LmNoaWxkPW4sdC5tZW1vaXplZFN0YXRlPW51bGwsbil9ZnVuY3Rpb24gaU0oZSx0KXtyZXR1cm4odD1pWih7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjp0fSxlLm1vZGUpKS5yZXR1cm49ZSxlLmNoaWxkPXR9ZnVuY3Rpb24gaVooZSx0KXtyZXR1cm4oZT1yZSgyMixlLG51bGwsdCkpLmxhbmVzPTAsZX1mdW5jdGlvbiBpVShlLHQsbil7cmV0dXJuIG9iKHQsZS5jaGlsZCxudWxsLG4pLGU9aU0odCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksZS5mbGFnc3w9Mix0Lm1lbW9pemVkU3RhdGU9bnVsbCxlfWZ1bmN0aW9uIGlGKGUsdCxuKXtlLmxhbmVzfD10O3ZhciByPWUuYWx0ZXJuYXRlO251bGwhPT1yJiYoci5sYW5lc3w9dCkscnEoZS5yZXR1cm4sdCxuKX1mdW5jdGlvbiBpcShlLHQsbixyLG8sYSl7dmFyIGk9ZS5tZW1vaXplZFN0YXRlO251bGw9PT1pP2UubWVtb2l6ZWRTdGF0ZT17aXNCYWNrd2FyZHM6dCxyZW5kZXJpbmc6bnVsbCxyZW5kZXJpbmdTdGFydFRpbWU6MCxsYXN0OnIsdGFpbDpuLHRhaWxNb2RlOm8sdHJlZUZvcmtDb3VudDphfTooaS5pc0JhY2t3YXJkcz10LGkucmVuZGVyaW5nPW51bGwsaS5yZW5kZXJpbmdTdGFydFRpbWU9MCxpLmxhc3Q9cixpLnRhaWw9bixpLnRhaWxNb2RlPW8saS50cmVlRm9ya0NvdW50PWEpfWZ1bmN0aW9uIGlIKGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcyxvPXIucmV2ZWFsT3JkZXIsYT1yLnRhaWw7cj1yLmNoaWxkcmVuO3ZhciBpPW9WLmN1cnJlbnQsbD0wIT0oMiZpKTtpZihsPyhpPTEmaXwyLHQuZmxhZ3N8PTEyOCk6aSY9MSxNKG9WLGkpLGl4KGUsdCxyLG4pLHI9cmo/cmg6MCwhbCYmbnVsbCE9PWUmJjAhPSgxMjgmZS5mbGFncykpZTpmb3IoZT10LmNoaWxkO251bGwhPT1lOyl7aWYoMTM9PT1lLnRhZyludWxsIT09ZS5tZW1vaXplZFN0YXRlJiZpRihlLG4sdCk7ZWxzZSBpZigxOT09PWUudGFnKWlGKGUsbix0KTtlbHNlIGlmKG51bGwhPT1lLmNoaWxkKXtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZDtjb250aW51ZX1pZihlPT09dClicmVhaztmb3IoO251bGw9PT1lLnNpYmxpbmc7KXtpZihudWxsPT09ZS5yZXR1cm58fGUucmV0dXJuPT09dClicmVhayBlO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZ31zd2l0Y2gobyl7Y2FzZVwiZm9yd2FyZHNcIjpmb3Iobz1udWxsLG49dC5jaGlsZDtudWxsIT09bjspbnVsbCE9PShlPW4uYWx0ZXJuYXRlKSYmbnVsbD09PW8kKGUpJiYobz1uKSxuPW4uc2libGluZztudWxsPT09KG49byk/KG89dC5jaGlsZCx0LmNoaWxkPW51bGwpOihvPW4uc2libGluZyxuLnNpYmxpbmc9bnVsbCksaXEodCwhMSxvLG4sYSxyKTticmVhaztjYXNlXCJiYWNrd2FyZHNcIjpjYXNlXCJ1bnN0YWJsZV9sZWdhY3ktYmFja3dhcmRzXCI6Zm9yKG49bnVsbCxvPXQuY2hpbGQsdC5jaGlsZD1udWxsO251bGwhPT1vOyl7aWYobnVsbCE9PShlPW8uYWx0ZXJuYXRlKSYmbnVsbD09PW8kKGUpKXt0LmNoaWxkPW87YnJlYWt9ZT1vLnNpYmxpbmcsby5zaWJsaW5nPW4sbj1vLG89ZX1pcSh0LCEwLG4sbnVsbCxhLHIpO2JyZWFrO2Nhc2VcInRvZ2V0aGVyXCI6aXEodCwhMSxudWxsLG51bGwsdm9pZCAwLHIpO2JyZWFrO2RlZmF1bHQ6dC5tZW1vaXplZFN0YXRlPW51bGx9cmV0dXJuIHQuY2hpbGR9ZnVuY3Rpb24gaVYoZSx0LG4pe2lmKG51bGwhPT1lJiYodC5kZXBlbmRlbmNpZXM9ZS5kZXBlbmRlbmNpZXMpLGwkfD10LmxhbmVzLDA9PShuJnQuY2hpbGRMYW5lcykpe2lmKG51bGw9PT1lKXJldHVybiBudWxsO2Vsc2UgaWYoclYoZSx0LG4sITEpLDA9PShuJnQuY2hpbGRMYW5lcykpcmV0dXJuIG51bGx9aWYobnVsbCE9PWUmJnQuY2hpbGQhPT1lLmNoaWxkKXRocm93IEVycm9yKGwoMTUzKSk7aWYobnVsbCE9PXQuY2hpbGQpe2ZvcihuPXJuKGU9dC5jaGlsZCxlLnBlbmRpbmdQcm9wcyksdC5jaGlsZD1uLG4ucmV0dXJuPXQ7bnVsbCE9PWUuc2libGluZzspZT1lLnNpYmxpbmcsKG49bi5zaWJsaW5nPXJuKGUsZS5wZW5kaW5nUHJvcHMpKS5yZXR1cm49dDtuLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBpJChlLHQpe3JldHVybiAwIT0oZS5sYW5lcyZ0KXx8ISEobnVsbCE9PShlPWUuZGVwZW5kZW5jaWVzKSYmciQoZSkpfWZ1bmN0aW9uIGlXKGUsdCxuKXtpZihudWxsIT09ZSlpZihlLm1lbW9pemVkUHJvcHMhPT10LnBlbmRpbmdQcm9wcylpQT0hMDtlbHNle2lmKCFpJChlLG4pJiYwPT0oMTI4JnQuZmxhZ3MpKXJldHVybiBpQT0hMSxmdW5jdGlvbihlLHQsbil7c3dpdGNoKHQudGFnKXtjYXNlIDM6SCh0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLHJVKHQscjAsZS5tZW1vaXplZFN0YXRlLmNhY2hlKSxyRCgpO2JyZWFrO2Nhc2UgMjc6Y2FzZSA1OiQodCk7YnJlYWs7Y2FzZSA0OkgodCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDEwOnJVKHQsdC50eXBlLHQubWVtb2l6ZWRQcm9wcy52YWx1ZSk7YnJlYWs7Y2FzZSAzMTppZihudWxsIT09dC5tZW1vaXplZFN0YXRlKXJldHVybiB0LmZsYWdzfD0xMjgsb1UodCksbnVsbDticmVhaztjYXNlIDEzOnZhciByPXQubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09cil7aWYobnVsbCE9PXIuZGVoeWRyYXRlZClyZXR1cm4gb1oodCksdC5mbGFnc3w9MTI4LG51bGw7aWYoMCE9KG4mdC5jaGlsZC5jaGlsZExhbmVzKSlyZXR1cm4gaVIoZSx0LG4pO3JldHVybiBvWih0KSxudWxsIT09KGU9aVYoZSx0LG4pKT9lLnNpYmxpbmc6bnVsbH1vWih0KTticmVhaztjYXNlIDE5OnZhciBvPTAhPSgxMjgmZS5mbGFncyk7aWYoKHI9MCE9KG4mdC5jaGlsZExhbmVzKSl8fChyVihlLHQsbiwhMSkscj0wIT0obiZ0LmNoaWxkTGFuZXMpKSxvKXtpZihyKXJldHVybiBpSChlLHQsbik7dC5mbGFnc3w9MTI4fWlmKG51bGwhPT0obz10Lm1lbW9pemVkU3RhdGUpJiYoby5yZW5kZXJpbmc9bnVsbCxvLnRhaWw9bnVsbCxvLmxhc3RFZmZlY3Q9bnVsbCksTShvVixvVi5jdXJyZW50KSwhcilyZXR1cm4gbnVsbDticmVhaztjYXNlIDIyOnJldHVybiB0LmxhbmVzPTAsaWsoZSx0LG4sdC5wZW5kaW5nUHJvcHMpO2Nhc2UgMjQ6clUodCxyMCxlLm1lbW9pemVkU3RhdGUuY2FjaGUpfXJldHVybiBpVihlLHQsbil9KGUsdCxuKTtpQT0wIT0oMTMxMDcyJmUuZmxhZ3MpfWVsc2UgaUE9ITEscmomJjAhPSgxMDQ4NTc2JnQuZmxhZ3MpJiZyeCh0LHJoLHQuaW5kZXgpO3N3aXRjaCh0LmxhbmVzPTAsdC50YWcpe2Nhc2UgMTY6ZTp7dmFyIHI9dC5wZW5kaW5nUHJvcHM7aWYoZT1vYyh0LmVsZW1lbnRUeXBlKSx0LnR5cGU9ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXJ0KGUpPyhyPWljKGUsciksdC50YWc9MSx0PWlUKG51bGwsdCxlLHIsbikpOih0LnRhZz0wLHQ9aVAobnVsbCx0LGUscixuKSk7ZWxzZXtpZihudWxsIT1lKXt2YXIgbz1lLiQkdHlwZW9mO2lmKG89PT14KXt0LnRhZz0xMSx0PWl3KG51bGwsdCxlLHIsbik7YnJlYWsgZX1pZihvPT09Xyl7dC50YWc9MTQsdD1pQyhudWxsLHQsZSxyLG4pO2JyZWFrIGV9fXRocm93IEVycm9yKGwoMzA2LHQ9ZnVuY3Rpb24gZSh0KXtpZihudWxsPT10KXJldHVybiBudWxsO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpcmV0dXJuIHQuJCR0eXBlb2Y9PT1CP251bGw6dC5kaXNwbGF5TmFtZXx8dC5uYW1lfHxudWxsO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXJldHVybiB0O3N3aXRjaCh0KXtjYXNlIGc6cmV0dXJuXCJGcmFnbWVudFwiO2Nhc2UgdjpyZXR1cm5cIlByb2ZpbGVyXCI7Y2FzZSB5OnJldHVyblwiU3RyaWN0TW9kZVwiO2Nhc2UgdzpyZXR1cm5cIlN1c3BlbnNlXCI7Y2FzZSBDOnJldHVyblwiU3VzcGVuc2VMaXN0XCI7Y2FzZSBFOnJldHVyblwiQWN0aXZpdHlcIn1pZihcIm9iamVjdFwiPT10eXBlb2YgdClzd2l0Y2godC4kJHR5cGVvZil7Y2FzZSBtOnJldHVyblwiUG9ydGFsXCI7Y2FzZSBBOnJldHVybiB0LmRpc3BsYXlOYW1lfHxcIkNvbnRleHRcIjtjYXNlIGI6cmV0dXJuKHQuX2NvbnRleHQuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Db25zdW1lclwiO2Nhc2UgeDp2YXIgbj10LnJlbmRlcjtyZXR1cm4odD10LmRpc3BsYXlOYW1lKXx8KHQ9XCJcIiE9PSh0PW4uZGlzcGxheU5hbWV8fG4ubmFtZXx8XCJcIik/XCJGb3J3YXJkUmVmKFwiK3QrXCIpXCI6XCJGb3J3YXJkUmVmXCIpLHQ7Y2FzZSBfOnJldHVybiBudWxsIT09KG49dC5kaXNwbGF5TmFtZXx8bnVsbCk/bjplKHQudHlwZSl8fFwiTWVtb1wiO2Nhc2UgazpuPXQuX3BheWxvYWQsdD10Ll9pbml0O3RyeXtyZXR1cm4gZSh0KG4pKX1jYXRjaChlKXt9fXJldHVybiBudWxsfShlKXx8ZSxcIlwiKSl9fXJldHVybiB0O2Nhc2UgMDpyZXR1cm4gaVAoZSx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxuKTtjYXNlIDE6cmV0dXJuIG89aWMocj10LnR5cGUsdC5wZW5kaW5nUHJvcHMpLGlUKGUsdCxyLG8sbik7Y2FzZSAzOmU6e2lmKEgodCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxudWxsPT09ZSl0aHJvdyBFcnJvcihsKDM4NykpO3I9dC5wZW5kaW5nUHJvcHM7dmFyIGE9dC5tZW1vaXplZFN0YXRlO289YS5lbGVtZW50LG9DKGUsdCksb0IodCxyLG51bGwsbik7dmFyIGk9dC5tZW1vaXplZFN0YXRlO2lmKHJVKHQscjAscj1pLmNhY2hlKSxyIT09YS5jYWNoZSYmckgodCxbcjBdLG4sITApLG9PKCkscj1pLmVsZW1lbnQsYS5pc0RlaHlkcmF0ZWQpaWYoYT17ZWxlbWVudDpyLGlzRGVoeWRyYXRlZDohMSxjYWNoZTppLmNhY2hlfSx0LnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1hLHQubWVtb2l6ZWRTdGF0ZT1hLDI1NiZ0LmZsYWdzKXt0PWl6KGUsdCxyLG4pO2JyZWFrIGV9ZWxzZSBpZihyIT09byl7ck4obz1ydShFcnJvcihsKDQyNCkpLHQpKSx0PWl6KGUsdCxyLG4pO2JyZWFrIGV9ZWxzZSBmb3IockU9Y0IoKGU9OT09PShlPXQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLm5vZGVUeXBlP2UuYm9keTpcIkhUTUxcIj09PWUubm9kZU5hbWU/ZS5vd25lckRvY3VtZW50LmJvZHk6ZSkuZmlyc3RDaGlsZCkscms9dCxyaj0hMCxyUz1udWxsLHJPPSEwLG49b0EodCxudWxsLHIsbiksdC5jaGlsZD1uO247KW4uZmxhZ3M9LTMmbi5mbGFnc3w0MDk2LG49bi5zaWJsaW5nO2Vsc2V7aWYockQoKSxyPT09byl7dD1pVihlLHQsbik7YnJlYWsgZX1peChlLHQscixuKX10PXQuY2hpbGR9cmV0dXJuIHQ7Y2FzZSAyNjpyZXR1cm4gaUIoZSx0KSxudWxsPT09ZT8obj1jRih0LnR5cGUsbnVsbCx0LnBlbmRpbmdQcm9wcyxudWxsKSk/dC5tZW1vaXplZFN0YXRlPW46cmp8fChuPXQudHlwZSxlPXQucGVuZGluZ1Byb3BzLChyPWNwKEYuY3VycmVudCkuY3JlYXRlRWxlbWVudChuKSlbZURdPXQscltlTF09ZSxjdShyLG4sZSksZVkociksdC5zdGF0ZU5vZGU9cik6dC5tZW1vaXplZFN0YXRlPWNGKHQudHlwZSxlLm1lbW9pemVkUHJvcHMsdC5wZW5kaW5nUHJvcHMsZS5tZW1vaXplZFN0YXRlKSxudWxsO2Nhc2UgMjc6cmV0dXJuICQodCksbnVsbD09PWUmJnJqJiYocj10LnN0YXRlTm9kZT1jeih0LnR5cGUsdC5wZW5kaW5nUHJvcHMsRi5jdXJyZW50KSxyaz10LHJPPSEwLG89ckUsY0ModC50eXBlKT8oY1A9byxyRT1jQihyLmZpcnN0Q2hpbGQpKTpyRT1vKSxpeChlLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sbiksaUIoZSx0KSxudWxsPT09ZSYmKHQuZmxhZ3N8PTQxOTQzMDQpLHQuY2hpbGQ7Y2FzZSA1OnJldHVybiBudWxsPT09ZSYmcmomJigobz1yPXJFKSYmKG51bGwhPT0ocj1mdW5jdGlvbihlLHQsbixyKXtmb3IoOzE9PT1lLm5vZGVUeXBlOyl7aWYoZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKXtpZighciYmKFwiSU5QVVRcIiE9PWUubm9kZU5hbWV8fFwiaGlkZGVuXCIhPT1lLnR5cGUpKWJyZWFrfWVsc2UgaWYocil7aWYoIWVbZUZdKXN3aXRjaCh0KXtjYXNlXCJtZXRhXCI6aWYoIWUuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIikpYnJlYWs7cmV0dXJuIGU7Y2FzZVwibGlua1wiOmlmKFwic3R5bGVzaGVldFwiPT09KG89ZS5nZXRBdHRyaWJ1dGUoXCJyZWxcIikpJiZlLmhhc0F0dHJpYnV0ZShcImRhdGEtcHJlY2VkZW5jZVwiKXx8byE9PW4ucmVsfHxlLmdldEF0dHJpYnV0ZShcImhyZWZcIikhPT0obnVsbD09bi5ocmVmfHxcIlwiPT09bi5ocmVmP251bGw6bi5ocmVmKXx8ZS5nZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiKSE9PShudWxsPT1uLmNyb3NzT3JpZ2luP251bGw6bi5jcm9zc09yaWdpbil8fGUuZ2V0QXR0cmlidXRlKFwidGl0bGVcIikhPT0obnVsbD09bi50aXRsZT9udWxsOm4udGl0bGUpKWJyZWFrO3JldHVybiBlO2Nhc2VcInN0eWxlXCI6aWYoZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLXByZWNlZGVuY2VcIikpYnJlYWs7cmV0dXJuIGU7Y2FzZVwic2NyaXB0XCI6aWYoKChvPWUuZ2V0QXR0cmlidXRlKFwic3JjXCIpKSE9PShudWxsPT1uLnNyYz9udWxsOm4uc3JjKXx8ZS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpIT09KG51bGw9PW4udHlwZT9udWxsOm4udHlwZSl8fGUuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIikhPT0obnVsbD09bi5jcm9zc09yaWdpbj9udWxsOm4uY3Jvc3NPcmlnaW4pKSYmbyYmZS5oYXNBdHRyaWJ1dGUoXCJhc3luY1wiKSYmIWUuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIikpYnJlYWs7cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4gZX19ZWxzZXtpZihcImlucHV0XCIhPT10fHxcImhpZGRlblwiIT09ZS50eXBlKXJldHVybiBlO3ZhciBvPW51bGw9PW4ubmFtZT9udWxsOlwiXCIrbi5uYW1lO2lmKFwiaGlkZGVuXCI9PT1uLnR5cGUmJmUuZ2V0QXR0cmlidXRlKFwibmFtZVwiKT09PW8pcmV0dXJuIGV9aWYobnVsbD09PShlPWNCKGUubmV4dFNpYmxpbmcpKSlicmVha31yZXR1cm4gbnVsbH0ocix0LnR5cGUsdC5wZW5kaW5nUHJvcHMsck8pKT8odC5zdGF0ZU5vZGU9cixyaz10LHJFPWNCKHIuZmlyc3RDaGlsZCksck89ITEsbz0hMCk6bz0hMSksb3x8clAodCkpLCQodCksbz10LnR5cGUsYT10LnBlbmRpbmdQcm9wcyxpPW51bGwhPT1lP2UubWVtb2l6ZWRQcm9wczpudWxsLHI9YS5jaGlsZHJlbixjZyhvLGEpP3I9bnVsbDpudWxsIT09aSYmY2cobyxpKSYmKHQuZmxhZ3N8PTMyKSxudWxsIT09dC5tZW1vaXplZFN0YXRlJiYoYzkuX2N1cnJlbnRWYWx1ZT1vPW82KGUsdCxvNyxudWxsLG51bGwsbikpLGlCKGUsdCksaXgoZSx0LHIsbiksdC5jaGlsZDtjYXNlIDY6cmV0dXJuIG51bGw9PT1lJiZyaiYmKChlPW49ckUpJiYobnVsbCE9PShuPWZ1bmN0aW9uKGUsdCxuKXtpZihcIlwiPT09dClyZXR1cm4gbnVsbDtmb3IoOzMhPT1lLm5vZGVUeXBlOylpZigoMSE9PWUubm9kZVR5cGV8fFwiSU5QVVRcIiE9PWUubm9kZU5hbWV8fFwiaGlkZGVuXCIhPT1lLnR5cGUpJiYhbnx8bnVsbD09PShlPWNCKGUubmV4dFNpYmxpbmcpKSlyZXR1cm4gbnVsbDtyZXR1cm4gZX0obix0LnBlbmRpbmdQcm9wcyxyTykpPyh0LnN0YXRlTm9kZT1uLHJrPXQsckU9bnVsbCxlPSEwKTplPSExKSxlfHxyUCh0KSksbnVsbDtjYXNlIDEzOnJldHVybiBpUihlLHQsbik7Y2FzZSA0OnJldHVybiBIKHQsdC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbykscj10LnBlbmRpbmdQcm9wcyxudWxsPT09ZT90LmNoaWxkPW9iKHQsbnVsbCxyLG4pOml4KGUsdCxyLG4pLHQuY2hpbGQ7Y2FzZSAxMTpyZXR1cm4gaXcoZSx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxuKTtjYXNlIDc6cmV0dXJuIGl4KGUsdCx0LnBlbmRpbmdQcm9wcyxuKSx0LmNoaWxkO2Nhc2UgODpjYXNlIDEyOnJldHVybiBpeChlLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sbiksdC5jaGlsZDtjYXNlIDEwOnJldHVybiByPXQucGVuZGluZ1Byb3BzLHJVKHQsdC50eXBlLHIudmFsdWUpLGl4KGUsdCxyLmNoaWxkcmVuLG4pLHQuY2hpbGQ7Y2FzZSA5OnJldHVybiBvPXQudHlwZS5fY29udGV4dCxyPXQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHJXKHQpLHI9cihvPXJZKG8pKSx0LmZsYWdzfD0xLGl4KGUsdCxyLG4pLHQuY2hpbGQ7Y2FzZSAxNDpyZXR1cm4gaUMoZSx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxuKTtjYXNlIDE1OnJldHVybiBpXyhlLHQsdC50eXBlLHQucGVuZGluZ1Byb3BzLG4pO2Nhc2UgMTk6cmV0dXJuIGlIKGUsdCxuKTtjYXNlIDMxOnZhciBzPWUsYz10LHU9bixkPWMucGVuZGluZ1Byb3BzLGY9MCE9KDEyOCZjLmZsYWdzKTtpZihjLmZsYWdzJj0tMTI5LG51bGw9PT1zKXtpZihyail7aWYoXCJoaWRkZW5cIj09PWQubW9kZSlyZXR1cm4gcz1pUyhjLGQpLGMubGFuZXM9MHgyMDAwMDAwMCxpRShudWxsLHMpO2lmKG9VKGMpLChzPXJFKT9udWxsIT09KHM9bnVsbCE9PShzPWNqKHMsck8pKSYmXCImXCI9PT1zLmRhdGE/czpudWxsKSYmKGMubWVtb2l6ZWRTdGF0ZT17ZGVoeWRyYXRlZDpzLHRyZWVDb250ZXh0Om51bGwhPT1yeT97aWQ6cnYsb3ZlcmZsb3c6cmJ9Om51bGwscmV0cnlMYW5lOjB4MjAwMDAwMDAsaHlkcmF0aW9uRXJyb3JzOm51bGx9LCh1PXJsKHMpKS5yZXR1cm49YyxjLmNoaWxkPXUscms9YyxyRT1udWxsKTpzPW51bGwsbnVsbD09PXMpdGhyb3cgclAoYyk7cmV0dXJuIGMubGFuZXM9MHgyMDAwMDAwMCxudWxsfXJldHVybiBpUyhjLGQpfXZhciBwPXMubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09cCl7dmFyIGg9cC5kZWh5ZHJhdGVkO2lmKG9VKGMpLGYpaWYoMjU2JmMuZmxhZ3MpYy5mbGFncyY9LTI1NyxjPWlPKHMsYyx1KTtlbHNlIGlmKG51bGwhPT1jLm1lbW9pemVkU3RhdGUpYy5jaGlsZD1zLmNoaWxkLGMuZmxhZ3N8PTEyOCxjPW51bGw7ZWxzZSB0aHJvdyBFcnJvcihsKDU1OCkpO2Vsc2UgaWYoaUF8fHJWKHMsYyx1LCExKSxmPTAhPSh1JnMuY2hpbGRMYW5lcyksaUF8fGYpe2lmKG51bGwhPT0oZD1sTCkmJjAhPT0oaD1lTyhkLHUpKSYmaCE9PXAucmV0cnlMYW5lKXRocm93IHAucmV0cnlMYW5lPWgsbjMocyxoKSxzYShkLHMsaCksaWI7c2coKSxjPWlPKHMsYyx1KX1lbHNlIHM9cC50cmVlQ29udGV4dCxyRT1jQihoLm5leHRTaWJsaW5nKSxyaz1jLHJqPSEwLHJTPW51bGwsck89ITEsbnVsbCE9PXMmJnJfKGMscyksYz1pUyhjLGQpLGMuZmxhZ3N8PTQwOTY7cmV0dXJuIGN9cmV0dXJuKHM9cm4ocy5jaGlsZCx7bW9kZTpkLm1vZGUsY2hpbGRyZW46ZC5jaGlsZHJlbn0pKS5yZWY9Yy5yZWYsYy5jaGlsZD1zLHMucmV0dXJuPWMscztjYXNlIDIyOnJldHVybiBpayhlLHQsbix0LnBlbmRpbmdQcm9wcyk7Y2FzZSAyNDpyZXR1cm4gclcodCkscj1yWShyMCksbnVsbD09PWU/KG51bGw9PT0obz1vZSgpKSYmKG89bEwsYT1yMSgpLG8ucG9vbGVkQ2FjaGU9YSxhLnJlZkNvdW50KyssbnVsbCE9PWEmJihvLnBvb2xlZENhY2hlTGFuZXN8PW4pLG89YSksdC5tZW1vaXplZFN0YXRlPXtwYXJlbnQ6cixjYWNoZTpvfSxvdyh0KSxyVSh0LHIwLG8pKTooMCE9KGUubGFuZXMmbikmJihvQyhlLHQpLG9CKHQsbnVsbCxudWxsLG4pLG9PKCkpLG89ZS5tZW1vaXplZFN0YXRlLGE9dC5tZW1vaXplZFN0YXRlLG8ucGFyZW50IT09cj8obz17cGFyZW50OnIsY2FjaGU6cn0sdC5tZW1vaXplZFN0YXRlPW8sMD09PXQubGFuZXMmJih0Lm1lbW9pemVkU3RhdGU9dC51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9byksclUodCxyMCxyKSk6KHJVKHQscjAscj1hLmNhY2hlKSxyIT09by5jYWNoZSYmckgodCxbcjBdLG4sITApKSksaXgoZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLHQuY2hpbGQ7Y2FzZSAyOTp0aHJvdyB0LnBlbmRpbmdQcm9wc310aHJvdyBFcnJvcihsKDE1Nix0LnRhZykpfWZ1bmN0aW9uIGlZKGUpe2UuZmxhZ3N8PTR9ZnVuY3Rpb24gaUsoZSx0LG4scixvKXtpZigodD0wIT0oMzImZS5tb2RlKSkmJih0PSExKSx0KXtpZihlLmZsYWdzfD0weDEwMDAwMDAsKDB4MTNmZmZmNDAmbyk9PT1vKWlmKGUuc3RhdGVOb2RlLmNvbXBsZXRlKWUuZmxhZ3N8PTgxOTI7ZWxzZSBpZihzcCgpKWUuZmxhZ3N8PTgxOTI7ZWxzZSB0aHJvdyBvdT1vaSxvb31lbHNlIGUuZmxhZ3MmPS0weDEwMDAwMDF9ZnVuY3Rpb24gaVgoZSx0KXtpZihcInN0eWxlc2hlZXRcIiE9PXQudHlwZXx8MCE9KDQmdC5zdGF0ZS5sb2FkaW5nKSllLmZsYWdzJj0tMHgxMDAwMDAxO2Vsc2UgaWYoZS5mbGFnc3w9MHgxMDAwMDAwLCFjMSh0KSlpZihzcCgpKWUuZmxhZ3N8PTgxOTI7ZWxzZSB0aHJvdyBvdT1vaSxvb31mdW5jdGlvbiBpRyhlLHQpe251bGwhPT10JiYoZS5mbGFnc3w9NCksMTYzODQmZS5mbGFncyYmKHQ9MjIhPT1lLnRhZz9lXygpOjB4MjAwMDAwMDAsZS5sYW5lc3w9dCxsWHw9dCl9ZnVuY3Rpb24gaVEoZSx0KXtpZighcmopc3dpdGNoKGUudGFpbE1vZGUpe2Nhc2VcImhpZGRlblwiOnQ9ZS50YWlsO2Zvcih2YXIgbj1udWxsO251bGwhPT10OyludWxsIT09dC5hbHRlcm5hdGUmJihuPXQpLHQ9dC5zaWJsaW5nO251bGw9PT1uP2UudGFpbD1udWxsOm4uc2libGluZz1udWxsO2JyZWFrO2Nhc2VcImNvbGxhcHNlZFwiOm49ZS50YWlsO2Zvcih2YXIgcj1udWxsO251bGwhPT1uOyludWxsIT09bi5hbHRlcm5hdGUmJihyPW4pLG49bi5zaWJsaW5nO251bGw9PT1yP3R8fG51bGw9PT1lLnRhaWw/ZS50YWlsPW51bGw6ZS50YWlsLnNpYmxpbmc9bnVsbDpyLnNpYmxpbmc9bnVsbH19ZnVuY3Rpb24gaUooZSl7dmFyIHQ9bnVsbCE9PWUuYWx0ZXJuYXRlJiZlLmFsdGVybmF0ZS5jaGlsZD09PWUuY2hpbGQsbj0wLHI9MDtpZih0KWZvcih2YXIgbz1lLmNoaWxkO251bGwhPT1vOylufD1vLmxhbmVzfG8uY2hpbGRMYW5lcyxyfD0weDNlMDAwMDAmby5zdWJ0cmVlRmxhZ3Mscnw9MHgzZTAwMDAwJm8uZmxhZ3Msby5yZXR1cm49ZSxvPW8uc2libGluZztlbHNlIGZvcihvPWUuY2hpbGQ7bnVsbCE9PW87KW58PW8ubGFuZXN8by5jaGlsZExhbmVzLHJ8PW8uc3VidHJlZUZsYWdzLHJ8PW8uZmxhZ3Msby5yZXR1cm49ZSxvPW8uc2libGluZztyZXR1cm4gZS5zdWJ0cmVlRmxhZ3N8PXIsZS5jaGlsZExhbmVzPW4sdH1mdW5jdGlvbiBpMChlLHQpe3N3aXRjaChyQyh0KSx0LnRhZyl7Y2FzZSAzOnJGKHIwKSxWKCk7YnJlYWs7Y2FzZSAyNjpjYXNlIDI3OmNhc2UgNTpXKHQpO2JyZWFrO2Nhc2UgNDpWKCk7YnJlYWs7Y2FzZSAzMTpudWxsIT09dC5tZW1vaXplZFN0YXRlJiZvSCh0KTticmVhaztjYXNlIDEzOm9IKHQpO2JyZWFrO2Nhc2UgMTk6UihvVik7YnJlYWs7Y2FzZSAxMDpyRih0LnR5cGUpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzpvSCh0KSxvTigpLG51bGwhPT1lJiZSKHI3KTticmVhaztjYXNlIDI0OnJGKHIwKX19ZnVuY3Rpb24gaTEoZSx0KXt0cnl7dmFyIG49dC51cGRhdGVRdWV1ZSxyPW51bGwhPT1uP24ubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1yKXt2YXIgbz1yLm5leHQ7bj1vO2Rve2lmKChuLnRhZyZlKT09PWUpe3I9dm9pZCAwO3ZhciBhPW4uY3JlYXRlO24uaW5zdC5kZXN0cm95PXI9YSgpfW49bi5uZXh0fXdoaWxlKG4hPT1vKX19Y2F0Y2goZSl7c1AodCx0LnJldHVybixlKX19ZnVuY3Rpb24gaTIoZSx0LG4pe3RyeXt2YXIgcj10LnVwZGF0ZVF1ZXVlLG89bnVsbCE9PXI/ci5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PW8pe3ZhciBhPW8ubmV4dDtyPWE7ZG97aWYoKHIudGFnJmUpPT09ZSl7dmFyIGk9ci5pbnN0LGw9aS5kZXN0cm95O2lmKHZvaWQgMCE9PWwpe2kuZGVzdHJveT12b2lkIDAsbz10O3RyeXtsKCl9Y2F0Y2goZSl7c1AobyxuLGUpfX19cj1yLm5leHR9d2hpbGUociE9PWEpfX1jYXRjaChlKXtzUCh0LHQucmV0dXJuLGUpfX1mdW5jdGlvbiBpNChlKXt2YXIgdD1lLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT10KXt2YXIgbj1lLnN0YXRlTm9kZTt0cnl7b0kodCxuKX1jYXRjaCh0KXtzUChlLGUucmV0dXJuLHQpfX19ZnVuY3Rpb24gaTUoZSx0LG4pe24ucHJvcHM9aWMoZS50eXBlLGUubWVtb2l6ZWRQcm9wcyksbi5zdGF0ZT1lLm1lbW9pemVkU3RhdGU7dHJ5e24uY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChuKXtzUChlLHQsbil9fWZ1bmN0aW9uIGkzKGUsdCl7dHJ5e3ZhciBuPWUucmVmO2lmKG51bGwhPT1uKXtzd2l0Y2goZS50YWcpe2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6dmFyIHI9ZS5zdGF0ZU5vZGU7YnJlYWs7ZGVmYXVsdDpyPWUuc3RhdGVOb2RlfVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/ZS5yZWZDbGVhbnVwPW4ocik6bi5jdXJyZW50PXJ9fWNhdGNoKG4pe3NQKGUsdCxuKX19ZnVuY3Rpb24gaTYoZSx0KXt2YXIgbj1lLnJlZixyPWUucmVmQ2xlYW51cDtpZihudWxsIT09bilpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXRyeXtyKCl9Y2F0Y2gobil7c1AoZSx0LG4pfWZpbmFsbHl7ZS5yZWZDbGVhbnVwPW51bGwsbnVsbCE9KGU9ZS5hbHRlcm5hdGUpJiYoZS5yZWZDbGVhbnVwPW51bGwpfWVsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil0cnl7bihudWxsKX1jYXRjaChuKXtzUChlLHQsbil9ZWxzZSBuLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBpOShlKXt2YXIgdD1lLnR5cGUsbj1lLm1lbW9pemVkUHJvcHMscj1lLnN0YXRlTm9kZTt0cnl7c3dpdGNoKHQpe2Nhc2VcImJ1dHRvblwiOmNhc2VcImlucHV0XCI6Y2FzZVwic2VsZWN0XCI6Y2FzZVwidGV4dGFyZWFcIjpuLmF1dG9Gb2N1cyYmci5mb2N1cygpO2JyZWFrO2Nhc2VcImltZ1wiOm4uc3JjP3Iuc3JjPW4uc3JjOm4uc3JjU2V0JiYoci5zcmNzZXQ9bi5zcmNTZXQpfX1jYXRjaCh0KXtzUChlLGUucmV0dXJuLHQpfX1mdW5jdGlvbiBpOChlLHQsbil7dHJ5e3ZhciByPWUuc3RhdGVOb2RlOyhmdW5jdGlvbihlLHQsbixyKXtzd2l0Y2godCl7Y2FzZVwiZGl2XCI6Y2FzZVwic3BhblwiOmNhc2VcInN2Z1wiOmNhc2VcInBhdGhcIjpjYXNlXCJhXCI6Y2FzZVwiZ1wiOmNhc2VcInBcIjpjYXNlXCJsaVwiOmJyZWFrO2Nhc2VcImlucHV0XCI6dmFyIG89bnVsbCxhPW51bGwsaT1udWxsLHM9bnVsbCxjPW51bGwsdT1udWxsLGQ9bnVsbDtmb3IoaCBpbiBuKXt2YXIgZj1uW2hdO2lmKG4uaGFzT3duUHJvcGVydHkoaCkmJm51bGwhPWYpc3dpdGNoKGgpe2Nhc2VcImNoZWNrZWRcIjpjYXNlXCJ2YWx1ZVwiOmJyZWFrO2Nhc2VcImRlZmF1bHRWYWx1ZVwiOmM9ZjtkZWZhdWx0OnIuaGFzT3duUHJvcGVydHkoaCl8fGNzKGUsdCxoLG51bGwscixmKX19Zm9yKHZhciBwIGluIHIpe3ZhciBoPXJbcF07aWYoZj1uW3BdLHIuaGFzT3duUHJvcGVydHkocCkmJihudWxsIT1ofHxudWxsIT1mKSlzd2l0Y2gocCl7Y2FzZVwidHlwZVwiOmE9aDticmVhaztjYXNlXCJuYW1lXCI6bz1oO2JyZWFrO2Nhc2VcImNoZWNrZWRcIjp1PWg7YnJlYWs7Y2FzZVwiZGVmYXVsdENoZWNrZWRcIjpkPWg7YnJlYWs7Y2FzZVwidmFsdWVcIjppPWg7YnJlYWs7Y2FzZVwiZGVmYXVsdFZhbHVlXCI6cz1oO2JyZWFrO2Nhc2VcImNoaWxkcmVuXCI6Y2FzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjppZihudWxsIT1oKXRocm93IEVycm9yKGwoMTM3LHQpKTticmVhaztkZWZhdWx0OmghPT1mJiZjcyhlLHQscCxoLHIsZil9fXRuKGUsaSxzLGMsdSxkLGEsbyk7cmV0dXJuO2Nhc2VcInNlbGVjdFwiOmZvcihhIGluIGg9aT1zPXA9bnVsbCxuKWlmKGM9blthXSxuLmhhc093blByb3BlcnR5KGEpJiZudWxsIT1jKXN3aXRjaChhKXtjYXNlXCJ2YWx1ZVwiOmJyZWFrO2Nhc2VcIm11bHRpcGxlXCI6aD1jO2RlZmF1bHQ6ci5oYXNPd25Qcm9wZXJ0eShhKXx8Y3MoZSx0LGEsbnVsbCxyLGMpfWZvcihvIGluIHIpaWYoYT1yW29dLGM9bltvXSxyLmhhc093blByb3BlcnR5KG8pJiYobnVsbCE9YXx8bnVsbCE9Yykpc3dpdGNoKG8pe2Nhc2VcInZhbHVlXCI6cD1hO2JyZWFrO2Nhc2VcImRlZmF1bHRWYWx1ZVwiOnM9YTticmVhaztjYXNlXCJtdWx0aXBsZVwiOmk9YTtkZWZhdWx0OmEhPT1jJiZjcyhlLHQsbyxhLHIsYyl9dD1zLG49aSxyPWgsbnVsbCE9cD90YShlLCEhbixwLCExKTohIXIhPSEhbiYmKG51bGwhPXQ/dGEoZSwhIW4sdCwhMCk6dGEoZSwhIW4sbj9bXTpcIlwiLCExKSk7cmV0dXJuO2Nhc2VcInRleHRhcmVhXCI6Zm9yKHMgaW4gaD1wPW51bGwsbilpZihvPW5bc10sbi5oYXNPd25Qcm9wZXJ0eShzKSYmbnVsbCE9byYmIXIuaGFzT3duUHJvcGVydHkocykpc3dpdGNoKHMpe2Nhc2VcInZhbHVlXCI6Y2FzZVwiY2hpbGRyZW5cIjpicmVhaztkZWZhdWx0OmNzKGUsdCxzLG51bGwscixvKX1mb3IoaSBpbiByKWlmKG89cltpXSxhPW5baV0sci5oYXNPd25Qcm9wZXJ0eShpKSYmKG51bGwhPW98fG51bGwhPWEpKXN3aXRjaChpKXtjYXNlXCJ2YWx1ZVwiOnA9bzticmVhaztjYXNlXCJkZWZhdWx0VmFsdWVcIjpoPW87YnJlYWs7Y2FzZVwiY2hpbGRyZW5cIjpicmVhaztjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPW8pdGhyb3cgRXJyb3IobCg5MSkpO2JyZWFrO2RlZmF1bHQ6byE9PWEmJmNzKGUsdCxpLG8scixhKX10aShlLHAsaCk7cmV0dXJuO2Nhc2VcIm9wdGlvblwiOmZvcih2YXIgbSBpbiBuKXA9blttXSxuLmhhc093blByb3BlcnR5KG0pJiZudWxsIT1wJiYhci5oYXNPd25Qcm9wZXJ0eShtKSYmKFwic2VsZWN0ZWRcIj09PW0/ZS5zZWxlY3RlZD0hMTpjcyhlLHQsbSxudWxsLHIscCkpO2ZvcihjIGluIHIpcD1yW2NdLGg9bltjXSxyLmhhc093blByb3BlcnR5KGMpJiZwIT09aCYmKG51bGwhPXB8fG51bGwhPWgpJiYoXCJzZWxlY3RlZFwiPT09Yz9lLnNlbGVjdGVkPXAmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHAmJlwic3ltYm9sXCIhPXR5cGVvZiBwOmNzKGUsdCxjLHAscixoKSk7cmV0dXJuO2Nhc2VcImltZ1wiOmNhc2VcImxpbmtcIjpjYXNlXCJhcmVhXCI6Y2FzZVwiYmFzZVwiOmNhc2VcImJyXCI6Y2FzZVwiY29sXCI6Y2FzZVwiZW1iZWRcIjpjYXNlXCJoclwiOmNhc2VcImtleWdlblwiOmNhc2VcIm1ldGFcIjpjYXNlXCJwYXJhbVwiOmNhc2VcInNvdXJjZVwiOmNhc2VcInRyYWNrXCI6Y2FzZVwid2JyXCI6Y2FzZVwibWVudWl0ZW1cIjpmb3IodmFyIGcgaW4gbilwPW5bZ10sbi5oYXNPd25Qcm9wZXJ0eShnKSYmbnVsbCE9cCYmIXIuaGFzT3duUHJvcGVydHkoZykmJmNzKGUsdCxnLG51bGwscixwKTtmb3IodSBpbiByKWlmKHA9clt1XSxoPW5bdV0sci5oYXNPd25Qcm9wZXJ0eSh1KSYmcCE9PWgmJihudWxsIT1wfHxudWxsIT1oKSlzd2l0Y2godSl7Y2FzZVwiY2hpbGRyZW5cIjpjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPXApdGhyb3cgRXJyb3IobCgxMzcsdCkpO2JyZWFrO2RlZmF1bHQ6Y3MoZSx0LHUscCxyLGgpfXJldHVybjtkZWZhdWx0OmlmKHRmKHQpKXtmb3IodmFyIHkgaW4gbilwPW5beV0sbi5oYXNPd25Qcm9wZXJ0eSh5KSYmdm9pZCAwIT09cCYmIXIuaGFzT3duUHJvcGVydHkoeSkmJmNjKGUsdCx5LHZvaWQgMCxyLHApO2ZvcihkIGluIHIpcD1yW2RdLGg9bltkXSxyLmhhc093blByb3BlcnR5KGQpJiZwIT09aCYmKHZvaWQgMCE9PXB8fHZvaWQgMCE9PWgpJiZjYyhlLHQsZCxwLHIsaCk7cmV0dXJufX1mb3IodmFyIHYgaW4gbilwPW5bdl0sbi5oYXNPd25Qcm9wZXJ0eSh2KSYmbnVsbCE9cCYmIXIuaGFzT3duUHJvcGVydHkodikmJmNzKGUsdCx2LG51bGwscixwKTtmb3IoZiBpbiByKXA9cltmXSxoPW5bZl0sci5oYXNPd25Qcm9wZXJ0eShmKSYmcCE9PWgmJihudWxsIT1wfHxudWxsIT1oKSYmY3MoZSx0LGYscCxyLGgpfSkocixlLnR5cGUsbix0KSxyW2VMXT10fWNhdGNoKHQpe3NQKGUsZS5yZXR1cm4sdCl9fWZ1bmN0aW9uIGk3KGUpe3JldHVybiA1PT09ZS50YWd8fDM9PT1lLnRhZ3x8MjY9PT1lLnRhZ3x8Mjc9PT1lLnRhZyYmY0MoZS50eXBlKXx8ND09PWUudGFnfWZ1bmN0aW9uIGxlKGUpe2U6Zm9yKDs7KXtmb3IoO251bGw9PT1lLnNpYmxpbmc7KXtpZihudWxsPT09ZS5yZXR1cm58fGk3KGUucmV0dXJuKSlyZXR1cm4gbnVsbDtlPWUucmV0dXJufWZvcihlLnNpYmxpbmcucmV0dXJuPWUucmV0dXJuLGU9ZS5zaWJsaW5nOzUhPT1lLnRhZyYmNiE9PWUudGFnJiYxOCE9PWUudGFnOyl7aWYoMjc9PT1lLnRhZyYmY0MoZS50eXBlKXx8MiZlLmZsYWdzfHxudWxsPT09ZS5jaGlsZHx8ND09PWUudGFnKWNvbnRpbnVlIGU7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGR9aWYoISgyJmUuZmxhZ3MpKXJldHVybiBlLnN0YXRlTm9kZX19ZnVuY3Rpb24gbHQoZSx0LG4pe3ZhciByPWUudGFnO2lmKDU9PT1yfHw2PT09cillPWUuc3RhdGVOb2RlLHQ/bi5pbnNlcnRCZWZvcmUoZSx0KTpuLmFwcGVuZENoaWxkKGUpO2Vsc2UgaWYoNCE9PXImJigyNz09PXImJmNDKGUudHlwZSkmJihuPWUuc3RhdGVOb2RlKSxudWxsIT09KGU9ZS5jaGlsZCkpKWZvcihsdChlLHQsbiksZT1lLnNpYmxpbmc7bnVsbCE9PWU7KWx0KGUsdCxuKSxlPWUuc2libGluZ31mdW5jdGlvbiBsbihlKXt2YXIgdD1lLnN0YXRlTm9kZSxuPWUubWVtb2l6ZWRQcm9wczt0cnl7Zm9yKHZhciByPWUudHlwZSxvPXQuYXR0cmlidXRlcztvLmxlbmd0aDspdC5yZW1vdmVBdHRyaWJ1dGVOb2RlKG9bMF0pO2N1KHQscixuKSx0W2VEXT1lLHRbZUxdPW59Y2F0Y2godCl7c1AoZSxlLnJldHVybix0KX19dmFyIGxyPSExLGxvPSExLGxhPSExLGxpPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtTZXQ/V2Vha1NldDpTZXQsbGw9bnVsbDtmdW5jdGlvbiBscyhlLHQsbil7dmFyIHI9bi5mbGFncztzd2l0Y2gobi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6bEEoZSxuKSw0JnImJmkxKDUsbik7YnJlYWs7Y2FzZSAxOmlmKGxBKGUsbiksNCZyKWlmKGU9bi5zdGF0ZU5vZGUsbnVsbD09PXQpdHJ5e2UuY29tcG9uZW50RGlkTW91bnQoKX1jYXRjaChlKXtzUChuLG4ucmV0dXJuLGUpfWVsc2V7dmFyIG89aWMobi50eXBlLHQubWVtb2l6ZWRQcm9wcyk7dD10Lm1lbW9pemVkU3RhdGU7dHJ5e2UuY29tcG9uZW50RGlkVXBkYXRlKG8sdCxlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKX1jYXRjaChlKXtzUChuLG4ucmV0dXJuLGUpfX02NCZyJiZpNChuKSw1MTImciYmaTMobixuLnJldHVybik7YnJlYWs7Y2FzZSAzOmlmKGxBKGUsbiksNjQmciYmbnVsbCE9PShlPW4udXBkYXRlUXVldWUpKXtpZih0PW51bGwsbnVsbCE9PW4uY2hpbGQpc3dpdGNoKG4uY2hpbGQudGFnKXtjYXNlIDI3OmNhc2UgNTpjYXNlIDE6dD1uLmNoaWxkLnN0YXRlTm9kZX10cnl7b0koZSx0KX1jYXRjaChlKXtzUChuLG4ucmV0dXJuLGUpfX1icmVhaztjYXNlIDI3Om51bGw9PT10JiY0JnImJmxuKG4pO2Nhc2UgMjY6Y2FzZSA1OmxBKGUsbiksbnVsbD09PXQmJjQmciYmaTkobiksNTEyJnImJmkzKG4sbi5yZXR1cm4pO2JyZWFrO2Nhc2UgMTI6ZGVmYXVsdDpsQShlLG4pO2JyZWFrO2Nhc2UgMzE6bEEoZSxuKSw0JnImJmxwKGUsbik7YnJlYWs7Y2FzZSAxMzpsQShlLG4pLDQmciYmbGgoZSxuKSw2NCZyJiZudWxsIT09KGU9bi5tZW1vaXplZFN0YXRlKSYmbnVsbCE9PShlPWUuZGVoeWRyYXRlZCkmJmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5vd25lckRvY3VtZW50O2lmKFwiJH5cIj09PWUuZGF0YSllLl9yZWFjdFJldHJ5PXQ7ZWxzZSBpZihcIiQ/XCIhPT1lLmRhdGF8fFwibG9hZGluZ1wiIT09bi5yZWFkeVN0YXRlKXQoKTtlbHNle3ZhciByPWZ1bmN0aW9uKCl7dCgpLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIixyKX07bi5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLHIpLGUuX3JlYWN0UmV0cnk9cn19KGUsbj1zRC5iaW5kKG51bGwsbikpO2JyZWFrO2Nhc2UgMjI6aWYoIShyPW51bGwhPT1uLm1lbW9pemVkU3RhdGV8fGxyKSl7dD1udWxsIT09dCYmbnVsbCE9PXQubWVtb2l6ZWRTdGF0ZXx8bG8sbz1scjt2YXIgYT1sbztscj1yLChsbz10KSYmIWE/ZnVuY3Rpb24gZSh0LG4scil7Zm9yKHI9ciYmMCE9KDg3NzImbi5zdWJ0cmVlRmxhZ3MpLG49bi5jaGlsZDtudWxsIT09bjspe3ZhciBvPW4uYWx0ZXJuYXRlLGE9dCxpPW4sbD1pLmZsYWdzO3N3aXRjaChpLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTplKGEsaSxyKSxpMSg0LGkpO2JyZWFrO2Nhc2UgMTppZihlKGEsaSxyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZihhPShvPWkpLnN0YXRlTm9kZSkuY29tcG9uZW50RGlkTW91bnQpdHJ5e2EuY29tcG9uZW50RGlkTW91bnQoKX1jYXRjaChlKXtzUChvLG8ucmV0dXJuLGUpfWlmKG51bGwhPT0oYT0obz1pKS51cGRhdGVRdWV1ZSkpe3ZhciBzPW8uc3RhdGVOb2RlO3RyeXt2YXIgYz1hLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7aWYobnVsbCE9PWMpZm9yKGEuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcz1udWxsLGE9MDthPGMubGVuZ3RoO2ErKylvUChjW2FdLHMpfWNhdGNoKGUpe3NQKG8sby5yZXR1cm4sZSl9fXImJjY0JmwmJmk0KGkpLGkzKGksaS5yZXR1cm4pO2JyZWFrO2Nhc2UgMjc6bG4oaSk7Y2FzZSAyNjpjYXNlIDU6ZShhLGksciksciYmbnVsbD09PW8mJjQmbCYmaTkoaSksaTMoaSxpLnJldHVybik7YnJlYWs7Y2FzZSAxMjpkZWZhdWx0OmUoYSxpLHIpO2JyZWFrO2Nhc2UgMzE6ZShhLGksciksciYmNCZsJiZscChhLGkpO2JyZWFrO2Nhc2UgMTM6ZShhLGksciksciYmNCZsJiZsaChhLGkpO2JyZWFrO2Nhc2UgMjI6bnVsbD09PWkubWVtb2l6ZWRTdGF0ZSYmZShhLGksciksaTMoaSxpLnJldHVybik7Y2FzZSAzMDp9bj1uLnNpYmxpbmd9fShlLG4sMCE9KDg3NzImbi5zdWJ0cmVlRmxhZ3MpKTpsQShlLG4pLGxyPW8sbG89YX1jYXNlIDMwOn19dmFyIGxjPW51bGwsbHU9ITE7ZnVuY3Rpb24gbGQoZSx0LG4pe2ZvcihuPW4uY2hpbGQ7bnVsbCE9PW47KWxmKGUsdCxuKSxuPW4uc2libGluZ31mdW5jdGlvbiBsZihlLHQsbil7aWYoZXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVwLm9uQ29tbWl0RmliZXJVbm1vdW50KXRyeXtlcC5vbkNvbW1pdEZpYmVyVW5tb3VudChlZixuKX1jYXRjaChlKXt9c3dpdGNoKG4udGFnKXtjYXNlIDI2OmxvfHxpNihuLHQpLGxkKGUsdCxuKSxuLm1lbW9pemVkU3RhdGU/bi5tZW1vaXplZFN0YXRlLmNvdW50LS06bi5zdGF0ZU5vZGUmJihuPW4uc3RhdGVOb2RlKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pO2JyZWFrO2Nhc2UgMjc6bG98fGk2KG4sdCk7dmFyIHI9bGMsbz1sdTtjQyhuLnR5cGUpJiYobGM9bi5zdGF0ZU5vZGUsbHU9ITEpLGxkKGUsdCxuKSxjRChuLnN0YXRlTm9kZSksbGM9cixsdT1vO2JyZWFrO2Nhc2UgNTpsb3x8aTYobix0KTtjYXNlIDY6aWYocj1sYyxvPWx1LGxjPW51bGwsbGQoZSx0LG4pLGxjPXIsbHU9byxudWxsIT09bGMpaWYobHUpdHJ5eyg5PT09bGMubm9kZVR5cGU/bGMuYm9keTpcIkhUTUxcIj09PWxjLm5vZGVOYW1lP2xjLm93bmVyRG9jdW1lbnQuYm9keTpsYykucmVtb3ZlQ2hpbGQobi5zdGF0ZU5vZGUpfWNhdGNoKGUpe3NQKG4sdCxlKX1lbHNlIHRyeXtsYy5yZW1vdmVDaGlsZChuLnN0YXRlTm9kZSl9Y2F0Y2goZSl7c1Aobix0LGUpfWJyZWFrO2Nhc2UgMTg6bnVsbCE9PWxjJiYobHU/KGNfKDk9PT0oZT1sYykubm9kZVR5cGU/ZS5ib2R5OlwiSFRNTFwiPT09ZS5ub2RlTmFtZT9lLm93bmVyRG9jdW1lbnQuYm9keTplLG4uc3RhdGVOb2RlKSx1TyhlKSk6Y18obGMsbi5zdGF0ZU5vZGUpKTticmVhaztjYXNlIDQ6cj1sYyxvPWx1LGxjPW4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sbHU9ITAsbGQoZSx0LG4pLGxjPXIsbHU9bzticmVhaztjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6bG98fGkyKDIsbix0KSxsb3x8aTIoNCxuLHQpLGxkKGUsdCxuKTticmVhaztjYXNlIDE6bG98fChpNihuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9bi5zdGF0ZU5vZGUpLmNvbXBvbmVudFdpbGxVbm1vdW50JiZpNShuLHQscikpLGxkKGUsdCxuKTticmVhaztjYXNlIDIxOmRlZmF1bHQ6bGQoZSx0LG4pO2JyZWFrO2Nhc2UgMjI6bG89KHI9bG8pfHxudWxsIT09bi5tZW1vaXplZFN0YXRlLGxkKGUsdCxuKSxsbz1yfX1mdW5jdGlvbiBscChlLHQpe2lmKG51bGw9PT10Lm1lbW9pemVkU3RhdGUmJm51bGwhPT0oZT10LmFsdGVybmF0ZSkmJm51bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpKXtlPWUuZGVoeWRyYXRlZDt0cnl7dU8oZSl9Y2F0Y2goZSl7c1AodCx0LnJldHVybixlKX19fWZ1bmN0aW9uIGxoKGUsdCl7aWYobnVsbD09PXQubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PShlPXQuYWx0ZXJuYXRlKSYmbnVsbCE9PShlPWUubWVtb2l6ZWRTdGF0ZSkmJm51bGwhPT0oZT1lLmRlaHlkcmF0ZWQpKXRyeXt1TyhlKX1jYXRjaChlKXtzUCh0LHQucmV0dXJuLGUpfX1mdW5jdGlvbiBsbShlLHQpe3ZhciBuPWZ1bmN0aW9uKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSAzMTpjYXNlIDEzOmNhc2UgMTk6dmFyIHQ9ZS5zdGF0ZU5vZGU7cmV0dXJuIG51bGw9PT10JiYodD1lLnN0YXRlTm9kZT1uZXcgbGkpLHQ7Y2FzZSAyMjpyZXR1cm4gbnVsbD09PSh0PShlPWUuc3RhdGVOb2RlKS5fcmV0cnlDYWNoZSkmJih0PWUuX3JldHJ5Q2FjaGU9bmV3IGxpKSx0O2RlZmF1bHQ6dGhyb3cgRXJyb3IobCg0MzUsZS50YWcpKX19KGUpO3QuZm9yRWFjaChmdW5jdGlvbih0KXtpZighbi5oYXModCkpe24uYWRkKHQpO3ZhciByPXNMLmJpbmQobnVsbCxlLHQpO3QudGhlbihyLHIpfX0pfWZ1bmN0aW9uIGxnKGUsdCl7dmFyIG49dC5kZWxldGlvbnM7aWYobnVsbCE9PW4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl0sYT1lLGk9dCxzPWk7ZTpmb3IoO251bGwhPT1zOyl7c3dpdGNoKHMudGFnKXtjYXNlIDI3OmlmKGNDKHMudHlwZSkpe2xjPXMuc3RhdGVOb2RlLGx1PSExO2JyZWFrIGV9YnJlYWs7Y2FzZSA1OmxjPXMuc3RhdGVOb2RlLGx1PSExO2JyZWFrIGU7Y2FzZSAzOmNhc2UgNDpsYz1zLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGx1PSEwO2JyZWFrIGV9cz1zLnJldHVybn1pZihudWxsPT09bGMpdGhyb3cgRXJyb3IobCgxNjApKTtsZihhLGksbyksbGM9bnVsbCxsdT0hMSxudWxsIT09KGE9by5hbHRlcm5hdGUpJiYoYS5yZXR1cm49bnVsbCksby5yZXR1cm49bnVsbH1pZigxMzg3OCZ0LnN1YnRyZWVGbGFncylmb3IodD10LmNoaWxkO251bGwhPT10Oylsdih0LGUpLHQ9dC5zaWJsaW5nfXZhciBseT1udWxsO2Z1bmN0aW9uIGx2KGUsdCl7dmFyIG49ZS5hbHRlcm5hdGUscj1lLmZsYWdzO3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmxnKHQsZSksbGIoZSksNCZyJiYoaTIoMyxlLGUucmV0dXJuKSxpMSgzLGUpLGkyKDUsZSxlLnJldHVybikpO2JyZWFrO2Nhc2UgMTpsZyh0LGUpLGxiKGUpLDUxMiZyJiYobG98fG51bGw9PT1ufHxpNihuLG4ucmV0dXJuKSksNjQmciYmbHImJm51bGwhPT0oZT1lLnVwZGF0ZVF1ZXVlKSYmbnVsbCE9PShyPWUuY2FsbGJhY2tzKSYmKG49ZS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzLGUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcz1udWxsPT09bj9yOm4uY29uY2F0KHIpKTticmVhaztjYXNlIDI2OnZhciBvPWx5O2lmKGxnKHQsZSksbGIoZSksNTEyJnImJihsb3x8bnVsbD09PW58fGk2KG4sbi5yZXR1cm4pKSw0JnIpe3ZhciBhPW51bGwhPT1uP24ubWVtb2l6ZWRTdGF0ZTpudWxsO2lmKHI9ZS5tZW1vaXplZFN0YXRlLG51bGw9PT1uKWlmKG51bGw9PT1yKWlmKG51bGw9PT1lLnN0YXRlTm9kZSl7ZTp7cj1lLnR5cGUsbj1lLm1lbW9pemVkUHJvcHMsbz1vLm93bmVyRG9jdW1lbnR8fG87dDpzd2l0Y2gocil7Y2FzZVwidGl0bGVcIjooIShhPW8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0aXRsZVwiKVswXSl8fGFbZUZdfHxhW2VEXXx8XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT09YS5uYW1lc3BhY2VVUkl8fGEuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIikpJiYoYT1vLmNyZWF0ZUVsZW1lbnQociksby5oZWFkLmluc2VydEJlZm9yZShhLG8ucXVlcnlTZWxlY3RvcihcImhlYWQgPiB0aXRsZVwiKSkpLGN1KGEscixuKSxhW2VEXT1lLGVZKGEpLHI9YTticmVhayBlO2Nhc2VcImxpbmtcIjp2YXIgaT1jSihcImxpbmtcIixcImhyZWZcIixvKS5nZXQocisobi5ocmVmfHxcIlwiKSk7aWYoaSl7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspaWYoKGE9aVtzXSkuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKT09PShudWxsPT1uLmhyZWZ8fFwiXCI9PT1uLmhyZWY/bnVsbDpuLmhyZWYpJiZhLmdldEF0dHJpYnV0ZShcInJlbFwiKT09PShudWxsPT1uLnJlbD9udWxsOm4ucmVsKSYmYS5nZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiKT09PShudWxsPT1uLnRpdGxlP251bGw6bi50aXRsZSkmJmEuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIik9PT0obnVsbD09bi5jcm9zc09yaWdpbj9udWxsOm4uY3Jvc3NPcmlnaW4pKXtpLnNwbGljZShzLDEpO2JyZWFrIHR9fWN1KGE9by5jcmVhdGVFbGVtZW50KHIpLHIsbiksby5oZWFkLmFwcGVuZENoaWxkKGEpO2JyZWFrO2Nhc2VcIm1ldGFcIjppZihpPWNKKFwibWV0YVwiLFwiY29udGVudFwiLG8pLmdldChyKyhuLmNvbnRlbnR8fFwiXCIpKSl7Zm9yKHM9MDtzPGkubGVuZ3RoO3MrKylpZigoYT1pW3NdKS5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpPT09KG51bGw9PW4uY29udGVudD9udWxsOlwiXCIrbi5jb250ZW50KSYmYS5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpPT09KG51bGw9PW4ubmFtZT9udWxsOm4ubmFtZSkmJmEuZ2V0QXR0cmlidXRlKFwicHJvcGVydHlcIik9PT0obnVsbD09bi5wcm9wZXJ0eT9udWxsOm4ucHJvcGVydHkpJiZhLmdldEF0dHJpYnV0ZShcImh0dHAtZXF1aXZcIik9PT0obnVsbD09bi5odHRwRXF1aXY/bnVsbDpuLmh0dHBFcXVpdikmJmEuZ2V0QXR0cmlidXRlKFwiY2hhcnNldFwiKT09PShudWxsPT1uLmNoYXJTZXQ/bnVsbDpuLmNoYXJTZXQpKXtpLnNwbGljZShzLDEpO2JyZWFrIHR9fWN1KGE9by5jcmVhdGVFbGVtZW50KHIpLHIsbiksby5oZWFkLmFwcGVuZENoaWxkKGEpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobCg0NjgscikpfWFbZURdPWUsZVkoYSkscj1hfWUuc3RhdGVOb2RlPXJ9ZWxzZSBjMChvLGUudHlwZSxlLnN0YXRlTm9kZSk7ZWxzZSBlLnN0YXRlTm9kZT1jWShvLHIsZS5tZW1vaXplZFByb3BzKTtlbHNlIGEhPT1yPyhudWxsPT09YT9udWxsIT09bi5zdGF0ZU5vZGUmJihuPW4uc3RhdGVOb2RlKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pOmEuY291bnQtLSxudWxsPT09cj9jMChvLGUudHlwZSxlLnN0YXRlTm9kZSk6Y1kobyxyLGUubWVtb2l6ZWRQcm9wcykpOm51bGw9PT1yJiZudWxsIT09ZS5zdGF0ZU5vZGUmJmk4KGUsZS5tZW1vaXplZFByb3BzLG4ubWVtb2l6ZWRQcm9wcyl9YnJlYWs7Y2FzZSAyNzpsZyh0LGUpLGxiKGUpLDUxMiZyJiYobG98fG51bGw9PT1ufHxpNihuLG4ucmV0dXJuKSksbnVsbCE9PW4mJjQmciYmaTgoZSxlLm1lbW9pemVkUHJvcHMsbi5tZW1vaXplZFByb3BzKTticmVhaztjYXNlIDU6aWYobGcodCxlKSxsYihlKSw1MTImciYmKGxvfHxudWxsPT09bnx8aTYobixuLnJldHVybikpLDMyJmUuZmxhZ3Mpe289ZS5zdGF0ZU5vZGU7dHJ5e3RzKG8sXCJcIil9Y2F0Y2godCl7c1AoZSxlLnJldHVybix0KX19NCZyJiZudWxsIT1lLnN0YXRlTm9kZSYmKG89ZS5tZW1vaXplZFByb3BzLGk4KGUsbyxudWxsIT09bj9uLm1lbW9pemVkUHJvcHM6bykpLDEwMjQmciYmKGxhPSEwKTticmVhaztjYXNlIDY6aWYobGcodCxlKSxsYihlKSw0JnIpe2lmKG51bGw9PT1lLnN0YXRlTm9kZSl0aHJvdyBFcnJvcihsKDE2MikpO3I9ZS5tZW1vaXplZFByb3BzLG49ZS5zdGF0ZU5vZGU7dHJ5e24ubm9kZVZhbHVlPXJ9Y2F0Y2godCl7c1AoZSxlLnJldHVybix0KX19YnJlYWs7Y2FzZSAzOmlmKGNRPW51bGwsbz1seSxseT1jUih0LmNvbnRhaW5lckluZm8pLGxnKHQsZSksbHk9byxsYihlKSw0JnImJm51bGwhPT1uJiZuLm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXRyeXt1Tyh0LmNvbnRhaW5lckluZm8pfWNhdGNoKHQpe3NQKGUsZS5yZXR1cm4sdCl9bGEmJihsYT0hMSxmdW5jdGlvbiBlKHQpe2lmKDEwMjQmdC5zdWJ0cmVlRmxhZ3MpZm9yKHQ9dC5jaGlsZDtudWxsIT09dDspe3ZhciBuPXQ7ZShuKSw1PT09bi50YWcmJjEwMjQmbi5mbGFncyYmbi5zdGF0ZU5vZGUucmVzZXQoKSx0PXQuc2libGluZ319KGUpKTticmVhaztjYXNlIDQ6cj1seSxseT1jUihlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxsZyh0LGUpLGxiKGUpLGx5PXI7YnJlYWs7Y2FzZSAxMjpkZWZhdWx0OmxnKHQsZSksbGIoZSk7YnJlYWs7Y2FzZSAzMTpjYXNlIDE5OmxnKHQsZSksbGIoZSksNCZyJiZudWxsIT09KHI9ZS51cGRhdGVRdWV1ZSkmJihlLnVwZGF0ZVF1ZXVlPW51bGwsbG0oZSxyKSk7YnJlYWs7Y2FzZSAxMzpsZyh0LGUpLGxiKGUpLDgxOTImZS5jaGlsZC5mbGFncyYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSE9KG51bGwhPT1uJiZudWxsIT09bi5tZW1vaXplZFN0YXRlKSYmKGwwPWVyKCkpLDQmciYmbnVsbCE9PShyPWUudXBkYXRlUXVldWUpJiYoZS51cGRhdGVRdWV1ZT1udWxsLGxtKGUscikpO2JyZWFrO2Nhc2UgMjI6bz1udWxsIT09ZS5tZW1vaXplZFN0YXRlO3ZhciBjPW51bGwhPT1uJiZudWxsIT09bi5tZW1vaXplZFN0YXRlLHU9bHIsZD1sbztpZihscj11fHxvLGxvPWR8fGMsbGcodCxlKSxsbz1kLGxyPXUsbGIoZSksODE5MiZyKWU6Zm9yKCh0PWUuc3RhdGVOb2RlKS5fdmlzaWJpbGl0eT1vPy0yJnQuX3Zpc2liaWxpdHk6MXx0Ll92aXNpYmlsaXR5LG8mJihudWxsPT09bnx8Y3x8bHJ8fGxvfHxmdW5jdGlvbiBlKHQpe2Zvcih0PXQuY2hpbGQ7bnVsbCE9PXQ7KXt2YXIgbj10O3N3aXRjaChuLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmkyKDQsbixuLnJldHVybiksZShuKTticmVhaztjYXNlIDE6aTYobixuLnJldHVybik7dmFyIHI9bi5zdGF0ZU5vZGU7XCJmdW5jdGlvblwiPT10eXBlb2Ygci5jb21wb25lbnRXaWxsVW5tb3VudCYmaTUobixuLnJldHVybixyKSxlKG4pO2JyZWFrO2Nhc2UgMjc6Y0Qobi5zdGF0ZU5vZGUpO2Nhc2UgMjY6Y2FzZSA1Omk2KG4sbi5yZXR1cm4pLGUobik7YnJlYWs7Y2FzZSAyMjpudWxsPT09bi5tZW1vaXplZFN0YXRlJiZlKG4pO2JyZWFrO2RlZmF1bHQ6ZShuKX10PXQuc2libGluZ319KGUpKSxuPW51bGwsdD1lOzspe2lmKDU9PT10LnRhZ3x8MjY9PT10LnRhZyl7aWYobnVsbD09PW4pe2M9bj10O3RyeXtpZihhPWMuc3RhdGVOb2RlLG8paT1hLnN0eWxlLFwiZnVuY3Rpb25cIj09dHlwZW9mIGkuc2V0UHJvcGVydHk/aS5zZXRQcm9wZXJ0eShcImRpc3BsYXlcIixcIm5vbmVcIixcImltcG9ydGFudFwiKTppLmRpc3BsYXk9XCJub25lXCI7ZWxzZXtzPWMuc3RhdGVOb2RlO3ZhciBmPWMubWVtb2l6ZWRQcm9wcy5zdHlsZSxwPW51bGwhPWYmJmYuaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5XCIpP2YuZGlzcGxheTpudWxsO3Muc3R5bGUuZGlzcGxheT1udWxsPT1wfHxcImJvb2xlYW5cIj09dHlwZW9mIHA/XCJcIjooXCJcIitwKS50cmltKCl9fWNhdGNoKGUpe3NQKGMsYy5yZXR1cm4sZSl9fX1lbHNlIGlmKDY9PT10LnRhZyl7aWYobnVsbD09PW4pe2M9dDt0cnl7Yy5zdGF0ZU5vZGUubm9kZVZhbHVlPW8/XCJcIjpjLm1lbW9pemVkUHJvcHN9Y2F0Y2goZSl7c1AoYyxjLnJldHVybixlKX19fWVsc2UgaWYoMTg9PT10LnRhZyl7aWYobnVsbD09PW4pe2M9dDt0cnl7dmFyIGg9Yy5zdGF0ZU5vZGU7bz9jayhoLCEwKTpjayhjLnN0YXRlTm9kZSwhMSl9Y2F0Y2goZSl7c1AoYyxjLnJldHVybixlKX19fWVsc2UgaWYoKDIyIT09dC50YWcmJjIzIT09dC50YWd8fG51bGw9PT10Lm1lbW9pemVkU3RhdGV8fHQ9PT1lKSYmbnVsbCE9PXQuY2hpbGQpe3QuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkO2NvbnRpbnVlfWlmKHQ9PT1lKWJyZWFrO2Zvcig7bnVsbD09PXQuc2libGluZzspe2lmKG51bGw9PT10LnJldHVybnx8dC5yZXR1cm49PT1lKWJyZWFrIGU7bj09PXQmJihuPW51bGwpLHQ9dC5yZXR1cm59bj09PXQmJihuPW51bGwpLHQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9NCZyJiZudWxsIT09KHI9ZS51cGRhdGVRdWV1ZSkmJm51bGwhPT0obj1yLnJldHJ5UXVldWUpJiYoci5yZXRyeVF1ZXVlPW51bGwsbG0oZSxuKSk7Y2FzZSAzMDpjYXNlIDIxOn19ZnVuY3Rpb24gbGIoZSl7dmFyIHQ9ZS5mbGFncztpZigyJnQpe3RyeXtmb3IodmFyIG4scj1lLnJldHVybjtudWxsIT09cjspe2lmKGk3KHIpKXtuPXI7YnJlYWt9cj1yLnJldHVybn1pZihudWxsPT1uKXRocm93IEVycm9yKGwoMTYwKSk7c3dpdGNoKG4udGFnKXtjYXNlIDI3OnZhciBvPW4uc3RhdGVOb2RlLGE9bGUoZSk7bHQoZSxhLG8pO2JyZWFrO2Nhc2UgNTp2YXIgaT1uLnN0YXRlTm9kZTszMiZuLmZsYWdzJiYodHMoaSxcIlwiKSxuLmZsYWdzJj0tMzMpO3ZhciBzPWxlKGUpO2x0KGUscyxpKTticmVhaztjYXNlIDM6Y2FzZSA0OnZhciBjPW4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sdT1sZShlKTshZnVuY3Rpb24gZSh0LG4scil7dmFyIG89dC50YWc7aWYoNT09PW98fDY9PT1vKXQ9dC5zdGF0ZU5vZGUsbj8oOT09PXIubm9kZVR5cGU/ci5ib2R5OlwiSFRNTFwiPT09ci5ub2RlTmFtZT9yLm93bmVyRG9jdW1lbnQuYm9keTpyKS5pbnNlcnRCZWZvcmUodCxuKTooKG49OT09PXIubm9kZVR5cGU/ci5ib2R5OlwiSFRNTFwiPT09ci5ub2RlTmFtZT9yLm93bmVyRG9jdW1lbnQuYm9keTpyKS5hcHBlbmRDaGlsZCh0KSxudWxsIT0ocj1yLl9yZWFjdFJvb3RDb250YWluZXIpfHxudWxsIT09bi5vbmNsaWNrfHwobi5vbmNsaWNrPXRnKSk7ZWxzZSBpZig0IT09byYmKDI3PT09byYmY0ModC50eXBlKSYmKHI9dC5zdGF0ZU5vZGUsbj1udWxsKSxudWxsIT09KHQ9dC5jaGlsZCkpKWZvcihlKHQsbixyKSx0PXQuc2libGluZztudWxsIT09dDspZSh0LG4sciksdD10LnNpYmxpbmd9KGUsdSxjKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKGwoMTYxKSl9fWNhdGNoKHQpe3NQKGUsZS5yZXR1cm4sdCl9ZS5mbGFncyY9LTN9NDA5NiZ0JiYoZS5mbGFncyY9LTQwOTcpfWZ1bmN0aW9uIGxBKGUsdCl7aWYoODc3MiZ0LnN1YnRyZWVGbGFncylmb3IodD10LmNoaWxkO251bGwhPT10OylscyhlLHQuYWx0ZXJuYXRlLHQpLHQ9dC5zaWJsaW5nfWZ1bmN0aW9uIGx4KGUsdCl7dmFyIG49bnVsbDtudWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wmJihuPWUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksZT1udWxsLG51bGwhPT10Lm1lbW9pemVkU3RhdGUmJm51bGwhPT10Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sJiYoZT10Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGUhPT1uJiYobnVsbCE9ZSYmZS5yZWZDb3VudCsrLG51bGwhPW4mJnIyKG4pKX1mdW5jdGlvbiBsdyhlLHQpe2U9bnVsbCxudWxsIT09dC5hbHRlcm5hdGUmJihlPXQuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGUpLCh0PXQubWVtb2l6ZWRTdGF0ZS5jYWNoZSkhPT1lJiYodC5yZWZDb3VudCsrLG51bGwhPWUmJnIyKGUpKX1mdW5jdGlvbiBsQyhlLHQsbixyKXtpZigxMDI1NiZ0LnN1YnRyZWVGbGFncylmb3IodD10LmNoaWxkO251bGwhPT10OylsXyhlLHQsbixyKSx0PXQuc2libGluZ31mdW5jdGlvbiBsXyhlLHQsbixyKXt2YXIgbz10LmZsYWdzO3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpsQyhlLHQsbixyKSwyMDQ4Jm8mJmkxKDksdCk7YnJlYWs7Y2FzZSAxOmNhc2UgMzE6Y2FzZSAxMzpkZWZhdWx0OmxDKGUsdCxuLHIpO2JyZWFrO2Nhc2UgMzpsQyhlLHQsbixyKSwyMDQ4Jm8mJihlPW51bGwsbnVsbCE9PXQuYWx0ZXJuYXRlJiYoZT10LmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSwodD10Lm1lbW9pemVkU3RhdGUuY2FjaGUpIT09ZSYmKHQucmVmQ291bnQrKyxudWxsIT1lJiZyMihlKSkpO2JyZWFrO2Nhc2UgMTI6aWYoMjA0OCZvKXtsQyhlLHQsbixyKSxlPXQuc3RhdGVOb2RlO3RyeXt2YXIgYT10Lm1lbW9pemVkUHJvcHMsaT1hLmlkLGw9YS5vblBvc3RDb21taXQ7XCJmdW5jdGlvblwiPT10eXBlb2YgbCYmbChpLG51bGw9PT10LmFsdGVybmF0ZT9cIm1vdW50XCI6XCJ1cGRhdGVcIixlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiwtMCl9Y2F0Y2goZSl7c1AodCx0LnJldHVybixlKX19ZWxzZSBsQyhlLHQsbixyKTticmVhaztjYXNlIDIzOmJyZWFrO2Nhc2UgMjI6YT10LnN0YXRlTm9kZSxpPXQuYWx0ZXJuYXRlLG51bGwhPT10Lm1lbW9pemVkU3RhdGU/MiZhLl92aXNpYmlsaXR5P2xDKGUsdCxuLHIpOmxrKGUsdCk6MiZhLl92aXNpYmlsaXR5P2xDKGUsdCxuLHIpOihhLl92aXNpYmlsaXR5fD0yLGZ1bmN0aW9uIGUodCxuLHIsbyxhKXtmb3IoYT1hJiYwIT0oMTAyNTYmbi5zdWJ0cmVlRmxhZ3MpLG49bi5jaGlsZDtudWxsIT09bjspe3ZhciBpPW4sbD1pLmZsYWdzO3N3aXRjaChpLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTplKHQsaSxyLG8sYSksaTEoOCxpKTticmVhaztjYXNlIDIzOmJyZWFrO2Nhc2UgMjI6dmFyIHM9aS5zdGF0ZU5vZGU7bnVsbCE9PWkubWVtb2l6ZWRTdGF0ZT8yJnMuX3Zpc2liaWxpdHk/ZSh0LGkscixvLGEpOmxrKHQsaSk6KHMuX3Zpc2liaWxpdHl8PTIsZSh0LGkscixvLGEpKSxhJiYyMDQ4JmwmJmx4KGkuYWx0ZXJuYXRlLGkpO2JyZWFrO2Nhc2UgMjQ6ZSh0LGkscixvLGEpLGEmJjIwNDgmbCYmbHcoaS5hbHRlcm5hdGUsaSk7YnJlYWs7ZGVmYXVsdDplKHQsaSxyLG8sYSl9bj1uLnNpYmxpbmd9fShlLHQsbixyLDAhPSgxMDI1NiZ0LnN1YnRyZWVGbGFncykpKSwyMDQ4Jm8mJmx4KGksdCk7YnJlYWs7Y2FzZSAyNDpsQyhlLHQsbixyKSwyMDQ4Jm8mJmx3KHQuYWx0ZXJuYXRlLHQpfX1mdW5jdGlvbiBsayhlLHQpe2lmKDEwMjU2JnQuc3VidHJlZUZsYWdzKWZvcih0PXQuY2hpbGQ7bnVsbCE9PXQ7KXt2YXIgbj10LHI9bi5mbGFncztzd2l0Y2gobi50YWcpe2Nhc2UgMjI6bGsoZSxuKSwyMDQ4JnImJmx4KG4uYWx0ZXJuYXRlLG4pO2JyZWFrO2Nhc2UgMjQ6bGsoZSxuKSwyMDQ4JnImJmx3KG4uYWx0ZXJuYXRlLG4pO2JyZWFrO2RlZmF1bHQ6bGsoZSxuKX10PXQuc2libGluZ319dmFyIGxFPTgxOTI7ZnVuY3Rpb24gbGooZSl7aWYoZS5zdWJ0cmVlRmxhZ3MmbEUpZm9yKGU9ZS5jaGlsZDtudWxsIT09ZTspbFMoZSksZT1lLnNpYmxpbmd9ZnVuY3Rpb24gbFMoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmxqKGUpLGUuZmxhZ3MmbEUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUmJmZ1bmN0aW9uKGUsdCxuKXtpZihudWxsPT09YzIpdGhyb3cgRXJyb3IobCg0NzUpKTt2YXIgcj1jMjtpZihcInN0eWxlc2hlZXRcIj09PXQudHlwZSYmKFwic3RyaW5nXCIhPXR5cGVvZiBuLm1lZGlhfHwhMSE9PW1hdGNoTWVkaWEobi5tZWRpYSkubWF0Y2hlcykmJjA9PSg0JnQuc3RhdGUubG9hZGluZykpe2lmKG51bGw9PT10Lmluc3RhbmNlKXt2YXIgbz1jcShuLmhyZWYpLGE9ZS5xdWVyeVNlbGVjdG9yKGNIKG8pKTtpZihhKXtudWxsIT09KGU9YS5fcCkmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW4mJihyLmNvdW50Kysscj1jNC5iaW5kKHIpLGUudGhlbihyLHIpKSx0LnN0YXRlLmxvYWRpbmd8PTQsdC5pbnN0YW5jZT1hLGVZKGEpO3JldHVybn1hPWUub3duZXJEb2N1bWVudHx8ZSxuPWNWKG4pLChvPWNMLmdldChvKSkmJmNYKG4sbyksZVkoYT1hLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKTt2YXIgaT1hO2kuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtpLm9ubG9hZD1lLGkub25lcnJvcj10fSksY3UoYSxcImxpbmtcIixuKSx0Lmluc3RhbmNlPWF9bnVsbD09PXIuc3R5bGVzaGVldHMmJihyLnN0eWxlc2hlZXRzPW5ldyBNYXApLHIuc3R5bGVzaGVldHMuc2V0KHQsZSksKGU9dC5zdGF0ZS5wcmVsb2FkKSYmMD09KDMmdC5zdGF0ZS5sb2FkaW5nKSYmKHIuY291bnQrKyx0PWM0LmJpbmQociksZS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLHQpLGUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsdCkpfX0obHksZS5tZW1vaXplZFN0YXRlLGUubWVtb2l6ZWRQcm9wcyk7YnJlYWs7Y2FzZSA1OmRlZmF1bHQ6bGooZSk7YnJlYWs7Y2FzZSAzOmNhc2UgNDp2YXIgdD1seTtseT1jUihlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxsaihlKSxseT10O2JyZWFrO2Nhc2UgMjI6bnVsbD09PWUubWVtb2l6ZWRTdGF0ZSYmKG51bGwhPT0odD1lLmFsdGVybmF0ZSkmJm51bGwhPT10Lm1lbW9pemVkU3RhdGU/KHQ9bEUsbEU9MHgxMDAwMDAwLGxqKGUpLGxFPXQpOmxqKGUpKX19ZnVuY3Rpb24gbE8oZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7aWYobnVsbCE9PXQmJm51bGwhPT0oZT10LmNoaWxkKSl7dC5jaGlsZD1udWxsO2RvIHQ9ZS5zaWJsaW5nLGUuc2libGluZz1udWxsLGU9dDt3aGlsZShudWxsIT09ZSl9fWZ1bmN0aW9uIGxCKGUpe3ZhciB0PWUuZGVsZXRpb25zO2lmKDAhPSgxNiZlLmZsYWdzKSl7aWYobnVsbCE9PXQpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07bGw9cixsSShyLGUpfWxPKGUpfWlmKDEwMjU2JmUuc3VidHJlZUZsYWdzKWZvcihlPWUuY2hpbGQ7bnVsbCE9PWU7KWxQKGUpLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIGxQKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpsQihlKSwyMDQ4JmUuZmxhZ3MmJmkyKDksZSxlLnJldHVybik7YnJlYWs7Y2FzZSAzOmNhc2UgMTI6ZGVmYXVsdDpsQihlKTticmVhaztjYXNlIDIyOnZhciB0PWUuc3RhdGVOb2RlO251bGwhPT1lLm1lbW9pemVkU3RhdGUmJjImdC5fdmlzaWJpbGl0eSYmKG51bGw9PT1lLnJldHVybnx8MTMhPT1lLnJldHVybi50YWcpPyh0Ll92aXNpYmlsaXR5Jj0tMyxmdW5jdGlvbiBlKHQpe3ZhciBuPXQuZGVsZXRpb25zO2lmKDAhPSgxNiZ0LmZsYWdzKSl7aWYobnVsbCE9PW4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07bGw9byxsSShvLHQpfWxPKHQpfWZvcih0PXQuY2hpbGQ7bnVsbCE9PXQ7KXtzd2l0Y2goKG49dCkudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmkyKDgsbixuLnJldHVybiksZShuKTticmVhaztjYXNlIDIyOjImKHI9bi5zdGF0ZU5vZGUpLl92aXNpYmlsaXR5JiYoci5fdmlzaWJpbGl0eSY9LTMsZShuKSk7YnJlYWs7ZGVmYXVsdDplKG4pfXQ9dC5zaWJsaW5nfX0oZSkpOmxCKGUpfX1mdW5jdGlvbiBsSShlLHQpe2Zvcig7bnVsbCE9PWxsOyl7dmFyIG49bGw7c3dpdGNoKG4udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmkyKDgsbix0KTticmVhaztjYXNlIDIzOmNhc2UgMjI6aWYobnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wpe3ZhciByPW4ubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbDtudWxsIT1yJiZyLnJlZkNvdW50Kyt9YnJlYWs7Y2FzZSAyNDpyMihuLm1lbW9pemVkU3RhdGUuY2FjaGUpfWlmKG51bGwhPT0ocj1uLmNoaWxkKSlyLnJldHVybj1uLGxsPXI7ZWxzZSBmb3Iobj1lO251bGwhPT1sbDspe3ZhciBvPShyPWxsKS5zaWJsaW5nLGE9ci5yZXR1cm47aWYoIWZ1bmN0aW9uIGUodCl7dmFyIG49dC5hbHRlcm5hdGU7bnVsbCE9PW4mJih0LmFsdGVybmF0ZT1udWxsLGUobikpLHQuY2hpbGQ9bnVsbCx0LmRlbGV0aW9ucz1udWxsLHQuc2libGluZz1udWxsLDU9PT10LnRhZyYmbnVsbCE9PShuPXQuc3RhdGVOb2RlKSYmZXEobiksdC5zdGF0ZU5vZGU9bnVsbCx0LnJldHVybj1udWxsLHQuZGVwZW5kZW5jaWVzPW51bGwsdC5tZW1vaXplZFByb3BzPW51bGwsdC5tZW1vaXplZFN0YXRlPW51bGwsdC5wZW5kaW5nUHJvcHM9bnVsbCx0LnN0YXRlTm9kZT1udWxsLHQudXBkYXRlUXVldWU9bnVsbH0ocikscj09PW4pe2xsPW51bGw7YnJlYWt9aWYobnVsbCE9PW8pe28ucmV0dXJuPWEsbGw9bzticmVha31sbD1hfX19dmFyIGxUPXtnZXRDYWNoZUZvclR5cGU6ZnVuY3Rpb24oZSl7dmFyIHQ9clkocjApLG49dC5kYXRhLmdldChlKTtyZXR1cm4gdm9pZCAwPT09biYmKG49ZSgpLHQuZGF0YS5zZXQoZSxuKSksbn0sY2FjaGVTaWduYWw6ZnVuY3Rpb24oKXtyZXR1cm4gclkocjApLmNvbnRyb2xsZXIuc2lnbmFsfX0sbHo9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcCxsRD0wLGxMPW51bGwsbE49bnVsbCxsUj0wLGxNPTAsbFo9bnVsbCxsVT0hMSxsRj0hMSxscT0hMSxsSD0wLGxWPTAsbCQ9MCxsVz0wLGxZPTAsbEs9MCxsWD0wLGxHPW51bGwsbFE9bnVsbCxsSj0hMSxsMD0wLGwxPTEvMCxsMj1udWxsLGw0PW51bGwsbDU9MCxsMz1udWxsLGw2PW51bGwsbDk9MCxsOD0wLGw3PW51bGwsc2U9bnVsbCxzdD0wLHNuPW51bGw7ZnVuY3Rpb24gc3IoKXtyZXR1cm4gMCE9KDImbEQpJiYwIT09bFI/bFImLWxSOm51bGwhPT1JLlQ/c1goKTplSSgpfWZ1bmN0aW9uIHNvKCl7MD09PWxLJiYobEs9MD09KDB4MjAwMDAwMDAmbFIpfHxyaj9lQygpOjB4MjAwMDAwMDApO3ZhciBlPW9SLmN1cnJlbnQ7cmV0dXJuIG51bGwhPT1lJiYoZS5mbGFnc3w9MzIpLGxLfWZ1bmN0aW9uIHNhKGUsdCxuKXsoZT09PWxMJiYoMj09PWxNfHw5PT09bE0pfHxudWxsIT09ZS5jYW5jZWxQZW5kaW5nQ29tbWl0KSYmKHNkKGUsMCksc3MoZSxsUixsSywhMSkpLGVFKGUsbiksKDA9PSgyJmxEKXx8ZSE9PWxMKSYmKGU9PT1sTCYmKDA9PSgyJmxEKSYmKGxXfD1uKSw0PT09bFYmJnNzKGUsbFIsbEssITEpKSxzcShlKSl9ZnVuY3Rpb24gc2koZSx0LG4pe2lmKDAhPSg2JmxEKSl0aHJvdyBFcnJvcihsKDMyNykpO2Zvcih2YXIgcj0hbiYmMD09KDEyNCZ0KSYmMD09KHQmZS5leHBpcmVkTGFuZXMpfHxldyhlLHQpLG89cj9mdW5jdGlvbihlLHQpe3ZhciBuPWxEO2xEfD0yO3ZhciByPXNoKCksbz1zbSgpO2xMIT09ZXx8bFIhPT10PyhsMj1udWxsLGwxPWVyKCkrNTAwLHNkKGUsdCkpOmxGPWV3KGUsdCk7ZTpmb3IoOzspdHJ5e2lmKDAhPT1sTSYmbnVsbCE9PWxOKXt0PWxOO3ZhciBhPWxaO3Q6c3dpdGNoKGxNKXtjYXNlIDE6bE09MCxsWj1udWxsLHNBKGUsdCxhLDEpO2JyZWFrO2Nhc2UgMjpjYXNlIDk6aWYob2woYSkpe2xNPTAsbFo9bnVsbCxzYih0KTticmVha310PWZ1bmN0aW9uKCl7MiE9PWxNJiY5IT09bE18fGxMIT09ZXx8KGxNPTcpLHNxKGUpfSxhLnRoZW4odCx0KTticmVhayBlO2Nhc2UgMzpsTT03O2JyZWFrIGU7Y2FzZSA0OmxNPTU7YnJlYWsgZTtjYXNlIDc6b2woYSk/KGxNPTAsbFo9bnVsbCxzYih0KSk6KGxNPTAsbFo9bnVsbCxzQShlLHQsYSw3KSk7YnJlYWs7Y2FzZSA1OnZhciBpPW51bGw7c3dpdGNoKGxOLnRhZyl7Y2FzZSAyNjppPWxOLm1lbW9pemVkU3RhdGU7Y2FzZSA1OmNhc2UgMjc6dmFyIHM9bE47aWYoaT9jMShpKTpzLnN0YXRlTm9kZS5jb21wbGV0ZSl7bE09MCxsWj1udWxsO3ZhciBjPXMuc2libGluZztpZihudWxsIT09YylsTj1jO2Vsc2V7dmFyIHU9cy5yZXR1cm47bnVsbCE9PXU/KGxOPXUsc3godSkpOmxOPW51bGx9YnJlYWsgdH19bE09MCxsWj1udWxsLHNBKGUsdCxhLDUpO2JyZWFrO2Nhc2UgNjpsTT0wLGxaPW51bGwsc0EoZSx0LGEsNik7YnJlYWs7Y2FzZSA4OnN1KCksbFY9NjticmVhayBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IobCg0NjIpKX19Zm9yKDtudWxsIT09bE4mJiFldCgpOylzdihsTik7YnJlYWt9Y2F0Y2godCl7c2YoZSx0KX1yZXR1cm4oclo9ck09bnVsbCxJLkg9cixJLkE9byxsRD1uLG51bGwhPT1sTik/MDoobEw9bnVsbCxsUj0wLG4yKCksbFYpfShlLHQpOnN5KGUsdCwhMCksYT1yOzspe2lmKDA9PT1vKWxGJiYhciYmc3MoZSx0LDAsITEpO2Vsc2V7aWYobj1lLmN1cnJlbnQuYWx0ZXJuYXRlLGEmJiFmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZTs7KXt2YXIgbj10LnRhZztpZigoMD09PW58fDExPT09bnx8MTU9PT1uKSYmMTYzODQmdC5mbGFncyYmbnVsbCE9PShuPXQudXBkYXRlUXVldWUpJiZudWxsIT09KG49bi5zdG9yZXMpKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdLGE9by5nZXRTbmFwc2hvdDtvPW8udmFsdWU7dHJ5e2lmKCFuayhhKCksbykpcmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITF9fWlmKG49dC5jaGlsZCwxNjM4NCZ0LnN1YnRyZWVGbGFncyYmbnVsbCE9PW4pbi5yZXR1cm49dCx0PW47ZWxzZXtpZih0PT09ZSlicmVhaztmb3IoO251bGw9PT10LnNpYmxpbmc7KXtpZihudWxsPT09dC5yZXR1cm58fHQucmV0dXJuPT09ZSlyZXR1cm4hMDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9fXJldHVybiEwfShuKSl7bz1zeShlLHQsITEpLGE9ITE7Y29udGludWV9aWYoMj09PW8pe2lmKGE9dCxlLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzJmEpdmFyIGk9MDtlbHNlIGk9MCE9KGk9LTB4MjAwMDAwMDEmZS5wZW5kaW5nTGFuZXMpP2k6MHgyMDAwMDAwMCZpPzB4MjAwMDAwMDA6MDtpZigwIT09aSl7dD1pO2U6e289bEc7dmFyIHM9ZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkO2lmKHMmJihzZChlLGkpLmZsYWdzfD0yNTYpLDIhPT0oaT1zeShlLGksITEpKSl7aWYobHEmJiFzKXtlLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzfD1hLGxXfD1hLG89NDticmVhayBlfWE9bFEsbFE9byxudWxsIT09YSYmKG51bGw9PT1sUT9sUT1hOmxRLnB1c2guYXBwbHkobFEsYSkpfW89aX1pZihhPSExLDIhPT1vKWNvbnRpbnVlfX1pZigxPT09byl7c2QoZSwwKSxzcyhlLHQsMCwhMCk7YnJlYWt9ZTp7c3dpdGNoKHI9ZSxhPW8pe2Nhc2UgMDpjYXNlIDE6dGhyb3cgRXJyb3IobCgzNDUpKTtjYXNlIDQ6aWYoKDQxOTQwNDgmdCkhPT10KWJyZWFrO2Nhc2UgNjpzcyhyLHQsbEssIWxVKTticmVhayBlO2Nhc2UgMjpsUT1udWxsO2JyZWFrO2Nhc2UgMzpjYXNlIDU6YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDMyOSkpfWlmKCgweDNjMDAwMDAmdCk9PT10JiYxMDwobz1sMCszMDAtZXIoKSkpe2lmKHNzKHIsdCxsSywhbFUpLDAhPT1leChyLDAsITApKWJyZWFrIGU7ci50aW1lb3V0SGFuZGxlPWN2KHNsLmJpbmQobnVsbCxyLG4sbFEsbDIsbEosdCxsSyxsVyxsWCxsVSxhLDIsLTAsMCksbyk7YnJlYWsgZX1zbChyLG4sbFEsbDIsbEosdCxsSyxsVyxsWCxsVSxhLDAsLTAsMCl9fWJyZWFrfXNxKGUpfWZ1bmN0aW9uIHNsKGUsdCxuLHIsbyxhLGkscyxjLHUsZCxmLHAsaCl7aWYoZS50aW1lb3V0SGFuZGxlPS0xLCg4MTkyJihmPXQuc3VidHJlZUZsYWdzKXx8MHgxMDAyMDAwPT0oMHgxMDAyMDAwJmYpKSYmKGMyPXtzdHlsZXNoZWV0czpudWxsLGNvdW50OjAsdW5zdXNwZW5kOnRnfSxsUyh0KSxudWxsIT09KGY9ZnVuY3Rpb24oKXtpZihudWxsPT09YzIpdGhyb3cgRXJyb3IobCg0NzUpKTt2YXIgZT1jMjtyZXR1cm4gZS5zdHlsZXNoZWV0cyYmMD09PWUuY291bnQmJmMzKGUsZS5zdHlsZXNoZWV0cyksMDxlLmNvdW50P2Z1bmN0aW9uKHQpe3ZhciBuPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihlLnN0eWxlc2hlZXRzJiZjMyhlLGUuc3R5bGVzaGVldHMpLGUudW5zdXNwZW5kKXt2YXIgdD1lLnVuc3VzcGVuZDtlLnVuc3VzcGVuZD1udWxsLHQoKX19LDZlNCk7cmV0dXJuIGUudW5zdXNwZW5kPXQsZnVuY3Rpb24oKXtlLnVuc3VzcGVuZD1udWxsLGNsZWFyVGltZW91dChuKX19Om51bGx9KCkpKSl7ZS5jYW5jZWxQZW5kaW5nQ29tbWl0PWYoc0MuYmluZChudWxsLGUsdCxhLG4scixvLGkscyxjLGQsMSxwLGgpKSxzcyhlLGEsaSwhdSk7cmV0dXJufXNDKGUsdCxhLG4scixvLGkscyxjKX1mdW5jdGlvbiBzcyhlLHQsbixyKXt0Jj1+bFksdCY9fmxXLGUuc3VzcGVuZGVkTGFuZXN8PXQsZS5waW5nZWRMYW5lcyY9fnQsciYmKGUud2FybUxhbmVzfD10KSxyPWUuZXhwaXJhdGlvblRpbWVzO2Zvcih2YXIgbz10OzA8bzspe3ZhciBhPTMxLWVtKG8pLGk9MTw8YTtyW2FdPS0xLG8mPX5pfTAhPT1uJiZlaihlLG4sdCl9ZnVuY3Rpb24gc2MoKXtyZXR1cm4gMCE9KDYmbEQpfHwoc0goMCwhMSksITEpfWZ1bmN0aW9uIHN1KCl7aWYobnVsbCE9PWxOKXtpZigwPT09bE0pdmFyIGU9bE4ucmV0dXJuO2Vsc2UgZT1sTixyWj1yTT1udWxsLGFuKGUpLG9wPW51bGwsb2g9MCxlPWxOO2Zvcig7bnVsbCE9PWU7KWkwKGUuYWx0ZXJuYXRlLGUpLGU9ZS5yZXR1cm47bE49bnVsbH19ZnVuY3Rpb24gc2QoZSx0KXt2YXIgbj1lLnRpbWVvdXRIYW5kbGU7LTEhPT1uJiYoZS50aW1lb3V0SGFuZGxlPS0xLGNiKG4pKSxudWxsIT09KG49ZS5jYW5jZWxQZW5kaW5nQ29tbWl0KSYmKGUuY2FuY2VsUGVuZGluZ0NvbW1pdD1udWxsLG4oKSksc3UoKSxsTD1lLGxOPW49cm4oZS5jdXJyZW50LG51bGwpLGxSPXQsbE09MCxsWj1udWxsLGxVPSExLGxGPWV3KGUsdCksbHE9ITEsbFg9bEs9bFk9bFc9bCQ9bFY9MCxsUT1sRz1udWxsLGxKPSExLDAhPSg4JnQpJiYodHw9MzImdCk7dmFyIHI9ZS5lbnRhbmdsZWRMYW5lcztpZigwIT09cilmb3IoZT1lLmVudGFuZ2xlbWVudHMsciY9dDswPHI7KXt2YXIgbz0zMS1lbShyKSxhPTE8PG87dHw9ZVtvXSxyJj1+YX1yZXR1cm4gbEg9dCxuMigpLG59ZnVuY3Rpb24gc2YoZSx0KXtvWT1udWxsLEkuSD1pZSx0PT09b3J8fHQ9PT1vYT8odD1vZCgpLGxNPTMpOnQ9PT1vbz8odD1vZCgpLGxNPTQpOmxNPXQ9PT1pYj84Om51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC50aGVuPzY6MSxsWj10LG51bGw9PT1sTiYmKGxWPTEsaWgoZSxydSh0LGUuY3VycmVudCkpKX1mdW5jdGlvbiBzcCgpe3ZhciBlPW9SLmN1cnJlbnQ7cmV0dXJuIG51bGw9PT1lfHwoKDQxOTQwNDgmbFIpPT09bFI/bnVsbD09PW9NOigoMHgzYzAwMDAwJmxSKT09PWxSfHwwIT0oMHgyMDAwMDAwMCZsUikpJiZlPT09b00pfWZ1bmN0aW9uIHNoKCl7dmFyIGU9SS5IO3JldHVybiBJLkg9aWUsbnVsbD09PWU/aWU6ZX1mdW5jdGlvbiBzbSgpe3ZhciBlPUkuQTtyZXR1cm4gSS5BPWxULGV9ZnVuY3Rpb24gc2coKXtsVj00LGxVfHwoNDE5NDA0OCZsUikhPT1sUiYmbnVsbCE9PW9SLmN1cnJlbnR8fChsRj0hMCksMD09KDB4N2ZmZmZmZiZsJCkmJjA9PSgweDdmZmZmZmYmbFcpfHxudWxsPT09bEx8fHNzKGxMLGxSLGxLLCExKX1mdW5jdGlvbiBzeShlLHQsbil7dmFyIHI9bEQ7bER8PTI7dmFyIG89c2goKSxhPXNtKCk7KGxMIT09ZXx8bFIhPT10KSYmKGwyPW51bGwsc2QoZSx0KSksdD0hMTt2YXIgaT1sVjtlOmZvcig7Oyl0cnl7aWYoMCE9PWxNJiZudWxsIT09bE4pe3ZhciBsPWxOLHM9bFo7c3dpdGNoKGxNKXtjYXNlIDg6c3UoKSxpPTY7YnJlYWsgZTtjYXNlIDM6Y2FzZSAyOmNhc2UgOTpjYXNlIDY6bnVsbD09PW9SLmN1cnJlbnQmJih0PSEwKTt2YXIgYz1sTTtpZihsTT0wLGxaPW51bGwsc0EoZSxsLHMsYyksbiYmbEYpe2k9MDticmVhayBlfWJyZWFrO2RlZmF1bHQ6Yz1sTSxsTT0wLGxaPW51bGwsc0EoZSxsLHMsYyl9fShmdW5jdGlvbigpe2Zvcig7bnVsbCE9PWxOOylzdihsTil9KSgpLGk9bFY7YnJlYWt9Y2F0Y2godCl7c2YoZSx0KX1yZXR1cm4gdCYmZS5zaGVsbFN1c3BlbmRDb3VudGVyKyssclo9ck09bnVsbCxsRD1yLEkuSD1vLEkuQT1hLG51bGw9PT1sTiYmKGxMPW51bGwsbFI9MCxuMigpKSxpfWZ1bmN0aW9uIHN2KGUpe3ZhciB0PWlXKGUuYWx0ZXJuYXRlLGUsbEgpO2UubWVtb2l6ZWRQcm9wcz1lLnBlbmRpbmdQcm9wcyxudWxsPT09dD9zeChlKTpsTj10fWZ1bmN0aW9uIHNiKGUpe3ZhciB0PWUsbj10LmFsdGVybmF0ZTtzd2l0Y2godC50YWcpe2Nhc2UgMTU6Y2FzZSAwOnQ9aUkobix0LHQucGVuZGluZ1Byb3BzLHQudHlwZSx2b2lkIDAsbFIpO2JyZWFrO2Nhc2UgMTE6dD1pSShuLHQsdC5wZW5kaW5nUHJvcHMsdC50eXBlLnJlbmRlcix0LnJlZixsUik7YnJlYWs7Y2FzZSA1OmFuKHQpO2RlZmF1bHQ6aTAobix0KSx0PWlXKG4sdD1sTj1ycih0LGxIKSxsSCl9ZS5tZW1vaXplZFByb3BzPWUucGVuZGluZ1Byb3BzLG51bGw9PT10P3N4KGUpOmxOPXR9ZnVuY3Rpb24gc0EoZSx0LG4scil7clo9ck09bnVsbCxhbih0KSxvcD1udWxsLG9oPTA7dmFyIG89dC5yZXR1cm47dHJ5e2lmKGZ1bmN0aW9uKGUsdCxuLHIsbyl7aWYobi5mbGFnc3w9MzI3NjgsbnVsbCE9PXImJlwib2JqZWN0XCI9PXR5cGVvZiByJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnRoZW4pe2lmKG51bGwhPT0odD1uLmFsdGVybmF0ZSkmJnJWKHQsbixvLCEwKSxudWxsIT09KG49b1IuY3VycmVudCkpe3N3aXRjaChuLnRhZyl7Y2FzZSAzMTpjYXNlIDEzOnJldHVybiBudWxsPT09b00/c2coKTpudWxsPT09bi5hbHRlcm5hdGUmJjA9PT1sViYmKGxWPTMpLG4uZmxhZ3MmPS0yNTcsbi5mbGFnc3w9NjU1MzYsbi5sYW5lcz1vLHI9PT1vaT9uLmZsYWdzfD0xNjM4NDoobnVsbD09PSh0PW4udXBkYXRlUXVldWUpP24udXBkYXRlUXVldWU9bmV3IFNldChbcl0pOnQuYWRkKHIpLHNJKGUscixvKSksITE7Y2FzZSAyMjpyZXR1cm4gbi5mbGFnc3w9NjU1MzYscj09PW9pP24uZmxhZ3N8PTE2Mzg0OihudWxsPT09KHQ9bi51cGRhdGVRdWV1ZSk/KHQ9e3RyYW5zaXRpb25zOm51bGwsbWFya2VySW5zdGFuY2VzOm51bGwscmV0cnlRdWV1ZTpuZXcgU2V0KFtyXSl9LG4udXBkYXRlUXVldWU9dCk6bnVsbD09PShuPXQucmV0cnlRdWV1ZSk/dC5yZXRyeVF1ZXVlPW5ldyBTZXQoW3JdKTpuLmFkZChyKSxzSShlLHIsbykpLCExfXRocm93IEVycm9yKGwoNDM1LG4udGFnKSl9cmV0dXJuIHNJKGUscixvKSxzZygpLCExfWlmKHJqKXJldHVybiBudWxsIT09KHQ9b1IuY3VycmVudCk/KDA9PSg2NTUzNiZ0LmZsYWdzKSYmKHQuZmxhZ3N8PTI1NiksdC5mbGFnc3w9NjU1MzYsdC5sYW5lcz1vLHIhPT1yQiYmck4ocnUoZT1FcnJvcihsKDQyMikse2NhdXNlOnJ9KSxuKSkpOihyIT09ckImJnJOKHJ1KHQ9RXJyb3IobCg0MjMpLHtjYXVzZTpyfSksbikpLGU9ZS5jdXJyZW50LmFsdGVybmF0ZSxlLmZsYWdzfD02NTUzNixvJj0tbyxlLmxhbmVzfD1vLHI9cnUocixuKSxvPWlnKGUuc3RhdGVOb2RlLHIsbyksb2ooZSxvKSw0IT09bFYmJihsVj0yKSksITE7dmFyIGE9RXJyb3IobCg1MjApLHtjYXVzZTpyfSk7aWYoYT1ydShhLG4pLG51bGw9PT1sRz9sRz1bYV06bEcucHVzaChhKSw0IT09bFYmJihsVj0yKSxudWxsPT09dClyZXR1cm4hMDtyPXJ1KHIsbiksbj10O2Rve3N3aXRjaChuLnRhZyl7Y2FzZSAzOnJldHVybiBuLmZsYWdzfD02NTUzNixlPW8mLW8sbi5sYW5lc3w9ZSxlPWlnKG4uc3RhdGVOb2RlLHIsZSksb2oobixlKSwhMTtjYXNlIDE6aWYodD1uLnR5cGUsYT1uLnN0YXRlTm9kZSwwPT0oMTI4Jm4uZmxhZ3MpJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3J8fG51bGwhPT1hJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PWw0fHwhbDQuaGFzKGEpKSkpcmV0dXJuIG4uZmxhZ3N8PTY1NTM2LG8mPS1vLG4ubGFuZXN8PW8saXYobz1peShvKSxlLG4sciksb2oobixvKSwhMX1uPW4ucmV0dXJufXdoaWxlKG51bGwhPT1uKTtyZXR1cm4hMX0oZSxvLHQsbixsUikpe2xWPTEsaWgoZSxydShuLGUuY3VycmVudCkpLGxOPW51bGw7cmV0dXJufX1jYXRjaCh0KXtpZihudWxsIT09byl0aHJvdyBsTj1vLHQ7bFY9MSxpaChlLHJ1KG4sZS5jdXJyZW50KSksbE49bnVsbDtyZXR1cm59MzI3NjgmdC5mbGFncz8ocmp8fDE9PT1yP2U9ITA6bEZ8fDAhPSgweDIwMDAwMDAwJmxSKT9lPSExOihsVT1lPSEwLCgyPT09cnx8OT09PXJ8fDM9PT1yfHw2PT09cikmJm51bGwhPT0ocj1vUi5jdXJyZW50KSYmMTM9PT1yLnRhZyYmKHIuZmxhZ3N8PTE2Mzg0KSksc3codCxlKSk6c3godCl9ZnVuY3Rpb24gc3goZSl7dmFyIHQ9ZTtkb3tpZigwIT0oMzI3NjgmdC5mbGFncykpcmV0dXJuIHZvaWQgc3codCxsVSk7ZT10LnJldHVybjt2YXIgbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHM7c3dpdGNoKHJDKHQpLHQudGFnKXtjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OmNhc2UgMTpyZXR1cm4gaUoodCksbnVsbDtjYXNlIDM6cmV0dXJuIG49dC5zdGF0ZU5vZGUscj1udWxsLG51bGwhPT1lJiYocj1lLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQubWVtb2l6ZWRTdGF0ZS5jYWNoZSE9PXImJih0LmZsYWdzfD0yMDQ4KSxyRihyMCksVigpLG4ucGVuZGluZ0NvbnRleHQmJihuLmNvbnRleHQ9bi5wZW5kaW5nQ29udGV4dCxuLnBlbmRpbmdDb250ZXh0PW51bGwpLChudWxsPT09ZXx8bnVsbD09PWUuY2hpbGQpJiYocnoodCk/aVkodCk6bnVsbD09PWV8fGUubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQmJjA9PSgyNTYmdC5mbGFncyl8fCh0LmZsYWdzfD0xMDI0LHJMKCkpKSxpSih0KSxudWxsO2Nhc2UgMjY6dmFyIG89dC50eXBlLGE9dC5tZW1vaXplZFN0YXRlO3JldHVybiBudWxsPT09ZT8oaVkodCksbnVsbCE9PWE/KGlKKHQpLGlYKHQsYSkpOihpSih0KSxpSyh0LG8sbnVsbCxyLG4pKSk6YT9hIT09ZS5tZW1vaXplZFN0YXRlPyhpWSh0KSxpSih0KSxpWCh0LGEpKTooaUoodCksdC5mbGFncyY9LTB4MTAwMDAwMSk6KChlPWUubWVtb2l6ZWRQcm9wcykhPT1yJiZpWSh0KSxpSih0KSxpSyh0LG8sZSxyLG4pKSxudWxsO2Nhc2UgMjc6aWYoVyh0KSxuPUYuY3VycmVudCxvPXQudHlwZSxudWxsIT09ZSYmbnVsbCE9dC5zdGF0ZU5vZGUpZS5tZW1vaXplZFByb3BzIT09ciYmaVkodCk7ZWxzZXtpZighcil7aWYobnVsbD09PXQuc3RhdGVOb2RlKXRocm93IEVycm9yKGwoMTY2KSk7cmV0dXJuIGlKKHQpLG51bGx9ZT1aLmN1cnJlbnQscnoodCk/ckkodCxlKToodC5zdGF0ZU5vZGU9ZT1jeihvLHIsbiksaVkodCkpfXJldHVybiBpSih0KSxudWxsO2Nhc2UgNTppZihXKHQpLG89dC50eXBlLG51bGwhPT1lJiZudWxsIT10LnN0YXRlTm9kZSllLm1lbW9pemVkUHJvcHMhPT1yJiZpWSh0KTtlbHNle2lmKCFyKXtpZihudWxsPT09dC5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobCgxNjYpKTtyZXR1cm4gaUoodCksbnVsbH1pZihhPVouY3VycmVudCxyeih0KSlySSh0LGEpO2Vsc2V7dmFyIGk9Y3AoRi5jdXJyZW50KTtzd2l0Y2goYSl7Y2FzZSAxOmE9aS5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLG8pO2JyZWFrO2Nhc2UgMjphPWkuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLG8pO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKG8pe2Nhc2VcInN2Z1wiOmE9aS5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLG8pO2JyZWFrO2Nhc2VcIm1hdGhcIjphPWkuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLG8pO2JyZWFrO2Nhc2VcInNjcmlwdFwiOihhPWkuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaW5uZXJIVE1MPVwiPHNjcmlwdD48XFwvc2NyaXB0PlwiLGE9YS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2JyZWFrO2Nhc2VcInNlbGVjdFwiOmE9XCJzdHJpbmdcIj09dHlwZW9mIHIuaXM/aS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIse2lzOnIuaXN9KTppLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiksci5tdWx0aXBsZT9hLm11bHRpcGxlPSEwOnIuc2l6ZSYmKGEuc2l6ZT1yLnNpemUpO2JyZWFrO2RlZmF1bHQ6YT1cInN0cmluZ1wiPT10eXBlb2Ygci5pcz9pLmNyZWF0ZUVsZW1lbnQobyx7aXM6ci5pc30pOmkuY3JlYXRlRWxlbWVudChvKX19YVtlRF09dCxhW2VMXT1yO2U6Zm9yKGk9dC5jaGlsZDtudWxsIT09aTspe2lmKDU9PT1pLnRhZ3x8Nj09PWkudGFnKWEuYXBwZW5kQ2hpbGQoaS5zdGF0ZU5vZGUpO2Vsc2UgaWYoNCE9PWkudGFnJiYyNyE9PWkudGFnJiZudWxsIT09aS5jaGlsZCl7aS5jaGlsZC5yZXR1cm49aSxpPWkuY2hpbGQ7Y29udGludWV9aWYoaT09PXQpYnJlYWs7Zm9yKDtudWxsPT09aS5zaWJsaW5nOyl7aWYobnVsbD09PWkucmV0dXJufHxpLnJldHVybj09PXQpYnJlYWsgZTtpPWkucmV0dXJufWkuc2libGluZy5yZXR1cm49aS5yZXR1cm4saT1pLnNpYmxpbmd9c3dpdGNoKHQuc3RhdGVOb2RlPWEsY3UoYSxvLHIpLG8pe2Nhc2VcImJ1dHRvblwiOmNhc2VcImlucHV0XCI6Y2FzZVwic2VsZWN0XCI6Y2FzZVwidGV4dGFyZWFcIjpyPSEhci5hdXRvRm9jdXM7YnJlYWs7Y2FzZVwiaW1nXCI6cj0hMDticmVhaztkZWZhdWx0OnI9ITF9ciYmaVkodCl9fXJldHVybiBpSih0KSxpSyh0LHQudHlwZSxudWxsPT09ZT9udWxsOmUubWVtb2l6ZWRQcm9wcyx0LnBlbmRpbmdQcm9wcyxuKSxudWxsO2Nhc2UgNjppZihlJiZudWxsIT10LnN0YXRlTm9kZSllLm1lbW9pemVkUHJvcHMhPT1yJiZpWSh0KTtlbHNle2lmKFwic3RyaW5nXCIhPXR5cGVvZiByJiZudWxsPT09dC5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobCgxNjYpKTtpZihlPUYuY3VycmVudCxyeih0KSl7aWYoZT10LnN0YXRlTm9kZSxuPXQubWVtb2l6ZWRQcm9wcyxyPW51bGwsbnVsbCE9PShvPXJrKSlzd2l0Y2goby50YWcpe2Nhc2UgMjc6Y2FzZSA1OnI9by5tZW1vaXplZFByb3BzfWVbZURdPXQsKGU9ISEoZS5ub2RlVmFsdWU9PT1ufHxudWxsIT09ciYmITA9PT1yLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZ3x8Y2woZS5ub2RlVmFsdWUsbikpKXx8clAodCwhMCl9ZWxzZShlPWNwKGUpLmNyZWF0ZVRleHROb2RlKHIpKVtlRF09dCx0LnN0YXRlTm9kZT1lfXJldHVybiBpSih0KSxudWxsO2Nhc2UgMzE6aWYobj10Lm1lbW9pemVkU3RhdGUsbnVsbD09PWV8fG51bGwhPT1lLm1lbW9pemVkU3RhdGUpe2lmKHI9cnoodCksbnVsbCE9PW4pe2lmKG51bGw9PT1lKXtpZighcil0aHJvdyBFcnJvcihsKDMxOCkpO2lmKCEoZT1udWxsIT09KGU9dC5tZW1vaXplZFN0YXRlKT9lLmRlaHlkcmF0ZWQ6bnVsbCkpdGhyb3cgRXJyb3IobCg1NTcpKTtlW2VEXT10fWVsc2UgckQoKSwwPT0oMTI4JnQuZmxhZ3MpJiYodC5tZW1vaXplZFN0YXRlPW51bGwpLHQuZmxhZ3N8PTQ7aUoodCksZT0hMX1lbHNlIG49ckwoKSxudWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmKGUubWVtb2l6ZWRTdGF0ZS5oeWRyYXRpb25FcnJvcnM9biksZT0hMDtpZighZSl7aWYoMjU2JnQuZmxhZ3MpcmV0dXJuIG9IKHQpLHQ7cmV0dXJuIG9IKHQpLG51bGx9aWYoMCE9KDEyOCZ0LmZsYWdzKSl0aHJvdyBFcnJvcihsKDU1OCkpfXJldHVybiBpSih0KSxudWxsO2Nhc2UgMTM6aWYocj10Lm1lbW9pemVkU3RhdGUsbnVsbD09PWV8fG51bGwhPT1lLm1lbW9pemVkU3RhdGUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUuZGVoeWRyYXRlZCl7aWYobz1yeih0KSxudWxsIT09ciYmbnVsbCE9PXIuZGVoeWRyYXRlZCl7aWYobnVsbD09PWUpe2lmKCFvKXRocm93IEVycm9yKGwoMzE4KSk7aWYoIShvPW51bGwhPT0obz10Lm1lbW9pemVkU3RhdGUpP28uZGVoeWRyYXRlZDpudWxsKSl0aHJvdyBFcnJvcihsKDMxNykpO29bZURdPXR9ZWxzZSByRCgpLDA9PSgxMjgmdC5mbGFncykmJih0Lm1lbW9pemVkU3RhdGU9bnVsbCksdC5mbGFnc3w9NDtpSih0KSxvPSExfWVsc2Ugbz1yTCgpLG51bGwhPT1lJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlJiYoZS5tZW1vaXplZFN0YXRlLmh5ZHJhdGlvbkVycm9ycz1vKSxvPSEwO2lmKCFvKXtpZigyNTYmdC5mbGFncylyZXR1cm4gb0godCksdDtyZXR1cm4gb0godCksbnVsbH19aWYob0godCksMCE9KDEyOCZ0LmZsYWdzKSlyZXR1cm4gdC5sYW5lcz1uLHQ7cmV0dXJuIG49bnVsbCE9PXIsZT1udWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSxuJiYocj10LmNoaWxkLG89bnVsbCxudWxsIT09ci5hbHRlcm5hdGUmJm51bGwhPT1yLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlJiZudWxsIT09ci5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wmJihvPXIuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGE9bnVsbCxudWxsIT09ci5tZW1vaXplZFN0YXRlJiZudWxsIT09ci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCYmKGE9ci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxhIT09byYmKHIuZmxhZ3N8PTIwNDgpKSxuIT09ZSYmbiYmKHQuY2hpbGQuZmxhZ3N8PTgxOTIpLGlHKHQsdC51cGRhdGVRdWV1ZSksaUoodCksbnVsbDtjYXNlIDQ6cmV0dXJuIFYoKSxudWxsPT09ZSYmczkodC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksaUoodCksbnVsbDtjYXNlIDEwOnJldHVybiByRih0LnR5cGUpLGlKKHQpLG51bGw7Y2FzZSAxOTppZihSKG9WKSxudWxsPT09KHI9dC5tZW1vaXplZFN0YXRlKSlyZXR1cm4gaUoodCksbnVsbDtpZihvPTAhPSgxMjgmdC5mbGFncyksbnVsbD09PShhPXIucmVuZGVyaW5nKSlpZihvKWlRKHIsITEpO2Vsc2V7aWYoMCE9PWxWfHxudWxsIT09ZSYmMCE9KDEyOCZlLmZsYWdzKSlmb3IoZT10LmNoaWxkO251bGwhPT1lOyl7aWYobnVsbCE9PShhPW8kKGUpKSl7Zm9yKHQuZmxhZ3N8PTEyOCxpUShyLCExKSx0LnVwZGF0ZVF1ZXVlPWU9YS51cGRhdGVRdWV1ZSxpRyh0LGUpLHQuc3VidHJlZUZsYWdzPTAsZT1uLG49dC5jaGlsZDtudWxsIT09bjspcnIobixlKSxuPW4uc2libGluZztyZXR1cm4gTShvViwxJm9WLmN1cnJlbnR8MikscmomJnJBKHQsci50cmVlRm9ya0NvdW50KSx0LmNoaWxkfWU9ZS5zaWJsaW5nfW51bGwhPT1yLnRhaWwmJmVyKCk+bDEmJih0LmZsYWdzfD0xMjgsbz0hMCxpUShyLCExKSx0LmxhbmVzPTQxOTQzMDQpfWVsc2V7aWYoIW8paWYobnVsbCE9PShlPW8kKGEpKSl7aWYodC5mbGFnc3w9MTI4LG89ITAsdC51cGRhdGVRdWV1ZT1lPWUudXBkYXRlUXVldWUsaUcodCxlKSxpUShyLCEwKSxudWxsPT09ci50YWlsJiZcImhpZGRlblwiPT09ci50YWlsTW9kZSYmIWEuYWx0ZXJuYXRlJiYhcmopcmV0dXJuIGlKKHQpLG51bGx9ZWxzZSAyKmVyKCktci5yZW5kZXJpbmdTdGFydFRpbWU+bDEmJjB4MjAwMDAwMDAhPT1uJiYodC5mbGFnc3w9MTI4LG89ITAsaVEociwhMSksdC5sYW5lcz00MTk0MzA0KTtyLmlzQmFja3dhcmRzPyhhLnNpYmxpbmc9dC5jaGlsZCx0LmNoaWxkPWEpOihudWxsIT09KGU9ci5sYXN0KT9lLnNpYmxpbmc9YTp0LmNoaWxkPWEsci5sYXN0PWEpfWlmKG51bGwhPT1yLnRhaWwpcmV0dXJuIGU9ci50YWlsLHIucmVuZGVyaW5nPWUsci50YWlsPWUuc2libGluZyxyLnJlbmRlcmluZ1N0YXJ0VGltZT1lcigpLGUuc2libGluZz1udWxsLG49b1YuY3VycmVudCxNKG9WLG8/MSZufDI6MSZuKSxyaiYmckEodCxyLnRyZWVGb3JrQ291bnQpLGU7cmV0dXJuIGlKKHQpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBvSCh0KSxvTigpLHI9bnVsbCE9PXQubWVtb2l6ZWRTdGF0ZSxudWxsIT09ZT9udWxsIT09ZS5tZW1vaXplZFN0YXRlIT09ciYmKHQuZmxhZ3N8PTgxOTIpOnImJih0LmZsYWdzfD04MTkyKSxyPzAhPSgweDIwMDAwMDAwJm4pJiYwPT0oMTI4JnQuZmxhZ3MpJiYoaUoodCksNiZ0LnN1YnRyZWVGbGFncyYmKHQuZmxhZ3N8PTgxOTIpKTppSih0KSxudWxsIT09KG49dC51cGRhdGVRdWV1ZSkmJmlHKHQsbi5yZXRyeVF1ZXVlKSxuPW51bGwsbnVsbCE9PWUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sJiYobj1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLHI9bnVsbCxudWxsIT09dC5tZW1vaXplZFN0YXRlJiZudWxsIT09dC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCYmKHI9dC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxyIT09biYmKHQuZmxhZ3N8PTIwNDgpLG51bGwhPT1lJiZSKHI3KSxudWxsO2Nhc2UgMjQ6cmV0dXJuIG49bnVsbCxudWxsIT09ZSYmKG49ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSx0Lm1lbW9pemVkU3RhdGUuY2FjaGUhPT1uJiYodC5mbGFnc3w9MjA0OCksckYocjApLGlKKHQpLG51bGw7Y2FzZSAyNTpjYXNlIDMwOnJldHVybiBudWxsfXRocm93IEVycm9yKGwoMTU2LHQudGFnKSl9KHQuYWx0ZXJuYXRlLHQsbEgpO2lmKG51bGwhPT1uKXtsTj1uO3JldHVybn1pZihudWxsIT09KHQ9dC5zaWJsaW5nKSl7bE49dDtyZXR1cm59bE49dD1lfXdoaWxlKG51bGwhPT10KTswPT09bFYmJihsVj01KX1mdW5jdGlvbiBzdyhlLHQpe2Rve3ZhciBuPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHJDKHQpLHQudGFnKXtjYXNlIDE6cmV0dXJuIDY1NTM2JihlPXQuZmxhZ3MpPyh0LmZsYWdzPS02NTUzNyZlfDEyOCx0KTpudWxsO2Nhc2UgMzpyZXR1cm4gckYocjApLFYoKSwwIT0oNjU1MzYmKGU9dC5mbGFncykpJiYwPT0oMTI4JmUpPyh0LmZsYWdzPS02NTUzNyZlfDEyOCx0KTpudWxsO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6cmV0dXJuIFcodCksbnVsbDtjYXNlIDMxOmlmKG51bGwhPT10Lm1lbW9pemVkU3RhdGUpe2lmKG9IKHQpLG51bGw9PT10LmFsdGVybmF0ZSl0aHJvdyBFcnJvcihsKDM0MCkpO3JEKCl9cmV0dXJuIDY1NTM2JihlPXQuZmxhZ3MpPyh0LmZsYWdzPS02NTUzNyZlfDEyOCx0KTpudWxsO2Nhc2UgMTM6aWYob0godCksbnVsbCE9PShlPXQubWVtb2l6ZWRTdGF0ZSkmJm51bGwhPT1lLmRlaHlkcmF0ZWQpe2lmKG51bGw9PT10LmFsdGVybmF0ZSl0aHJvdyBFcnJvcihsKDM0MCkpO3JEKCl9cmV0dXJuIDY1NTM2JihlPXQuZmxhZ3MpPyh0LmZsYWdzPS02NTUzNyZlfDEyOCx0KTpudWxsO2Nhc2UgMTk6cmV0dXJuIFIob1YpLG51bGw7Y2FzZSA0OnJldHVybiBWKCksbnVsbDtjYXNlIDEwOnJldHVybiByRih0LnR5cGUpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBvSCh0KSxvTigpLG51bGwhPT1lJiZSKHI3KSw2NTUzNiYoZT10LmZsYWdzKT8odC5mbGFncz0tNjU1MzcmZXwxMjgsdCk6bnVsbDtjYXNlIDI0OnJldHVybiByRihyMCksbnVsbDtkZWZhdWx0OnJldHVybiBudWxsfX0oZS5hbHRlcm5hdGUsZSk7aWYobnVsbCE9PW4pe24uZmxhZ3MmPTMyNzY3LGxOPW47cmV0dXJufWlmKG51bGwhPT0obj1lLnJldHVybikmJihuLmZsYWdzfD0zMjc2OCxuLnN1YnRyZWVGbGFncz0wLG4uZGVsZXRpb25zPW51bGwpLCF0JiZudWxsIT09KGU9ZS5zaWJsaW5nKSl7bE49ZTtyZXR1cm59bE49ZT1ufXdoaWxlKG51bGwhPT1lKTtsVj02LGxOPW51bGx9ZnVuY3Rpb24gc0MoZSx0LG4scixvLGEsaSxzLGMpe2UuY2FuY2VsUGVuZGluZ0NvbW1pdD1udWxsO2RvIHNTKCk7d2hpbGUoMCE9PWw1KTtpZigwIT0oNiZsRCkpdGhyb3cgRXJyb3IobCgzMjcpKTtpZihudWxsIT09dCl7aWYodD09PWUuY3VycmVudCl0aHJvdyBFcnJvcihsKDE3NykpO2lmKCFmdW5jdGlvbihlLHQsbixyLG8sYSl7dmFyIGk9ZS5wZW5kaW5nTGFuZXM7ZS5wZW5kaW5nTGFuZXM9bixlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wLGUud2FybUxhbmVzPTAsZS5leHBpcmVkTGFuZXMmPW4sZS5lbnRhbmdsZWRMYW5lcyY9bixlLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzJj1uLGUuc2hlbGxTdXNwZW5kQ291bnRlcj0wO3ZhciBsPWUuZW50YW5nbGVtZW50cyxzPWUuZXhwaXJhdGlvblRpbWVzLGM9ZS5oaWRkZW5VcGRhdGVzO2ZvcihuPWkmfm47MDxuOyl7dmFyIHU9MzEtZW0obiksZD0xPDx1O2xbdV09MCxzW3VdPS0xO3ZhciBmPWNbdV07aWYobnVsbCE9PWYpZm9yKGNbdV09bnVsbCx1PTA7dTxmLmxlbmd0aDt1Kyspe3ZhciBwPWZbdV07bnVsbCE9PXAmJihwLmxhbmUmPS0weDIwMDAwMDAxKX1uJj1+ZH0wIT09ciYmZWooZSxyLDApLDAhPT1hJiYwPT09byYmMCE9PWUudGFnJiYoZS5zdXNwZW5kZWRMYW5lc3w9YSZ+KGkmfnQpKX0oZSxuLGE9dC5sYW5lc3x0LmNoaWxkTGFuZXN8bjEsaSxzLGMpLGU9PT1sTCYmKGxOPWxMPW51bGwsbFI9MCksbDY9dCxsMz1lLGw5PW4sbDg9YSxsNz1vLHNlPXIsMCE9KDEwMjU2JnQuc3VidHJlZUZsYWdzKXx8MCE9KDEwMjU2JnQuZmxhZ3MpPyhlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wLEooZWwsZnVuY3Rpb24oKXtyZXR1cm4gc08oITApLG51bGx9KSk6KGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTApLHI9MCE9KDEzODc4JnQuZmxhZ3MpLDAhPSgxMzg3OCZ0LnN1YnRyZWVGbGFncyl8fHIpe3I9SS5ULEkuVD1udWxsLG89VC5wLFQucD0yLGk9bEQsbER8PTQ7dHJ5eyFmdW5jdGlvbihlLHQpe2lmKGU9ZS5jb250YWluZXJJbmZvLGNkPXVvLG5CKGU9bk8oZSkpKXtpZihcInNlbGVjdGlvblN0YXJ0XCJpbiBlKXZhciBuPXtzdGFydDplLnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVjdGlvbkVuZH07ZWxzZSBlOnt2YXIgcj0obj0obj1lLm93bmVyRG9jdW1lbnQpJiZuLmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbiYmbi5nZXRTZWxlY3Rpb24oKTtpZihyJiYwIT09ci5yYW5nZUNvdW50KXtuPXIuYW5jaG9yTm9kZTt2YXIgbyxhPXIuYW5jaG9yT2Zmc2V0LGk9ci5mb2N1c05vZGU7cj1yLmZvY3VzT2Zmc2V0O3RyeXtuLm5vZGVUeXBlLGkubm9kZVR5cGV9Y2F0Y2goZSl7bj1udWxsO2JyZWFrIGV9dmFyIHM9MCxjPS0xLHU9LTEsZD0wLGY9MCxwPWUsaD1udWxsO3Q6Zm9yKDs7KXtmb3IoO3AhPT1ufHwwIT09YSYmMyE9PXAubm9kZVR5cGV8fChjPXMrYSkscCE9PWl8fDAhPT1yJiYzIT09cC5ub2RlVHlwZXx8KHU9cytyKSwzPT09cC5ub2RlVHlwZSYmKHMrPXAubm9kZVZhbHVlLmxlbmd0aCksbnVsbCE9PShvPXAuZmlyc3RDaGlsZCk7KWg9cCxwPW87Zm9yKDs7KXtpZihwPT09ZSlicmVhayB0O2lmKGg9PT1uJiYrK2Q9PT1hJiYoYz1zKSxoPT09aSYmKytmPT09ciYmKHU9cyksbnVsbCE9PShvPXAubmV4dFNpYmxpbmcpKWJyZWFrO2g9KHA9aCkucGFyZW50Tm9kZX1wPW99bj0tMT09PWN8fC0xPT09dT9udWxsOntzdGFydDpjLGVuZDp1fX1lbHNlIG49bnVsbH1uPW58fHtzdGFydDowLGVuZDowfX1lbHNlIG49bnVsbDtmb3IoY2Y9e2ZvY3VzZWRFbGVtOmUsc2VsZWN0aW9uUmFuZ2U6bn0sdW89ITEsbGw9dDtudWxsIT09bGw7KWlmKGU9KHQ9bGwpLmNoaWxkLDAhPSgxMDI0JnQuc3VidHJlZUZsYWdzKSYmbnVsbCE9PWUpZS5yZXR1cm49dCxsbD1lO2Vsc2UgZm9yKDtudWxsIT09bGw7KXtzd2l0Y2goaT0odD1sbCkuYWx0ZXJuYXRlLGU9dC5mbGFncyx0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpjYXNlIDU6Y2FzZSAyNjpjYXNlIDI3OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpicmVhaztjYXNlIDE6aWYoMCE9KDEwMjQmZSkmJm51bGwhPT1pKXtlPXZvaWQgMCxuPXQsYT1pLm1lbW9pemVkUHJvcHMsaT1pLm1lbW9pemVkU3RhdGUscj1uLnN0YXRlTm9kZTt0cnl7dmFyIG09aWMobi50eXBlLGEpO2U9ci5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShtLGkpLHIuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9ZX1jYXRjaChlKXtzUChuLG4ucmV0dXJuLGUpfX1icmVhaztjYXNlIDM6aWYoMCE9KDEwMjQmZSkpe2lmKDk9PT0obj0oZT10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKS5ub2RlVHlwZSkpY0UoZSk7ZWxzZSBpZigxPT09bilzd2l0Y2goZS5ub2RlTmFtZSl7Y2FzZVwiSEVBRFwiOmNhc2VcIkhUTUxcIjpjYXNlXCJCT0RZXCI6Y0UoZSk7YnJlYWs7ZGVmYXVsdDplLnRleHRDb250ZW50PVwiXCJ9fWJyZWFrO2RlZmF1bHQ6aWYoMCE9KDEwMjQmZSkpdGhyb3cgRXJyb3IobCgxNjMpKX1pZihudWxsIT09KGU9dC5zaWJsaW5nKSl7ZS5yZXR1cm49dC5yZXR1cm4sbGw9ZTticmVha31sbD10LnJldHVybn19KGUsdCxuKX1maW5hbGx5e2xEPWksVC5wPW8sSS5UPXJ9fWw1PTEsc18oKSxzaygpLHNFKCl9fWZ1bmN0aW9uIHNfKCl7aWYoMT09PWw1KXtsNT0wO3ZhciBlPWwzLHQ9bDYsbj0wIT0oMTM4NzgmdC5mbGFncyk7aWYoMCE9KDEzODc4JnQuc3VidHJlZUZsYWdzKXx8bil7bj1JLlQsSS5UPW51bGw7dmFyIHI9VC5wO1QucD0yO3ZhciBvPWxEO2xEfD00O3RyeXtsdih0LGUpO3ZhciBhPWNmLGk9bk8oZS5jb250YWluZXJJbmZvKSxsPWEuZm9jdXNlZEVsZW0scz1hLnNlbGVjdGlvblJhbmdlO2lmKGkhPT1sJiZsJiZsLm93bmVyRG9jdW1lbnQmJmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4hIXQmJiEhbiYmKHQ9PT1ufHwoIXR8fDMhPT10Lm5vZGVUeXBlKSYmKG4mJjM9PT1uLm5vZGVUeXBlP2UodCxuLnBhcmVudE5vZGUpOlwiY29udGFpbnNcImluIHQ/dC5jb250YWlucyhuKTohIXQuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJiEhKDE2JnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obikpKSl9KGwub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbCkpe2lmKG51bGwhPT1zJiZuQihsKSl7dmFyIGM9cy5zdGFydCx1PXMuZW5kO2lmKHZvaWQgMD09PXUmJih1PWMpLFwic2VsZWN0aW9uU3RhcnRcImluIGwpbC5zZWxlY3Rpb25TdGFydD1jLGwuc2VsZWN0aW9uRW5kPU1hdGgubWluKHUsbC52YWx1ZS5sZW5ndGgpO2Vsc2V7dmFyIGQ9bC5vd25lckRvY3VtZW50fHxkb2N1bWVudCxmPWQmJmQuZGVmYXVsdFZpZXd8fHdpbmRvdztpZihmLmdldFNlbGVjdGlvbil7dmFyIHA9Zi5nZXRTZWxlY3Rpb24oKSxoPWwudGV4dENvbnRlbnQubGVuZ3RoLG09TWF0aC5taW4ocy5zdGFydCxoKSxnPXZvaWQgMD09PXMuZW5kP206TWF0aC5taW4ocy5lbmQsaCk7IXAuZXh0ZW5kJiZtPmcmJihpPWcsZz1tLG09aSk7dmFyIHk9blMobCxtKSx2PW5TKGwsZyk7aWYoeSYmdiYmKDEhPT1wLnJhbmdlQ291bnR8fHAuYW5jaG9yTm9kZSE9PXkubm9kZXx8cC5hbmNob3JPZmZzZXQhPT15Lm9mZnNldHx8cC5mb2N1c05vZGUhPT12Lm5vZGV8fHAuZm9jdXNPZmZzZXQhPT12Lm9mZnNldCkpe3ZhciBiPWQuY3JlYXRlUmFuZ2UoKTtiLnNldFN0YXJ0KHkubm9kZSx5Lm9mZnNldCkscC5yZW1vdmVBbGxSYW5nZXMoKSxtPmc/KHAuYWRkUmFuZ2UoYikscC5leHRlbmQodi5ub2RlLHYub2Zmc2V0KSk6KGIuc2V0RW5kKHYubm9kZSx2Lm9mZnNldCkscC5hZGRSYW5nZShiKSl9fX19Zm9yKGQ9W10scD1sO3A9cC5wYXJlbnROb2RlOykxPT09cC5ub2RlVHlwZSYmZC5wdXNoKHtlbGVtZW50OnAsbGVmdDpwLnNjcm9sbExlZnQsdG9wOnAuc2Nyb2xsVG9wfSk7Zm9yKFwiZnVuY3Rpb25cIj09dHlwZW9mIGwuZm9jdXMmJmwuZm9jdXMoKSxsPTA7bDxkLmxlbmd0aDtsKyspe3ZhciBBPWRbbF07QS5lbGVtZW50LnNjcm9sbExlZnQ9QS5sZWZ0LEEuZWxlbWVudC5zY3JvbGxUb3A9QS50b3B9fXVvPSEhY2QsY2Y9Y2Q9bnVsbH1maW5hbGx5e2xEPW8sVC5wPXIsSS5UPW59fWUuY3VycmVudD10LGw1PTJ9fWZ1bmN0aW9uIHNrKCl7aWYoMj09PWw1KXtsNT0wO3ZhciBlPWwzLHQ9bDYsbj0wIT0oODc3MiZ0LmZsYWdzKTtpZigwIT0oODc3MiZ0LnN1YnRyZWVGbGFncyl8fG4pe249SS5ULEkuVD1udWxsO3ZhciByPVQucDtULnA9Mjt2YXIgbz1sRDtsRHw9NDt0cnl7bHMoZSx0LmFsdGVybmF0ZSx0KX1maW5hbGx5e2xEPW8sVC5wPXIsSS5UPW59fWw1PTN9fWZ1bmN0aW9uIHNFKCl7aWYoND09PWw1fHwzPT09bDUpe2w1PTAsZW4oKTt2YXIgZT1sMyx0PWw2LG49bDkscj1zZTswIT0oMTAyNTYmdC5zdWJ0cmVlRmxhZ3MpfHwwIT0oMTAyNTYmdC5mbGFncyk/bDU9NToobDU9MCxsNj1sMz1udWxsLHNqKGUsZS5wZW5kaW5nTGFuZXMpKTt2YXIgbz1lLnBlbmRpbmdMYW5lcztpZigwPT09byYmKGw0PW51bGwpLGVQKG4pLHQ9dC5zdGF0ZU5vZGUsZXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVwLm9uQ29tbWl0RmliZXJSb290KXRyeXtlcC5vbkNvbW1pdEZpYmVyUm9vdChlZix0LHZvaWQgMCwxMjg9PSgxMjgmdC5jdXJyZW50LmZsYWdzKSl9Y2F0Y2goZSl7fWlmKG51bGwhPT1yKXt0PUkuVCxvPVQucCxULnA9MixJLlQ9bnVsbDt0cnl7Zm9yKHZhciBhPWUub25SZWNvdmVyYWJsZUVycm9yLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGw9cltpXTthKGwudmFsdWUse2NvbXBvbmVudFN0YWNrOmwuc3RhY2t9KX19ZmluYWxseXtJLlQ9dCxULnA9b319MCE9KDMmbDkpJiZzUygpLHNxKGUpLG89ZS5wZW5kaW5nTGFuZXMsMCE9KDQxOTQwOTAmbikmJjAhPSg0MiZvKT9lPT09c24/c3QrKzooc3Q9MCxzbj1lKTpzdD0wLHNIKDAsITEpfX1mdW5jdGlvbiBzaihlLHQpezA9PShlLnBvb2xlZENhY2hlTGFuZXMmPXQpJiZudWxsIT0odD1lLnBvb2xlZENhY2hlKSYmKGUucG9vbGVkQ2FjaGU9bnVsbCxyMih0KSl9ZnVuY3Rpb24gc1MoZSl7cmV0dXJuIHNfKCksc2soKSxzRSgpLHNPKGUpfWZ1bmN0aW9uIHNPKCl7aWYoNSE9PWw1KXJldHVybiExO3ZhciBlPWwzLHQ9bDg7bDg9MDt2YXIgbj1lUChsOSkscj1JLlQsbz1ULnA7dHJ5e1QucD0zMj5uPzMyOm4sSS5UPW51bGwsbj1sNyxsNz1udWxsO3ZhciBhPWwzLGk9bDk7aWYobDU9MCxsNj1sMz1udWxsLGw5PTAsMCE9KDYmbEQpKXRocm93IEVycm9yKGwoMzMxKSk7dmFyIHM9bEQ7aWYobER8PTQsbFAoYS5jdXJyZW50KSxsXyhhLGEuY3VycmVudCxpLG4pLGxEPXMsc0goMCwhMSksZXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVwLm9uUG9zdENvbW1pdEZpYmVyUm9vdCl0cnl7ZXAub25Qb3N0Q29tbWl0RmliZXJSb290KGVmLGEpfWNhdGNoKGUpe31yZXR1cm4hMH1maW5hbGx5e1QucD1vLEkuVD1yLHNqKGUsdCl9fWZ1bmN0aW9uIHNCKGUsdCxuKXt0PXJ1KG4sdCksdD1pZyhlLnN0YXRlTm9kZSx0LDIpLG51bGwhPT0oZT1vayhlLHQsMikpJiYoZUUoZSwyKSxzcShlKSl9ZnVuY3Rpb24gc1AoZSx0LG4pe2lmKDM9PT1lLnRhZylzQihlLGUsbik7ZWxzZSBmb3IoO251bGwhPT10Oyl7aWYoMz09PXQudGFnKXtzQih0LGUsbik7YnJlYWt9aWYoMT09PXQudGFnKXt2YXIgcj10LnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PWw0fHwhbDQuaGFzKHIpKSl7ZT1ydShuLGUpLG51bGwhPT0ocj1vayh0LG49aXkoMiksMikpJiYoaXYobixyLHQsZSksZUUociwyKSxzcShyKSk7YnJlYWt9fXQ9dC5yZXR1cm59fWZ1bmN0aW9uIHNJKGUsdCxuKXt2YXIgcj1lLnBpbmdDYWNoZTtpZihudWxsPT09cil7cj1lLnBpbmdDYWNoZT1uZXcgbHo7dmFyIG89bmV3IFNldDtyLnNldCh0LG8pfWVsc2Ugdm9pZCAwPT09KG89ci5nZXQodCkpJiYobz1uZXcgU2V0LHIuc2V0KHQsbykpO28uaGFzKG4pfHwobHE9ITAsby5hZGQobiksZT1zVC5iaW5kKG51bGwsZSx0LG4pLHQudGhlbihlLGUpKX1mdW5jdGlvbiBzVChlLHQsbil7dmFyIHI9ZS5waW5nQ2FjaGU7bnVsbCE9PXImJnIuZGVsZXRlKHQpLGUucGluZ2VkTGFuZXN8PWUuc3VzcGVuZGVkTGFuZXMmbixlLndhcm1MYW5lcyY9fm4sbEw9PT1lJiYobFImbik9PT1uJiYoND09PWxWfHwzPT09bFYmJigweDNjMDAwMDAmbFIpPT09bFImJjMwMD5lcigpLWwwPzA9PSgyJmxEKSYmc2QoZSwwKTpsWXw9bixsWD09PWxSJiYobFg9MCkpLHNxKGUpfWZ1bmN0aW9uIHN6KGUsdCl7MD09PXQmJih0PWVfKCkpLG51bGwhPT0oZT1uMyhlLHQpKSYmKGVFKGUsdCksc3EoZSkpfWZ1bmN0aW9uIHNEKGUpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZSxuPTA7bnVsbCE9PXQmJihuPXQucmV0cnlMYW5lKSxzeihlLG4pfWZ1bmN0aW9uIHNMKGUsdCl7dmFyIG49MDtzd2l0Y2goZS50YWcpe2Nhc2UgMzE6Y2FzZSAxMzp2YXIgcj1lLnN0YXRlTm9kZSxvPWUubWVtb2l6ZWRTdGF0ZTtudWxsIT09byYmKG49by5yZXRyeUxhbmUpO2JyZWFrO2Nhc2UgMTk6cj1lLnN0YXRlTm9kZTticmVhaztjYXNlIDIyOnI9ZS5zdGF0ZU5vZGUuX3JldHJ5Q2FjaGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDMxNCkpfW51bGwhPT1yJiZyLmRlbGV0ZSh0KSxzeihlLG4pfXZhciBzTj1udWxsLHNSPW51bGwsc009ITEsc1o9ITEsc1U9ITEsc0Y9MDtmdW5jdGlvbiBzcShlKXtlIT09c1ImJm51bGw9PT1lLm5leHQmJihudWxsPT09c1I/c049c1I9ZTpzUj1zUi5uZXh0PWUpLHNaPSEwLHNNfHwoc009ITAsY3goZnVuY3Rpb24oKXswIT0oNiZsRCk/SihlYSxzVik6cyQoKX0pKX1mdW5jdGlvbiBzSChlLHQpe2lmKCFzVSYmc1ope3NVPSEwO2RvIGZvcih2YXIgbj0hMSxyPXNOO251bGwhPT1yOyl7aWYoIXQpaWYoMCE9PWUpe3ZhciBvPXIucGVuZGluZ0xhbmVzO2lmKDA9PT1vKXZhciBhPTA7ZWxzZXt2YXIgaT1yLnN1c3BlbmRlZExhbmVzLGw9ci5waW5nZWRMYW5lczthPTB4YzAwMDA5NSYoYT0oMTw8MzEtZW0oNDJ8ZSkrMSktMSYobyZ+KGkmfmwpKSk/MHhjMDAwMDk1JmF8MTphPzJ8YTowfTAhPT1hJiYobj0hMCxzSyhyLGEpKX1lbHNlIGE9bFIsMD09KDMmKGE9ZXgocixyPT09bEw/YTowLG51bGwhPT1yLmNhbmNlbFBlbmRpbmdDb21taXR8fC0xIT09ci50aW1lb3V0SGFuZGxlKSkpfHxldyhyLGEpfHwobj0hMCxzSyhyLGEpKTtyPXIubmV4dH13aGlsZShuKTtzVT0hMX19ZnVuY3Rpb24gc1YoKXtzJCgpfWZ1bmN0aW9uIHMkKCl7c1o9c009ITE7dmFyIGUsdD0wOzA9PT1zRnx8KChlPXdpbmRvdy5ldmVudCkmJlwicG9wc3RhdGVcIj09PWUudHlwZT9lPT09Y3l8fChjeT1lLDApOihjeT1udWxsLDEpKXx8KHQ9c0YpO2Zvcih2YXIgbj1lcigpLHI9bnVsbCxvPXNOO251bGwhPT1vOyl7dmFyIGE9by5uZXh0LGk9c1cobyxuKTswPT09aT8oby5uZXh0PW51bGwsbnVsbD09PXI/c049YTpyLm5leHQ9YSxudWxsPT09YSYmKHNSPXIpKToocj1vLCgwIT09dHx8MCE9KDMmaSkpJiYoc1o9ITApKSxvPWF9MCE9PWw1JiY1IT09bDV8fHNIKHQsITEpLDAhPT1zRiYmKHNGPTApfWZ1bmN0aW9uIHNXKGUsdCl7Zm9yKHZhciBuPWUuc3VzcGVuZGVkTGFuZXMscj1lLnBpbmdlZExhbmVzLG89ZS5leHBpcmF0aW9uVGltZXMsYT0tMHgzYzAwMDAxJmUucGVuZGluZ0xhbmVzOzA8YTspe3ZhciBpPTMxLWVtKGEpLGw9MTw8aSxzPW9baV07LTE9PT1zPygwPT0obCZuKXx8MCE9KGwmcikpJiYob1tpXT1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDg6Y2FzZSA2NDpyZXR1cm4gdCsyNTA7Y2FzZSAxNjpjYXNlIDMyOmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiB0KzVlMztkZWZhdWx0OnJldHVybiAtMX19KGwsdCkpOnM8PXQmJihlLmV4cGlyZWRMYW5lc3w9bCksYSY9fmx9aWYodD1sTCxuPWxSLG49ZXgoZSxlPT09dD9uOjAsbnVsbCE9PWUuY2FuY2VsUGVuZGluZ0NvbW1pdHx8LTEhPT1lLnRpbWVvdXRIYW5kbGUpLHI9ZS5jYWxsYmFja05vZGUsMD09PW58fGU9PT10JiYoMj09PWxNfHw5PT09bE0pfHxudWxsIT09ZS5jYW5jZWxQZW5kaW5nQ29tbWl0KXJldHVybiBudWxsIT09ciYmbnVsbCE9PXImJmVlKHIpLGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTA7aWYoMD09KDMmbil8fGV3KGUsbikpe2lmKCh0PW4mLW4pPT09ZS5jYWxsYmFja1ByaW9yaXR5KXJldHVybiB0O3N3aXRjaChudWxsIT09ciYmZWUociksZVAobikpe2Nhc2UgMjpjYXNlIDg6bj1laTticmVhaztjYXNlIDMyOmRlZmF1bHQ6bj1lbDticmVhaztjYXNlIDB4MTAwMDAwMDA6bj1lY31yZXR1cm4gbj1KKG4scj1zWS5iaW5kKG51bGwsZSkpLGUuY2FsbGJhY2tQcmlvcml0eT10LGUuY2FsbGJhY2tOb2RlPW4sdH1yZXR1cm4gbnVsbCE9PXImJm51bGwhPT1yJiZlZShyKSxlLmNhbGxiYWNrUHJpb3JpdHk9MixlLmNhbGxiYWNrTm9kZT1udWxsLDJ9ZnVuY3Rpb24gc1koZSx0KXtpZigwIT09bDUmJjUhPT1sNSlyZXR1cm4gZS5jYWxsYmFja05vZGU9bnVsbCxlLmNhbGxiYWNrUHJpb3JpdHk9MCxudWxsO3ZhciBuPWUuY2FsbGJhY2tOb2RlO2lmKHNTKCEwKSYmZS5jYWxsYmFja05vZGUhPT1uKXJldHVybiBudWxsO3ZhciByPWxSO3JldHVybiAwPT09KHI9ZXgoZSxlPT09bEw/cjowLG51bGwhPT1lLmNhbmNlbFBlbmRpbmdDb21taXR8fC0xIT09ZS50aW1lb3V0SGFuZGxlKSk/bnVsbDooc2koZSxyLHQpLHNXKGUsZXIoKSksbnVsbCE9ZS5jYWxsYmFja05vZGUmJmUuY2FsbGJhY2tOb2RlPT09bj9zWS5iaW5kKG51bGwsZSk6bnVsbCl9ZnVuY3Rpb24gc0soZSx0KXtpZihzUygpKXJldHVybiBudWxsO3NpKGUsdCwhMCl9ZnVuY3Rpb24gc1goKXtpZigwPT09c0Ype3ZhciBlPXIzO3NGPTAhPT1lP2U6ZUMoKX1yZXR1cm4gc0Z9ZnVuY3Rpb24gc0coZSl7cmV0dXJuIG51bGw9PWV8fFwic3ltYm9sXCI9PXR5cGVvZiBlfHxcImJvb2xlYW5cIj09dHlwZW9mIGU/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6dG0oXCJcIitlKX1mdW5jdGlvbiBzUShlLHQpe3ZhciBuPXQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7cmV0dXJuIG4ubmFtZT10Lm5hbWUsbi52YWx1ZT10LnZhbHVlLGUuaWQmJm4uc2V0QXR0cmlidXRlKFwiZm9ybVwiLGUuaWQpLHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobix0KSxlPW5ldyBGb3JtRGF0YShlKSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiksZX1mb3IodmFyIHNKPTA7c0o8blgubGVuZ3RoO3NKKyspe3ZhciBzMD1uWFtzSl07bkcoczAudG9Mb3dlckNhc2UoKSxcIm9uXCIrKHMwWzBdLnRvVXBwZXJDYXNlKCkrczAuc2xpY2UoMSkpKX1uRyhuRixcIm9uQW5pbWF0aW9uRW5kXCIpLG5HKG5xLFwib25BbmltYXRpb25JdGVyYXRpb25cIiksbkcobkgsXCJvbkFuaW1hdGlvblN0YXJ0XCIpLG5HKFwiZGJsY2xpY2tcIixcIm9uRG91YmxlQ2xpY2tcIiksbkcoXCJmb2N1c2luXCIsXCJvbkZvY3VzXCIpLG5HKFwiZm9jdXNvdXRcIixcIm9uQmx1clwiKSxuRyhuVixcIm9uVHJhbnNpdGlvblJ1blwiKSxuRyhuJCxcIm9uVHJhbnNpdGlvblN0YXJ0XCIpLG5HKG5XLFwib25UcmFuc2l0aW9uQ2FuY2VsXCIpLG5HKG5ZLFwib25UcmFuc2l0aW9uRW5kXCIpLGVRKFwib25Nb3VzZUVudGVyXCIsW1wibW91c2VvdXRcIixcIm1vdXNlb3ZlclwiXSksZVEoXCJvbk1vdXNlTGVhdmVcIixbXCJtb3VzZW91dFwiLFwibW91c2VvdmVyXCJdKSxlUShcIm9uUG9pbnRlckVudGVyXCIsW1wicG9pbnRlcm91dFwiLFwicG9pbnRlcm92ZXJcIl0pLGVRKFwib25Qb2ludGVyTGVhdmVcIixbXCJwb2ludGVyb3V0XCIsXCJwb2ludGVyb3ZlclwiXSksZUcoXCJvbkNoYW5nZVwiLFwiY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcIiBcIikpLGVHKFwib25TZWxlY3RcIixcImZvY3Vzb3V0IGNvbnRleHRtZW51IGRyYWdlbmQgZm9jdXNpbiBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKSksZUcoXCJvbkJlZm9yZUlucHV0XCIsW1wiY29tcG9zaXRpb25lbmRcIixcImtleXByZXNzXCIsXCJ0ZXh0SW5wdXRcIixcInBhc3RlXCJdKSxlRyhcIm9uQ29tcG9zaXRpb25FbmRcIixcImNvbXBvc2l0aW9uZW5kIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpKSxlRyhcIm9uQ29tcG9zaXRpb25TdGFydFwiLFwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSksZUcoXCJvbkNvbXBvc2l0aW9uVXBkYXRlXCIsXCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSk7dmFyIHMxPVwiYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmdcIi5zcGxpdChcIiBcIiksczI9bmV3IFNldChcImJlZm9yZXRvZ2dsZSBjYW5jZWwgY2xvc2UgaW52YWxpZCBsb2FkIHNjcm9sbCBzY3JvbGxlbmQgdG9nZ2xlXCIuc3BsaXQoXCIgXCIpLmNvbmNhdChzMSkpO2Z1bmN0aW9uIHM0KGUsdCl7dD0wIT0oNCZ0KTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXSxvPXIuZXZlbnQ7cj1yLmxpc3RlbmVycztlOnt2YXIgYT12b2lkIDA7aWYodClmb3IodmFyIGk9ci5sZW5ndGgtMTswPD1pO2ktLSl7dmFyIGw9cltpXSxzPWwuaW5zdGFuY2UsYz1sLmN1cnJlbnRUYXJnZXQ7aWYobD1sLmxpc3RlbmVyLHMhPT1hJiZvLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgZTthPWwsby5jdXJyZW50VGFyZ2V0PWM7dHJ5e2Eobyl9Y2F0Y2goZSl7blEoZSl9by5jdXJyZW50VGFyZ2V0PW51bGwsYT1zfWVsc2UgZm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7aWYocz0obD1yW2ldKS5pbnN0YW5jZSxjPWwuY3VycmVudFRhcmdldCxsPWwubGlzdGVuZXIscyE9PWEmJm8uaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBlO2E9bCxvLmN1cnJlbnRUYXJnZXQ9Yzt0cnl7YShvKX1jYXRjaChlKXtuUShlKX1vLmN1cnJlbnRUYXJnZXQ9bnVsbCxhPXN9fX19ZnVuY3Rpb24gczUoZSx0KXt2YXIgbj10W2VSXTt2b2lkIDA9PT1uJiYobj10W2VSXT1uZXcgU2V0KTt2YXIgcj1lK1wiX19idWJibGVcIjtuLmhhcyhyKXx8KHM4KHQsZSwyLCExKSxuLmFkZChyKSl9ZnVuY3Rpb24gczMoZSx0LG4pe3ZhciByPTA7dCYmKHJ8PTQpLHM4KG4sZSxyLHQpfXZhciBzNj1cIl9yZWFjdExpc3RlbmluZ1wiK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO2Z1bmN0aW9uIHM5KGUpe2lmKCFlW3M2XSl7ZVtzNl09ITAsZUsuZm9yRWFjaChmdW5jdGlvbih0KXtcInNlbGVjdGlvbmNoYW5nZVwiIT09dCYmKHMyLmhhcyh0KXx8czModCwhMSxlKSxzMyh0LCEwLGUpKX0pO3ZhciB0PTk9PT1lLm5vZGVUeXBlP2U6ZS5vd25lckRvY3VtZW50O251bGw9PT10fHx0W3M2XXx8KHRbczZdPSEwLHMzKFwic2VsZWN0aW9uY2hhbmdlXCIsITEsdCkpfX1mdW5jdGlvbiBzOChlLHQsbixyKXtzd2l0Y2godWQodCkpe2Nhc2UgMjp2YXIgbz11YTticmVhaztjYXNlIDg6bz11aTticmVhaztkZWZhdWx0Om89dWx9bj1vLmJpbmQobnVsbCx0LG4sZSksbz12b2lkIDAsdEUmJihcInRvdWNoc3RhcnRcIj09PXR8fFwidG91Y2htb3ZlXCI9PT10fHxcIndoZWVsXCI9PT10KSYmKG89ITApLHI/dm9pZCAwIT09bz9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLHtjYXB0dXJlOiEwLHBhc3NpdmU6b30pOmUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITApOnZvaWQgMCE9PW8/ZS5hZGRFdmVudExpc3RlbmVyKHQsbix7cGFzc2l2ZTpvfSk6ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMSl9ZnVuY3Rpb24gczcoZSx0LG4scixvKXt2YXIgYT1yO2lmKDA9PSgxJnQpJiYwPT0oMiZ0KSYmbnVsbCE9PXIpZTpmb3IoOzspe2lmKG51bGw9PT1yKXJldHVybjt2YXIgaT1yLnRhZztpZigzPT09aXx8ND09PWkpe3ZhciBsPXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87aWYobD09PW8pYnJlYWs7aWYoND09PWkpZm9yKGk9ci5yZXR1cm47bnVsbCE9PWk7KXt2YXIgYz1pLnRhZztpZigoMz09PWN8fDQ9PT1jKSYmaS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PW8pcmV0dXJuO2k9aS5yZXR1cm59Zm9yKDtudWxsIT09bDspe2lmKG51bGw9PT0oaT1lSChsKSkpcmV0dXJuO2lmKDU9PT0oYz1pLnRhZyl8fDY9PT1jfHwyNj09PWN8fDI3PT09Yyl7cj1hPWk7Y29udGludWUgZX1sPWwucGFyZW50Tm9kZX19cj1yLnJldHVybn10QyhmdW5jdGlvbigpe3ZhciByPWEsbz10dihuKSxpPVtdO2U6e3ZhciBsPW5LLmdldChlKTtpZih2b2lkIDAhPT1sKXt2YXIgYz10Rix1PWU7c3dpdGNoKGUpe2Nhc2VcImtleXByZXNzXCI6aWYoMD09PXRJKG4pKWJyZWFrIGU7Y2FzZVwia2V5ZG93blwiOmNhc2VcImtleXVwXCI6Yz10NDticmVhaztjYXNlXCJmb2N1c2luXCI6dT1cImZvY3VzXCIsYz10WTticmVhaztjYXNlXCJmb2N1c291dFwiOnU9XCJibHVyXCIsYz10WTticmVhaztjYXNlXCJiZWZvcmVibHVyXCI6Y2FzZVwiYWZ0ZXJibHVyXCI6Yz10WTticmVhaztjYXNlXCJjbGlja1wiOmlmKDI9PT1uLmJ1dHRvbilicmVhayBlO2Nhc2VcImF1eGNsaWNrXCI6Y2FzZVwiZGJsY2xpY2tcIjpjYXNlXCJtb3VzZWRvd25cIjpjYXNlXCJtb3VzZW1vdmVcIjpjYXNlXCJtb3VzZXVwXCI6Y2FzZVwibW91c2VvdXRcIjpjYXNlXCJtb3VzZW92ZXJcIjpjYXNlXCJjb250ZXh0bWVudVwiOmM9dCQ7YnJlYWs7Y2FzZVwiZHJhZ1wiOmNhc2VcImRyYWdlbmRcIjpjYXNlXCJkcmFnZW50ZXJcIjpjYXNlXCJkcmFnZXhpdFwiOmNhc2VcImRyYWdsZWF2ZVwiOmNhc2VcImRyYWdvdmVyXCI6Y2FzZVwiZHJhZ3N0YXJ0XCI6Y2FzZVwiZHJvcFwiOmM9dFc7YnJlYWs7Y2FzZVwidG91Y2hjYW5jZWxcIjpjYXNlXCJ0b3VjaGVuZFwiOmNhc2VcInRvdWNobW92ZVwiOmNhc2VcInRvdWNoc3RhcnRcIjpjPXQzO2JyZWFrO2Nhc2UgbkY6Y2FzZSBucTpjYXNlIG5IOmM9dEs7YnJlYWs7Y2FzZSBuWTpjPXQ2O2JyZWFrO2Nhc2VcInNjcm9sbFwiOmNhc2VcInNjcm9sbGVuZFwiOmM9dEg7YnJlYWs7Y2FzZVwid2hlZWxcIjpjPXQ5O2JyZWFrO2Nhc2VcImNvcHlcIjpjYXNlXCJjdXRcIjpjYXNlXCJwYXN0ZVwiOmM9dFg7YnJlYWs7Y2FzZVwiZ290cG9pbnRlcmNhcHR1cmVcIjpjYXNlXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpjYXNlXCJwb2ludGVyY2FuY2VsXCI6Y2FzZVwicG9pbnRlcmRvd25cIjpjYXNlXCJwb2ludGVybW92ZVwiOmNhc2VcInBvaW50ZXJvdXRcIjpjYXNlXCJwb2ludGVyb3ZlclwiOmNhc2VcInBvaW50ZXJ1cFwiOmM9dDU7YnJlYWs7Y2FzZVwidG9nZ2xlXCI6Y2FzZVwiYmVmb3JldG9nZ2xlXCI6Yz10OH12YXIgZD0wIT0oNCZ0KSxmPSFkJiYoXCJzY3JvbGxcIj09PWV8fFwic2Nyb2xsZW5kXCI9PT1lKSxwPWQ/bnVsbCE9PWw/bCtcIkNhcHR1cmVcIjpudWxsOmw7ZD1bXTtmb3IodmFyIGgsbT1yO251bGwhPT1tOyl7dmFyIGc9bTtpZihoPWcuc3RhdGVOb2RlLDUhPT0oZz1nLnRhZykmJjI2IT09ZyYmMjchPT1nfHxudWxsPT09aHx8bnVsbD09PXB8fG51bGwhPShnPXRfKG0scCkpJiZkLnB1c2goY2UobSxnLGgpKSxmKWJyZWFrO209bS5yZXR1cm59MDxkLmxlbmd0aCYmKGw9bmV3IGMobCx1LG51bGwsbixvKSxpLnB1c2goe2V2ZW50OmwsbGlzdGVuZXJzOmR9KSl9fWlmKDA9PSg3JnQpKXtpZigobD1cIm1vdXNlb3ZlclwiPT09ZXx8XCJwb2ludGVyb3ZlclwiPT09ZSxjPVwibW91c2VvdXRcIj09PWV8fFwicG9pbnRlcm91dFwiPT09ZSwhKGwmJm4hPT10eSYmKHU9bi5yZWxhdGVkVGFyZ2V0fHxuLmZyb21FbGVtZW50KSYmKGVIKHUpfHx1W2VOXSkpKSYmKGN8fGwpJiYobD1vLndpbmRvdz09PW8/bzoobD1vLm93bmVyRG9jdW1lbnQpP2wuZGVmYXVsdFZpZXd8fGwucGFyZW50V2luZG93OndpbmRvdyxjPyh1PW4ucmVsYXRlZFRhcmdldHx8bi50b0VsZW1lbnQsYz1yLG51bGwhPT0odT11P2VIKHUpOm51bGwpJiYoZj1zKHUpLGQ9dS50YWcsdSE9PWZ8fDUhPT1kJiYyNyE9PWQmJjYhPT1kKSYmKHU9bnVsbCkpOihjPW51bGwsdT1yKSxjIT09dSkpe2lmKGQ9dCQsZz1cIm9uTW91c2VMZWF2ZVwiLHA9XCJvbk1vdXNlRW50ZXJcIixtPVwibW91c2VcIiwoXCJwb2ludGVyb3V0XCI9PT1lfHxcInBvaW50ZXJvdmVyXCI9PT1lKSYmKGQ9dDUsZz1cIm9uUG9pbnRlckxlYXZlXCIscD1cIm9uUG9pbnRlckVudGVyXCIsbT1cInBvaW50ZXJcIiksZj1udWxsPT1jP2w6ZSQoYyksaD1udWxsPT11P2w6ZSQodSksKGw9bmV3IGQoZyxtK1wibGVhdmVcIixjLG4sbykpLnRhcmdldD1mLGwucmVsYXRlZFRhcmdldD1oLGc9bnVsbCxlSChvKT09PXImJigoZD1uZXcgZChwLG0rXCJlbnRlclwiLHUsbixvKSkudGFyZ2V0PWgsZC5yZWxhdGVkVGFyZ2V0PWYsZz1kKSxmPWcsYyYmdSl0Ontmb3IoZD1jbixwPWMsbT11LGg9MCxnPXA7ZztnPWQoZykpaCsrO2c9MDtmb3IodmFyIHksdj1tO3Y7dj1kKHYpKWcrKztmb3IoOzA8aC1nOylwPWQocCksaC0tO2Zvcig7MDxnLWg7KW09ZChtKSxnLS07Zm9yKDtoLS07KXtpZihwPT09bXx8bnVsbCE9PW0mJnA9PT1tLmFsdGVybmF0ZSl7ZD1wO2JyZWFrIHR9cD1kKHApLG09ZChtKX1kPW51bGx9ZWxzZSBkPW51bGw7bnVsbCE9PWMmJmNyKGksbCxjLGQsITEpLG51bGwhPT11JiZudWxsIT09ZiYmY3IoaSxmLHUsZCwhMCl9ZTp7aWYoXCJzZWxlY3RcIj09PShjPShsPXI/ZSQocik6d2luZG93KS5ub2RlTmFtZSYmbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXx8XCJpbnB1dFwiPT09YyYmXCJmaWxlXCI9PT1sLnR5cGUpdmFyIGI9bm07ZWxzZSBpZihuYyhsKSlpZihuZyliPW5fO2Vsc2V7Yj1udzt2YXIgQT1ueH1lbHNlKGM9bC5ub2RlTmFtZSkmJlwiaW5wdXRcIj09PWMudG9Mb3dlckNhc2UoKSYmKFwiY2hlY2tib3hcIj09PWwudHlwZXx8XCJyYWRpb1wiPT09bC50eXBlKT9iPW5DOnImJnRmKHIuZWxlbWVudFR5cGUpJiYoYj1ubSk7aWYoYiYmKGI9YihlLHIpKSl7bnUoaSxiLG4sbyk7YnJlYWsgZX1BJiZBKGUsbCxyKSxcImZvY3Vzb3V0XCI9PT1lJiZyJiZcIm51bWJlclwiPT09bC50eXBlJiZudWxsIT1yLm1lbW9pemVkUHJvcHMudmFsdWUmJnRvKGwsXCJudW1iZXJcIixsLnZhbHVlKX1zd2l0Y2goQT1yP2UkKHIpOndpbmRvdyxlKXtjYXNlXCJmb2N1c2luXCI6KG5jKEEpfHxcInRydWVcIj09PUEuY29udGVudEVkaXRhYmxlKSYmKG5JPUEsblQ9cixuej1udWxsKTticmVhaztjYXNlXCJmb2N1c291dFwiOm56PW5UPW5JPW51bGw7YnJlYWs7Y2FzZVwibW91c2Vkb3duXCI6bkQ9ITA7YnJlYWs7Y2FzZVwiY29udGV4dG1lbnVcIjpjYXNlXCJtb3VzZXVwXCI6Y2FzZVwiZHJhZ2VuZFwiOm5EPSExLG5MKGksbixvKTticmVhaztjYXNlXCJzZWxlY3Rpb25jaGFuZ2VcIjppZihuUClicmVhaztjYXNlXCJrZXlkb3duXCI6Y2FzZVwia2V5dXBcIjpuTChpLG4sbyl9aWYobmUpdDp7c3dpdGNoKGUpe2Nhc2VcImNvbXBvc2l0aW9uc3RhcnRcIjp2YXIgeD1cIm9uQ29tcG9zaXRpb25TdGFydFwiO2JyZWFrIHQ7Y2FzZVwiY29tcG9zaXRpb25lbmRcIjp4PVwib25Db21wb3NpdGlvbkVuZFwiO2JyZWFrIHQ7Y2FzZVwiY29tcG9zaXRpb251cGRhdGVcIjp4PVwib25Db21wb3NpdGlvblVwZGF0ZVwiO2JyZWFrIHR9eD12b2lkIDB9ZWxzZSBubD9uYShlLG4pJiYoeD1cIm9uQ29tcG9zaXRpb25FbmRcIik6XCJrZXlkb3duXCI9PT1lJiYyMjk9PT1uLmtleUNvZGUmJih4PVwib25Db21wb3NpdGlvblN0YXJ0XCIpO3gmJihuciYmXCJrb1wiIT09bi5sb2NhbGUmJihubHx8XCJvbkNvbXBvc2l0aW9uU3RhcnRcIiE9PXg/XCJvbkNvbXBvc2l0aW9uRW5kXCI9PT14JiZubCYmKHk9dFAoKSk6KHRPPVwidmFsdWVcImluKHRTPW8pP3RTLnZhbHVlOnRTLnRleHRDb250ZW50LG5sPSEwKSksMDwoQT1jdChyLHgpKS5sZW5ndGgmJih4PW5ldyB0Ryh4LGUsbnVsbCxuLG8pLGkucHVzaCh7ZXZlbnQ6eCxsaXN0ZW5lcnM6QX0pLHk/eC5kYXRhPXk6bnVsbCE9PSh5PW5pKG4pKSYmKHguZGF0YT15KSkpLCh5PW5uP2Z1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNvbXBvc2l0aW9uZW5kXCI6cmV0dXJuIG5pKHQpO2Nhc2VcImtleXByZXNzXCI6aWYoMzIhPT10LndoaWNoKXJldHVybiBudWxsO3JldHVybiBubz0hMCxcIiBcIjtjYXNlXCJ0ZXh0SW5wdXRcIjpyZXR1cm5cIiBcIj09PShlPXQuZGF0YSkmJm5vP251bGw6ZTtkZWZhdWx0OnJldHVybiBudWxsfX0oZSxuKTpmdW5jdGlvbihlLHQpe2lmKG5sKXJldHVyblwiY29tcG9zaXRpb25lbmRcIj09PWV8fCFuZSYmbmEoZSx0KT8oZT10UCgpLHRCPXRPPXRTPW51bGwsbmw9ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZVwicGFzdGVcIjpkZWZhdWx0OnJldHVybiBudWxsO2Nhc2VcImtleXByZXNzXCI6aWYoISh0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpfHx0LmN0cmxLZXkmJnQuYWx0S2V5KXtpZih0LmNoYXImJjE8dC5jaGFyLmxlbmd0aClyZXR1cm4gdC5jaGFyO2lmKHQud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCl9cmV0dXJuIG51bGw7Y2FzZVwiY29tcG9zaXRpb25lbmRcIjpyZXR1cm4gbnImJlwia29cIiE9PXQubG9jYWxlP251bGw6dC5kYXRhfX0oZSxuKSkmJjA8KHg9Y3QocixcIm9uQmVmb3JlSW5wdXRcIikpLmxlbmd0aCYmKEE9bmV3IHRHKFwib25CZWZvcmVJbnB1dFwiLFwiYmVmb3JlaW5wdXRcIixudWxsLG4sbyksaS5wdXNoKHtldmVudDpBLGxpc3RlbmVyczp4fSksQS5kYXRhPXkpO3ZhciB3PWU7aWYoXCJzdWJtaXRcIj09PXcmJnImJnIuc3RhdGVOb2RlPT09byl7dmFyIEM9c0coKG9bZUxdfHxudWxsKS5hY3Rpb24pLF89bi5zdWJtaXR0ZXI7XyYmbnVsbCE9PSh3PSh3PV9bZUxdfHxudWxsKT9zRyh3LmZvcm1BY3Rpb24pOl8uZ2V0QXR0cmlidXRlKFwiZm9ybUFjdGlvblwiKSkmJihDPXcsXz1udWxsKTt2YXIgaz1uZXcgdEYoXCJhY3Rpb25cIixcImFjdGlvblwiLG51bGwsbixvKTtpLnB1c2goe2V2ZW50OmssbGlzdGVuZXJzOlt7aW5zdGFuY2U6bnVsbCxsaXN0ZW5lcjpmdW5jdGlvbigpe2lmKG4uZGVmYXVsdFByZXZlbnRlZCl7aWYoMCE9PXNGKXt2YXIgZT1fP3NRKG8sXyk6bmV3IEZvcm1EYXRhKG8pO2FYKHIse3BlbmRpbmc6ITAsZGF0YTplLG1ldGhvZDpvLm1ldGhvZCxhY3Rpb246Q30sbnVsbCxlKX19ZWxzZVwiZnVuY3Rpb25cIj09dHlwZW9mIEMmJihrLnByZXZlbnREZWZhdWx0KCksYVgocix7cGVuZGluZzohMCxkYXRhOmU9Xz9zUShvLF8pOm5ldyBGb3JtRGF0YShvKSxtZXRob2Q6by5tZXRob2QsYWN0aW9uOkN9LEMsZSkpfSxjdXJyZW50VGFyZ2V0Om99XX0pfX1zNChpLHQpfSl9ZnVuY3Rpb24gY2UoZSx0LG4pe3JldHVybntpbnN0YW5jZTplLGxpc3RlbmVyOnQsY3VycmVudFRhcmdldDpufX1mdW5jdGlvbiBjdChlLHQpe2Zvcih2YXIgbj10K1wiQ2FwdHVyZVwiLHI9W107bnVsbCE9PWU7KXt2YXIgbz1lLGE9by5zdGF0ZU5vZGU7aWYoNSE9PShvPW8udGFnKSYmMjYhPT1vJiYyNyE9PW98fG51bGw9PT1hfHwobnVsbCE9KG89dF8oZSxuKSkmJnIudW5zaGlmdChjZShlLG8sYSkpLG51bGwhPShvPXRfKGUsdCkpJiZyLnB1c2goY2UoZSxvLGEpKSksMz09PWUudGFnKXJldHVybiByO2U9ZS5yZXR1cm59cmV0dXJuW119ZnVuY3Rpb24gY24oZSl7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7ZG8gZT1lLnJldHVybjt3aGlsZShlJiY1IT09ZS50YWcmJjI3IT09ZS50YWcpO3JldHVybiBlfHxudWxsfWZ1bmN0aW9uIGNyKGUsdCxuLHIsbyl7Zm9yKHZhciBhPXQuX3JlYWN0TmFtZSxpPVtdO251bGwhPT1uJiZuIT09cjspe3ZhciBsPW4scz1sLmFsdGVybmF0ZSxjPWwuc3RhdGVOb2RlO2lmKGw9bC50YWcsbnVsbCE9PXMmJnM9PT1yKWJyZWFrOzUhPT1sJiYyNiE9PWwmJjI3IT09bHx8bnVsbD09PWN8fChzPWMsbz9udWxsIT0oYz10XyhuLGEpKSYmaS51bnNoaWZ0KGNlKG4sYyxzKSk6b3x8bnVsbCE9KGM9dF8obixhKSkmJmkucHVzaChjZShuLGMscykpKSxuPW4ucmV0dXJufTAhPT1pLmxlbmd0aCYmZS5wdXNoKHtldmVudDp0LGxpc3RlbmVyczppfSl9dmFyIGNvPS9cXHJcXG4/L2csY2E9L1xcdTAwMDB8XFx1RkZGRC9nO2Z1bmN0aW9uIGNpKGUpe3JldHVybihcInN0cmluZ1wiPT10eXBlb2YgZT9lOlwiXCIrZSkucmVwbGFjZShjbyxcIlxcblwiKS5yZXBsYWNlKGNhLFwiXCIpfWZ1bmN0aW9uIGNsKGUsdCl7cmV0dXJuIHQ9Y2kodCksY2koZSk9PT10fWZ1bmN0aW9uIGNzKGUsdCxuLHIsbyxhKXtzd2l0Y2gobil7Y2FzZVwiY2hpbGRyZW5cIjpcInN0cmluZ1wiPT10eXBlb2Ygcj9cImJvZHlcIj09PXR8fFwidGV4dGFyZWFcIj09PXQmJlwiXCI9PT1yfHx0cyhlLHIpOihcIm51bWJlclwiPT10eXBlb2Ygcnx8XCJiaWdpbnRcIj09dHlwZW9mIHIpJiZcImJvZHlcIiE9PXQmJnRzKGUsXCJcIityKTticmVhaztjYXNlXCJjbGFzc05hbWVcIjplNChlLFwiY2xhc3NcIixyKTticmVhaztjYXNlXCJ0YWJJbmRleFwiOmU0KGUsXCJ0YWJpbmRleFwiLHIpO2JyZWFrO2Nhc2VcImRpclwiOmNhc2VcInJvbGVcIjpjYXNlXCJ2aWV3Qm94XCI6Y2FzZVwid2lkdGhcIjpjYXNlXCJoZWlnaHRcIjplNChlLG4scik7YnJlYWs7Y2FzZVwic3R5bGVcIjp0ZChlLHIsYSk7YnJlYWs7Y2FzZVwiZGF0YVwiOmlmKFwib2JqZWN0XCIhPT10KXtlNChlLFwiZGF0YVwiLHIpO2JyZWFrfWNhc2VcInNyY1wiOmNhc2VcImhyZWZcIjppZihcIlwiPT09ciYmKFwiYVwiIT09dHx8XCJocmVmXCIhPT1uKXx8bnVsbD09cnx8XCJmdW5jdGlvblwiPT10eXBlb2Ygcnx8XCJzeW1ib2xcIj09dHlwZW9mIHJ8fFwiYm9vbGVhblwiPT10eXBlb2Ygcil7ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWt9cj10bShcIlwiK3IpLGUuc2V0QXR0cmlidXRlKG4scik7YnJlYWs7Y2FzZVwiYWN0aW9uXCI6Y2FzZVwiZm9ybUFjdGlvblwiOmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpe2Uuc2V0QXR0cmlidXRlKG4sXCJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignQSBSZWFjdCBmb3JtIHdhcyB1bmV4cGVjdGVkbHkgc3VibWl0dGVkLiBJZiB5b3UgY2FsbGVkIGZvcm0uc3VibWl0KCkgbWFudWFsbHksIGNvbnNpZGVyIHVzaW5nIGZvcm0ucmVxdWVzdFN1Ym1pdCgpIGluc3RlYWQuIElmIHlvdVxcXFwncmUgdHJ5aW5nIHRvIHVzZSBldmVudC5zdG9wUHJvcGFnYXRpb24oKSBpbiBhIHN1Ym1pdCBldmVudCBoYW5kbGVyLCBjb25zaWRlciBhbHNvIGNhbGxpbmcgZXZlbnQucHJldmVudERlZmF1bHQoKS4nKVwiKTticmVha31pZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoXCJmb3JtQWN0aW9uXCI9PT1uPyhcImlucHV0XCIhPT10JiZjcyhlLHQsXCJuYW1lXCIsby5uYW1lLG8sbnVsbCksY3MoZSx0LFwiZm9ybUVuY1R5cGVcIixvLmZvcm1FbmNUeXBlLG8sbnVsbCksY3MoZSx0LFwiZm9ybU1ldGhvZFwiLG8uZm9ybU1ldGhvZCxvLG51bGwpLGNzKGUsdCxcImZvcm1UYXJnZXRcIixvLmZvcm1UYXJnZXQsbyxudWxsKSk6KGNzKGUsdCxcImVuY1R5cGVcIixvLmVuY1R5cGUsbyxudWxsKSxjcyhlLHQsXCJtZXRob2RcIixvLm1ldGhvZCxvLG51bGwpLGNzKGUsdCxcInRhcmdldFwiLG8udGFyZ2V0LG8sbnVsbCkpKSxudWxsPT1yfHxcInN5bWJvbFwiPT10eXBlb2Ygcnx8XCJib29sZWFuXCI9PXR5cGVvZiByKXtlLnJlbW92ZUF0dHJpYnV0ZShuKTticmVha31yPXRtKFwiXCIrciksZS5zZXRBdHRyaWJ1dGUobixyKTticmVhaztjYXNlXCJvbkNsaWNrXCI6bnVsbCE9ciYmKGUub25jbGljaz10Zyk7YnJlYWs7Y2FzZVwib25TY3JvbGxcIjpudWxsIT1yJiZzNShcInNjcm9sbFwiLGUpO2JyZWFrO2Nhc2VcIm9uU2Nyb2xsRW5kXCI6bnVsbCE9ciYmczUoXCJzY3JvbGxlbmRcIixlKTticmVhaztjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPXIpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiByfHwhKFwiX19odG1sXCJpbiByKSl0aHJvdyBFcnJvcihsKDYxKSk7aWYobnVsbCE9KG49ci5fX2h0bWwpKXtpZihudWxsIT1vLmNoaWxkcmVuKXRocm93IEVycm9yKGwoNjApKTtlLmlubmVySFRNTD1ufX1icmVhaztjYXNlXCJtdWx0aXBsZVwiOmUubXVsdGlwbGU9ciYmXCJmdW5jdGlvblwiIT10eXBlb2YgciYmXCJzeW1ib2xcIiE9dHlwZW9mIHI7YnJlYWs7Y2FzZVwibXV0ZWRcIjplLm11dGVkPXImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJlwic3ltYm9sXCIhPXR5cGVvZiByO2JyZWFrO2Nhc2VcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOmNhc2VcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiOmNhc2VcImRlZmF1bHRWYWx1ZVwiOmNhc2VcImRlZmF1bHRDaGVja2VkXCI6Y2FzZVwiaW5uZXJIVE1MXCI6Y2FzZVwicmVmXCI6Y2FzZVwiYXV0b0ZvY3VzXCI6Y2FzZVwiaW5uZXJUZXh0XCI6Y2FzZVwidGV4dENvbnRlbnRcIjpicmVhaztjYXNlXCJ4bGlua0hyZWZcIjppZihudWxsPT1yfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByfHxcImJvb2xlYW5cIj09dHlwZW9mIHJ8fFwic3ltYm9sXCI9PXR5cGVvZiByKXtlLnJlbW92ZUF0dHJpYnV0ZShcInhsaW5rOmhyZWZcIik7YnJlYWt9bj10bShcIlwiK3IpLGUuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazpocmVmXCIsbik7YnJlYWs7Y2FzZVwiY29udGVudEVkaXRhYmxlXCI6Y2FzZVwic3BlbGxDaGVja1wiOmNhc2VcImRyYWdnYWJsZVwiOmNhc2VcInZhbHVlXCI6Y2FzZVwiYXV0b1JldmVyc2VcIjpjYXNlXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCI6Y2FzZVwiZm9jdXNhYmxlXCI6Y2FzZVwicHJlc2VydmVBbHBoYVwiOm51bGwhPXImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJlwic3ltYm9sXCIhPXR5cGVvZiByP2Uuc2V0QXR0cmlidXRlKG4sXCJcIityKTplLnJlbW92ZUF0dHJpYnV0ZShuKTticmVhaztjYXNlXCJpbmVydFwiOmNhc2VcImFsbG93RnVsbFNjcmVlblwiOmNhc2VcImFzeW5jXCI6Y2FzZVwiYXV0b1BsYXlcIjpjYXNlXCJjb250cm9sc1wiOmNhc2VcImRlZmF1bHRcIjpjYXNlXCJkZWZlclwiOmNhc2VcImRpc2FibGVkXCI6Y2FzZVwiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmVcIjpjYXNlXCJkaXNhYmxlUmVtb3RlUGxheWJhY2tcIjpjYXNlXCJmb3JtTm9WYWxpZGF0ZVwiOmNhc2VcImhpZGRlblwiOmNhc2VcImxvb3BcIjpjYXNlXCJub01vZHVsZVwiOmNhc2VcIm5vVmFsaWRhdGVcIjpjYXNlXCJvcGVuXCI6Y2FzZVwicGxheXNJbmxpbmVcIjpjYXNlXCJyZWFkT25seVwiOmNhc2VcInJlcXVpcmVkXCI6Y2FzZVwicmV2ZXJzZWRcIjpjYXNlXCJzY29wZWRcIjpjYXNlXCJzZWFtbGVzc1wiOmNhc2VcIml0ZW1TY29wZVwiOnImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJlwic3ltYm9sXCIhPXR5cGVvZiByP2Uuc2V0QXR0cmlidXRlKG4sXCJcIik6ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWs7Y2FzZVwiY2FwdHVyZVwiOmNhc2VcImRvd25sb2FkXCI6ITA9PT1yP2Uuc2V0QXR0cmlidXRlKG4sXCJcIik6ITEhPT1yJiZudWxsIT1yJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiZcInN5bWJvbFwiIT10eXBlb2Ygcj9lLnNldEF0dHJpYnV0ZShuLHIpOmUucmVtb3ZlQXR0cmlidXRlKG4pO2JyZWFrO2Nhc2VcImNvbHNcIjpjYXNlXCJyb3dzXCI6Y2FzZVwic2l6ZVwiOmNhc2VcInNwYW5cIjpudWxsIT1yJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiZcInN5bWJvbFwiIT10eXBlb2YgciYmIWlzTmFOKHIpJiYxPD1yP2Uuc2V0QXR0cmlidXRlKG4scik6ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWs7Y2FzZVwicm93U3BhblwiOmNhc2VcInN0YXJ0XCI6bnVsbD09cnx8XCJmdW5jdGlvblwiPT10eXBlb2Ygcnx8XCJzeW1ib2xcIj09dHlwZW9mIHJ8fGlzTmFOKHIpP2UucmVtb3ZlQXR0cmlidXRlKG4pOmUuc2V0QXR0cmlidXRlKG4scik7YnJlYWs7Y2FzZVwicG9wb3ZlclwiOnM1KFwiYmVmb3JldG9nZ2xlXCIsZSksczUoXCJ0b2dnbGVcIixlKSxlMihlLFwicG9wb3ZlclwiLHIpO2JyZWFrO2Nhc2VcInhsaW5rQWN0dWF0ZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazphY3R1YXRlXCIscik7YnJlYWs7Y2FzZVwieGxpbmtBcmNyb2xlXCI6ZTUoZSxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcInhsaW5rOmFyY3JvbGVcIixyKTticmVhaztjYXNlXCJ4bGlua1JvbGVcIjplNShlLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFwieGxpbms6cm9sZVwiLHIpO2JyZWFrO2Nhc2VcInhsaW5rU2hvd1wiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazpzaG93XCIscik7YnJlYWs7Y2FzZVwieGxpbmtUaXRsZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazp0aXRsZVwiLHIpO2JyZWFrO2Nhc2VcInhsaW5rVHlwZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazp0eXBlXCIscik7YnJlYWs7Y2FzZVwieG1sQmFzZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcInhtbDpiYXNlXCIscik7YnJlYWs7Y2FzZVwieG1sTGFuZ1wiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcInhtbDpsYW5nXCIscik7YnJlYWs7Y2FzZVwieG1sU3BhY2VcIjplNShlLFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXCJ4bWw6c3BhY2VcIixyKTticmVhaztjYXNlXCJpc1wiOmUyKGUsXCJpc1wiLHIpO2JyZWFrO2RlZmF1bHQ6MjxuLmxlbmd0aCYmKFwib1wiPT09blswXXx8XCJPXCI9PT1uWzBdKSYmKFwiblwiPT09blsxXXx8XCJOXCI9PT1uWzFdKXx8ZTIoZSxuPXRwLmdldChuKXx8bixyKX19ZnVuY3Rpb24gY2MoZSx0LG4scixvLGEpe3N3aXRjaChuKXtjYXNlXCJzdHlsZVwiOnRkKGUscixhKTticmVhaztjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPXIpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiByfHwhKFwiX19odG1sXCJpbiByKSl0aHJvdyBFcnJvcihsKDYxKSk7aWYobnVsbCE9KG49ci5fX2h0bWwpKXtpZihudWxsIT1vLmNoaWxkcmVuKXRocm93IEVycm9yKGwoNjApKTtlLmlubmVySFRNTD1ufX1icmVhaztjYXNlXCJjaGlsZHJlblwiOlwic3RyaW5nXCI9PXR5cGVvZiByP3RzKGUscik6KFwibnVtYmVyXCI9PXR5cGVvZiByfHxcImJpZ2ludFwiPT10eXBlb2YgcikmJnRzKGUsXCJcIityKTticmVhaztjYXNlXCJvblNjcm9sbFwiOm51bGwhPXImJnM1KFwic2Nyb2xsXCIsZSk7YnJlYWs7Y2FzZVwib25TY3JvbGxFbmRcIjpudWxsIT1yJiZzNShcInNjcm9sbGVuZFwiLGUpO2JyZWFrO2Nhc2VcIm9uQ2xpY2tcIjpudWxsIT1yJiYoZS5vbmNsaWNrPXRnKTticmVhaztjYXNlXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIjpjYXNlXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpjYXNlXCJpbm5lckhUTUxcIjpjYXNlXCJyZWZcIjpjYXNlXCJpbm5lclRleHRcIjpjYXNlXCJ0ZXh0Q29udGVudFwiOmJyZWFrO2RlZmF1bHQ6aWYoIWVYLmhhc093blByb3BlcnR5KG4pKWU6e2lmKFwib1wiPT09blswXSYmXCJuXCI9PT1uWzFdJiYobz1uLmVuZHNXaXRoKFwiQ2FwdHVyZVwiKSx0PW4uc2xpY2UoMixvP24ubGVuZ3RoLTc6dm9pZCAwKSxcImZ1bmN0aW9uXCI9PXR5cGVvZihhPW51bGwhPShhPWVbZUxdfHxudWxsKT9hW25dOm51bGwpJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxhLG8pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpKXtcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiZudWxsIT09YSYmKG4gaW4gZT9lW25dPW51bGw6ZS5oYXNBdHRyaWJ1dGUobikmJmUucmVtb3ZlQXR0cmlidXRlKG4pKSxlLmFkZEV2ZW50TGlzdGVuZXIodCxyLG8pO2JyZWFrIGV9biBpbiBlP2Vbbl09cjohMD09PXI/ZS5zZXRBdHRyaWJ1dGUobixcIlwiKTplMihlLG4scil9fX1mdW5jdGlvbiBjdShlLHQsbil7c3dpdGNoKHQpe2Nhc2VcImRpdlwiOmNhc2VcInNwYW5cIjpjYXNlXCJzdmdcIjpjYXNlXCJwYXRoXCI6Y2FzZVwiYVwiOmNhc2VcImdcIjpjYXNlXCJwXCI6Y2FzZVwibGlcIjpicmVhaztjYXNlXCJpbWdcIjpzNShcImVycm9yXCIsZSksczUoXCJsb2FkXCIsZSk7dmFyIHIsbz0hMSxhPSExO2ZvcihyIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIGk9bltyXTtpZihudWxsIT1pKXN3aXRjaChyKXtjYXNlXCJzcmNcIjpvPSEwO2JyZWFrO2Nhc2VcInNyY1NldFwiOmE9ITA7YnJlYWs7Y2FzZVwiY2hpbGRyZW5cIjpjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOnRocm93IEVycm9yKGwoMTM3LHQpKTtkZWZhdWx0OmNzKGUsdCxyLGksbixudWxsKX19YSYmY3MoZSx0LFwic3JjU2V0XCIsbi5zcmNTZXQsbixudWxsKSxvJiZjcyhlLHQsXCJzcmNcIixuLnNyYyxuLG51bGwpO3JldHVybjtjYXNlXCJpbnB1dFwiOnM1KFwiaW52YWxpZFwiLGUpO3ZhciBzPXI9aT1hPW51bGwsYz1udWxsLHU9bnVsbDtmb3IobyBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkobykpe3ZhciBkPW5bb107aWYobnVsbCE9ZClzd2l0Y2gobyl7Y2FzZVwibmFtZVwiOmE9ZDticmVhaztjYXNlXCJ0eXBlXCI6aT1kO2JyZWFrO2Nhc2VcImNoZWNrZWRcIjpjPWQ7YnJlYWs7Y2FzZVwiZGVmYXVsdENoZWNrZWRcIjp1PWQ7YnJlYWs7Y2FzZVwidmFsdWVcIjpyPWQ7YnJlYWs7Y2FzZVwiZGVmYXVsdFZhbHVlXCI6cz1kO2JyZWFrO2Nhc2VcImNoaWxkcmVuXCI6Y2FzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjppZihudWxsIT1kKXRocm93IEVycm9yKGwoMTM3LHQpKTticmVhaztkZWZhdWx0OmNzKGUsdCxvLGQsbixudWxsKX19dHIoZSxyLHMsYyx1LGksYSwhMSk7cmV0dXJuO2Nhc2VcInNlbGVjdFwiOmZvcihhIGluIHM1KFwiaW52YWxpZFwiLGUpLG89aT1yPW51bGwsbilpZihuLmhhc093blByb3BlcnR5KGEpJiZudWxsIT0ocz1uW2FdKSlzd2l0Y2goYSl7Y2FzZVwidmFsdWVcIjpyPXM7YnJlYWs7Y2FzZVwiZGVmYXVsdFZhbHVlXCI6aT1zO2JyZWFrO2Nhc2VcIm11bHRpcGxlXCI6bz1zO2RlZmF1bHQ6Y3MoZSx0LGEscyxuLG51bGwpfXQ9cixuPWksZS5tdWx0aXBsZT0hIW8sbnVsbCE9dD90YShlLCEhbyx0LCExKTpudWxsIT1uJiZ0YShlLCEhbyxuLCEwKTtyZXR1cm47Y2FzZVwidGV4dGFyZWFcIjpmb3IoaSBpbiBzNShcImludmFsaWRcIixlKSxyPWE9bz1udWxsLG4paWYobi5oYXNPd25Qcm9wZXJ0eShpKSYmbnVsbCE9KHM9bltpXSkpc3dpdGNoKGkpe2Nhc2VcInZhbHVlXCI6bz1zO2JyZWFrO2Nhc2VcImRlZmF1bHRWYWx1ZVwiOmE9czticmVhaztjYXNlXCJjaGlsZHJlblwiOnI9czticmVhaztjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPXMpdGhyb3cgRXJyb3IobCg5MSkpO2JyZWFrO2RlZmF1bHQ6Y3MoZSx0LGkscyxuLG51bGwpfXRsKGUsbyxhLHIpO3JldHVybjtjYXNlXCJvcHRpb25cIjpmb3IoYyBpbiBuKW4uaGFzT3duUHJvcGVydHkoYykmJm51bGwhPShvPW5bY10pJiYoXCJzZWxlY3RlZFwiPT09Yz9lLnNlbGVjdGVkPW8mJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG8mJlwic3ltYm9sXCIhPXR5cGVvZiBvOmNzKGUsdCxjLG8sbixudWxsKSk7cmV0dXJuO2Nhc2VcImRpYWxvZ1wiOnM1KFwiYmVmb3JldG9nZ2xlXCIsZSksczUoXCJ0b2dnbGVcIixlKSxzNShcImNhbmNlbFwiLGUpLHM1KFwiY2xvc2VcIixlKTticmVhaztjYXNlXCJpZnJhbWVcIjpjYXNlXCJvYmplY3RcIjpzNShcImxvYWRcIixlKTticmVhaztjYXNlXCJ2aWRlb1wiOmNhc2VcImF1ZGlvXCI6Zm9yKG89MDtvPHMxLmxlbmd0aDtvKyspczUoczFbb10sZSk7YnJlYWs7Y2FzZVwiaW1hZ2VcIjpzNShcImVycm9yXCIsZSksczUoXCJsb2FkXCIsZSk7YnJlYWs7Y2FzZVwiZGV0YWlsc1wiOnM1KFwidG9nZ2xlXCIsZSk7YnJlYWs7Y2FzZVwiZW1iZWRcIjpjYXNlXCJzb3VyY2VcIjpjYXNlXCJsaW5rXCI6czUoXCJlcnJvclwiLGUpLHM1KFwibG9hZFwiLGUpO2Nhc2VcImFyZWFcIjpjYXNlXCJiYXNlXCI6Y2FzZVwiYnJcIjpjYXNlXCJjb2xcIjpjYXNlXCJoclwiOmNhc2VcImtleWdlblwiOmNhc2VcIm1ldGFcIjpjYXNlXCJwYXJhbVwiOmNhc2VcInRyYWNrXCI6Y2FzZVwid2JyXCI6Y2FzZVwibWVudWl0ZW1cIjpmb3IodSBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkodSkmJm51bGwhPShvPW5bdV0pKXN3aXRjaCh1KXtjYXNlXCJjaGlsZHJlblwiOmNhc2VcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6dGhyb3cgRXJyb3IobCgxMzcsdCkpO2RlZmF1bHQ6Y3MoZSx0LHUsbyxuLG51bGwpfXJldHVybjtkZWZhdWx0OmlmKHRmKHQpKXtmb3IoZCBpbiBuKW4uaGFzT3duUHJvcGVydHkoZCkmJnZvaWQgMCE9PShvPW5bZF0pJiZjYyhlLHQsZCxvLG4sdm9pZCAwKTtyZXR1cm59fWZvcihzIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShzKSYmbnVsbCE9KG89bltzXSkmJmNzKGUsdCxzLG8sbixudWxsKX12YXIgY2Q9bnVsbCxjZj1udWxsO2Z1bmN0aW9uIGNwKGUpe3JldHVybiA5PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudH1mdW5jdGlvbiBjaChlKXtzd2l0Y2goZSl7Y2FzZVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjpyZXR1cm4gMTtjYXNlXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gY20oZSx0KXtpZigwPT09ZSlzd2l0Y2godCl7Y2FzZVwic3ZnXCI6cmV0dXJuIDE7Y2FzZVwibWF0aFwiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9cmV0dXJuIDE9PT1lJiZcImZvcmVpZ25PYmplY3RcIj09PXQ/MDplfWZ1bmN0aW9uIGNnKGUsdCl7cmV0dXJuXCJ0ZXh0YXJlYVwiPT09ZXx8XCJub3NjcmlwdFwiPT09ZXx8XCJzdHJpbmdcIj09dHlwZW9mIHQuY2hpbGRyZW58fFwibnVtYmVyXCI9PXR5cGVvZiB0LmNoaWxkcmVufHxcImJpZ2ludFwiPT10eXBlb2YgdC5jaGlsZHJlbnx8XCJvYmplY3RcIj09dHlwZW9mIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbH12YXIgY3k9bnVsbCxjdj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6dm9pZCAwLGNiPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6dm9pZCAwLGNBPVwiZnVuY3Rpb25cIj09dHlwZW9mIFByb21pc2U/UHJvbWlzZTp2b2lkIDAsY3g9XCJmdW5jdGlvblwiPT10eXBlb2YgcXVldWVNaWNyb3Rhc2s/cXVldWVNaWNyb3Rhc2s6dm9pZCAwIT09Y0E/ZnVuY3Rpb24oZSl7cmV0dXJuIGNBLnJlc29sdmUobnVsbCkudGhlbihlKS5jYXRjaChjdyl9OmN2O2Z1bmN0aW9uIGN3KGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9ZnVuY3Rpb24gY0MoZSl7cmV0dXJuXCJoZWFkXCI9PT1lfWZ1bmN0aW9uIGNfKGUsdCl7dmFyIG49dCxyPTA7ZG97dmFyIG89bi5uZXh0U2libGluZztpZihlLnJlbW92ZUNoaWxkKG4pLG8mJjg9PT1vLm5vZGVUeXBlKWlmKFwiLyRcIj09PShuPW8uZGF0YSl8fFwiLyZcIj09PW4pe2lmKDA9PT1yKXtlLnJlbW92ZUNoaWxkKG8pLHVPKHQpO3JldHVybn1yLS19ZWxzZSBpZihcIiRcIj09PW58fFwiJD9cIj09PW58fFwiJH5cIj09PW58fFwiJCFcIj09PW58fFwiJlwiPT09bilyKys7ZWxzZSBpZihcImh0bWxcIj09PW4pY0QoZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7ZWxzZSBpZihcImhlYWRcIj09PW4pe2NEKG49ZS5vd25lckRvY3VtZW50LmhlYWQpO2Zvcih2YXIgYT1uLmZpcnN0Q2hpbGQ7YTspe3ZhciBpPWEubmV4dFNpYmxpbmcsbD1hLm5vZGVOYW1lO2FbZUZdfHxcIlNDUklQVFwiPT09bHx8XCJTVFlMRVwiPT09bHx8XCJMSU5LXCI9PT1sJiZcInN0eWxlc2hlZXRcIj09PWEucmVsLnRvTG93ZXJDYXNlKCl8fG4ucmVtb3ZlQ2hpbGQoYSksYT1pfX1lbHNlXCJib2R5XCI9PT1uJiZjRChlLm93bmVyRG9jdW1lbnQuYm9keSk7bj1vfXdoaWxlKG4pO3VPKHQpfWZ1bmN0aW9uIGNrKGUsdCl7dmFyIG49ZTtlPTA7ZG97dmFyIHI9bi5uZXh0U2libGluZztpZigxPT09bi5ub2RlVHlwZT90PyhuLl9zdGFzaGVkRGlzcGxheT1uLnN0eWxlLmRpc3BsYXksbi5zdHlsZS5kaXNwbGF5PVwibm9uZVwiKToobi5zdHlsZS5kaXNwbGF5PW4uX3N0YXNoZWREaXNwbGF5fHxcIlwiLFwiXCI9PT1uLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpJiZuLnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpKTozPT09bi5ub2RlVHlwZSYmKHQ/KG4uX3N0YXNoZWRUZXh0PW4ubm9kZVZhbHVlLG4ubm9kZVZhbHVlPVwiXCIpOm4ubm9kZVZhbHVlPW4uX3N0YXNoZWRUZXh0fHxcIlwiKSxyJiY4PT09ci5ub2RlVHlwZSlpZihcIi8kXCI9PT0obj1yLmRhdGEpKWlmKDA9PT1lKWJyZWFrO2Vsc2UgZS0tO2Vsc2VcIiRcIiE9PW4mJlwiJD9cIiE9PW4mJlwiJH5cIiE9PW4mJlwiJCFcIiE9PW58fGUrKztuPXJ9d2hpbGUobil9ZnVuY3Rpb24gY0UoZSl7dmFyIHQ9ZS5maXJzdENoaWxkO2Zvcih0JiYxMD09PXQubm9kZVR5cGUmJih0PXQubmV4dFNpYmxpbmcpO3Q7KXt2YXIgbj10O3N3aXRjaCh0PXQubmV4dFNpYmxpbmcsbi5ub2RlTmFtZSl7Y2FzZVwiSFRNTFwiOmNhc2VcIkhFQURcIjpjYXNlXCJCT0RZXCI6Y0UobiksZXEobik7Y29udGludWU7Y2FzZVwiU0NSSVBUXCI6Y2FzZVwiU1RZTEVcIjpjb250aW51ZTtjYXNlXCJMSU5LXCI6aWYoXCJzdHlsZXNoZWV0XCI9PT1uLnJlbC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWUucmVtb3ZlQ2hpbGQobil9fWZ1bmN0aW9uIGNqKGUsdCl7Zm9yKDs4IT09ZS5ub2RlVHlwZTspaWYoIXR8fG51bGw9PT0oZT1jQihlLm5leHRTaWJsaW5nKSkpcmV0dXJuIG51bGw7cmV0dXJuIGV9ZnVuY3Rpb24gY1MoZSl7cmV0dXJuXCIkP1wiPT09ZS5kYXRhfHxcIiR+XCI9PT1lLmRhdGF9ZnVuY3Rpb24gY08oZSl7cmV0dXJuXCIkIVwiPT09ZS5kYXRhfHxcIiQ/XCI9PT1lLmRhdGEmJlwibG9hZGluZ1wiIT09ZS5vd25lckRvY3VtZW50LnJlYWR5U3RhdGV9ZnVuY3Rpb24gY0IoZSl7Zm9yKDtudWxsIT1lO2U9ZS5uZXh0U2libGluZyl7dmFyIHQ9ZS5ub2RlVHlwZTtpZigxPT09dHx8Mz09PXQpYnJlYWs7aWYoOD09PXQpe2lmKFwiJFwiPT09KHQ9ZS5kYXRhKXx8XCIkIVwiPT09dHx8XCIkP1wiPT09dHx8XCIkflwiPT09dHx8XCImXCI9PT10fHxcIkYhXCI9PT10fHxcIkZcIj09PXQpYnJlYWs7aWYoXCIvJFwiPT09dHx8XCIvJlwiPT09dClyZXR1cm4gbnVsbH19cmV0dXJuIGV9dmFyIGNQPW51bGw7ZnVuY3Rpb24gY0koZSl7ZT1lLm5leHRTaWJsaW5nO2Zvcih2YXIgdD0wO2U7KXtpZig4PT09ZS5ub2RlVHlwZSl7dmFyIG49ZS5kYXRhO2lmKFwiLyRcIj09PW58fFwiLyZcIj09PW4pe2lmKDA9PT10KXJldHVybiBjQihlLm5leHRTaWJsaW5nKTt0LS19ZWxzZVwiJFwiIT09biYmXCIkIVwiIT09biYmXCIkP1wiIT09biYmXCIkflwiIT09biYmXCImXCIhPT1ufHx0Kyt9ZT1lLm5leHRTaWJsaW5nfXJldHVybiBudWxsfWZ1bmN0aW9uIGNUKGUpe2U9ZS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciB0PTA7ZTspe2lmKDg9PT1lLm5vZGVUeXBlKXt2YXIgbj1lLmRhdGE7aWYoXCIkXCI9PT1ufHxcIiQhXCI9PT1ufHxcIiQ/XCI9PT1ufHxcIiR+XCI9PT1ufHxcIiZcIj09PW4pe2lmKDA9PT10KXJldHVybiBlO3QtLX1lbHNlXCIvJFwiIT09biYmXCIvJlwiIT09bnx8dCsrfWU9ZS5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9ZnVuY3Rpb24gY3ooZSx0LG4pe3N3aXRjaCh0PWNwKG4pLGUpe2Nhc2VcImh0bWxcIjppZighKGU9dC5kb2N1bWVudEVsZW1lbnQpKXRocm93IEVycm9yKGwoNDUyKSk7cmV0dXJuIGU7Y2FzZVwiaGVhZFwiOmlmKCEoZT10LmhlYWQpKXRocm93IEVycm9yKGwoNDUzKSk7cmV0dXJuIGU7Y2FzZVwiYm9keVwiOmlmKCEoZT10LmJvZHkpKXRocm93IEVycm9yKGwoNDU0KSk7cmV0dXJuIGU7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDQ1MSkpfX1mdW5jdGlvbiBjRChlKXtmb3IodmFyIHQ9ZS5hdHRyaWJ1dGVzO3QubGVuZ3RoOyllLnJlbW92ZUF0dHJpYnV0ZU5vZGUodFswXSk7ZXEoZSl9dmFyIGNMPW5ldyBNYXAsY049bmV3IFNldDtmdW5jdGlvbiBjUihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmdldFJvb3ROb2RlP2UuZ2V0Um9vdE5vZGUoKTo5PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudH12YXIgY009VC5kO1QuZD17ZjpmdW5jdGlvbigpe3ZhciBlPWNNLmYoKSx0PXNjKCk7cmV0dXJuIGV8fHR9LHI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVYoZSk7bnVsbCE9PXQmJjU9PT10LnRhZyYmXCJmb3JtXCI9PT10LnR5cGU/YVEodCk6Y00ucihlKX0sRDpmdW5jdGlvbihlKXtjTS5EKGUpLGNVKFwiZG5zLXByZWZldGNoXCIsZSxudWxsKX0sQzpmdW5jdGlvbihlLHQpe2NNLkMoZSx0KSxjVShcInByZWNvbm5lY3RcIixlLHQpfSxMOmZ1bmN0aW9uKGUsdCxuKXtpZihjTS5MKGUsdCxuKSxjWiYmZSYmdCl7dmFyIHI9J2xpbmtbcmVsPVwicHJlbG9hZFwiXVthcz1cIicrdHQodCkrJ1wiXSc7XCJpbWFnZVwiPT09dCYmbiYmbi5pbWFnZVNyY1NldD8ocis9J1tpbWFnZXNyY3NldD1cIicrdHQobi5pbWFnZVNyY1NldCkrJ1wiXScsXCJzdHJpbmdcIj09dHlwZW9mIG4uaW1hZ2VTaXplcyYmKHIrPSdbaW1hZ2VzaXplcz1cIicrdHQobi5pbWFnZVNpemVzKSsnXCJdJykpOnIrPSdbaHJlZj1cIicrdHQoZSkrJ1wiXSc7dmFyIG89cjtzd2l0Y2godCl7Y2FzZVwic3R5bGVcIjpvPWNxKGUpO2JyZWFrO2Nhc2VcInNjcmlwdFwiOm89YyQoZSl9Y0wuaGFzKG8pfHwoZT1mKHtyZWw6XCJwcmVsb2FkXCIsaHJlZjpcImltYWdlXCI9PT10JiZuJiZuLmltYWdlU3JjU2V0P3ZvaWQgMDplLGFzOnR9LG4pLGNMLnNldChvLGUpLG51bGwhPT1jWi5xdWVyeVNlbGVjdG9yKHIpfHxcInN0eWxlXCI9PT10JiZjWi5xdWVyeVNlbGVjdG9yKGNIKG8pKXx8XCJzY3JpcHRcIj09PXQmJmNaLnF1ZXJ5U2VsZWN0b3IoY1cobykpfHwoY3UodD1jWi5jcmVhdGVFbGVtZW50KFwibGlua1wiKSxcImxpbmtcIixlKSxlWSh0KSxjWi5oZWFkLmFwcGVuZENoaWxkKHQpKSl9fSxtOmZ1bmN0aW9uKGUsdCl7aWYoY00ubShlLHQpLGNaJiZlKXt2YXIgbj10JiZcInN0cmluZ1wiPT10eXBlb2YgdC5hcz90LmFzOlwic2NyaXB0XCIscj0nbGlua1tyZWw9XCJtb2R1bGVwcmVsb2FkXCJdW2FzPVwiJyt0dChuKSsnXCJdW2hyZWY9XCInK3R0KGUpKydcIl0nLG89cjtzd2l0Y2gobil7Y2FzZVwiYXVkaW93b3JrbGV0XCI6Y2FzZVwicGFpbnR3b3JrbGV0XCI6Y2FzZVwic2VydmljZXdvcmtlclwiOmNhc2VcInNoYXJlZHdvcmtlclwiOmNhc2VcIndvcmtlclwiOmNhc2VcInNjcmlwdFwiOm89YyQoZSl9aWYoIWNMLmhhcyhvKSYmKGU9Zih7cmVsOlwibW9kdWxlcHJlbG9hZFwiLGhyZWY6ZX0sdCksY0wuc2V0KG8sZSksbnVsbD09PWNaLnF1ZXJ5U2VsZWN0b3IocikpKXtzd2l0Y2gobil7Y2FzZVwiYXVkaW93b3JrbGV0XCI6Y2FzZVwicGFpbnR3b3JrbGV0XCI6Y2FzZVwic2VydmljZXdvcmtlclwiOmNhc2VcInNoYXJlZHdvcmtlclwiOmNhc2VcIndvcmtlclwiOmNhc2VcInNjcmlwdFwiOmlmKGNaLnF1ZXJ5U2VsZWN0b3IoY1cobykpKXJldHVybn1jdShuPWNaLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLFwibGlua1wiLGUpLGVZKG4pLGNaLmhlYWQuYXBwZW5kQ2hpbGQobil9fX0sWDpmdW5jdGlvbihlLHQpe2lmKGNNLlgoZSx0KSxjWiYmZSl7dmFyIG49ZVcoY1opLmhvaXN0YWJsZVNjcmlwdHMscj1jJChlKSxvPW4uZ2V0KHIpO298fCgobz1jWi5xdWVyeVNlbGVjdG9yKGNXKHIpKSl8fChlPWYoe3NyYzplLGFzeW5jOiEwfSx0KSwodD1jTC5nZXQocikpJiZjRyhlLHQpLGVZKG89Y1ouY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSksY3UobyxcImxpbmtcIixlKSxjWi5oZWFkLmFwcGVuZENoaWxkKG8pKSxvPXt0eXBlOlwic2NyaXB0XCIsaW5zdGFuY2U6byxjb3VudDoxLHN0YXRlOm51bGx9LG4uc2V0KHIsbykpfX0sUzpmdW5jdGlvbihlLHQsbil7aWYoY00uUyhlLHQsbiksY1omJmUpe3ZhciByPWVXKGNaKS5ob2lzdGFibGVTdHlsZXMsbz1jcShlKTt0PXR8fFwiZGVmYXVsdFwiO3ZhciBhPXIuZ2V0KG8pO2lmKCFhKXt2YXIgaT17bG9hZGluZzowLHByZWxvYWQ6bnVsbH07aWYoYT1jWi5xdWVyeVNlbGVjdG9yKGNIKG8pKSlpLmxvYWRpbmc9NTtlbHNle2U9Zih7cmVsOlwic3R5bGVzaGVldFwiLGhyZWY6ZSxcImRhdGEtcHJlY2VkZW5jZVwiOnR9LG4pLChuPWNMLmdldChvKSkmJmNYKGUsbik7dmFyIGw9YT1jWi5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtlWShsKSxjdShsLFwibGlua1wiLGUpLGwuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtsLm9ubG9hZD1lLGwub25lcnJvcj10fSksbC5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGZ1bmN0aW9uKCl7aS5sb2FkaW5nfD0xfSksbC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixmdW5jdGlvbigpe2kubG9hZGluZ3w9Mn0pLGkubG9hZGluZ3w9NCxjSyhhLHQsY1opfWE9e3R5cGU6XCJzdHlsZXNoZWV0XCIsaW5zdGFuY2U6YSxjb3VudDoxLHN0YXRlOml9LHIuc2V0KG8sYSl9fX0sTTpmdW5jdGlvbihlLHQpe2lmKGNNLk0oZSx0KSxjWiYmZSl7dmFyIG49ZVcoY1opLmhvaXN0YWJsZVNjcmlwdHMscj1jJChlKSxvPW4uZ2V0KHIpO298fCgobz1jWi5xdWVyeVNlbGVjdG9yKGNXKHIpKSl8fChlPWYoe3NyYzplLGFzeW5jOiEwLHR5cGU6XCJtb2R1bGVcIn0sdCksKHQ9Y0wuZ2V0KHIpKSYmY0coZSx0KSxlWShvPWNaLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpLGN1KG8sXCJsaW5rXCIsZSksY1ouaGVhZC5hcHBlbmRDaGlsZChvKSksbz17dHlwZTpcInNjcmlwdFwiLGluc3RhbmNlOm8sY291bnQ6MSxzdGF0ZTpudWxsfSxuLnNldChyLG8pKX19fTt2YXIgY1o9XCJ1bmRlZmluZWRcIj09dHlwZW9mIGRvY3VtZW50P251bGw6ZG9jdW1lbnQ7ZnVuY3Rpb24gY1UoZSx0LG4pe2lmKGNaJiZcInN0cmluZ1wiPT10eXBlb2YgdCYmdCl7dmFyIHI9dHQodCk7cj0nbGlua1tyZWw9XCInK2UrJ1wiXVtocmVmPVwiJytyKydcIl0nLFwic3RyaW5nXCI9PXR5cGVvZiBuJiYocis9J1tjcm9zc29yaWdpbj1cIicrbisnXCJdJyksY04uaGFzKHIpfHwoY04uYWRkKHIpLGU9e3JlbDplLGNyb3NzT3JpZ2luOm4saHJlZjp0fSxudWxsPT09Y1oucXVlcnlTZWxlY3RvcihyKSYmKGN1KHQ9Y1ouY3JlYXRlRWxlbWVudChcImxpbmtcIiksXCJsaW5rXCIsZSksZVkodCksY1ouaGVhZC5hcHBlbmRDaGlsZCh0KSkpfX1mdW5jdGlvbiBjRihlLHQsbixyKXt2YXIgbz0obz1GLmN1cnJlbnQpP2NSKG8pOm51bGw7aWYoIW8pdGhyb3cgRXJyb3IobCg0NDYpKTtzd2l0Y2goZSl7Y2FzZVwibWV0YVwiOmNhc2VcInRpdGxlXCI6cmV0dXJuIG51bGw7Y2FzZVwic3R5bGVcIjpyZXR1cm5cInN0cmluZ1wiPT10eXBlb2Ygbi5wcmVjZWRlbmNlJiZcInN0cmluZ1wiPT10eXBlb2Ygbi5ocmVmPyh0PWNxKG4uaHJlZiksKHI9KG49ZVcobykuaG9pc3RhYmxlU3R5bGVzKS5nZXQodCkpfHwocj17dHlwZTpcInN0eWxlXCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOm51bGx9LG4uc2V0KHQscikpLHIpOnt0eXBlOlwidm9pZFwiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfTtjYXNlXCJsaW5rXCI6aWYoXCJzdHlsZXNoZWV0XCI9PT1uLnJlbCYmXCJzdHJpbmdcIj09dHlwZW9mIG4uaHJlZiYmXCJzdHJpbmdcIj09dHlwZW9mIG4ucHJlY2VkZW5jZSl7ZT1jcShuLmhyZWYpO3ZhciBhLGkscyxjLHU9ZVcobykuaG9pc3RhYmxlU3R5bGVzLGQ9dS5nZXQoZSk7aWYoZHx8KG89by5vd25lckRvY3VtZW50fHxvLGQ9e3R5cGU6XCJzdHlsZXNoZWV0XCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOntsb2FkaW5nOjAscHJlbG9hZDpudWxsfX0sdS5zZXQoZSxkKSwodT1vLnF1ZXJ5U2VsZWN0b3IoY0goZSkpKSYmIXUuX3AmJihkLmluc3RhbmNlPXUsZC5zdGF0ZS5sb2FkaW5nPTUpLGNMLmhhcyhlKXx8KG49e3JlbDpcInByZWxvYWRcIixhczpcInN0eWxlXCIsaHJlZjpuLmhyZWYsY3Jvc3NPcmlnaW46bi5jcm9zc09yaWdpbixpbnRlZ3JpdHk6bi5pbnRlZ3JpdHksbWVkaWE6bi5tZWRpYSxocmVmTGFuZzpuLmhyZWZMYW5nLHJlZmVycmVyUG9saWN5Om4ucmVmZXJyZXJQb2xpY3l9LGNMLnNldChlLG4pLHV8fChhPW8saT1lLHM9bixjPWQuc3RhdGUsYS5xdWVyeVNlbGVjdG9yKCdsaW5rW3JlbD1cInByZWxvYWRcIl1bYXM9XCJzdHlsZVwiXVsnK2krXCJdXCIpP2MubG9hZGluZz0xOihjLnByZWxvYWQ9aT1hLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLGkuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixmdW5jdGlvbigpe3JldHVybiBjLmxvYWRpbmd8PTF9KSxpLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLGZ1bmN0aW9uKCl7cmV0dXJuIGMubG9hZGluZ3w9Mn0pLGN1KGksXCJsaW5rXCIscyksZVkoaSksYS5oZWFkLmFwcGVuZENoaWxkKGkpKSkpKSx0JiZudWxsPT09cil0aHJvdyBFcnJvcihsKDUyOCxcIlwiKSk7cmV0dXJuIGR9aWYodCYmbnVsbCE9PXIpdGhyb3cgRXJyb3IobCg1MjksXCJcIikpO3JldHVybiBudWxsO2Nhc2VcInNjcmlwdFwiOnJldHVybiB0PW4uYXN5bmMsXCJzdHJpbmdcIj09dHlwZW9mKG49bi5zcmMpJiZ0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZcInN5bWJvbFwiIT10eXBlb2YgdD8odD1jJChuKSwocj0obj1lVyhvKS5ob2lzdGFibGVTY3JpcHRzKS5nZXQodCkpfHwocj17dHlwZTpcInNjcmlwdFwiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfSxuLnNldCh0LHIpKSxyKTp7dHlwZTpcInZvaWRcIixpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH07ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDQ0NCxlKSl9fWZ1bmN0aW9uIGNxKGUpe3JldHVybidocmVmPVwiJyt0dChlKSsnXCInfWZ1bmN0aW9uIGNIKGUpe3JldHVybidsaW5rW3JlbD1cInN0eWxlc2hlZXRcIl1bJytlK1wiXVwifWZ1bmN0aW9uIGNWKGUpe3JldHVybiBmKHt9LGUse1wiZGF0YS1wcmVjZWRlbmNlXCI6ZS5wcmVjZWRlbmNlLHByZWNlZGVuY2U6bnVsbH0pfWZ1bmN0aW9uIGMkKGUpe3JldHVybidbc3JjPVwiJyt0dChlKSsnXCJdJ31mdW5jdGlvbiBjVyhlKXtyZXR1cm5cInNjcmlwdFthc3luY11cIitlfWZ1bmN0aW9uIGNZKGUsdCxuKXtpZih0LmNvdW50KyssbnVsbD09PXQuaW5zdGFuY2Upc3dpdGNoKHQudHlwZSl7Y2FzZVwic3R5bGVcIjp2YXIgcj1lLnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlW2RhdGEtaHJlZn49XCInK3R0KG4uaHJlZikrJ1wiXScpO2lmKHIpcmV0dXJuIHQuaW5zdGFuY2U9cixlWShyKSxyO3ZhciBvPWYoe30sbix7XCJkYXRhLWhyZWZcIjpuLmhyZWYsXCJkYXRhLXByZWNlZGVuY2VcIjpuLnByZWNlZGVuY2UsaHJlZjpudWxsLHByZWNlZGVuY2U6bnVsbH0pO3JldHVybiBlWShyPShlLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSksY3UocixcInN0eWxlXCIsbyksY0socixuLnByZWNlZGVuY2UsZSksdC5pbnN0YW5jZT1yO2Nhc2VcInN0eWxlc2hlZXRcIjpvPWNxKG4uaHJlZik7dmFyIGE9ZS5xdWVyeVNlbGVjdG9yKGNIKG8pKTtpZihhKXJldHVybiB0LnN0YXRlLmxvYWRpbmd8PTQsdC5pbnN0YW5jZT1hLGVZKGEpLGE7cj1jVihuKSwobz1jTC5nZXQobykpJiZjWChyLG8pLGVZKGE9KGUub3duZXJEb2N1bWVudHx8ZSkuY3JlYXRlRWxlbWVudChcImxpbmtcIikpO3ZhciBpPWE7cmV0dXJuIGkuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtpLm9ubG9hZD1lLGkub25lcnJvcj10fSksY3UoYSxcImxpbmtcIixyKSx0LnN0YXRlLmxvYWRpbmd8PTQsY0soYSxuLnByZWNlZGVuY2UsZSksdC5pbnN0YW5jZT1hO2Nhc2VcInNjcmlwdFwiOmlmKGE9YyQobi5zcmMpLG89ZS5xdWVyeVNlbGVjdG9yKGNXKGEpKSlyZXR1cm4gdC5pbnN0YW5jZT1vLGVZKG8pLG87cmV0dXJuIHI9biwobz1jTC5nZXQoYSkpJiZjRyhyPWYoe30sbiksbyksZVkobz0oZT1lLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpLGN1KG8sXCJsaW5rXCIsciksZS5oZWFkLmFwcGVuZENoaWxkKG8pLHQuaW5zdGFuY2U9bztjYXNlXCJ2b2lkXCI6cmV0dXJuIG51bGw7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDQ0Myx0LnR5cGUpKX1yZXR1cm5cInN0eWxlc2hlZXRcIj09PXQudHlwZSYmMD09KDQmdC5zdGF0ZS5sb2FkaW5nKSYmKHI9dC5pbnN0YW5jZSx0LnN0YXRlLmxvYWRpbmd8PTQsY0socixuLnByZWNlZGVuY2UsZSkpLHQuaW5zdGFuY2V9ZnVuY3Rpb24gY0soZSx0LG4pe2Zvcih2YXIgcj1uLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbcmVsPVwic3R5bGVzaGVldFwiXVtkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV0nKSxvPXIubGVuZ3RoP3Jbci5sZW5ndGgtMV06bnVsbCxhPW8saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbD1yW2ldO2lmKGwuZGF0YXNldC5wcmVjZWRlbmNlPT09dClhPWw7ZWxzZSBpZihhIT09bylicmVha31hP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSxhLm5leHRTaWJsaW5nKToodD05PT09bi5ub2RlVHlwZT9uLmhlYWQ6bikuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX1mdW5jdGlvbiBjWChlLHQpe251bGw9PWUuY3Jvc3NPcmlnaW4mJihlLmNyb3NzT3JpZ2luPXQuY3Jvc3NPcmlnaW4pLG51bGw9PWUucmVmZXJyZXJQb2xpY3kmJihlLnJlZmVycmVyUG9saWN5PXQucmVmZXJyZXJQb2xpY3kpLG51bGw9PWUudGl0bGUmJihlLnRpdGxlPXQudGl0bGUpfWZ1bmN0aW9uIGNHKGUsdCl7bnVsbD09ZS5jcm9zc09yaWdpbiYmKGUuY3Jvc3NPcmlnaW49dC5jcm9zc09yaWdpbiksbnVsbD09ZS5yZWZlcnJlclBvbGljeSYmKGUucmVmZXJyZXJQb2xpY3k9dC5yZWZlcnJlclBvbGljeSksbnVsbD09ZS5pbnRlZ3JpdHkmJihlLmludGVncml0eT10LmludGVncml0eSl9dmFyIGNRPW51bGw7ZnVuY3Rpb24gY0ooZSx0LG4pe2lmKG51bGw9PT1jUSl7dmFyIHI9bmV3IE1hcCxvPWNRPW5ldyBNYXA7by5zZXQobixyKX1lbHNlKHI9KG89Y1EpLmdldChuKSl8fChyPW5ldyBNYXAsby5zZXQobixyKSk7aWYoci5oYXMoZSkpcmV0dXJuIHI7Zm9yKHIuc2V0KGUsbnVsbCksbj1uLmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIGE9bltvXTtpZighKGFbZUZdfHxhW2VEXXx8XCJsaW5rXCI9PT1lJiZcInN0eWxlc2hlZXRcIj09PWEuZ2V0QXR0cmlidXRlKFwicmVsXCIpKSYmXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIT09YS5uYW1lc3BhY2VVUkkpe3ZhciBpPWEuZ2V0QXR0cmlidXRlKHQpfHxcIlwiO2k9ZStpO3ZhciBsPXIuZ2V0KGkpO2w/bC5wdXNoKGEpOnIuc2V0KGksW2FdKX19cmV0dXJuIHJ9ZnVuY3Rpb24gYzAoZSx0LG4peyhlPWUub3duZXJEb2N1bWVudHx8ZSkuaGVhZC5pbnNlcnRCZWZvcmUobixcInRpdGxlXCI9PT10P2UucXVlcnlTZWxlY3RvcihcImhlYWQgPiB0aXRsZVwiKTpudWxsKX1mdW5jdGlvbiBjMShlKXtyZXR1cm5cInN0eWxlc2hlZXRcIiE9PWUudHlwZXx8MCE9KDMmZS5zdGF0ZS5sb2FkaW5nKX12YXIgYzI9bnVsbDtmdW5jdGlvbiBjNCgpe2lmKHRoaXMuY291bnQtLSwwPT09dGhpcy5jb3VudCl7aWYodGhpcy5zdHlsZXNoZWV0cyljMyh0aGlzLHRoaXMuc3R5bGVzaGVldHMpO2Vsc2UgaWYodGhpcy51bnN1c3BlbmQpe3ZhciBlPXRoaXMudW5zdXNwZW5kO3RoaXMudW5zdXNwZW5kPW51bGwsZSgpfX19dmFyIGM1PW51bGw7ZnVuY3Rpb24gYzMoZSx0KXtlLnN0eWxlc2hlZXRzPW51bGwsbnVsbCE9PWUudW5zdXNwZW5kJiYoZS5jb3VudCsrLGM1PW5ldyBNYXAsdC5mb3JFYWNoKGM2LGUpLGM1PW51bGwsYzQuY2FsbChlKSl9ZnVuY3Rpb24gYzYoZSx0KXtpZighKDQmdC5zdGF0ZS5sb2FkaW5nKSl7dmFyIG49YzUuZ2V0KGUpO2lmKG4pdmFyIHI9bi5nZXQobnVsbCk7ZWxzZXtuPW5ldyBNYXAsYzUuc2V0KGUsbik7Zm9yKHZhciBvPWUucXVlcnlTZWxlY3RvckFsbChcImxpbmtbZGF0YS1wcmVjZWRlbmNlXSxzdHlsZVtkYXRhLXByZWNlZGVuY2VdXCIpLGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGk9b1thXTsoXCJMSU5LXCI9PT1pLm5vZGVOYW1lfHxcIm5vdCBhbGxcIiE9PWkuZ2V0QXR0cmlidXRlKFwibWVkaWFcIikpJiYobi5zZXQoaS5kYXRhc2V0LnByZWNlZGVuY2UsaSkscj1pKX1yJiZuLnNldChudWxsLHIpfWk9KG89dC5pbnN0YW5jZSkuZ2V0QXR0cmlidXRlKFwiZGF0YS1wcmVjZWRlbmNlXCIpLChhPW4uZ2V0KGkpfHxyKT09PXImJm4uc2V0KG51bGwsbyksbi5zZXQoaSxvKSx0aGlzLmNvdW50Kysscj1jNC5iaW5kKHRoaXMpLG8uYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixyKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLHIpLGE/YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLGEubmV4dFNpYmxpbmcpOihlPTk9PT1lLm5vZGVUeXBlP2UuaGVhZDplKS5pbnNlcnRCZWZvcmUobyxlLmZpcnN0Q2hpbGQpLHQuc3RhdGUubG9hZGluZ3w9NH19dmFyIGM5PXskJHR5cGVvZjpBLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbCxfY3VycmVudFZhbHVlOnosX2N1cnJlbnRWYWx1ZTI6eixfdGhyZWFkQ291bnQ6MH07ZnVuY3Rpb24gYzgoZSx0LG4scixvLGEsaSxsLHMpe3RoaXMudGFnPTEsdGhpcy5jb250YWluZXJJbmZvPWUsdGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGwsdGhpcy50aW1lb3V0SGFuZGxlPS0xLHRoaXMuY2FsbGJhY2tOb2RlPXRoaXMubmV4dD10aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD10aGlzLmNhbmNlbFBlbmRpbmdDb21taXQ9bnVsbCx0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MCx0aGlzLmV4cGlyYXRpb25UaW1lcz1laygtMSksdGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLnNoZWxsU3VzcGVuZENvdW50ZXI9dGhpcy5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLndhcm1MYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MCx0aGlzLmVudGFuZ2xlbWVudHM9ZWsoMCksdGhpcy5oaWRkZW5VcGRhdGVzPWVrKG51bGwpLHRoaXMuaWRlbnRpZmllclByZWZpeD1yLHRoaXMub25VbmNhdWdodEVycm9yPW8sdGhpcy5vbkNhdWdodEVycm9yPWEsdGhpcy5vblJlY292ZXJhYmxlRXJyb3I9aSx0aGlzLnBvb2xlZENhY2hlPW51bGwsdGhpcy5wb29sZWRDYWNoZUxhbmVzPTAsdGhpcy5mb3JtU3RhdGU9cyx0aGlzLmluY29tcGxldGVUcmFuc2l0aW9ucz1uZXcgTWFwfWZ1bmN0aW9uIGM3KGUsdCxuLHIsbyxhKXtvPW8/bjg6bjgsbnVsbD09PXIuY29udGV4dD9yLmNvbnRleHQ9bzpyLnBlbmRpbmdDb250ZXh0PW8sKHI9b18odCkpLnBheWxvYWQ9e2VsZW1lbnQ6bn0sbnVsbCE9PShhPXZvaWQgMD09PWE/bnVsbDphKSYmKHIuY2FsbGJhY2s9YSksbnVsbCE9PShuPW9rKGUscix0KSkmJihzYShuLGUsdCksb0UobixlLHQpKX1mdW5jdGlvbiB1ZShlLHQpe2lmKG51bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpJiZudWxsIT09ZS5kZWh5ZHJhdGVkKXt2YXIgbj1lLnJldHJ5TGFuZTtlLnJldHJ5TGFuZT0wIT09biYmbjx0P246dH19ZnVuY3Rpb24gdXQoZSx0KXt1ZShlLHQpLChlPWUuYWx0ZXJuYXRlKSYmdWUoZSx0KX1mdW5jdGlvbiB1bihlKXtpZigxMz09PWUudGFnfHwzMT09PWUudGFnKXt2YXIgdD1uMyhlLDB4NDAwMDAwMCk7bnVsbCE9PXQmJnNhKHQsZSwweDQwMDAwMDApLHV0KGUsMHg0MDAwMDAwKX19ZnVuY3Rpb24gdXIoZSl7aWYoMTM9PT1lLnRhZ3x8MzE9PT1lLnRhZyl7dmFyIHQ9c3IoKSxuPW4zKGUsdD1lQih0KSk7bnVsbCE9PW4mJnNhKG4sZSx0KSx1dChlLHQpfX12YXIgdW89ITA7ZnVuY3Rpb24gdWEoZSx0LG4scil7dmFyIG89SS5UO0kuVD1udWxsO3ZhciBhPVQucDt0cnl7VC5wPTIsdWwoZSx0LG4scil9ZmluYWxseXtULnA9YSxJLlQ9b319ZnVuY3Rpb24gdWkoZSx0LG4scil7dmFyIG89SS5UO0kuVD1udWxsO3ZhciBhPVQucDt0cnl7VC5wPTgsdWwoZSx0LG4scil9ZmluYWxseXtULnA9YSxJLlQ9b319ZnVuY3Rpb24gdWwoZSx0LG4scil7aWYodW8pe3ZhciBvPXVzKHIpO2lmKG51bGw9PT1vKXM3KGUsdCxyLHVjLG4pLHVBKGUscik7ZWxzZSBpZihmdW5jdGlvbihlLHQsbixyLG8pe3N3aXRjaCh0KXtjYXNlXCJmb2N1c2luXCI6cmV0dXJuIHVwPXV4KHVwLGUsdCxuLHIsbyksITA7Y2FzZVwiZHJhZ2VudGVyXCI6cmV0dXJuIHVoPXV4KHVoLGUsdCxuLHIsbyksITA7Y2FzZVwibW91c2VvdmVyXCI6cmV0dXJuIHVtPXV4KHVtLGUsdCxuLHIsbyksITA7Y2FzZVwicG9pbnRlcm92ZXJcIjp2YXIgYT1vLnBvaW50ZXJJZDtyZXR1cm4gdWcuc2V0KGEsdXgodWcuZ2V0KGEpfHxudWxsLGUsdCxuLHIsbykpLCEwO2Nhc2VcImdvdHBvaW50ZXJjYXB0dXJlXCI6cmV0dXJuIGE9by5wb2ludGVySWQsdXkuc2V0KGEsdXgodXkuZ2V0KGEpfHxudWxsLGUsdCxuLHIsbykpLCEwfXJldHVybiExfShvLGUsdCxuLHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZih1QShlLHIpLDQmdCYmLTE8dWIuaW5kZXhPZihlKSl7Zm9yKDtudWxsIT09bzspe3ZhciBhPWVWKG8pO2lmKG51bGwhPT1hKXN3aXRjaChhLnRhZyl7Y2FzZSAzOmlmKChhPWEuc3RhdGVOb2RlKS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXt2YXIgaT1lQShhLnBlbmRpbmdMYW5lcyk7aWYoMCE9PWkpe3ZhciBsPWE7Zm9yKGwucGVuZGluZ0xhbmVzfD0yLGwuZW50YW5nbGVkTGFuZXN8PTI7aTspe3ZhciBzPTE8PDMxLWVtKGkpO2wuZW50YW5nbGVtZW50c1sxXXw9cyxpJj1+c31zcShhKSwwPT0oNiZsRCkmJihsMT1lcigpKzUwMCxzSCgwLCExKSl9fWJyZWFrO2Nhc2UgMzE6Y2FzZSAxMzpudWxsIT09KGw9bjMoYSwyKSkmJnNhKGwsYSwyKSxzYygpLHV0KGEsMil9aWYobnVsbD09PShhPXVzKHIpKSYmczcoZSx0LHIsdWMsbiksYT09PW8pYnJlYWs7bz1hfW51bGwhPT1vJiZyLnN0b3BQcm9wYWdhdGlvbigpfWVsc2UgczcoZSx0LHIsbnVsbCxuKX19ZnVuY3Rpb24gdXMoZSl7cmV0dXJuIHV1KGU9dHYoZSkpfXZhciB1Yz1udWxsO2Z1bmN0aW9uIHV1KGUpe2lmKHVjPW51bGwsbnVsbCE9PShlPWVIKGUpKSl7dmFyIHQ9cyhlKTtpZihudWxsPT09dCllPW51bGw7ZWxzZXt2YXIgbj10LnRhZztpZigxMz09PW4pe2lmKG51bGwhPT0oZT1jKHQpKSlyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZigzMT09PW4pe2lmKG51bGwhPT0oZT11KHQpKSlyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZigzPT09bil7aWYodC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClyZXR1cm4gMz09PXQudGFnP3Quc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtlPW51bGx9ZWxzZSB0IT09ZSYmKGU9bnVsbCl9fXJldHVybiB1Yz1lLG51bGx9ZnVuY3Rpb24gdWQoZSl7c3dpdGNoKGUpe2Nhc2VcImJlZm9yZXRvZ2dsZVwiOmNhc2VcImNhbmNlbFwiOmNhc2VcImNsaWNrXCI6Y2FzZVwiY2xvc2VcIjpjYXNlXCJjb250ZXh0bWVudVwiOmNhc2VcImNvcHlcIjpjYXNlXCJjdXRcIjpjYXNlXCJhdXhjbGlja1wiOmNhc2VcImRibGNsaWNrXCI6Y2FzZVwiZHJhZ2VuZFwiOmNhc2VcImRyYWdzdGFydFwiOmNhc2VcImRyb3BcIjpjYXNlXCJmb2N1c2luXCI6Y2FzZVwiZm9jdXNvdXRcIjpjYXNlXCJpbnB1dFwiOmNhc2VcImludmFsaWRcIjpjYXNlXCJrZXlkb3duXCI6Y2FzZVwia2V5cHJlc3NcIjpjYXNlXCJrZXl1cFwiOmNhc2VcIm1vdXNlZG93blwiOmNhc2VcIm1vdXNldXBcIjpjYXNlXCJwYXN0ZVwiOmNhc2VcInBhdXNlXCI6Y2FzZVwicGxheVwiOmNhc2VcInBvaW50ZXJjYW5jZWxcIjpjYXNlXCJwb2ludGVyZG93blwiOmNhc2VcInBvaW50ZXJ1cFwiOmNhc2VcInJhdGVjaGFuZ2VcIjpjYXNlXCJyZXNldFwiOmNhc2VcInJlc2l6ZVwiOmNhc2VcInNlZWtlZFwiOmNhc2VcInN1Ym1pdFwiOmNhc2VcInRvZ2dsZVwiOmNhc2VcInRvdWNoY2FuY2VsXCI6Y2FzZVwidG91Y2hlbmRcIjpjYXNlXCJ0b3VjaHN0YXJ0XCI6Y2FzZVwidm9sdW1lY2hhbmdlXCI6Y2FzZVwiY2hhbmdlXCI6Y2FzZVwic2VsZWN0aW9uY2hhbmdlXCI6Y2FzZVwidGV4dElucHV0XCI6Y2FzZVwiY29tcG9zaXRpb25zdGFydFwiOmNhc2VcImNvbXBvc2l0aW9uZW5kXCI6Y2FzZVwiY29tcG9zaXRpb251cGRhdGVcIjpjYXNlXCJiZWZvcmVibHVyXCI6Y2FzZVwiYWZ0ZXJibHVyXCI6Y2FzZVwiYmVmb3JlaW5wdXRcIjpjYXNlXCJibHVyXCI6Y2FzZVwiZnVsbHNjcmVlbmNoYW5nZVwiOmNhc2VcImZvY3VzXCI6Y2FzZVwiaGFzaGNoYW5nZVwiOmNhc2VcInBvcHN0YXRlXCI6Y2FzZVwic2VsZWN0XCI6Y2FzZVwic2VsZWN0c3RhcnRcIjpyZXR1cm4gMjtjYXNlXCJkcmFnXCI6Y2FzZVwiZHJhZ2VudGVyXCI6Y2FzZVwiZHJhZ2V4aXRcIjpjYXNlXCJkcmFnbGVhdmVcIjpjYXNlXCJkcmFnb3ZlclwiOmNhc2VcIm1vdXNlbW92ZVwiOmNhc2VcIm1vdXNlb3V0XCI6Y2FzZVwibW91c2VvdmVyXCI6Y2FzZVwicG9pbnRlcm1vdmVcIjpjYXNlXCJwb2ludGVyb3V0XCI6Y2FzZVwicG9pbnRlcm92ZXJcIjpjYXNlXCJzY3JvbGxcIjpjYXNlXCJ0b3VjaG1vdmVcIjpjYXNlXCJ3aGVlbFwiOmNhc2VcIm1vdXNlZW50ZXJcIjpjYXNlXCJtb3VzZWxlYXZlXCI6Y2FzZVwicG9pbnRlcmVudGVyXCI6Y2FzZVwicG9pbnRlcmxlYXZlXCI6cmV0dXJuIDg7Y2FzZVwibWVzc2FnZVwiOnN3aXRjaChlbygpKXtjYXNlIGVhOnJldHVybiAyO2Nhc2UgZWk6cmV0dXJuIDg7Y2FzZSBlbDpjYXNlIGVzOnJldHVybiAzMjtjYXNlIGVjOnJldHVybiAweDEwMDAwMDAwO2RlZmF1bHQ6cmV0dXJuIDMyfWRlZmF1bHQ6cmV0dXJuIDMyfX12YXIgdWY9ITEsdXA9bnVsbCx1aD1udWxsLHVtPW51bGwsdWc9bmV3IE1hcCx1eT1uZXcgTWFwLHV2PVtdLHViPVwibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0XCIuc3BsaXQoXCIgXCIpO2Z1bmN0aW9uIHVBKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImZvY3VzaW5cIjpjYXNlXCJmb2N1c291dFwiOnVwPW51bGw7YnJlYWs7Y2FzZVwiZHJhZ2VudGVyXCI6Y2FzZVwiZHJhZ2xlYXZlXCI6dWg9bnVsbDticmVhaztjYXNlXCJtb3VzZW92ZXJcIjpjYXNlXCJtb3VzZW91dFwiOnVtPW51bGw7YnJlYWs7Y2FzZVwicG9pbnRlcm92ZXJcIjpjYXNlXCJwb2ludGVyb3V0XCI6dWcuZGVsZXRlKHQucG9pbnRlcklkKTticmVhaztjYXNlXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2VcImxvc3Rwb2ludGVyY2FwdHVyZVwiOnV5LmRlbGV0ZSh0LnBvaW50ZXJJZCl9fWZ1bmN0aW9uIHV4KGUsdCxuLHIsbyxhKXtyZXR1cm4gbnVsbD09PWV8fGUubmF0aXZlRXZlbnQhPT1hPyhlPXtibG9ja2VkT246dCxkb21FdmVudE5hbWU6bixldmVudFN5c3RlbUZsYWdzOnIsbmF0aXZlRXZlbnQ6YSx0YXJnZXRDb250YWluZXJzOltvXX0sbnVsbCE9PXQmJm51bGwhPT0odD1lVih0KSkmJnVuKHQpKTooZS5ldmVudFN5c3RlbUZsYWdzfD1yLHQ9ZS50YXJnZXRDb250YWluZXJzLG51bGwhPT1vJiYtMT09PXQuaW5kZXhPZihvKSYmdC5wdXNoKG8pKSxlfWZ1bmN0aW9uIHV3KGUpe3ZhciB0PWVIKGUudGFyZ2V0KTtpZihudWxsIT09dCl7dmFyIG49cyh0KTtpZihudWxsIT09bil7aWYoMTM9PT0odD1uLnRhZykpe2lmKG51bGwhPT0odD1jKG4pKSl7ZS5ibG9ja2VkT249dCxlVChlLnByaW9yaXR5LGZ1bmN0aW9uKCl7dXIobil9KTtyZXR1cm59fWVsc2UgaWYoMzE9PT10KXtpZihudWxsIT09KHQ9dShuKSkpe2UuYmxvY2tlZE9uPXQsZVQoZS5wcmlvcml0eSxmdW5jdGlvbigpe3VyKG4pfSk7cmV0dXJufX1lbHNlIGlmKDM9PT10JiZuLnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXtlLmJsb2NrZWRPbj0zPT09bi50YWc/bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3JldHVybn19fWUuYmxvY2tlZE9uPW51bGx9ZnVuY3Rpb24gdUMoZSl7aWYobnVsbCE9PWUuYmxvY2tlZE9uKXJldHVybiExO2Zvcih2YXIgdD1lLnRhcmdldENvbnRhaW5lcnM7MDx0Lmxlbmd0aDspe3ZhciBuPXVzKGUubmF0aXZlRXZlbnQpO2lmKG51bGwhPT1uKXJldHVybiBudWxsIT09KHQ9ZVYobikpJiZ1bih0KSxlLmJsb2NrZWRPbj1uLCExO3ZhciByPW5ldyhuPWUubmF0aXZlRXZlbnQpLmNvbnN0cnVjdG9yKG4udHlwZSxuKTt0eT1yLG4udGFyZ2V0LmRpc3BhdGNoRXZlbnQociksdHk9bnVsbCx0LnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gdV8oZSx0LG4pe3VDKGUpJiZuLmRlbGV0ZSh0KX1mdW5jdGlvbiB1aygpe3VmPSExLG51bGwhPT11cCYmdUModXApJiYodXA9bnVsbCksbnVsbCE9PXVoJiZ1Qyh1aCkmJih1aD1udWxsKSxudWxsIT09dW0mJnVDKHVtKSYmKHVtPW51bGwpLHVnLmZvckVhY2godV8pLHV5LmZvckVhY2godV8pfWZ1bmN0aW9uIHVFKGUsdCl7ZS5ibG9ja2VkT249PT10JiYoZS5ibG9ja2VkT249bnVsbCx1Znx8KHVmPSEwLG8udW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhvLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LHVrKSkpfXZhciB1aj1udWxsO2Z1bmN0aW9uIHVTKGUpe3VqIT09ZSYmKHVqPWUsby51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKG8udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksZnVuY3Rpb24oKXt1aj09PWUmJih1aj1udWxsKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrPTMpe3ZhciBuPWVbdF0scj1lW3QrMV0sbz1lW3QrMl07aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgcilpZihudWxsPT09dXUocnx8bikpY29udGludWU7ZWxzZSBicmVhazt2YXIgYT1lVihuKTtudWxsIT09YSYmKGUuc3BsaWNlKHQsMyksdC09MyxhWChhLHtwZW5kaW5nOiEwLGRhdGE6byxtZXRob2Q6bi5tZXRob2QsYWN0aW9uOnJ9LHIsbykpfX0pKX1mdW5jdGlvbiB1TyhlKXtmdW5jdGlvbiB0KHQpe3JldHVybiB1RSh0LGUpfW51bGwhPT11cCYmdUUodXAsZSksbnVsbCE9PXVoJiZ1RSh1aCxlKSxudWxsIT09dW0mJnVFKHVtLGUpLHVnLmZvckVhY2godCksdXkuZm9yRWFjaCh0KTtmb3IodmFyIG49MDtuPHV2Lmxlbmd0aDtuKyspe3ZhciByPXV2W25dO3IuYmxvY2tlZE9uPT09ZSYmKHIuYmxvY2tlZE9uPW51bGwpfWZvcig7MDx1di5sZW5ndGgmJm51bGw9PT0obj11dlswXSkuYmxvY2tlZE9uOyl1dyhuKSxudWxsPT09bi5ibG9ja2VkT24mJnV2LnNoaWZ0KCk7aWYobnVsbCE9KG49KGUub3duZXJEb2N1bWVudHx8ZSkuJCRyZWFjdEZvcm1SZXBsYXkpKWZvcihyPTA7cjxuLmxlbmd0aDtyKz0zKXt2YXIgbz1uW3JdLGE9bltyKzFdLGk9b1tlTF18fG51bGw7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSlpfHx1UyhuKTtlbHNlIGlmKGkpe3ZhciBsPW51bGw7aWYoYSYmYS5oYXNBdHRyaWJ1dGUoXCJmb3JtQWN0aW9uXCIpKXtpZihvPWEsaT1hW2VMXXx8bnVsbClsPWkuZm9ybUFjdGlvbjtlbHNlIGlmKG51bGwhPT11dShvKSljb250aW51ZX1lbHNlIGw9aS5hY3Rpb247XCJmdW5jdGlvblwiPT10eXBlb2YgbD9uW3IrMV09bDoobi5zcGxpY2UociwzKSxyLT0zKSx1UyhuKX19fWZ1bmN0aW9uIHVCKCl7ZnVuY3Rpb24gZShlKXtlLmNhbkludGVyY2VwdCYmXCJyZWFjdC10cmFuc2l0aW9uXCI9PT1lLmluZm8mJmUuaW50ZXJjZXB0KHtoYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3JldHVybiBvPWV9KX0sZm9jdXNSZXNldDpcIm1hbnVhbFwiLHNjcm9sbDpcIm1hbnVhbFwifSl9ZnVuY3Rpb24gdCgpe251bGwhPT1vJiYobygpLG89bnVsbCkscnx8c2V0VGltZW91dChuLDIwKX1mdW5jdGlvbiBuKCl7aWYoIXImJiFuYXZpZ2F0aW9uLnRyYW5zaXRpb24pe3ZhciBlPW5hdmlnYXRpb24uY3VycmVudEVudHJ5O2UmJm51bGwhPWUudXJsJiZuYXZpZ2F0aW9uLm5hdmlnYXRlKGUudXJsLHtzdGF0ZTplLmdldFN0YXRlKCksaW5mbzpcInJlYWN0LXRyYW5zaXRpb25cIixoaXN0b3J5OlwicmVwbGFjZVwifSl9fWlmKFwib2JqZWN0XCI9PXR5cGVvZiBuYXZpZ2F0aW9uKXt2YXIgcj0hMSxvPW51bGw7cmV0dXJuIG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlXCIsZSksbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKFwibmF2aWdhdGVzdWNjZXNzXCIsdCksbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKFwibmF2aWdhdGVlcnJvclwiLHQpLHNldFRpbWVvdXQobiwxMDApLGZ1bmN0aW9uKCl7cj0hMCxuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJuYXZpZ2F0ZVwiLGUpLG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlc3VjY2Vzc1wiLHQpLG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlZXJyb3JcIix0KSxudWxsIT09byYmKG8oKSxvPW51bGwpfX19ZnVuY3Rpb24gdVAoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9ZnVuY3Rpb24gdUkoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9dUkucHJvdG90eXBlLnJlbmRlcj11UC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2ludGVybmFsUm9vdDtpZihudWxsPT09dCl0aHJvdyBFcnJvcihsKDQwOSkpO2M3KHQuY3VycmVudCxzcigpLGUsdCxudWxsLG51bGwpfSx1SS5wcm90b3R5cGUudW5tb3VudD11UC5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ludGVybmFsUm9vdDtpZihudWxsIT09ZSl7dGhpcy5faW50ZXJuYWxSb290PW51bGw7dmFyIHQ9ZS5jb250YWluZXJJbmZvO2M3KGUuY3VycmVudCwyLG51bGwsZSxudWxsLG51bGwpLHNjKCksdFtlTl09bnVsbH19LHVJLnByb3RvdHlwZS51bnN0YWJsZV9zY2hlZHVsZUh5ZHJhdGlvbj1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD1lSSgpO2U9e2Jsb2NrZWRPbjpudWxsLHRhcmdldDplLHByaW9yaXR5OnR9O2Zvcih2YXIgbj0wO248dXYubGVuZ3RoJiYwIT09dCYmdDx1dltuXS5wcmlvcml0eTtuKyspO3V2LnNwbGljZShuLDAsZSksMD09PW4mJnV3KGUpfX07dmFyIHVUPWEudmVyc2lvbjtpZihcIjE5LjIuMC1jYW5hcnktMGJkYjkyMDYtMjAyNTA4MThcIiE9PXVUKXRocm93IEVycm9yKGwoNTI3LHVULFwiMTkuMi4wLWNhbmFyeS0wYmRiOTIwNi0yMDI1MDgxOFwiKSk7aWYoVC5maW5kRE9NTm9kZT1mdW5jdGlvbihlKXt2YXIgdD1lLl9yZWFjdEludGVybmFscztpZih2b2lkIDA9PT10KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnJlbmRlcil0aHJvdyBFcnJvcihsKDE4OCkpO3Rocm93IEVycm9yKGwoMjY4LGU9T2JqZWN0LmtleXMoZSkuam9pbihcIixcIikpKX1yZXR1cm4gZT1udWxsPT09KGU9bnVsbCE9PShlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKCF0KXtpZihudWxsPT09KHQ9cyhlKSkpdGhyb3cgRXJyb3IobCgxODgpKTtyZXR1cm4gdCE9PWU/bnVsbDplfWZvcih2YXIgbj1lLHI9dDs7KXt2YXIgbz1uLnJldHVybjtpZihudWxsPT09bylicmVhazt2YXIgYT1vLmFsdGVybmF0ZTtpZihudWxsPT09YSl7aWYobnVsbCE9PShyPW8ucmV0dXJuKSl7bj1yO2NvbnRpbnVlfWJyZWFrfWlmKG8uY2hpbGQ9PT1hLmNoaWxkKXtmb3IoYT1vLmNoaWxkO2E7KXtpZihhPT09bilyZXR1cm4gZChvKSxlO2lmKGE9PT1yKXJldHVybiBkKG8pLHQ7YT1hLnNpYmxpbmd9dGhyb3cgRXJyb3IobCgxODgpKX1pZihuLnJldHVybiE9PXIucmV0dXJuKW49byxyPWE7ZWxzZXtmb3IodmFyIGk9ITEsYz1vLmNoaWxkO2M7KXtpZihjPT09bil7aT0hMCxuPW8scj1hO2JyZWFrfWlmKGM9PT1yKXtpPSEwLHI9byxuPWE7YnJlYWt9Yz1jLnNpYmxpbmd9aWYoIWkpe2ZvcihjPWEuY2hpbGQ7Yzspe2lmKGM9PT1uKXtpPSEwLG49YSxyPW87YnJlYWt9aWYoYz09PXIpe2k9ITAscj1hLG49bzticmVha31jPWMuc2libGluZ31pZighaSl0aHJvdyBFcnJvcihsKDE4OSkpfX1pZihuLmFsdGVybmF0ZSE9PXIpdGhyb3cgRXJyb3IobCgxOTApKX1pZigzIT09bi50YWcpdGhyb3cgRXJyb3IobCgxODgpKTtyZXR1cm4gbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/ZTp0fSh0KSk/ZnVuY3Rpb24gZSh0KXt2YXIgbj10LnRhZztpZig1PT09bnx8MjY9PT1ufHwyNz09PW58fDY9PT1uKXJldHVybiB0O2Zvcih0PXQuY2hpbGQ7bnVsbCE9PXQ7KXtpZihudWxsIT09KG49ZSh0KSkpcmV0dXJuIG47dD10LnNpYmxpbmd9cmV0dXJuIG51bGx9KGUpOm51bGwpP251bGw6ZS5zdGF0ZU5vZGV9LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pe3ZhciB1ej1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYoIXV6LmlzRGlzYWJsZWQmJnV6LnN1cHBvcnRzRmliZXIpdHJ5e2VmPXV6LmluamVjdCh7YnVuZGxlVHlwZTowLHZlcnNpb246XCIxOS4yLjAtY2FuYXJ5LTBiZGI5MjA2LTIwMjUwODE4XCIscmVuZGVyZXJQYWNrYWdlTmFtZTpcInJlYWN0LWRvbVwiLGN1cnJlbnREaXNwYXRjaGVyUmVmOkkscmVjb25jaWxlclZlcnNpb246XCIxOS4yLjAtY2FuYXJ5LTBiZGI5MjA2LTIwMjUwODE4XCJ9KSxlcD11en1jYXRjaChlKXt9fXQuY3JlYXRlUm9vdD1mdW5jdGlvbihlLHQpe2lmKCEobj1lKXx8MSE9PW4ubm9kZVR5cGUmJjkhPT1uLm5vZGVUeXBlJiYxMSE9PW4ubm9kZVR5cGUpdGhyb3cgRXJyb3IobCgyOTkpKTt2YXIgbixyLG8sYSxpLHMsYyx1LGQ9ITEsZj1cIlwiLHA9aXUsaD1pZCxtPWlwO3JldHVybiBudWxsIT10JiYoITA9PT10LnVuc3RhYmxlX3N0cmljdE1vZGUmJihkPSEwKSx2b2lkIDAhPT10LmlkZW50aWZpZXJQcmVmaXgmJihmPXQuaWRlbnRpZmllclByZWZpeCksdm9pZCAwIT09dC5vblVuY2F1Z2h0RXJyb3ImJihwPXQub25VbmNhdWdodEVycm9yKSx2b2lkIDAhPT10Lm9uQ2F1Z2h0RXJyb3ImJihoPXQub25DYXVnaHRFcnJvciksdm9pZCAwIT09dC5vblJlY292ZXJhYmxlRXJyb3ImJihtPXQub25SZWNvdmVyYWJsZUVycm9yKSkscj1lLG89MSxhPSExLGk9bnVsbCxzPTAsYz1kLHU9bnVsbCxyPW5ldyBjOChyLG8sYSxmLHAsaCxtLHVCLG51bGwpLG89MSwhMD09PWMmJihvfD0yNCksYz1yZSgzLG51bGwsbnVsbCxvKSxyLmN1cnJlbnQ9YyxjLnN0YXRlTm9kZT1yLG89cjEoKSxvLnJlZkNvdW50Kyssci5wb29sZWRDYWNoZT1vLG8ucmVmQ291bnQrKyxjLm1lbW9pemVkU3RhdGU9e2VsZW1lbnQ6bnVsbCxpc0RlaHlkcmF0ZWQ6YSxjYWNoZTpvfSxvdyhjKSx0PXIsZVtlTl09dC5jdXJyZW50LHM5KGUpLG5ldyB1UCh0KX19LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24uanNcIjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bihcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qc1wiKTtmdW5jdGlvbiBvKGUpe3ZhciB0PVwiaHR0cHM6Ly9yZWFjdC5kZXYvZXJyb3JzL1wiK2U7aWYoMTxhcmd1bWVudHMubGVuZ3RoKXt0Kz1cIj9hcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1sxXSk7Zm9yKHZhciBuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0Kz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tuXSl9cmV0dXJuXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrZStcIjsgdmlzaXQgXCIrdCtcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCJ9ZnVuY3Rpb24gYSgpe312YXIgaT17ZDp7ZjphLHI6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihvKDUyMikpfSxEOmEsQzphLEw6YSxtOmEsWDphLFM6YSxNOmF9LHA6MCxmaW5kRE9NTm9kZTpudWxsfSxsPVN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIikscz1yLl9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERTtmdW5jdGlvbiBjKGUsdCl7cmV0dXJuXCJmb250XCI9PT1lP1wiXCI6XCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJ1c2UtY3JlZGVudGlhbHNcIj09PXQ/dDpcIlwiOnZvaWQgMH10Ll9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERT1pLHQuY3JlYXRlUG9ydGFsPWZ1bmN0aW9uKGUsdCl7dmFyIG49Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoIXR8fDEhPT10Lm5vZGVUeXBlJiY5IT09dC5ub2RlVHlwZSYmMTEhPT10Lm5vZGVUeXBlKXRocm93IEVycm9yKG8oMjk5KSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6bCxrZXk6bnVsbD09cj9udWxsOlwiXCIrcixjaGlsZHJlbjplLGNvbnRhaW5lckluZm86dCxpbXBsZW1lbnRhdGlvbjpufX0oZSx0LG51bGwsbil9LHQuZmx1c2hTeW5jPWZ1bmN0aW9uKGUpe3ZhciB0PXMuVCxuPWkucDt0cnl7aWYocy5UPW51bGwsaS5wPTIsZSlyZXR1cm4gZSgpfWZpbmFsbHl7cy5UPXQsaS5wPW4saS5kLmYoKX19LHQucHJlY29ubmVjdD1mdW5jdGlvbihlLHQpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYodD10P1wic3RyaW5nXCI9PXR5cGVvZih0PXQuY3Jvc3NPcmlnaW4pP1widXNlLWNyZWRlbnRpYWxzXCI9PT10P3Q6XCJcIjp2b2lkIDA6bnVsbCxpLmQuQyhlLHQpKX0sdC5wcmVmZXRjaEROUz1mdW5jdGlvbihlKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmaS5kLkQoZSl9LHQucHJlaW5pdD1mdW5jdGlvbihlLHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZ0JiZcInN0cmluZ1wiPT10eXBlb2YgdC5hcyl7dmFyIG49dC5hcyxyPWMobix0LmNyb3NzT3JpZ2luKSxvPVwic3RyaW5nXCI9PXR5cGVvZiB0LmludGVncml0eT90LmludGVncml0eTp2b2lkIDAsYT1cInN0cmluZ1wiPT10eXBlb2YgdC5mZXRjaFByaW9yaXR5P3QuZmV0Y2hQcmlvcml0eTp2b2lkIDA7XCJzdHlsZVwiPT09bj9pLmQuUyhlLFwic3RyaW5nXCI9PXR5cGVvZiB0LnByZWNlZGVuY2U/dC5wcmVjZWRlbmNlOnZvaWQgMCx7Y3Jvc3NPcmlnaW46cixpbnRlZ3JpdHk6byxmZXRjaFByaW9yaXR5OmF9KTpcInNjcmlwdFwiPT09biYmaS5kLlgoZSx7Y3Jvc3NPcmlnaW46cixpbnRlZ3JpdHk6byxmZXRjaFByaW9yaXR5OmEsbm9uY2U6XCJzdHJpbmdcIj09dHlwZW9mIHQubm9uY2U/dC5ub25jZTp2b2lkIDB9KX19LHQucHJlaW5pdE1vZHVsZT1mdW5jdGlvbihlLHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKWlmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dCl7aWYobnVsbD09dC5hc3x8XCJzY3JpcHRcIj09PXQuYXMpe3ZhciBuPWModC5hcyx0LmNyb3NzT3JpZ2luKTtpLmQuTShlLHtjcm9zc09yaWdpbjpuLGludGVncml0eTpcInN0cmluZ1wiPT10eXBlb2YgdC5pbnRlZ3JpdHk/dC5pbnRlZ3JpdHk6dm9pZCAwLG5vbmNlOlwic3RyaW5nXCI9PXR5cGVvZiB0Lm5vbmNlP3Qubm9uY2U6dm9pZCAwfSl9fWVsc2UgbnVsbD09dCYmaS5kLk0oZSl9LHQucHJlbG9hZD1mdW5jdGlvbihlLHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZcIm9iamVjdFwiPT10eXBlb2YgdCYmbnVsbCE9PXQmJlwic3RyaW5nXCI9PXR5cGVvZiB0LmFzKXt2YXIgbj10LmFzLHI9YyhuLHQuY3Jvc3NPcmlnaW4pO2kuZC5MKGUsbix7Y3Jvc3NPcmlnaW46cixpbnRlZ3JpdHk6XCJzdHJpbmdcIj09dHlwZW9mIHQuaW50ZWdyaXR5P3QuaW50ZWdyaXR5OnZvaWQgMCxub25jZTpcInN0cmluZ1wiPT10eXBlb2YgdC5ub25jZT90Lm5vbmNlOnZvaWQgMCx0eXBlOlwic3RyaW5nXCI9PXR5cGVvZiB0LnR5cGU/dC50eXBlOnZvaWQgMCxmZXRjaFByaW9yaXR5Olwic3RyaW5nXCI9PXR5cGVvZiB0LmZldGNoUHJpb3JpdHk/dC5mZXRjaFByaW9yaXR5OnZvaWQgMCxyZWZlcnJlclBvbGljeTpcInN0cmluZ1wiPT10eXBlb2YgdC5yZWZlcnJlclBvbGljeT90LnJlZmVycmVyUG9saWN5OnZvaWQgMCxpbWFnZVNyY1NldDpcInN0cmluZ1wiPT10eXBlb2YgdC5pbWFnZVNyY1NldD90LmltYWdlU3JjU2V0OnZvaWQgMCxpbWFnZVNpemVzOlwic3RyaW5nXCI9PXR5cGVvZiB0LmltYWdlU2l6ZXM/dC5pbWFnZVNpemVzOnZvaWQgMCxtZWRpYTpcInN0cmluZ1wiPT10eXBlb2YgdC5tZWRpYT90Lm1lZGlhOnZvaWQgMH0pfX0sdC5wcmVsb2FkTW9kdWxlPWZ1bmN0aW9uKGUsdCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpaWYodCl7dmFyIG49Yyh0LmFzLHQuY3Jvc3NPcmlnaW4pO2kuZC5tKGUse2FzOlwic3RyaW5nXCI9PXR5cGVvZiB0LmFzJiZcInNjcmlwdFwiIT09dC5hcz90LmFzOnZvaWQgMCxjcm9zc09yaWdpbjpuLGludGVncml0eTpcInN0cmluZ1wiPT10eXBlb2YgdC5pbnRlZ3JpdHk/dC5pbnRlZ3JpdHk6dm9pZCAwfSl9ZWxzZSBpLmQubShlKX0sdC5yZXF1ZXN0Rm9ybVJlc2V0PWZ1bmN0aW9uKGUpe2kuZC5yKGUpfSx0LnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUodCl9LHQudXNlRm9ybVN0YXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcy5ILnVzZUZvcm1TdGF0ZShlLHQsbil9LHQudXNlRm9ybVN0YXR1cz1mdW5jdGlvbigpe3JldHVybiBzLkgudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMoKX0sdC52ZXJzaW9uPVwiMTkuMi4wLWNhbmFyeS0wYmRiOTIwNi0yMDI1MDgxOFwifSxcIi4vZGlzdC9jb21waWxlZC9yZWFjdC1kb20vY2xpZW50LmpzXCI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiOyFmdW5jdGlvbiBlKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyYmXCJmdW5jdGlvblwiPT10eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoZSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19KCksZS5leHBvcnRzPW4oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20tY2xpZW50LnByb2R1Y3Rpb24uanNcIil9LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9pbmRleC5qc1wiOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjshZnVuY3Rpb24gZSgpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18mJlwiZnVuY3Rpb25cIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSl0cnl7X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGUpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fSgpLGUuZXhwb3J0cz1uKFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24uanNcIil9LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC1jb21waWxlci1ydW50aW1lLnByb2R1Y3Rpb24uanNcIjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bihcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qc1wiKS5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU7dC5jPWZ1bmN0aW9uKGUpe3JldHVybiByLkgudXNlTWVtb0NhY2hlKGUpfX0sXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24uanNcIjpmdW5jdGlvbihlLHQpe1widXNlIHN0cmljdFwiO3ZhciBuPVN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKTtmdW5jdGlvbiByKGUsdCxyKXt2YXIgbz1udWxsO2lmKHZvaWQgMCE9PXImJihvPVwiXCIrciksdm9pZCAwIT09dC5rZXkmJihvPVwiXCIrdC5rZXkpLFwia2V5XCJpbiB0KWZvcih2YXIgYSBpbiByPXt9LHQpXCJrZXlcIiE9PWEmJihyW2FdPXRbYV0pO2Vsc2Ugcj10O3JldHVybnskJHR5cGVvZjpuLHR5cGU6ZSxrZXk6byxyZWY6dm9pZCAwIT09KHQ9ci5yZWYpP3Q6bnVsbCxwcm9wczpyfX10LkZyYWdtZW50PVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSx0LmpzeD1yLHQuanN4cz1yfSxcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9janMvcmVhY3QucHJvZHVjdGlvbi5qc1wiOmZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49U3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLHI9U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxvPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxhPVN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxpPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSxsPVN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxzPVN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLGM9U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLHU9U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLGQ9U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksZj1TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSxwPVN5bWJvbC5pdGVyYXRvcixoPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxtPU9iamVjdC5hc3NpZ24sZz17fTtmdW5jdGlvbiB5KGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPWcsdGhpcy51cGRhdGVyPW58fGh9ZnVuY3Rpb24gdigpe31mdW5jdGlvbiBiKGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPWcsdGhpcy51cGRhdGVyPW58fGh9eS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSx5LnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT1lKXRocm93IEVycm9yKFwidGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCIpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsXCJzZXRTdGF0ZVwiKX0seS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLGUsXCJmb3JjZVVwZGF0ZVwiKX0sdi5wcm90b3R5cGU9eS5wcm90b3R5cGU7dmFyIEE9Yi5wcm90b3R5cGU9bmV3IHY7QS5jb25zdHJ1Y3Rvcj1iLG0oQSx5LnByb3RvdHlwZSksQS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgeD1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHcoKXt9dmFyIEM9e0g6bnVsbCxBOm51bGwsVDpudWxsLFM6bnVsbH0sXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGsoZSx0LHIpe3ZhciBvPXIucmVmO3JldHVybnskJHR5cGVvZjpuLHR5cGU6ZSxrZXk6dCxyZWY6dm9pZCAwIT09bz9vOm51bGwscHJvcHM6cn19ZnVuY3Rpb24gRShlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1ufXZhciBqPS9cXC8rL2c7ZnVuY3Rpb24gUyhlLHQpe3ZhciBuLHI7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT1lLmtleT8obj1cIlwiK2Uua2V5LHI9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9LFwiJFwiK24ucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGUpe3JldHVybiByW2VdfSkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIE8oZSx0LG8pe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIGE9W10saT0wO3JldHVybiFmdW5jdGlvbiBlKHQsbyxhLGksbCl7dmFyIHMsYyx1LGQ9dHlwZW9mIHQ7KFwidW5kZWZpbmVkXCI9PT1kfHxcImJvb2xlYW5cIj09PWQpJiYodD1udWxsKTt2YXIgaD0hMTtpZihudWxsPT09dCloPSEwO2Vsc2Ugc3dpdGNoKGQpe2Nhc2VcImJpZ2ludFwiOmNhc2VcInN0cmluZ1wiOmNhc2VcIm51bWJlclwiOmg9ITA7YnJlYWs7Y2FzZVwib2JqZWN0XCI6c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgbjpjYXNlIHI6aD0hMDticmVhaztjYXNlIGY6cmV0dXJuIGUoKGg9dC5faW5pdCkodC5fcGF5bG9hZCksbyxhLGksbCl9fWlmKGgpcmV0dXJuIGw9bCh0KSxoPVwiXCI9PT1pP1wiLlwiK1ModCwwKTppLHgobCk/KGE9XCJcIixudWxsIT1oJiYoYT1oLnJlcGxhY2UoaixcIiQmL1wiKStcIi9cIiksZShsLG8sYSxcIlwiLGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpOm51bGwhPWwmJihFKGwpJiYocz1sLGM9YSsobnVsbD09bC5rZXl8fHQmJnQua2V5PT09bC5rZXk/XCJcIjooXCJcIitsLmtleSkucmVwbGFjZShqLFwiJCYvXCIpK1wiL1wiKStoLGw9ayhzLnR5cGUsYyxzLnByb3BzKSksby5wdXNoKGwpKSwxO2g9MDt2YXIgbT1cIlwiPT09aT9cIi5cIjppK1wiOlwiO2lmKHgodCkpZm9yKHZhciBnPTA7Zzx0Lmxlbmd0aDtnKyspZD1tK1MoaT10W2ddLGcpLGgrPWUoaSxvLGEsZCxsKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mKGc9bnVsbD09PSh1PXQpfHxcIm9iamVjdFwiIT10eXBlb2YgdT9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mKHU9cCYmdVtwXXx8dVtcIkBAaXRlcmF0b3JcIl0pP3U6bnVsbCkpZm9yKHQ9Zy5jYWxsKHQpLGc9MDshKGk9dC5uZXh0KCkpLmRvbmU7KWQ9bStTKGk9aS52YWx1ZSxnKyspLGgrPWUoaSxvLGEsZCxsKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1kKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRoZW4pcmV0dXJuIGUoZnVuY3Rpb24oZSl7c3dpdGNoKGUuc3RhdHVzKXtjYXNlXCJmdWxmaWxsZWRcIjpyZXR1cm4gZS52YWx1ZTtjYXNlXCJyZWplY3RlZFwiOnRocm93IGUucmVhc29uO2RlZmF1bHQ6c3dpdGNoKFwic3RyaW5nXCI9PXR5cGVvZiBlLnN0YXR1cz9lLnRoZW4odyx3KTooZS5zdGF0dXM9XCJwZW5kaW5nXCIsZS50aGVuKGZ1bmN0aW9uKHQpe1wicGVuZGluZ1wiPT09ZS5zdGF0dXMmJihlLnN0YXR1cz1cImZ1bGZpbGxlZFwiLGUudmFsdWU9dCl9LGZ1bmN0aW9uKHQpe1wicGVuZGluZ1wiPT09ZS5zdGF0dXMmJihlLnN0YXR1cz1cInJlamVjdGVkXCIsZS5yZWFzb249dCl9KSksZS5zdGF0dXMpe2Nhc2VcImZ1bGZpbGxlZFwiOnJldHVybiBlLnZhbHVlO2Nhc2VcInJlamVjdGVkXCI6dGhyb3cgZS5yZWFzb259fXRocm93IGV9KHQpLG8sYSxpLGwpO3Rocm93IEVycm9yKFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIisoXCJbb2JqZWN0IE9iamVjdF1cIj09PShvPVN0cmluZyh0KSk/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyh0KS5qb2luKFwiLCBcIikrXCJ9XCI6bykrXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIpfXJldHVybiBofShlLGEsXCJcIixcIlwiLGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwobyxlLGkrKyl9KSxhfWZ1bmN0aW9uIEIoZSl7aWYoLTE9PT1lLl9zdGF0dXMpe3ZhciB0PWUuX3Jlc3VsdDsodD10KCkpLnRoZW4oZnVuY3Rpb24odCl7KDA9PT1lLl9zdGF0dXN8fC0xPT09ZS5fc3RhdHVzKSYmKGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD10KX0sZnVuY3Rpb24odCl7KDA9PT1lLl9zdGF0dXN8fC0xPT09ZS5fc3RhdHVzKSYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD10KX0pLC0xPT09ZS5fc3RhdHVzJiYoZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQpfWlmKDE9PT1lLl9zdGF0dXMpcmV0dXJuIGUuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgUD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXBvcnRFcnJvcj9yZXBvcnRFcnJvcjpmdW5jdGlvbihlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuRXJyb3JFdmVudCl7dmFyIHQ9bmV3IHdpbmRvdy5FcnJvckV2ZW50KFwiZXJyb3JcIix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLG1lc3NhZ2U6XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZcInN0cmluZ1wiPT10eXBlb2YgZS5tZXNzYWdlP1N0cmluZyhlLm1lc3NhZ2UpOlN0cmluZyhlKSxlcnJvcjplfSk7aWYoIXdpbmRvdy5kaXNwYXRjaEV2ZW50KHQpKXJldHVybn1lbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwcm9jZXNzLmVtaXQpcmV0dXJuIHZvaWQgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25cIixlKTtjb25zb2xlLmVycm9yKGUpfTt0LkNoaWxkcmVuPXttYXA6Tyxmb3JFYWNoOmZ1bmN0aW9uKGUsdCxuKXtPKGUsZnVuY3Rpb24oKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sbil9LGNvdW50OmZ1bmN0aW9uKGUpe3ZhciB0PTA7cmV0dXJuIE8oZSxmdW5jdGlvbigpe3QrK30pLHR9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIE8oZSxmdW5jdGlvbihlKXtyZXR1cm4gZX0pfHxbXX0sb25seTpmdW5jdGlvbihlKXtpZighRShlKSl0aHJvdyBFcnJvcihcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiKTtyZXR1cm4gZX19LHQuQ29tcG9uZW50PXksdC5GcmFnbWVudD1vLHQuUHJvZmlsZXI9aSx0LlB1cmVDb21wb25lbnQ9Yix0LlN0cmljdE1vZGU9YSx0LlN1c3BlbnNlPXUsdC5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU9Qyx0Ll9fQ09NUElMRVJfUlVOVElNRT17X19wcm90b19fOm51bGwsYzpmdW5jdGlvbihlKXtyZXR1cm4gQy5ILnVzZU1lbW9DYWNoZShlKX19LHQuY2FjaGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkobnVsbCxhcmd1bWVudHMpfX0sdC5jYWNoZVNpZ25hbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0LmNsb25lRWxlbWVudD1mdW5jdGlvbihlLHQsbil7aWYobnVsbD09ZSl0aHJvdyBFcnJvcihcIlRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIrZStcIi5cIik7dmFyIHI9bSh7fSxlLnByb3BzKSxvPWUua2V5O2lmKG51bGwhPXQpZm9yKGEgaW4gdm9pZCAwIT09dC5rZXkmJihvPVwiXCIrdC5rZXkpLHQpXy5jYWxsKHQsYSkmJlwia2V5XCIhPT1hJiZcIl9fc2VsZlwiIT09YSYmXCJfX3NvdXJjZVwiIT09YSYmKFwicmVmXCIhPT1hfHx2b2lkIDAhPT10LnJlZikmJihyW2FdPXRbYV0pO3ZhciBhPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09YSlyLmNoaWxkcmVuPW47ZWxzZSBpZigxPGEpe2Zvcih2YXIgaT1BcnJheShhKSxsPTA7bDxhO2wrKylpW2xdPWFyZ3VtZW50c1tsKzJdO3IuY2hpbGRyZW49aX1yZXR1cm4gayhlLnR5cGUsbyxyKX0sdC5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybihlPXskJHR5cGVvZjpzLF9jdXJyZW50VmFsdWU6ZSxfY3VycmVudFZhbHVlMjplLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbH0pLlByb3ZpZGVyPWUsZS5Db25zdW1lcj17JCR0eXBlb2Y6bCxfY29udGV4dDplfSxlfSx0LmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG89e30sYT1udWxsO2lmKG51bGwhPXQpZm9yKHIgaW4gdm9pZCAwIT09dC5rZXkmJihhPVwiXCIrdC5rZXkpLHQpXy5jYWxsKHQscikmJlwia2V5XCIhPT1yJiZcIl9fc2VsZlwiIT09ciYmXCJfX3NvdXJjZVwiIT09ciYmKG9bcl09dFtyXSk7dmFyIGk9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1pKW8uY2hpbGRyZW49bjtlbHNlIGlmKDE8aSl7Zm9yKHZhciBsPUFycmF5KGkpLHM9MDtzPGk7cysrKWxbc109YXJndW1lbnRzW3MrMl07by5jaGlsZHJlbj1sfWlmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihyIGluIGk9ZS5kZWZhdWx0UHJvcHMpdm9pZCAwPT09b1tyXSYmKG9bcl09aVtyXSk7cmV0dXJuIGsoZSxhLG8pfSx0LmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fSx0LmZvcndhcmRSZWY9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOmMscmVuZGVyOmV9fSx0LmlzVmFsaWRFbGVtZW50PUUsdC5sYXp5PWZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpmLF9wYXlsb2FkOntfc3RhdHVzOi0xLF9yZXN1bHQ6ZX0sX2luaXQ6Qn19LHQubWVtbz1mdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjpkLHR5cGU6ZSxjb21wYXJlOnZvaWQgMD09PXQ/bnVsbDp0fX0sdC5zdGFydFRyYW5zaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9Qy5ULG49e307Qy5UPW47dHJ5e3ZhciByPWUoKSxvPUMuUztudWxsIT09byYmbyhuLHIpLFwib2JqZWN0XCI9PXR5cGVvZiByJiZudWxsIT09ciYmXCJmdW5jdGlvblwiPT10eXBlb2Ygci50aGVuJiZyLnRoZW4odyxQKX1jYXRjaChlKXtQKGUpfWZpbmFsbHl7bnVsbCE9PXQmJm51bGwhPT1uLnR5cGVzJiYodC50eXBlcz1uLnR5cGVzKSxDLlQ9dH19LHQudW5zdGFibGVfdXNlQ2FjaGVSZWZyZXNoPWZ1bmN0aW9uKCl7cmV0dXJuIEMuSC51c2VDYWNoZVJlZnJlc2goKX0sdC51c2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEMuSC51c2UoZSl9LHQudXNlQWN0aW9uU3RhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBDLkgudXNlQWN0aW9uU3RhdGUoZSx0LG4pfSx0LnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEMuSC51c2VDYWxsYmFjayhlLHQpfSx0LnVzZUNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEMuSC51c2VDb250ZXh0KGUpfSx0LnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9LHQudXNlRGVmZXJyZWRWYWx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiBDLkgudXNlRGVmZXJyZWRWYWx1ZShlLHQpfSx0LnVzZUVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBDLkgudXNlRWZmZWN0KGUsdCl9LHQudXNlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gQy5ILnVzZUlkKCl9LHQudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEMuSC51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxuKX0sdC51c2VJbnNlcnRpb25FZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQy5ILnVzZUluc2VydGlvbkVmZmVjdChlLHQpfSx0LnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBDLkgudXNlTGF5b3V0RWZmZWN0KGUsdCl9LHQudXNlTWVtbz1mdW5jdGlvbihlLHQpe3JldHVybiBDLkgudXNlTWVtbyhlLHQpfSx0LnVzZU9wdGltaXN0aWM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQy5ILnVzZU9wdGltaXN0aWMoZSx0KX0sdC51c2VSZWR1Y2VyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQy5ILnVzZVJlZHVjZXIoZSx0LG4pfSx0LnVzZVJlZj1mdW5jdGlvbihlKXtyZXR1cm4gQy5ILnVzZVJlZihlKX0sdC51c2VTdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gQy5ILnVzZVN0YXRlKGUpfSx0LnVzZVN5bmNFeHRlcm5hbFN0b3JlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQy5ILnVzZVN5bmNFeHRlcm5hbFN0b3JlKGUsdCxuKX0sdC51c2VUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIEMuSC51c2VUcmFuc2l0aW9uKCl9LHQudmVyc2lvbj1cIjE5LjIuMC1jYW5hcnktMGJkYjkyMDYtMjAyNTA4MThcIn0sXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvY29tcGlsZXItcnVudGltZS5qc1wiOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9bihcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9janMvcmVhY3QtY29tcGlsZXItcnVudGltZS5wcm9kdWN0aW9uLmpzXCIpfSxcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qc1wiOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9bihcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9janMvcmVhY3QucHJvZHVjdGlvbi5qc1wiKX0sXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LXJ1bnRpbWUuanNcIjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPW4oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24uanNcIil9LFwiLi9kaXN0L2NvbXBpbGVkL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24uanNcIjpmdW5jdGlvbihlLHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSx0KXt2YXIgbj1lLmxlbmd0aDtmb3IoZS5wdXNoKHQpOzA8bjspe3ZhciByPW4tMT4+PjEsbz1lW3JdO2lmKDA8YShvLHQpKWVbcl09dCxlW25dPW8sbj1yO2Vsc2UgYnJlYWt9fWZ1bmN0aW9uIHIoZSl7cmV0dXJuIDA9PT1lLmxlbmd0aD9udWxsOmVbMF19ZnVuY3Rpb24gbyhlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHQ9ZVswXSxuPWUucG9wKCk7aWYobiE9PXQpe2VbMF09bjtmb3IodmFyIHI9MCxvPWUubGVuZ3RoLGk9bz4+PjE7cjxpOyl7dmFyIGw9MioocisxKS0xLHM9ZVtsXSxjPWwrMSx1PWVbY107aWYoMD5hKHMsbikpYzxvJiYwPmEodSxzKT8oZVtyXT11LGVbY109bixyPWMpOihlW3JdPXMsZVtsXT1uLHI9bCk7ZWxzZSBpZihjPG8mJjA+YSh1LG4pKWVbcl09dSxlW2NdPW4scj1jO2Vsc2UgYnJlYWt9fXJldHVybiB0fWZ1bmN0aW9uIGEoZSx0KXt2YXIgbj1lLnNvcnRJbmRleC10LnNvcnRJbmRleDtyZXR1cm4gMCE9PW4/bjplLmlkLXQuaWR9aWYodC51bnN0YWJsZV9ub3c9dm9pZCAwLFwib2JqZWN0XCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgcGVyZm9ybWFuY2Uubm93KXt2YXIgaSxsPXBlcmZvcm1hbmNlO3QudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGwubm93KCl9fWVsc2V7dmFyIHM9RGF0ZSxjPXMubm93KCk7dC51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gcy5ub3coKS1jfX12YXIgdT1bXSxkPVtdLGY9MSxwPW51bGwsaD0zLG09ITEsZz0hMSx5PSExLHY9ITEsYj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6bnVsbCxBPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6bnVsbCx4PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZXRJbW1lZGlhdGU/c2V0SW1tZWRpYXRlOm51bGw7ZnVuY3Rpb24gdyhlKXtmb3IodmFyIHQ9cihkKTtudWxsIT09dDspe2lmKG51bGw9PT10LmNhbGxiYWNrKW8oZCk7ZWxzZSBpZih0LnN0YXJ0VGltZTw9ZSlvKGQpLHQuc29ydEluZGV4PXQuZXhwaXJhdGlvblRpbWUsbih1LHQpO2Vsc2UgYnJlYWs7dD1yKGQpfX1mdW5jdGlvbiBDKGUpe2lmKHk9ITEsdyhlKSwhZylpZihudWxsIT09cih1KSlnPSEwLF98fChfPSEwLGkoKSk7ZWxzZXt2YXIgdD1yKGQpO251bGwhPT10JiZJKEMsdC5zdGFydFRpbWUtZSl9fXZhciBfPSExLGs9LTEsRT01LGo9LTE7ZnVuY3Rpb24gUygpe3JldHVybiEhdnx8ISh0LnVuc3RhYmxlX25vdygpLWo8RSl9ZnVuY3Rpb24gTygpe2lmKHY9ITEsXyl7dmFyIGU9dC51bnN0YWJsZV9ub3coKTtqPWU7dmFyIG49ITA7dHJ5e2U6e2c9ITEseSYmKHk9ITEsQShrKSxrPS0xKSxtPSEwO3ZhciBhPWg7dHJ5e3Q6e2Zvcih3KGUpLHA9cih1KTtudWxsIT09cCYmIShwLmV4cGlyYXRpb25UaW1lPmUmJlMoKSk7KXt2YXIgbD1wLmNhbGxiYWNrO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGwpe3AuY2FsbGJhY2s9bnVsbCxoPXAucHJpb3JpdHlMZXZlbDt2YXIgcz1sKHAuZXhwaXJhdGlvblRpbWU8PWUpO2lmKGU9dC51bnN0YWJsZV9ub3coKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBzKXtwLmNhbGxiYWNrPXMsdyhlKSxuPSEwO2JyZWFrIHR9cD09PXIodSkmJm8odSksdyhlKX1lbHNlIG8odSk7cD1yKHUpfWlmKG51bGwhPT1wKW49ITA7ZWxzZXt2YXIgYz1yKGQpO251bGwhPT1jJiZJKEMsYy5zdGFydFRpbWUtZSksbj0hMX19YnJlYWsgZX1maW5hbGx5e3A9bnVsbCxoPWEsbT0hMX19fWZpbmFsbHl7bj9pKCk6Xz0hMX19fWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHgpaT1mdW5jdGlvbigpe3goTyl9O2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1lc3NhZ2VDaGFubmVsKXt2YXIgQj1uZXcgTWVzc2FnZUNoYW5uZWwsUD1CLnBvcnQyO0IucG9ydDEub25tZXNzYWdlPU8saT1mdW5jdGlvbigpe1AucG9zdE1lc3NhZ2UobnVsbCl9fWVsc2UgaT1mdW5jdGlvbigpe2IoTywwKX07ZnVuY3Rpb24gSShlLG4pe2s9YihmdW5jdGlvbigpe2UodC51bnN0YWJsZV9ub3coKSl9LG4pfXQudW5zdGFibGVfSWRsZVByaW9yaXR5PTUsdC51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eT0xLHQudW5zdGFibGVfTG93UHJpb3JpdHk9NCx0LnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTMsdC51bnN0YWJsZV9Qcm9maWxpbmc9bnVsbCx0LnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTIsdC51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihlKXtlLmNhbGxiYWNrPW51bGx9LHQudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oZSl7MD5lfHwxMjU8ZT9jb25zb2xlLmVycm9yKFwiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkXCIpOkU9MDxlP01hdGguZmxvb3IoMWUzL2UpOjV9LHQudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gaH0sdC51bnN0YWJsZV9uZXh0PWZ1bmN0aW9uKGUpe3N3aXRjaChoKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzp2YXIgdD0zO2JyZWFrO2RlZmF1bHQ6dD1ofXZhciBuPWg7aD10O3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7aD1ufX0sdC51bnN0YWJsZV9yZXF1ZXN0UGFpbnQ9ZnVuY3Rpb24oKXt2PSEwfSx0LnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6ZT0zfXZhciBuPWg7aD1lO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7aD1ufX0sdC51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKGUsbyxhKXt2YXIgbD10LnVuc3RhYmxlX25vdygpO3N3aXRjaChhPVwib2JqZWN0XCI9PXR5cGVvZiBhJiZudWxsIT09YSYmXCJudW1iZXJcIj09dHlwZW9mKGE9YS5kZWxheSkmJjA8YT9sK2E6bCxlKXtjYXNlIDE6dmFyIHM9LTE7YnJlYWs7Y2FzZSAyOnM9MjUwO2JyZWFrO2Nhc2UgNTpzPTB4M2ZmZmZmZmY7YnJlYWs7Y2FzZSA0OnM9MWU0O2JyZWFrO2RlZmF1bHQ6cz01ZTN9cmV0dXJuIHM9YStzLGU9e2lkOmYrKyxjYWxsYmFjazpvLHByaW9yaXR5TGV2ZWw6ZSxzdGFydFRpbWU6YSxleHBpcmF0aW9uVGltZTpzLHNvcnRJbmRleDotMX0sYT5sPyhlLnNvcnRJbmRleD1hLG4oZCxlKSxudWxsPT09cih1KSYmZT09PXIoZCkmJih5PyhBKGspLGs9LTEpOnk9ITAsSShDLGEtbCkpKTooZS5zb3J0SW5kZXg9cyxuKHUsZSksZ3x8bXx8KGc9ITAsX3x8KF89ITAsaSgpKSkpLGV9LHQudW5zdGFibGVfc2hvdWxkWWllbGQ9Uyx0LnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgdD1oO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWg7aD10O3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtoPW59fX19LFwiLi9kaXN0L2NvbXBpbGVkL3NjaGVkdWxlci9pbmRleC5qc1wiOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9bihcIi4vZGlzdC9jb21waWxlZC9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLmpzXCIpfSxcIi4vZGlzdC9jb21waWxlZC9zdGFja3RyYWNlLXBhcnNlci9zdGFjay10cmFjZS1wYXJzZXIuY2pzLmpzXCI6ZnVuY3Rpb24oZSl7KCgpPT57XCJ1c2Ugc3RyaWN0XCI7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18mJihfX25jY3dwY2tfcmVxdWlyZV9fLmFiPVwiLy9cIik7dmFyIHQsbixyLG8sYSxpLGwscyxjPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQ9XCI8dW5rbm93bj5cIixuPS9eXFxzKmF0ICguKj8pID9cXCgoKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWUtZXh0ZW5zaW9ufG5hdGl2ZXxldmFsfHdlYnBhY2t8d2VicGFjay1pbnRlcm5hbHxyc2N8YWJvdXR8dHVyYm9wYWNrfDxhbm9ueW1vdXM+fFxcL3xbYS16XTpcXFxcfFxcXFxcXFxcKS4qPykoPzo6KFxcZCspKT8oPzo6KFxcZCspKT9cXCk/XFxzKiQvaSxyPS9cXCgoXFxTKikoPzo6KFxcZCspKSg/OjooXFxkKykpXFwpLyxvPS9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT8uKykgKT9cXCg/KCg/OmZpbGV8bXMtYXBweHxodHRwcz98d2VicGFja3x3ZWJwYWNrLWludGVybmFsfHJzY3xhYm91dHx0dXJib3BhY2t8YmxvYik6Lio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaSxhPS9eXFxzKiguKj8pKD86XFwoKC4qPylcXCkpPyg/Ol58QCkoKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWV8d2VicGFja3x3ZWJwYWNrLWludGVybmFsfHJzY3xhYm91dHx0dXJib3BhY2t8cmVzb3VyY2V8XFxbbmF0aXZlKS4qP3xbXkBdKmJ1bmRsZSkoPzo6KFxcZCspKT8oPzo6KFxcZCspKT9cXHMqJC9pLGk9LyhcXFMrKSBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsL2ksbD0vXlxccyooPzooW15AXSopKD86XFwoKC4qPylcXCkpP0ApPyhcXFMuKj8pOihcXGQrKSg/OjooXFxkKykpP1xccyokL2kscz0vXlxccyphdCAoPzooKD86XFxbb2JqZWN0IG9iamVjdFxcXSk/W15cXFxcL10rKD86IFxcW2FzIFxcUytcXF0pPykgKT9cXCg/KC4qPyk6KFxcZCspKD86OihcXGQrKSk/XFwpP1xccyokL2ksYy5wYXJzZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChcIlxcblwiKS5yZWR1Y2UoZnVuY3Rpb24oZSxjKXt2YXIgdSxkLGYscCxoLG0sZz1mdW5jdGlvbihlKXt2YXIgbz1uLmV4ZWMoZSk7aWYoIW8pcmV0dXJuIG51bGw7dmFyIGE9b1syXSYmMD09PW9bMl0uaW5kZXhPZihcIm5hdGl2ZVwiKSxpPW9bMl0mJjA9PT1vWzJdLmluZGV4T2YoXCJldmFsXCIpLGw9ci5leGVjKG9bMl0pO3JldHVybiBpJiZudWxsIT1sJiYob1syXT1sWzFdLG9bM109bFsyXSxvWzRdPWxbM10pLHtmaWxlOmE/bnVsbDpvWzJdLG1ldGhvZE5hbWU6b1sxXXx8dCxhcmd1bWVudHM6YT9bb1syXV06W10sbGluZU51bWJlcjpvWzNdPytvWzNdOm51bGwsY29sdW1uOm9bNF0/K29bNF06bnVsbH19KGMpfHwodT1jLChkPW8uZXhlYyh1KSk/e2ZpbGU6ZFsyXSxtZXRob2ROYW1lOmRbMV18fHQsYXJndW1lbnRzOltdLGxpbmVOdW1iZXI6K2RbM10sY29sdW1uOmRbNF0/K2RbNF06bnVsbH06bnVsbCl8fGZ1bmN0aW9uKGUpe3ZhciBuPWEuZXhlYyhlKTtpZighbilyZXR1cm4gbnVsbDt2YXIgcj1uWzNdJiZuWzNdLmluZGV4T2YoXCIgPiBldmFsXCIpPi0xLG89aS5leGVjKG5bM10pO3JldHVybiByJiZudWxsIT1vJiYoblszXT1vWzFdLG5bNF09b1syXSxuWzVdPW51bGwpLHtmaWxlOm5bM10sbWV0aG9kTmFtZTpuWzFdfHx0LGFyZ3VtZW50czpuWzJdP25bMl0uc3BsaXQoXCIsXCIpOltdLGxpbmVOdW1iZXI6bls0XT8rbls0XTpudWxsLGNvbHVtbjpuWzVdPytuWzVdOm51bGx9fShjKXx8KGY9YywocD1zLmV4ZWMoZikpP3tmaWxlOnBbMl0sbWV0aG9kTmFtZTpwWzFdfHx0LGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOitwWzNdLGNvbHVtbjpwWzRdPytwWzRdOm51bGx9Om51bGwpfHwoaD1jLChtPWwuZXhlYyhoKSk/e2ZpbGU6bVszXSxtZXRob2ROYW1lOm1bMV18fHQsYXJndW1lbnRzOltdLGxpbmVOdW1iZXI6K21bNF0sY29sdW1uOm1bNV0/K21bNV06bnVsbH06bnVsbCk7cmV0dXJuIGcmJmUucHVzaChnKSxlfSxbXSl9LGUuZXhwb3J0cz1jfSkoKX0sXCIuL2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaS9pbmRleC5qc1wiOmZ1bmN0aW9uKGUpeygoKT0+e1widXNlIHN0cmljdFwiO3ZhciB0PXs1MTE6ZT0+e2UuZXhwb3J0cz0oe29ubHlGaXJzdDplPSExfT17fSk9PlJlZ0V4cChcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyl8KD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSlcIixlP3ZvaWQgMDpcImdcIil9LDUzMjooZSx0LG4pPT57bGV0IHI9big1MTEpO2UuZXhwb3J0cz1lPT5cInN0cmluZ1wiPT10eXBlb2YgZT9lLnJlcGxhY2UocigpLFwiXCIpOmV9fSxuPXt9O2Z1bmN0aW9uIHIoZSl7dmFyIG89bltlXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGE9bltlXT17ZXhwb3J0czp7fX0saT0hMDt0cnl7dFtlXShhLGEuZXhwb3J0cyxyKSxpPSExfWZpbmFsbHl7aSYmZGVsZXRlIG5bZV19cmV0dXJuIGEuZXhwb3J0c31yLmFiPVwiLy9cIixlLmV4cG9ydHM9cig1MzIpfSkoKX0sXCIuL3NyYy9idWlsZC93ZWJwYWNrL2xvYWRlcnMvZGV2dG9vbC9kZXZ0b29sLXN0eWxlLWluamVjdC5qc1wiOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtsZXQgZT13aW5kb3cuX25leHRqc0RldnRvb2xzU3R5bGVDYWNoZTtpZihlLmNhY2hlZFNoYWRvd1Jvb3QpcmV0dXJuIGUuY2FjaGVkU2hhZG93Um9vdDtsZXQgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibmV4dGpzLXBvcnRhbFwiKSxuPXQ/LnNoYWRvd1Jvb3R8fG51bGw7cmV0dXJuIG4mJihlLmNhY2hlZFNoYWRvd1Jvb3Q9biksbn1mdW5jdGlvbiBuKGUsdCl7bGV0IG49d2luZG93Ll9uZXh0anNEZXZ0b29sc1N0eWxlQ2FjaGU7bi5sYXN0SW5zZXJ0ZWRFbGVtZW50P24ubGFzdEluc2VydGVkRWxlbWVudC5uZXh0U2libGluZz90Lmluc2VydEJlZm9yZShlLG4ubGFzdEluc2VydGVkRWxlbWVudC5uZXh0U2libGluZyk6dC5hcHBlbmRDaGlsZChlKTp0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCksbi5sYXN0SW5zZXJ0ZWRFbGVtZW50PWV9ZnVuY3Rpb24gcigpe2xldCBlPXdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlLHI9dCgpO3ImJihlLnBlbmRpbmdFbGVtZW50cy5mb3JFYWNoKGU9PntuKGUscil9KSxlLnBlbmRpbmdFbGVtZW50cz1bXSl9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlPXdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlfHx7cGVuZGluZ0VsZW1lbnRzOltdLGlzT2JzZXJ2aW5nOiExLGxhc3RJbnNlcnRlZEVsZW1lbnQ6bnVsbCxjYWNoZWRTaGFkb3dSb290Om51bGx9KSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7ZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLW5leHRqcy1kZXYtdG9vbC1zdHlsZVwiLFwidHJ1ZVwiKTtsZXQgbz10KCk7bz9uKGUsbyk6KHdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlLnBlbmRpbmdFbGVtZW50cy5wdXNoKGUpLGZ1bmN0aW9uKCl7bGV0IGU9d2luZG93Ll9uZXh0anNEZXZ0b29sc1N0eWxlQ2FjaGU7aWYoZS5pc09ic2VydmluZylyZXR1cm47aWYoZS5pc09ic2VydmluZz0hMCx0KCkpcmV0dXJuIHIoKTtsZXQgbj1uZXcgTXV0YXRpb25PYnNlcnZlcihvPT57aWYoMCE9PW8ubGVuZ3RoKXtmb3IobGV0IGEgb2YgbylpZigwIT09YS5hZGRlZE5vZGVzLmxlbmd0aClmb3IobGV0IG8gb2YgYS5hZGRlZE5vZGVzKXtpZihvLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpY29udGludWU7bGV0IGE9bnVsbDtpZihcIlNDUklQVFwiPT09by50YWdOYW1lJiZvLmdldEF0dHJpYnV0ZShcImRhdGEtbmV4dGpzLWRldi1vdmVybGF5XCIpP2E9by5maXJzdENoaWxkOlwiTkVYVEpTLVBPUlRBTFwiPT09by50YWdOYW1lJiYoYT1vKSxhKXtsZXQgbz0oKT0+e3QoKT8ocigpLG4uZGlzY29ubmVjdCgpLGUuaXNPYnNlcnZpbmc9ITEpOnNldFRpbWVvdXQobywyMCl9O28oKTtyZXR1cm59fX19KTtuLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KX0oKSl9fSxcIi4vZGlzdC9jb21waWxlZC96b2QvaW5kZXguY2pzXCI6ZnVuY3Rpb24oZSl7KCgpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9ezYyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTsoIW98fChcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKSkmJihvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxpPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lno9dm9pZCAwO2xldCBsPWEobig5MjMpKTt0Lno9bCxpKG4oOTIzKSx0KSx0LmRlZmF1bHQ9bH0sMzQ4OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlpvZEVycm9yPXQucXVvdGVsZXNzSnNvbj10LlpvZElzc3VlQ29kZT12b2lkIDA7bGV0IHI9big3MDkpO3QuWm9kSXNzdWVDb2RlPXIudXRpbC5hcnJheVRvRW51bShbXCJpbnZhbGlkX3R5cGVcIixcImludmFsaWRfbGl0ZXJhbFwiLFwiY3VzdG9tXCIsXCJpbnZhbGlkX3VuaW9uXCIsXCJpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3JcIixcImludmFsaWRfZW51bV92YWx1ZVwiLFwidW5yZWNvZ25pemVkX2tleXNcIixcImludmFsaWRfYXJndW1lbnRzXCIsXCJpbnZhbGlkX3JldHVybl90eXBlXCIsXCJpbnZhbGlkX2RhdGVcIixcImludmFsaWRfc3RyaW5nXCIsXCJ0b29fc21hbGxcIixcInRvb19iaWdcIixcImludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzXCIsXCJub3RfbXVsdGlwbGVfb2ZcIixcIm5vdF9maW5pdGVcIl0pLHQucXVvdGVsZXNzSnNvbj1lPT5KU09OLnN0cmluZ2lmeShlLG51bGwsMikucmVwbGFjZSgvXCIoW15cIl0rKVwiOi9nLFwiJDE6XCIpO2NsYXNzIG8gZXh0ZW5kcyBFcnJvcntnZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuaXNzdWVzfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5pc3N1ZXM9W10sdGhpcy5hZGRJc3N1ZT1lPT57dGhpcy5pc3N1ZXM9Wy4uLnRoaXMuaXNzdWVzLGVdfSx0aGlzLmFkZElzc3Vlcz0oZT1bXSk9Pnt0aGlzLmlzc3Vlcz1bLi4udGhpcy5pc3N1ZXMsLi4uZV19O2xldCB0PW5ldy50YXJnZXQucHJvdG90eXBlO09iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx0KTp0aGlzLl9fcHJvdG9fXz10LHRoaXMubmFtZT1cIlpvZEVycm9yXCIsdGhpcy5pc3N1ZXM9ZX1mb3JtYXQoZSl7bGV0IHQ9ZXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWVzc2FnZX0sbj17X2Vycm9yczpbXX0scj1lPT57Zm9yKGxldCBvIG9mIGUuaXNzdWVzKWlmKFwiaW52YWxpZF91bmlvblwiPT09by5jb2RlKW8udW5pb25FcnJvcnMubWFwKHIpO2Vsc2UgaWYoXCJpbnZhbGlkX3JldHVybl90eXBlXCI9PT1vLmNvZGUpcihvLnJldHVyblR5cGVFcnJvcik7ZWxzZSBpZihcImludmFsaWRfYXJndW1lbnRzXCI9PT1vLmNvZGUpcihvLmFyZ3VtZW50c0Vycm9yKTtlbHNlIGlmKDA9PT1vLnBhdGgubGVuZ3RoKW4uX2Vycm9ycy5wdXNoKHQobykpO2Vsc2V7bGV0IGU9bixyPTA7Zm9yKDtyPG8ucGF0aC5sZW5ndGg7KXtsZXQgbj1vLnBhdGhbcl07cj09PW8ucGF0aC5sZW5ndGgtMT8oZVtuXT1lW25dfHx7X2Vycm9yczpbXX0sZVtuXS5fZXJyb3JzLnB1c2godChvKSkpOmVbbl09ZVtuXXx8e19lcnJvcnM6W119LGU9ZVtuXSxyKyt9fX07cmV0dXJuIHIodGhpcyksbn1zdGF0aWMgYXNzZXJ0KGUpe2lmKCEoZSBpbnN0YW5jZW9mIG8pKXRocm93IEVycm9yKGBOb3QgYSBab2RFcnJvcjogJHtlfWApfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMubWVzc2FnZX1nZXQgbWVzc2FnZSgpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmlzc3VlcyxyLnV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyLDIpfWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmlzc3Vlcy5sZW5ndGh9ZmxhdHRlbihlPWU9PmUubWVzc2FnZSl7bGV0IHQ9e30sbj1bXTtmb3IobGV0IHIgb2YgdGhpcy5pc3N1ZXMpaWYoci5wYXRoLmxlbmd0aD4wKXtsZXQgbj1yLnBhdGhbMF07dFtuXT10W25dfHxbXSx0W25dLnB1c2goZShyKSl9ZWxzZSBuLnB1c2goZShyKSk7cmV0dXJue2Zvcm1FcnJvcnM6bixmaWVsZEVycm9yczp0fX1nZXQgZm9ybUVycm9ycygpe3JldHVybiB0aGlzLmZsYXR0ZW4oKX19dC5ab2RFcnJvcj1vLG8uY3JlYXRlPWU9Pm5ldyBvKGUpfSw2MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kZWZhdWx0RXJyb3JNYXA9dm9pZCAwLHQuc2V0RXJyb3JNYXA9ZnVuY3Rpb24oZSl7YT1lfSx0LmdldEVycm9yTWFwPWZ1bmN0aW9uKCl7cmV0dXJuIGF9O2xldCBvPXIobig4NzEpKTt0LmRlZmF1bHRFcnJvck1hcD1vLmRlZmF1bHQ7bGV0IGE9by5kZWZhdWx0fSw5MjM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7KCFvfHwoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSkpJiYobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjEpLHQpLG8obig4MTgpLHQpLG8obig1MTUpLHQpLG8obig3MDkpLHQpLG8obigxNTUpLHQpLG8obigzNDgpLHQpfSw1Mzg6KGUsdCk9Pnt2YXIgbixyO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZXJyb3JVdGlsPXZvaWQgMCwocj1ufHwodC5lcnJvclV0aWw9bj17fSkpLmVyclRvT2JqPWU9Plwic3RyaW5nXCI9PXR5cGVvZiBlP3ttZXNzYWdlOmV9OmV8fHt9LHIudG9TdHJpbmc9ZT0+XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTplPy5tZXNzYWdlfSw4MTg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuaXNBc3luYz10LmlzVmFsaWQ9dC5pc0RpcnR5PXQuaXNBYm9ydGVkPXQuT0s9dC5ESVJUWT10LklOVkFMSUQ9dC5QYXJzZVN0YXR1cz10LkVNUFRZX1BBVEg9dC5tYWtlSXNzdWU9dm9pZCAwLHQuYWRkSXNzdWVUb0NvbnRleHQ9ZnVuY3Rpb24oZSxuKXtsZXQgcj0oMCxvLmdldEVycm9yTWFwKSgpLGk9KDAsdC5tYWtlSXNzdWUpKHtpc3N1ZURhdGE6bixkYXRhOmUuZGF0YSxwYXRoOmUucGF0aCxlcnJvck1hcHM6W2UuY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCxlLnNjaGVtYUVycm9yTWFwLHIscj09PWEuZGVmYXVsdD92b2lkIDA6YS5kZWZhdWx0XS5maWx0ZXIoZT0+ISFlKX0pO2UuY29tbW9uLmlzc3Vlcy5wdXNoKGkpfTtsZXQgbz1uKDYxKSxhPXIobig4NzEpKTt0Lm1ha2VJc3N1ZT1lPT57bGV0e2RhdGE6dCxwYXRoOm4sZXJyb3JNYXBzOnIsaXNzdWVEYXRhOm99PWUsYT1bLi4ubiwuLi5vLnBhdGh8fFtdXSxpPXsuLi5vLHBhdGg6YX07aWYodm9pZCAwIT09by5tZXNzYWdlKXJldHVybnsuLi5vLHBhdGg6YSxtZXNzYWdlOm8ubWVzc2FnZX07bGV0IGw9XCJcIjtmb3IobGV0IGUgb2Ygci5maWx0ZXIoZT0+ISFlKS5zbGljZSgpLnJldmVyc2UoKSlsPWUoaSx7ZGF0YTp0LGRlZmF1bHRFcnJvcjpsfSkubWVzc2FnZTtyZXR1cm57Li4ubyxwYXRoOmEsbWVzc2FnZTpsfX0sdC5FTVBUWV9QQVRIPVtdO2NsYXNzIGl7Y29uc3RydWN0b3IoKXt0aGlzLnZhbHVlPVwidmFsaWRcIn1kaXJ0eSgpe1widmFsaWRcIj09PXRoaXMudmFsdWUmJih0aGlzLnZhbHVlPVwiZGlydHlcIil9YWJvcnQoKXtcImFib3J0ZWRcIiE9PXRoaXMudmFsdWUmJih0aGlzLnZhbHVlPVwiYWJvcnRlZFwiKX1zdGF0aWMgbWVyZ2VBcnJheShlLG4pe2xldCByPVtdO2ZvcihsZXQgbyBvZiBuKXtpZihcImFib3J0ZWRcIj09PW8uc3RhdHVzKXJldHVybiB0LklOVkFMSUQ7XCJkaXJ0eVwiPT09by5zdGF0dXMmJmUuZGlydHkoKSxyLnB1c2goby52YWx1ZSl9cmV0dXJue3N0YXR1czplLnZhbHVlLHZhbHVlOnJ9fXN0YXRpYyBhc3luYyBtZXJnZU9iamVjdEFzeW5jKGUsdCl7bGV0IG49W107Zm9yKGxldCBlIG9mIHQpe2xldCB0PWF3YWl0IGUua2V5LHI9YXdhaXQgZS52YWx1ZTtuLnB1c2goe2tleTp0LHZhbHVlOnJ9KX1yZXR1cm4gaS5tZXJnZU9iamVjdFN5bmMoZSxuKX1zdGF0aWMgbWVyZ2VPYmplY3RTeW5jKGUsbil7bGV0IHI9e307Zm9yKGxldCBvIG9mIG4pe2xldHtrZXk6bix2YWx1ZTphfT1vO2lmKFwiYWJvcnRlZFwiPT09bi5zdGF0dXN8fFwiYWJvcnRlZFwiPT09YS5zdGF0dXMpcmV0dXJuIHQuSU5WQUxJRDtcImRpcnR5XCI9PT1uLnN0YXR1cyYmZS5kaXJ0eSgpLFwiZGlydHlcIj09PWEuc3RhdHVzJiZlLmRpcnR5KCksXCJfX3Byb3RvX19cIiE9PW4udmFsdWUmJih2b2lkIDAhPT1hLnZhbHVlfHxvLmFsd2F5c1NldCkmJihyW24udmFsdWVdPWEudmFsdWUpfXJldHVybntzdGF0dXM6ZS52YWx1ZSx2YWx1ZTpyfX19dC5QYXJzZVN0YXR1cz1pLHQuSU5WQUxJRD1PYmplY3QuZnJlZXplKHtzdGF0dXM6XCJhYm9ydGVkXCJ9KSx0LkRJUlRZPWU9Pih7c3RhdHVzOlwiZGlydHlcIix2YWx1ZTplfSksdC5PSz1lPT4oe3N0YXR1czpcInZhbGlkXCIsdmFsdWU6ZX0pLHQuaXNBYm9ydGVkPWU9PlwiYWJvcnRlZFwiPT09ZS5zdGF0dXMsdC5pc0RpcnR5PWU9PlwiZGlydHlcIj09PWUuc3RhdHVzLHQuaXNWYWxpZD1lPT5cInZhbGlkXCI9PT1lLnN0YXR1cyx0LmlzQXN5bmM9ZT0+XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFByb21pc2UmJmUgaW5zdGFuY2VvZiBQcm9taXNlfSw1MTU6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sNzA5OihlLHQpPT57dmFyIG4scixvO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0UGFyc2VkVHlwZT10LlpvZFBhcnNlZFR5cGU9dC5vYmplY3RVdGlsPXQudXRpbD12b2lkIDAsKG89bnx8KHQudXRpbD1uPXt9KSkuYXNzZXJ0RXF1YWw9ZT0+e30sby5hc3NlcnRJcz1mdW5jdGlvbihlKXt9LG8uYXNzZXJ0TmV2ZXI9ZnVuY3Rpb24oZSl7dGhyb3cgRXJyb3IoKX0sby5hcnJheVRvRW51bT1lPT57bGV0IHQ9e307Zm9yKGxldCBuIG9mIGUpdFtuXT1uO3JldHVybiB0fSxvLmdldFZhbGlkRW51bVZhbHVlcz1lPT57bGV0IHQ9by5vYmplY3RLZXlzKGUpLmZpbHRlcih0PT5cIm51bWJlclwiIT10eXBlb2YgZVtlW3RdXSksbj17fTtmb3IobGV0IHIgb2YgdCluW3JdPWVbcl07cmV0dXJuIG8ub2JqZWN0VmFsdWVzKG4pfSxvLm9iamVjdFZhbHVlcz1lPT5vLm9iamVjdEtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSksby5vYmplY3RLZXlzPVwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5rZXlzP2U9Pk9iamVjdC5rZXlzKGUpOmU9PntsZXQgdD1bXTtmb3IobGV0IG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdC5wdXNoKG4pO3JldHVybiB0fSxvLmZpbmQ9KGUsdCk9Pntmb3IobGV0IG4gb2YgZSlpZih0KG4pKXJldHVybiBufSxvLmlzSW50ZWdlcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBOdW1iZXIuaXNJbnRlZ2VyP2U9Pk51bWJlci5pc0ludGVnZXIoZSk6ZT0+XCJudW1iZXJcIj09dHlwZW9mIGUmJk51bWJlci5pc0Zpbml0ZShlKSYmTWF0aC5mbG9vcihlKT09PWUsby5qb2luVmFsdWVzPWZ1bmN0aW9uKGUsdD1cIiB8IFwiKXtyZXR1cm4gZS5tYXAoZT0+XCJzdHJpbmdcIj09dHlwZW9mIGU/YCcke2V9J2A6ZSkuam9pbih0KX0sby5qc29uU3RyaW5naWZ5UmVwbGFjZXI9KGUsdCk9PlwiYmlnaW50XCI9PXR5cGVvZiB0P3QudG9TdHJpbmcoKTp0LChyfHwodC5vYmplY3RVdGlsPXI9e30pKS5tZXJnZVNoYXBlcz0oZSx0KT0+KHsuLi5lLC4uLnR9KSx0LlpvZFBhcnNlZFR5cGU9bi5hcnJheVRvRW51bShbXCJzdHJpbmdcIixcIm5hblwiLFwibnVtYmVyXCIsXCJpbnRlZ2VyXCIsXCJmbG9hdFwiLFwiYm9vbGVhblwiLFwiZGF0ZVwiLFwiYmlnaW50XCIsXCJzeW1ib2xcIixcImZ1bmN0aW9uXCIsXCJ1bmRlZmluZWRcIixcIm51bGxcIixcImFycmF5XCIsXCJvYmplY3RcIixcInVua25vd25cIixcInByb21pc2VcIixcInZvaWRcIixcIm5ldmVyXCIsXCJtYXBcIixcInNldFwiXSksdC5nZXRQYXJzZWRUeXBlPWU9Pntzd2l0Y2godHlwZW9mIGUpe2Nhc2VcInVuZGVmaW5lZFwiOnJldHVybiB0LlpvZFBhcnNlZFR5cGUudW5kZWZpbmVkO2Nhc2VcInN0cmluZ1wiOnJldHVybiB0LlpvZFBhcnNlZFR5cGUuc3RyaW5nO2Nhc2VcIm51bWJlclwiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/dC5ab2RQYXJzZWRUeXBlLm5hbjp0LlpvZFBhcnNlZFR5cGUubnVtYmVyO2Nhc2VcImJvb2xlYW5cIjpyZXR1cm4gdC5ab2RQYXJzZWRUeXBlLmJvb2xlYW47Y2FzZVwiZnVuY3Rpb25cIjpyZXR1cm4gdC5ab2RQYXJzZWRUeXBlLmZ1bmN0aW9uO2Nhc2VcImJpZ2ludFwiOnJldHVybiB0LlpvZFBhcnNlZFR5cGUuYmlnaW50O2Nhc2VcInN5bWJvbFwiOnJldHVybiB0LlpvZFBhcnNlZFR5cGUuc3ltYm9sO2Nhc2VcIm9iamVjdFwiOmlmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHQuWm9kUGFyc2VkVHlwZS5hcnJheTtpZihudWxsPT09ZSlyZXR1cm4gdC5ab2RQYXJzZWRUeXBlLm51bGw7aWYoZS50aGVuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW4mJmUuY2F0Y2gmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY2F0Y2gpcmV0dXJuIHQuWm9kUGFyc2VkVHlwZS5wcm9taXNlO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBNYXAmJmUgaW5zdGFuY2VvZiBNYXApcmV0dXJuIHQuWm9kUGFyc2VkVHlwZS5tYXA7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFNldCYmZSBpbnN0YW5jZW9mIFNldClyZXR1cm4gdC5ab2RQYXJzZWRUeXBlLnNldDtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgRGF0ZSYmZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIHQuWm9kUGFyc2VkVHlwZS5kYXRlO3JldHVybiB0LlpvZFBhcnNlZFR5cGUub2JqZWN0O2RlZmF1bHQ6cmV0dXJuIHQuWm9kUGFyc2VkVHlwZS51bmtub3dufX19LDg3MTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7bGV0IHI9bigzNDgpLG89big3MDkpO3QuZGVmYXVsdD0oZSx0KT0+e2xldCBuO3N3aXRjaChlLmNvZGUpe2Nhc2Ugci5ab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlOm49ZS5yZWNlaXZlZD09PW8uWm9kUGFyc2VkVHlwZS51bmRlZmluZWQ/XCJSZXF1aXJlZFwiOmBFeHBlY3RlZCAke2UuZXhwZWN0ZWR9LCByZWNlaXZlZCAke2UucmVjZWl2ZWR9YDticmVhaztjYXNlIHIuWm9kSXNzdWVDb2RlLmludmFsaWRfbGl0ZXJhbDpuPWBJbnZhbGlkIGxpdGVyYWwgdmFsdWUsIGV4cGVjdGVkICR7SlNPTi5zdHJpbmdpZnkoZS5leHBlY3RlZCxvLnV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyKX1gO2JyZWFrO2Nhc2Ugci5ab2RJc3N1ZUNvZGUudW5yZWNvZ25pemVkX2tleXM6bj1gVW5yZWNvZ25pemVkIGtleShzKSBpbiBvYmplY3Q6ICR7by51dGlsLmpvaW5WYWx1ZXMoZS5rZXlzLFwiLCBcIil9YDticmVhaztjYXNlIHIuWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb246bj1cIkludmFsaWQgaW5wdXRcIjticmVhaztjYXNlIHIuWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcjpuPWBJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7by51dGlsLmpvaW5WYWx1ZXMoZS5vcHRpb25zKX1gO2JyZWFrO2Nhc2Ugci5ab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlOm49YEludmFsaWQgZW51bSB2YWx1ZS4gRXhwZWN0ZWQgJHtvLnV0aWwuam9pblZhbHVlcyhlLm9wdGlvbnMpfSwgcmVjZWl2ZWQgJyR7ZS5yZWNlaXZlZH0nYDticmVhaztjYXNlIHIuWm9kSXNzdWVDb2RlLmludmFsaWRfYXJndW1lbnRzOm49XCJJbnZhbGlkIGZ1bmN0aW9uIGFyZ3VtZW50c1wiO2JyZWFrO2Nhc2Ugci5ab2RJc3N1ZUNvZGUuaW52YWxpZF9yZXR1cm5fdHlwZTpuPVwiSW52YWxpZCBmdW5jdGlvbiByZXR1cm4gdHlwZVwiO2JyZWFrO2Nhc2Ugci5ab2RJc3N1ZUNvZGUuaW52YWxpZF9kYXRlOm49XCJJbnZhbGlkIGRhdGVcIjticmVhaztjYXNlIHIuWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nOlwib2JqZWN0XCI9PXR5cGVvZiBlLnZhbGlkYXRpb24/XCJpbmNsdWRlc1wiaW4gZS52YWxpZGF0aW9uPyhuPWBJbnZhbGlkIGlucHV0OiBtdXN0IGluY2x1ZGUgXCIke2UudmFsaWRhdGlvbi5pbmNsdWRlc31cImAsXCJudW1iZXJcIj09dHlwZW9mIGUudmFsaWRhdGlvbi5wb3NpdGlvbiYmKG49YCR7bn0gYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke2UudmFsaWRhdGlvbi5wb3NpdGlvbn1gKSk6XCJzdGFydHNXaXRoXCJpbiBlLnZhbGlkYXRpb24/bj1gSW52YWxpZCBpbnB1dDogbXVzdCBzdGFydCB3aXRoIFwiJHtlLnZhbGlkYXRpb24uc3RhcnRzV2l0aH1cImA6XCJlbmRzV2l0aFwiaW4gZS52YWxpZGF0aW9uP249YEludmFsaWQgaW5wdXQ6IG11c3QgZW5kIHdpdGggXCIke2UudmFsaWRhdGlvbi5lbmRzV2l0aH1cImA6by51dGlsLmFzc2VydE5ldmVyKGUudmFsaWRhdGlvbik6bj1cInJlZ2V4XCIhPT1lLnZhbGlkYXRpb24/YEludmFsaWQgJHtlLnZhbGlkYXRpb259YDpcIkludmFsaWRcIjticmVhaztjYXNlIHIuWm9kSXNzdWVDb2RlLnRvb19zbWFsbDpuPVwiYXJyYXlcIj09PWUudHlwZT9gQXJyYXkgbXVzdCBjb250YWluICR7ZS5leGFjdD9cImV4YWN0bHlcIjplLmluY2x1c2l2ZT9cImF0IGxlYXN0XCI6XCJtb3JlIHRoYW5cIn0gJHtlLm1pbmltdW19IGVsZW1lbnQocylgOlwic3RyaW5nXCI9PT1lLnR5cGU/YFN0cmluZyBtdXN0IGNvbnRhaW4gJHtlLmV4YWN0P1wiZXhhY3RseVwiOmUuaW5jbHVzaXZlP1wiYXQgbGVhc3RcIjpcIm92ZXJcIn0gJHtlLm1pbmltdW19IGNoYXJhY3RlcihzKWA6XCJudW1iZXJcIj09PWUudHlwZXx8XCJiaWdpbnRcIj09PWUudHlwZT9gTnVtYmVyIG11c3QgYmUgJHtlLmV4YWN0P1wiZXhhY3RseSBlcXVhbCB0byBcIjplLmluY2x1c2l2ZT9cImdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBcIjpcImdyZWF0ZXIgdGhhbiBcIn0ke2UubWluaW11bX1gOlwiZGF0ZVwiPT09ZS50eXBlP2BEYXRlIG11c3QgYmUgJHtlLmV4YWN0P1wiZXhhY3RseSBlcXVhbCB0byBcIjplLmluY2x1c2l2ZT9cImdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBcIjpcImdyZWF0ZXIgdGhhbiBcIn0ke25ldyBEYXRlKE51bWJlcihlLm1pbmltdW0pKX1gOlwiSW52YWxpZCBpbnB1dFwiO2JyZWFrO2Nhc2Ugci5ab2RJc3N1ZUNvZGUudG9vX2JpZzpuPVwiYXJyYXlcIj09PWUudHlwZT9gQXJyYXkgbXVzdCBjb250YWluICR7ZS5leGFjdD9cImV4YWN0bHlcIjplLmluY2x1c2l2ZT9cImF0IG1vc3RcIjpcImxlc3MgdGhhblwifSAke2UubWF4aW11bX0gZWxlbWVudChzKWA6XCJzdHJpbmdcIj09PWUudHlwZT9gU3RyaW5nIG11c3QgY29udGFpbiAke2UuZXhhY3Q/XCJleGFjdGx5XCI6ZS5pbmNsdXNpdmU/XCJhdCBtb3N0XCI6XCJ1bmRlclwifSAke2UubWF4aW11bX0gY2hhcmFjdGVyKHMpYDpcIm51bWJlclwiPT09ZS50eXBlP2BOdW1iZXIgbXVzdCBiZSAke2UuZXhhY3Q/XCJleGFjdGx5XCI6ZS5pbmNsdXNpdmU/XCJsZXNzIHRoYW4gb3IgZXF1YWwgdG9cIjpcImxlc3MgdGhhblwifSAke2UubWF4aW11bX1gOlwiYmlnaW50XCI9PT1lLnR5cGU/YEJpZ0ludCBtdXN0IGJlICR7ZS5leGFjdD9cImV4YWN0bHlcIjplLmluY2x1c2l2ZT9cImxlc3MgdGhhbiBvciBlcXVhbCB0b1wiOlwibGVzcyB0aGFuXCJ9ICR7ZS5tYXhpbXVtfWA6XCJkYXRlXCI9PT1lLnR5cGU/YERhdGUgbXVzdCBiZSAke2UuZXhhY3Q/XCJleGFjdGx5XCI6ZS5pbmNsdXNpdmU/XCJzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG9cIjpcInNtYWxsZXIgdGhhblwifSAke25ldyBEYXRlKE51bWJlcihlLm1heGltdW0pKX1gOlwiSW52YWxpZCBpbnB1dFwiO2JyZWFrO2Nhc2Ugci5ab2RJc3N1ZUNvZGUuY3VzdG9tOm49XCJJbnZhbGlkIGlucHV0XCI7YnJlYWs7Y2FzZSByLlpvZElzc3VlQ29kZS5pbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlczpuPVwiSW50ZXJzZWN0aW9uIHJlc3VsdHMgY291bGQgbm90IGJlIG1lcmdlZFwiO2JyZWFrO2Nhc2Ugci5ab2RJc3N1ZUNvZGUubm90X211bHRpcGxlX29mOm49YE51bWJlciBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtlLm11bHRpcGxlT2Z9YDticmVhaztjYXNlIHIuWm9kSXNzdWVDb2RlLm5vdF9maW5pdGU6bj1cIk51bWJlciBtdXN0IGJlIGZpbml0ZVwiO2JyZWFrO2RlZmF1bHQ6bj10LmRlZmF1bHRFcnJvcixvLnV0aWwuYXNzZXJ0TmV2ZXIoZSl9cmV0dXJue21lc3NhZ2U6bn19fSwxNTU6KGUsdCxuKT0+e3ZhciByLG87bGV0IGE7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kaXNjcmltaW5hdGVkVW5pb249dC5kYXRlPXQuYm9vbGVhbj10LmJpZ2ludD10LmFycmF5PXQuYW55PXQuY29lcmNlPXQuWm9kRmlyc3RQYXJ0eVR5cGVLaW5kPXQubGF0ZT10LlpvZFNjaGVtYT10LlNjaGVtYT10LlpvZFJlYWRvbmx5PXQuWm9kUGlwZWxpbmU9dC5ab2RCcmFuZGVkPXQuQlJBTkQ9dC5ab2ROYU49dC5ab2RDYXRjaD10LlpvZERlZmF1bHQ9dC5ab2ROdWxsYWJsZT10LlpvZE9wdGlvbmFsPXQuWm9kVHJhbnNmb3JtZXI9dC5ab2RFZmZlY3RzPXQuWm9kUHJvbWlzZT10LlpvZE5hdGl2ZUVudW09dC5ab2RFbnVtPXQuWm9kTGl0ZXJhbD10LlpvZExhenk9dC5ab2RGdW5jdGlvbj10LlpvZFNldD10LlpvZE1hcD10LlpvZFJlY29yZD10LlpvZFR1cGxlPXQuWm9kSW50ZXJzZWN0aW9uPXQuWm9kRGlzY3JpbWluYXRlZFVuaW9uPXQuWm9kVW5pb249dC5ab2RPYmplY3Q9dC5ab2RBcnJheT10LlpvZFZvaWQ9dC5ab2ROZXZlcj10LlpvZFVua25vd249dC5ab2RBbnk9dC5ab2ROdWxsPXQuWm9kVW5kZWZpbmVkPXQuWm9kU3ltYm9sPXQuWm9kRGF0ZT10LlpvZEJvb2xlYW49dC5ab2RCaWdJbnQ9dC5ab2ROdW1iZXI9dC5ab2RTdHJpbmc9dC5ab2RUeXBlPXZvaWQgMCx0Lk5FVkVSPXQudm9pZD10LnVua25vd249dC51bmlvbj10LnVuZGVmaW5lZD10LnR1cGxlPXQudHJhbnNmb3JtZXI9dC5zeW1ib2w9dC5zdHJpbmc9dC5zdHJpY3RPYmplY3Q9dC5zZXQ9dC5yZWNvcmQ9dC5wcm9taXNlPXQucHJlcHJvY2Vzcz10LnBpcGVsaW5lPXQub3N0cmluZz10Lm9wdGlvbmFsPXQub251bWJlcj10Lm9ib29sZWFuPXQub2JqZWN0PXQubnVtYmVyPXQubnVsbGFibGU9dC5udWxsPXQubmV2ZXI9dC5uYXRpdmVFbnVtPXQubmFuPXQubWFwPXQubGl0ZXJhbD10Lmxhenk9dC5pbnRlcnNlY3Rpb249dC5pbnN0YW5jZW9mPXQuZnVuY3Rpb249dC5lbnVtPXQuZWZmZWN0PXZvaWQgMCx0LmRhdGV0aW1lUmVnZXg9SSx0LmN1c3RvbT1ldjtsZXQgaT1uKDM0OCksbD1uKDYxKSxzPW4oNTM4KSxjPW4oODE4KSx1PW4oNzA5KTtjbGFzcyBke2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMuX2NhY2hlZFBhdGg9W10sdGhpcy5wYXJlbnQ9ZSx0aGlzLmRhdGE9dCx0aGlzLl9wYXRoPW4sdGhpcy5fa2V5PXJ9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fY2FjaGVkUGF0aC5sZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMuX2tleSk/dGhpcy5fY2FjaGVkUGF0aC5wdXNoKC4uLnRoaXMuX3BhdGgsLi4udGhpcy5fa2V5KTp0aGlzLl9jYWNoZWRQYXRoLnB1c2goLi4udGhpcy5fcGF0aCx0aGlzLl9rZXkpKSx0aGlzLl9jYWNoZWRQYXRofX1sZXQgZj0oZSx0KT0+e2lmKCgwLGMuaXNWYWxpZCkodCkpcmV0dXJue3N1Y2Nlc3M6ITAsZGF0YTp0LnZhbHVlfTtpZighZS5jb21tb24uaXNzdWVzLmxlbmd0aCl0aHJvdyBFcnJvcihcIlZhbGlkYXRpb24gZmFpbGVkIGJ1dCBubyBpc3N1ZXMgZGV0ZWN0ZWQuXCIpO3JldHVybntzdWNjZXNzOiExLGdldCBlcnJvcigpe2lmKHRoaXMuX2Vycm9yKXJldHVybiB0aGlzLl9lcnJvcjtsZXQgdD1uZXcgaS5ab2RFcnJvcihlLmNvbW1vbi5pc3N1ZXMpO3JldHVybiB0aGlzLl9lcnJvcj10LHRoaXMuX2Vycm9yfX19O2Z1bmN0aW9uIHAoZSl7aWYoIWUpcmV0dXJue307bGV0e2Vycm9yTWFwOnQsaW52YWxpZF90eXBlX2Vycm9yOm4scmVxdWlyZWRfZXJyb3I6cixkZXNjcmlwdGlvbjpvfT1lO2lmKHQmJihufHxyKSl0aHJvdyBFcnJvcignQ2FuXFwndCB1c2UgXCJpbnZhbGlkX3R5cGVfZXJyb3JcIiBvciBcInJlcXVpcmVkX2Vycm9yXCIgaW4gY29uanVuY3Rpb24gd2l0aCBjdXN0b20gZXJyb3IgbWFwLicpO3JldHVybiB0P3tlcnJvck1hcDp0LGRlc2NyaXB0aW9uOm99OntlcnJvck1hcDoodCxvKT0+e2xldHttZXNzYWdlOmF9PWU7cmV0dXJuXCJpbnZhbGlkX2VudW1fdmFsdWVcIj09PXQuY29kZT97bWVzc2FnZTphPz9vLmRlZmF1bHRFcnJvcn06dm9pZCAwPT09by5kYXRhP3ttZXNzYWdlOmE/P3I/P28uZGVmYXVsdEVycm9yfTpcImludmFsaWRfdHlwZVwiIT09dC5jb2RlP3ttZXNzYWdlOm8uZGVmYXVsdEVycm9yfTp7bWVzc2FnZTphPz9uPz9vLmRlZmF1bHRFcnJvcn19LGRlc2NyaXB0aW9uOm99fWNsYXNzIGh7Z2V0IGRlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZi5kZXNjcmlwdGlvbn1fZ2V0VHlwZShlKXtyZXR1cm4oMCx1LmdldFBhcnNlZFR5cGUpKGUuZGF0YSl9X2dldE9yUmV0dXJuQ3R4KGUsdCl7cmV0dXJuIHR8fHtjb21tb246ZS5wYXJlbnQuY29tbW9uLGRhdGE6ZS5kYXRhLHBhcnNlZFR5cGU6KDAsdS5nZXRQYXJzZWRUeXBlKShlLmRhdGEpLHNjaGVtYUVycm9yTWFwOnRoaXMuX2RlZi5lcnJvck1hcCxwYXRoOmUucGF0aCxwYXJlbnQ6ZS5wYXJlbnR9fV9wcm9jZXNzSW5wdXRQYXJhbXMoZSl7cmV0dXJue3N0YXR1czpuZXcgYy5QYXJzZVN0YXR1cyxjdHg6e2NvbW1vbjplLnBhcmVudC5jb21tb24sZGF0YTplLmRhdGEscGFyc2VkVHlwZTooMCx1LmdldFBhcnNlZFR5cGUpKGUuZGF0YSksc2NoZW1hRXJyb3JNYXA6dGhpcy5fZGVmLmVycm9yTWFwLHBhdGg6ZS5wYXRoLHBhcmVudDplLnBhcmVudH19fV9wYXJzZVN5bmMoZSl7bGV0IHQ9dGhpcy5fcGFyc2UoZSk7aWYoKDAsYy5pc0FzeW5jKSh0KSl0aHJvdyBFcnJvcihcIlN5bmNocm9ub3VzIHBhcnNlIGVuY291bnRlcmVkIHByb21pc2UuXCIpO3JldHVybiB0fV9wYXJzZUFzeW5jKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcGFyc2UoZSkpfXBhcnNlKGUsdCl7bGV0IG49dGhpcy5zYWZlUGFyc2UoZSx0KTtpZihuLnN1Y2Nlc3MpcmV0dXJuIG4uZGF0YTt0aHJvdyBuLmVycm9yfXNhZmVQYXJzZShlLHQpe2xldCBuPXtjb21tb246e2lzc3VlczpbXSxhc3luYzp0Py5hc3luYz8/ITEsY29udGV4dHVhbEVycm9yTWFwOnQ/LmVycm9yTWFwfSxwYXRoOnQ/LnBhdGh8fFtdLHNjaGVtYUVycm9yTWFwOnRoaXMuX2RlZi5lcnJvck1hcCxwYXJlbnQ6bnVsbCxkYXRhOmUscGFyc2VkVHlwZTooMCx1LmdldFBhcnNlZFR5cGUpKGUpfSxyPXRoaXMuX3BhcnNlU3luYyh7ZGF0YTplLHBhdGg6bi5wYXRoLHBhcmVudDpufSk7cmV0dXJuIGYobixyKX1cIn52YWxpZGF0ZVwiKGUpe2xldCB0PXtjb21tb246e2lzc3VlczpbXSxhc3luYzohIXRoaXNbXCJ+c3RhbmRhcmRcIl0uYXN5bmN9LHBhdGg6W10sc2NoZW1hRXJyb3JNYXA6dGhpcy5fZGVmLmVycm9yTWFwLHBhcmVudDpudWxsLGRhdGE6ZSxwYXJzZWRUeXBlOigwLHUuZ2V0UGFyc2VkVHlwZSkoZSl9O2lmKCF0aGlzW1wifnN0YW5kYXJkXCJdLmFzeW5jKXRyeXtsZXQgbj10aGlzLl9wYXJzZVN5bmMoe2RhdGE6ZSxwYXRoOltdLHBhcmVudDp0fSk7cmV0dXJuKDAsYy5pc1ZhbGlkKShuKT97dmFsdWU6bi52YWx1ZX06e2lzc3Vlczp0LmNvbW1vbi5pc3N1ZXN9fWNhdGNoKGUpe2U/Lm1lc3NhZ2U/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKFwiZW5jb3VudGVyZWRcIikmJih0aGlzW1wifnN0YW5kYXJkXCJdLmFzeW5jPSEwKSx0LmNvbW1vbj17aXNzdWVzOltdLGFzeW5jOiEwfX1yZXR1cm4gdGhpcy5fcGFyc2VBc3luYyh7ZGF0YTplLHBhdGg6W10scGFyZW50OnR9KS50aGVuKGU9PigwLGMuaXNWYWxpZCkoZSk/e3ZhbHVlOmUudmFsdWV9Ontpc3N1ZXM6dC5jb21tb24uaXNzdWVzfSl9YXN5bmMgcGFyc2VBc3luYyhlLHQpe2xldCBuPWF3YWl0IHRoaXMuc2FmZVBhcnNlQXN5bmMoZSx0KTtpZihuLnN1Y2Nlc3MpcmV0dXJuIG4uZGF0YTt0aHJvdyBuLmVycm9yfWFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsdCl7bGV0IG49e2NvbW1vbjp7aXNzdWVzOltdLGNvbnRleHR1YWxFcnJvck1hcDp0Py5lcnJvck1hcCxhc3luYzohMH0scGF0aDp0Py5wYXRofHxbXSxzY2hlbWFFcnJvck1hcDp0aGlzLl9kZWYuZXJyb3JNYXAscGFyZW50Om51bGwsZGF0YTplLHBhcnNlZFR5cGU6KDAsdS5nZXRQYXJzZWRUeXBlKShlKX0scj10aGlzLl9wYXJzZSh7ZGF0YTplLHBhdGg6bi5wYXRoLHBhcmVudDpufSk7cmV0dXJuIGYobixhd2FpdCAoKDAsYy5pc0FzeW5jKShyKT9yOlByb21pc2UucmVzb2x2ZShyKSkpfXJlZmluZShlLHQpe3JldHVybiB0aGlzLl9yZWZpbmVtZW50KChuLHIpPT57bGV0IG89ZShuKSxhPSgpPT5yLmFkZElzc3VlKHtjb2RlOmkuWm9kSXNzdWVDb2RlLmN1c3RvbSwuLi5cInN0cmluZ1wiPT10eXBlb2YgdHx8dm9pZCAwPT09dD97bWVzc2FnZTp0fTpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH0pO3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlJiZvIGluc3RhbmNlb2YgUHJvbWlzZT9vLnRoZW4oZT0+ISFlfHwoYSgpLCExKSk6ISFvfHwoYSgpLCExKX0pfXJlZmluZW1lbnQoZSx0KXtyZXR1cm4gdGhpcy5fcmVmaW5lbWVudCgobixyKT0+ISFlKG4pfHwoci5hZGRJc3N1ZShcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QobixyKTp0KSwhMSkpfV9yZWZpbmVtZW50KGUpe3JldHVybiBuZXcgZXMoe3NjaGVtYTp0aGlzLHR5cGVOYW1lOnIuWm9kRWZmZWN0cyxlZmZlY3Q6e3R5cGU6XCJyZWZpbmVtZW50XCIscmVmaW5lbWVudDplfX0pfXN1cGVyUmVmaW5lKGUpe3JldHVybiB0aGlzLl9yZWZpbmVtZW50KGUpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc3BhPXRoaXMuc2FmZVBhcnNlQXN5bmMsdGhpcy5fZGVmPWUsdGhpcy5wYXJzZT10aGlzLnBhcnNlLmJpbmQodGhpcyksdGhpcy5zYWZlUGFyc2U9dGhpcy5zYWZlUGFyc2UuYmluZCh0aGlzKSx0aGlzLnBhcnNlQXN5bmM9dGhpcy5wYXJzZUFzeW5jLmJpbmQodGhpcyksdGhpcy5zYWZlUGFyc2VBc3luYz10aGlzLnNhZmVQYXJzZUFzeW5jLmJpbmQodGhpcyksdGhpcy5zcGE9dGhpcy5zcGEuYmluZCh0aGlzKSx0aGlzLnJlZmluZT10aGlzLnJlZmluZS5iaW5kKHRoaXMpLHRoaXMucmVmaW5lbWVudD10aGlzLnJlZmluZW1lbnQuYmluZCh0aGlzKSx0aGlzLnN1cGVyUmVmaW5lPXRoaXMuc3VwZXJSZWZpbmUuYmluZCh0aGlzKSx0aGlzLm9wdGlvbmFsPXRoaXMub3B0aW9uYWwuYmluZCh0aGlzKSx0aGlzLm51bGxhYmxlPXRoaXMubnVsbGFibGUuYmluZCh0aGlzKSx0aGlzLm51bGxpc2g9dGhpcy5udWxsaXNoLmJpbmQodGhpcyksdGhpcy5hcnJheT10aGlzLmFycmF5LmJpbmQodGhpcyksdGhpcy5wcm9taXNlPXRoaXMucHJvbWlzZS5iaW5kKHRoaXMpLHRoaXMub3I9dGhpcy5vci5iaW5kKHRoaXMpLHRoaXMuYW5kPXRoaXMuYW5kLmJpbmQodGhpcyksdGhpcy50cmFuc2Zvcm09dGhpcy50cmFuc2Zvcm0uYmluZCh0aGlzKSx0aGlzLmJyYW5kPXRoaXMuYnJhbmQuYmluZCh0aGlzKSx0aGlzLmRlZmF1bHQ9dGhpcy5kZWZhdWx0LmJpbmQodGhpcyksdGhpcy5jYXRjaD10aGlzLmNhdGNoLmJpbmQodGhpcyksdGhpcy5kZXNjcmliZT10aGlzLmRlc2NyaWJlLmJpbmQodGhpcyksdGhpcy5waXBlPXRoaXMucGlwZS5iaW5kKHRoaXMpLHRoaXMucmVhZG9ubHk9dGhpcy5yZWFkb25seS5iaW5kKHRoaXMpLHRoaXMuaXNOdWxsYWJsZT10aGlzLmlzTnVsbGFibGUuYmluZCh0aGlzKSx0aGlzLmlzT3B0aW9uYWw9dGhpcy5pc09wdGlvbmFsLmJpbmQodGhpcyksdGhpc1tcIn5zdGFuZGFyZFwiXT17dmVyc2lvbjoxLHZlbmRvcjpcInpvZFwiLHZhbGlkYXRlOmU9PnRoaXNbXCJ+dmFsaWRhdGVcIl0oZSl9fW9wdGlvbmFsKCl7cmV0dXJuIGVjLmNyZWF0ZSh0aGlzLHRoaXMuX2RlZil9bnVsbGFibGUoKXtyZXR1cm4gZXUuY3JlYXRlKHRoaXMsdGhpcy5fZGVmKX1udWxsaXNoKCl7cmV0dXJuIHRoaXMubnVsbGFibGUoKS5vcHRpb25hbCgpfWFycmF5KCl7cmV0dXJuIFYuY3JlYXRlKHRoaXMpfXByb21pc2UoKXtyZXR1cm4gZWwuY3JlYXRlKHRoaXMsdGhpcy5fZGVmKX1vcihlKXtyZXR1cm4gVy5jcmVhdGUoW3RoaXMsZV0sdGhpcy5fZGVmKX1hbmQoZSl7cmV0dXJuIFguY3JlYXRlKHRoaXMsZSx0aGlzLl9kZWYpfXRyYW5zZm9ybShlKXtyZXR1cm4gbmV3IGVzKHsuLi5wKHRoaXMuX2RlZiksc2NoZW1hOnRoaXMsdHlwZU5hbWU6ci5ab2RFZmZlY3RzLGVmZmVjdDp7dHlwZTpcInRyYW5zZm9ybVwiLHRyYW5zZm9ybTplfX0pfWRlZmF1bHQoZSl7cmV0dXJuIG5ldyBlZCh7Li4ucCh0aGlzLl9kZWYpLGlubmVyVHlwZTp0aGlzLGRlZmF1bHRWYWx1ZTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6KCk9PmUsdHlwZU5hbWU6ci5ab2REZWZhdWx0fSl9YnJhbmQoKXtyZXR1cm4gbmV3IGVoKHt0eXBlTmFtZTpyLlpvZEJyYW5kZWQsdHlwZTp0aGlzLC4uLnAodGhpcy5fZGVmKX0pfWNhdGNoKGUpe3JldHVybiBuZXcgZWYoey4uLnAodGhpcy5fZGVmKSxpbm5lclR5cGU6dGhpcyxjYXRjaFZhbHVlOlwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTooKT0+ZSx0eXBlTmFtZTpyLlpvZENhdGNofSl9ZGVzY3JpYmUoZSl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHsuLi50aGlzLl9kZWYsZGVzY3JpcHRpb246ZX0pfXBpcGUoZSl7cmV0dXJuIGVtLmNyZWF0ZSh0aGlzLGUpfXJlYWRvbmx5KCl7cmV0dXJuIGVnLmNyZWF0ZSh0aGlzKX1pc09wdGlvbmFsKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKHZvaWQgMCkuc3VjY2Vzc31pc051bGxhYmxlKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKG51bGwpLnN1Y2Nlc3N9fXQuWm9kVHlwZT1oLHQuU2NoZW1hPWgsdC5ab2RTY2hlbWE9aDtsZXQgbT0vXmNbXlxccy1dezgsfSQvaSxnPS9eWzAtOWEtel0rJC8seT0vXlswLTlBLUhKS01OUC1UVi1aXXsyNn0kL2ksdj0vXlswLTlhLWZBLUZdezh9XFxiLVswLTlhLWZBLUZdezR9XFxiLVswLTlhLWZBLUZdezR9XFxiLVswLTlhLWZBLUZdezR9XFxiLVswLTlhLWZBLUZdezEyfSQvaSxiPS9eW2EtejAtOV8tXXsyMX0kL2ksQT0vXltBLVphLXowLTktX10rXFwuW0EtWmEtejAtOS1fXStcXC5bQS1aYS16MC05LV9dKiQvLHg9L15bLStdP1AoPyEkKSg/Oig/OlstK10/XFxkK1kpfCg/OlstK10/XFxkK1suLF1cXGQrWSQpKT8oPzooPzpbLStdP1xcZCtNKXwoPzpbLStdP1xcZCtbLixdXFxkK00kKSk/KD86KD86Wy0rXT9cXGQrVyl8KD86Wy0rXT9cXGQrWy4sXVxcZCtXJCkpPyg/Oig/OlstK10/XFxkK0QpfCg/OlstK10/XFxkK1suLF1cXGQrRCQpKT8oPzpUKD89W1xcZCstXSkoPzooPzpbLStdP1xcZCtIKXwoPzpbLStdP1xcZCtbLixdXFxkK0gkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/OlstK10/XFxkKyg/OlsuLF1cXGQrKT9TKT8pPz8kLyx3PS9eKD8hXFwuKSg/IS4qXFwuXFwuKShbQS1aMC05XycrXFwtXFwuXSopW0EtWjAtOV8rLV1AKFtBLVowLTldW0EtWjAtOVxcLV0qXFwuKStbQS1aXXsyLH0kL2ksQz0vXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKSQvLF89L14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC8oM1swLTJdfFsxMl0/WzAtOV0pJC8saz0vXigoWzAtOWEtZkEtRl17MSw0fTopezcsN31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdezAsNH0pezAsNH0lWzAtOWEtekEtWl17MSx9fDo6KGZmZmYoOjB7MSw0fSl7MCwxfTopezAsMX0oKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7MywzfSgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFwuKXszLDN9KDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKSkkLyxFPS9eKChbMC05YS1mQS1GXXsxLDR9Oil7Nyw3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KXxmZTgwOig6WzAtOWEtZkEtRl17MCw0fSl7MCw0fSVbMC05YS16QS1aXXsxLH18OjooZmZmZig6MHsxLDR9KXswLDF9Oil7MCwxfSgoMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFwuKXszLDN9KDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH06KCgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSlcXC4pezMsM30oMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pKVxcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC8saj0vXihbMC05YS16QS1aKy9dezR9KSooKFswLTlhLXpBLVorL117Mn09PSl8KFswLTlhLXpBLVorL117M309KSk/JC8sUz0vXihbMC05YS16QS1aLV9dezR9KSooKFswLTlhLXpBLVotX117Mn0oPT0pPyl8KFswLTlhLXpBLVotX117M30oPSk/KSk/JC8sTz1cIigoXFxcXGRcXFxcZFsyNDY4XVswNDhdfFxcXFxkXFxcXGRbMTM1NzldWzI2XXxcXFxcZFxcXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxcXGR7NH0tKCgwWzEzNTc4XXwxWzAyXSktKDBbMS05XXxbMTJdXFxcXGR8M1swMV0pfCgwWzQ2OV18MTEpLSgwWzEtOV18WzEyXVxcXFxkfDMwKXwoMDIpLSgwWzEtOV18MVxcXFxkfDJbMC04XSkpKVwiLEI9UmVnRXhwKGBeJHtPfSRgKTtmdW5jdGlvbiBQKGUpe2xldCB0PVwiWzAtNV1cXFxcZFwiO2UucHJlY2lzaW9uP3Q9YCR7dH1cXFxcLlxcXFxkeyR7ZS5wcmVjaXNpb259fWA6bnVsbD09ZS5wcmVjaXNpb24mJih0PWAke3R9KFxcXFwuXFxcXGQrKT9gKTtsZXQgbj1lLnByZWNpc2lvbj9cIitcIjpcIj9cIjtyZXR1cm5gKFswMV1cXFxcZHwyWzAtM10pOlswLTVdXFxcXGQoOiR7dH0pJHtufWB9ZnVuY3Rpb24gSShlKXtsZXQgdD1gJHtPfVQke1AoZSl9YCxuPVtdO3JldHVybiBuLnB1c2goZS5sb2NhbD9cIlo/XCI6XCJaXCIpLGUub2Zmc2V0JiZuLnB1c2goXCIoWystXVxcXFxkezJ9Oj9cXFxcZHsyfSlcIiksdD1gJHt0fSgke24uam9pbihcInxcIil9KWAsUmVnRXhwKGBeJHt0fSRgKX1jbGFzcyBUIGV4dGVuZHMgaHtfcGFyc2UoZSl7dmFyIHQsbixyLG87bGV0IGw7aWYodGhpcy5fZGVmLmNvZXJjZSYmKGUuZGF0YT1TdHJpbmcoZS5kYXRhKSksdGhpcy5fZ2V0VHlwZShlKSE9PXUuWm9kUGFyc2VkVHlwZS5zdHJpbmcpe2xldCB0PXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO3JldHVybigwLGMuYWRkSXNzdWVUb0NvbnRleHQpKHQse2NvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLGV4cGVjdGVkOnUuWm9kUGFyc2VkVHlwZS5zdHJpbmcscmVjZWl2ZWQ6dC5wYXJzZWRUeXBlfSksYy5JTlZBTElEfWxldCBzPW5ldyBjLlBhcnNlU3RhdHVzO2ZvcihsZXQgZCBvZiB0aGlzLl9kZWYuY2hlY2tzKWlmKFwibWluXCI9PT1kLmtpbmQpZS5kYXRhLmxlbmd0aDxkLnZhbHVlJiYobD10aGlzLl9nZXRPclJldHVybkN0eChlLGwpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKGwse2NvZGU6aS5ab2RJc3N1ZUNvZGUudG9vX3NtYWxsLG1pbmltdW06ZC52YWx1ZSx0eXBlOlwic3RyaW5nXCIsaW5jbHVzaXZlOiEwLGV4YWN0OiExLG1lc3NhZ2U6ZC5tZXNzYWdlfSkscy5kaXJ0eSgpKTtlbHNlIGlmKFwibWF4XCI9PT1kLmtpbmQpZS5kYXRhLmxlbmd0aD5kLnZhbHVlJiYobD10aGlzLl9nZXRPclJldHVybkN0eChlLGwpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKGwse2NvZGU6aS5ab2RJc3N1ZUNvZGUudG9vX2JpZyxtYXhpbXVtOmQudmFsdWUsdHlwZTpcInN0cmluZ1wiLGluY2x1c2l2ZTohMCxleGFjdDohMSxtZXNzYWdlOmQubWVzc2FnZX0pLHMuZGlydHkoKSk7ZWxzZSBpZihcImxlbmd0aFwiPT09ZC5raW5kKXtsZXQgdD1lLmRhdGEubGVuZ3RoPmQudmFsdWUsbj1lLmRhdGEubGVuZ3RoPGQudmFsdWU7KHR8fG4pJiYobD10aGlzLl9nZXRPclJldHVybkN0eChlLGwpLHQ/KDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkobCx7Y29kZTppLlpvZElzc3VlQ29kZS50b29fYmlnLG1heGltdW06ZC52YWx1ZSx0eXBlOlwic3RyaW5nXCIsaW5jbHVzaXZlOiEwLGV4YWN0OiEwLG1lc3NhZ2U6ZC5tZXNzYWdlfSk6biYmKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkobCx7Y29kZTppLlpvZElzc3VlQ29kZS50b29fc21hbGwsbWluaW11bTpkLnZhbHVlLHR5cGU6XCJzdHJpbmdcIixpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsbWVzc2FnZTpkLm1lc3NhZ2V9KSxzLmRpcnR5KCkpfWVsc2UgaWYoXCJlbWFpbFwiPT09ZC5raW5kKXcudGVzdChlLmRhdGEpfHwobD10aGlzLl9nZXRPclJldHVybkN0eChlLGwpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKGwse3ZhbGlkYXRpb246XCJlbWFpbFwiLGNvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsbWVzc2FnZTpkLm1lc3NhZ2V9KSxzLmRpcnR5KCkpO2Vsc2UgaWYoXCJlbW9qaVwiPT09ZC5raW5kKWF8fChhPVJlZ0V4cChcIl4oXFxcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfXxcXFxccHtFbW9qaV9Db21wb25lbnR9KSskXCIsXCJ1XCIpKSxhLnRlc3QoZS5kYXRhKXx8KGw9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxsKSwoMCxjLmFkZElzc3VlVG9Db250ZXh0KShsLHt2YWxpZGF0aW9uOlwiZW1vamlcIixjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6ZC5tZXNzYWdlfSkscy5kaXJ0eSgpKTtlbHNlIGlmKFwidXVpZFwiPT09ZC5raW5kKXYudGVzdChlLmRhdGEpfHwobD10aGlzLl9nZXRPclJldHVybkN0eChlLGwpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKGwse3ZhbGlkYXRpb246XCJ1dWlkXCIsY29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOmQubWVzc2FnZX0pLHMuZGlydHkoKSk7ZWxzZSBpZihcIm5hbm9pZFwiPT09ZC5raW5kKWIudGVzdChlLmRhdGEpfHwobD10aGlzLl9nZXRPclJldHVybkN0eChlLGwpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKGwse3ZhbGlkYXRpb246XCJuYW5vaWRcIixjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6ZC5tZXNzYWdlfSkscy5kaXJ0eSgpKTtlbHNlIGlmKFwiY3VpZFwiPT09ZC5raW5kKW0udGVzdChlLmRhdGEpfHwobD10aGlzLl9nZXRPclJldHVybkN0eChlLGwpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKGwse3ZhbGlkYXRpb246XCJjdWlkXCIsY29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOmQubWVzc2FnZX0pLHMuZGlydHkoKSk7ZWxzZSBpZihcImN1aWQyXCI9PT1kLmtpbmQpZy50ZXN0KGUuZGF0YSl8fChsPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsbCksKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkobCx7dmFsaWRhdGlvbjpcImN1aWQyXCIsY29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOmQubWVzc2FnZX0pLHMuZGlydHkoKSk7ZWxzZSBpZihcInVsaWRcIj09PWQua2luZCl5LnRlc3QoZS5kYXRhKXx8KGw9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxsKSwoMCxjLmFkZElzc3VlVG9Db250ZXh0KShsLHt2YWxpZGF0aW9uOlwidWxpZFwiLGNvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsbWVzc2FnZTpkLm1lc3NhZ2V9KSxzLmRpcnR5KCkpO2Vsc2UgaWYoXCJ1cmxcIj09PWQua2luZCl0cnl7bmV3IFVSTChlLmRhdGEpfWNhdGNoe2w9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxsKSwoMCxjLmFkZElzc3VlVG9Db250ZXh0KShsLHt2YWxpZGF0aW9uOlwidXJsXCIsY29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOmQubWVzc2FnZX0pLHMuZGlydHkoKX1lbHNlXCJyZWdleFwiPT09ZC5raW5kPyhkLnJlZ2V4Lmxhc3RJbmRleD0wLGQucmVnZXgudGVzdChlLmRhdGEpfHwobD10aGlzLl9nZXRPclJldHVybkN0eChlLGwpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKGwse3ZhbGlkYXRpb246XCJyZWdleFwiLGNvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsbWVzc2FnZTpkLm1lc3NhZ2V9KSxzLmRpcnR5KCkpKTpcInRyaW1cIj09PWQua2luZD9lLmRhdGE9ZS5kYXRhLnRyaW0oKTpcImluY2x1ZGVzXCI9PT1kLmtpbmQ/ZS5kYXRhLmluY2x1ZGVzKGQudmFsdWUsZC5wb3NpdGlvbil8fChsPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsbCksKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkobCx7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyx2YWxpZGF0aW9uOntpbmNsdWRlczpkLnZhbHVlLHBvc2l0aW9uOmQucG9zaXRpb259LG1lc3NhZ2U6ZC5tZXNzYWdlfSkscy5kaXJ0eSgpKTpcInRvTG93ZXJDYXNlXCI9PT1kLmtpbmQ/ZS5kYXRhPWUuZGF0YS50b0xvd2VyQ2FzZSgpOlwidG9VcHBlckNhc2VcIj09PWQua2luZD9lLmRhdGE9ZS5kYXRhLnRvVXBwZXJDYXNlKCk6XCJzdGFydHNXaXRoXCI9PT1kLmtpbmQ/ZS5kYXRhLnN0YXJ0c1dpdGgoZC52YWx1ZSl8fChsPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsbCksKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkobCx7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyx2YWxpZGF0aW9uOntzdGFydHNXaXRoOmQudmFsdWV9LG1lc3NhZ2U6ZC5tZXNzYWdlfSkscy5kaXJ0eSgpKTpcImVuZHNXaXRoXCI9PT1kLmtpbmQ/ZS5kYXRhLmVuZHNXaXRoKGQudmFsdWUpfHwobD10aGlzLl9nZXRPclJldHVybkN0eChlLGwpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKGwse2NvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsdmFsaWRhdGlvbjp7ZW5kc1dpdGg6ZC52YWx1ZX0sbWVzc2FnZTpkLm1lc3NhZ2V9KSxzLmRpcnR5KCkpOlwiZGF0ZXRpbWVcIj09PWQua2luZD9JKGQpLnRlc3QoZS5kYXRhKXx8KGw9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxsKSwoMCxjLmFkZElzc3VlVG9Db250ZXh0KShsLHtjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLHZhbGlkYXRpb246XCJkYXRldGltZVwiLG1lc3NhZ2U6ZC5tZXNzYWdlfSkscy5kaXJ0eSgpKTpcImRhdGVcIj09PWQua2luZD9CLnRlc3QoZS5kYXRhKXx8KGw9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxsKSwoMCxjLmFkZElzc3VlVG9Db250ZXh0KShsLHtjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLHZhbGlkYXRpb246XCJkYXRlXCIsbWVzc2FnZTpkLm1lc3NhZ2V9KSxzLmRpcnR5KCkpOlwidGltZVwiPT09ZC5raW5kP1JlZ0V4cChgXiR7UChkKX0kYCkudGVzdChlLmRhdGEpfHwobD10aGlzLl9nZXRPclJldHVybkN0eChlLGwpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKGwse2NvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsdmFsaWRhdGlvbjpcInRpbWVcIixtZXNzYWdlOmQubWVzc2FnZX0pLHMuZGlydHkoKSk6XCJkdXJhdGlvblwiPT09ZC5raW5kP3gudGVzdChlLmRhdGEpfHwobD10aGlzLl9nZXRPclJldHVybkN0eChlLGwpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKGwse3ZhbGlkYXRpb246XCJkdXJhdGlvblwiLGNvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsbWVzc2FnZTpkLm1lc3NhZ2V9KSxzLmRpcnR5KCkpOlwiaXBcIj09PWQua2luZD8odD1lLmRhdGEsISgoXCJ2NFwiPT09KG49ZC52ZXJzaW9uKXx8IW4pJiZDLnRlc3QodCl8fChcInY2XCI9PT1ufHwhbikmJmsudGVzdCh0KSkmJjEmJihsPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsbCksKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkobCx7dmFsaWRhdGlvbjpcImlwXCIsY29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOmQubWVzc2FnZX0pLHMuZGlydHkoKSkpOlwiand0XCI9PT1kLmtpbmQ/IWZ1bmN0aW9uKGUsdCl7aWYoIUEudGVzdChlKSlyZXR1cm4hMTt0cnl7bGV0W25dPWUuc3BsaXQoXCIuXCIpO2lmKCFuKXJldHVybiExO2xldCByPW4ucmVwbGFjZSgvLS9nLFwiK1wiKS5yZXBsYWNlKC9fL2csXCIvXCIpLnBhZEVuZChuLmxlbmd0aCsoNC1uLmxlbmd0aCU0KSU0LFwiPVwiKSxvPUpTT04ucGFyc2UoYXRvYihyKSk7aWYoXCJvYmplY3RcIiE9dHlwZW9mIG98fG51bGw9PT1vfHxcInR5cFwiaW4gbyYmbz8udHlwIT09XCJKV1RcInx8IW8uYWxnfHx0JiZvLmFsZyE9PXQpcmV0dXJuITE7cmV0dXJuITB9Y2F0Y2h7cmV0dXJuITF9fShlLmRhdGEsZC5hbGcpJiYobD10aGlzLl9nZXRPclJldHVybkN0eChlLGwpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKGwse3ZhbGlkYXRpb246XCJqd3RcIixjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6ZC5tZXNzYWdlfSkscy5kaXJ0eSgpKTpcImNpZHJcIj09PWQua2luZD8ocj1lLmRhdGEsISgoXCJ2NFwiPT09KG89ZC52ZXJzaW9uKXx8IW8pJiZfLnRlc3Qocil8fChcInY2XCI9PT1vfHwhbykmJkUudGVzdChyKSkmJjEmJihsPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsbCksKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkobCx7dmFsaWRhdGlvbjpcImNpZHJcIixjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6ZC5tZXNzYWdlfSkscy5kaXJ0eSgpKSk6XCJiYXNlNjRcIj09PWQua2luZD9qLnRlc3QoZS5kYXRhKXx8KGw9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxsKSwoMCxjLmFkZElzc3VlVG9Db250ZXh0KShsLHt2YWxpZGF0aW9uOlwiYmFzZTY0XCIsY29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOmQubWVzc2FnZX0pLHMuZGlydHkoKSk6XCJiYXNlNjR1cmxcIj09PWQua2luZD9TLnRlc3QoZS5kYXRhKXx8KGw9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxsKSwoMCxjLmFkZElzc3VlVG9Db250ZXh0KShsLHt2YWxpZGF0aW9uOlwiYmFzZTY0dXJsXCIsY29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOmQubWVzc2FnZX0pLHMuZGlydHkoKSk6dS51dGlsLmFzc2VydE5ldmVyKGQpO3JldHVybntzdGF0dXM6cy52YWx1ZSx2YWx1ZTplLmRhdGF9fV9yZWdleChlLHQsbil7cmV0dXJuIHRoaXMucmVmaW5lbWVudCh0PT5lLnRlc3QodCkse3ZhbGlkYXRpb246dCxjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLC4uLnMuZXJyb3JVdGlsLmVyclRvT2JqKG4pfSl9X2FkZENoZWNrKGUpe3JldHVybiBuZXcgVCh7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyxlXX0pfWVtYWlsKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcImVtYWlsXCIsLi4ucy5lcnJvclV0aWwuZXJyVG9PYmooZSl9KX11cmwoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOlwidXJsXCIsLi4ucy5lcnJvclV0aWwuZXJyVG9PYmooZSl9KX1lbW9qaShlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJlbW9qaVwiLC4uLnMuZXJyb3JVdGlsLmVyclRvT2JqKGUpfSl9dXVpZChlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJ1dWlkXCIsLi4ucy5lcnJvclV0aWwuZXJyVG9PYmooZSl9KX1uYW5vaWQoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOlwibmFub2lkXCIsLi4ucy5lcnJvclV0aWwuZXJyVG9PYmooZSl9KX1jdWlkKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcImN1aWRcIiwuLi5zLmVycm9yVXRpbC5lcnJUb09iaihlKX0pfWN1aWQyKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcImN1aWQyXCIsLi4ucy5lcnJvclV0aWwuZXJyVG9PYmooZSl9KX11bGlkKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcInVsaWRcIiwuLi5zLmVycm9yVXRpbC5lcnJUb09iaihlKX0pfWJhc2U2NChlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJiYXNlNjRcIiwuLi5zLmVycm9yVXRpbC5lcnJUb09iaihlKX0pfWJhc2U2NHVybChlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJiYXNlNjR1cmxcIiwuLi5zLmVycm9yVXRpbC5lcnJUb09iaihlKX0pfWp3dChlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJqd3RcIiwuLi5zLmVycm9yVXRpbC5lcnJUb09iaihlKX0pfWlwKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcImlwXCIsLi4ucy5lcnJvclV0aWwuZXJyVG9PYmooZSl9KX1jaWRyKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcImNpZHJcIiwuLi5zLmVycm9yVXRpbC5lcnJUb09iaihlKX0pfWRhdGV0aW1lKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP3RoaXMuX2FkZENoZWNrKHtraW5kOlwiZGF0ZXRpbWVcIixwcmVjaXNpb246bnVsbCxvZmZzZXQ6ITEsbG9jYWw6ITEsbWVzc2FnZTplfSk6dGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJkYXRldGltZVwiLHByZWNpc2lvbjp2b2lkIDA9PT1lPy5wcmVjaXNpb24/bnVsbDplPy5wcmVjaXNpb24sb2Zmc2V0OmU/Lm9mZnNldD8/ITEsbG9jYWw6ZT8ubG9jYWw/PyExLC4uLnMuZXJyb3JVdGlsLmVyclRvT2JqKGU/Lm1lc3NhZ2UpfSl9ZGF0ZShlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJkYXRlXCIsbWVzc2FnZTplfSl9dGltZShlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT90aGlzLl9hZGRDaGVjayh7a2luZDpcInRpbWVcIixwcmVjaXNpb246bnVsbCxtZXNzYWdlOmV9KTp0aGlzLl9hZGRDaGVjayh7a2luZDpcInRpbWVcIixwcmVjaXNpb246dm9pZCAwPT09ZT8ucHJlY2lzaW9uP251bGw6ZT8ucHJlY2lzaW9uLC4uLnMuZXJyb3JVdGlsLmVyclRvT2JqKGU/Lm1lc3NhZ2UpfSl9ZHVyYXRpb24oZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOlwiZHVyYXRpb25cIiwuLi5zLmVycm9yVXRpbC5lcnJUb09iaihlKX0pfXJlZ2V4KGUsdCl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOlwicmVnZXhcIixyZWdleDplLC4uLnMuZXJyb3JVdGlsLmVyclRvT2JqKHQpfSl9aW5jbHVkZXMoZSx0KXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJpbmNsdWRlc1wiLHZhbHVlOmUscG9zaXRpb246dD8ucG9zaXRpb24sLi4ucy5lcnJvclV0aWwuZXJyVG9PYmoodD8ubWVzc2FnZSl9KX1zdGFydHNXaXRoKGUsdCl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOlwic3RhcnRzV2l0aFwiLHZhbHVlOmUsLi4ucy5lcnJvclV0aWwuZXJyVG9PYmoodCl9KX1lbmRzV2l0aChlLHQpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcImVuZHNXaXRoXCIsdmFsdWU6ZSwuLi5zLmVycm9yVXRpbC5lcnJUb09iaih0KX0pfW1pbihlLHQpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcIm1pblwiLHZhbHVlOmUsLi4ucy5lcnJvclV0aWwuZXJyVG9PYmoodCl9KX1tYXgoZSx0KXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJtYXhcIix2YWx1ZTplLC4uLnMuZXJyb3JVdGlsLmVyclRvT2JqKHQpfSl9bGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOlwibGVuZ3RoXCIsdmFsdWU6ZSwuLi5zLmVycm9yVXRpbC5lcnJUb09iaih0KX0pfW5vbmVtcHR5KGUpe3JldHVybiB0aGlzLm1pbigxLHMuZXJyb3JVdGlsLmVyclRvT2JqKGUpKX10cmltKCl7cmV0dXJuIG5ldyBUKHsuLi50aGlzLl9kZWYsY2hlY2tzOlsuLi50aGlzLl9kZWYuY2hlY2tzLHtraW5kOlwidHJpbVwifV19KX10b0xvd2VyQ2FzZSgpe3JldHVybiBuZXcgVCh7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyx7a2luZDpcInRvTG93ZXJDYXNlXCJ9XX0pfXRvVXBwZXJDYXNlKCl7cmV0dXJuIG5ldyBUKHsuLi50aGlzLl9kZWYsY2hlY2tzOlsuLi50aGlzLl9kZWYuY2hlY2tzLHtraW5kOlwidG9VcHBlckNhc2VcIn1dfSl9Z2V0IGlzRGF0ZXRpbWUoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5cImRhdGV0aW1lXCI9PT1lLmtpbmQpfWdldCBpc0RhdGUoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5cImRhdGVcIj09PWUua2luZCl9Z2V0IGlzVGltZSgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKGU9PlwidGltZVwiPT09ZS5raW5kKX1nZXQgaXNEdXJhdGlvbigpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKGU9PlwiZHVyYXRpb25cIj09PWUua2luZCl9Z2V0IGlzRW1haWwoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5cImVtYWlsXCI9PT1lLmtpbmQpfWdldCBpc1VSTCgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKGU9PlwidXJsXCI9PT1lLmtpbmQpfWdldCBpc0Vtb2ppKCl7cmV0dXJuISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoZT0+XCJlbW9qaVwiPT09ZS5raW5kKX1nZXQgaXNVVUlEKCl7cmV0dXJuISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoZT0+XCJ1dWlkXCI9PT1lLmtpbmQpfWdldCBpc05BTk9JRCgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKGU9PlwibmFub2lkXCI9PT1lLmtpbmQpfWdldCBpc0NVSUQoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5cImN1aWRcIj09PWUua2luZCl9Z2V0IGlzQ1VJRDIoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5cImN1aWQyXCI9PT1lLmtpbmQpfWdldCBpc1VMSUQoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5cInVsaWRcIj09PWUua2luZCl9Z2V0IGlzSVAoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5cImlwXCI9PT1lLmtpbmQpfWdldCBpc0NJRFIoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5cImNpZHJcIj09PWUua2luZCl9Z2V0IGlzQmFzZTY0KCl7cmV0dXJuISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoZT0+XCJiYXNlNjRcIj09PWUua2luZCl9Z2V0IGlzQmFzZTY0dXJsKCl7cmV0dXJuISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoZT0+XCJiYXNlNjR1cmxcIj09PWUua2luZCl9Z2V0IG1pbkxlbmd0aCgpe2xldCBlPW51bGw7Zm9yKGxldCB0IG9mIHRoaXMuX2RlZi5jaGVja3MpXCJtaW5cIj09PXQua2luZCYmKG51bGw9PT1lfHx0LnZhbHVlPmUpJiYoZT10LnZhbHVlKTtyZXR1cm4gZX1nZXQgbWF4TGVuZ3RoKCl7bGV0IGU9bnVsbDtmb3IobGV0IHQgb2YgdGhpcy5fZGVmLmNoZWNrcylcIm1heFwiPT09dC5raW5kJiYobnVsbD09PWV8fHQudmFsdWU8ZSkmJihlPXQudmFsdWUpO3JldHVybiBlfX10LlpvZFN0cmluZz1ULFQuY3JlYXRlPWU9Pm5ldyBUKHtjaGVja3M6W10sdHlwZU5hbWU6ci5ab2RTdHJpbmcsY29lcmNlOmU/LmNvZXJjZT8/ITEsLi4ucChlKX0pO2NsYXNzIHogZXh0ZW5kcyBoe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm1pbj10aGlzLmd0ZSx0aGlzLm1heD10aGlzLmx0ZSx0aGlzLnN0ZXA9dGhpcy5tdWx0aXBsZU9mfV9wYXJzZShlKXtsZXQgdDtpZih0aGlzLl9kZWYuY29lcmNlJiYoZS5kYXRhPU51bWJlcihlLmRhdGEpKSx0aGlzLl9nZXRUeXBlKGUpIT09dS5ab2RQYXJzZWRUeXBlLm51bWJlcil7bGV0IHQ9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7cmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6dS5ab2RQYXJzZWRUeXBlLm51bWJlcixyZWNlaXZlZDp0LnBhcnNlZFR5cGV9KSxjLklOVkFMSUR9bGV0IG49bmV3IGMuUGFyc2VTdGF0dXM7Zm9yKGxldCByIG9mIHRoaXMuX2RlZi5jaGVja3MpXCJpbnRcIj09PXIua2luZD91LnV0aWwuaXNJbnRlZ2VyKGUuZGF0YSl8fCh0PXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsdCksKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6XCJpbnRlZ2VyXCIscmVjZWl2ZWQ6XCJmbG9hdFwiLG1lc3NhZ2U6ci5tZXNzYWdlfSksbi5kaXJ0eSgpKTpcIm1pblwiPT09ci5raW5kPyhyLmluY2x1c2l2ZT9lLmRhdGE8ci52YWx1ZTplLmRhdGE8PXIudmFsdWUpJiYodD10aGlzLl9nZXRPclJldHVybkN0eChlLHQpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKHQse2NvZGU6aS5ab2RJc3N1ZUNvZGUudG9vX3NtYWxsLG1pbmltdW06ci52YWx1ZSx0eXBlOlwibnVtYmVyXCIsaW5jbHVzaXZlOnIuaW5jbHVzaXZlLGV4YWN0OiExLG1lc3NhZ2U6ci5tZXNzYWdlfSksbi5kaXJ0eSgpKTpcIm1heFwiPT09ci5raW5kPyhyLmluY2x1c2l2ZT9lLmRhdGE+ci52YWx1ZTplLmRhdGE+PXIudmFsdWUpJiYodD10aGlzLl9nZXRPclJldHVybkN0eChlLHQpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKHQse2NvZGU6aS5ab2RJc3N1ZUNvZGUudG9vX2JpZyxtYXhpbXVtOnIudmFsdWUsdHlwZTpcIm51bWJlclwiLGluY2x1c2l2ZTpyLmluY2x1c2l2ZSxleGFjdDohMSxtZXNzYWdlOnIubWVzc2FnZX0pLG4uZGlydHkoKSk6XCJtdWx0aXBsZU9mXCI9PT1yLmtpbmQ/MCE9PWZ1bmN0aW9uKGUsdCl7bGV0IG49KGUudG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV18fFwiXCIpLmxlbmd0aCxyPSh0LnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdfHxcIlwiKS5sZW5ndGgsbz1uPnI/bjpyO3JldHVybiBOdW1iZXIucGFyc2VJbnQoZS50b0ZpeGVkKG8pLnJlcGxhY2UoXCIuXCIsXCJcIikpJU51bWJlci5wYXJzZUludCh0LnRvRml4ZWQobykucmVwbGFjZShcIi5cIixcIlwiKSkvMTAqKm99KGUuZGF0YSxyLnZhbHVlKSYmKHQ9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSx0KSwoMCxjLmFkZElzc3VlVG9Db250ZXh0KSh0LHtjb2RlOmkuWm9kSXNzdWVDb2RlLm5vdF9tdWx0aXBsZV9vZixtdWx0aXBsZU9mOnIudmFsdWUsbWVzc2FnZTpyLm1lc3NhZ2V9KSxuLmRpcnR5KCkpOlwiZmluaXRlXCI9PT1yLmtpbmQ/TnVtYmVyLmlzRmluaXRlKGUuZGF0YSl8fCh0PXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsdCksKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS5ub3RfZmluaXRlLG1lc3NhZ2U6ci5tZXNzYWdlfSksbi5kaXJ0eSgpKTp1LnV0aWwuYXNzZXJ0TmV2ZXIocik7cmV0dXJue3N0YXR1czpuLnZhbHVlLHZhbHVlOmUuZGF0YX19Z3RlKGUsdCl7cmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIixlLCEwLHMuZXJyb3JVdGlsLnRvU3RyaW5nKHQpKX1ndChlLHQpe3JldHVybiB0aGlzLnNldExpbWl0KFwibWluXCIsZSwhMSxzLmVycm9yVXRpbC50b1N0cmluZyh0KSl9bHRlKGUsdCl7cmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIixlLCEwLHMuZXJyb3JVdGlsLnRvU3RyaW5nKHQpKX1sdChlLHQpe3JldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsZSwhMSxzLmVycm9yVXRpbC50b1N0cmluZyh0KSl9c2V0TGltaXQoZSx0LG4scil7cmV0dXJuIG5ldyB6KHsuLi50aGlzLl9kZWYsY2hlY2tzOlsuLi50aGlzLl9kZWYuY2hlY2tzLHtraW5kOmUsdmFsdWU6dCxpbmNsdXNpdmU6bixtZXNzYWdlOnMuZXJyb3JVdGlsLnRvU3RyaW5nKHIpfV19KX1fYWRkQ2hlY2soZSl7cmV0dXJuIG5ldyB6KHsuLi50aGlzLl9kZWYsY2hlY2tzOlsuLi50aGlzLl9kZWYuY2hlY2tzLGVdfSl9aW50KGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcImludFwiLG1lc3NhZ2U6cy5lcnJvclV0aWwudG9TdHJpbmcoZSl9KX1wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJtaW5cIix2YWx1ZTowLGluY2x1c2l2ZTohMSxtZXNzYWdlOnMuZXJyb3JVdGlsLnRvU3RyaW5nKGUpfSl9bmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOlwibWF4XCIsdmFsdWU6MCxpbmNsdXNpdmU6ITEsbWVzc2FnZTpzLmVycm9yVXRpbC50b1N0cmluZyhlKX0pfW5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcIm1heFwiLHZhbHVlOjAsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6cy5lcnJvclV0aWwudG9TdHJpbmcoZSl9KX1ub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJtaW5cIix2YWx1ZTowLGluY2x1c2l2ZTohMCxtZXNzYWdlOnMuZXJyb3JVdGlsLnRvU3RyaW5nKGUpfSl9bXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcIm11bHRpcGxlT2ZcIix2YWx1ZTplLG1lc3NhZ2U6cy5lcnJvclV0aWwudG9TdHJpbmcodCl9KX1maW5pdGUoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOlwiZmluaXRlXCIsbWVzc2FnZTpzLmVycm9yVXRpbC50b1N0cmluZyhlKX0pfXNhZmUoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOlwibWluXCIsaW5jbHVzaXZlOiEwLHZhbHVlOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLG1lc3NhZ2U6cy5lcnJvclV0aWwudG9TdHJpbmcoZSl9KS5fYWRkQ2hlY2soe2tpbmQ6XCJtYXhcIixpbmNsdXNpdmU6ITAsdmFsdWU6TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbWVzc2FnZTpzLmVycm9yVXRpbC50b1N0cmluZyhlKX0pfWdldCBtaW5WYWx1ZSgpe2xldCBlPW51bGw7Zm9yKGxldCB0IG9mIHRoaXMuX2RlZi5jaGVja3MpXCJtaW5cIj09PXQua2luZCYmKG51bGw9PT1lfHx0LnZhbHVlPmUpJiYoZT10LnZhbHVlKTtyZXR1cm4gZX1nZXQgbWF4VmFsdWUoKXtsZXQgZT1udWxsO2ZvcihsZXQgdCBvZiB0aGlzLl9kZWYuY2hlY2tzKVwibWF4XCI9PT10LmtpbmQmJihudWxsPT09ZXx8dC52YWx1ZTxlKSYmKGU9dC52YWx1ZSk7cmV0dXJuIGV9Z2V0IGlzSW50KCl7cmV0dXJuISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoZT0+XCJpbnRcIj09PWUua2luZHx8XCJtdWx0aXBsZU9mXCI9PT1lLmtpbmQmJnUudXRpbC5pc0ludGVnZXIoZS52YWx1ZSkpfWdldCBpc0Zpbml0ZSgpe2xldCBlPW51bGwsdD1udWxsO2ZvcihsZXQgbiBvZiB0aGlzLl9kZWYuY2hlY2tzKWlmKFwiZmluaXRlXCI9PT1uLmtpbmR8fFwiaW50XCI9PT1uLmtpbmR8fFwibXVsdGlwbGVPZlwiPT09bi5raW5kKXJldHVybiEwO2Vsc2VcIm1pblwiPT09bi5raW5kPyhudWxsPT09dHx8bi52YWx1ZT50KSYmKHQ9bi52YWx1ZSk6XCJtYXhcIj09PW4ua2luZCYmKG51bGw9PT1lfHxuLnZhbHVlPGUpJiYoZT1uLnZhbHVlKTtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpJiZOdW1iZXIuaXNGaW5pdGUoZSl9fXQuWm9kTnVtYmVyPXosei5jcmVhdGU9ZT0+bmV3IHooe2NoZWNrczpbXSx0eXBlTmFtZTpyLlpvZE51bWJlcixjb2VyY2U6ZT8uY29lcmNlfHwhMSwuLi5wKGUpfSk7Y2xhc3MgRCBleHRlbmRzIGh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWluPXRoaXMuZ3RlLHRoaXMubWF4PXRoaXMubHRlfV9wYXJzZShlKXtsZXQgdDtpZih0aGlzLl9kZWYuY29lcmNlKXRyeXtlLmRhdGE9QmlnSW50KGUuZGF0YSl9Y2F0Y2h7cmV0dXJuIHRoaXMuX2dldEludmFsaWRJbnB1dChlKX1pZih0aGlzLl9nZXRUeXBlKGUpIT09dS5ab2RQYXJzZWRUeXBlLmJpZ2ludClyZXR1cm4gdGhpcy5fZ2V0SW52YWxpZElucHV0KGUpO2xldCBuPW5ldyBjLlBhcnNlU3RhdHVzO2ZvcihsZXQgciBvZiB0aGlzLl9kZWYuY2hlY2tzKVwibWluXCI9PT1yLmtpbmQ/KHIuaW5jbHVzaXZlP2UuZGF0YTxyLnZhbHVlOmUuZGF0YTw9ci52YWx1ZSkmJih0PXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsdCksKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS50b29fc21hbGwsdHlwZTpcImJpZ2ludFwiLG1pbmltdW06ci52YWx1ZSxpbmNsdXNpdmU6ci5pbmNsdXNpdmUsbWVzc2FnZTpyLm1lc3NhZ2V9KSxuLmRpcnR5KCkpOlwibWF4XCI9PT1yLmtpbmQ/KHIuaW5jbHVzaXZlP2UuZGF0YT5yLnZhbHVlOmUuZGF0YT49ci52YWx1ZSkmJih0PXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsdCksKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS50b29fYmlnLHR5cGU6XCJiaWdpbnRcIixtYXhpbXVtOnIudmFsdWUsaW5jbHVzaXZlOnIuaW5jbHVzaXZlLG1lc3NhZ2U6ci5tZXNzYWdlfSksbi5kaXJ0eSgpKTpcIm11bHRpcGxlT2ZcIj09PXIua2luZD9lLmRhdGElci52YWx1ZSE9PUJpZ0ludCgwKSYmKHQ9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSx0KSwoMCxjLmFkZElzc3VlVG9Db250ZXh0KSh0LHtjb2RlOmkuWm9kSXNzdWVDb2RlLm5vdF9tdWx0aXBsZV9vZixtdWx0aXBsZU9mOnIudmFsdWUsbWVzc2FnZTpyLm1lc3NhZ2V9KSxuLmRpcnR5KCkpOnUudXRpbC5hc3NlcnROZXZlcihyKTtyZXR1cm57c3RhdHVzOm4udmFsdWUsdmFsdWU6ZS5kYXRhfX1fZ2V0SW52YWxpZElucHV0KGUpe2xldCB0PXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO3JldHVybigwLGMuYWRkSXNzdWVUb0NvbnRleHQpKHQse2NvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLGV4cGVjdGVkOnUuWm9kUGFyc2VkVHlwZS5iaWdpbnQscmVjZWl2ZWQ6dC5wYXJzZWRUeXBlfSksYy5JTlZBTElEfWd0ZShlLHQpe3JldHVybiB0aGlzLnNldExpbWl0KFwibWluXCIsZSwhMCxzLmVycm9yVXRpbC50b1N0cmluZyh0KSl9Z3QoZSx0KXtyZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLGUsITEscy5lcnJvclV0aWwudG9TdHJpbmcodCkpfWx0ZShlLHQpe3JldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsZSwhMCxzLmVycm9yVXRpbC50b1N0cmluZyh0KSl9bHQoZSx0KXtyZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1heFwiLGUsITEscy5lcnJvclV0aWwudG9TdHJpbmcodCkpfXNldExpbWl0KGUsdCxuLHIpe3JldHVybiBuZXcgRCh7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyx7a2luZDplLHZhbHVlOnQsaW5jbHVzaXZlOm4sbWVzc2FnZTpzLmVycm9yVXRpbC50b1N0cmluZyhyKX1dfSl9X2FkZENoZWNrKGUpe3JldHVybiBuZXcgRCh7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyxlXX0pfXBvc2l0aXZlKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcIm1pblwiLHZhbHVlOkJpZ0ludCgwKSxpbmNsdXNpdmU6ITEsbWVzc2FnZTpzLmVycm9yVXRpbC50b1N0cmluZyhlKX0pfW5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcIm1heFwiLHZhbHVlOkJpZ0ludCgwKSxpbmNsdXNpdmU6ITEsbWVzc2FnZTpzLmVycm9yVXRpbC50b1N0cmluZyhlKX0pfW5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcIm1heFwiLHZhbHVlOkJpZ0ludCgwKSxpbmNsdXNpdmU6ITAsbWVzc2FnZTpzLmVycm9yVXRpbC50b1N0cmluZyhlKX0pfW5vbm5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDpcIm1pblwiLHZhbHVlOkJpZ0ludCgwKSxpbmNsdXNpdmU6ITAsbWVzc2FnZTpzLmVycm9yVXRpbC50b1N0cmluZyhlKX0pfW11bHRpcGxlT2YoZSx0KXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJtdWx0aXBsZU9mXCIsdmFsdWU6ZSxtZXNzYWdlOnMuZXJyb3JVdGlsLnRvU3RyaW5nKHQpfSl9Z2V0IG1pblZhbHVlKCl7bGV0IGU9bnVsbDtmb3IobGV0IHQgb2YgdGhpcy5fZGVmLmNoZWNrcylcIm1pblwiPT09dC5raW5kJiYobnVsbD09PWV8fHQudmFsdWU+ZSkmJihlPXQudmFsdWUpO3JldHVybiBlfWdldCBtYXhWYWx1ZSgpe2xldCBlPW51bGw7Zm9yKGxldCB0IG9mIHRoaXMuX2RlZi5jaGVja3MpXCJtYXhcIj09PXQua2luZCYmKG51bGw9PT1lfHx0LnZhbHVlPGUpJiYoZT10LnZhbHVlKTtyZXR1cm4gZX19dC5ab2RCaWdJbnQ9RCxELmNyZWF0ZT1lPT5uZXcgRCh7Y2hlY2tzOltdLHR5cGVOYW1lOnIuWm9kQmlnSW50LGNvZXJjZTplPy5jb2VyY2U/PyExLC4uLnAoZSl9KTtjbGFzcyBMIGV4dGVuZHMgaHtfcGFyc2UoZSl7aWYodGhpcy5fZGVmLmNvZXJjZSYmKGUuZGF0YT0hIWUuZGF0YSksdGhpcy5fZ2V0VHlwZShlKSE9PXUuWm9kUGFyc2VkVHlwZS5ib29sZWFuKXtsZXQgdD10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4oMCxjLmFkZElzc3VlVG9Db250ZXh0KSh0LHtjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxleHBlY3RlZDp1LlpvZFBhcnNlZFR5cGUuYm9vbGVhbixyZWNlaXZlZDp0LnBhcnNlZFR5cGV9KSxjLklOVkFMSUR9cmV0dXJuKDAsYy5PSykoZS5kYXRhKX19dC5ab2RCb29sZWFuPUwsTC5jcmVhdGU9ZT0+bmV3IEwoe3R5cGVOYW1lOnIuWm9kQm9vbGVhbixjb2VyY2U6ZT8uY29lcmNlfHwhMSwuLi5wKGUpfSk7Y2xhc3MgTiBleHRlbmRzIGh7X3BhcnNlKGUpe2xldCB0O2lmKHRoaXMuX2RlZi5jb2VyY2UmJihlLmRhdGE9bmV3IERhdGUoZS5kYXRhKSksdGhpcy5fZ2V0VHlwZShlKSE9PXUuWm9kUGFyc2VkVHlwZS5kYXRlKXtsZXQgdD10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4oMCxjLmFkZElzc3VlVG9Db250ZXh0KSh0LHtjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxleHBlY3RlZDp1LlpvZFBhcnNlZFR5cGUuZGF0ZSxyZWNlaXZlZDp0LnBhcnNlZFR5cGV9KSxjLklOVkFMSUR9aWYoTnVtYmVyLmlzTmFOKGUuZGF0YS5nZXRUaW1lKCkpKXtsZXQgdD10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4oMCxjLmFkZElzc3VlVG9Db250ZXh0KSh0LHtjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfZGF0ZX0pLGMuSU5WQUxJRH1sZXQgbj1uZXcgYy5QYXJzZVN0YXR1cztmb3IobGV0IHIgb2YgdGhpcy5fZGVmLmNoZWNrcylcIm1pblwiPT09ci5raW5kP2UuZGF0YS5nZXRUaW1lKCk8ci52YWx1ZSYmKHQ9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSx0KSwoMCxjLmFkZElzc3VlVG9Db250ZXh0KSh0LHtjb2RlOmkuWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxtZXNzYWdlOnIubWVzc2FnZSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsbWluaW11bTpyLnZhbHVlLHR5cGU6XCJkYXRlXCJ9KSxuLmRpcnR5KCkpOlwibWF4XCI9PT1yLmtpbmQ/ZS5kYXRhLmdldFRpbWUoKT5yLnZhbHVlJiYodD10aGlzLl9nZXRPclJldHVybkN0eChlLHQpLCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKHQse2NvZGU6aS5ab2RJc3N1ZUNvZGUudG9vX2JpZyxtZXNzYWdlOnIubWVzc2FnZSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsbWF4aW11bTpyLnZhbHVlLHR5cGU6XCJkYXRlXCJ9KSxuLmRpcnR5KCkpOnUudXRpbC5hc3NlcnROZXZlcihyKTtyZXR1cm57c3RhdHVzOm4udmFsdWUsdmFsdWU6bmV3IERhdGUoZS5kYXRhLmdldFRpbWUoKSl9fV9hZGRDaGVjayhlKXtyZXR1cm4gbmV3IE4oey4uLnRoaXMuX2RlZixjaGVja3M6Wy4uLnRoaXMuX2RlZi5jaGVja3MsZV19KX1taW4oZSx0KXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6XCJtaW5cIix2YWx1ZTplLmdldFRpbWUoKSxtZXNzYWdlOnMuZXJyb3JVdGlsLnRvU3RyaW5nKHQpfSl9bWF4KGUsdCl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOlwibWF4XCIsdmFsdWU6ZS5nZXRUaW1lKCksbWVzc2FnZTpzLmVycm9yVXRpbC50b1N0cmluZyh0KX0pfWdldCBtaW5EYXRlKCl7bGV0IGU9bnVsbDtmb3IobGV0IHQgb2YgdGhpcy5fZGVmLmNoZWNrcylcIm1pblwiPT09dC5raW5kJiYobnVsbD09PWV8fHQudmFsdWU+ZSkmJihlPXQudmFsdWUpO3JldHVybiBudWxsIT1lP25ldyBEYXRlKGUpOm51bGx9Z2V0IG1heERhdGUoKXtsZXQgZT1udWxsO2ZvcihsZXQgdCBvZiB0aGlzLl9kZWYuY2hlY2tzKVwibWF4XCI9PT10LmtpbmQmJihudWxsPT09ZXx8dC52YWx1ZTxlKSYmKGU9dC52YWx1ZSk7cmV0dXJuIG51bGwhPWU/bmV3IERhdGUoZSk6bnVsbH19dC5ab2REYXRlPU4sTi5jcmVhdGU9ZT0+bmV3IE4oe2NoZWNrczpbXSxjb2VyY2U6ZT8uY29lcmNlfHwhMSx0eXBlTmFtZTpyLlpvZERhdGUsLi4ucChlKX0pO2NsYXNzIFIgZXh0ZW5kcyBoe19wYXJzZShlKXtpZih0aGlzLl9nZXRUeXBlKGUpIT09dS5ab2RQYXJzZWRUeXBlLnN5bWJvbCl7bGV0IHQ9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7cmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6dS5ab2RQYXJzZWRUeXBlLnN5bWJvbCxyZWNlaXZlZDp0LnBhcnNlZFR5cGV9KSxjLklOVkFMSUR9cmV0dXJuKDAsYy5PSykoZS5kYXRhKX19dC5ab2RTeW1ib2w9UixSLmNyZWF0ZT1lPT5uZXcgUih7dHlwZU5hbWU6ci5ab2RTeW1ib2wsLi4ucChlKX0pO2NsYXNzIE0gZXh0ZW5kcyBoe19wYXJzZShlKXtpZih0aGlzLl9nZXRUeXBlKGUpIT09dS5ab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCl7bGV0IHQ9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7cmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6dS5ab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCxyZWNlaXZlZDp0LnBhcnNlZFR5cGV9KSxjLklOVkFMSUR9cmV0dXJuKDAsYy5PSykoZS5kYXRhKX19dC5ab2RVbmRlZmluZWQ9TSxNLmNyZWF0ZT1lPT5uZXcgTSh7dHlwZU5hbWU6ci5ab2RVbmRlZmluZWQsLi4ucChlKX0pO2NsYXNzIFogZXh0ZW5kcyBoe19wYXJzZShlKXtpZih0aGlzLl9nZXRUeXBlKGUpIT09dS5ab2RQYXJzZWRUeXBlLm51bGwpe2xldCB0PXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO3JldHVybigwLGMuYWRkSXNzdWVUb0NvbnRleHQpKHQse2NvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLGV4cGVjdGVkOnUuWm9kUGFyc2VkVHlwZS5udWxsLHJlY2VpdmVkOnQucGFyc2VkVHlwZX0pLGMuSU5WQUxJRH1yZXR1cm4oMCxjLk9LKShlLmRhdGEpfX10LlpvZE51bGw9WixaLmNyZWF0ZT1lPT5uZXcgWih7dHlwZU5hbWU6ci5ab2ROdWxsLC4uLnAoZSl9KTtjbGFzcyBVIGV4dGVuZHMgaHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fYW55PSEwfV9wYXJzZShlKXtyZXR1cm4oMCxjLk9LKShlLmRhdGEpfX10LlpvZEFueT1VLFUuY3JlYXRlPWU9Pm5ldyBVKHt0eXBlTmFtZTpyLlpvZEFueSwuLi5wKGUpfSk7Y2xhc3MgRiBleHRlbmRzIGh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Vua25vd249ITB9X3BhcnNlKGUpe3JldHVybigwLGMuT0spKGUuZGF0YSl9fXQuWm9kVW5rbm93bj1GLEYuY3JlYXRlPWU9Pm5ldyBGKHt0eXBlTmFtZTpyLlpvZFVua25vd24sLi4ucChlKX0pO2NsYXNzIHEgZXh0ZW5kcyBoe19wYXJzZShlKXtsZXQgdD10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4oMCxjLmFkZElzc3VlVG9Db250ZXh0KSh0LHtjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxleHBlY3RlZDp1LlpvZFBhcnNlZFR5cGUubmV2ZXIscmVjZWl2ZWQ6dC5wYXJzZWRUeXBlfSksYy5JTlZBTElEfX10LlpvZE5ldmVyPXEscS5jcmVhdGU9ZT0+bmV3IHEoe3R5cGVOYW1lOnIuWm9kTmV2ZXIsLi4ucChlKX0pO2NsYXNzIEggZXh0ZW5kcyBoe19wYXJzZShlKXtpZih0aGlzLl9nZXRUeXBlKGUpIT09dS5ab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCl7bGV0IHQ9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7cmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6dS5ab2RQYXJzZWRUeXBlLnZvaWQscmVjZWl2ZWQ6dC5wYXJzZWRUeXBlfSksYy5JTlZBTElEfXJldHVybigwLGMuT0spKGUuZGF0YSl9fXQuWm9kVm9pZD1ILEguY3JlYXRlPWU9Pm5ldyBIKHt0eXBlTmFtZTpyLlpvZFZvaWQsLi4ucChlKX0pO2NsYXNzIFYgZXh0ZW5kcyBoe19wYXJzZShlKXtsZXR7Y3R4OnQsc3RhdHVzOm59PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKSxyPXRoaXMuX2RlZjtpZih0LnBhcnNlZFR5cGUhPT11LlpvZFBhcnNlZFR5cGUuYXJyYXkpcmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6dS5ab2RQYXJzZWRUeXBlLmFycmF5LHJlY2VpdmVkOnQucGFyc2VkVHlwZX0pLGMuSU5WQUxJRDtpZihudWxsIT09ci5leGFjdExlbmd0aCl7bGV0IGU9dC5kYXRhLmxlbmd0aD5yLmV4YWN0TGVuZ3RoLnZhbHVlLG89dC5kYXRhLmxlbmd0aDxyLmV4YWN0TGVuZ3RoLnZhbHVlOyhlfHxvKSYmKCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKHQse2NvZGU6ZT9pLlpvZElzc3VlQ29kZS50b29fYmlnOmkuWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxtaW5pbXVtOm8/ci5leGFjdExlbmd0aC52YWx1ZTp2b2lkIDAsbWF4aW11bTplP3IuZXhhY3RMZW5ndGgudmFsdWU6dm9pZCAwLHR5cGU6XCJhcnJheVwiLGluY2x1c2l2ZTohMCxleGFjdDohMCxtZXNzYWdlOnIuZXhhY3RMZW5ndGgubWVzc2FnZX0pLG4uZGlydHkoKSl9aWYobnVsbCE9PXIubWluTGVuZ3RoJiZ0LmRhdGEubGVuZ3RoPHIubWluTGVuZ3RoLnZhbHVlJiYoKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS50b29fc21hbGwsbWluaW11bTpyLm1pbkxlbmd0aC52YWx1ZSx0eXBlOlwiYXJyYXlcIixpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsbWVzc2FnZTpyLm1pbkxlbmd0aC5tZXNzYWdlfSksbi5kaXJ0eSgpKSxudWxsIT09ci5tYXhMZW5ndGgmJnQuZGF0YS5sZW5ndGg+ci5tYXhMZW5ndGgudmFsdWUmJigoMCxjLmFkZElzc3VlVG9Db250ZXh0KSh0LHtjb2RlOmkuWm9kSXNzdWVDb2RlLnRvb19iaWcsbWF4aW11bTpyLm1heExlbmd0aC52YWx1ZSx0eXBlOlwiYXJyYXlcIixpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsbWVzc2FnZTpyLm1heExlbmd0aC5tZXNzYWdlfSksbi5kaXJ0eSgpKSx0LmNvbW1vbi5hc3luYylyZXR1cm4gUHJvbWlzZS5hbGwoWy4uLnQuZGF0YV0ubWFwKChlLG4pPT5yLnR5cGUuX3BhcnNlQXN5bmMobmV3IGQodCxlLHQucGF0aCxuKSkpKS50aGVuKGU9PmMuUGFyc2VTdGF0dXMubWVyZ2VBcnJheShuLGUpKTtsZXQgbz1bLi4udC5kYXRhXS5tYXAoKGUsbik9PnIudHlwZS5fcGFyc2VTeW5jKG5ldyBkKHQsZSx0LnBhdGgsbikpKTtyZXR1cm4gYy5QYXJzZVN0YXR1cy5tZXJnZUFycmF5KG4sbyl9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZGVmLnR5cGV9bWluKGUsdCl7cmV0dXJuIG5ldyBWKHsuLi50aGlzLl9kZWYsbWluTGVuZ3RoOnt2YWx1ZTplLG1lc3NhZ2U6cy5lcnJvclV0aWwudG9TdHJpbmcodCl9fSl9bWF4KGUsdCl7cmV0dXJuIG5ldyBWKHsuLi50aGlzLl9kZWYsbWF4TGVuZ3RoOnt2YWx1ZTplLG1lc3NhZ2U6cy5lcnJvclV0aWwudG9TdHJpbmcodCl9fSl9bGVuZ3RoKGUsdCl7cmV0dXJuIG5ldyBWKHsuLi50aGlzLl9kZWYsZXhhY3RMZW5ndGg6e3ZhbHVlOmUsbWVzc2FnZTpzLmVycm9yVXRpbC50b1N0cmluZyh0KX19KX1ub25lbXB0eShlKXtyZXR1cm4gdGhpcy5taW4oMSxlKX19dC5ab2RBcnJheT1WLFYuY3JlYXRlPShlLHQpPT5uZXcgVih7dHlwZTplLG1pbkxlbmd0aDpudWxsLG1heExlbmd0aDpudWxsLGV4YWN0TGVuZ3RoOm51bGwsdHlwZU5hbWU6ci5ab2RBcnJheSwuLi5wKHQpfSk7Y2xhc3MgJCBleHRlbmRzIGh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2NhY2hlZD1udWxsLHRoaXMubm9uc3RyaWN0PXRoaXMucGFzc3Rocm91Z2gsdGhpcy5hdWdtZW50PXRoaXMuZXh0ZW5kfV9nZXRDYWNoZWQoKXtpZihudWxsIT09dGhpcy5fY2FjaGVkKXJldHVybiB0aGlzLl9jYWNoZWQ7bGV0IGU9dGhpcy5fZGVmLnNoYXBlKCksdD11LnV0aWwub2JqZWN0S2V5cyhlKTtyZXR1cm4gdGhpcy5fY2FjaGVkPXtzaGFwZTplLGtleXM6dH0sdGhpcy5fY2FjaGVkfV9wYXJzZShlKXtpZih0aGlzLl9nZXRUeXBlKGUpIT09dS5ab2RQYXJzZWRUeXBlLm9iamVjdCl7bGV0IHQ9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7cmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6dS5ab2RQYXJzZWRUeXBlLm9iamVjdCxyZWNlaXZlZDp0LnBhcnNlZFR5cGV9KSxjLklOVkFMSUR9bGV0e3N0YXR1czp0LGN0eDpufT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoZSkse3NoYXBlOnIsa2V5czpvfT10aGlzLl9nZXRDYWNoZWQoKSxhPVtdO2lmKCEodGhpcy5fZGVmLmNhdGNoYWxsIGluc3RhbmNlb2YgcSYmXCJzdHJpcFwiPT09dGhpcy5fZGVmLnVua25vd25LZXlzKSlmb3IobGV0IGUgaW4gbi5kYXRhKW8uaW5jbHVkZXMoZSl8fGEucHVzaChlKTtsZXQgbD1bXTtmb3IobGV0IGUgb2Ygbyl7bGV0IHQ9cltlXSxvPW4uZGF0YVtlXTtsLnB1c2goe2tleTp7c3RhdHVzOlwidmFsaWRcIix2YWx1ZTplfSx2YWx1ZTp0Ll9wYXJzZShuZXcgZChuLG8sbi5wYXRoLGUpKSxhbHdheXNTZXQ6ZSBpbiBuLmRhdGF9KX1pZih0aGlzLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiBxKXtsZXQgZT10aGlzLl9kZWYudW5rbm93bktleXM7aWYoXCJwYXNzdGhyb3VnaFwiPT09ZSlmb3IobGV0IGUgb2YgYSlsLnB1c2goe2tleTp7c3RhdHVzOlwidmFsaWRcIix2YWx1ZTplfSx2YWx1ZTp7c3RhdHVzOlwidmFsaWRcIix2YWx1ZTpuLmRhdGFbZV19fSk7ZWxzZSBpZihcInN0cmljdFwiPT09ZSlhLmxlbmd0aD4wJiYoKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkobix7Y29kZTppLlpvZElzc3VlQ29kZS51bnJlY29nbml6ZWRfa2V5cyxrZXlzOmF9KSx0LmRpcnR5KCkpO2Vsc2UgaWYoXCJzdHJpcFwiPT09ZSk7ZWxzZSB0aHJvdyBFcnJvcihcIkludGVybmFsIFpvZE9iamVjdCBlcnJvcjogaW52YWxpZCB1bmtub3duS2V5cyB2YWx1ZS5cIil9ZWxzZXtsZXQgZT10aGlzLl9kZWYuY2F0Y2hhbGw7Zm9yKGxldCB0IG9mIGEpe2xldCByPW4uZGF0YVt0XTtsLnB1c2goe2tleTp7c3RhdHVzOlwidmFsaWRcIix2YWx1ZTp0fSx2YWx1ZTplLl9wYXJzZShuZXcgZChuLHIsbi5wYXRoLHQpKSxhbHdheXNTZXQ6dCBpbiBuLmRhdGF9KX19cmV0dXJuIG4uY29tbW9uLmFzeW5jP1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oYXN5bmMoKT0+e2xldCBlPVtdO2ZvcihsZXQgdCBvZiBsKXtsZXQgbj1hd2FpdCB0LmtleSxyPWF3YWl0IHQudmFsdWU7ZS5wdXNoKHtrZXk6bix2YWx1ZTpyLGFsd2F5c1NldDp0LmFsd2F5c1NldH0pfXJldHVybiBlfSkudGhlbihlPT5jLlBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyh0LGUpKTpjLlBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyh0LGwpfWdldCBzaGFwZSgpe3JldHVybiB0aGlzLl9kZWYuc2hhcGUoKX1zdHJpY3QoZSl7cmV0dXJuIHMuZXJyb3JVdGlsLmVyclRvT2JqLG5ldyAkKHsuLi50aGlzLl9kZWYsdW5rbm93bktleXM6XCJzdHJpY3RcIiwuLi52b2lkIDAhPT1lP3tlcnJvck1hcDoodCxuKT0+e2xldCByPXRoaXMuX2RlZi5lcnJvck1hcD8uKHQsbikubWVzc2FnZT8/bi5kZWZhdWx0RXJyb3I7cmV0dXJuXCJ1bnJlY29nbml6ZWRfa2V5c1wiPT09dC5jb2RlP3ttZXNzYWdlOnMuZXJyb3JVdGlsLmVyclRvT2JqKGUpLm1lc3NhZ2U/P3J9OnttZXNzYWdlOnJ9fX06e319KX1zdHJpcCgpe3JldHVybiBuZXcgJCh7Li4udGhpcy5fZGVmLHVua25vd25LZXlzOlwic3RyaXBcIn0pfXBhc3N0aHJvdWdoKCl7cmV0dXJuIG5ldyAkKHsuLi50aGlzLl9kZWYsdW5rbm93bktleXM6XCJwYXNzdGhyb3VnaFwifSl9ZXh0ZW5kKGUpe3JldHVybiBuZXcgJCh7Li4udGhpcy5fZGVmLHNoYXBlOigpPT4oey4uLnRoaXMuX2RlZi5zaGFwZSgpLC4uLmV9KX0pfW1lcmdlKGUpe3JldHVybiBuZXcgJCh7dW5rbm93bktleXM6ZS5fZGVmLnVua25vd25LZXlzLGNhdGNoYWxsOmUuX2RlZi5jYXRjaGFsbCxzaGFwZTooKT0+KHsuLi50aGlzLl9kZWYuc2hhcGUoKSwuLi5lLl9kZWYuc2hhcGUoKX0pLHR5cGVOYW1lOnIuWm9kT2JqZWN0fSl9c2V0S2V5KGUsdCl7cmV0dXJuIHRoaXMuYXVnbWVudCh7W2VdOnR9KX1jYXRjaGFsbChlKXtyZXR1cm4gbmV3ICQoey4uLnRoaXMuX2RlZixjYXRjaGFsbDplfSl9cGljayhlKXtsZXQgdD17fTtmb3IobGV0IG4gb2YgdS51dGlsLm9iamVjdEtleXMoZSkpZVtuXSYmdGhpcy5zaGFwZVtuXSYmKHRbbl09dGhpcy5zaGFwZVtuXSk7cmV0dXJuIG5ldyAkKHsuLi50aGlzLl9kZWYsc2hhcGU6KCk9PnR9KX1vbWl0KGUpe2xldCB0PXt9O2ZvcihsZXQgbiBvZiB1LnV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKSllW25dfHwodFtuXT10aGlzLnNoYXBlW25dKTtyZXR1cm4gbmV3ICQoey4uLnRoaXMuX2RlZixzaGFwZTooKT0+dH0pfWRlZXBQYXJ0aWFsKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCl7aWYodCBpbnN0YW5jZW9mICQpe2xldCBuPXt9O2ZvcihsZXQgciBpbiB0LnNoYXBlKXtsZXQgbz10LnNoYXBlW3JdO25bcl09ZWMuY3JlYXRlKGUobykpfXJldHVybiBuZXcgJCh7Li4udC5fZGVmLHNoYXBlOigpPT5ufSl9aWYodCBpbnN0YW5jZW9mIFYpcmV0dXJuIG5ldyBWKHsuLi50Ll9kZWYsdHlwZTplKHQuZWxlbWVudCl9KTtpZih0IGluc3RhbmNlb2YgZWMpcmV0dXJuIGVjLmNyZWF0ZShlKHQudW53cmFwKCkpKTtpZih0IGluc3RhbmNlb2YgZXUpcmV0dXJuIGV1LmNyZWF0ZShlKHQudW53cmFwKCkpKTtpZih0IGluc3RhbmNlb2YgRylyZXR1cm4gRy5jcmVhdGUodC5pdGVtcy5tYXAodD0+ZSh0KSkpO2Vsc2UgcmV0dXJuIHR9KHRoaXMpfXBhcnRpYWwoZSl7bGV0IHQ9e307Zm9yKGxldCBuIG9mIHUudXRpbC5vYmplY3RLZXlzKHRoaXMuc2hhcGUpKXtsZXQgcj10aGlzLnNoYXBlW25dO2UmJiFlW25dP3Rbbl09cjp0W25dPXIub3B0aW9uYWwoKX1yZXR1cm4gbmV3ICQoey4uLnRoaXMuX2RlZixzaGFwZTooKT0+dH0pfXJlcXVpcmVkKGUpe2xldCB0PXt9O2ZvcihsZXQgbiBvZiB1LnV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKSlpZihlJiYhZVtuXSl0W25dPXRoaXMuc2hhcGVbbl07ZWxzZXtsZXQgZT10aGlzLnNoYXBlW25dO2Zvcig7ZSBpbnN0YW5jZW9mIGVjOyllPWUuX2RlZi5pbm5lclR5cGU7dFtuXT1lfXJldHVybiBuZXcgJCh7Li4udGhpcy5fZGVmLHNoYXBlOigpPT50fSl9a2V5b2YoKXtyZXR1cm4gZW8odS51dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkpfX10LlpvZE9iamVjdD0kLCQuY3JlYXRlPShlLHQpPT5uZXcgJCh7c2hhcGU6KCk9PmUsdW5rbm93bktleXM6XCJzdHJpcFwiLGNhdGNoYWxsOnEuY3JlYXRlKCksdHlwZU5hbWU6ci5ab2RPYmplY3QsLi4ucCh0KX0pLCQuc3RyaWN0Q3JlYXRlPShlLHQpPT5uZXcgJCh7c2hhcGU6KCk9PmUsdW5rbm93bktleXM6XCJzdHJpY3RcIixjYXRjaGFsbDpxLmNyZWF0ZSgpLHR5cGVOYW1lOnIuWm9kT2JqZWN0LC4uLnAodCl9KSwkLmxhenljcmVhdGU9KGUsdCk9Pm5ldyAkKHtzaGFwZTplLHVua25vd25LZXlzOlwic3RyaXBcIixjYXRjaGFsbDpxLmNyZWF0ZSgpLHR5cGVOYW1lOnIuWm9kT2JqZWN0LC4uLnAodCl9KTtjbGFzcyBXIGV4dGVuZHMgaHtfcGFyc2UoZSl7bGV0e2N0eDp0fT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoZSksbj10aGlzLl9kZWYub3B0aW9ucztpZih0LmNvbW1vbi5hc3luYylyZXR1cm4gUHJvbWlzZS5hbGwobi5tYXAoYXN5bmMgZT0+e2xldCBuPXsuLi50LGNvbW1vbjp7Li4udC5jb21tb24saXNzdWVzOltdfSxwYXJlbnQ6bnVsbH07cmV0dXJue3Jlc3VsdDphd2FpdCBlLl9wYXJzZUFzeW5jKHtkYXRhOnQuZGF0YSxwYXRoOnQucGF0aCxwYXJlbnQ6bn0pLGN0eDpufX0pKS50aGVuKGZ1bmN0aW9uKGUpe2ZvcihsZXQgdCBvZiBlKWlmKFwidmFsaWRcIj09PXQucmVzdWx0LnN0YXR1cylyZXR1cm4gdC5yZXN1bHQ7Zm9yKGxldCBuIG9mIGUpaWYoXCJkaXJ0eVwiPT09bi5yZXN1bHQuc3RhdHVzKXJldHVybiB0LmNvbW1vbi5pc3N1ZXMucHVzaCguLi5uLmN0eC5jb21tb24uaXNzdWVzKSxuLnJlc3VsdDtsZXQgbj1lLm1hcChlPT5uZXcgaS5ab2RFcnJvcihlLmN0eC5jb21tb24uaXNzdWVzKSk7cmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uLHVuaW9uRXJyb3JzOm59KSxjLklOVkFMSUR9KTt7bGV0IGUscj1bXTtmb3IobGV0IG8gb2Ygbil7bGV0IG49ey4uLnQsY29tbW9uOnsuLi50LmNvbW1vbixpc3N1ZXM6W119LHBhcmVudDpudWxsfSxhPW8uX3BhcnNlU3luYyh7ZGF0YTp0LmRhdGEscGF0aDp0LnBhdGgscGFyZW50Om59KTtpZihcInZhbGlkXCI9PT1hLnN0YXR1cylyZXR1cm4gYTtcImRpcnR5XCIhPT1hLnN0YXR1c3x8ZXx8KGU9e3Jlc3VsdDphLGN0eDpufSksbi5jb21tb24uaXNzdWVzLmxlbmd0aCYmci5wdXNoKG4uY29tbW9uLmlzc3Vlcyl9aWYoZSlyZXR1cm4gdC5jb21tb24uaXNzdWVzLnB1c2goLi4uZS5jdHguY29tbW9uLmlzc3VlcyksZS5yZXN1bHQ7bGV0IG89ci5tYXAoZT0+bmV3IGkuWm9kRXJyb3IoZSkpO3JldHVybigwLGMuYWRkSXNzdWVUb0NvbnRleHQpKHQse2NvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbix1bmlvbkVycm9yczpvfSksYy5JTlZBTElEfX1nZXQgb3B0aW9ucygpe3JldHVybiB0aGlzLl9kZWYub3B0aW9uc319dC5ab2RVbmlvbj1XLFcuY3JlYXRlPShlLHQpPT5uZXcgVyh7b3B0aW9uczplLHR5cGVOYW1lOnIuWm9kVW5pb24sLi4ucCh0KX0pO2xldCBZPWU9PntpZihlIGluc3RhbmNlb2YgZW4pcmV0dXJuIFkoZS5zY2hlbWEpO2lmKGUgaW5zdGFuY2VvZiBlcylyZXR1cm4gWShlLmlubmVyVHlwZSgpKTtpZihlIGluc3RhbmNlb2YgZXIpcmV0dXJuW2UudmFsdWVdO2lmKGUgaW5zdGFuY2VvZiBlYSlyZXR1cm4gZS5vcHRpb25zO2lmKGUgaW5zdGFuY2VvZiBlaSlyZXR1cm4gdS51dGlsLm9iamVjdFZhbHVlcyhlLmVudW0pO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGVkKXJldHVybiBZKGUuX2RlZi5pbm5lclR5cGUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIE0pcmV0dXJuW3ZvaWQgMF07ZWxzZSBpZihlIGluc3RhbmNlb2YgWilyZXR1cm5bbnVsbF07ZWxzZSBpZihlIGluc3RhbmNlb2YgZWMpcmV0dXJuW3ZvaWQgMCwuLi5ZKGUudW53cmFwKCkpXTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBldSlyZXR1cm5bbnVsbCwuLi5ZKGUudW53cmFwKCkpXTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBlaClyZXR1cm4gWShlLnVud3JhcCgpKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBlZylyZXR1cm4gWShlLnVud3JhcCgpKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBlZilyZXR1cm4gWShlLl9kZWYuaW5uZXJUeXBlKTtlbHNlIHJldHVybltdfTtjbGFzcyBLIGV4dGVuZHMgaHtfcGFyc2UoZSl7bGV0e2N0eDp0fT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoZSk7aWYodC5wYXJzZWRUeXBlIT09dS5ab2RQYXJzZWRUeXBlLm9iamVjdClyZXR1cm4oMCxjLmFkZElzc3VlVG9Db250ZXh0KSh0LHtjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxleHBlY3RlZDp1LlpvZFBhcnNlZFR5cGUub2JqZWN0LHJlY2VpdmVkOnQucGFyc2VkVHlwZX0pLGMuSU5WQUxJRDtsZXQgbj10aGlzLmRpc2NyaW1pbmF0b3Iscj10LmRhdGFbbl0sbz10aGlzLm9wdGlvbnNNYXAuZ2V0KHIpO3JldHVybiBvP3QuY29tbW9uLmFzeW5jP28uX3BhcnNlQXN5bmMoe2RhdGE6dC5kYXRhLHBhdGg6dC5wYXRoLHBhcmVudDp0fSk6by5fcGFyc2VTeW5jKHtkYXRhOnQuZGF0YSxwYXRoOnQucGF0aCxwYXJlbnQ6dH0pOigoMCxjLmFkZElzc3VlVG9Db250ZXh0KSh0LHtjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcixvcHRpb25zOkFycmF5LmZyb20odGhpcy5vcHRpb25zTWFwLmtleXMoKSkscGF0aDpbbl19KSxjLklOVkFMSUQpfWdldCBkaXNjcmltaW5hdG9yKCl7cmV0dXJuIHRoaXMuX2RlZi5kaXNjcmltaW5hdG9yfWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX2RlZi5vcHRpb25zfWdldCBvcHRpb25zTWFwKCl7cmV0dXJuIHRoaXMuX2RlZi5vcHRpb25zTWFwfXN0YXRpYyBjcmVhdGUoZSx0LG4pe2xldCBvPW5ldyBNYXA7Zm9yKGxldCBuIG9mIHQpe2xldCB0PVkobi5zaGFwZVtlXSk7aWYoIXQubGVuZ3RoKXRocm93IEVycm9yKGBBIGRpc2NyaW1pbmF0b3IgdmFsdWUgZm9yIGtleSBcXGAke2V9XFxgIGNvdWxkIG5vdCBiZSBleHRyYWN0ZWQgZnJvbSBhbGwgc2NoZW1hIG9wdGlvbnNgKTtmb3IobGV0IHIgb2YgdCl7aWYoby5oYXMocikpdGhyb3cgRXJyb3IoYERpc2NyaW1pbmF0b3IgcHJvcGVydHkgJHtTdHJpbmcoZSl9IGhhcyBkdXBsaWNhdGUgdmFsdWUgJHtTdHJpbmcocil9YCk7by5zZXQocixuKX19cmV0dXJuIG5ldyBLKHt0eXBlTmFtZTpyLlpvZERpc2NyaW1pbmF0ZWRVbmlvbixkaXNjcmltaW5hdG9yOmUsb3B0aW9uczp0LG9wdGlvbnNNYXA6bywuLi5wKG4pfSl9fXQuWm9kRGlzY3JpbWluYXRlZFVuaW9uPUs7Y2xhc3MgWCBleHRlbmRzIGh7X3BhcnNlKGUpe2xldHtzdGF0dXM6dCxjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpLHI9KGUscik9PntpZigoMCxjLmlzQWJvcnRlZCkoZSl8fCgwLGMuaXNBYm9ydGVkKShyKSlyZXR1cm4gYy5JTlZBTElEO2xldCBvPWZ1bmN0aW9uIGUodCxuKXtsZXQgcj0oMCx1LmdldFBhcnNlZFR5cGUpKHQpLG89KDAsdS5nZXRQYXJzZWRUeXBlKShuKTtpZih0PT09bilyZXR1cm57dmFsaWQ6ITAsZGF0YTp0fTtpZihyPT09dS5ab2RQYXJzZWRUeXBlLm9iamVjdCYmbz09PXUuWm9kUGFyc2VkVHlwZS5vYmplY3Qpe2xldCByPXUudXRpbC5vYmplY3RLZXlzKG4pLG89dS51dGlsLm9iamVjdEtleXModCkuZmlsdGVyKGU9Pi0xIT09ci5pbmRleE9mKGUpKSxhPXsuLi50LC4uLm59O2ZvcihsZXQgciBvZiBvKXtsZXQgbz1lKHRbcl0sbltyXSk7aWYoIW8udmFsaWQpcmV0dXJue3ZhbGlkOiExfTthW3JdPW8uZGF0YX1yZXR1cm57dmFsaWQ6ITAsZGF0YTphfX1pZihyPT09dS5ab2RQYXJzZWRUeXBlLmFycmF5JiZvPT09dS5ab2RQYXJzZWRUeXBlLmFycmF5KXtpZih0Lmxlbmd0aCE9PW4ubGVuZ3RoKXJldHVybnt2YWxpZDohMX07bGV0IHI9W107Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2xldCBhPWUodFtvXSxuW29dKTtpZighYS52YWxpZClyZXR1cm57dmFsaWQ6ITF9O3IucHVzaChhLmRhdGEpfXJldHVybnt2YWxpZDohMCxkYXRhOnJ9fWlmKHI9PT11LlpvZFBhcnNlZFR5cGUuZGF0ZSYmbz09PXUuWm9kUGFyc2VkVHlwZS5kYXRlJiYrdD09K24pcmV0dXJue3ZhbGlkOiEwLGRhdGE6dH07cmV0dXJue3ZhbGlkOiExfX0oZS52YWx1ZSxyLnZhbHVlKTtyZXR1cm4gby52YWxpZD8oKCgwLGMuaXNEaXJ0eSkoZSl8fCgwLGMuaXNEaXJ0eSkocikpJiZ0LmRpcnR5KCkse3N0YXR1czp0LnZhbHVlLHZhbHVlOm8uZGF0YX0pOigoMCxjLmFkZElzc3VlVG9Db250ZXh0KShuLHtjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzfSksYy5JTlZBTElEKX07cmV0dXJuIG4uY29tbW9uLmFzeW5jP1Byb21pc2UuYWxsKFt0aGlzLl9kZWYubGVmdC5fcGFyc2VBc3luYyh7ZGF0YTpuLmRhdGEscGF0aDpuLnBhdGgscGFyZW50Om59KSx0aGlzLl9kZWYucmlnaHQuX3BhcnNlQXN5bmMoe2RhdGE6bi5kYXRhLHBhdGg6bi5wYXRoLHBhcmVudDpufSldKS50aGVuKChbZSx0XSk9PnIoZSx0KSk6cih0aGlzLl9kZWYubGVmdC5fcGFyc2VTeW5jKHtkYXRhOm4uZGF0YSxwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pLHRoaXMuX2RlZi5yaWdodC5fcGFyc2VTeW5jKHtkYXRhOm4uZGF0YSxwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pKX19dC5ab2RJbnRlcnNlY3Rpb249WCxYLmNyZWF0ZT0oZSx0LG4pPT5uZXcgWCh7bGVmdDplLHJpZ2h0OnQsdHlwZU5hbWU6ci5ab2RJbnRlcnNlY3Rpb24sLi4ucChuKX0pO2NsYXNzIEcgZXh0ZW5kcyBoe19wYXJzZShlKXtsZXR7c3RhdHVzOnQsY3R4Om59PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKTtpZihuLnBhcnNlZFR5cGUhPT11LlpvZFBhcnNlZFR5cGUuYXJyYXkpcmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkobix7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6dS5ab2RQYXJzZWRUeXBlLmFycmF5LHJlY2VpdmVkOm4ucGFyc2VkVHlwZX0pLGMuSU5WQUxJRDtpZihuLmRhdGEubGVuZ3RoPHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgpcmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkobix7Y29kZTppLlpvZElzc3VlQ29kZS50b29fc21hbGwsbWluaW11bTp0aGlzLl9kZWYuaXRlbXMubGVuZ3RoLGluY2x1c2l2ZTohMCxleGFjdDohMSx0eXBlOlwiYXJyYXlcIn0pLGMuSU5WQUxJRDshdGhpcy5fZGVmLnJlc3QmJm4uZGF0YS5sZW5ndGg+dGhpcy5fZGVmLml0ZW1zLmxlbmd0aCYmKCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKG4se2NvZGU6aS5ab2RJc3N1ZUNvZGUudG9vX2JpZyxtYXhpbXVtOnRoaXMuX2RlZi5pdGVtcy5sZW5ndGgsaW5jbHVzaXZlOiEwLGV4YWN0OiExLHR5cGU6XCJhcnJheVwifSksdC5kaXJ0eSgpKTtsZXQgcj1bLi4ubi5kYXRhXS5tYXAoKGUsdCk9PntsZXQgcj10aGlzLl9kZWYuaXRlbXNbdF18fHRoaXMuX2RlZi5yZXN0O3JldHVybiByP3IuX3BhcnNlKG5ldyBkKG4sZSxuLnBhdGgsdCkpOm51bGx9KS5maWx0ZXIoZT0+ISFlKTtyZXR1cm4gbi5jb21tb24uYXN5bmM/UHJvbWlzZS5hbGwocikudGhlbihlPT5jLlBhcnNlU3RhdHVzLm1lcmdlQXJyYXkodCxlKSk6Yy5QYXJzZVN0YXR1cy5tZXJnZUFycmF5KHQscil9Z2V0IGl0ZW1zKCl7cmV0dXJuIHRoaXMuX2RlZi5pdGVtc31yZXN0KGUpe3JldHVybiBuZXcgRyh7Li4udGhpcy5fZGVmLHJlc3Q6ZX0pfX10LlpvZFR1cGxlPUcsRy5jcmVhdGU9KGUsdCk9PntpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBFcnJvcihcIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgb2Ygc2NoZW1hcyB0byB6LnR1cGxlKFsgLi4uIF0pXCIpO3JldHVybiBuZXcgRyh7aXRlbXM6ZSx0eXBlTmFtZTpyLlpvZFR1cGxlLHJlc3Q6bnVsbCwuLi5wKHQpfSl9O2NsYXNzIFEgZXh0ZW5kcyBoe2dldCBrZXlTY2hlbWEoKXtyZXR1cm4gdGhpcy5fZGVmLmtleVR5cGV9Z2V0IHZhbHVlU2NoZW1hKCl7cmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGV9X3BhcnNlKGUpe2xldHtzdGF0dXM6dCxjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpO2lmKG4ucGFyc2VkVHlwZSE9PXUuWm9kUGFyc2VkVHlwZS5vYmplY3QpcmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkobix7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6dS5ab2RQYXJzZWRUeXBlLm9iamVjdCxyZWNlaXZlZDpuLnBhcnNlZFR5cGV9KSxjLklOVkFMSUQ7bGV0IHI9W10sbz10aGlzLl9kZWYua2V5VHlwZSxhPXRoaXMuX2RlZi52YWx1ZVR5cGU7Zm9yKGxldCBlIGluIG4uZGF0YSlyLnB1c2goe2tleTpvLl9wYXJzZShuZXcgZChuLGUsbi5wYXRoLGUpKSx2YWx1ZTphLl9wYXJzZShuZXcgZChuLG4uZGF0YVtlXSxuLnBhdGgsZSkpLGFsd2F5c1NldDplIGluIG4uZGF0YX0pO3JldHVybiBuLmNvbW1vbi5hc3luYz9jLlBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0QXN5bmModCxyKTpjLlBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyh0LHIpfWdldCBlbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGV9c3RhdGljIGNyZWF0ZShlLHQsbil7cmV0dXJuIG5ldyBRKHQgaW5zdGFuY2VvZiBoP3trZXlUeXBlOmUsdmFsdWVUeXBlOnQsdHlwZU5hbWU6ci5ab2RSZWNvcmQsLi4ucChuKX06e2tleVR5cGU6VC5jcmVhdGUoKSx2YWx1ZVR5cGU6ZSx0eXBlTmFtZTpyLlpvZFJlY29yZCwuLi5wKHQpfSl9fXQuWm9kUmVjb3JkPVE7Y2xhc3MgSiBleHRlbmRzIGh7Z2V0IGtleVNjaGVtYSgpe3JldHVybiB0aGlzLl9kZWYua2V5VHlwZX1nZXQgdmFsdWVTY2hlbWEoKXtyZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZX1fcGFyc2UoZSl7bGV0e3N0YXR1czp0LGN0eDpufT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoZSk7aWYobi5wYXJzZWRUeXBlIT09dS5ab2RQYXJzZWRUeXBlLm1hcClyZXR1cm4oMCxjLmFkZElzc3VlVG9Db250ZXh0KShuLHtjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxleHBlY3RlZDp1LlpvZFBhcnNlZFR5cGUubWFwLHJlY2VpdmVkOm4ucGFyc2VkVHlwZX0pLGMuSU5WQUxJRDtsZXQgcj10aGlzLl9kZWYua2V5VHlwZSxvPXRoaXMuX2RlZi52YWx1ZVR5cGUsYT1bLi4ubi5kYXRhLmVudHJpZXMoKV0ubWFwKChbZSx0XSxhKT0+KHtrZXk6ci5fcGFyc2UobmV3IGQobixlLG4ucGF0aCxbYSxcImtleVwiXSkpLHZhbHVlOm8uX3BhcnNlKG5ldyBkKG4sdCxuLnBhdGgsW2EsXCJ2YWx1ZVwiXSkpfSkpO2lmKG4uY29tbW9uLmFzeW5jKXtsZXQgZT1uZXcgTWFwO3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGFzeW5jKCk9Pntmb3IobGV0IG4gb2YgYSl7bGV0IHI9YXdhaXQgbi5rZXksbz1hd2FpdCBuLnZhbHVlO2lmKFwiYWJvcnRlZFwiPT09ci5zdGF0dXN8fFwiYWJvcnRlZFwiPT09by5zdGF0dXMpcmV0dXJuIGMuSU5WQUxJRDsoXCJkaXJ0eVwiPT09ci5zdGF0dXN8fFwiZGlydHlcIj09PW8uc3RhdHVzKSYmdC5kaXJ0eSgpLGUuc2V0KHIudmFsdWUsby52YWx1ZSl9cmV0dXJue3N0YXR1czp0LnZhbHVlLHZhbHVlOmV9fSl9e2xldCBlPW5ldyBNYXA7Zm9yKGxldCBuIG9mIGEpe2xldCByPW4ua2V5LG89bi52YWx1ZTtpZihcImFib3J0ZWRcIj09PXIuc3RhdHVzfHxcImFib3J0ZWRcIj09PW8uc3RhdHVzKXJldHVybiBjLklOVkFMSUQ7KFwiZGlydHlcIj09PXIuc3RhdHVzfHxcImRpcnR5XCI9PT1vLnN0YXR1cykmJnQuZGlydHkoKSxlLnNldChyLnZhbHVlLG8udmFsdWUpfXJldHVybntzdGF0dXM6dC52YWx1ZSx2YWx1ZTplfX19fXQuWm9kTWFwPUosSi5jcmVhdGU9KGUsdCxuKT0+bmV3IEooe3ZhbHVlVHlwZTp0LGtleVR5cGU6ZSx0eXBlTmFtZTpyLlpvZE1hcCwuLi5wKG4pfSk7Y2xhc3MgZWUgZXh0ZW5kcyBoe19wYXJzZShlKXtsZXR7c3RhdHVzOnQsY3R4Om59PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKTtpZihuLnBhcnNlZFR5cGUhPT11LlpvZFBhcnNlZFR5cGUuc2V0KXJldHVybigwLGMuYWRkSXNzdWVUb0NvbnRleHQpKG4se2NvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLGV4cGVjdGVkOnUuWm9kUGFyc2VkVHlwZS5zZXQscmVjZWl2ZWQ6bi5wYXJzZWRUeXBlfSksYy5JTlZBTElEO2xldCByPXRoaXMuX2RlZjtudWxsIT09ci5taW5TaXplJiZuLmRhdGEuc2l6ZTxyLm1pblNpemUudmFsdWUmJigoMCxjLmFkZElzc3VlVG9Db250ZXh0KShuLHtjb2RlOmkuWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxtaW5pbXVtOnIubWluU2l6ZS52YWx1ZSx0eXBlOlwic2V0XCIsaW5jbHVzaXZlOiEwLGV4YWN0OiExLG1lc3NhZ2U6ci5taW5TaXplLm1lc3NhZ2V9KSx0LmRpcnR5KCkpLG51bGwhPT1yLm1heFNpemUmJm4uZGF0YS5zaXplPnIubWF4U2l6ZS52YWx1ZSYmKCgwLGMuYWRkSXNzdWVUb0NvbnRleHQpKG4se2NvZGU6aS5ab2RJc3N1ZUNvZGUudG9vX2JpZyxtYXhpbXVtOnIubWF4U2l6ZS52YWx1ZSx0eXBlOlwic2V0XCIsaW5jbHVzaXZlOiEwLGV4YWN0OiExLG1lc3NhZ2U6ci5tYXhTaXplLm1lc3NhZ2V9KSx0LmRpcnR5KCkpO2xldCBvPXRoaXMuX2RlZi52YWx1ZVR5cGU7ZnVuY3Rpb24gYShlKXtsZXQgbj1uZXcgU2V0O2ZvcihsZXQgciBvZiBlKXtpZihcImFib3J0ZWRcIj09PXIuc3RhdHVzKXJldHVybiBjLklOVkFMSUQ7XCJkaXJ0eVwiPT09ci5zdGF0dXMmJnQuZGlydHkoKSxuLmFkZChyLnZhbHVlKX1yZXR1cm57c3RhdHVzOnQudmFsdWUsdmFsdWU6bn19bGV0IGw9Wy4uLm4uZGF0YS52YWx1ZXMoKV0ubWFwKChlLHQpPT5vLl9wYXJzZShuZXcgZChuLGUsbi5wYXRoLHQpKSk7cmV0dXJuIG4uY29tbW9uLmFzeW5jP1Byb21pc2UuYWxsKGwpLnRoZW4oZT0+YShlKSk6YShsKX1taW4oZSx0KXtyZXR1cm4gbmV3IGVlKHsuLi50aGlzLl9kZWYsbWluU2l6ZTp7dmFsdWU6ZSxtZXNzYWdlOnMuZXJyb3JVdGlsLnRvU3RyaW5nKHQpfX0pfW1heChlLHQpe3JldHVybiBuZXcgZWUoey4uLnRoaXMuX2RlZixtYXhTaXplOnt2YWx1ZTplLG1lc3NhZ2U6cy5lcnJvclV0aWwudG9TdHJpbmcodCl9fSl9c2l6ZShlLHQpe3JldHVybiB0aGlzLm1pbihlLHQpLm1heChlLHQpfW5vbmVtcHR5KGUpe3JldHVybiB0aGlzLm1pbigxLGUpfX10LlpvZFNldD1lZSxlZS5jcmVhdGU9KGUsdCk9Pm5ldyBlZSh7dmFsdWVUeXBlOmUsbWluU2l6ZTpudWxsLG1heFNpemU6bnVsbCx0eXBlTmFtZTpyLlpvZFNldCwuLi5wKHQpfSk7Y2xhc3MgZXQgZXh0ZW5kcyBoe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnZhbGlkYXRlPXRoaXMuaW1wbGVtZW50fV9wYXJzZShlKXtsZXR7Y3R4OnR9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKTtpZih0LnBhcnNlZFR5cGUhPT11LlpvZFBhcnNlZFR5cGUuZnVuY3Rpb24pcmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6dS5ab2RQYXJzZWRUeXBlLmZ1bmN0aW9uLHJlY2VpdmVkOnQucGFyc2VkVHlwZX0pLGMuSU5WQUxJRDtmdW5jdGlvbiBuKGUsbil7cmV0dXJuKDAsYy5tYWtlSXNzdWUpKHtkYXRhOmUscGF0aDp0LnBhdGgsZXJyb3JNYXBzOlt0LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsdC5zY2hlbWFFcnJvck1hcCwoMCxsLmdldEVycm9yTWFwKSgpLGwuZGVmYXVsdEVycm9yTWFwXS5maWx0ZXIoZT0+ISFlKSxpc3N1ZURhdGE6e2NvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF9hcmd1bWVudHMsYXJndW1lbnRzRXJyb3I6bn19KX1mdW5jdGlvbiByKGUsbil7cmV0dXJuKDAsYy5tYWtlSXNzdWUpKHtkYXRhOmUscGF0aDp0LnBhdGgsZXJyb3JNYXBzOlt0LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsdC5zY2hlbWFFcnJvck1hcCwoMCxsLmdldEVycm9yTWFwKSgpLGwuZGVmYXVsdEVycm9yTWFwXS5maWx0ZXIoZT0+ISFlKSxpc3N1ZURhdGE6e2NvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF9yZXR1cm5fdHlwZSxyZXR1cm5UeXBlRXJyb3I6bn19KX1sZXQgbz17ZXJyb3JNYXA6dC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwfSxhPXQuZGF0YTtpZih0aGlzLl9kZWYucmV0dXJucyBpbnN0YW5jZW9mIGVsKXtsZXQgZT10aGlzO3JldHVybigwLGMuT0spKGFzeW5jIGZ1bmN0aW9uKC4uLnQpe2xldCBsPW5ldyBpLlpvZEVycm9yKFtdKSxzPWF3YWl0IGUuX2RlZi5hcmdzLnBhcnNlQXN5bmModCxvKS5jYXRjaChlPT57dGhyb3cgbC5hZGRJc3N1ZShuKHQsZSkpLGx9KSxjPWF3YWl0IFJlZmxlY3QuYXBwbHkoYSx0aGlzLHMpO3JldHVybiBhd2FpdCBlLl9kZWYucmV0dXJucy5fZGVmLnR5cGUucGFyc2VBc3luYyhjLG8pLmNhdGNoKGU9Pnt0aHJvdyBsLmFkZElzc3VlKHIoYyxlKSksbH0pfSl9e2xldCBlPXRoaXM7cmV0dXJuKDAsYy5PSykoZnVuY3Rpb24oLi4udCl7bGV0IGw9ZS5fZGVmLmFyZ3Muc2FmZVBhcnNlKHQsbyk7aWYoIWwuc3VjY2Vzcyl0aHJvdyBuZXcgaS5ab2RFcnJvcihbbih0LGwuZXJyb3IpXSk7bGV0IHM9UmVmbGVjdC5hcHBseShhLHRoaXMsbC5kYXRhKSxjPWUuX2RlZi5yZXR1cm5zLnNhZmVQYXJzZShzLG8pO2lmKCFjLnN1Y2Nlc3MpdGhyb3cgbmV3IGkuWm9kRXJyb3IoW3IocyxjLmVycm9yKV0pO3JldHVybiBjLmRhdGF9KX19cGFyYW1ldGVycygpe3JldHVybiB0aGlzLl9kZWYuYXJnc31yZXR1cm5UeXBlKCl7cmV0dXJuIHRoaXMuX2RlZi5yZXR1cm5zfWFyZ3MoLi4uZSl7cmV0dXJuIG5ldyBldCh7Li4udGhpcy5fZGVmLGFyZ3M6Ry5jcmVhdGUoZSkucmVzdChGLmNyZWF0ZSgpKX0pfXJldHVybnMoZSl7cmV0dXJuIG5ldyBldCh7Li4udGhpcy5fZGVmLHJldHVybnM6ZX0pfWltcGxlbWVudChlKXtyZXR1cm4gdGhpcy5wYXJzZShlKX1zdHJpY3RJbXBsZW1lbnQoZSl7cmV0dXJuIHRoaXMucGFyc2UoZSl9c3RhdGljIGNyZWF0ZShlLHQsbil7cmV0dXJuIG5ldyBldCh7YXJnczplfHxHLmNyZWF0ZShbXSkucmVzdChGLmNyZWF0ZSgpKSxyZXR1cm5zOnR8fEYuY3JlYXRlKCksdHlwZU5hbWU6ci5ab2RGdW5jdGlvbiwuLi5wKG4pfSl9fXQuWm9kRnVuY3Rpb249ZXQ7Y2xhc3MgZW4gZXh0ZW5kcyBoe2dldCBzY2hlbWEoKXtyZXR1cm4gdGhpcy5fZGVmLmdldHRlcigpfV9wYXJzZShlKXtsZXR7Y3R4OnR9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKTtyZXR1cm4gdGhpcy5fZGVmLmdldHRlcigpLl9wYXJzZSh7ZGF0YTp0LmRhdGEscGF0aDp0LnBhdGgscGFyZW50OnR9KX19dC5ab2RMYXp5PWVuLGVuLmNyZWF0ZT0oZSx0KT0+bmV3IGVuKHtnZXR0ZXI6ZSx0eXBlTmFtZTpyLlpvZExhenksLi4ucCh0KX0pO2NsYXNzIGVyIGV4dGVuZHMgaHtfcGFyc2UoZSl7aWYoZS5kYXRhIT09dGhpcy5fZGVmLnZhbHVlKXtsZXQgdD10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4oMCxjLmFkZElzc3VlVG9Db250ZXh0KSh0LHtyZWNlaXZlZDp0LmRhdGEsY29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX2xpdGVyYWwsZXhwZWN0ZWQ6dGhpcy5fZGVmLnZhbHVlfSksYy5JTlZBTElEfXJldHVybntzdGF0dXM6XCJ2YWxpZFwiLHZhbHVlOmUuZGF0YX19Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX2RlZi52YWx1ZX19ZnVuY3Rpb24gZW8oZSx0KXtyZXR1cm4gbmV3IGVhKHt2YWx1ZXM6ZSx0eXBlTmFtZTpyLlpvZEVudW0sLi4ucCh0KX0pfXQuWm9kTGl0ZXJhbD1lcixlci5jcmVhdGU9KGUsdCk9Pm5ldyBlcih7dmFsdWU6ZSx0eXBlTmFtZTpyLlpvZExpdGVyYWwsLi4ucCh0KX0pO2NsYXNzIGVhIGV4dGVuZHMgaHtfcGFyc2UoZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUuZGF0YSl7bGV0IHQ9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSksbj10aGlzLl9kZWYudmFsdWVzO3JldHVybigwLGMuYWRkSXNzdWVUb0NvbnRleHQpKHQse2V4cGVjdGVkOnUudXRpbC5qb2luVmFsdWVzKG4pLHJlY2VpdmVkOnQucGFyc2VkVHlwZSxjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZX0pLGMuSU5WQUxJRH1pZih0aGlzLl9jYWNoZXx8KHRoaXMuX2NhY2hlPW5ldyBTZXQodGhpcy5fZGVmLnZhbHVlcykpLCF0aGlzLl9jYWNoZS5oYXMoZS5kYXRhKSl7bGV0IHQ9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSksbj10aGlzLl9kZWYudmFsdWVzO3JldHVybigwLGMuYWRkSXNzdWVUb0NvbnRleHQpKHQse3JlY2VpdmVkOnQuZGF0YSxjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZSxvcHRpb25zOm59KSxjLklOVkFMSUR9cmV0dXJuKDAsYy5PSykoZS5kYXRhKX1nZXQgb3B0aW9ucygpe3JldHVybiB0aGlzLl9kZWYudmFsdWVzfWdldCBlbnVtKCl7bGV0IGU9e307Zm9yKGxldCB0IG9mIHRoaXMuX2RlZi52YWx1ZXMpZVt0XT10O3JldHVybiBlfWdldCBWYWx1ZXMoKXtsZXQgZT17fTtmb3IobGV0IHQgb2YgdGhpcy5fZGVmLnZhbHVlcyllW3RdPXQ7cmV0dXJuIGV9Z2V0IEVudW0oKXtsZXQgZT17fTtmb3IobGV0IHQgb2YgdGhpcy5fZGVmLnZhbHVlcyllW3RdPXQ7cmV0dXJuIGV9ZXh0cmFjdChlLHQ9dGhpcy5fZGVmKXtyZXR1cm4gZWEuY3JlYXRlKGUsey4uLnRoaXMuX2RlZiwuLi50fSl9ZXhjbHVkZShlLHQ9dGhpcy5fZGVmKXtyZXR1cm4gZWEuY3JlYXRlKHRoaXMub3B0aW9ucy5maWx0ZXIodD0+IWUuaW5jbHVkZXModCkpLHsuLi50aGlzLl9kZWYsLi4udH0pfX10LlpvZEVudW09ZWEsZWEuY3JlYXRlPWVvO2NsYXNzIGVpIGV4dGVuZHMgaHtfcGFyc2UoZSl7bGV0IHQ9dS51dGlsLmdldFZhbGlkRW51bVZhbHVlcyh0aGlzLl9kZWYudmFsdWVzKSxuPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO2lmKG4ucGFyc2VkVHlwZSE9PXUuWm9kUGFyc2VkVHlwZS5zdHJpbmcmJm4ucGFyc2VkVHlwZSE9PXUuWm9kUGFyc2VkVHlwZS5udW1iZXIpe2xldCBlPXUudXRpbC5vYmplY3RWYWx1ZXModCk7cmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkobix7ZXhwZWN0ZWQ6dS51dGlsLmpvaW5WYWx1ZXMoZSkscmVjZWl2ZWQ6bi5wYXJzZWRUeXBlLGNvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlfSksYy5JTlZBTElEfWlmKHRoaXMuX2NhY2hlfHwodGhpcy5fY2FjaGU9bmV3IFNldCh1LnV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzKHRoaXMuX2RlZi52YWx1ZXMpKSksIXRoaXMuX2NhY2hlLmhhcyhlLmRhdGEpKXtsZXQgZT11LnV0aWwub2JqZWN0VmFsdWVzKHQpO3JldHVybigwLGMuYWRkSXNzdWVUb0NvbnRleHQpKG4se3JlY2VpdmVkOm4uZGF0YSxjb2RlOmkuWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZSxvcHRpb25zOmV9KSxjLklOVkFMSUR9cmV0dXJuKDAsYy5PSykoZS5kYXRhKX1nZXQgZW51bSgpe3JldHVybiB0aGlzLl9kZWYudmFsdWVzfX10LlpvZE5hdGl2ZUVudW09ZWksZWkuY3JlYXRlPShlLHQpPT5uZXcgZWkoe3ZhbHVlczplLHR5cGVOYW1lOnIuWm9kTmF0aXZlRW51bSwuLi5wKHQpfSk7Y2xhc3MgZWwgZXh0ZW5kcyBoe3Vud3JhcCgpe3JldHVybiB0aGlzLl9kZWYudHlwZX1fcGFyc2UoZSl7bGV0e2N0eDp0fT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoZSk7aWYodC5wYXJzZWRUeXBlIT09dS5ab2RQYXJzZWRUeXBlLnByb21pc2UmJiExPT09dC5jb21tb24uYXN5bmMpcmV0dXJuKDAsYy5hZGRJc3N1ZVRvQ29udGV4dCkodCx7Y29kZTppLlpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6dS5ab2RQYXJzZWRUeXBlLnByb21pc2UscmVjZWl2ZWQ6dC5wYXJzZWRUeXBlfSksYy5JTlZBTElEO2xldCBuPXQucGFyc2VkVHlwZT09PXUuWm9kUGFyc2VkVHlwZS5wcm9taXNlP3QuZGF0YTpQcm9taXNlLnJlc29sdmUodC5kYXRhKTtyZXR1cm4oMCxjLk9LKShuLnRoZW4oZT0+dGhpcy5fZGVmLnR5cGUucGFyc2VBc3luYyhlLHtwYXRoOnQucGF0aCxlcnJvck1hcDp0LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXB9KSkpfX10LlpvZFByb21pc2U9ZWwsZWwuY3JlYXRlPShlLHQpPT5uZXcgZWwoe3R5cGU6ZSx0eXBlTmFtZTpyLlpvZFByb21pc2UsLi4ucCh0KX0pO2NsYXNzIGVzIGV4dGVuZHMgaHtpbm5lclR5cGUoKXtyZXR1cm4gdGhpcy5fZGVmLnNjaGVtYX1zb3VyY2VUeXBlKCl7cmV0dXJuIHRoaXMuX2RlZi5zY2hlbWEuX2RlZi50eXBlTmFtZT09PXIuWm9kRWZmZWN0cz90aGlzLl9kZWYuc2NoZW1hLnNvdXJjZVR5cGUoKTp0aGlzLl9kZWYuc2NoZW1hfV9wYXJzZShlKXtsZXR7c3RhdHVzOnQsY3R4Om59PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKSxyPXRoaXMuX2RlZi5lZmZlY3R8fG51bGwsbz17YWRkSXNzdWU6ZT0+eygwLGMuYWRkSXNzdWVUb0NvbnRleHQpKG4sZSksZS5mYXRhbD90LmFib3J0KCk6dC5kaXJ0eSgpfSxnZXQgcGF0aCgpe3JldHVybiBuLnBhdGh9fTtpZihvLmFkZElzc3VlPW8uYWRkSXNzdWUuYmluZChvKSxcInByZXByb2Nlc3NcIj09PXIudHlwZSl7bGV0IGU9ci50cmFuc2Zvcm0obi5kYXRhLG8pO2lmKG4uY29tbW9uLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZSkudGhlbihhc3luYyBlPT57aWYoXCJhYm9ydGVkXCI9PT10LnZhbHVlKXJldHVybiBjLklOVkFMSUQ7bGV0IHI9YXdhaXQgdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VBc3luYyh7ZGF0YTplLHBhdGg6bi5wYXRoLHBhcmVudDpufSk7cmV0dXJuXCJhYm9ydGVkXCI9PT1yLnN0YXR1cz9jLklOVkFMSUQ6XCJkaXJ0eVwiPT09ci5zdGF0dXN8fFwiZGlydHlcIj09PXQudmFsdWU/KDAsYy5ESVJUWSkoci52YWx1ZSk6cn0pO3tpZihcImFib3J0ZWRcIj09PXQudmFsdWUpcmV0dXJuIGMuSU5WQUxJRDtsZXQgcj10aGlzLl9kZWYuc2NoZW1hLl9wYXJzZVN5bmMoe2RhdGE6ZSxwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pO3JldHVyblwiYWJvcnRlZFwiPT09ci5zdGF0dXM/Yy5JTlZBTElEOlwiZGlydHlcIj09PXIuc3RhdHVzfHxcImRpcnR5XCI9PT10LnZhbHVlPygwLGMuRElSVFkpKHIudmFsdWUpOnJ9fWlmKFwicmVmaW5lbWVudFwiPT09ci50eXBlKXtsZXQgZT1lPT57bGV0IHQ9ci5yZWZpbmVtZW50KGUsbyk7aWYobi5jb21tb24uYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KTtpZih0IGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBFcnJvcihcIkFzeW5jIHJlZmluZW1lbnQgZW5jb3VudGVyZWQgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlIG9wZXJhdGlvbi4gVXNlIC5wYXJzZUFzeW5jIGluc3RlYWQuXCIpO3JldHVybiBlfTtpZighMSE9PW4uY29tbW9uLmFzeW5jKXJldHVybiB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHtkYXRhOm4uZGF0YSxwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pLnRoZW4obj0+XCJhYm9ydGVkXCI9PT1uLnN0YXR1cz9jLklOVkFMSUQ6KFwiZGlydHlcIj09PW4uc3RhdHVzJiZ0LmRpcnR5KCksZShuLnZhbHVlKS50aGVuKCgpPT4oe3N0YXR1czp0LnZhbHVlLHZhbHVlOm4udmFsdWV9KSkpKTt7bGV0IHI9dGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtkYXRhOm4uZGF0YSxwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pO3JldHVyblwiYWJvcnRlZFwiPT09ci5zdGF0dXM/Yy5JTlZBTElEOihcImRpcnR5XCI9PT1yLnN0YXR1cyYmdC5kaXJ0eSgpLGUoci52YWx1ZSkse3N0YXR1czp0LnZhbHVlLHZhbHVlOnIudmFsdWV9KX19aWYoXCJ0cmFuc2Zvcm1cIj09PXIudHlwZSlpZighMSE9PW4uY29tbW9uLmFzeW5jKXJldHVybiB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHtkYXRhOm4uZGF0YSxwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pLnRoZW4oZT0+KDAsYy5pc1ZhbGlkKShlKT9Qcm9taXNlLnJlc29sdmUoci50cmFuc2Zvcm0oZS52YWx1ZSxvKSkudGhlbihlPT4oe3N0YXR1czp0LnZhbHVlLHZhbHVlOmV9KSk6Yy5JTlZBTElEKTtlbHNle2xldCBlPXRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7ZGF0YTpuLmRhdGEscGF0aDpuLnBhdGgscGFyZW50Om59KTtpZighKDAsYy5pc1ZhbGlkKShlKSlyZXR1cm4gYy5JTlZBTElEO2xldCBhPXIudHJhbnNmb3JtKGUudmFsdWUsbyk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgRXJyb3IoXCJBc3luY2hyb25vdXMgdHJhbnNmb3JtIGVuY291bnRlcmVkIGR1cmluZyBzeW5jaHJvbm91cyBwYXJzZSBvcGVyYXRpb24uIFVzZSAucGFyc2VBc3luYyBpbnN0ZWFkLlwiKTtyZXR1cm57c3RhdHVzOnQudmFsdWUsdmFsdWU6YX19dS51dGlsLmFzc2VydE5ldmVyKHIpfX10LlpvZEVmZmVjdHM9ZXMsdC5ab2RUcmFuc2Zvcm1lcj1lcyxlcy5jcmVhdGU9KGUsdCxuKT0+bmV3IGVzKHtzY2hlbWE6ZSx0eXBlTmFtZTpyLlpvZEVmZmVjdHMsZWZmZWN0OnQsLi4ucChuKX0pLGVzLmNyZWF0ZVdpdGhQcmVwcm9jZXNzPShlLHQsbik9Pm5ldyBlcyh7c2NoZW1hOnQsZWZmZWN0Ont0eXBlOlwicHJlcHJvY2Vzc1wiLHRyYW5zZm9ybTplfSx0eXBlTmFtZTpyLlpvZEVmZmVjdHMsLi4ucChuKX0pO2NsYXNzIGVjIGV4dGVuZHMgaHtfcGFyc2UoZSl7cmV0dXJuIHRoaXMuX2dldFR5cGUoZSk9PT11LlpvZFBhcnNlZFR5cGUudW5kZWZpbmVkPygwLGMuT0spKHZvaWQgMCk6dGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoZSl9dW53cmFwKCl7cmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGV9fXQuWm9kT3B0aW9uYWw9ZWMsZWMuY3JlYXRlPShlLHQpPT5uZXcgZWMoe2lubmVyVHlwZTplLHR5cGVOYW1lOnIuWm9kT3B0aW9uYWwsLi4ucCh0KX0pO2NsYXNzIGV1IGV4dGVuZHMgaHtfcGFyc2UoZSl7cmV0dXJuIHRoaXMuX2dldFR5cGUoZSk9PT11LlpvZFBhcnNlZFR5cGUubnVsbD8oMCxjLk9LKShudWxsKTp0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZShlKX11bndyYXAoKXtyZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZX19dC5ab2ROdWxsYWJsZT1ldSxldS5jcmVhdGU9KGUsdCk9Pm5ldyBldSh7aW5uZXJUeXBlOmUsdHlwZU5hbWU6ci5ab2ROdWxsYWJsZSwuLi5wKHQpfSk7Y2xhc3MgZWQgZXh0ZW5kcyBoe19wYXJzZShlKXtsZXR7Y3R4OnR9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKSxuPXQuZGF0YTtyZXR1cm4gdC5wYXJzZWRUeXBlPT09dS5ab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCYmKG49dGhpcy5fZGVmLmRlZmF1bHRWYWx1ZSgpKSx0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZSh7ZGF0YTpuLHBhdGg6dC5wYXRoLHBhcmVudDp0fSl9cmVtb3ZlRGVmYXVsdCgpe3JldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlfX10LlpvZERlZmF1bHQ9ZWQsZWQuY3JlYXRlPShlLHQpPT5uZXcgZWQoe2lubmVyVHlwZTplLHR5cGVOYW1lOnIuWm9kRGVmYXVsdCxkZWZhdWx0VmFsdWU6XCJmdW5jdGlvblwiPT10eXBlb2YgdC5kZWZhdWx0P3QuZGVmYXVsdDooKT0+dC5kZWZhdWx0LC4uLnAodCl9KTtjbGFzcyBlZiBleHRlbmRzIGh7X3BhcnNlKGUpe2xldHtjdHg6dH09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpLG49ey4uLnQsY29tbW9uOnsuLi50LmNvbW1vbixpc3N1ZXM6W119fSxyPXRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKHtkYXRhOm4uZGF0YSxwYXRoOm4ucGF0aCxwYXJlbnQ6ey4uLm59fSk7cmV0dXJuKDAsYy5pc0FzeW5jKShyKT9yLnRoZW4oZT0+KHtzdGF0dXM6XCJ2YWxpZFwiLHZhbHVlOlwidmFsaWRcIj09PWUuc3RhdHVzP2UudmFsdWU6dGhpcy5fZGVmLmNhdGNoVmFsdWUoe2dldCBlcnJvcigpe3JldHVybiBuZXcgaS5ab2RFcnJvcihuLmNvbW1vbi5pc3N1ZXMpfSxpbnB1dDpuLmRhdGF9KX0pKTp7c3RhdHVzOlwidmFsaWRcIix2YWx1ZTpcInZhbGlkXCI9PT1yLnN0YXR1cz9yLnZhbHVlOnRoaXMuX2RlZi5jYXRjaFZhbHVlKHtnZXQgZXJyb3IoKXtyZXR1cm4gbmV3IGkuWm9kRXJyb3Iobi5jb21tb24uaXNzdWVzKX0saW5wdXQ6bi5kYXRhfSl9fXJlbW92ZUNhdGNoKCl7cmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGV9fXQuWm9kQ2F0Y2g9ZWYsZWYuY3JlYXRlPShlLHQpPT5uZXcgZWYoe2lubmVyVHlwZTplLHR5cGVOYW1lOnIuWm9kQ2F0Y2gsY2F0Y2hWYWx1ZTpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNhdGNoP3QuY2F0Y2g6KCk9PnQuY2F0Y2gsLi4ucCh0KX0pO2NsYXNzIGVwIGV4dGVuZHMgaHtfcGFyc2UoZSl7aWYodGhpcy5fZ2V0VHlwZShlKSE9PXUuWm9kUGFyc2VkVHlwZS5uYW4pe2xldCB0PXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO3JldHVybigwLGMuYWRkSXNzdWVUb0NvbnRleHQpKHQse2NvZGU6aS5ab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLGV4cGVjdGVkOnUuWm9kUGFyc2VkVHlwZS5uYW4scmVjZWl2ZWQ6dC5wYXJzZWRUeXBlfSksYy5JTlZBTElEfXJldHVybntzdGF0dXM6XCJ2YWxpZFwiLHZhbHVlOmUuZGF0YX19fXQuWm9kTmFOPWVwLGVwLmNyZWF0ZT1lPT5uZXcgZXAoe3R5cGVOYW1lOnIuWm9kTmFOLC4uLnAoZSl9KSx0LkJSQU5EPVN5bWJvbChcInpvZF9icmFuZFwiKTtjbGFzcyBlaCBleHRlbmRzIGh7X3BhcnNlKGUpe2xldHtjdHg6dH09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpLG49dC5kYXRhO3JldHVybiB0aGlzLl9kZWYudHlwZS5fcGFyc2Uoe2RhdGE6bixwYXRoOnQucGF0aCxwYXJlbnQ6dH0pfXVud3JhcCgpe3JldHVybiB0aGlzLl9kZWYudHlwZX19dC5ab2RCcmFuZGVkPWVoO2NsYXNzIGVtIGV4dGVuZHMgaHtfcGFyc2UoZSl7bGV0e3N0YXR1czp0LGN0eDpufT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoZSk7aWYobi5jb21tb24uYXN5bmMpcmV0dXJuKGFzeW5jKCk9PntsZXQgZT1hd2FpdCB0aGlzLl9kZWYuaW4uX3BhcnNlQXN5bmMoe2RhdGE6bi5kYXRhLHBhdGg6bi5wYXRoLHBhcmVudDpufSk7cmV0dXJuXCJhYm9ydGVkXCI9PT1lLnN0YXR1cz9jLklOVkFMSUQ6XCJkaXJ0eVwiPT09ZS5zdGF0dXM/KHQuZGlydHkoKSwoMCxjLkRJUlRZKShlLnZhbHVlKSk6dGhpcy5fZGVmLm91dC5fcGFyc2VBc3luYyh7ZGF0YTplLnZhbHVlLHBhdGg6bi5wYXRoLHBhcmVudDpufSl9KSgpO3tsZXQgZT10aGlzLl9kZWYuaW4uX3BhcnNlU3luYyh7ZGF0YTpuLmRhdGEscGF0aDpuLnBhdGgscGFyZW50Om59KTtyZXR1cm5cImFib3J0ZWRcIj09PWUuc3RhdHVzP2MuSU5WQUxJRDpcImRpcnR5XCI9PT1lLnN0YXR1cz8odC5kaXJ0eSgpLHtzdGF0dXM6XCJkaXJ0eVwiLHZhbHVlOmUudmFsdWV9KTp0aGlzLl9kZWYub3V0Ll9wYXJzZVN5bmMoe2RhdGE6ZS52YWx1ZSxwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pfX1zdGF0aWMgY3JlYXRlKGUsdCl7cmV0dXJuIG5ldyBlbSh7aW46ZSxvdXQ6dCx0eXBlTmFtZTpyLlpvZFBpcGVsaW5lfSl9fXQuWm9kUGlwZWxpbmU9ZW07Y2xhc3MgZWcgZXh0ZW5kcyBoe19wYXJzZShlKXtsZXQgdD10aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZShlKSxuPWU9PigoMCxjLmlzVmFsaWQpKGUpJiYoZS52YWx1ZT1PYmplY3QuZnJlZXplKGUudmFsdWUpKSxlKTtyZXR1cm4oMCxjLmlzQXN5bmMpKHQpP3QudGhlbihlPT5uKGUpKTpuKHQpfXVud3JhcCgpe3JldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlfX1mdW5jdGlvbiBleShlLHQpe2xldCBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZSh0KTpcInN0cmluZ1wiPT10eXBlb2YgZT97bWVzc2FnZTplfTplO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBuP3ttZXNzYWdlOm59Om59ZnVuY3Rpb24gZXYoZSx0PXt9LG4pe3JldHVybiBlP1UuY3JlYXRlKCkuc3VwZXJSZWZpbmUoKHIsbyk9PntsZXQgYT1lKHIpO2lmKGEgaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiBhLnRoZW4oZT0+e2lmKCFlKXtsZXQgZT1leSh0LHIpLGE9ZS5mYXRhbD8/bj8/ITA7by5hZGRJc3N1ZSh7Y29kZTpcImN1c3RvbVwiLC4uLmUsZmF0YWw6YX0pfX0pO2lmKCFhKXtsZXQgZT1leSh0LHIpLGE9ZS5mYXRhbD8/bj8/ITA7by5hZGRJc3N1ZSh7Y29kZTpcImN1c3RvbVwiLC4uLmUsZmF0YWw6YX0pfX0pOlUuY3JlYXRlKCl9dC5ab2RSZWFkb25seT1lZyxlZy5jcmVhdGU9KGUsdCk9Pm5ldyBlZyh7aW5uZXJUeXBlOmUsdHlwZU5hbWU6ci5ab2RSZWFkb25seSwuLi5wKHQpfSksdC5sYXRlPXtvYmplY3Q6JC5sYXp5Y3JlYXRlfSwobz1yfHwodC5ab2RGaXJzdFBhcnR5VHlwZUtpbmQ9cj17fSkpLlpvZFN0cmluZz1cIlpvZFN0cmluZ1wiLG8uWm9kTnVtYmVyPVwiWm9kTnVtYmVyXCIsby5ab2ROYU49XCJab2ROYU5cIixvLlpvZEJpZ0ludD1cIlpvZEJpZ0ludFwiLG8uWm9kQm9vbGVhbj1cIlpvZEJvb2xlYW5cIixvLlpvZERhdGU9XCJab2REYXRlXCIsby5ab2RTeW1ib2w9XCJab2RTeW1ib2xcIixvLlpvZFVuZGVmaW5lZD1cIlpvZFVuZGVmaW5lZFwiLG8uWm9kTnVsbD1cIlpvZE51bGxcIixvLlpvZEFueT1cIlpvZEFueVwiLG8uWm9kVW5rbm93bj1cIlpvZFVua25vd25cIixvLlpvZE5ldmVyPVwiWm9kTmV2ZXJcIixvLlpvZFZvaWQ9XCJab2RWb2lkXCIsby5ab2RBcnJheT1cIlpvZEFycmF5XCIsby5ab2RPYmplY3Q9XCJab2RPYmplY3RcIixvLlpvZFVuaW9uPVwiWm9kVW5pb25cIixvLlpvZERpc2NyaW1pbmF0ZWRVbmlvbj1cIlpvZERpc2NyaW1pbmF0ZWRVbmlvblwiLG8uWm9kSW50ZXJzZWN0aW9uPVwiWm9kSW50ZXJzZWN0aW9uXCIsby5ab2RUdXBsZT1cIlpvZFR1cGxlXCIsby5ab2RSZWNvcmQ9XCJab2RSZWNvcmRcIixvLlpvZE1hcD1cIlpvZE1hcFwiLG8uWm9kU2V0PVwiWm9kU2V0XCIsby5ab2RGdW5jdGlvbj1cIlpvZEZ1bmN0aW9uXCIsby5ab2RMYXp5PVwiWm9kTGF6eVwiLG8uWm9kTGl0ZXJhbD1cIlpvZExpdGVyYWxcIixvLlpvZEVudW09XCJab2RFbnVtXCIsby5ab2RFZmZlY3RzPVwiWm9kRWZmZWN0c1wiLG8uWm9kTmF0aXZlRW51bT1cIlpvZE5hdGl2ZUVudW1cIixvLlpvZE9wdGlvbmFsPVwiWm9kT3B0aW9uYWxcIixvLlpvZE51bGxhYmxlPVwiWm9kTnVsbGFibGVcIixvLlpvZERlZmF1bHQ9XCJab2REZWZhdWx0XCIsby5ab2RDYXRjaD1cIlpvZENhdGNoXCIsby5ab2RQcm9taXNlPVwiWm9kUHJvbWlzZVwiLG8uWm9kQnJhbmRlZD1cIlpvZEJyYW5kZWRcIixvLlpvZFBpcGVsaW5lPVwiWm9kUGlwZWxpbmVcIixvLlpvZFJlYWRvbmx5PVwiWm9kUmVhZG9ubHlcIix0Lmluc3RhbmNlb2Y9KGUsdD17bWVzc2FnZTpgSW5wdXQgbm90IGluc3RhbmNlIG9mICR7ZS5uYW1lfWB9KT0+ZXYodD0+dCBpbnN0YW5jZW9mIGUsdCk7bGV0IGViPVQuY3JlYXRlO3Quc3RyaW5nPWViO2xldCBlQT16LmNyZWF0ZTt0Lm51bWJlcj1lQSx0Lm5hbj1lcC5jcmVhdGUsdC5iaWdpbnQ9RC5jcmVhdGU7bGV0IGV4PUwuY3JlYXRlO3QuYm9vbGVhbj1leCx0LmRhdGU9Ti5jcmVhdGUsdC5zeW1ib2w9Ui5jcmVhdGUsdC51bmRlZmluZWQ9TS5jcmVhdGUsdC5udWxsPVouY3JlYXRlLHQuYW55PVUuY3JlYXRlLHQudW5rbm93bj1GLmNyZWF0ZSx0Lm5ldmVyPXEuY3JlYXRlLHQudm9pZD1ILmNyZWF0ZSx0LmFycmF5PVYuY3JlYXRlLHQub2JqZWN0PSQuY3JlYXRlLHQuc3RyaWN0T2JqZWN0PSQuc3RyaWN0Q3JlYXRlLHQudW5pb249Vy5jcmVhdGUsdC5kaXNjcmltaW5hdGVkVW5pb249Sy5jcmVhdGUsdC5pbnRlcnNlY3Rpb249WC5jcmVhdGUsdC50dXBsZT1HLmNyZWF0ZSx0LnJlY29yZD1RLmNyZWF0ZSx0Lm1hcD1KLmNyZWF0ZSx0LnNldD1lZS5jcmVhdGUsdC5mdW5jdGlvbj1ldC5jcmVhdGUsdC5sYXp5PWVuLmNyZWF0ZSx0LmxpdGVyYWw9ZXIuY3JlYXRlLHQuZW51bT1lYS5jcmVhdGUsdC5uYXRpdmVFbnVtPWVpLmNyZWF0ZSx0LnByb21pc2U9ZWwuY3JlYXRlO2xldCBldz1lcy5jcmVhdGU7dC5lZmZlY3Q9ZXcsdC50cmFuc2Zvcm1lcj1ldyx0Lm9wdGlvbmFsPWVjLmNyZWF0ZSx0Lm51bGxhYmxlPWV1LmNyZWF0ZSx0LnByZXByb2Nlc3M9ZXMuY3JlYXRlV2l0aFByZXByb2Nlc3MsdC5waXBlbGluZT1lbS5jcmVhdGUsdC5vc3RyaW5nPSgpPT5lYigpLm9wdGlvbmFsKCksdC5vbnVtYmVyPSgpPT5lQSgpLm9wdGlvbmFsKCksdC5vYm9vbGVhbj0oKT0+ZXgoKS5vcHRpb25hbCgpLHQuY29lcmNlPXtzdHJpbmc6ZT0+VC5jcmVhdGUoey4uLmUsY29lcmNlOiEwfSksbnVtYmVyOmU9PnouY3JlYXRlKHsuLi5lLGNvZXJjZTohMH0pLGJvb2xlYW46ZT0+TC5jcmVhdGUoey4uLmUsY29lcmNlOiEwfSksYmlnaW50OmU9PkQuY3JlYXRlKHsuLi5lLGNvZXJjZTohMH0pLGRhdGU6ZT0+Ti5jcmVhdGUoey4uLmUsY29lcmNlOiEwfSl9LHQuTkVWRVI9Yy5JTlZBTElEfX0sbj17fTtmdW5jdGlvbiByKGUpe3ZhciBvPW5bZV07aWYodm9pZCAwIT09bylyZXR1cm4gby5leHBvcnRzO3ZhciBhPW5bZV09e2V4cG9ydHM6e319LGk9ITA7dHJ5e3RbZV0uY2FsbChhLmV4cG9ydHMsYSxhLmV4cG9ydHMsciksaT0hMX1maW5hbGx5e2kmJmRlbGV0ZSBuW2VdfXJldHVybiBhLmV4cG9ydHN9ci5hYj1cIi8vXCIsZS5leHBvcnRzPXIoNjI5KX0pKCl9fSxfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhlKXt2YXIgdD1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bZV07aWYodm9pZCAwIT09dClyZXR1cm4gdC5leHBvcnRzO3ZhciBuPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1tlXT17aWQ6ZSxleHBvcnRzOnt9fTtyZXR1cm4gX193ZWJwYWNrX21vZHVsZXNfX1tlXShuLG4uZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKSxuLmV4cG9ydHN9X193ZWJwYWNrX3JlcXVpcmVfXy5uPWU9Pnt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/KCk9PmUuZGVmYXVsdDooKT0+ZTtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5kKHQse2E6dH0pLHR9LCgoKT0+e3ZhciBlLHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mP2U9Pk9iamVjdC5nZXRQcm90b3R5cGVPZihlKTplPT5lLl9fcHJvdG9fXztfX3dlYnBhY2tfcmVxdWlyZV9fLnQ9ZnVuY3Rpb24obixyKXtpZigxJnImJihuPXRoaXMobikpLDgmcnx8XCJvYmplY3RcIj09dHlwZW9mIG4mJm4mJig0JnImJm4uX19lc01vZHVsZXx8MTYmciYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50aGVuKSlyZXR1cm4gbjt2YXIgbz1PYmplY3QuY3JlYXRlKG51bGwpO19fd2VicGFja19yZXF1aXJlX18ucihvKTt2YXIgYT17fTtlPWV8fFtudWxsLHQoe30pLHQoW10pLHQodCldO2Zvcih2YXIgaT0yJnImJm47XCJvYmplY3RcIj09dHlwZW9mIGkmJiF+ZS5pbmRleE9mKGkpO2k9dChpKSlPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpKS5mb3JFYWNoKGU9PnthW2VdPSgpPT5uW2VdfSk7cmV0dXJuIGEuZGVmYXVsdD0oKT0+bixfX3dlYnBhY2tfcmVxdWlyZV9fLmQobyxhKSxvfX0pKCksX193ZWJwYWNrX3JlcXVpcmVfXy5kPShlLHQpPT57Zm9yKHZhciBuIGluIHQpX193ZWJwYWNrX3JlcXVpcmVfXy5vKHQsbikmJiFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZSxuKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSxfX3dlYnBhY2tfcmVxdWlyZV9fLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLF9fd2VicGFja19yZXF1aXJlX18ucj1lPT57XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sX193ZWJwYWNrX3JlcXVpcmVfXy5uYz12b2lkIDA7dmFyIF9fd2VicGFja19leHBvcnRzX189e307Zm9yKHZhciBfX3dlYnBhY2tfaV9fIGluKCgpPT57XCJ1c2Ugc3RyaWN0XCI7X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pLF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLHtkaXNwYXRjaGVyOigpPT5kcixyZW5kZXJBcHBEZXZPdmVybGF5OigpPT5kZCxEZXZPdmVybGF5Q29udGV4dDooKT0+ZGkscmVuZGVyUGFnZXNEZXZPdmVybGF5OigpPT5kZix1c2VEZXZPdmVybGF5Q29udGV4dDooKT0+ZGx9KTt2YXIgZSx0LG4scixvPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIiksYT1fX3dlYnBhY2tfcmVxdWlyZV9fLm4obyksaT1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIiksbD1fX3dlYnBhY2tfcmVxdWlyZV9fLm4oaSkscz1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvYnVpbGQvd2VicGFjay9sb2FkZXJzL2RldnRvb2wvZGV2dG9vbC1zdHlsZS1pbmplY3QuanNcIiksYz1fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocyksdT1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCIpLGQ9X193ZWJwYWNrX3JlcXVpcmVfXy5uKHUpLGY9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiKSxwPV9fd2VicGFja19yZXF1aXJlX18ubihmKSxoPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiKSxtPV9fd2VicGFja19yZXF1aXJlX18ubihoKSxnPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvZ2xvYmFsLmNzc1wiKSx5PXt9O3kuc3R5bGVUYWdUcmFuc2Zvcm09bSgpLHkuc2V0QXR0cmlidXRlcz1kKCkseS5pbnNlcnQ9YygpLHkuZG9tQVBJPWwoKSx5Lmluc2VydFN0eWxlRWxlbWVudD1wKCksYSgpKGcuWix5KSxnLlomJmcuWi5sb2NhbHMmJmcuWi5sb2NhbHM7dmFyIHY9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL3RvYXN0L3N0eWxlLmNzc1wiKSxiPXt9O2Iuc3R5bGVUYWdUcmFuc2Zvcm09bSgpLGIuc2V0QXR0cmlidXRlcz1kKCksYi5pbnNlcnQ9YygpLGIuZG9tQVBJPWwoKSxiLmluc2VydFN0eWxlRWxlbWVudD1wKCksYSgpKHYuWixiKSx2LlomJnYuWi5sb2NhbHMmJnYuWi5sb2NhbHM7dmFyIEE9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtcnVudGltZS5qc1wiKSx4PV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvY29tcGlsZXItcnVudGltZS5qc1wiKSx3PV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIiksQz1fX3dlYnBhY2tfcmVxdWlyZV9fLnQodywyKSxfPV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvc3RhY2t0cmFjZS1wYXJzZXIvc3RhY2stdHJhY2UtcGFyc2VyLmNqcy5qc1wiKSxrPS9cXC9fbmV4dChcXC9zdGF0aWNcXC8uKykvLEU9U3ltYm9sLmZvcihcIm5leHQuY29uc29sZS5lcnJvci5kaWdlc3RcIik7ZnVuY3Rpb24gaihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gUyhlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7aihlLHQsblt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBPKGUsdCl7cmV0dXJuIHQ9bnVsbCE9dD90Ont9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbikpfSksZX12YXIgQj17U21hbGw6MTYvMTQsTWVkaXVtOjEsTGFyZ2U6MTYvMTh9LFA9XCJzdGF0aWMtaW5kaWNhdG9yXCIsST1cImJ1aWxkLW9rXCIsVD1cImJ1aWxkLWVycm9yXCIsej1cImJlZm9yZS1mYXN0LXJlZnJlc2hcIixEPVwiZmFzdC1yZWZyZXNoXCIsTD1cInZlcnNpb24taW5mb1wiLE49XCJ1bmhhbmRsZWQtZXJyb3JcIixSPVwidW5oYW5kbGVkLXJlamVjdGlvblwiLE09XCJkZWJ1Zy1pbmZvXCIsWj1cImRldi1pbmRpY2F0b3JcIixVPVwiZGV2LWluZGljYXRvci1kaXNhYmxlXCIsRj1cImVycm9yLW92ZXJsYXktb3BlblwiLHE9XCJlcnJvci1vdmVybGF5LWNsb3NlXCIsSD1cImVycm9yLW92ZXJsYXktdG9nZ2xlXCIsVj1cImJ1aWxkaW5nLWluZGljYXRvci1zaG93XCIsJD1cImJ1aWxkaW5nLWluZGljYXRvci1oaWRlXCIsVz1cInJlbmRlcmluZy1pbmRpY2F0b3Itc2hvd1wiLFk9XCJyZW5kZXJpbmctaW5kaWNhdG9yLWhpZGVcIixLPVwiZGV2dG9vbHMtcG9zaXRpb25cIixYPVwiZGV2dG9vbHMtcGFuZWwtcG9zaXRpb25cIixHPVwiZGV2dG9vbHMtc2NhbGVcIixRPVwiZGV2dG9vbHMtY29uZmlnXCIsSj1cIl9fbmV4dGpzLWRldi10b29scy1wYW5lbC1wb3NpdGlvblwiLGVlPVwiX19uZXh0anMtZGV2LXRvb2xzLXBhbmVsLXNpemVcIixldD1cIl9fbmV4dGpzLWRldi10b29scy1zaGFyZWQtcGFuZWwtc2l6ZVwiLGVuPVwiX19uZXh0anMtZGV2LXRvb2xzLXNoYXJlZC1wYW5lbC1sb2NhdGlvblwiLGVyPVwic2VnbWVudC1leHBsb3Jlci11cGRhdGUtcm91dGUtc3RhdGVcIixlbz0vXFxzKyhhdCBPYmplY3RcXC5yZWFjdF9zdGFja19ib3R0b21fZnJhbWUuKil8KHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZUAuKil8KGF0IHJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZS4qKXwocmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lQC4qKS87ZnVuY3Rpb24gZWEoZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmUuc3BsaXQoZW8pWzBdfXZhciBlaT0obnVsbD09KGU9cHJvY2Vzcy5lbnYuX19ORVhUX0RFVl9JTkRJQ0FUT1IpP3ZvaWQgMDplLnRvU3RyaW5nKCkpPT09XCJmYWxzZVwiLGVsPW51bGwhPSh0PXByb2Nlc3MuZW52Ll9fTkVYVF9ERVZfSU5ESUNBVE9SX1BPU0lUSU9OKT90OlwiYm90dG9tLWxlZnRcIixlcz17bmV4dElkOjEsYnVpbGRFcnJvcjpudWxsLGVycm9yczpbXSxub3RGb3VuZDohMSxyZW5kZXJpbmdJbmRpY2F0b3I6ITEsc3RhdGljSW5kaWNhdG9yOiExLHNob3dJbmRpY2F0b3I6ITEsZGlzYWJsZURldkluZGljYXRvcjohMSxidWlsZGluZ0luZGljYXRvcjohMSxyZWZyZXNoU3RhdGU6e3R5cGU6XCJpZGxlXCJ9LHZlcnNpb25JbmZvOntpbnN0YWxsZWQ6XCIwLjAuMFwiLHN0YWxlbmVzczpcInVua25vd25cIn0sZGVidWdJbmZvOntkZXZ0b29sc0Zyb250ZW5kVXJsOnZvaWQgMH0sZGV2VG9vbHNQb3NpdGlvbjplbCxkZXZUb29sc1BhbmVsUG9zaXRpb246aih7fSxlbixlbCksZGV2VG9vbHNQYW5lbFNpemU6e30sc2NhbGU6Qi5NZWRpdW0scGFnZTpcIlwiLHRoZW1lOlwic3lzdGVtXCIsaGlkZVNob3J0Y3V0Om51bGx9LGVjPV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2NsaWVudC5qc1wiKTtmdW5jdGlvbiBldShlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt2YXIgbz1lLmxlbmd0aC0xO3JldHVybihlLnNsaWNlKDAsbykucmVkdWNlKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZSt0K25bcl19LFwiXCIpK2Vbb10pLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vZyxcIlwiKS5yZXBsYWNlKC9cXHMrL2csXCIgXCIpLnJlcGxhY2UoL1xccyooWzo7LHt9XSlcXHMqL2csXCIkMVwiKS5yZXBsYWNlKC87K30vZyxcIn1cIikudHJpbSgpfWZ1bmN0aW9uIGVkKCl7dmFyIGUsdCxuPShlPVtcIlxcbiAgICAgIC8qIGxhdGluLWV4dCAqL1xcbiAgICAgIEBmb250LWZhY2Uge1xcbiAgICAgICAgZm9udC1mYW1pbHk6ICdfX25leHRqcy1HZWlzdCc7XFxuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAgICAgICBmb250LXdlaWdodDogNDAwIDYwMDtcXG4gICAgICAgIGZvbnQtZGlzcGxheTogc3dhcDtcXG4gICAgICAgIHNyYzogdXJsKC9fX25leHRqc19mb250L2dlaXN0LWxhdGluLWV4dC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpO1xcbiAgICAgICAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyQkEsIFUrMDJCRC0wMkM1LCBVKzAyQzctMDJDQywgVSswMkNFLTAyRDcsXFxuICAgICAgICAgIFUrMDJERC0wMkZGLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzFEMDAtMURCRiwgVSsxRTAwLTFFOUYsXFxuICAgICAgICAgIFUrMUVGMi0xRUZGLCBVKzIwMjAsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDMCwgVSsyMTEzLCBVKzJDNjAtMkM3RixcXG4gICAgICAgICAgVStBNzIwLUE3RkY7XFxuICAgICAgfVxcbiAgICAgIC8qIGxhdGluLWV4dCAqL1xcbiAgICAgIEBmb250LWZhY2Uge1xcbiAgICAgICAgZm9udC1mYW1pbHk6ICdfX25leHRqcy1HZWlzdCBNb25vJztcXG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDAgNjAwO1xcbiAgICAgICAgZm9udC1kaXNwbGF5OiBzd2FwO1xcbiAgICAgICAgc3JjOiB1cmwoL19fbmV4dGpzX2ZvbnQvZ2Vpc3QtbW9uby1sYXRpbi1leHQud29mZjIpIGZvcm1hdCgnd29mZjInKTtcXG4gICAgICAgIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMkJBLCBVKzAyQkQtMDJDNSwgVSswMkM3LTAyQ0MsIFUrMDJDRS0wMkQ3LFxcbiAgICAgICAgICBVKzAyREQtMDJGRiwgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsxRDAwLTFEQkYsIFUrMUUwMC0xRTlGLFxcbiAgICAgICAgICBVKzFFRjItMUVGRiwgVSsyMDIwLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQzAsIFUrMjExMywgVSsyQzYwLTJDN0YsXFxuICAgICAgICAgIFUrQTcyMC1BN0ZGO1xcbiAgICAgIH1cXG4gICAgICAvKiBsYXRpbiAqL1xcbiAgICAgIEBmb250LWZhY2Uge1xcbiAgICAgICAgZm9udC1mYW1pbHk6ICdfX25leHRqcy1HZWlzdCc7XFxuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAgICAgICBmb250LXdlaWdodDogNDAwIDYwMDtcXG4gICAgICAgIGZvbnQtZGlzcGxheTogc3dhcDtcXG4gICAgICAgIHNyYzogdXJsKC9fX25leHRqc19mb250L2dlaXN0LWxhdGluLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7XFxuICAgICAgICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNixcXG4gICAgICAgICAgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMixcXG4gICAgICAgICAgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDtcXG4gICAgICB9XFxuICAgICAgLyogbGF0aW4gKi9cXG4gICAgICBAZm9udC1mYWNlIHtcXG4gICAgICAgIGZvbnQtZmFtaWx5OiAnX19uZXh0anMtR2Vpc3QgTW9ubyc7XFxuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAgICAgICBmb250LXdlaWdodDogNDAwIDYwMDtcXG4gICAgICAgIGZvbnQtZGlzcGxheTogc3dhcDtcXG4gICAgICAgIHNyYzogdXJsKC9fX25leHRqc19mb250L2dlaXN0LW1vbm8tbGF0aW4ud29mZjIpIGZvcm1hdCgnd29mZjInKTtcXG4gICAgICAgIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQkItMDJCQywgVSswMkM2LFxcbiAgICAgICAgICBVKzAyREEsIFUrMDJEQywgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsyMDAwLTIwNkYsIFUrMjBBQywgVSsyMTIyLFxcbiAgICAgICAgICBVKzIxOTEsIFUrMjE5MywgVSsyMjEyLCBVKzIyMTUsIFUrRkVGRiwgVStGRkZEO1xcbiAgICAgIH1cXG4gICAgXCJdLHR8fCh0PWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKHQpfX0pKSk7cmV0dXJuIGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG59LG59dmFyIGVmPWZ1bmN0aW9uKCl7dmFyIGUsdD0oMCx4LmMpKDEpO3JldHVybiB0WzBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGU9W10sdFswXT1lKTplPXRbMF0sKDAsdy51c2VJbnNlcnRpb25FZmZlY3QpKGVwLGUpLG51bGx9O2Z1bmN0aW9uIGVwKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO3JldHVybiBlLnRleHRDb250ZW50PWV1KGVkKCkpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSksZnVuY3Rpb24oKXtkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGUpfX12YXIgZWg9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vZGlzdC9jb21waWxlZC9yZWFjdC1kb20vaW5kZXguanNcIik7ZnVuY3Rpb24gZW0oZSl7dmFyIHQsbj0oMCx4LmMpKDMpLHI9ZS5jaGlsZHJlbixvPWRsKCkuc2hhZG93Um9vdDtyZXR1cm4gblswXSE9PXJ8fG5bMV0hPT1vPyh0PSgwLGVoLmNyZWF0ZVBvcnRhbCkocixvKSxuWzBdPXIsblsxXT1vLG5bMl09dCk6dD1uWzJdLHR9ZnVuY3Rpb24gZWcoZSl7aWYoXCJcIj09PWUudHJpbSgpKXRocm93IEVycm9yKFwiY2FuJ3QgZGVjb2RlIGVtcHR5IGhleFwiKTt2YXIgdD1wYXJzZUludChlLDE2KTtpZihpc05hTih0KSl0aHJvdyBFcnJvcihcImludmFsaWQgaGV4OiBgXCIuY29uY2F0KGUsXCJgXCIpKTtyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQodCl9dmFyIGV5PS9eX19UVVJCT1BBQ0tfXyhbYS16QS1aMC05XyRdKylfXyQvLGV2PS9odHRwcz86XFwvXFwvW15cXHMvJC4/I10uW15cXHMpJ1wiXSovaSxlYj1uZXcgUmVnRXhwKFwiKFwiLmNvbmNhdCgvX19UVVJCT1BBQ0tfX1thLXpBLVowLTlfJF0rX18vZy5zb3VyY2UsXCJ8XFxcXHMrKVwiKSksZUE9ZnVuY3Rpb24oZSl7dmFyIHQsbj0oMCx4LmMpKDcpLHI9ZS50ZXh0LG89ZS5tYXRjaGVyO2lmKG5bMF0hPT1vfHxuWzFdIT09cil7dmFyIGEsaSxsPXIuc3BsaXQoZWIpO25bM10hPT1vPyhpPWZ1bmN0aW9uKGUsdCl7aWYoZXYudGVzdChlKSl7dmFyIG49ZXYuZXhlYyhlKVswXTtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiBvfHxvKG4pPygwLEEuanN4KSh3LkZyYWdtZW50LHtjaGlsZHJlbjooMCxBLmpzeCkoXCJhXCIse2hyZWY6bix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub3JlZmVycmVyIG5vb3BlbmVyXCIsY2hpbGRyZW46ZX0pfSxcImxpbmstXCIuY29uY2F0KHQpKTplfXRyeXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKGV5KTtpZighdClyZXR1cm4gZTtmb3IodmFyIG49dFsxXSxyPVwiXCIsbz0wLGE9XCJcIixpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBsPW5baV07aWYoMD09PW8pXCJfXCI9PT1sP289MTpcIiRcIj09PWw/bz0yOnIrPWw7ZWxzZSBpZigxPT09bylcIl9cIj09PWw/KHIrPVwiIFwiLG89MCk6XCIkXCI9PT1sPyhyKz1cIl9cIixvPTIpOihyKz1sLG89MCk7ZWxzZSBpZigyPT09bylpZigyPT09YS5sZW5ndGgmJihyKz1lZyhhKSxhPVwiXCIpLFwiX1wiPT09bCl7aWYoXCJcIiE9PWEpdGhyb3cgRXJyb3IoXCJpbnZhbGlkIGhleDogYFwiLmNvbmNhdChhLFwiYFwiKSk7bz0zfWVsc2UgaWYoXCIkXCI9PT1sKXtpZihcIlwiIT09YSl0aHJvdyBFcnJvcihcImludmFsaWQgaGV4OiBgXCIuY29uY2F0KGEsXCJgXCIpKTtvPTB9ZWxzZSBhKz1sO2Vsc2UgaWYoMz09PW8paWYoXCJfXCI9PT1sKXRocm93IEVycm9yKFwiaW52YWxpZCBoZXg6IGBcIi5jb25jYXQoYStsLFwiYFwiKSk7ZWxzZVwiJFwiPT09bD8ocis9ZWcoYSksYT1cIlwiLG89MCk6YSs9bH1yZXR1cm4gcn0oZSk7aWYociE9PWUpcmV0dXJuKDAsQS5qc3hzKShcImlcIix7Y2hpbGRyZW46W1wie1wiLHIsXCJ9XCJdfSxcImlkZW50LVwiLmNvbmNhdCh0KSl9Y2F0Y2gobil7cmV0dXJuKDAsQS5qc3hzKShcImlcIix7Y2hpbGRyZW46W1wie1wiLGUsXCIgKGRlY29kaW5nIGZhaWxlZDogXCIsXCJcIituLFwiKVwiLFwifVwiXX0sXCJpZGVudC1cIi5jb25jYXQodCkpfXJldHVybigwLEEuanN4KSh3LkZyYWdtZW50LHtjaGlsZHJlbjplfSxcInRleHQtXCIuY29uY2F0KHQpKX0sblszXT1vLG5bNF09aSk6aT1uWzRdLGE9bC5tYXAoaSksblswXT1vLG5bMV09cixuWzJdPWF9ZWxzZSBhPW5bMl07cmV0dXJuIG5bNV0hPT1hPyh0PSgwLEEuanN4KShBLkZyYWdtZW50LHtjaGlsZHJlbjphfSksbls1XT1hLG5bNl09dCk6dD1uWzZdLHR9LGV4PVsvXndlYnBhY2staW50ZXJuYWw6XFwvXFwvXFwvKFxcKFtcXHctXStcXClcXC8pPy8sL14od2VicGFjazpcXC9cXC9cXC98d2VicGFjazpcXC9cXC8oX05fRVxcLyk/KShcXChbXFx3LV0rXFwpXFwvKT8vXTtmdW5jdGlvbiBldyhlKXt2YXIgdD0hMCxuPSExLHI9dm9pZCAwO3RyeXtmb3IodmFyIG8sYT1leFtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShvPWEubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgaT1vLnZhbHVlO2lmKGkudGVzdChlKSlyZXR1cm4hMDtlPWUucmVwbGFjZShpLFwiXCIpfX1jYXRjaChlKXtuPSEwLHI9ZX1maW5hbGx5e3RyeXt0fHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgcn19cmV0dXJuITF9ZnVuY3Rpb24gZUMoZSl7dmFyIHQ9ITAsbj0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9ZXhbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0obz1hLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGk9by52YWx1ZTtlPWUucmVwbGFjZShpLFwiXCIpfX1jYXRjaChlKXtuPSEwLHI9ZX1maW5hbGx5e3RyeXt0fHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgcn19cmV0dXJuIGV9ZnVuY3Rpb24gZV8oZSx0LG4scixvLGEsaSl7dHJ5e3ZhciBsPWVbYV0oaSkscz1sLnZhbHVlfWNhdGNoKGUpe24oZSk7cmV0dXJufWwuZG9uZT90KHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKHIsbyl9ZnVuY3Rpb24gZWsoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt2YXIgYT1lLmFwcGx5KHQsbik7ZnVuY3Rpb24gaShlKXtlXyhhLHIsbyxpLGwsXCJuZXh0XCIsZSl9ZnVuY3Rpb24gbChlKXtlXyhhLHIsbyxpLGwsXCJ0aHJvd1wiLGUpfWkodm9pZCAwKX0pfX1mdW5jdGlvbiBlRShlLHQpe3ZhciBuLHIsbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LGk9T2JqZWN0LmNyZWF0ZSgoXCJmdW5jdGlvblwiPT10eXBlb2YgSXRlcmF0b3I/SXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpO3JldHVybiBpLm5leHQ9bCgwKSxpLnRocm93PWwoMSksaS5yZXR1cm49bCgyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gbChsKXtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGM9W2wsc107aWYobil0aHJvdyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7aSYmKGk9MCxjWzBdJiYoYT0wKSksYTspdHJ5e2lmKG49MSxyJiYobz0yJmNbMF0/ci5yZXR1cm46Y1swXT9yLnRocm93fHwoKG89ci5yZXR1cm4pJiZvLmNhbGwociksMCk6ci5uZXh0KSYmIShvPW8uY2FsbChyLGNbMV0pKS5kb25lKXJldHVybiBvO3N3aXRjaChyPTAsbyYmKGM9WzImY1swXSxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoNj09PWNbMF18fDI9PT1jWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1jWzBdJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7YS5sYWJlbD1jWzFdO2JyZWFrfWlmKDY9PT1jWzBdJiZhLmxhYmVsPG9bMV0pe2EubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmYS5sYWJlbDxvWzJdKXthLmxhYmVsPW9bMl0sYS5vcHMucHVzaChjKTticmVha31vWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9Yz10LmNhbGwoZSxhKX1jYXRjaChlKXtjPVs2LGVdLHI9MH1maW5hbGx5e249bz0wfWlmKDUmY1swXSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX19ZnVuY3Rpb24gZWooZSx0KXt2YXIgbjtyZXR1cm5cImZpbGU6Ly9cIj09PWUuZmlsZXx8KG51bGw9PShuPWUuZmlsZSk/dm9pZCAwOm4ubWF0Y2goL2h0dHBzPzpcXC9cXC8vKSk/UHJvbWlzZS5yZXNvbHZlKHtlcnJvcjohMSxyZWFzb246bnVsbCxleHRlcm5hbDohMCxzb3VyY2VTdGFja0ZyYW1lOmUsb3JpZ2luYWxTdGFja0ZyYW1lOm51bGwsb3JpZ2luYWxDb2RlRnJhbWU6bnVsbCxpZ25vcmVkOiEwfSk6ZWsoZnVuY3Rpb24oKXt2YXIgbixyO3JldHVybiBlRSh0aGlzLGZ1bmN0aW9uKG8pe2lmKFwicmVqZWN0ZWRcIj09PXQuc3RhdHVzKXRocm93IEVycm9yKHQucmVhc29uKTtyZXR1cm5bMix7ZXJyb3I6ITEscmVhc29uOm51bGwsZXh0ZXJuYWw6ITEsc291cmNlU3RhY2tGcmFtZTplLG9yaWdpbmFsU3RhY2tGcmFtZToocj10LnZhbHVlKS5vcmlnaW5hbFN0YWNrRnJhbWUsb3JpZ2luYWxDb2RlRnJhbWU6ci5vcmlnaW5hbENvZGVGcmFtZXx8bnVsbCxpZ25vcmVkOihudWxsPT0obj1yLm9yaWdpbmFsU3RhY2tGcmFtZSk/dm9pZCAwOm4uaWdub3JlZCl8fCExfV19KX0pKCkuY2F0Y2goZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm57ZXJyb3I6ITAscmVhc29uOm51bGwhPShyPW51bGwhPShuPW51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSk/bjpudWxsPT10P3ZvaWQgMDp0LnRvU3RyaW5nKCkpP3I6XCJVbmtub3duIEVycm9yXCIsZXh0ZXJuYWw6ITEsc291cmNlU3RhY2tGcmFtZTplLG9yaWdpbmFsU3RhY2tGcmFtZTpudWxsLG9yaWdpbmFsQ29kZUZyYW1lOm51bGwsaWdub3JlZDohMX19KX1mdW5jdGlvbiBlUyhlLHQsbil7cmV0dXJuIGVrKGZ1bmN0aW9uKCl7dmFyIHIsbyxhLGk7cmV0dXJuIGVFKHRoaXMsZnVuY3Rpb24obCl7c3dpdGNoKGwubGFiZWwpe2Nhc2UgMDpyPXtmcmFtZXM6ZSxpc1NlcnZlcjpcInNlcnZlclwiPT09dCxpc0VkZ2VTZXJ2ZXI6XCJlZGdlLXNlcnZlclwiPT09dCxpc0FwcERpcmVjdG9yeTpufSxvPXZvaWQgMCxhPXZvaWQgMCxsLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBsLnRyeXMucHVzaChbMSwzLCw0XSksWzQsZmV0Y2goXCIvX19uZXh0anNfb3JpZ2luYWwtc3RhY2stZnJhbWVzXCIse21ldGhvZDpcIlBPU1RcIixib2R5OkpTT04uc3RyaW5naWZ5KHIpfSldO2Nhc2UgMjpyZXR1cm4gbz1sLnNlbnQoKSxbMyw0XTtjYXNlIDM6cmV0dXJuIGE9bC5zZW50KCkrXCJcIixbMyw0XTtjYXNlIDQ6aWYoIShvJiZvLm9rJiYyMDQhPT1vLnN0YXR1cykpcmV0dXJuWzMsNl07cmV0dXJuWzQsby5qc29uKCldO2Nhc2UgNTpyZXR1cm4gaT1sLnNlbnQoKSxbMixQcm9taXNlLmFsbChlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlaihlLGlbdF0pfSkpXTtjYXNlIDY6aWYoIW8pcmV0dXJuWzMsOF07cmV0dXJuWzQsby50ZXh0KCldO2Nhc2UgNzphPWwuc2VudCgpLGwubGFiZWw9ODtjYXNlIDg6cmV0dXJuWzIsUHJvbWlzZS5hbGwoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGVqKGUse3N0YXR1czpcInJlamVjdGVkXCIscmVhc29uOlwiRmFpbGVkIHRvIGZldGNoIHRoZSBvcmlnaW5hbCBzdGFjayBmcmFtZXMgXCIuY29uY2F0KGE/XCI6IFwiLmNvbmNhdChhKTpcIlwiKX0pfSkpXX19KX0pKCl9ZnVuY3Rpb24gZU8oZSl7aWYoIWUuZmlsZSlyZXR1cm5cIlwiO3ZhciB0PWV3KGUuZmlsZSksbj1cIlwiO2lmKHQpbj1lQyhlLmZpbGUpO2Vsc2UgdHJ5e3ZhciByLG89bmV3IFVSTChlLmZpbGUpLGE9XCJcIjsobnVsbD09KHI9Z2xvYmFsVGhpcy5sb2NhdGlvbik/dm9pZCAwOnIub3JpZ2luKSE9PW8ub3JpZ2luJiYoXCJudWxsXCI9PT1vLm9yaWdpbj9hKz1vLnByb3RvY29sOmErPW8ub3JpZ2luKSxhKz1vLnBhdGhuYW1lLG49ZUMoYSl9Y2F0Y2godCl7bj1lQyhlLmZpbGUpfXJldHVybiFldyhlLmZpbGUpJiZudWxsIT1lLmxpbmUxJiZuJiZcIjxhbm9ueW1vdXM+XCIhPT1lLmZpbGUmJihudWxsIT1lLmNvbHVtbjE/bis9XCIgKFwiLmNvbmNhdChlLmxpbmUxLFwiOlwiKS5jb25jYXQoZS5jb2x1bW4xLFwiKVwiKTpuKz1cIiAoXCIuY29uY2F0KGUubGluZTEsXCIpXCIpKSxufWZ1bmN0aW9uIGVCKGUpe3ZhciB0LG4scj0oMCx4LmMpKDYpO3JbMF0hPT1lPyh0PXZvaWQgMD09PWU/e306ZSxyWzBdPWUsclsxXT10KTp0PXJbMV07dmFyIG89dC5maWxlLGE9dC5saW5lMSxpPXQuY29sdW1uMTtyZXR1cm4gclsyXSE9PWl8fHJbM10hPT1vfHxyWzRdIT09YT8obj1mdW5jdGlvbigpe2lmKG51bGwhPW8mJm51bGwhPWEmJm51bGwhPWkpe3ZhciBlPW5ldyBVUkxTZWFyY2hQYXJhbXM7ZS5hcHBlbmQoXCJmaWxlXCIsbyksZS5hcHBlbmQoXCJsaW5lMVwiLFN0cmluZyhhKSksZS5hcHBlbmQoXCJjb2x1bW4xXCIsU3RyaW5nKGkpKSxzZWxmLmZldGNoKFwiXCIuY29uY2F0KHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEh8fFwiXCIsXCIvX19uZXh0anNfbGF1bmNoLWVkaXRvcj9cIikuY29uY2F0KGUudG9TdHJpbmcoKSkpLnRoZW4oZVAsZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcignRmFpbGVkIHRvIG9wZW4gZmlsZSBcIicuY29uY2F0KG8sXCIgKFwiKS5jb25jYXQoYSxcIjpcIikuY29uY2F0KGksJylcIiBpbiB5b3VyIGVkaXRvci4gQ2F1c2U6JyksZSl9KX19LHJbMl09aSxyWzNdPW8scls0XT1hLHJbNV09bik6bj1yWzVdLG59ZnVuY3Rpb24gZVAoKXt9ZnVuY3Rpb24gZUkoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIGVUKGUsdCl7cmV0dXJuIHQ9bnVsbCE9dD90Ont9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbikpfSksZX1mdW5jdGlvbiBleihlKXt2YXIgdCxuLHI9KDAseC5jKSgzKTtyZXR1cm4gclswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PSgwLEEuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLGQ6XCJNMTEuNSA5Ljc1VjExLjI1QzExLjUgMTEuMzg4MSAxMS4zODgxIDExLjUgMTEuMjUgMTEuNUg0Ljc1QzQuNjExOTMgMTEuNSA0LjUgMTEuMzg4MSA0LjUgMTEuMjVMNC41IDQuNzVDNC41IDQuNjExOTMgNC42MTE5MyA0LjUgNC43NSA0LjVINi4yNUg3VjNINi4yNUg0Ljc1QzMuNzgzNSAzIDMgMy43ODM1IDMgNC43NVYxMS4yNUMzIDEyLjIxNjUgMy43ODM1IDEzIDQuNzUgMTNIMTEuMjVDMTIuMjE2NSAxMyAxMyAxMi4yMTY1IDEzIDExLjI1VjkuNzVWOUgxMS41VjkuNzVaTTguNSAzSDkuMjVIMTIuMjQ5NUMxMi42NjM3IDMgMTIuOTk5NSAzLjMzNTc5IDEyLjk5OTUgMy43NVY2Ljc1VjcuNUgxMS40OTk1VjYuNzVWNS41NjA2Nkw4LjUzMDMzIDguNTI5NzhMOCA5LjA2MDExTDYuOTM5MzQgNy45OTk0NUw3LjQ2OTY3IDcuNDY5MTJMMTAuNDM4OCA0LjVIOS4yNUg4LjVWM1pcIn0pLHJbMF09dCk6dD1yWzBdLHJbMV0hPT1lPyhuPSgwLEEuanN4KShcInN2Z1wiLGVUKGVJKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCJ9LGUpLHtjaGlsZHJlbjp0fSkpLHJbMV09ZSxyWzJdPW4pOm49clsyXSxufWZ1bmN0aW9uIGVEKGUpe3ZhciB0LG4scj0oMCx4LmMpKDMpO3JldHVybiByWzBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHQ9KDAsQS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTguNTU4NDYgMkg3LjQ0MTQ4TDEuODg5NzUgMTMuNUgxNC4xMTAyTDguNTU4NDYgMlpNOS45MDkyOSAxLjM0Nzg4QzkuNjU5MDIgMC44Mjk0NTYgOS4xMzQxMyAwLjUgOC41NTg0NiAwLjVINy40NDE0OEM2Ljg2NTgxIDAuNSA2LjM0MDkyIDAuODI5NDU0IDYuMDkwNjUgMS4zNDc4N0wwLjE5MjYwOCAxMy41NjUzQy0wLjEyNzk0MyAxNC4yMjkzIDAuMzU1ODM1IDE1IDEuMDkzMTYgMTVIMTQuOTA2OEMxNS42NDQxIDE1IDE2LjEyNzkgMTQuMjI5MyAxNS44MDczIDEzLjU2NTNMOS45MDkyOSAxLjM0Nzg4Wk04Ljc0OTk3IDQuNzVWNS41VjhWOC43NUg3LjI0OTk3VjhWNS41VjQuNzVIOC43NDk5N1pNNy45OTk5NyAxMkM4LjU1MjI2IDEyIDguOTk5OTcgMTEuNTUyMyA4Ljk5OTk3IDExQzguOTk5OTcgMTAuNDQ3NyA4LjU1MjI2IDEwIDcuOTk5OTcgMTBDNy40NDc2OSAxMCA2Ljk5OTk3IDEwLjQ0NzcgNi45OTk5NyAxMUM2Ljk5OTk3IDExLjU1MjMgNy40NDc2OSAxMiA3Ljk5OTk3IDEyWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pLHJbMF09dCk6dD1yWzBdLHJbMV0hPT1lPyhuPSgwLEEuanN4KShcInN2Z1wiLGVUKGVJKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsaGVpZ2h0OlwiMTZcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsdmlld0JveDpcIi00IC00IDI0IDI0XCIsd2lkdGg6XCIxNlwifSxlKSx7Y2hpbGRyZW46dH0pKSxyWzFdPWUsclsyXT1uKTpuPXJbMl0sbn1mdW5jdGlvbiBlTChlKXt2YXIgdCxuLHIsbyxhLGksbD0oMCx4LmMpKDYpLHM9ZS5sYW5nO2lmKCFzKXJldHVybiBsWzBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHQ9KDAsQS5qc3gpKGVaLHt9KSxsWzBdPXQpOnQ9bFswXSx0O3N3aXRjaChzLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImpzeFwiOmNhc2VcInRzeFwiOnJldHVybiBsWzFdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KG49KDAsQS5qc3gpKGVVLHt9KSxsWzFdPW4pOm49bFsxXSxuO2Nhc2VcInRzXCI6Y2FzZVwidHlwZXNjcmlwdFwiOnJldHVybiBsWzJdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHI9KDAsQS5qc3gpKGVNLHt9KSxsWzJdPXIpOnI9bFsyXSxyO2Nhc2VcImphdmFzY3JpcHRcIjpjYXNlXCJqc1wiOmNhc2VcIm1qc1wiOnJldHVybiBsWzNdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KG89KDAsQS5qc3gpKGVSLHt9KSxsWzNdPW8pOm89bFszXSxvO2Nhc2VcImpzb25cIjpyZXR1cm4gbFs0XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhhPSgwLEEuanN4KShlTix7fSksbFs0XT1hKTphPWxbNF0sYTtkZWZhdWx0OnJldHVybiBsWzVdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGk9KDAsQS5qc3gpKGVaLHt9KSxsWzVdPWkpOmk9bFs1XSxpfX1mdW5jdGlvbiBlTigpe3ZhciBlLHQ9KDAseC5jKSgxKTtyZXR1cm4gdFswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhlPSgwLEEuanN4KShcInN2Z1wiLHtjbGlwUnVsZTpcImV2ZW5vZGRcIixmaWxsUnVsZTpcImV2ZW5vZGRcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTMyMS40NSAxMzMzLjMzXCIsd2lkdGg6XCIxNlwiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZDpcIk0yMjEuMzcgNjE4LjQ0aDc1Ny45NFY0MDUuMTVINzU1LjE0Yy0yMy41IDAtNTYuMzItMTIuNzQtNzEuODItMjguMjQtMTUuNS0xNS41LTI1LTQzLjQ3LTI1LTY2Ljk3VjgyLjg5SDg4LjM5Yy0xLjk5IDAtMy40OSAxLTQuNDkgMi0xLjUgMS0yIDIuNS0yIDQuNXYxMTU1LjA0YzAgMS41IDEgMy41IDIgNC41IDEgMS40OSAzIDEuOTkgNC40OSAxLjk5SDk3Mi44YzIgMCAxLjg5LS45OSAyLjg5LTEuOTkgMS41LTEgMy42MS0zIDMuNjEtNC41di0xMjEuMDlIMjIxLjM2Yy00NC45NiAwLTgyLTM2LjktODItODEuOTlWNzAwLjQ0YzAtNDUuMSAzNi45LTgyIDgyLTgyem0xMjYuNTEgMTE3LjQ3aDc1LjI0djE0Ni42MWMwIDMwLjc5LTIuNDQgNTQuMjMtNy4zMyA3MC4zMS00LjkyIDE2LjAzLTE0LjggMjkuNjctMjkuNjUgNDAuODUtMTQuODYgMTEuMTItMzMuOTEgMTYuNzItNTcuMDUgMTYuNzItMjQuNTMgMC00My41MS0zLjcxLTU2Ljk0LTExLjA2LTEzLjUtNy4zNi0yMy44OS0xOC4xLTMxLjIzLTMyLjMtNy4zNS0xNC4xNC0xMS42OS0zMS42Ny0xMi45OS01Mi41M2w3MS41LTEwLjgxYy4xMSAxMS44MSAxLjA3IDIwLjYxIDIuODEgMjYuMzMgMS43NiA1Ljc4IDQuNzUgMTAuMzcgOSAxMy45NSAyLjg3IDIuMzMgNi45NCAzLjQ2IDEyLjI1IDMuNDYgOC40IDAgMTQuNTgtMy40NiAxOC41My0xMC4zNyAzLjktNi45MiA1Ljg3LTE4LjYgNS44Ny0zNVY3MzUuOTJ6bTExMi43NyAxODAuNjdsNzEuMTctNC45N2MxLjU0IDEyLjgxIDQuNjkgMjIuNjIgOS40NCAyOS4yOCA3Ljc0IDEwLjg4IDE4Ljc0IDE2LjM0IDMzLjA5IDE2LjM0IDEwLjY4IDAgMTguOTMtMi43NiAyNC42OC04LjM2IDUuODEtNS41OCA4LjctMTIuMDcgOC43LTE5LjQxIDAtNi45Ny0yLjcxLTEzLjI2LTguMi0xOC43OS01LjQ3LTUuNTMtMTguMjMtMTAuNjgtMzguMjgtMTUuNjUtMzIuODktOC4xNy01Ni4yNy0xOS4xLTcwLjI2LTMyLjc0LTE0LjEyLTEzLjU3LTIxLjE4LTMwLjkyLTIxLjE4LTUyLjAzIDAtMTMuODMgMy42MS0yNi44OSAxMC44NS0zOS4yMSA3LjIyLTEyLjM4IDE4LjA3LTIyLjA2IDMyLjU5LTI5LjA5IDE0LjUyLTcuMDQgMzQuNC0xMC41NiA1OS42NS0xMC41NiAzMSAwIDU0LjYyIDYuNDEgNzAuODggMTkuMjkgMTYuMjggMTIuODEgMjUuOTIgMzMuMjQgMjkuMDQgNjEuMjdsLTcwLjUgNC42NWMtMS44Ny0xMi4yNS01LjgxLTIxLjE3LTExLjgxLTI2LjctNi4wNS01LjYtMTQuMzUtOC4zNi0yNC45LTguMzYtOC43MSAwLTE1LjMxIDIuMDctMTkuNzMgNi4xNi00LjQgNC4wOS02LjU5IDkuMTItNi41OSAxNS4wMiAwIDQuMjcgMS44MSA4LjExIDUuMzcgMTEuNTcgMy40NSAzLjU5IDExLjggNi44NSAyNS4wMiA5LjkzIDMyLjc1IDcuODYgNTYuMiAxNS44NCA3MC4zMSAyMy44NyAxNC4xOCA4LjA1IDI0LjUyIDE3Ljk4IDMwLjk2IDI5LjkyIDYuNDQgMTEuODggOS42NiAyNS4yIDkuNjYgMzkuOTYgMCAxNy4yOS00LjMgMzMuMjQtMTIuODggNDcuODktOC42MyAxNC41OC0yMC42MSAyNS43LTM2LjA4IDMzLjI0LTE1LjQxIDcuNTQtMzQuODUgMTEuMzEtNTguMzMgMTEuMzEtNDEuMjQgMC02OS44MS04Ljg2LTg1LjY4LTI2LjUyLTE1Ljg4LTE3LjY1LTI0Ljg1LTQwLjA5LTI2Ljk2LTY3LjN6bTI0OC43NC00NS41YzAtNDQuMDUgMTEuMDItNzguMzYgMzMuMDktMTAyLjg3IDIyLjA5LTI0LjU3IDUyLjgyLTM2LjgyIDkyLjI0LTM2LjgyIDQwLjM4IDAgNzEuNSAxMi4wNyA5My4zNCAzNi4xMyAyMS44NiAyNC4xMyAzMi43NyA1Ny45NCAzMi43NyAxMDEuMzcgMCAzMS41NC00Ljc1IDU3LjM2LTE0LjMgNzcuNTQtOS41NCAyMC4xOC0yMy4zNyAzNS44OS00MS40IDQ3LjEzLTE4LjA3IDExLjI0LTQwLjU1IDE2Ljg0LTY3LjQ4IDE2Ljg0LTI3LjMzIDAtNDkuOTktNC44My02Ny45NC0xNC41Mi0xNy45Mi05Ljc0LTMyLjQ5LTI1LjA3LTQzLjYyLTQ2LjA2LTExLjEzLTIwLjkyLTE2LjcyLTQ3LjE5LTE2LjcyLTc4Ljc0em03NC44OS4xOWMwIDI3LjIxIDQuNTcgNDYuODEgMTMuNjggNTguNjggOS4xMyAxMS44OCAyMS41NyAxNy44NSAzNy4yNiAxNy44NSAxNi4xIDAgMjguNjUtNS44NCAzNy40NS0xNy40NyA4Ljg3LTExLjY4IDEzLjI4LTMyLjU0IDEzLjI4LTYyLjc3IDAtMjUuMzktNC42My00My45Mi0xMy44NC01NS42MS05LjI2LTExLjc2LTIxLjc1LTE3LjYtMzcuNTYtMTcuNi0xNS4xMyAwLTI3LjM0IDUuOTctMzYuNDkgMTcuODUtOS4yMSAxMS44OC0xMy43OCAzMS42MS0xMy43OCA1OS4wN3ptMjA5LjA4LTEzNS4zNmg2OS45OWw5MC45OCAxNDkuMDVWNzM1LjkxaDcwLjgzdjI2OS45NmgtNzAuODNsLTkwLjQ4LTE0OC4yNHYxNDguMjRoLTcwLjQ5VjczNS45MXptNjcuNzEtMTE3LjQ3aDE3OC4zN2M0NS4xIDAgODIgMzcuMDQgODIgODJ2MzQwLjkxYzAgNDQuOTYtMzcuMDMgODEuOTktODIgODEuOTloLTE3OC4zN3YxNDdjMCAxNy41LTYuOTkgMzIuOTktMTguNSA0NC41LTExLjUgMTEuNDktMjcgMTguNS00NC41IDE4LjVINjIuOTdjLTE3LjUgMC0zMi45OS03LTQ0LjUtMTguNS0xMS40OS0xMS41LTE4LjUtMjctMTguNS00NC41VjYzLjQ5YzAtMTcuNSA3LTMzIDE4LjUtNDQuNVM0NS45Ny40OSA2Mi45Ny40OUg3MDAuMWMxLjUtLjUgMy0uNSA0LjUtLjUgNyAwIDE0IDMgMTkgNy40OWgxYzEgLjUgMS41IDEgMi41IDJsMzI1LjQ2IDMyOS40N2M1LjUgNS41IDkuNSAxMyA5LjUgMjEuNSAwIDIuNS0uNSA0LjUtMSA3djI1MC45OHpNNzMyLjYxIDMwMy40N1Y5Ni45OWwyMzIuNDggMjM1LjQ3SDc2MS42Yy03Ljk5IDAtMTQuOTktMy41LTIwLjUtOC40OS00Ljk5LTUtOC40OS0xMi41LTguNDktMjAuNXpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pLHRbMF09ZSk6ZT10WzBdLGV9ZnVuY3Rpb24gZVIoKXt2YXIgZSx0PSgwLHguYykoMSk7cmV0dXJuIHRbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZT0oMCxBLmpzeCkoXCJzdmdcIix7aGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDUwIDUwXCIsd2lkdGg6XCIxNlwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJwYXRoXCIse2Q6XCJNIDQzLjMzNTkzOCA0IEwgNi42Njc5NjkgNCBDIDUuMTk1MzEzIDQgNCA1LjE5NTMxMyA0IDYuNjY3OTY5IEwgNCA0My4zMzIwMzEgQyA0IDQ0LjgwNDY4OCA1LjE5NTMxMyA0NiA2LjY2Nzk2OSA0NiBMIDQzLjMzMjAzMSA0NiBDIDQ0LjgwNDY4OCA0NiA0NiA0NC44MDQ2ODggNDYgNDMuMzM1OTM4IEwgNDYgNi42Njc5NjkgQyA0NiA1LjE5NTMxMyA0NC44MDQ2ODggNCA0My4zMzU5MzggNCBaIE0gMjcgMzYuMTgzNTk0IEMgMjcgNDAuMTc5Njg4IDI0LjY1NjI1IDQyIDIxLjIzNDM3NSA0MiBDIDE4LjE0MDYyNSA0MiAxNS45MTAxNTYgMzkuOTI1NzgxIDE1IDM4IEwgMTguMTQ0NTMxIDM2LjA5NzY1NiBDIDE4Ljc1IDM3LjE3MTg3NSAxOS42NzE4NzUgMzggMjEgMzggQyAyMi4yNjk1MzEgMzggMjMgMzcuNTAzOTA2IDIzIDM1LjU3NDIxOSBMIDIzIDIzIEwgMjcgMjMgWiBNIDM1LjY3NTc4MSA0MiBDIDMyLjEzMjgxMyA0MiAzMC4xMjEwOTQgNDAuMjE0ODQ0IDI5IDM4IEwgMzIgMzYgQyAzMi44MTY0MDYgMzcuMzM1OTM4IDMzLjcwNzAzMSAzOC42MTMyODEgMzUuNTg5ODQ0IDM4LjYxMzI4MSBDIDM3LjE3MTg3NSAzOC42MTMyODEgMzggMzcuODI0MjE5IDM4IDM2LjczMDQ2OSBDIDM4IDM1LjQyNTc4MSAzNy4xNDA2MjUgMzQuOTYwOTM4IDM1LjQwMjM0NCAzNC4xOTkyMTkgTCAzNC40NDkyMTkgMzMuNzg5MDYzIEMgMzEuNjk1MzEzIDMyLjYxNzE4OCAyOS44NjMyODEgMzEuMTQ4NDM4IDI5Ljg2MzI4MSAyOC4wMzkwNjMgQyAyOS44NjMyODEgMjUuMTc5Njg4IDMyLjA0Njg3NSAyMyAzNS40NTMxMjUgMjMgQyAzNy44Nzg5MDYgMjMgMzkuNjIxMDk0IDIzLjg0Mzc1IDQwLjg3ODkwNiAyNi4wNTQ2ODggTCAzNy45MTAxNTYgMjcuOTY0ODQ0IEMgMzcuMjUzOTA2IDI2Ljc4OTA2MyAzNi41NTA3ODEgMjYuMzI4MTI1IDM1LjQ1MzEyNSAyNi4zMjgxMjUgQyAzNC4zMzU5MzggMjYuMzI4MTI1IDMzLjYyODkwNiAyNy4wMzkwNjMgMzMuNjI4OTA2IDI3Ljk2NDg0NCBDIDMzLjYyODkwNiAyOS4xMDkzNzUgMzQuMzM1OTM4IDI5LjU3MDMxMyAzNS45NzI2NTYgMzAuMjgxMjUgTCAzNi45MjU3ODEgMzAuNjkxNDA2IEMgNDAuMTcxODc1IDMyLjA3ODEyNSA0MiAzMy40OTYwOTQgNDIgMzYuNjgzNTk0IEMgNDIgNDAuMTE3MTg4IDM5LjMwMDc4MSA0MiAzNS42NzU3ODEgNDIgWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSksdFswXT1lKTplPXRbMF0sZX1mdW5jdGlvbiBlTSgpe3ZhciBlLHQ9KDAseC5jKSgxKTtyZXR1cm4gdFswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhlPSgwLEEuanN4cykoXCJzdmdcIix7ZmlsbDpcIm5vbmVcIixoZWlnaHQ6XCIxNFwiLHZpZXdCb3g6XCIwIDAgNTEyIDUxMlwiLHdpZHRoOlwiMTRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46WygwLEEuanN4KShcInJlY3RcIix7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGhlaWdodDpcIjUxMlwiLHJ4OlwiNTBcIix3aWR0aDpcIjUxMlwifSksKDAsQS5qc3gpKFwicmVjdFwiLHtmaWxsOlwiY3VycmVudENvbG9yXCIsaGVpZ2h0OlwiNTEyXCIscng6XCI1MFwiLHdpZHRoOlwiNTEyXCJ9KSwoMCxBLmpzeCkoXCJwYXRoXCIse2NsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJtMzE2LjkzOSA0MDcuNDI0djUwLjA2MWM4LjEzOCA0LjE3MiAxNy43NjMgNy4zIDI4Ljg3NSA5LjM4NnMyMi44MjMgMy4xMjkgMzUuMTM1IDMuMTI5YzExLjk5OSAwIDIzLjM5Ny0xLjE0NyAzNC4xOTYtMy40NDIgMTAuNzk5LTIuMjk0IDIwLjI2OC02LjA3NSAyOC40MDYtMTEuMzQyIDguMTM4LTUuMjY2IDE0LjU4MS0xMi4xNSAxOS4zMjgtMjAuNjVzNy4xMjEtMTkuMDA3IDcuMTIxLTMxLjUyMmMwLTkuMDc0LTEuMzU2LTE3LjAyNi00LjA2OS0yMy44NTdzLTYuNjI1LTEyLjkwNi0xMS43MzgtMTguMjI1Yy01LjExMi01LjMxOS0xMS4yNDItMTAuMDkxLTE4LjM4OS0xNC4zMTVzLTE1LjIwNy04LjIxMy0yNC4xOC0xMS45NjdjLTYuNTczLTIuNzEyLTEyLjQ2OC01LjM0NS0xNy42ODUtNy45LTUuMjE3LTIuNTU2LTkuNjUxLTUuMTYzLTEzLjMwMy03LjgyMi0zLjY1Mi0yLjY2LTYuNDY5LTUuNDc2LTguNDUxLTguNDQ4LTEuOTgyLTIuOTczLTIuOTc0LTYuMzM2LTIuOTc0LTEwLjA5MSAwLTMuNDQxLjg4Ny02LjU0NCAyLjY2MS05LjMwOHM0LjI3OC01LjEzNiA3LjUxMi03LjExOGMzLjIzNS0xLjk4MSA3LjE5OS0zLjUyIDExLjg5NC00LjYxNSA0LjY5Ni0xLjA5NSA5LjkxMi0xLjY0MiAxNS42NTEtMS42NDIgNC4xNzMgMCA4LjU4MS4zMTMgMTMuMjI0LjkzOCA0LjY0My42MjYgOS4zMTIgMS41OTEgMTQuMDA4IDIuODk0IDQuNjk1IDEuMzA0IDkuMjU5IDIuOTQ3IDEzLjY5NCA0LjkyOCA0LjQzNCAxLjk4MiA4LjUyOSA0LjI3NiAxMi4yODUgNi44ODR2LTQ2Ljc3NmMtNy42MTYtMi45Mi0xNS45MzctNS4wODQtMjQuOTYyLTYuNDkycy0xOS4zODEtMi4xMTItMzEuMDY2LTIuMTEyYy0xMS44OTUgMC0yMy4xNjMgMS4yNzgtMzMuODA1IDMuODMzcy0yMC4wMDYgNi41NDQtMjguMDkzIDExLjk2N2MtOC4wODYgNS40MjQtMTQuNDc2IDEyLjMzMy0xOS4xNzEgMjAuNzI5LTQuNjk1IDguMzk1LTcuMDQzIDE4LjQzMy03LjA0MyAzMC4xMTQgMCAxNC45MTQgNC4zMDQgMjcuNjM4IDEyLjkxMiAzOC4xNzIgOC42MDcgMTAuNTMzIDIxLjY3NSAxOS40NSAzOS4yMDQgMjYuNzUxIDYuODg2IDIuODE2IDEzLjMwMyA1LjU3OSAxOS4yNSA4LjI5MXMxMS4wODYgNS41MjggMTUuNDE1IDguNDQ4YzQuMzMgMi45MiA3Ljc0NyA2LjEwMSAxMC4yNTIgOS41NDMgMi41MDQgMy40NDEgMy43NTYgNy4zNTIgMy43NTYgMTEuNzMzIDAgMy4yMzMtLjc4MyA2LjIzMS0yLjM0OCA4Ljk5NXMtMy45MzkgNS4xNjItNy4xMjEgNy4xOTYtNy4xNDcgMy42MjQtMTEuODk0IDQuNzcxYy00Ljc0OCAxLjE0OC0xMC4zMDMgMS43MjEtMTYuNjY4IDEuNzIxLTEwLjg1MSAwLTIxLjU5Ny0xLjkwMy0zMi4yNC01LjcxLTEwLjY0Mi0zLjgwNi0yMC41MDItOS41MTYtMjkuNTc5LTE3LjEzem0tODQuMTU5LTEyMy4zNDJoNjQuMjJ2LTQxLjA4MmgtMTc5djQxLjA4Mmg2My45MDZ2MTgyLjkxOGg1MC44NzR6XCIsZmlsbDpcInZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKVwiLGZpbGxSdWxlOlwiZXZlbm9kZFwifSldfSksdFswXT1lKTplPXRbMF0sZX1mdW5jdGlvbiBlWigpe3ZhciBlLHQ9KDAseC5jKSgxKTtyZXR1cm4gdFswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhlPSgwLEEuanN4KShcInN2Z1wiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTQuNSA3djdhMi41IDIuNSAwIDAgMS0yLjUgMi41SDRBMi41IDIuNSAwIDAgMSAxLjUgMTRWLjVoNy41ODZhMSAxIDAgMCAxIC43MDcuMjkzbDQuNDE0IDQuNDE0YTEgMSAwIDAgMSAuMjkzLjcwN1Y3ek0xMyA3djdhMSAxIDAgMCAxLTEgMUg0YTEgMSAwIDAgMS0xLTFWMmg1djVoNXpNOS41IDIuNjIxVjUuNWgyLjg3OUw5LjUgMi42MjF6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSx0WzBdPWUpOmU9dFswXSxlfWZ1bmN0aW9uIGVVKCl7dmFyIGUsdCxuPSgwLHguYykoMik7cmV0dXJuIG5bMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZT0oMCxBLmpzeCkoXCJnXCIse2NsaXBQYXRoOlwidXJsKCNmaWxlX3JlYWN0X2NsaXAwXzg3Ml8zMTgzKVwiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk00LjUgMS45Mzc4MkM0LjcwMTI5IDEuODIxNjEgNC45OTQ3MiAxLjc4NTggNS40MTMxNSAxLjkxMDUzQzUuODMyOTggMi4wMzU2NyA2LjMzMTM5IDIuMzEwNzMgNi44NzYyNyAyLjczOTQ4QzcuMDExMzYgMi44NDU3OCA3LjE0ODAzIDIuOTYwNTIgNy4yODU3MyAzLjA4MzMxQzYuODYyMTcgMy41MzQ0NiA2LjQ0MjM5IDQuMDQzNTggNi4wMzc1MiA0LjYwMDkyQzUuMzUyNDMgNC42NzI4OCA0LjcwMTY0IDQuNzgxODYgNC4wOTkxNiA0LjkyMzA5QzQuMDYxNjcgNC43NDI0NCA0LjAzMDY0IDQuNTY2NzEgNC4wMDYxMiA0LjM5NjU2QzMuOTA3MjUgMy43MTAzMSAzLjkxODI1IDMuMTQxMTQgNC4wMTk3OSAyLjcxNDk5QzQuMTIwOTkgMi4yOTAyNSA0LjI5ODcxIDIuMDU0MDQgNC41IDEuOTM3ODJaTTcuNDk0NjYgMS45NTM2MUM3LjY2MjI1IDIuMDg1NDggNy44MzA5MiAyLjIyODA0IDcuOTk5OTkgMi4zODA2N0M4LjE2OTA2IDIuMjI4MDQgOC4zMzc3MyAyLjA4NTQ4IDguNTA1MzIgMS45NTM2MUM5LjEwOTIxIDEuNDc4NDIgOS43MTk4MiAxLjEyNTQ5IDEwLjMwMTIgMC45NTIyMDJDMTAuODgzOSAwLjc3ODQ5NiAxMS40ODM4IDAuNzczOCAxMiAxLjA3MThDMTIuNTE2MSAxLjM2OTggMTIuODEyIDEuODkxNjkgMTIuOTUzIDIuNDgzMjJDMTMuMDkzNiAzLjA3MzMzIDEzLjA5MzIgMy43Nzg1OCAxMi45ODM2IDQuNTM5MTdDMTIuOTUzMiA0Ljc1MDI0IDEyLjkxNDEgNC45Njc2IDEyLjg2NjUgNS4xOTAzNEMxMy4wODMyIDUuMjYwNDQgMTMuMjkxIDUuMzM1MjQgMTMuNDg5IDUuNDE0NDRDMTQuMjAyNSA1LjY5OTgzIDE0LjgxMzQgNi4wNTIxNyAxNS4yNTQyIDYuNDY4OTlDMTUuNjk2IDYuODg2OCAxNiA3LjQwNCAxNiA4QzE2IDguNTk2IDE1LjY5NiA5LjExMzE5IDE1LjI1NDIgOS41MzEwMUMxNC44MTM0IDkuOTQ3ODMgMTQuMjAyNSAxMC4zMDAyIDEzLjQ4OSAxMC41ODU2QzEzLjI5MSAxMC42NjQ4IDEzLjA4MzIgMTAuNzM5NiAxMi44NjY1IDEwLjgwOTdDMTIuOTE0MSAxMS4wMzI0IDEyLjk1MzIgMTEuMjQ5OCAxMi45ODM3IDExLjQ2MDhDMTMuMDkzMiAxMi4yMjE0IDEzLjA5MzYgMTIuOTI2NyAxMi45NTMgMTMuNTE2OEMxMi44MTIgMTQuMTA4MyAxMi41MTYxIDE0LjYzMDIgMTIgMTQuOTI4MkMxMS40ODM5IDE1LjIyNjIgMTAuODgzOSAxNS4yMjE1IDEwLjMwMTIgMTUuMDQ3OEM5LjcxOTg0IDE0Ljg3NDUgOS4xMDkyMyAxNC41MjE2IDguNTA1MzQgMTQuMDQ2NEM4LjMzNzc1IDEzLjkxNDUgOC4xNjkwNiAxMy43NzE5IDcuOTk5OTkgMTMuNjE5M0M3LjgzMDkxIDEzLjc3MTkgNy42NjIyMyAxMy45MTQ1IDcuNDk0NjQgMTQuMDQ2NEM2Ljg5MDc1IDE0LjUyMTYgNi4yODAxNCAxNC44NzQ1IDUuNjk4NzkgMTUuMDQ3OEM1LjExNjA1IDE1LjIyMTUgNC41MTYxMyAxNS4yMjYyIDMuOTk5OTggMTQuOTI4MkMzLjQ4MzgzIDE0LjYzMDIgMy4xODc5NCAxNC4xMDgzIDMuMDQ3IDEzLjUxNjhDMi45MDY0IDEyLjkyNjcgMi45MDY3NCAxMi4yMjE0IDMuMDE2MzIgMTEuNDYwOEMzLjA0NjczIDExLjI0OTggMy4wODU4NiAxMS4wMzI0IDMuMTMzNTEgMTAuODA5N0MyLjkxNjc5IDEwLjczOTUgMi43MDkgMTAuNjY0OCAyLjUxMSAxMC41ODU2QzEuNzk3NTIgMTAuMzAwMiAxLjE4NjU4IDkuOTQ3ODMgMC43NDU4MzMgOS41MzEwMUMwLjMwNDAyOCA5LjExMzE5IDAgOC41OTYgMCA4QzAgNy40MDQgMC4zMDQwMjggNi44ODY4IDAuNzQ1ODMzIDYuNDY4OTlDMS4xODY1OCA2LjA1MjE3IDEuNzk3NTIgNS42OTk4MyAyLjUxMSA1LjQxNDQ0QzIuNzA5IDUuMzM1MjQgMi45MTY4IDUuMjYwNDQgMy4xMzM1MiA1LjE5MDM0QzMuMDg1ODcgNC45Njc2IDMuMDQ2NzUgNC43NTAyNCAzLjAxNjM0IDQuNTM5MTdDMi45MDY3NiAzLjc3ODU4IDIuOTA2NDIgMy4wNzMzMiAzLjA0NzAyIDIuNDgzMjFDMy4xODc5NiAxLjg5MTY5IDMuNDgzODUgMS4zNjk4IDQgMS4wNzE4QzQuNTE2MTUgMC43NzM3OTggNS4xMTYwNyAwLjc3ODQ5NSA1LjY5ODgxIDAuOTUyMjAxQzYuMjgwMTYgMS4xMjU0OSA2Ljg5MDc3IDEuNDc4NDEgNy40OTQ2NiAxLjk1MzYxWk03LjM2NzQ3IDQuNTEwMjVDNy41NzczNSA0LjI1MTk0IDcuNzg4ODEgNC4wMDkyNyA3Ljk5OTk5IDMuNzgzNTZDOC4yMTExNyA0LjAwOTI3IDguNDIyNjMgNC4yNTE5NCA4LjYzMjUxIDQuNTEwMjVDOC40MjM2OSA0LjUwMzQ2IDguMjEyNzQgNC41IDggNC41QzcuNzg3MjUgNC41IDcuNTc2MyA0LjUwMzQ1IDcuMzY3NDcgNC41MTAyNVpNOC43MTQyNSAzLjA4MzMxQzkuMTM3ODEgMy41MzQ0NyA5LjU1NzU5IDQuMDQzNTggOS45NjI0NiA0LjYwMDkyQzEwLjY0NzUgNC42NzI4OCAxMS4yOTgzIDQuNzgxODYgMTEuOTAwOCA0LjkyMzA5QzExLjkzODMgNC43NDI0NCAxMS45NjkzIDQuNTY2NzEgMTEuOTkzOSA0LjM5NjU3QzEyLjA5MjcgMy43MTAzMSAxMi4wODE3IDMuMTQxMTQgMTEuOTgwMiAyLjcxNDk5QzExLjg3OSAyLjI5MDI1IDExLjcwMTMgMi4wNTQwNCAxMS41IDEuOTM3ODJDMTEuMjk4NyAxLjgyMTYxIDExLjAwNTMgMS43ODU4IDEwLjU4NjggMS45MTA1M0MxMC4xNjcgMi4wMzU2OCA5LjY2ODU5IDIuMzEwNzMgOS4xMjM3MSAyLjczOTQ4QzguOTg4NjIgMi44NDU3OCA4Ljg1MTk2IDIuOTYwNTIgOC43MTQyNSAzLjA4MzMxWk04IDUuNUM4LjQ4NDMzIDUuNSA4Ljk1NjM4IDUuNTE4ODUgOS40MTE4OCA1LjU1NDU2QzkuNjcwNTYgNS45MzExOCA5LjkyMjkgNi4zMzA1NiAxMC4xNjUxIDYuNzVDMTAuNDA3MiA3LjE2OTQ0IDEwLjYyNjkgNy41ODc2NiAxMC44MjM3IDcuOTk5OThDMTAuNjI2OSA4LjQxMjMyIDEwLjQwNzIgOC44MzA1NSAxMC4xNjUgOS4yNUM5LjkyMjg4IDkuNjY5NDQgOS42NzA1MyAxMC4wNjg4IDkuNDExODUgMTAuNDQ1NEM4Ljk1NjM2IDEwLjQ4MTIgOC40ODQzMiAxMC41IDggMTAuNUM3LjUxNTY3IDEwLjUgNy4wNDM2MyAxMC40ODEyIDYuNTg4MTMgMTAuNDQ1NEM2LjMyOTQ1IDEwLjA2ODggNi4wNzcxIDkuNjY5NDQgNS44MzQ5NCA5LjI1QzUuNTkyNzcgOC44MzA1NSA1LjM3MzA2IDguNDEyMzIgNS4xNzYyNCA3Ljk5OTk4QzUuMzczMDYgNy41ODc2NSA1LjU5Mjc1IDcuMTY5NDQgNS44MzQ5MiA2Ljc1QzYuMDc3MDggNi4zMzA1NiA2LjMyOTQyIDUuOTMxMTggNi41ODgxIDUuNTU0NTZDNy4wNDM2MSA1LjUxODg0IDcuNTE1NjYgNS41IDggNS41Wk0xMS4wMzExIDYuMjVDMTEuMTM3NSA2LjQzNDIzIDExLjIzOTkgNi42MTg2NCAxMS4zMzg1IDYuODAyODdDMTEuNDU3MiA2LjQ5MTk3IDExLjU2MTYgNi4xODc1MiAxMS42NTE1IDUuODkxNzhDMTEuMzUwNSA1LjgyMTc1IDExLjAzNDYgNS43NTk5NiAxMC43MDYgNS43MDczNkMxMC44MTYzIDUuODg0OCAxMC45MjQ3IDYuMDY1NzYgMTEuMDMxMSA2LjI1Wk0xMS4wMzExIDkuNzVDMTEuMTM3NCA5LjU2NTc2IDExLjIzOTkgOS4zODEzMyAxMS4zMzg1IDkuMTk3MDlDMTEuNDU3MiA5LjUwODAxIDExLjU2MTcgOS44MTI0NiAxMS42NTE1IDEwLjEwODJDMTEuMzUwNSAxMC4xNzgyIDExLjAzNDYgMTAuMjQgMTAuNzA1OSAxMC4yOTI2QzEwLjgxNjIgMTAuMTE1MiAxMC45MjQ3IDkuOTM0MjQgMTEuMDMxMSA5Ljc1Wk0xMS45MjQ5IDcuOTk5OThDMTIuMjA1MSA4LjYyOTI3IDEyLjQzNjIgOS4yNDczOCAxMi42MTUxIDkuODM5NzdDMTIuNzkwMyA5Ljc4MTkxIDEyLjk1OCA5LjcyMDkyIDEzLjExNzYgOS42NTcwOEMxMy43NjE0IDkuMzk5NTggMTQuMjQ4OCA5LjEwNTQ3IDE0LjU2NzEgOC44MDQ0NkMxNC44ODQzIDguNTA0NDUgMTUgOC4yMzI0MyAxNSA4QzE1IDcuNzY3NTcgMTQuODg0MyA3LjQ5NTU1IDE0LjU2NzEgNy4xOTU1NEMxNC4yNDg4IDYuODk0NTMgMTMuNzYxNCA2LjYwMDQyIDEzLjExNzYgNi4zNDI5MkMxMi45NTggNi4yNzkwNyAxMi43OTAzIDYuMjE4MDggMTIuNjE1MSA2LjE2MDIyQzEyLjQzNjIgNi43NTI2IDEyLjIwNTEgNy4zNzA2OSAxMS45MjQ5IDcuOTk5OThaTTkuOTYyNDQgMTEuMzk5MUMxMC42NDc1IDExLjMyNzEgMTEuMjk4MyAxMS4yMTgxIDExLjkwMDggMTEuMDc2OUMxMS45MzgzIDExLjI1NzYgMTEuOTY5NCAxMS40MzMzIDExLjk5MzkgMTEuNjAzNEMxMi4wOTI4IDEyLjI4OTcgMTIuMDgxNyAxMi44NTg5IDExLjk4MDIgMTMuMjg1QzExLjg3OSAxMy43MDk4IDExLjcwMTMgMTMuOTQ2IDExLjUgMTQuMDYyMkMxMS4yOTg3IDE0LjE3ODQgMTEuMDA1MyAxNC4yMTQyIDEwLjU4NjggMTQuMDg5NUMxMC4xNjcgMTMuOTY0MyA5LjY2ODYxIDEzLjY4OTMgOS4xMjM3MyAxMy4yNjA1QzguOTg4NjMgMTMuMTU0MiA4Ljg1MTk2IDEzLjAzOTUgOC43MTQyNCAxMi45MTY3QzkuMTM3OCAxMi40NjU1IDkuNTU3NTggMTEuOTU2NCA5Ljk2MjQ0IDExLjM5OTFaTTguNjMyNDkgMTEuNDg5OEM4LjQyMjYyIDExLjc0ODEgOC4yMTExNiAxMS45OTA3IDcuOTk5OTkgMTIuMjE2NEM3Ljc4ODgxIDExLjk5MDcgNy41NzczNyAxMS43NDgxIDcuMzY3NDkgMTEuNDg5N0M3LjU3NjMxIDExLjQ5NjUgNy43ODcyNiAxMS41IDggMTEuNUM4LjIxMjczIDExLjUgOC40MjM2NyAxMS40OTY1IDguNjMyNDkgMTEuNDg5OFpNNC45Njg5MSA5Ljc1QzUuMDc1MjggOS45MzQyNCA1LjE4Mzc1IDEwLjExNTIgNS4yOTQwNCAxMC4yOTI2QzQuOTY1NCAxMC4yNCA0LjY0OTUxIDEwLjE3ODIgNC4zNDg0NCAxMC4xMDgyQzQuNDM4MzMgOS44MTI0NiA0LjU0Mjc2IDkuNTA4IDQuNjYxNTIgOS4xOTcwOEM0Ljc2MDA1IDkuMzgxMzMgNC44NjI1NCA5LjU2NTc1IDQuOTY4OTEgOS43NVpNNi4wMzc1NCAxMS4zOTkxQzUuMzUyNDQgMTEuMzI3MSA0LjcwMTYzIDExLjIxODEgNC4wOTkxNCAxMS4wNzY5QzQuMDYxNjUgMTEuMjU3NiA0LjAzMDYyIDExLjQzMzMgNC4wMDYxIDExLjYwMzRDMy45MDcyMyAxMi4yODk3IDMuOTE4MjMgMTIuODU4OSA0LjAxOTc3IDEzLjI4NUM0LjEyMDk3IDEzLjcwOTggNC4yOTg2OSAxMy45NDYgNC40OTk5OCAxNC4wNjIyQzQuNzAxMjcgMTQuMTc4NCA0Ljk5NDcgMTQuMjE0MiA1LjQxMzEzIDE0LjA4OTVDNS44MzI5NiAxMy45NjQzIDYuMzMxMzcgMTMuNjg5MyA2Ljg3NjI1IDEzLjI2MDVDNy4wMTEzNSAxMy4xNTQyIDcuMTQ4MDIgMTMuMDM5NSA3LjI4NTczIDEyLjkxNjdDNi44NjIxNyAxMi40NjU1IDYuNDQyNCAxMS45NTY0IDYuMDM3NTQgMTEuMzk5MVpNNC4wNzUwNyA3Ljk5OTk4QzMuNzk0ODQgOC42MjkyNyAzLjU2MzgxIDkuMjQ3MzcgMy4zODQ4OSA5LjgzOTc3QzMuMjA5NjkgOS43ODE5MSAzLjA0MiA5LjcyMDkyIDIuODgyMzkgOS42NTcwOEMyLjIzODY0IDkuMzk5NTggMS43NTEyMyA5LjEwNTQ3IDEuNDMyOTQgOC44MDQ0NkMxLjExNTcxIDguNTA0NDUgMSA4LjIzMjQzIDEgOEMxIDcuNzY3NTcgMS4xMTU3MSA3LjQ5NTU1IDEuNDMyOTQgNy4xOTU1NEMxLjc1MTIzIDYuODk0NTMgMi4yMzg2NCA2LjYwMDQyIDIuODgyMzkgNi4zNDI5MkMzLjA0MiA2LjI3OTA3IDMuMjA5NyA2LjIxODA4IDMuMzg0OSA2LjE2MDIyQzMuNTYzODMgNi43NTI2MSAzLjc5NDg0IDcuMzcwNjkgNC4wNzUwNyA3Ljk5OTk4Wk00LjY2MTUyIDYuODAyODdDNC41NDI3NyA2LjQ5MTk3IDQuNDM4MzUgNi4xODc1MiA0LjM0ODQ2IDUuODkxNzhDNC42NDk1MiA1LjgyMTc1IDQuOTY1MzkgNS43NTk5NiA1LjI5NDAyIDUuNzA3MzZDNS4xODM3MyA1Ljg4NDggNS4wNzUyNiA2LjA2NTc2IDQuOTY4ODkgNi4yNUM0Ljg2MjUzIDYuNDM0MjMgNC43NjAwNSA2LjYxODY0IDQuNjYxNTIgNi44MDI4N1pNOS4yNSA4QzkuMjUgOC42OTAzNiA4LjY5MDM2IDkuMjUgOCA5LjI1QzcuMzA5NjQgOS4yNSA2Ljc1IDguNjkwMzYgNi43NSA4QzYuNzUgNy4zMDk2NSA3LjMwOTY0IDYuNzUgOCA2Ljc1QzguNjkwMzYgNi43NSA5LjI1IDcuMzA5NjUgOS4yNSA4WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSksblswXT1lKTplPW5bMF0sblsxXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PSgwLEEuanN4cykoXCJzdmdcIix7aGVpZ2h0OlwiMTZcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLHdpZHRoOlwiMTZcIixjaGlsZHJlbjpbZSwoMCxBLmpzeCkoXCJkZWZzXCIse2NoaWxkcmVuOigwLEEuanN4KShcImNsaXBQYXRoXCIse2lkOlwiZmlsZV9yZWFjdF9jbGlwMF84NzJfMzE4M1wiLGNoaWxkcmVuOigwLEEuanN4KShcInJlY3RcIix7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsZmlsbDpcIndoaXRlXCJ9KX0pfSldfSksblsxXT10KTp0PW5bMV0sdH12YXIgZUY9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vZGlzdC9jb21waWxlZC9hbnNlci9pbmRleC5qc1wiKSxlcT1fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZUYpLGVIPV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaS9pbmRleC5qc1wiKSxlVj1fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZUgpO2Z1bmN0aW9uIGUkKGUpe3ZhciB0PWUuc3BsaXQoL1xccj9cXG4vZyksbj10Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PS9ePj8gK1xcZCsgK1xcfCBbIF0rLy5leGVjKGVWKCkoZSkpP251bGw6L14+PyArXFxkKyArXFx8ICggKikvLmV4ZWMoZVYoKShlKSl9KS5maWx0ZXIoQm9vbGVhbikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBvcCgpfSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGlzTmFOKGUpP3QubGVuZ3RoOk1hdGgubWluKGUsdC5sZW5ndGgpfSxOYU4pO3JldHVybiBuPjE/dC5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm5+KHQ9ZS5pbmRleE9mKFwifFwiKSk/ZS5zdWJzdHJpbmcoMCx0KStlLnN1YnN0cmluZyh0KS5yZXBsYWNlKFwiXlxcXFwge1wiLmNvbmNhdChuLFwifVwiKSxcIlwiKTplfSkuam9pbihcIlxcblwiKTp0LmpvaW4oXCJcXG5cIil9ZnVuY3Rpb24gZVcoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIGVZKGUpe3ZhciB0LG4scixvPWUuc3RhY2tGcmFtZSxhPWUuY29kZUZyYW1lLGk9KDAsdy51c2VNZW1vKShmdW5jdGlvbigpe3JldHVybihmdW5jdGlvbihlKXt2YXIgdD1lcSgpLmFuc2lUb0pzb24oZSx7anNvbjohMCx1c2VfY2xhc3NlczohMCxyZW1vdmVfZW1wdHk6ITB9KSxuPVtdLHI9W10sbz0hMCxhPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIGwscz10W1N5bWJvbC5pdGVyYXRvcl0oKTshKG89KGw9cy5uZXh0KCkpLmRvbmUpO289ITApe3ZhciBjPWwudmFsdWU7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGMuY29udGVudCYmYy5jb250ZW50LmluY2x1ZGVzKFwiXFxuXCIpKWZvcih2YXIgdT1jLmNvbnRlbnQuc3BsaXQoXCJcXG5cIiksZD0wO2Q8dS5sZW5ndGg7ZCsrKXt2YXIgZj11W2RdO2YmJnIucHVzaChmdW5jdGlvbihlLHQpe3JldHVybiB0PW51bGwhPXQ/dDp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pKX0pLGV9KGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe30sYykse2NvbnRlbnQ6Zn0pKSxkPHUubGVuZ3RoLTEmJihuLnB1c2gocikscj1bXSl9ZWxzZSByLnB1c2goYyl9fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e298fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gci5sZW5ndGg+MCYmbi5wdXNoKHIpLG59KShlJChhKSkubWFwKGZ1bmN0aW9uKGUpe3ZhciB0LG4scixhLGksbCxzLGMsdTtyZXR1cm57bGluZTplLHBhcnNlZExpbmU6KHQ9ZSxuPW8sKChudWxsPT0ocj10WzBdKT92b2lkIDA6ci5jb250ZW50KT09PVwiPlwifHwobnVsbD09KGE9dFswXSk/dm9pZCAwOmEuY29udGVudCk9PT1cIiBcIikmJihzPW51bGw9PShsPXRbMV0pfHxudWxsPT0odT1sLmNvbnRlbnQpfHxudWxsPT0oYz11LnJlcGxhY2UoXCJ8XCIsXCJcIikpP3ZvaWQgMDpjLnRyaW0oKSkse2xpbmVOdW1iZXI6cyxpc0Vycm9yZWRMaW5lOnM9PT0obnVsbD09KGk9bi5saW5lMSk/dm9pZCAwOmkudG9TdHJpbmcoKSl9KX19KX0sW2Esb10pLGw9ZUIoe2ZpbGU6by5maWxlLGxpbmUxOm51bGwhPShuPW8ubGluZTEpP246MSxjb2x1bW4xOm51bGwhPShyPW8uY29sdW1uMSk/cjoxfSkscz1udWxsPT1vfHxudWxsPT0odD1vLmZpbGUpP3ZvaWQgMDp0LnNwbGl0KFwiLlwiKS5wb3AoKTtyZXR1cm4oMCxBLmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29kZWZyYW1lXCI6ITAsY2hpbGRyZW46WygwLEEuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWhlYWRlclwiLGNoaWxkcmVuOigwLEEuanN4cykoXCJwXCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtbGlua1wiLGNoaWxkcmVuOlsoMCxBLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtaWNvblwiLGNoaWxkcmVuOigwLEEuanN4KShlTCx7bGFuZzpzfSl9KSwoMCxBLmpzeHMpKFwic3BhblwiLHtcImRhdGEtdGV4dFwiOiEwLGNoaWxkcmVuOltlTyhvKSxcIiBAXCIsXCIgXCIsKDAsQS5qc3gpKGVBLHt0ZXh0Om8ubWV0aG9kTmFtZX0pXX0pLCgwLEEuanN4KShcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjpcIk9wZW4gaW4gZWRpdG9yXCIsXCJkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGluay1zb3VyY2UtZmlsZVwiOiEwLG9uQ2xpY2s6bCxjaGlsZHJlbjooMCxBLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtaWNvblwiLFwiZGF0YS1pY29uXCI6XCJyaWdodFwiLGNoaWxkcmVuOigwLEEuanN4KShleix7d2lkdGg6MTYsaGVpZ2h0OjE2fSl9KX0pXX0pfSksKDAsQS5qc3gpKFwicHJlXCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtcHJlXCIsY2hpbGRyZW46KDAsQS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtbGluZXNcIixjaGlsZHJlbjppLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1lLmxpbmUsYT1lLnBhcnNlZExpbmUsaT1hLmxpbmVOdW1iZXIsbD1hLmlzRXJyb3JlZExpbmUscz17fTtyZXR1cm4gaSYmKHNbXCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtbGluZVwiXT1pKSxsJiYoc1tcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1saW5lLS1lcnJvcmVkXCJdPSEwKSwoMCxBLmpzeCkoXCJkaXZcIiwobj1lVyh7fSxzKSxyPXI9e2NoaWxkcmVuOm8ubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsQS5qc3gpKFwic3BhblwiLHtzdHlsZTplVyh7Y29sb3I6ZS5mZz9cInZhcigtLWNvbG9yLVwiLmNvbmNhdChlLmZnLFwiKVwiKTp2b2lkIDB9LFwiYm9sZFwiPT09ZS5kZWNvcmF0aW9uP3tmb250V2VpZ2h0OjUwMH06XCJpdGFsaWNcIj09PWUuZGVjb3JhdGlvbj97Zm9udFN0eWxlOlwiaXRhbGljXCJ9OnZvaWQgMCksY2hpbGRyZW46ZS5jb250ZW50fSxcImZyYW1lLVwiLmNvbmNhdCh0KSl9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdChyKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSxuKSxcImxpbmUtXCIuY29uY2F0KHQpKX0pfSl9KV19KX12YXIgZUs9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8sYSxpLGw9KDAseC5jKSg4KTtyZXR1cm4obFswXSE9PWU/KGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLCEodC5pbmRleE9mKG4pPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLFtcImNoaWxkcmVuXCIsXCJjbGFzc05hbWVcIl0pLHI9ZS5jaGlsZHJlbixvPWUuY2xhc3NOYW1lLGxbMF09ZSxsWzFdPXIsbFsyXT1vLGxbM109YSk6KHI9bFsxXSxvPWxbMl0sYT1sWzNdKSxsWzRdIT09cnx8bFs1XSE9PW98fGxbNl0hPT1hKT8oaT0oMCxBLmpzeCkoXCJkaXZcIiwodD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9ZSxvPXQsYT1uW3RdLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtcImRhdGEtbmV4dGpzLWRpYWxvZy1ib2R5XCI6ITAsY2xhc3NOYW1lOm99LGEpLG49bj17Y2hpbGRyZW46cn0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSx0KSksbFs0XT1yLGxbNV09byxsWzZdPWEsbFs3XT1pKTppPWxbN10saX0sZVg9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8sYSxpLGw9KDAseC5jKSg4KTtyZXR1cm4obFswXSE9PWU/KGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLCEodC5pbmRleE9mKG4pPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLFtcImNoaWxkcmVuXCIsXCJjbGFzc05hbWVcIl0pLHI9ZS5jaGlsZHJlbixvPWUuY2xhc3NOYW1lLGxbMF09ZSxsWzFdPXIsbFsyXT1vLGxbM109YSk6KHI9bFsxXSxvPWxbMl0sYT1sWzNdKSxsWzRdIT09cnx8bFs1XSE9PW98fGxbNl0hPT1hKT8oaT0oMCxBLmpzeCkoXCJkaXZcIiwodD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9ZSxvPXQsYT1uW3RdLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtcImRhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XCI6ITAsY2xhc3NOYW1lOm99LGEpLG49bj17Y2hpbGRyZW46cn0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSx0KSksbFs0XT1yLGxbNV09byxsWzZdPWEsbFs3XT1pKTppPWxbN10saX07ZnVuY3Rpb24gZUcoKXt2YXIgZSx0LG49KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLXJvb3RdIHtcXG4gICAgLS1uZXh0LWRpYWxvZy1yYWRpdXM6IHZhcigtLXJvdW5kZWQteGwpO1xcbiAgICAtLW5leHQtZGlhbG9nLW1heC13aWR0aDogOTYwcHg7XFxuICAgIC0tbmV4dC1kaWFsb2ctcm93LXBhZGRpbmc6IDE2cHg7XFxuICAgIC0tbmV4dC1kaWFsb2ctcGFkZGluZzogMTJweDtcXG4gICAgLS1uZXh0LWRpYWxvZy1ub3RjaC1oZWlnaHQ6IDQycHg7XFxuICAgIC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoOiAxcHg7XFxuXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA1NnB4KTtcXG4gICAgbWF4LXdpZHRoOiB2YXIoLS1uZXh0LWRpYWxvZy1tYXgtd2lkdGgpO1xcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBzY2FsZTogMC45NztcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogc2NhbGUsIG9wYWNpdHk7XFxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXRyYW5zaXRpb24tZHVyYXRpb24pO1xcbiAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tdGltaW5nLW92ZXJsYXkpO1xcblxcbiAgICAmW2RhdGEtcmVuZGVyZWQ9J3RydWUnXSB7XFxuICAgICAgb3BhY2l0eTogMTtcXG4gICAgICBzY2FsZTogMTtcXG4gICAgfVxcblxcbiAgICBbZGF0YS1uZXh0anMtc2Nyb2xsLWZhZGVyXVtkYXRhLXNpZGU9J3RvcCddIHtcXG4gICAgICBsZWZ0OiAxcHg7XFxuICAgICAgdG9wOiBjYWxjKFxcbiAgICAgICAgdmFyKC0tbmV4dC1kaWFsb2ctbm90Y2gtaGVpZ2h0KSArIHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aClcXG4gICAgICApO1xcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSB2YXIoLS1uZXh0LWRpYWxvZy1wYWRkaW5nKSk7XFxuICAgICAgb3BhY2l0eTogMDtcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZ10ge1xcbiAgICBvdXRsaW5lOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcF0ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLXRyYW5zaXRpb24tZHVyYXRpb24pIHZhcigtLXRpbWluZy1vdmVybGF5KTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV0ge1xcbiAgICBtYXJnaW46IDhweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV1bZGF0YS1yZW5kZXJlZD0ndHJ1ZSddXFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3BdIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctY29udGVudF0ge1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBwYWRkaW5nOiB2YXIoLS1uZXh0LWRpYWxvZy1wYWRkaW5nKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctY29udGVudF0gPiBbZGF0YS1uZXh0anMtZGlhbG9nLWhlYWRlcl0ge1xcbiAgICBmbGV4LXNocmluazogMDtcXG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XSA+IFtkYXRhLW5leHRqcy1kaWFsb2ctYm9keV0ge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGZsZXg6IDEgMSBhdXRvO1xcbiAgfVxcblxcbiAgQG1lZGlhIChtYXgtaGVpZ2h0OiA4MTJweCkge1xcbiAgICBbZGF0YS1uZXh0anMtZGlhbG9nLW92ZXJsYXldIHtcXG4gICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSAxNXB4KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctcm9vdF0ge1xcbiAgICAgIC0tbmV4dC1kaWFsb2ctbWF4LXdpZHRoOiA1NDBweDtcXG4gICAgfVxcbiAgfVxcblxcbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctcm9vdF0ge1xcbiAgICAgIC0tbmV4dC1kaWFsb2ctbWF4LXdpZHRoOiA3MjBweDtcXG4gICAgfVxcbiAgfVxcblxcbiAgQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctcm9vdF0ge1xcbiAgICAgIC0tbmV4dC1kaWFsb2ctbWF4LXdpZHRoOiA5NjBweDtcXG4gICAgfVxcbiAgfVxcblwiXSx0fHwodD1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZSh0KX19KSkpO3JldHVybiBlRz1mdW5jdGlvbigpe3JldHVybiBufSxufXZhciBlUT1ldShlRygpKTtmdW5jdGlvbiBlSigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHQuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfWZ1bmN0aW9uIGUwKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBlMShlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9ZSxvPXQsYT1uW3RdLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gZTIoZSx0KXtyZXR1cm4gdD1udWxsIT10P3Q6e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKSl9KSxlfWZ1bmN0aW9uIGU0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLCF0fHxhLmxlbmd0aCE9PXQpO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLHQpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlMChlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4pcmV0dXJuIEFycmF5LmZyb20obik7aWYoXCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBlMChlLHQpfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBlNShlLHQpe3JldHVyblwicmVzZXRcIj09PXQudHlwZT97c3RhdGU6XCJpbml0aWFsXCJ9OlwiY29waWVkXCI9PT10LnR5cGU/e3N0YXRlOlwic3VjY2Vzc1wifTpcImNvcHlpbmdcIj09PXQudHlwZT97c3RhdGU6XCJwZW5kaW5nXCJ9OlwiZXJyb3JcIj09PXQudHlwZT97c3RhdGU6XCJlcnJvclwiLGVycm9yOnQuZXJyb3J9OmV9ZnVuY3Rpb24gZTMoZSl7cmV0dXJue3N0YXRlOlwiZXJyb3JcIixlcnJvcjplfX1mdW5jdGlvbiBlNigpe3JldHVybntzdGF0ZTpcInN1Y2Nlc3NcIn19dmFyIGU5PVwiZnVuY3Rpb25cIj09dHlwZW9mIHcudXNlQWN0aW9uU3RhdGU/ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8sYSxpPSgwLHguYykoOCk7aVswXSE9PWU/KHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5cInJlc2V0XCI9PT1uP3tzdGF0ZTpcImluaXRpYWxcIn06XCJjb3B5XCI9PT1uP25hdmlnYXRvci5jbGlwYm9hcmQ/bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZSkudGhlbihlNixlMyk6e3N0YXRlOlwiZXJyb3JcIixlcnJvcjpcIkNvcHkgdG8gY2xpcGJvYXJkIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCJ9OnR9LGlbMF09ZSxpWzFdPXQpOnQ9aVsxXSxpWzJdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KG49e3N0YXRlOlwiaW5pdGlhbFwifSxpWzJdPW4pOm49aVsyXTt2YXIgbD1lNCh3LnVzZUFjdGlvblN0YXRlKHQsbiksMykscz1sWzBdLGM9bFsxXSx1PWxbMl07aVszXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhyPWZ1bmN0aW9uKCl7dy5zdGFydFRyYW5zaXRpb24oZnVuY3Rpb24oKXtjKFwiY29weVwiKX0pfSxpWzNdPXIpOnI9aVszXTt2YXIgZD1yO2lbNF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8obz1mdW5jdGlvbigpe2MoXCJyZXNldFwiKX0saVs0XT1vKTpvPWlbNF07dmFyIGY9bztyZXR1cm4gaVs1XSE9PXN8fGlbNl0hPT11PyhhPVtzLGQsZix1XSxpWzVdPXMsaVs2XT11LGlbN109YSk6YT1pWzddLGF9OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGEsaSxsPSgwLHguYykoMTIpO2xbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8odD17c3RhdGU6XCJpbml0aWFsXCJ9LGxbMF09dCk6dD1sWzBdO3ZhciBzPWU0KHcudXNlUmVkdWNlcihlNSx0KSwyKSxjPXNbMF0sdT1zWzFdO3JldHVybiBsWzFdIT09ZXx8bFsyXSE9PWMuc3RhdGU/KG49ZnVuY3Rpb24oKXtyfHwobmF2aWdhdG9yLmNsaXBib2FyZD8odSh7dHlwZTpcImNvcHlpbmdcIn0pLG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGUpLnRoZW4oZnVuY3Rpb24oKXt1KHt0eXBlOlwiY29waWVkXCJ9KX0sZnVuY3Rpb24oZSl7dSh7dHlwZTpcImVycm9yXCIsZXJyb3I6ZX0pfSkpOnUoe3R5cGU6XCJlcnJvclwiLGVycm9yOlwiQ29weSB0byBjbGlwYm9hcmQgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIn0pKX0sbFs2XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhhPWZ1bmN0aW9uKCl7dSh7dHlwZTpcInJlc2V0XCJ9KX0sbFs2XT1hKTphPWxbNl0sbz1hLHI9XCJwZW5kaW5nXCI9PT1jLnN0YXRlLGxbMV09ZSxsWzJdPWMuc3RhdGUsbFszXT1uLGxbNF09cixsWzVdPW8pOihuPWxbM10scj1sWzRdLG89bFs1XSksbFs3XSE9PW58fGxbOF0hPT1jfHxsWzldIT09cnx8bFsxMF0hPT1vPyhpPVtjLG4sbyxyXSxsWzddPW4sbFs4XT1jLGxbOV09cixsWzEwXT1vLGxbMTFdPWkpOmk9bFsxMV0saX07ZnVuY3Rpb24gZTgoZSl7dmFyIHQsbixyLG8sYSxpLGwscyxjLHUsZCxmLHAsaCxtLGcseSx2PSgwLHguYykoNDApO3ZbMF0hPT1lPyhpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSwhKHQuaW5kZXhPZihuKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxbXCJjb250ZW50XCIsXCJnZXRDb250ZW50XCIsXCJhY3Rpb25MYWJlbFwiLFwic3VjY2Vzc0xhYmVsXCIsXCJpY29uXCIsXCJkaXNhYmxlZFwiXSksbj1lLmNvbnRlbnQsbz1lLmdldENvbnRlbnQsdD1lLmFjdGlvbkxhYmVsLGw9ZS5zdWNjZXNzTGFiZWwsYT1lLmljb24scj1lLmRpc2FibGVkLHZbMF09ZSx2WzFdPXQsdlsyXT1uLHZbM109cix2WzRdPW8sdls1XT1hLHZbNl09aSx2WzddPWwpOih0PXZbMV0sbj12WzJdLHI9dlszXSxvPXZbNF0sYT12WzVdLGk9dls2XSxsPXZbN10pLHZbOF0hPT1ufHx2WzldIT09bz8ocz1mdW5jdGlvbigpe3JldHVybiBufHwobz9vKCk6XCJcIil9LHZbOF09bix2WzldPW8sdlsxMF09cyk6cz12WzEwXTt2YXIgYj1zO3ZbMTFdIT09Yj8oYz1iKCksdlsxMV09Yix2WzEyXT1jKTpjPXZbMTJdO3ZhciBDPWU0KGU5KGMpLDQpLF89Q1swXSxrPUNbMV0sRT1DWzJdLGo9Q1szXSxTPVwiZXJyb3JcIj09PV8uc3RhdGU/Xy5lcnJvcjpudWxsO3ZbMTNdIT09Uz8odT1mdW5jdGlvbigpe251bGwhPT1TJiZjb25zb2xlLndhcm4oUyl9LGQ9W1NdLHZbMTNdPVMsdlsxNF09dSx2WzE1XT1kKToodT12WzE0XSxkPXZbMTVdKSx3LnVzZUVmZmVjdCh1LGQpLHZbMTZdIT09Xy5zdGF0ZXx8dlsxN10hPT1FPyhmPWZ1bmN0aW9uKCl7aWYoXCJzdWNjZXNzXCI9PT1fLnN0YXRlKXt2YXIgZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7RSgpfSwyZTMpO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChlKX19fSx2WzE2XT1fLnN0YXRlLHZbMTddPUUsdlsxOF09Zik6Zj12WzE4XSx2WzE5XSE9PV8uc3RhdGV8fHZbMjBdIT09anx8dlsyMV0hPT1FPyhwPVtqLF8uc3RhdGUsRV0sdlsxOV09Xy5zdGF0ZSx2WzIwXT1qLHZbMjFdPUUsdlsyMl09cCk6cD12WzIyXSx3LnVzZUVmZmVjdChmLHApO3ZhciBPPSFuYXZpZ2F0b3IuY2xpcGJvYXJkfHxqfHxyfHwhIVMsQj1cInN1Y2Nlc3NcIj09PV8uc3RhdGU/bDp0O3ZbMjNdIT09Xy5zdGF0ZXx8dlsyNF0hPT1hPyhoPVwic3VjY2Vzc1wiPT09Xy5zdGF0ZT8oMCxBLmpzeCkodGUse30pOmF8fCgwLEEuanN4KShlNyx7d2lkdGg6MTQsaGVpZ2h0OjE0LGNsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktdG9vbGJhci1idXR0b24taWNvblwifSksdlsyM109Xy5zdGF0ZSx2WzI0XT1hLHZbMjVdPWgpOmg9dlsyNV07dmFyIFA9aCxJPVwibmV4dGpzLWRhdGEtY29weS1idXR0b24tLVwiLmNvbmNhdChfLnN0YXRlKTt2WzI2XSE9PWUuY2xhc3NOYW1lfHx2WzI3XSE9PUk/KG09ZUooZS5jbGFzc05hbWUsXCJuZXh0anMtZGF0YS1jb3B5LWJ1dHRvblwiLEkpLHZbMjZdPWUuY2xhc3NOYW1lLHZbMjddPUksdlsyOF09bSk6bT12WzI4XSx2WzI5XSE9PWt8fHZbMzBdIT09Tz8oZz1mdW5jdGlvbigpe098fGsoKX0sdlsyOV09ayx2WzMwXT1PLHZbMzFdPWcpOmc9dlszMV07dmFyIFQ9XCJlcnJvclwiPT09Xy5zdGF0ZT9cIiBcIi5jb25jYXQoXy5lcnJvcik6bnVsbDtyZXR1cm4gdlszMl0hPT1PfHx2WzMzXSE9PUJ8fHZbMzRdIT09UHx8dlszNV0hPT1pfHx2WzM2XSE9PVR8fHZbMzddIT09bXx8dlszOF0hPT1nPyh5PSgwLEEuanN4cykoXCJidXR0b25cIixlMihlMSh7fSxpKSx7dHlwZTpcImJ1dHRvblwiLHRpdGxlOkIsXCJhcmlhLWxhYmVsXCI6QixcImFyaWEtZGlzYWJsZWRcIjpPLGRpc2FibGVkOk8sXCJkYXRhLW5leHRqcy1jb3B5LWJ1dHRvblwiOiEwLGNsYXNzTmFtZTptLG9uQ2xpY2s6ZyxjaGlsZHJlbjpbUCxUXX0pKSx2WzMyXT1PLHZbMzNdPUIsdlszNF09UCx2WzM1XT1pLHZbMzZdPVQsdlszN109bSx2WzM4XT1nLHZbMzldPXkpOnk9dlszOV0seX1mdW5jdGlvbiBlNyhlKXt2YXIgdCxuLHI9KDAseC5jKSgzKTtyZXR1cm4gclswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PSgwLEEuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0yLjQwNi40MzhjLS44NDUgMC0xLjUzMS42ODUtMS41MzEgMS41M3Y2LjU2M2MwIC44NDYuNjg2IDEuNTMxIDEuNTMxIDEuNTMxSDMuOTM3VjguNzVIMi40MDZhLjIxOS4yMTkgMCAwIDEtLjIxOS0uMjE5VjEuOTdjMC0uMTIxLjA5OC0uMjE5LjIyLS4yMTloNC44MTJjLjEyIDAgLjIxOC4wOTguMjE4LjIxOXYuNjU2SDguNzV2LS42NTZjMC0uODQ2LS42ODYtMS41MzItMS41MzEtMS41MzJIMi40MDZ6bTQuMzc1IDMuNWMtLjg0NSAwLTEuNTMxLjY4NS0xLjUzMSAxLjUzdjYuNTYzYzAgLjg0Ni42ODYgMS41MzEgMS41MzEgMS41MzFoNC44MTNjLjg0NSAwIDEuNTMxLS42ODUgMS41MzEtMS41M1Y1LjQ2OGMwLS44NDYtLjY4Ni0xLjUzMi0xLjUzMS0xLjUzMkg2Ljc4em0tLjIxOCAxLjUzYzAtLjEyLjA5Ny0uMjE4LjIxOC0uMjE4aDQuODEzYy4xMiAwIC4yMTkuMDk4LjIxOS4yMTl2Ni41NjJjMCAuMTIxLS4wOTguMjE5LS4yMi4yMTlINi43ODJhLjIxOS4yMTkgMCAwIDEtLjIxOC0uMjE5VjUuNDd6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSksclswXT10KTp0PXJbMF0sclsxXSE9PWU/KG49KDAsQS5qc3gpKFwic3ZnXCIsZTIoZTEoe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxNFwiLHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSkse2NoaWxkcmVuOnR9KSksclsxXT1lLHJbMl09bik6bj1yWzJdLG59ZnVuY3Rpb24gdGUoKXt2YXIgZSx0PSgwLHguYykoMSk7cmV0dXJuIHRbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZT0oMCxBLmpzeCkoXCJzdmdcIix7aGVpZ2h0OlwiMTZcIix4bGlua1RpdGxlOlwiY29waWVkXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLHdpZHRoOlwiMTZcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixmaWxsOlwiY3VycmVudENvbG9yXCIsY2hpbGRyZW46KDAsQS5qc3gpKFwicGF0aFwiLHtkOlwiTTEzLjc4IDQuMjJhLjc1Ljc1IDAgMCAxIDAgMS4wNmwtNy4yNSA3LjI1YS43NS43NSAwIDAgMS0xLjA2IDBMMi4yMiA5LjI4YS43NTEuNzUxIDAgMCAxIC4wMTgtMS4wNDIuNzUxLjc1MSAwIDAgMSAxLjA0Mi0uMDE4TDYgMTAuOTRsNi43Mi02LjcyYS43NS43NSAwIDAgMSAxLjA2IDBaXCJ9KX0pLHRbMF09ZSk6ZT10WzBdLGV9ZnVuY3Rpb24gdHQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIHRuKGUsdCl7cmV0dXJuIHQ9bnVsbCE9dD90Ont9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbikpfSksZX12YXIgdHI9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93KXJldHVybiExO3ZhciBlPVwiY2hyb21lXCJpbiB3aW5kb3cmJndpbmRvdy5jaHJvbWUsdD13aW5kb3cubmF2aWdhdG9yLnZlbmRvcjtyZXR1cm4gbnVsbCE9ZSYmXCJHb29nbGUgSW5jLlwiPT09dH0oKTtmdW5jdGlvbiB0byhlKXt2YXIgdCxuLHIsbyxhLGksbCxzLGMsdSxkLGYscCxoPSgwLHguYykoMTQpO3JldHVybiBoWzBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHQ9e21hc2tUeXBlOlwibHVtaW5hbmNlXCJ9LGhbMF09dCk6dD1oWzBdLGhbMV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8obj0oMCxBLmpzeCkoXCJtYXNrXCIse2lkOlwibm9kZWpzX2ljb25fbWFza19hXCIsc3R5bGU6dCxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIwXCIseTpcIjBcIix3aWR0aDpcIjE0XCIsaGVpZ2h0OlwiMTRcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJwYXRoXCIse2Q6XCJNNi42Ny4wODkgMS4yMDUgMy4yNTZhLjY2My42NjMgMCAwIDAtLjMzLjU3M3Y2LjMzOWMwIC4yMzcuMTI2LjQ1NS4zMy41NzRsNS40NjYgMy4xN2EuNjYuNjYgMCAwIDAgLjY2IDBsNS40NjUtMy4xN2EuNjY0LjY2NCAwIDAgMCAuMzI5LS41NzRWMy44MjlhLjY2My42NjMgMCAwIDAtLjMzLS41NzNMNy4zMy4wODlhLjY2My42NjMgMCAwIDAtLjY2MSAwXCIsZmlsbDpcIiNmZmZcIn0pfSksaFsxXT1uKTpuPWhbMV0saFsyXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhyPSgwLEEuanN4KShcImdcIix7bWFzazpcInVybCgjbm9kZWpzX2ljb25fbWFza19hKVwiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZDpcIk0xOC42NDggMi43MTcgMy4yNDgtNC44Ni00LjY0OCAxMS4zMWwxNS40IDcuNTggNy44OTYtMTYuMTc0elwiLGZpbGw6XCJ1cmwoI25vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9iKVwifSl9KSxoWzJdPXIpOnI9aFsyXSxoWzNdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KG89e21hc2tUeXBlOlwibHVtaW5hbmNlXCJ9LGhbM109byk6bz1oWzNdLGhbNF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oYT0oMCxBLmpzeCkoXCJtYXNrXCIse2lkOlwibm9kZWpzX2ljb25fbWFza19jXCIsc3R5bGU6byxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIxXCIseTpcIjBcIix3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTRcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJwYXRoXCIse2Q6XCJNMS4wMSAxMC41N2EuNjYzLjY2MyAwIDAgMCAuMTk1LjE3bDQuNjg4IDIuNzIuNzgxLjQ1YS42Ni42NiAwIDAgMCAuNTEuMDYzbDUuNzY0LTEwLjU5N2EuNjUzLjY1MyAwIDAgMC0uMTUzLS4xMjJMOS4yMTYgMS4xOCA3LjMyNS4wODdhLjY4OC42ODggMCAwIDAtLjE3MS0uMDdMMS4wMSAxMC41N3pcIixmaWxsOlwiI2ZmZlwifSl9KSxoWzRdPWEpOmE9aFs0XSxoWzVdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGk9KDAsQS5qc3gpKFwiZ1wiLHttYXNrOlwidXJsKCNub2RlanNfaWNvbl9tYXNrX2MpXCIsY2hpbGRyZW46KDAsQS5qc3gpKFwicGF0aFwiLHtkOlwiTS01LjY0NyA0Ljk1OCA1LjIyNiAxOS43MzRsMTQuMzgtMTAuNjY3TDguNzM0LTUuNzEtNS42NDcgNC45NTh6XCIsZmlsbDpcInVybCgjbm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2QpXCJ9KX0pLGhbNV09aSk6aT1oWzVdLGhbNl09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8obD17bWFza1R5cGU6XCJsdW1pbmFuY2VcIn0saFs2XT1sKTpsPWhbNl0saFs3XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhzPSgwLEEuanN4KShcIm1hc2tcIix7aWQ6XCJub2RlanNfaWNvbl9tYXNrX2VcIixzdHlsZTpsLG1hc2tVbml0czpcInVzZXJTcGFjZU9uVXNlXCIseDpcIjFcIix5OlwiMFwiLHdpZHRoOlwiMTNcIixoZWlnaHQ6XCIxNFwiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZDpcIk02LjkzNC4wMDRBLjY2NS42NjUgMCAwIDAgNi42Ny4wOUwxLjIyIDMuMjQ3bDUuODc3IDEwLjc0NmEuNjU1LjY1NSAwIDAgMCAuMjM1LS4wOGw1LjQ2NS0zLjE3YS42NjUuNjY1IDAgMCAwIC4zMTktLjQ1M0w3LjEyNi4wMTVhLjY4NC42ODQgMCAwIDAtLjE4OS0uMDFcIixmaWxsOlwiI2ZmZlwifSl9KSxoWzddPXMpOnM9aFs3XSxoWzhdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGM9KDAsQS5qc3hzKShcImdcIix7Y2hpbGRyZW46W3MsKDAsQS5qc3gpKFwiZ1wiLHttYXNrOlwidXJsKCNub2RlanNfaWNvbl9tYXNrX2UpXCIsY2hpbGRyZW46KDAsQS5qc3gpKFwicGF0aFwiLHtkOlwiTTEuMjIuMDAydjEzLjk5MmgxMS44OTRWLjAwMkgxLjIyelwiLGZpbGw6XCJ1cmwoI25vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9mKVwifSl9KV19KSxoWzhdPWMpOmM9aFs4XSxoWzldPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHU9KDAsQS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2JcIix4MTpcIjEwLjk0M1wiLHkxOlwiLTEuMDg0XCIseDI6XCIyLjk5N1wiLHkyOlwiMTUuMDYyXCIsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY2hpbGRyZW46WygwLEEuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjNcIixzdG9wQ29sb3I6XCIjM0U4NjNEXCJ9KSwoMCxBLmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi41XCIsc3RvcENvbG9yOlwiIzU1OTM0RlwifSksKDAsQS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuOFwiLHN0b3BDb2xvcjpcIiM1QUFENDVcIn0pXX0pLGhbOV09dSk6dT1oWzldLGhbMTBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGQ9KDAsQS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2RcIix4MTpcIi0uMTQ1XCIseTE6XCIxMi40MzFcIix4MjpcIjE0LjI3N1wiLHkyOlwiMS44MThcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAsQS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuNTdcIixzdG9wQ29sb3I6XCIjM0U4NjNEXCJ9KSwoMCxBLmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi43MlwiLHN0b3BDb2xvcjpcIiM2MTk4NTdcIn0pLCgwLEEuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMVwiLHN0b3BDb2xvcjpcIiM3NkFDNjRcIn0pXX0pLGhbMTBdPWQpOmQ9aFsxMF0saFsxMV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZj0oMCxBLmpzeHMpKFwiZGVmc1wiLHtjaGlsZHJlbjpbdSxkLCgwLEEuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcIm5vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9mXCIseDE6XCIxLjIyNVwiLHkxOlwiNi45OThcIix4MjpcIjEzLjExNlwiLHkyOlwiNi45OThcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAsQS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuMTZcIixzdG9wQ29sb3I6XCIjNkJCRjQ3XCJ9KSwoMCxBLmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi4zOFwiLHN0b3BDb2xvcjpcIiM3OUI0NjFcIn0pLCgwLEEuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjQ3XCIsc3RvcENvbG9yOlwiIzc1QUM2NFwifSksKDAsQS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuN1wiLHN0b3BDb2xvcjpcIiM2NTlFNUFcIn0pLCgwLEEuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjlcIixzdG9wQ29sb3I6XCIjM0U4NjNEXCJ9KV19KV19KSxoWzExXT1mKTpmPWhbMTFdLGhbMTJdIT09ZT8ocD0oMCxBLmpzeHMpKFwic3ZnXCIsdG4odHQoe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxNFwiLHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSkse2NoaWxkcmVuOltuLHIsYSxpLGMsZl19KSksaFsxMl09ZSxoWzEzXT1wKTpwPWhbMTNdLHB9ZnVuY3Rpb24gdGEoZSl7dmFyIHQsbixyLG8sYSxpLGwscyxjLHUsZCxmLHAsaD0oMCx4LmMpKDE0KTtyZXR1cm4gaFswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PXttYXNrVHlwZTpcImx1bWluYW5jZVwifSxoWzBdPXQpOnQ9aFswXSxoWzFdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KG49KDAsQS5qc3gpKFwibWFza1wiLHtpZDpcIm5vZGVqc19pY29uX21hc2tfYVwiLHN0eWxlOnQsbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIix4OlwiMFwiLHk6XCIwXCIsd2lkdGg6XCIxNFwiLGhlaWdodDpcIjE0XCIsY2hpbGRyZW46KDAsQS5qc3gpKFwicGF0aFwiLHtkOlwiTTYuNjcuMDg5IDEuMjA1IDMuMjU2YS42NjMuNjYzIDAgMCAwLS4zMy41NzN2Ni4zMzljMCAuMjM3LjEyNi40NTUuMzMuNTc0bDUuNDY2IDMuMTdhLjY2LjY2IDAgMCAwIC42NiAwbDUuNDY1LTMuMTdhLjY2NC42NjQgMCAwIDAgLjMyOS0uNTc0VjMuODI5YS42NjMuNjYzIDAgMCAwLS4zMy0uNTczTDcuMzMuMDg5YS42NjMuNjYzIDAgMCAwLS42NjEgMFwiLGZpbGw6XCIjZmZmXCJ9KX0pLGhbMV09bik6bj1oWzFdLGhbMl09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8ocj0oMCxBLmpzeCkoXCJnXCIse21hc2s6XCJ1cmwoI25vZGVqc19pY29uX21hc2tfYSlcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTguNjQ4IDIuNzE3IDMuMjQ4LTQuODYtNC42NDYgMTEuMzFsMTUuMzk5IDcuNTggNy44OTYtMTYuMTc0elwiLGZpbGw6XCJ1cmwoI25vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9iKVwifSl9KSxoWzJdPXIpOnI9aFsyXSxoWzNdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KG89e21hc2tUeXBlOlwibHVtaW5hbmNlXCJ9LGhbM109byk6bz1oWzNdLGhbNF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oYT0oMCxBLmpzeCkoXCJtYXNrXCIse2lkOlwibm9kZWpzX2ljb25fbWFza19jXCIsc3R5bGU6byxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIxXCIseTpcIjBcIix3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTVcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJwYXRoXCIse2Q6XCJNMS4wMSAxMC41NzFhLjY2LjY2IDAgMCAwIC4xOTUuMTcybDQuNjg4IDIuNzE4Ljc4MS40NTFhLjY2LjY2IDAgMCAwIC41MS4wNjNsNS43NjQtMTAuNTk3YS42NTMuNjUzIDAgMCAwLS4xNTMtLjEyMkw5LjIxNiAxLjE4MSA3LjMyNS4wOWEuNjg4LjY4OCAwIDAgMC0uMTcxLS4wN0wxLjAxIDEwLjU3MnpcIixmaWxsOlwiI2ZmZlwifSl9KSxoWzRdPWEpOmE9aFs0XSxoWzVdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGk9KDAsQS5qc3gpKFwiZ1wiLHttYXNrOlwidXJsKCNub2RlanNfaWNvbl9tYXNrX2MpXCIsY2hpbGRyZW46KDAsQS5qc3gpKFwicGF0aFwiLHtkOlwiTS01LjY0NyA0Ljk2IDUuMjI2IDE5LjczNiAxOS42MDYgOS4wNyA4LjczNC01LjcwNy01LjY0NyA0Ljk2elwiLGZpbGw6XCJ1cmwoI25vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9kKVwifSl9KSxoWzVdPWkpOmk9aFs1XSxoWzZdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGw9e21hc2tUeXBlOlwibHVtaW5hbmNlXCJ9LGhbNl09bCk6bD1oWzZdLGhbN109PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8ocz0oMCxBLmpzeCkoXCJtYXNrXCIse2lkOlwibm9kZWpzX2ljb25fbWFza19lXCIsc3R5bGU6bCxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIxXCIseTpcIjBcIix3aWR0aDpcIjEzXCIsaGVpZ2h0OlwiMTRcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJwYXRoXCIse2Q6XCJNNi45MzUuMDAzYS42NjUuNjY1IDAgMCAwLS4yNjQuMDg1bC01LjQ1IDMuMTU4IDUuODc3IDEwLjc0N2EuNjUzLjY1MyAwIDAgMCAuMjM1LS4wODJsNS40NjUtMy4xN2EuNjY1LjY2NSAwIDAgMCAuMzE5LS40NTJMNy4xMjcuMDE0YS42ODQuNjg0IDAgMCAwLS4xODktLjAxXCIsZmlsbDpcIiNmZmZcIn0pfSksaFs3XT1zKTpzPWhbN10saFs4XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhjPSgwLEEuanN4cykoXCJnXCIse2NoaWxkcmVuOltzLCgwLEEuanN4KShcImdcIix7bWFzazpcInVybCgjbm9kZWpzX2ljb25fbWFza19lKVwiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZDpcIk0xLjIyMi4wMDF2MTMuOTkyaDExLjg5M1YwSDEuMjIyelwiLGZpbGw6XCJ1cmwoI25vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9mKVwifSl9KV19KSxoWzhdPWMpOmM9aFs4XSxoWzldPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHU9KDAsQS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2JcIix4MTpcIjEwLjk0NFwiLHkxOlwiLTEuMDg0XCIseDI6XCIyLjk5N1wiLHkyOlwiMTUuMDYyXCIsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY2hpbGRyZW46WygwLEEuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjNcIixzdG9wQ29sb3I6XCIjNjc2NzY3XCJ9KSwoMCxBLmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi41XCIsc3RvcENvbG9yOlwiIzg1ODU4NVwifSksKDAsQS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuOFwiLHN0b3BDb2xvcjpcIiM5ODlBOThcIn0pXX0pLGhbOV09dSk6dT1oWzldLGhbMTBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGQ9KDAsQS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2RcIix4MTpcIi0uMTQ1XCIseTE6XCIxMi40MzNcIix4MjpcIjE0LjI3N1wiLHkyOlwiMS44MTlcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAsQS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuNTdcIixzdG9wQ29sb3I6XCIjNzQ3NDc0XCJ9KSwoMCxBLmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi43MlwiLHN0b3BDb2xvcjpcIiM3MDcwNzBcIn0pLCgwLEEuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMVwiLHN0b3BDb2xvcjpcIiM5MjkyOTJcIn0pXX0pLGhbMTBdPWQpOmQ9aFsxMF0saFsxMV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZj0oMCxBLmpzeHMpKFwiZGVmc1wiLHtjaGlsZHJlbjpbdSxkLCgwLEEuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcIm5vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9mXCIseDE6XCIxLjIyNlwiLHkxOlwiNi45OTdcIix4MjpcIjEzLjExN1wiLHkyOlwiNi45OTdcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAsQS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuMTZcIixzdG9wQ29sb3I6XCIjODc4Nzg3XCJ9KSwoMCxBLmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi4zOFwiLHN0b3BDb2xvcjpcIiNBOUE5QTlcIn0pLCgwLEEuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjQ3XCIsc3RvcENvbG9yOlwiI0E1QTVBNVwifSksKDAsQS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuN1wiLHN0b3BDb2xvcjpcIiM4RjhGOEZcIn0pLCgwLEEuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjlcIixzdG9wQ29sb3I6XCIjNjI2MjYyXCJ9KV19KV19KSxoWzExXT1mKTpmPWhbMTFdLGhbMTJdIT09ZT8ocD0oMCxBLmpzeHMpKFwic3ZnXCIsdG4odHQoe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxNFwiLHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSkse2NoaWxkcmVuOltuLHIsYSxpLGMsZl19KSksaFsxMl09ZSxoWzEzXT1wKTpwPWhbMTNdLHB9dmFyIHRpPVwiTGVhcm4gbW9yZSBhYm91dCBlbmFibGluZyBOb2RlLmpzIGluc3BlY3RvciBmb3Igc2VydmVyIGNvZGUgd2l0aCBDaHJvbWUgRGV2VG9vbHNcIjtmdW5jdGlvbiB0bChlKXt2YXIgdCxuLHIsbz0oMCx4LmMpKDQpLGE9ZS5kZXZ0b29sc0Zyb250ZW5kVXJsfHxcIlwiO3JldHVybiBhJiZ0cj8ob1sxXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhuPSgwLEEuanN4KSh0byx7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS10b29sYmFyLWJ1dHRvbi1pY29uXCIsd2lkdGg6MTQsaGVpZ2h0OjE0fSksb1sxXT1uKTpuPW9bMV0sb1syXSE9PWE/KHI9KDAsQS5qc3gpKGU4LHtcImRhdGEtbmV4dGpzLWRhdGEtcnVudGltZS1lcnJvci1jb3B5LWRldnRvb2xzLXVybFwiOiEwLGNsYXNzTmFtZTpcIm5vZGVqcy1pbnNwZWN0b3ItYnV0dG9uXCIsYWN0aW9uTGFiZWw6XCJDb3B5IENocm9tZSBEZXZUb29scyBVUkxcIixzdWNjZXNzTGFiZWw6XCJDb3BpZWRcIixjb250ZW50OmEsaWNvbjpufSksb1syXT1hLG9bM109cik6cj1vWzNdLHIpOihvWzBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHQ9KDAsQS5qc3gpKFwiYVwiLHt0aXRsZTp0aSxcImFyaWEtbGFiZWxcIjp0aSxjbGFzc05hbWU6XCJub2RlanMtaW5zcGVjdG9yLWJ1dHRvblwiLGhyZWY6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9jb25maWd1cmluZy9kZWJ1Z2dpbmcjc2VydmVyLXNpZGUtY29kZVwiLHRhcmdldDpcIl9ibGFua1wiLHJlbDpcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixjaGlsZHJlbjooMCxBLmpzeCkodGEse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktdG9vbGJhci1idXR0b24taWNvblwiLHdpZHRoOjE0LGhlaWdodDoxNH0pfSksb1swXT10KTp0PW9bMF0sdCl9ZnVuY3Rpb24gdHMoZSl7dmFyIHQsbj0oMCx4LmMpKDMpLHI9ZS5lcnJvcixvPWUuZ2VuZXJhdGVFcnJvckluZm8sYT0hcjtyZXR1cm4gblswXSE9PW98fG5bMV0hPT1hPyh0PSgwLEEuanN4KShlOCx7XCJkYXRhLW5leHRqcy1kYXRhLXJ1bnRpbWUtZXJyb3ItY29weS1zdGFja1wiOiEwLGNsYXNzTmFtZTpcImNvcHktZXJyb3ItYnV0dG9uXCIsYWN0aW9uTGFiZWw6XCJDb3B5IEVycm9yIEluZm9cIixzdWNjZXNzTGFiZWw6XCJFcnJvciBJbmZvIENvcGllZFwiLGdldENvbnRlbnQ6byxkaXNhYmxlZDphfSksblswXT1vLG5bMV09YSxuWzJdPXQpOnQ9blsyXSx0fWZ1bmN0aW9uIHRjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiB0dShlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfWZ1bmN0aW9uIHRkKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9ZnVuY3Rpb24gdGYoZSx0KXtyZXR1cm4gdHUoZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0obj1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2gobi52YWx1ZSksIXR8fGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsdCl8fHRoKGUsdCl8fHRkKCl9ZnVuY3Rpb24gdHAoZSl7cmV0dXJuIHR1KGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8dGgoZSl8fHRkKCl9ZnVuY3Rpb24gdGgoZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gdGMoZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uKXJldHVybiBBcnJheS5mcm9tKG4pO2lmKFwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gdGMoZSx0KX19dmFyIHRtPVwiaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9oeWRyYXRpb24tbWlzbWF0Y2hcIix0Zz1cImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3JlYWN0LWh5ZHJhdGlvbi1lcnJvclwiLHR5PVsvXkluIEhUTUwsICguKz8pIGNhbm5vdCBiZSBhIGNoaWxkIG9mIDwoLis/KT5cXC4oLiopXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yXFwuKC4qKS8sL15JbiBIVE1MLCAoLis/KSBjYW5ub3QgYmUgYSBkZXNjZW5kYW50IG9mIDwoLis/KT5cXC5cXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3JcXC4oLiopLywvXkluIEhUTUwsIHRleHQgbm9kZXMgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCguKz8pPlxcLlxcblRoaXMgd2lsbCBjYXVzZSBhIGh5ZHJhdGlvbiBlcnJvclxcLi8sL15JbiBIVE1MLCB3aGl0ZXNwYWNlIHRleHQgbm9kZXMgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCguKz8pPlxcLiBNYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgYW55IGV4dHJhIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIG9uIGVhY2ggbGluZSBvZiB5b3VyIHNvdXJjZSBjb2RlXFwuXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yXFwuL107ZnVuY3Rpb24gdHYoZSl7cmV0dXJuIHR5LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQudGVzdChlKX0pfXZhciB0Yj1bXCJodHRwczovL25leHRqcy5vcmdcIixcImh0dHBzOi8vcmVhY3QuZGV2XCJdO2Z1bmN0aW9uIHRBKGUpe3JldHVybiB0Yi5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBlLnN0YXJ0c1dpdGgodCl9KX1mdW5jdGlvbiB0eChlKXt2YXIgdCxuLHIsbyxhPSgwLHguYykoNiksaT1lLmVycm9yTWVzc2FnZTthWzBdIT09aT8odD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbz0odD1lLG49dEEscj1BcnJheS5mcm9tKHQubWF0Y2hBbGwoL2h0dHBzPzpcXC9cXC9bXlxccy8kLj8jXS5bXlxccyknXCJdKi9naSksZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19KSxuP3IuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBuKGUpfSk6cik7aWYoMD09PW8ubGVuZ3RoKXJldHVybiBudWxsO3ZhciBhPW9bMF07cmV0dXJuIGE9PT10bT90ZzphfShpKSxhWzBdPWksYVsxXT10KTp0PWFbMV07dmFyIGw9dDtyZXR1cm4gbD8oYVszXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhyPSgwLEEuanN4KSh0dyx7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS10b29sYmFyLWJ1dHRvbi1pY29uXCIsd2lkdGg6MTQsaGVpZ2h0OjE0fSksYVszXT1yKTpyPWFbM10sYVs0XSE9PWw/KG89KDAsQS5qc3gpKFwiYVwiLHt0aXRsZTpcIkdvIHRvIHJlbGF0ZWQgZG9jdW1lbnRhdGlvblwiLFwiYXJpYS1sYWJlbFwiOlwiR28gdG8gcmVsYXRlZCBkb2N1bWVudGF0aW9uXCIsY2xhc3NOYW1lOlwiZG9jcy1saW5rLWJ1dHRvblwiLGhyZWY6bCx0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsY2hpbGRyZW46cn0pLGFbNF09bCxhWzVdPW8pOm89YVs1XSxvKTooYVsyXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhuPSgwLEEuanN4KShcImJ1dHRvblwiLHt0aXRsZTpcIk5vIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBmb3VuZFwiLFwiYXJpYS1sYWJlbFwiOlwiTm8gcmVsYXRlZCBkb2N1bWVudGF0aW9uIGZvdW5kXCIsY2xhc3NOYW1lOlwiZG9jcy1saW5rLWJ1dHRvblwiLGRpc2FibGVkOiEwLGNoaWxkcmVuOigwLEEuanN4KSh0dyx7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS10b29sYmFyLWJ1dHRvbi1pY29uXCIsd2lkdGg6MTQsaGVpZ2h0OjE0fSl9KSxhWzJdPW4pOm49YVsyXSxuKX1mdW5jdGlvbiB0dyhlKXt2YXIgdCxuLHIsbyxhPSgwLHguYykoMyk7cmV0dXJuKGFbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8ocj0oMCxBLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMCAuODc1aDQuMzc1QzUuNDQ4Ljg3NSA2LjQwMSAxLjM5IDcgMi4xODdBMy4yNzYgMy4yNzYgMCAwIDEgOS42MjUuODc1SDE0djExLjE1Nkg5LjRjLS41MjIgMC0xLjAyMy4yMDgtMS4zOTIuNTc3bC0uNTQ0LjU0M2gtLjkyOGwtLjU0NC0uNTQzYy0uMzY5LS4zNy0uODctLjU3Ny0xLjM5Mi0uNTc3SDBWLjg3NXptNi4zNDQgMy4yODFhMS45NjkgMS45NjkgMCAwIDAtMS45NjktMS45NjhIMS4zMTJ2OC41M0g0LjZjLjYyMiAwIDEuMjI1LjE3NyAxLjc0NC41MDJWNC4xNTZ6bTEuMzEyIDcuMDY0VjQuMTU2YzAtMS4wODcuODgyLTEuOTY4IDEuOTY5LTEuOTY4aDMuMDYzdjguNTNIOS40Yy0uNjIyIDAtMS4yMjUuMTc3LTEuNzQ0LjUwMnpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSxhWzBdPXIpOnI9YVswXSxhWzFdIT09ZSk/KG89KDAsQS5qc3gpKFwic3ZnXCIsKHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7d2lkdGg6XCIxNFwiLGhlaWdodDpcIjE0XCIsdmlld0JveDpcIjAgMCAxNCAxNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxuPW49e2NoaWxkcmVuOnJ9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSksdCkpLGFbMV09ZSxhWzJdPW8pOm89YVsyXSxvfWZ1bmN0aW9uIHRDKGUpe3ZhciB0LG4scixvLGE9KDAseC5jKSgxMiksaT1lLmVycm9yLGw9ZS5kZWJ1Z0luZm8scz1lLmZlZWRiYWNrQnV0dG9uLGM9ZS5nZW5lcmF0ZUVycm9ySW5mbzthWzBdIT09aXx8YVsxXSE9PWM/KHQ9KDAsQS5qc3gpKHRzLHtlcnJvcjppLGdlbmVyYXRlRXJyb3JJbmZvOmN9KSxhWzBdPWksYVsxXT1jLGFbMl09dCk6dD1hWzJdLGFbM10hPT1pLm1lc3NhZ2U/KG49KDAsQS5qc3gpKHR4LHtlcnJvck1lc3NhZ2U6aS5tZXNzYWdlfSksYVszXT1pLm1lc3NhZ2UsYVs0XT1uKTpuPWFbNF07dmFyIHU9bnVsbD09bD92b2lkIDA6bC5kZXZ0b29sc0Zyb250ZW5kVXJsO3JldHVybiBhWzVdIT09dT8ocj0oMCxBLmpzeCkodGwse2RldnRvb2xzRnJvbnRlbmRVcmw6dX0pLGFbNV09dSxhWzZdPXIpOnI9YVs2XSxhWzddIT09c3x8YVs4XSE9PXR8fGFbOV0hPT1ufHxhWzEwXSE9PXI/KG89KDAsQS5qc3hzKShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS10b29sYmFyXCIsY2hpbGRyZW46W3MsdCxuLHJdfSksYVs3XT1zLGFbOF09dCxhWzldPW4sYVsxMF09cixhWzExXT1vKTpvPWFbMTFdLG99ZnVuY3Rpb24gdF8oZSl7dmFyIHQsbixyLG8sYT0oMCx4LmMpKDMpO3JldHVybihhWzBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHI9KDAsQS5qc3gpKFwiZ1wiLHtpZDpcInRodW1iLXVwLTE2XCIsY2hpbGRyZW46KDAsQS5qc3gpKFwicGF0aFwiLHtpZDpcIlVuaW9uXCIsZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk02Ljg5NTMxIDIuMjM5NTlDNi43Mjk4NCAyLjEyMTQgNi41IDIuMjM5NjggNi41IDIuNDQzMDNWNS4yNDk4OUM2LjUgNi4yMTYzOSA1LjcxNjUgNi45OTk4OSA0Ljc1IDYuOTk5ODlIMi41VjEzLjQ5OTlIMTIuMTg4NEMxMi43NjIgMTMuNDk5OSAxMy4yNjIgMTMuMTA5NSAxMy40MDExIDEyLjU1MzFMMTQuNDAxMSA4LjU1MzA2QzE0LjU5ODQgNy43NjQxMiAxNC4wMDE3IDYuOTk5ODkgMTMuMTg4NCA2Ljk5OTg5SDkuMjVIOC41VjYuMjQ5ODlWMy41MTQ0NkM4LjUgMy40MzM3MiA4LjQ2MTAxIDMuMzU3OTUgOC4zOTUzMSAzLjMxMTAyTDYuODk1MzEgMi4yMzk1OVpNNSAyLjQ0MzAzQzUgMS4wMTk2MyA2LjYwODkgMC4xOTE2NTYgNy43NjcxNyAxLjAxODk5TDkuMjY3MTcgMi4wOTA0MkM5LjcyNzA2IDIuNDE4OTIgMTAgMi45NDkyOSAxMCAzLjUxNDQ2VjUuNDk5ODlIMTMuMTg4NEMxNC45Nzc1IDUuNDk5ODkgMTYuMjkwMyA3LjE4MTIxIDE1Ljg1NjMgOC45MTY4NkwxNC44NTYzIDEyLjkxNjlDMTQuNTUwMyAxNC4xNDExIDEzLjQ1MDMgMTQuOTk5OSAxMi4xODg0IDE0Ljk5OTlIMS43NUgxVjE0LjI0OTlWNi4yNDk4OVY1LjQ5OTg5SDEuNzVINC43NUM0Ljg4ODA3IDUuNDk5ODkgNSA1LjM4Nzk2IDUgNS4yNDk4OVYyLjQ0MzAzWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSksYVswXT1yKTpyPWFbMF0sYVsxXSE9PWUpPyhvPSgwLEEuanN4KShcInN2Z1wiLCh0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjbGFzc05hbWU6XCJ0aHVtYnMtdXAtaWNvblwifSxlKSxuPW49e2NoaWxkcmVuOnJ9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSksdCkpLGFbMV09ZSxhWzJdPW8pOm89YVsyXSxvfWZ1bmN0aW9uIHRrKGUpe3ZhciB0LG4scixvLGE9KDAseC5jKSgzKTtyZXR1cm4oYVswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhyPSgwLEEuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk01Ljg5NTMxIDEyLjc2MDNDNS43Mjk4NCAxMi44Nzg1IDUuNSAxMi43NjAyIDUuNSAxMi41NTY5VjkuNzVDNS41IDguNzgzNSA0LjcxNjUgOCAzLjc1IDhIMS41VjEuNUgxMS4xODg0QzExLjc2MiAxLjUgMTIuMjYyIDEuODkwMzcgMTIuNDAxMSAyLjQ0NjgzTDEzLjQwMTEgNi40NDY4M0MxMy41OTg0IDcuMjM1NzYgMTMuMDAxNyA4IDEyLjE4ODQgOEg4LjI1SDcuNVY4Ljc1VjExLjQ4NTRDNy41IDExLjU2NjIgNy40NjEwMSAxMS42NDE5IDcuMzk1MzEgMTEuNjg4OUw1Ljg5NTMxIDEyLjc2MDNaTTQgMTIuNTU2OUM0IDEzLjk4MDMgNS42MDg5IDE0LjgwODIgNi43NjcxNyAxMy45ODA5TDguMjY3MTcgMTIuOTA5NUM4LjcyNzA2IDEyLjU4MSA5IDEyLjA1MDYgOSAxMS40ODU0VjkuNUgxMi4xODg0QzEzLjk3NzUgOS41IDE1LjI5MDMgNy44MTg2OCAxNC44NTYzIDYuMDgzMDNMMTMuODU2MyAyLjA4MzAzQzEzLjU1MDMgMC44NTg4MTYgMTIuNDUwMyAwIDExLjE4ODQgMEgwLjc1SDBWMC43NVY4Ljc1VjkuNUgwLjc1SDMuNzVDMy44ODgwNyA5LjUgNCA5LjYxMTkzIDQgOS43NVYxMi41NTY5WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pLGFbMF09cik6cj1hWzBdLGFbMV0hPT1lKT8obz0oMCxBLmpzeCkoXCJzdmdcIiwodD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9ZSxvPXQsYT1uW3RdLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2xhc3NOYW1lOlwidGh1bWJzLWRvd24taWNvblwifSxlKSxuPW49e2NoaWxkcmVuOnJ9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSksdCkpLGFbMV09ZSxhWzJdPW8pOm89YVsyXSxvfWZ1bmN0aW9uIHRFKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiB0aihlLHQsbixyLG8sYSxpKXt0cnl7dmFyIGw9ZVthXShpKSxzPWwudmFsdWV9Y2F0Y2goZSl7bihlKTtyZXR1cm59bC5kb25lP3Qocyk6UHJvbWlzZS5yZXNvbHZlKHMpLnRoZW4ocixvKX1mdW5jdGlvbiB0UyhlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gdE8oZSl7dmFyIHQsbixyPWUuZXJyb3JDb2RlLG89ZS5jbGFzc05hbWUsYT0odD0oMCx3LnVzZVN0YXRlKSh7fSksbj0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHQpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KHQsMil8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHRFKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIHRFKGUsdCl9fSh0LG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxpPWFbMF0sbD1hWzFdLHM9aVtyXSxjPXByb2Nlc3MuZW52Ll9fTkVYVF9URUxFTUVUUllfRElTQUJMRUQsdT0oMCx3LnVzZUNhbGxiYWNrKShmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4odD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LGk9T2JqZWN0LmNyZWF0ZSgoXCJmdW5jdGlvblwiPT10eXBlb2YgSXRlcmF0b3I/SXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpO3JldHVybiBpLm5leHQ9bCgwKSxpLnRocm93PWwoMSksaS5yZXR1cm49bCgyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gbChsKXtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGM9W2wsc107aWYobil0aHJvdyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7aSYmKGk9MCxjWzBdJiYoYT0wKSksYTspdHJ5e2lmKG49MSxyJiYobz0yJmNbMF0/ci5yZXR1cm46Y1swXT9yLnRocm93fHwoKG89ci5yZXR1cm4pJiZvLmNhbGwociksMCk6ci5uZXh0KSYmIShvPW8uY2FsbChyLGNbMV0pKS5kb25lKXJldHVybiBvO3N3aXRjaChyPTAsbyYmKGM9WzImY1swXSxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoNj09PWNbMF18fDI9PT1jWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1jWzBdJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7YS5sYWJlbD1jWzFdO2JyZWFrfWlmKDY9PT1jWzBdJiZhLmxhYmVsPG9bMV0pe2EubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmYS5sYWJlbDxvWzJdKXthLmxhYmVsPW9bMl0sYS5vcHMucHVzaChjKTticmVha31vWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9Yz10LmNhbGwoZSxhKX1jYXRjaChlKXtjPVs2LGVdLHI9MH1maW5hbGx5e249bz0wfWlmKDUmY1swXSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX19KHRoaXMsZnVuY3Rpb24odCl7c3dpdGNoKHQubGFiZWwpe2Nhc2UgMDpsKGZ1bmN0aW9uKHQpe3ZhciBuLG87cmV0dXJuIG49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RTKGUsdCxuW3RdKX0pfXJldHVybiBlfSh7fSx0KSxvPW51bGwhPShvPXRTKHt9LHIsZSkpP286e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvKSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdChvKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobyxlKSl9KSxufSksdC5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gdC50cnlzLnB1c2goWzEsMywsNF0pLFs0LGZldGNoKFwiXCIuY29uY2F0KHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEh8fFwiXCIsXCIvX19uZXh0anNfZXJyb3JfZmVlZGJhY2s/XCIpLmNvbmNhdChuZXcgVVJMU2VhcmNoUGFyYW1zKHtlcnJvckNvZGU6cix3YXNIZWxwZnVsOmUudG9TdHJpbmcoKX0pKSldO2Nhc2UgMjpyZXR1cm4gdC5zZW50KCkub2t8fGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcmVjb3JkIGZlZWRiYWNrIG9uIHRoZSBzZXJ2ZXIuXCIpLFszLDRdO2Nhc2UgMzpyZXR1cm4gY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byByZWNvcmQgZmVlZGJhY2s6XCIsdC5zZW50KCkpLFszLDRdO2Nhc2UgNDpyZXR1cm5bMl19fSl9LGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt2YXIgYT10LmFwcGx5KGUsbik7ZnVuY3Rpb24gaShlKXt0aihhLHIsbyxpLGwsXCJuZXh0XCIsZSl9ZnVuY3Rpb24gbChlKXt0aihhLHIsbyxpLGwsXCJ0aHJvd1wiLGUpfWkodm9pZCAwKX0pfSkoKX0sW3JdKTtyZXR1cm4oMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOmVKKFwiZXJyb3ItZmVlZGJhY2tcIixvKSxyb2xlOlwicmVnaW9uXCIsXCJhcmlhLWxhYmVsXCI6XCJFcnJvciBmZWVkYmFja1wiLGNoaWxkcmVuOnZvaWQgMCE9PXM/KDAsQS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJlcnJvci1mZWVkYmFjay10aGFua3NcIixyb2xlOlwic3RhdHVzXCIsXCJhcmlhLWxpdmVcIjpcInBvbGl0ZVwiLGNoaWxkcmVuOlwiVGhhbmtzIGZvciB5b3VyIGZlZWRiYWNrIVwifSk6KDAsQS5qc3hzKShBLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsQS5qc3gpKFwicFwiLHtjaGlsZHJlbjooMCxBLmpzeCkoXCJhXCIse2hyZWY6XCJodHRwczovL25leHRqcy5vcmcvdGVsZW1ldHJ5I2Vycm9yLWZlZWRiYWNrXCIscmVsOlwibm9vcGVuZXIgbm9yZWZlcnJlclwiLHRhcmdldDpcIl9ibGFua1wiLGNoaWxkcmVuOlwiV2FzIHRoaXMgaGVscGZ1bD9cIn0pfSksKDAsQS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1kaXNhYmxlZFwiOmM/XCJ0cnVlXCI6dm9pZCAwLFwiYXJpYS1sYWJlbFwiOlwiTWFyayBhcyBoZWxwZnVsXCIsb25DbGljazpjP3ZvaWQgMDpmdW5jdGlvbigpe3JldHVybiB1KCEwKX0sY2xhc3NOYW1lOmVKKFwiZmVlZGJhY2stYnV0dG9uXCIsITA9PT1zJiZcInZvdGVkXCIpLHRpdGxlOmM/XCJGZWVkYmFjayBkaXNhYmxlZCBkdWUgdG8gc2V0dGluZyBORVhUX1RFTEVNRVRSWV9ESVNBQkxFRFwiOnZvaWQgMCx0eXBlOlwiYnV0dG9uXCIsY2hpbGRyZW46KDAsQS5qc3gpKHRfLHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9KX0pLCgwLEEuanN4KShcImJ1dHRvblwiLHtcImFyaWEtZGlzYWJsZWRcIjpjP1widHJ1ZVwiOnZvaWQgMCxcImFyaWEtbGFiZWxcIjpcIk1hcmsgYXMgbm90IGhlbHBmdWxcIixvbkNsaWNrOmM/dm9pZCAwOmZ1bmN0aW9uKCl7cmV0dXJuIHUoITEpfSxjbGFzc05hbWU6ZUooXCJmZWVkYmFjay1idXR0b25cIiwhMT09PXMmJlwidm90ZWRcIiksdGl0bGU6Yz9cIkZlZWRiYWNrIGRpc2FibGVkIGR1ZSB0byBzZXR0aW5nIE5FWFRfVEVMRU1FVFJZX0RJU0FCTEVEXCI6dm9pZCAwLHR5cGU6XCJidXR0b25cIixjaGlsZHJlbjooMCxBLmpzeCkodGsse1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIixzdHlsZTp7dHJhbnNsYXRlOlwiMXB4IDFweFwifX0pfSldfSl9KX1mdW5jdGlvbiB0QihlKXt2YXIgdCxuLHI9KDAseC5jKSg0KSxvPWUuZXJyb3JDb2RlO3JldHVybiByWzBdIT09bz8odD1vPygwLEEuanN4KSh0Tyx7Y2xhc3NOYW1lOlwiZXJyb3ItZmVlZGJhY2tcIixlcnJvckNvZGU6b30pOm51bGwsclswXT1vLHJbMV09dCk6dD1yWzFdLHJbMl0hPT10PyhuPSgwLEEuanN4KShcImZvb3RlclwiLHtcImRhdGEtbmV4dGpzLWVycm9yLW92ZXJsYXktZm9vdGVyXCI6ITAsY2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1mb290ZXJcIixjaGlsZHJlbjp0fSksclsyXT10LHJbM109bik6bj1yWzNdLG59dmFyIHRQPVwiXFxuICAuZXJyb3Itb3ZlcmxheS1mb290ZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuXFxuICAgIGdhcDogOHB4O1xcbiAgICBwYWRkaW5nOiAxMnB4O1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICB9XFxuXFxuICAuZXJyb3ItZmVlZGJhY2sge1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG5cXG4gICAgcCB7XFxuICAgICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICAgIG1hcmdpbjogMDtcXG4gICAgfVxcbiAgfVxcblxcbiAgXCIuY29uY2F0KFwiXFxuICAuZXJyb3ItZmVlZGJhY2sge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDhweDtcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gIH1cXG5cXG4gIC5lcnJvci1mZWVkYmFjay10aGFua3Mge1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjQpO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7IC8qIFRvIG1hdGNoIHRoZSA0cHggaW5uZXIgcGFkZGluZyBvZiB0aGUgdGh1bWJzIHVwIGFuZCBkb3duIGljb25zICovXFxuICB9XFxuXFxuICAuZmVlZGJhY2stYnV0dG9uIHtcXG4gICAgYmFja2dyb3VuZDogbm9uZTtcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kKTtcXG4gICAgd2lkdGg6IHZhcigtLXNpemUtMjQpO1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjQpO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcblxcbiAgICAmOmZvY3VzIHtcXG4gICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgfVxcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTEwMCk7XFxuICAgIH1cXG5cXG4gICAgJjphY3RpdmUge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktYWxwaGEtMjAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmZlZWRiYWNrLWJ1dHRvblthcmlhLWRpc2FibGVkPSd0cnVlJ10ge1xcbiAgICBvcGFjaXR5OiAwLjc7XFxuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICB9XFxuXFxuICAuZmVlZGJhY2stYnV0dG9uLnZvdGVkIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS1hbHBoYS0yMDApO1xcbiAgfVxcblxcbiAgLnRodW1icy11cC1pY29uLFxcbiAgLnRodW1icy1kb3duLWljb24ge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuICB9XFxuXCIsXCJcXG5cIik7ZnVuY3Rpb24gdEkoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIHRUKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLCF0fHxhLmxlbmd0aCE9PXQpO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLHQpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB0SShlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4pcmV0dXJuIEFycmF5LmZyb20obik7aWYoXCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiB0SShlLHQpfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiB0eihlKXt2YXIgdCxuLHIsbyxhLGk9KDAseC5jKSgxMiksbD1lLmVycm9yTWVzc2FnZSxzPXRUKCgwLHcudXNlU3RhdGUpKCExKSwyKSxjPXNbMF0sdT1zWzFdLGQ9dFQoKDAsdy51c2VTdGF0ZSkoITEpLDIpLGY9ZFswXSxwPWRbMV0saD0oMCx3LnVzZVJlZikobnVsbCk7aVswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PWZ1bmN0aW9uKCl7aC5jdXJyZW50JiZwKGguY3VycmVudC5zY3JvbGxIZWlnaHQ+MjAwKX0saVswXT10KTp0PWlbMF0saVsxXSE9PWw/KG49W2xdLGlbMV09bCxpWzJdPW4pOm49aVsyXSwoMCx3LnVzZUxheW91dEVmZmVjdCkodCxuKTt2YXIgbT1cIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19kZXNjIFwiLmNvbmNhdChmJiYhYz9cInRydW5jYXRlZFwiOlwiXCIpO3JldHVybiBpWzNdIT09bHx8aVs0XSE9PW0/KHI9KDAsQS5qc3gpKFwicFwiLHtyZWY6aCxpZDpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19kZXNjXCIsY2xhc3NOYW1lOm0sY2hpbGRyZW46bH0pLGlbM109bCxpWzRdPW0saVs1XT1yKTpyPWlbNV0saVs2XSE9PWN8fGlbN10hPT1mPyhvPWYmJiFjJiYoMCxBLmpzeHMpKEEuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2dyYWRpZW50X292ZXJsYXlcIn0pLCgwLEEuanN4KShcImJ1dHRvblwiLHtvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHUoITApfSxjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZXhwYW5kX2J1dHRvblwiLFwiYXJpYS1leHBhbmRlZFwiOmMsXCJhcmlhLWNvbnRyb2xzXCI6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZGVzY1wiLGNoaWxkcmVuOlwiU2hvdyBNb3JlXCJ9KV19KSxpWzZdPWMsaVs3XT1mLGlbOF09byk6bz1pWzhdLGlbOV0hPT1yfHxpWzEwXSE9PW8/KGE9KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfd3JhcHBlclwiLGNoaWxkcmVuOltyLG9dfSksaVs5XT1yLGlbMTBdPW8saVsxMV09YSk6YT1pWzExXSxhfWZ1bmN0aW9uIHREKGUpe3ZhciB0LG49KDAseC5jKSgyKSxyPWUuZXJyb3JUeXBlO3JldHVybiBuWzBdIT09cj8odD0oMCxBLmpzeCkoXCJzcGFuXCIse2lkOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2xhYmVsXCIsY2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2xhYmVsXCIsY2hpbGRyZW46cn0pLG5bMF09cixuWzFdPXQpOnQ9blsxXSx0fWZ1bmN0aW9uIHRMKGUpe3ZhciB0LG4scj0oMCx4LmMpKDQpLG89ZS50aXRsZSxhPWUuY2xhc3NOYW1lO3JldHVybiByWzBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHQ9KDAsQS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTkuMjQ5OTYgMTIuMDYwOEw4LjcxOTYzIDExLjUzMDRMNS44OTY0MSA4LjcwNzIyQzUuNTA1ODggOC4zMTY3IDUuNTA1ODggNy42ODM1MyA1Ljg5NjQxIDcuMjkzMDFMOC43MTk2MyA0LjQ2OTc4TDkuMjQ5OTYgMy45Mzk0NUwxMC4zMTA2IDUuMDAwMTFMOS43ODAyOSA1LjUzMDQ0TDcuMzEwNjIgOC4wMDAxMUw5Ljc4MDI5IDEwLjQ2OThMMTAuMzEwNiAxMS4wMDAxTDkuMjQ5OTYgMTIuMDYwOFpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSxyWzBdPXQpOnQ9clswXSxyWzFdIT09YXx8clsyXSE9PW8/KG49KDAsQS5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImFyaWEtbGFiZWxcIjpvLGNsYXNzTmFtZTphLGNoaWxkcmVuOnR9KSxyWzFdPWEsclsyXT1vLHJbM109bik6bj1yWzNdLG59ZnVuY3Rpb24gdE4oZSl7dmFyIHQsbixyPSgwLHguYykoNCksbz1lLnRpdGxlLGE9ZS5jbGFzc05hbWU7cmV0dXJuIHJbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8odD0oMCxBLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNi43NTAxMSAzLjkzOTQ1TDcuMjgwNDQgNC40Njk3OEwxMC4xMDM3IDcuMjkzMDFDMTAuNDk0MiA3LjY4MzUzIDEwLjQ5NDIgOC4zMTY3IDEwLjEwMzcgOC43MDcyMkw3LjI4MDQ0IDExLjUzMDRMNi43NTAxMSAxMi4wNjA4TDUuNjg5NDUgMTEuMDAwMUw2LjIxOTc4IDEwLjQ2OThMOC42ODk0NSA4LjAwMDExTDYuMjE5NzggNS41MzA0NEw1LjY4OTQ1IDUuMDAwMTFMNi43NTAxMSAzLjkzOTQ1WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pLHJbMF09dCk6dD1yWzBdLHJbMV0hPT1hfHxyWzJdIT09bz8obj0oMCxBLmpzeCkoXCJzdmdcIix7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNsYXNzTmFtZTphLFwiYXJpYS1sYWJlbFwiOm8sY2hpbGRyZW46dH0pLHJbMV09YSxyWzJdPW8sclszXT1uKTpuPXJbM10sbn1mdW5jdGlvbiB0UihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gdE0oZSl7dmFyIHQsbixyLG8sYSxpLGwscyxjLHUsZCxmLHAsaCxtLGcseSx2PSgwLHguYykoNDApLGI9ZS5ydW50aW1lRXJyb3JzLEM9ZS5hY3RpdmVJZHgsXz1lLm9uQWN0aXZlSW5kZXhDaGFuZ2U7dlswXSE9PUN8fHZbMV0hPT1fPyhyPWZ1bmN0aW9uKCl7cmV0dXJuKDAsdy5zdGFydFRyYW5zaXRpb24pKGZ1bmN0aW9uKCl7Qz4wJiZfKE1hdGgubWF4KDAsQy0xKSl9KX0sdlswXT1DLHZbMV09Xyx2WzJdPXIpOnI9dlsyXTt2YXIgaz1yO3ZbM10hPT1DfHx2WzRdIT09X3x8dls1XSE9PWIubGVuZ3RoPyhvPWZ1bmN0aW9uKCl7cmV0dXJuKDAsdy5zdGFydFRyYW5zaXRpb24pKGZ1bmN0aW9uKCl7QzxiLmxlbmd0aC0xJiZfKE1hdGgubWF4KDAsTWF0aC5taW4oYi5sZW5ndGgtMSxDKzEpKSl9KX0sdlszXT1DLHZbNF09Xyx2WzVdPWIubGVuZ3RoLHZbNl09byk6bz12WzZdO3ZhciBFPW8saj0oMCx3LnVzZVJlZikobnVsbCksUz0oMCx3LnVzZVJlZikobnVsbCksTz0odD0oMCx3LnVzZVN0YXRlKShudWxsKSxuPTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0odCl8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0obj1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2gobi52YWx1ZSksYS5sZW5ndGghPT10KTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0odCwyKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gdFIoZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uKXJldHVybiBBcnJheS5mcm9tKG4pO2lmKFwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gdFIoZSx0KX19KHQsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLEI9T1swXSxQPU9bMV07dls3XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhhPWZ1bmN0aW9uKGUpe1AoZSl9LHZbN109YSk6YT12WzddO3ZhciBJPWE7dls4XSE9PUV8fHZbOV0hPT1rfHx2WzEwXSE9PUI/KGk9ZnVuY3Rpb24oKXtpZihudWxsIT1CKXt2YXIgZT1CLmdldFJvb3ROb2RlKCksdD1zZWxmLmRvY3VtZW50LG49ZnVuY3Rpb24oZSl7XCJBcnJvd0xlZnRcIj09PWUua2V5PyhlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxrJiZrKCkpOlwiQXJyb3dSaWdodFwiPT09ZS5rZXkmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxFJiZFKCkpfTtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLG4pLGUhPT10JiZ0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsbiksZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsbiksZSE9PXQmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixuKX19fSxsPVtCLEUsa10sdls4XT1FLHZbOV09ayx2WzEwXT1CLHZbMTFdPWksdlsxMl09bCk6KGk9dlsxMV0sbD12WzEyXSksKDAsdy51c2VFZmZlY3QpKGksbCksdlsxM10hPT1DfHx2WzE0XSE9PUJ8fHZbMTVdIT09Yi5sZW5ndGg/KHM9ZnVuY3Rpb24oKXtpZihudWxsIT1CKXt2YXIgZSx0LG49Qi5nZXRSb290Tm9kZSgpO2lmKGU9bixudWxsIT0odD1TaGFkb3dSb290KSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaGFzSW5zdGFuY2VdPyEhdFtTeW1ib2wuaGFzSW5zdGFuY2VdKGUpOmUgaW5zdGFuY2VvZiB0KXt2YXIgcj1uLmFjdGl2ZUVsZW1lbnQ7MD09PUM/ai5jdXJyZW50JiZyPT09ai5jdXJyZW50JiZqLmN1cnJlbnQuYmx1cigpOkM9PT1iLmxlbmd0aC0xJiZTLmN1cnJlbnQmJnI9PT1TLmN1cnJlbnQmJlMuY3VycmVudC5ibHVyKCl9fX0sYz1bQixDLGIubGVuZ3RoXSx2WzEzXT1DLHZbMTRdPUIsdlsxNV09Yi5sZW5ndGgsdlsxNl09cyx2WzE3XT1jKToocz12WzE2XSxjPXZbMTddKSwoMCx3LnVzZUVmZmVjdCkocyxjKTt2YXIgVD0wPT09Qyx6PTA9PT1DO3ZbMThdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHU9KDAsQS5qc3gpKHRMLHt0aXRsZTpcInByZXZpb3VzXCIsY2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1wYWdpbmF0aW9uLWJ1dHRvbi1pY29uXCJ9KSx2WzE4XT11KTp1PXZbMThdLHZbMTldIT09a3x8dlsyMF0hPT1UfHx2WzIxXSE9PXo/KGQ9KDAsQS5qc3gpKFwiYnV0dG9uXCIse3JlZjpqLHR5cGU6XCJidXR0b25cIixkaXNhYmxlZDpULFwiYXJpYS1kaXNhYmxlZFwiOnosb25DbGljazprLFwiZGF0YS1uZXh0anMtZGlhbG9nLWVycm9yLXByZXZpb3VzXCI6ITAsY2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1wYWdpbmF0aW9uLWJ1dHRvblwiLGNoaWxkcmVuOnV9KSx2WzE5XT1rLHZbMjBdPVQsdlsyMV09eix2WzIyXT1kKTpkPXZbMjJdO3ZhciBEPUMrMTt2WzIzXSE9PUN8fHZbMjRdIT09RD8oZj0oMCxBLmpzeHMpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWRpYWxvZy1lcnJvci1pbmRleFwiOkMsY2hpbGRyZW46W0QsXCIvXCJdfSksdlsyM109Qyx2WzI0XT1ELHZbMjVdPWYpOmY9dlsyNV07dmFyIEw9Yi5sZW5ndGh8fDE7dlsyNl0hPT1MPyhwPSgwLEEuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1kaWFsb2ctaGVhZGVyLXRvdGFsLWNvdW50XCI6ITAsY2hpbGRyZW46TH0pLHZbMjZdPUwsdlsyN109cCk6cD12WzI3XSx2WzI4XSE9PWZ8fHZbMjldIT09cD8oaD0oMCxBLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktcGFnaW5hdGlvbi1jb3VudFwiLGNoaWxkcmVuOltmLHBdfSksdlsyOF09Zix2WzI5XT1wLHZbMzBdPWgpOmg9dlszMF07dmFyIE49Qz49Yi5sZW5ndGgtMSxSPUM+PWIubGVuZ3RoLTE7cmV0dXJuIHZbMzFdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KG09KDAsQS5qc3gpKHROLHt0aXRsZTpcIm5leHRcIixjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXBhZ2luYXRpb24tYnV0dG9uLWljb25cIn0pLHZbMzFdPW0pOm09dlszMV0sdlszMl0hPT1FfHx2WzMzXSE9PU58fHZbMzRdIT09Uj8oZz0oMCxBLmpzeCkoXCJidXR0b25cIix7cmVmOlMsdHlwZTpcImJ1dHRvblwiLGRpc2FibGVkOk4sXCJhcmlhLWRpc2FibGVkXCI6UixvbkNsaWNrOkUsXCJkYXRhLW5leHRqcy1kaWFsb2ctZXJyb3ItbmV4dFwiOiEwLGNsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktcGFnaW5hdGlvbi1idXR0b25cIixjaGlsZHJlbjptfSksdlszMl09RSx2WzMzXT1OLHZbMzRdPVIsdlszNV09Zyk6Zz12WzM1XSx2WzM2XSE9PWR8fHZbMzddIT09aHx8dlszOF0hPT1nPyh5PSgwLEEuanN4cykoXCJuYXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1wYWdpbmF0aW9uIGRpYWxvZy1leGNsdWRlLWNsb3NpbmctZnJvbS1vdXRzaWRlLWNsaWNrXCIscmVmOkksY2hpbGRyZW46W2QsaCxnXX0pLHZbMzZdPWQsdlszN109aCx2WzM4XT1nLHZbMzldPXkpOnk9dlszOV0seX1mdW5jdGlvbiB0WihlKXt2YXIgdCxuLHIsbyxhPSgwLHguYykoMyk7cmV0dXJuKGFbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8ocj0oMCxBLmpzeCkoXCJjaXJjbGVcIix7Y3g6XCI3XCIsY3k6XCI3XCIscjpcIjUuNVwiLHN0cm9rZVdpZHRoOlwiM1wifSksYVswXT1yKTpyPWFbMF0sYVsxXSE9PWUpPyhvPSgwLEEuanN4KShcInN2Z1wiLCh0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxNFwiLHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksbj1uPXtjaGlsZHJlbjpyfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pLHQpKSxhWzFdPWUsYVsyXT1vKTpvPWFbMl0sb31mdW5jdGlvbiB0VShlKXt2YXIgdCxuLHIsbyxhLGk9KDAseC5jKSgzMSksbD1lLnZlcnNpb25JbmZvLHM9ZS5idW5kbGVyTmFtZSxjPWwuc3RhbGVuZXNzO2lmKGlbMF0hPT1zfHxpWzFdIT09Y3x8aVsyXSE9PWwpe3Y9U3ltYm9sLmZvcihcInJlYWN0LmVhcmx5X3JldHVybl9zZW50aW5lbFwiKTtuOnt2YXIgdT1mdW5jdGlvbihlKXt2YXIgdD1lLmluc3RhbGxlZCxuPWUuc3RhbGVuZXNzLHI9ZS5leHBlY3RlZCxvPVwiXCIsYT1cIlwiLGk9XCJcIixsPVwiTmV4dC5qcyBcIi5jb25jYXQodCk7c3dpdGNoKG4pe2Nhc2VcIm5ld2VyLXRoYW4tbnBtXCI6Y2FzZVwiZnJlc2hcIjpvPWwsYT1cIkxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiBpcyBkZXRlY3RlZCAoXCIuY29uY2F0KHQsXCIpLlwiKSxpPVwiZnJlc2hcIjticmVhaztjYXNlXCJzdGFsZS1wYXRjaFwiOmNhc2VcInN0YWxlLW1pbm9yXCI6bz1cIlwiLmNvbmNhdChsLFwiIChzdGFsZSlcIiksYT1cIlRoZXJlIGlzIGEgbmV3ZXIgdmVyc2lvbiAoXCIuY29uY2F0KHIsXCIpIGF2YWlsYWJsZSwgdXBncmFkZSByZWNvbW1lbmRlZCEgXCIpLGk9XCJzdGFsZVwiO2JyZWFrO2Nhc2VcInN0YWxlLW1ham9yXCI6bz1cIlwiLmNvbmNhdChsLFwiIChvdXRkYXRlZClcIiksYT1cIkFuIG91dGRhdGVkIHZlcnNpb24gZGV0ZWN0ZWQgKGxhdGVzdCBpcyBcIi5jb25jYXQocixcIiksIHVwZ3JhZGUgaXMgaGlnaGx5IHJlY29tbWVuZGVkIVwiKSxpPVwib3V0ZGF0ZWRcIjticmVhaztjYXNlXCJzdGFsZS1wcmVyZWxlYXNlXCI6bz1cIlwiLmNvbmNhdChsLFwiIChzdGFsZSlcIiksYT1cIlRoZXJlIGlzIGEgbmV3ZXIgY2FuYXJ5IHZlcnNpb24gKFwiLmNvbmNhdChyLFwiKSBhdmFpbGFibGUsIHBsZWFzZSB1cGdyYWRlISBcIiksaT1cInN0YWxlXCI7YnJlYWs7Y2FzZVwidW5rbm93blwiOm89XCJcIi5jb25jYXQobCxcIiAodW5rbm93bilcIiksYT1cIk5vIE5leHQuanMgdmVyc2lvbiBkYXRhIHdhcyBmb3VuZC5cIixpPVwidW5rbm93blwifXJldHVybnt0ZXh0Om8saW5kaWNhdG9yQ2xhc3M6aSx0aXRsZTphfX0obCksZD11LnRleHQsZj11LmluZGljYXRvckNsYXNzLHA9dS50aXRsZTtpZihiPWQsdz1wLG09XCJUdXJib3BhY2tcIj09PXMsYy5zdGFydHNXaXRoKFwic3RhbGVcIikpe3ZhciBoLG0sZyx5LHYsYix3LEMsXyxrPW0mJlwidHVyYm9wYWNrLXRleHRcIjtpWzEwXSE9PWs/KEM9ZUooayksaVsxMF09ayxpWzExXT1DKTpDPWlbMTFdLGlbMTJdIT09c3x8aVsxM10hPT1DPyhfPSgwLEEuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOkMsY2hpbGRyZW46c30pLGlbMTJdPXMsaVsxM109QyxpWzE0XT1fKTpfPWlbMTRdLHY9KDAsQS5qc3hzKShcImFcIix7Y2xhc3NOYW1lOlwibmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci12ZXJzaW9uLXN0YXR1cyBkaWFsb2ctZXhjbHVkZS1jbG9zaW5nLWZyb20tb3V0c2lkZS1jbGlja1wiLHRhcmdldDpcIl9ibGFua1wiLHJlbDpcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixocmVmOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvdmVyc2lvbi1zdGFsZW5lc3NcIixjaGlsZHJlbjpbKDAsQS5qc3gpKHRaLHtjbGFzc05hbWU6ZUooXCJ2ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3JcIixmKX0pLCgwLEEuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy12ZXJzaW9uLWNoZWNrZXJcIjohMCx0aXRsZTp3LGNoaWxkcmVuOmJ9KSxfXX0pO2JyZWFrIG59eT1cIm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMgZGlhbG9nLWV4Y2x1ZGUtY2xvc2luZy1mcm9tLW91dHNpZGUtY2xpY2tcIixoPXRaLGc9ZUooXCJ2ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3JcIixmKX1pWzBdPXMsaVsxXT1jLGlbMl09bCxpWzNdPWgsaVs0XT1tLGlbNV09ZyxpWzZdPXksaVs3XT12LGlbOF09YixpWzldPXd9ZWxzZSBoPWlbM10sbT1pWzRdLGc9aVs1XSx5PWlbNl0sdj1pWzddLGI9aVs4XSx3PWlbOV07aWYodiE9PVN5bWJvbC5mb3IoXCJyZWFjdC5lYXJseV9yZXR1cm5fc2VudGluZWxcIikpcmV0dXJuIHY7aVsxNV0hPT1ofHxpWzE2XSE9PWc/KHQ9KDAsQS5qc3gpKGgse2NsYXNzTmFtZTpnfSksaVsxNV09aCxpWzE2XT1nLGlbMTddPXQpOnQ9aVsxN10saVsxOF0hPT1ifHxpWzE5XSE9PXc/KG49KDAsQS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLXZlcnNpb24tY2hlY2tlclwiOiEwLHRpdGxlOncsY2hpbGRyZW46Yn0pLGlbMThdPWIsaVsxOV09dyxpWzIwXT1uKTpuPWlbMjBdO3ZhciBFPW0mJlwidHVyYm9wYWNrLXRleHRcIjtyZXR1cm4gaVsyMV0hPT1FPyhyPWVKKEUpLGlbMjFdPUUsaVsyMl09cik6cj1pWzIyXSxpWzIzXSE9PXN8fGlbMjRdIT09cj8obz0oMCxBLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpyLGNoaWxkcmVuOnN9KSxpWzIzXT1zLGlbMjRdPXIsaVsyNV09byk6bz1pWzI1XSxpWzI2XSE9PXl8fGlbMjddIT09dHx8aVsyOF0hPT1ufHxpWzI5XSE9PW8/KGE9KDAsQS5qc3hzKShcInNwYW5cIix7Y2xhc3NOYW1lOnksY2hpbGRyZW46W3QsbixvXX0pLGlbMjZdPXksaVsyN109dCxpWzI4XT1uLGlbMjldPW8saVszMF09YSk6YT1pWzMwXSxhfWZ1bmN0aW9uIHRGKGUpe3ZhciB0LG4scixvLGE9KDAseC5jKSgxMSksaT1lLnJ1bnRpbWVFcnJvcnMsbD1lLmFjdGl2ZUlkeCxzPWUuc2V0QWN0aXZlSW5kZXgsYz1lLnZlcnNpb25JbmZvLHU9cHJvY2Vzcy5lbnYuX19ORVhUX0JVTkRMRVJ8fFwiV2VicGFja1wiO2FbMF0hPT1pPyh0PW51bGwhPWk/aTpbXSxhWzBdPWksYVsxXT10KTp0PWFbMV07dmFyIGQ9bnVsbCE9bD9sOjAsZj1udWxsIT1zP3M6dHE7cmV0dXJuIGFbMl0hPT10fHxhWzNdIT09ZHx8YVs0XSE9PWY/KG49KDAsQS5qc3gpKHRILHtzaWRlOlwibGVmdFwiLGNoaWxkcmVuOigwLEEuanN4KSh0TSx7cnVudGltZUVycm9yczp0LGFjdGl2ZUlkeDpkLG9uQWN0aXZlSW5kZXhDaGFuZ2U6Zn0pfSksYVsyXT10LGFbM109ZCxhWzRdPWYsYVs1XT1uKTpuPWFbNV0sYVs2XSE9PWM/KHI9YyYmKDAsQS5qc3gpKHRILHtzaWRlOlwicmlnaHRcIixjaGlsZHJlbjooMCxBLmpzeCkodFUse3ZlcnNpb25JbmZvOmMsYnVuZGxlck5hbWU6dX0pfSksYVs2XT1jLGFbN109cik6cj1hWzddLGFbOF0hPT1ufHxhWzldIT09cj8obz0oMCxBLmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZXJyb3Itb3ZlcmxheS1uYXZcIjohMCxjaGlsZHJlbjpbbixyXX0pLGFbOF09bixhWzldPXIsYVsxMF09byk6bz1hWzEwXSxvfWZ1bmN0aW9uIHRxKCl7fWZ1bmN0aW9uIHRIKGUpe3ZhciB0LG4scj0oMCx4LmMpKDQpLG89ZS5jaGlsZHJlbixhPWUuc2lkZSxpPXZvaWQgMD09PWE/XCJsZWZ0XCI6YTtyZXR1cm4gclswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PSgwLEEuanN4KSh0Vix7fSksclswXT10KTp0PXJbMF0sclsxXSE9PW98fHJbMl0hPT1pPyhuPSgwLEEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1ub3RjaFwiLFwiZGF0YS1zaWRlXCI6aSxjaGlsZHJlbjpbbyx0XX0pLHJbMV09byxyWzJdPWksclszXT1uKTpuPXJbM10sbn1mdW5jdGlvbiB0Vigpe3ZhciBlLHQsbixyPSgwLHguYykoMyk7cmV0dXJuIHJbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZT17bWFza1R5cGU6XCJhbHBoYVwifSxyWzBdPWUpOmU9clswXSxyWzFdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHQ9KDAsQS5qc3hzKShcIm1hc2tcIix7aWQ6XCJlcnJvcl9vdmVybGF5X25hdl9tYXNrMF8yNjY3XzE0Njg3XCIsc3R5bGU6ZSxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIwXCIseTpcIi0xXCIsd2lkdGg6XCI2MFwiLGhlaWdodDpcIjQzXCIsY2hpbGRyZW46WygwLEEuanN4cykoXCJtYXNrXCIse2lkOlwiZXJyb3Jfb3ZlcmxheV9uYXZfcGF0aF8xX291dHNpZGVfMV8yNjY3XzE0Njg3XCIsbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIix4OlwiMFwiLHk6XCItMVwiLHdpZHRoOlwiNjBcIixoZWlnaHQ6XCI0M1wiLGZpbGw6XCJibGFja1wiLGNoaWxkcmVuOlsoMCxBLmpzeCkoXCJyZWN0XCIse2ZpbGw6XCJ3aGl0ZVwiLHk6XCItMVwiLHdpZHRoOlwiNjBcIixoZWlnaHQ6XCI0M1wifSksKDAsQS5qc3gpKFwicGF0aFwiLHtkOlwiTTEgMEw4LjA3ODMgMEMxNS43NzIgMCAyMi43ODM2IDQuNDEzMjQgMjYuMTExIDExLjM1MDFMMzQuODg4OSAyOS42NDk4QzM4LjIxNjQgMzYuNTg2OCA0NS4yMjggNDEgNTIuOTIxNyA0MUg2MEgxTDEgMFpcIn0pXX0pLCgwLEEuanN4KShcInBhdGhcIix7ZDpcIk0xIDBMOC4wNzgzIDBDMTUuNzcyIDAgMjIuNzgzNiA0LjQxMzI0IDI2LjExMSAxMS4zNTAxTDM0Ljg4ODkgMjkuNjQ5OEMzOC4yMTY0IDM2LjU4NjggNDUuMjI4IDQxIDUyLjkyMTcgNDFINjBIMUwxIDBaXCIsZmlsbDpcIndoaXRlXCJ9KSwoMCxBLmpzeCkoXCJwYXRoXCIse2Q6XCJNMSAwVi0xSDBWMEwxIDBaTTEgNDFIMFY0MkgxVjQxWk0zNC44ODg5IDI5LjY0OThMMzMuOTg3MyAzMC4wODIzTDM0Ljg4ODkgMjkuNjQ5OFpNMjYuMTExIDExLjM1MDFMMjcuMDEyNyAxMC45MTc3TDI2LjExMSAxMS4zNTAxWk0xIDFIOC4wNzgzVi0xSDFWMVpNNjAgNDBIMVY0Mkg2MFY0MFpNMiA0MVYwTDAgMEwwIDQxSDJaTTI1LjIwOTQgMTEuNzgyNkwzMy45ODczIDMwLjA4MjNMMzUuNzkwNiAyOS4yMTc0TDI3LjAxMjcgMTAuOTE3N0wyNS4yMDk0IDExLjc4MjZaTTUyLjkyMTcgNDJINjBWNDBINTIuOTIxN1Y0MlpNMzMuOTg3MyAzMC4wODIzQzM3LjQ4MTEgMzcuMzY2MSA0NC44NDMzIDQyIDUyLjkyMTcgNDJWNDBDNDUuNjEyNyA0MCAzOC45NTE3IDM1LjgwNzQgMzUuNzkwNiAyOS4yMTc0TDMzLjk4NzMgMzAuMDgyM1pNOC4wNzgzIDFDMTUuMzg3MyAxIDIyLjA0ODMgNS4xOTI1NyAyNS4yMDk0IDExLjc4MjZMMjcuMDEyNyAxMC45MTc3QzIzLjUxODggMy42MzM5IDE2LjE1NjcgLTEgOC4wNzgzIC0xVjFaXCIsZmlsbDpcImJsYWNrXCIsbWFzazpcInVybCgjZXJyb3Jfb3ZlcmxheV9uYXZfcGF0aF8xX291dHNpZGVfMV8yNjY3XzE0Njg3KVwifSldfSksclsxXT10KTp0PXJbMV0sclsyXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhuPSgwLEEuanN4cykoXCJzdmdcIix7d2lkdGg6XCI2MFwiLGhlaWdodDpcIjQyXCIsdmlld0JveDpcIjAgMCA2MCA0MlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktbm90Y2gtdGFpbFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJub25lXCIsY2hpbGRyZW46W3QsKDAsQS5qc3hzKShcImdcIix7bWFzazpcInVybCgjZXJyb3Jfb3ZlcmxheV9uYXZfbWFzazBfMjY2N18xNDY4NylcIixjaGlsZHJlbjpbKDAsQS5qc3hzKShcIm1hc2tcIix7aWQ6XCJlcnJvcl9vdmVybGF5X25hdl9wYXRoXzNfb3V0c2lkZV8yXzI2NjdfMTQ2ODdcIixtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCItMVwiLHk6XCIwLjAyNDQxNDFcIix3aWR0aDpcIjYwXCIsaGVpZ2h0OlwiNDNcIixmaWxsOlwiYmxhY2tcIixjaGlsZHJlbjpbKDAsQS5qc3gpKFwicmVjdFwiLHtmaWxsOlwid2hpdGVcIix4OlwiLTFcIix5OlwiMC4wMjQ0MTQxXCIsd2lkdGg6XCI2MFwiLGhlaWdodDpcIjQzXCJ9KSwoMCxBLmpzeCkoXCJwYXRoXCIse2Q6XCJNMCAxLjAyNDQxSDcuMDc4M0MxNC43NzIgMS4wMjQ0MSAyMS43ODM2IDUuNDM3NjUgMjUuMTExIDEyLjM3NDZMMzMuODg4OSAzMC42NzQzQzM3LjIxNjQgMzcuNjExMiA0NC4yMjggNDIuMDI0NCA1MS45MjE3IDQyLjAyNDRINTlIMEwwIDEuMDI0NDFaXCJ9KV19KSwoMCxBLmpzeCkoXCJwYXRoXCIse2Q6XCJNMCAxLjAyNDQxSDcuMDc4M0MxNC43NzIgMS4wMjQ0MSAyMS43ODM2IDUuNDM3NjUgMjUuMTExIDEyLjM3NDZMMzMuODg4OSAzMC42NzQzQzM3LjIxNjQgMzcuNjExMiA0NC4yMjggNDIuMDI0NCA1MS45MjE3IDQyLjAyNDRINTlIMEwwIDEuMDI0NDFaXCIsZmlsbDpcInZhcigtLWJhY2tncm91bmQtY29sb3IpXCJ9KSwoMCxBLmpzeCkoXCJwYXRoXCIse2Q6XCJNMCAxLjAyNDQxTDAgMC4wMjQ0MTQxSC0xVjEuMDI0NDFIMFpNMCA0Mi4wMjQ0SC0xVjQzLjAyNDRIMEwwIDQyLjAyNDRaTTMzLjg4ODkgMzAuNjc0M0wzMi45ODczIDMxLjEwNjhMMzMuODg4OSAzMC42NzQzWk0yNS4xMTEgMTIuMzc0NkwyNi4wMTI3IDExLjk0MjFMMjUuMTExIDEyLjM3NDZaTTAgMi4wMjQ0MUg3LjA3ODNWMC4wMjQ0MTQxSDBMMCAyLjAyNDQxWk01OSA0MS4wMjQ0SDBMMCA0My4wMjQ0SDU5VjQxLjAyNDRaTTEgNDIuMDI0NEwxIDEuMDI0NDFILTFMLTEgNDIuMDI0NEgxWk0yNC4yMDk0IDEyLjgwNzFMMzIuOTg3MyAzMS4xMDY4TDM0Ljc5MDYgMzAuMjQxOEwyNi4wMTI3IDExLjk0MjFMMjQuMjA5NCAxMi44MDcxWk01MS45MjE3IDQzLjAyNDRINTlWNDEuMDI0NEg1MS45MjE3VjQzLjAyNDRaTTMyLjk4NzMgMzEuMTA2OEMzNi40ODExIDM4LjM5MDUgNDMuODQzMyA0My4wMjQ0IDUxLjkyMTcgNDMuMDI0NFY0MS4wMjQ0QzQ0LjYxMjcgNDEuMDI0NCAzNy45NTE3IDM2LjgzMTggMzQuNzkwNiAzMC4yNDE4TDMyLjk4NzMgMzEuMTA2OFpNNy4wNzgzIDIuMDI0NDFDMTQuMzg3MyAyLjAyNDQxIDIxLjA0ODMgNi4yMTY5OSAyNC4yMDk0IDEyLjgwNzFMMjYuMDEyNyAxMS45NDIxQzIyLjUxODggNC42NTgzMSAxNS4xNTY3IDAuMDI0NDE0MSA3LjA3ODMgMC4wMjQ0MTQxVjIuMDI0NDFaXCIsZmlsbDpcInZhcigtLXN0cm9rZS1jb2xvcilcIixtYXNrOlwidXJsKCNlcnJvcl9vdmVybGF5X25hdl9wYXRoXzNfb3V0c2lkZV8yXzI2NjdfMTQ2ODcpXCJ9KV19KV19KSxyWzJdPW4pOm49clsyXSxufWZ1bmN0aW9uIHQkKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn12YXIgdFc9W1wiW2RhdGEtbmV4dC1tYXJrXVwiLFwiW2RhdGEtaXNzdWVzLW9wZW5dXCIsXCIjbmV4dGpzLWRldi10b29scy1tZW51XCIsXCJbZGF0YS1uZXh0anMtZXJyb3Itb3ZlcmxheS1uYXZdXCIsXCJbZGF0YS1pbmZvLXBvcG92ZXJdXCIsXCJbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtb3ZlcmxheV1cIixcIltkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXJdXCIsXCJbZGF0YS1uZXh0anMtZXJyb3Itb3ZlcmxheS1mb290ZXJdXCJdLHRZPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGEsaSxsLHMsYyx1LGQsZixwLGgsbSxnLHksdixiLEMsXyxrLEUsaj0oMCx4LmMpKDIzKTtqWzBdIT09ZT8oZz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sISh0LmluZGV4T2Yobik+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsW1wiY2hpbGRyZW5cIixcImNsYXNzTmFtZVwiLFwib25DbG9zZVwiLFwiYXJpYS1sYWJlbGxlZGJ5XCIsXCJhcmlhLWRlc2NyaWJlZGJ5XCJdKSxwPWUuY2hpbGRyZW4saD1lLmNsYXNzTmFtZSxtPWUub25DbG9zZSxmPWVbXCJhcmlhLWxhYmVsbGVkYnlcIl0sZD1lW1wiYXJpYS1kZXNjcmliZWRieVwiXSxqWzBdPWUsalsxXT1kLGpbMl09ZixqWzNdPXAsals0XT1oLGpbNV09bSxqWzZdPWcpOihkPWpbMV0sZj1qWzJdLHA9alszXSxoPWpbNF0sbT1qWzVdLGc9als2XSk7dmFyIFM9dy51c2VSZWYobnVsbCksTz0odD13LnVzZVN0YXRlKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuaGFzRm9jdXMoKT9cImRpYWxvZ1wiOnZvaWQgMCksbj0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHQpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KHQsMil8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHQkKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIHQkKGUsdCl9fSh0LG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxCPU9bMF0sUD1PWzFdO3JldHVybihqWzddIT09bT8oeT1mdW5jdGlvbihlKXtyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLG51bGw9PW0/dm9pZCAwOm0oKX0sals3XT1tLGpbOF09eSk6eT1qWzhdLHI9UyxvPXRXLGE9eSwocz0oMCx4LmMpKDUpKVswXSE9PW98fHNbMV0hPT1yfHxzWzJdIT09YT8oaT1mdW5jdGlvbigpe3ZhciBlPXImJlwiY3VycmVudFwiaW4gcj9yLmN1cnJlbnQ6cjtpZihudWxsIT1lJiZudWxsIT1hKXt2YXIgdD1mdW5jdGlvbih0KXshKCFlfHxlLmNvbnRhaW5zKHQudGFyZ2V0KSkmJihvLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQudGFyZ2V0LmNsb3Nlc3QoZSl9KXx8YSh0KSl9LG49ZS5nZXRSb290Tm9kZSgpO3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdCksbi5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIix0LHtwYXNzaXZlOiExfSksZnVuY3Rpb24oKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdCksbi5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIix0KX19fSxsPVthLHIsb10sc1swXT1vLHNbMV09cixzWzJdPWEsc1szXT1pLHNbNF09bCk6KGk9c1szXSxsPXNbNF0pLHcudXNlRWZmZWN0KGksbCksals5XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh2PWZ1bmN0aW9uKCl7aWYobnVsbCE9Uy5jdXJyZW50KXt2YXIgZT1mdW5jdGlvbigpe1AoZG9jdW1lbnQuaGFzRm9jdXMoKT9cImRpYWxvZ1wiOnZvaWQgMCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsZSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsZSksZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsZSl9fX0sYj1bXSxqWzldPXYsalsxMF09Yik6KHY9als5XSxiPWpbMTBdKSx3LnVzZUVmZmVjdCh2LGIpLGpbMTFdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KEM9ZnVuY3Rpb24oKXt2YXIgZSx0LG49Uy5jdXJyZW50LHI9bnVsbD09bj92b2lkIDA6bi5nZXRSb290Tm9kZSgpLG89KGU9cixudWxsIT0odD1TaGFkb3dSb290KSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaGFzSW5zdGFuY2VdPyEhdFtTeW1ib2wuaGFzSW5zdGFuY2VdKGUpOmUgaW5zdGFuY2VvZiB0KT9udWxsPT1yP3ZvaWQgMDpyLmFjdGl2ZUVsZW1lbnQ6bnVsbDtyZXR1cm4gbnVsbD09bnx8bi5mb2N1cygpLGZ1bmN0aW9uKCl7bnVsbD09bnx8bi5ibHVyKCksbnVsbD09b3x8by5mb2N1cygpfX0sXz1bXSxqWzExXT1DLGpbMTJdPV8pOihDPWpbMTFdLF89alsxMl0pLHcudXNlRWZmZWN0KEMsXyksalsxM10hPT1tPyhrPWZ1bmN0aW9uKGUpe1wiRXNjYXBlXCI9PT1lLmtleSYmKG51bGw9PW18fG0oKSl9LGpbMTNdPW0salsxNF09ayk6az1qWzE0XSxqWzE1XSE9PWR8fGpbMTZdIT09Znx8alsxN10hPT1wfHxqWzE4XSE9PWh8fGpbMTldIT09Z3x8alsyMF0hPT1CfHxqWzIxXSE9PWspPyhFPSgwLEEuanN4KShcImRpdlwiLChjPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3JlZjpTLHRhYkluZGV4Oi0xLFwiZGF0YS1uZXh0anMtZGlhbG9nXCI6ITAsXCJkYXRhLW5leHRqcy1zY3JvbGxhYmxlLWNvbnRlbnRcIjohMCxyb2xlOkIsXCJhcmlhLWxhYmVsbGVkYnlcIjpmLFwiYXJpYS1kZXNjcmliZWRieVwiOmQsXCJhcmlhLW1vZGFsXCI6XCJ0cnVlXCIsY2xhc3NOYW1lOmgsb25LZXlEb3duOmt9LGcpLHU9dT17Y2hpbGRyZW46cH0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYyxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh1KSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdCh1KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodSxlKSl9KSxjKSksalsxNV09ZCxqWzE2XT1mLGpbMTddPXAsalsxOF09aCxqWzE5XT1nLGpbMjBdPUIsalsyMV09ayxqWzIyXT1FKTpFPWpbMjJdLEV9O2Z1bmN0aW9uIHRLKGUpe3ZhciB0LG4scixvLGEsaSxsLHMsYz0oMCx4LmMpKDEyKTtyZXR1cm4oY1swXSE9PWU/KGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLCEodC5pbmRleE9mKG4pPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLFtcImNoaWxkcmVuXCIsXCJvbkNsb3NlXCIsXCJmb290ZXJcIl0pLHI9ZS5jaGlsZHJlbixhPWUub25DbG9zZSxvPWUuZm9vdGVyLGNbMF09ZSxjWzFdPXIsY1syXT1vLGNbM109YSxjWzRdPWkpOihyPWNbMV0sbz1jWzJdLGE9Y1szXSxpPWNbNF0pLGNbNV0hPT1yfHxjWzZdIT09YXx8Y1s3XSE9PWkpPyhsPSgwLEEuanN4KSh0WSwodD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9ZSxvPXQsYT1uW3RdLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtcImFyaWEtbGFiZWxsZWRieVwiOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2xhYmVsXCIsXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZGVzY1wiLGNsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktZGlhbG9nLXNjcm9sbFwiLG9uQ2xvc2U6YX0saSksbj1uPXtjaGlsZHJlbjpyfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pLHQpKSxjWzVdPXIsY1s2XT1hLGNbN109aSxjWzhdPWwpOmw9Y1s4XSxjWzldIT09b3x8Y1sxMF0hPT1sPyhzPSgwLEEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1kaWFsb2ctY29udGFpbmVyXCIsY2hpbGRyZW46W2wsb119KSxjWzldPW8sY1sxMF09bCxjWzExXT1zKTpzPWNbMTFdLHN9ZnVuY3Rpb24gdFgoZSl7dmFyIHQsbixyLG89KDAseC5jKSgyKTtyZXR1cm4gb1swXSE9PWU/KHI9KDAsQS5qc3gpKFwiZGl2XCIsKHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCJkYXRhLW5leHRqcy1kaWFsb2ctaGVhZGVyXCI6ITB9LGUpLG49bj17Y2hpbGRyZW46ZS5jaGlsZHJlbn0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSx0KSksb1swXT1lLG9bMV09cik6cj1vWzFdLHJ9ZnVuY3Rpb24gdEcoZSl7dmFyIHQsbj0oMCx4LmMpKDIpLHI9ZS5jaGlsZHJlbjtyZXR1cm4gblswXSE9PXI/KHQ9KDAsQS5qc3gpKHRYLHtjbGFzc05hbWU6XCJuZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXJcIixjaGlsZHJlbjpyfSksblswXT1yLG5bMV09dCk6dD1uWzFdLHR9ZnVuY3Rpb24gdFEoZSl7dmFyIHQsbj0oMCx4LmMpKDIpLHI9ZS5jaGlsZHJlbjtyZXR1cm4gblswXSE9PXI/KHQ9KDAsQS5qc3gpKGVLLHtjbGFzc05hbWU6XCJuZXh0anMtY29udGFpbmVyLWVycm9ycy1ib2R5XCIsY2hpbGRyZW46cn0pLG5bMF09cixuWzFdPXQpOnQ9blsxXSx0fXZhciB0Sj0wLHQwPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGEsaSxsLHM9KDAseC5jKSg5KTtyZXR1cm4oc1swXSE9PWU/KGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLCEodC5pbmRleE9mKG4pPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLFtcImNsYXNzTmFtZVwiLFwiY2hpbGRyZW5cIl0pLG89ZS5jbGFzc05hbWUscj1lLmNoaWxkcmVuLHNbMF09ZSxzWzFdPXIsc1syXT1vLHNbM109YSk6KHI9c1sxXSxvPXNbMl0sYT1zWzNdKSxzWzRdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGk9W10sc1s0XT1pKTppPXNbNF0sdy51c2VFZmZlY3QodDIsaSksc1s1XSE9PXJ8fHNbNl0hPT1vfHxzWzddIT09YSk/KGw9KDAsQS5qc3gpKFwiZGl2XCIsKHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCJkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheVwiOiEwLGNsYXNzTmFtZTpvfSxhKSxuPW49e2NoaWxkcmVuOnJ9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSksdCkpLHNbNV09cixzWzZdPW8sc1s3XT1hLHNbOF09bCk6bD1zWzhdLGx9O2Z1bmN0aW9uIHQxKCl7c2V0VGltZW91dChmdW5jdGlvbigpezAhPT10SiYmMD09LS10SiYmKHZvaWQgMCE9PW4mJihkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD1uLG49dm9pZCAwKSx2b2lkIDAhPT1yJiYoZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1yLHI9dm9pZCAwKSl9KX1mdW5jdGlvbiB0Migpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoISh0SisrPjApKXt2YXIgZT13aW5kb3cuaW5uZXJXaWR0aC1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7ZT4wJiYobj1kb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCxkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD1cIlwiLmNvbmNhdChlLFwicHhcIikpLHI9ZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCJ9fSksdDF9ZnVuY3Rpb24gdDQoKXt2YXIgZSx0LG49KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLW92ZXJsYXldIHtcXG4gICAgcGFkZGluZzogaW5pdGlhbDtcXG4gICAgdG9wOiAxMHZoO1xcbiAgfVxcblwiXSx0fHwodD1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZSh0KX19KSkpO3JldHVybiB0ND1mdW5jdGlvbigpe3JldHVybiBufSxufWZ1bmN0aW9uIHQ1KGUpe3ZhciB0LG4scixvLGEsaT0oMCx4LmMpKDYpO3JldHVybihpWzBdIT09ZT8obz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sISh0LmluZGV4T2Yobik+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsW1wiY2hpbGRyZW5cIl0pLHI9ZS5jaGlsZHJlbixpWzBdPWUsaVsxXT1yLGlbMl09byk6KHI9aVsxXSxvPWlbMl0pLGlbM10hPT1yfHxpWzRdIT09byk/KGE9KDAsQS5qc3gpKHQwLCh0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe30sbyksbj1uPXtjaGlsZHJlbjpyfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pLHQpKSxpWzNdPXIsaVs0XT1vLGlbNV09YSk6YT1pWzVdLGF9dmFyIHQzPWV1KHQ0KCkpO2Z1bmN0aW9uIHQ2KGUpe3ZhciB0LG4scixvPSgwLHguYykoNCksYT1NYXRoLm1pbihlLmVycm9yQ291bnQtZS5hY3RpdmVJZHgtMSwyKTtyZXR1cm4gb1swXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PSgwLEEuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllciBlcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllci0xXCIsY2hpbGRyZW46XCIxXCJ9KSxuPSgwLEEuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllciBlcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllci0yXCIsY2hpbGRyZW46XCIyXCJ9KSxvWzBdPXQsb1sxXT1uKToodD1vWzBdLG49b1sxXSksb1syXSE9PWE/KHI9KDAsQS5qc3gpKFwiZGl2XCIse1wiYXJpYS1oaWRkZW5cIjohMCxjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LWJvdHRvbS1zdGFja1wiLGNoaWxkcmVuOigwLEEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stc3RhY2tcIixcImRhdGEtc3RhY2stY291bnRcIjphLGNoaWxkcmVuOlt0LG5dfSl9KSxvWzJdPWEsb1szXT1yKTpyPW9bM10scn1mdW5jdGlvbiB0OShlKXt2YXIgdCxuPSgwLHguYykoMikscj1lLmVudmlyb25tZW50TmFtZTtyZXR1cm4gblswXSE9PXI/KHQ9KDAsQS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWVudmlyb25tZW50LW5hbWUtbGFiZWxcIjohMCxjaGlsZHJlbjpyfSksblswXT1yLG5bMV09dCk6dD1uWzFdLHR9ZnVuY3Rpb24gdDgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIHQ3KGUpe3ZhciB0LG4scj1udWxsPT1lP3ZvaWQgMDplLmdldFJvb3ROb2RlKCk7cmV0dXJuKHQ9cixudWxsIT0obj1TaGFkb3dSb290KSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbltTeW1ib2wuaGFzSW5zdGFuY2VdPyEhbltTeW1ib2wuaGFzSW5zdGFuY2VdKHQpOnQgaW5zdGFuY2VvZiBuKT9udWxsPT1yP3ZvaWQgMDpyLmFjdGl2ZUVsZW1lbnQ6bnVsbH1mdW5jdGlvbiBuZShlLHQsbixyLG8pe3ZhciBhLGksbD0oMCx4LmMpKDcpO2xbMF0hPT1ufHxsWzFdIT09cnx8bFsyXSE9PW98fGxbM10hPT1lfHxsWzRdIT09dD8oYT1mdW5jdGlvbigpe2lmKG4pe3ZhciBhLGk9b3x8KG51bGw9PShhPWUuY3VycmVudCk/dm9pZCAwOmEub3duZXJEb2N1bWVudCksbD1mdW5jdGlvbihuKXt2YXIgbyxhLGk9bi50YXJnZXQ7IShlLmN1cnJlbnQmJmUuY3VycmVudC5jb250YWlucyhpKSkmJihudWxsIT0obz1lLmN1cnJlbnQpJiZvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpJiZuLmNsaWVudFg+PWUuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LTEwJiZuLmNsaWVudFg8PWUuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCsxMCYmbi5jbGllbnRZPj1lLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLTEwJiZuLmNsaWVudFk8PWUuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20rMTB8fG51bGwhPShhPXQuY3VycmVudCkmJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkmJm4uY2xpZW50WD49dC5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtMTAmJm4uY2xpZW50WDw9dC5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KzEwJiZuLmNsaWVudFk+PXQuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtMTAmJm4uY2xpZW50WTw9dC5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSsxMHx8cihcIm91dHNpZGVcIikpfSxzPWZ1bmN0aW9uKGUpe1wiRXNjYXBlXCI9PT1lLmtleSYmcihcImVzY2FwZVwiKX07cmV0dXJuIG51bGw9PWl8fGkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGwpLG51bGw9PWl8fGkuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixzKSxmdW5jdGlvbigpe251bGw9PWl8fGkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGwpLG51bGw9PWl8fGkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixzKX19fSxpPVtuLHIsbyxlLHRdLGxbMF09bixsWzFdPXIsbFsyXT1vLGxbM109ZSxsWzRdPXQsbFs1XT1hLGxbNl09aSk6KGE9bFs1XSxpPWxbNl0pLCgwLHcudXNlRWZmZWN0KShhLGkpfXZhciBudD1cImN1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIsIDEuMSlcIixubj0oMCx3LmZvcndhcmRSZWYpKGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPSgwLHguYykoOSksYT1lLnN0b3AsaT1lLmJsdXIsbD1lLnNpZGUscz1lLnN0eWxlLGM9ZS5oZWlnaHQsdT1cIlwiLmNvbmNhdChjLFwicHhcIik7b1swXSE9PWl8fG9bMV0hPT1hfHxvWzJdIT09c3x8b1szXSE9PXU/KG49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCItLXN0b3BcIjphLFwiLS1ibHVyXCI6aSxcIi0taGVpZ2h0XCI6dX0scyksb1swXT1pLG9bMV09YSxvWzJdPXMsb1szXT11LG9bNF09bik6bj1vWzRdO3ZhciBkPW47cmV0dXJuIG9bNV0hPT10fHxvWzZdIT09bHx8b1s3XSE9PWQ/KHI9KDAsQS5qc3gpKFwiZGl2XCIse3JlZjp0LFwiYXJpYS1oaWRkZW5cIjohMCxcImRhdGEtbmV4dGpzLXNjcm9sbC1mYWRlclwiOiEwLGNsYXNzTmFtZTpcIm5leHRqcy1zY3JvbGwtZmFkZXJcIixcImRhdGEtc2lkZVwiOmwsc3R5bGU6ZH0pLG9bNV09dCxvWzZdPWwsb1s3XT1kLG9bOF09cik6cj1vWzhdLHJ9KTtmdW5jdGlvbiBucihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gbm8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0obj1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2gobi52YWx1ZSksIXR8fGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsdCl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG5yKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIG5yKGUsdCl9fShlLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfXZhciBuYT0oMCx3LmZvcndhcmRSZWYpKGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGEsaSxsLHMsYyx1LGQsZixwLGgsbSxnLHksdixiLEMsXyxrPSgwLHguYykoMTMpO2tbMF0hPT1lPyh2PWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSwhKHQuaW5kZXhPZihuKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxbXCJjaGlsZHJlblwiLFwibWVhc3VyZVwiXSksZz1lLmNoaWxkcmVuLHk9ZS5tZWFzdXJlLGtbMF09ZSxrWzFdPWcsa1syXT15LGtbM109dik6KGc9a1sxXSx5PWtbMl0sdj1rWzNdKTt2YXIgRT1ubygoMCx3LnVzZVN0YXRlKShudWxsKSwyKSxqPUVbMF0sUz1FWzFdLE89bm8oKG49aixyPXksbD0oMCx4LmMpKDcpLGM9KHM9bm8oKDAsdy51c2VTdGF0ZSkoMCksMikpWzBdLHU9c1sxXSxmPShkPW5vKCgwLHcudXNlU3RhdGUpKCEwKSwyKSlbMF0scD1kWzFdLGxbMF0hPT1ufHxsWzFdIT09cj8obz1mdW5jdGlvbigpe2lmKHImJm4pe3ZhciBlLHQ9bmV3IFJlc2l6ZU9ic2VydmVyKGZ1bmN0aW9uKHQpe3ZhciBuPW5vKHQsMSlbMF0uY29udGVudFJlY3Q7Y2xlYXJUaW1lb3V0KGUpLGU9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtwKCExKX0sMTAwKSx1KG4uaGVpZ2h0KX0pO3JldHVybiB0Lm9ic2VydmUobiksZnVuY3Rpb24oKXtyZXR1cm4gdC5kaXNjb25uZWN0KCl9fX0sYT1bcixuXSxsWzBdPW4sbFsxXT1yLGxbMl09byxsWzNdPWEpOihvPWxbMl0sYT1sWzNdKSwoMCx3LnVzZUVmZmVjdCkobyxhKSxsWzRdIT09Y3x8bFs1XSE9PWY/KGk9W2MsZl0sbFs0XT1jLGxbNV09ZixsWzZdPWkpOmk9bFs2XSxpKSwyKSxCPU9bMF0sUD1PWzFdP1wiYXV0b1wiOkI7cmV0dXJuKGtbNF0hPT1QPyhiPXtoZWlnaHQ6UCx0cmFuc2l0aW9uOlwiaGVpZ2h0IDI1MG1zIHZhcigtLXRpbWluZy1zd2lmdClcIn0sa1s0XT1QLGtbNV09Yik6Yj1rWzVdLGtbNl0hPT1nPyhDPSgwLEEuanN4KShcImRpdlwiLHtyZWY6UyxjaGlsZHJlbjpnfSksa1s2XT1nLGtbN109Qyk6Qz1rWzddLGtbOF0hPT12fHxrWzldIT09dHx8a1sxMF0hPT1ifHxrWzExXSE9PUMpPyhfPSgwLEEuanN4KShcImRpdlwiLChoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe30sdiksbT1tPXtyZWY6dCxzdHlsZTpiLGNoaWxkcmVuOkN9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGgsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobSkpOihmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59KShPYmplY3QobSkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sZSkpfSksaCkpLGtbOF09dixrWzldPXQsa1sxMF09YixrWzExXT1DLGtbMTJdPV8pOl89a1sxMl0sX30pO2Z1bmN0aW9uIG5pKGUpe3ZhciB0LG4scixvPSgwLHguYykoNik7b1swXSE9PWU/KG49ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLCEodC5pbmRleE9mKG4pPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLFtcImZpeGVkXCJdKSx0PWUuZml4ZWQsb1swXT1lLG9bMV09dCxvWzJdPW4pOih0PW9bMV0sbj1vWzJdKTt2YXIgYT0hIXR8fHZvaWQgMDtyZXR1cm4gb1szXSE9PW58fG9bNF0hPT1hPyhyPSgwLEEuanN4KShcImRpdlwiLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe1wiZGF0YS1uZXh0anMtZGlhbG9nLWJhY2tkcm9wXCI6ITAsXCJkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3AtZml4ZWRcIjphfSxuKSksb1szXT1uLG9bNF09YSxvWzVdPXIpOnI9b1s1XSxyfWZ1bmN0aW9uIG5sKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBucyhlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9ZSxvPXQsYT1uW3RdLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gbmMoZSx0KXtyZXR1cm4gdD1udWxsIT10P3Q6e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKSl9KSxlfWZ1bmN0aW9uIG51KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLCF0fHxhLmxlbmd0aCE9PXQpO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLHQpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBubChlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4pcmV0dXJuIEFycmF5LmZyb20obik7aWYoXCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBubChlLHQpfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBuZChlKXt2YXIgdCxuLHIsbyxhLGksbCxzLGMsdSxkLGYscCxoLG0sZyx5LHYsYixDLF8sayxFLGosUz0oMCx4LmMpKDY1KSxPPWUuZXJyb3JNZXNzYWdlLEI9ZS5lcnJvclR5cGUsUD1lLmNoaWxkcmVuLEk9ZS5lcnJvckNvZGUsVD1lLmVycm9yQ291bnQsej1lLmVycm9yLEQ9ZS5kZWJ1Z0luZm8sTD1lLmlzQnVpbGRFcnJvcixOPWUub25DbG9zZSxSPWUudmVyc2lvbkluZm8sTT1lLnJ1bnRpbWVFcnJvcnMsWj1lLmFjdGl2ZUlkeCxVPWUuc2V0QWN0aXZlSW5kZXgsRj1lLmlzVHVyYm9wYWNrLHE9ZS5kaWFsb2dSZXNpemVyUmVmLEg9ZS5nZW5lcmF0ZUVycm9ySW5mbyxWPWUucmVuZGVyZWQsJD1lLnRyYW5zaXRpb25EdXJhdGlvbk1zLFc9dm9pZCAwPT09Vnx8VixZPVwiXCIuY29uY2F0KCQsXCJtc1wiKTtTWzBdIT09WT8ocj17XCItLXRyYW5zaXRpb24tZHVyYXRpb25cIjpZfSxTWzBdPVksU1sxXT1yKTpyPVNbMV07dmFyIEs9cjtTWzJdIT09V3x8U1szXSE9PUs/KG89e1wiZGF0YS1yZW5kZXJlZFwiOlcsc3R5bGU6S30sU1syXT1XLFNbM109SyxTWzRdPW8pOm89U1s0XTt2YXIgWD1vLEc9bnUody51c2VTdGF0ZSghISQpLDIpLFE9R1swXSxKPUdbMV0sZWU9dy51c2VSZWYobnVsbCksZXQ9ISFJLGVuPXcudXNlUmVmKG51bGwpO3Q9ZW4sbj1XLCgwLHcudXNlRWZmZWN0KShmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2lmKFwiVGFiXCI9PT1lLmtleSYmbnVsbCE9PXIpe3ZhciB0LG4sbyxhPShuPSh0PXIucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uLCBbaHJlZl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknKSk/W3RbMF0sdFt0Lmxlbmd0aC0xXV06W10sbz0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHQ4KGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIHQ4KGUsdCl9fShuLG8pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxpPWFbMF0sbD1hWzFdLHM9dDcocik7ZS5zaGlmdEtleT9zPT09aSYmKG51bGw9PWx8fGwuZm9jdXMoKSxlLnByZXZlbnREZWZhdWx0KCkpOnM9PT1sJiYobnVsbD09aXx8aS5mb2N1cygpLGUucHJldmVudERlZmF1bHQoKSl9fSxyPW51bGwsbz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYocj10LmN1cnJlbnQsbiludWxsPT1yfHxyLmZvY3VzKCksbnVsbD09cnx8ci5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpO2Vsc2UgdDcocil9KTtyZXR1cm4gZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQobyksbnVsbD09cnx8ci5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpfX0sW25dKSxTWzVdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGE9ZnVuY3Rpb24oZSl7aWYoZWUuY3VycmVudCl7dmFyIHQsbixyPSh0PWUuY3VycmVudFRhcmdldC5zY3JvbGxUb3AvMTcsTWF0aC5taW4oTWF0aC5tYXgodCwobj1udShbMCwxXSwyKSlbMF0pLG5bMV0pKTtlZS5jdXJyZW50LnN0eWxlLm9wYWNpdHk9U3RyaW5nKHIpfX0sU1s1XT1hKTphPVNbNV07dmFyIGVyPWE7U1s2XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhpPWZ1bmN0aW9uKGUpe3ZhciB0PWUucHJvcGVydHlOYW1lLG49ZS50YXJnZXQ7XCJzY2FsZVwiPT09dCYmbj09PWVuLmN1cnJlbnQmJkooITEpfSxTWzZdPWkpOmk9U1s2XTt2YXIgZW89aTtTWzddIT09TD8obD0oMCxBLmpzeCkobmkse2ZpeGVkOkx9KSxTWzddPUwsU1s4XT1sKTpsPVNbOF0sU1s5XSE9PVp8fFNbMTBdIT09Rnx8U1sxMV0hPT1NfHxTWzEyXSE9PVV8fFNbMTNdIT09Uj8ocz0oMCxBLmpzeCkodEYse3J1bnRpbWVFcnJvcnM6TSxhY3RpdmVJZHg6WixzZXRBY3RpdmVJbmRleDpVLHZlcnNpb25JbmZvOlIsaXNUdXJib3BhY2s6Rn0pLFNbOV09WixTWzEwXT1GLFNbMTFdPU0sU1sxMl09VSxTWzEzXT1SLFNbMTRdPXMpOnM9U1sxNF0sU1sxNV0hPT1JfHxTWzE2XSE9PWV0PyhjPWV0JiYoMCxBLmpzeCkodEIse2Vycm9yQ29kZTpJfSksU1sxNV09SSxTWzE2XT1ldCxTWzE3XT1jKTpjPVNbMTddO3ZhciBlYT0hUTtTWzE4XSE9PUI/KHU9KDAsQS5qc3gpKHRELHtlcnJvclR5cGU6Qn0pLFNbMThdPUIsU1sxOV09dSk6dT1TWzE5XSxTWzIwXSE9PXouZW52aXJvbm1lbnROYW1lPyhkPXouZW52aXJvbm1lbnROYW1lJiYoMCxBLmpzeCkodDkse2Vudmlyb25tZW50TmFtZTp6LmVudmlyb25tZW50TmFtZX0pLFNbMjBdPXouZW52aXJvbm1lbnROYW1lLFNbMjFdPWQpOmQ9U1syMV0sU1syMl0hPT11fHxTWzIzXSE9PWQ/KGY9KDAsQS5qc3hzKShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1lcnJvci1sYWJlbC1ncm91cFwiOiEwLGNoaWxkcmVuOlt1LGRdfSksU1syMl09dSxTWzIzXT1kLFNbMjRdPWYpOmY9U1syNF0sU1syNV0hPT1EfHxTWzI2XSE9PXp8fFNbMjddIT09SD8ocD0oMCxBLmpzeCkodEMse2Vycm9yOnosZGVidWdJbmZvOkQsZ2VuZXJhdGVFcnJvckluZm86SH0pLFNbMjVdPUQsU1syNl09eixTWzI3XT1ILFNbMjhdPXApOnA9U1syOF0sU1syOV0hPT1JfHxTWzMwXSE9PWZ8fFNbMzFdIT09cD8oaD0oMCxBLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fZXJyb3JfdGl0bGVcIixcImRhdGEtbmV4dGpzLWVycm9yLWNvZGVcIjpJLGNoaWxkcmVuOltmLHBdfSksU1syOV09SSxTWzMwXT1mLFNbMzFdPXAsU1szMl09aCk6aD1TWzMyXSxTWzMzXSE9PU8/KG09KDAsQS5qc3gpKHR6LHtlcnJvck1lc3NhZ2U6T30pLFNbMzNdPU8sU1szNF09bSk6bT1TWzM0XSxTWzM1XSE9PWh8fFNbMzZdIT09bT8oZz0oMCxBLmpzeHMpKHRHLHtjaGlsZHJlbjpbaCxtXX0pLFNbMzVdPWgsU1szNl09bSxTWzM3XT1nKTpnPVNbMzddLFNbMzhdIT09UD8oeT0oMCxBLmpzeCkodFEse2NoaWxkcmVuOlB9KSxTWzM4XT1QLFNbMzldPXkpOnk9U1szOV0sU1s0MF0hPT1nfHxTWzQxXSE9PXk/KHY9KDAsQS5qc3hzKShlWCx7Y2hpbGRyZW46W2cseV19KSxTWzQwXT1nLFNbNDFdPXksU1s0Ml09dik6dj1TWzQyXSxTWzQzXSE9PXF8fFNbNDRdIT09ZWF8fFNbNDVdIT09dj8oYj0oMCxBLmpzeCkobmEse3JlZjpxLG1lYXN1cmU6ZWEsXCJkYXRhLW5leHRqcy1kaWFsb2ctc2l6ZXJcIjohMCxjaGlsZHJlbjp2fSksU1s0M109cSxTWzQ0XT1lYSxTWzQ1XT12LFNbNDZdPWIpOmI9U1s0Nl07dmFyIGVpPW51bGwhPVo/WjowO3JldHVybiBTWzQ3XSE9PVR8fFNbNDhdIT09ZWk/KEM9KDAsQS5qc3gpKHQ2LHtlcnJvckNvdW50OlQsYWN0aXZlSWR4OmVpfSksU1s0N109VCxTWzQ4XT1laSxTWzQ5XT1DKTpDPVNbNDldLFNbNTBdIT09ZXR8fFNbNTFdIT09Tnx8U1s1Ml0hPT1jfHxTWzUzXSE9PWJ8fFNbNTRdIT09Qz8oXz0oMCxBLmpzeHMpKHRLLHtvbkNsb3NlOk4sXCJkYXRhLWhhcy1mb290ZXJcIjpldCxvblNjcm9sbDplcixmb290ZXI6YyxjaGlsZHJlbjpbYixDXX0pLFNbNTBdPWV0LFNbNTFdPU4sU1s1Ml09YyxTWzUzXT1iLFNbNTRdPUMsU1s1NV09Xyk6Xz1TWzU1XSxTWzU2XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhrPSgwLEEuanN4KShubix7cmVmOmVlLHNpZGU6XCJ0b3BcIixzdG9wOlwiNTAlXCIsYmx1cjpcIjRweFwiLGhlaWdodDo0OH0pLFNbNTZdPWspOms9U1s1Nl0sU1s1N10hPT1YfHxTWzU4XSE9PV98fFNbNTldIT09cz8oRT0oMCxBLmpzeHMpKFwiZGl2XCIsbmMobnMoe1wiZGF0YS1uZXh0anMtZGlhbG9nLXJvb3RcIjohMCxvblRyYW5zaXRpb25FbmQ6ZW8scmVmOmVufSxYKSx7Y2hpbGRyZW46W3MsXyxrXX0pKSxTWzU3XT1YLFNbNThdPV8sU1s1OV09cyxTWzYwXT1FKTpFPVNbNjBdLFNbNjFdIT09WHx8U1s2Ml0hPT1FfHxTWzYzXSE9PWw/KGo9KDAsQS5qc3hzKSh0NSxuYyhucyh7fSxYKSx7Y2hpbGRyZW46W2wsRV19KSksU1s2MV09WCxTWzYyXT1FLFNbNjNdPWwsU1s2NF09aik6aj1TWzY0XSxqfXZhciBuZj1cIlxcbiAgXCIuY29uY2F0KHQzLFwiXFxuICBcIikuY29uY2F0KFwiXFxuICAuZXJyb3Itb3ZlcmxheS1kaWFsb2ctY29udGFpbmVyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgICBib3JkZXI6IHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tbmV4dC1kaWFsb2ctcmFkaXVzKSB2YXIoLS1uZXh0LWRpYWxvZy1yYWRpdXMpO1xcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWVudSk7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIH1cXG5cXG4gIC5lcnJvci1vdmVybGF5LWRpYWxvZy1zY3JvbGwge1xcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICB9XFxuXCIsXCJcXG4gIFwiKS5jb25jYXQoXCJcXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXIge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyID4gaDEge1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMjApO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgICBtYXJnaW46IGNhbGMoMTZweCAqIDEuNSkgMDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRpdGxlLWgxKTtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXIgc21hbGwge1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50cy0xKTtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2cHg7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyIHNtYWxsID4gc3BhbiB7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyID4gZGl2ID4gc21hbGwge1xcbiAgICBtYXJnaW46IDA7XFxuICAgIG1hcmdpbi10b3A6IDRweDtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXIgPiBwID4gYSB7XFxuICAgIGNvbG9yOiBpbmhlcml0O1xcbiAgICBmb250LXdlaWdodDogYm9sZDtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXJcXG4gICAgPiAubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci12ZXJzaW9uLXN0YXR1cyB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdG9wOiAxNnB4O1xcbiAgICByaWdodDogMTZweDtcXG4gIH1cXG5cIixcIlxcbiAgXCIpLmNvbmNhdChcIlwiLFwiXFxuXFxuICBcIikuY29uY2F0KFwiXFxuICBbZGF0YS1uZXh0anMtZXJyb3Itb3ZlcmxheS1uYXZdIHtcXG4gICAgLS1zdHJva2UtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgLS1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXG4gICAgd2lkdGg6IDEwMCU7XFxuXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgei1pbmRleDogMjtcXG4gICAgb3V0bGluZTogbm9uZTtcXG4gICAgdHJhbnNsYXRlOiB2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpIHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aCk7XFxuICAgIG1heC13aWR0aDogdmFyKC0tbmV4dC1kaWFsb2ctbWF4LXdpZHRoKTtcXG5cXG4gICAgLmVycm9yLW92ZXJsYXktbm90Y2gge1xcbiAgICAgIHRyYW5zbGF0ZTogY2FsYyh2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpICogLTEpO1xcbiAgICAgIHdpZHRoOiBhdXRvO1xcbiAgICAgIGhlaWdodDogdmFyKC0tbmV4dC1kaWFsb2ctbm90Y2gtaGVpZ2h0KTtcXG4gICAgICBwYWRkaW5nOiAxMnB4O1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQtY29sb3IpO1xcbiAgICAgIGJvcmRlcjogdmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1zdHJva2UtY29sb3IpO1xcbiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XFxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcblxcbiAgICAgICZbZGF0YS1zaWRlPSdsZWZ0J10ge1xcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW5leHQtZGlhbG9nLXJhZGl1cykgMCAwIDA7XFxuXFxuICAgICAgICAuZXJyb3Itb3ZlcmxheS1ub3RjaC10YWlsIHtcXG4gICAgICAgICAgcmlnaHQ6IC01NHB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgPiAqOm5vdCguZXJyb3Itb3ZlcmxheS1ub3RjaC10YWlsKSB7XFxuICAgICAgICAgIG1hcmdpbi1yaWdodDogLTEwcHg7XFxuICAgICAgICB9XFxuICAgICAgfVxcblxcbiAgICAgICZbZGF0YS1zaWRlPSdyaWdodCddIHtcXG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tbmV4dC1kaWFsb2ctcmFkaXVzKSAwIDA7XFxuXFxuICAgICAgICAuZXJyb3Itb3ZlcmxheS1ub3RjaC10YWlsIHtcXG4gICAgICAgICAgbGVmdDogLTU0cHg7XFxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgPiAqOm5vdCguZXJyb3Itb3ZlcmxheS1ub3RjaC10YWlsKSB7XFxuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMTJweDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgLmVycm9yLW92ZXJsYXktbm90Y2gtdGFpbCB7XFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICB0b3A6IGNhbGModmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKSAqIC0xKTtcXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICAgICAgei1pbmRleDogLTE7XFxuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSArIHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aCkpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblxcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1lcnJvci1vdmVybGF5LW5hdl0ge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQtY29sb3IpO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW5leHQtZGlhbG9nLXJhZGl1cykgdmFyKC0tbmV4dC1kaWFsb2ctcmFkaXVzKSAwIDA7XFxuICAgICAgYm9yZGVyOiB2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLXN0cm9rZS1jb2xvcik7XFxuICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICAgIHRyYW5zbGF0ZTogMCB2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpO1xcbiAgICAgIFxcbiAgICAgIC5lcnJvci1vdmVybGF5LW5vdGNoIHtcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XFxuICAgICAgICBib3JkZXI6IDA7XFxuXFxuICAgICAgICAmW2RhdGEtc2lkZT1cXFwibGVmdFxcXCJdLCAmW2RhdGEtc2lkZT1cXFwicmlnaHRcXFwiXSB7XFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAuZXJyb3Itb3ZlcmxheS1ub3RjaC10YWlsIHtcXG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIixcIlxcbiAgXCIpLmNvbmNhdChcIlxcbiAgLm5leHRqc19fY29udGFpbmVyX2Vycm9yc19sYWJlbCB7XFxuICAgIHBhZGRpbmc6IDJweCA2cHg7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcmVkLTEwMCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1yZWQtOTAwKTtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgfVxcblwiLFwiXFxuICBcIikuY29uY2F0KFwiXFxuICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX3dyYXBwZXIge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB9XFxuXFxuICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX2Rlc2Mge1xcbiAgICBtYXJnaW46IDA7XFxuICAgIG1hcmdpbi1sZWZ0OiA0cHg7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1yZWQtOTAwKTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjMycHg7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcXG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbiAgfVxcblxcbiAgLm5leHRqc19fY29udGFpbmVyX2Vycm9yc19kZXNjLnRydW5jYXRlZCB7XFxuICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgfVxcblxcbiAgLm5leHRqc19fY29udGFpbmVyX2Vycm9yc19ncmFkaWVudF9vdmVybGF5IHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBib3R0b206IDA7XFxuICAgIGxlZnQ6IDA7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICBoZWlnaHQ6IDg1cHg7XFxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcXG4gICAgICAxODBkZWcsXFxuICAgICAgcmdiYSgyNTAsIDI1MCwgMjUwLCAwKSAwJSxcXG4gICAgICB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCkgMTAwJVxcbiAgICApO1xcbiAgfVxcblxcbiAgLm5leHRqc19fY29udGFpbmVyX2Vycm9yc19leHBhbmRfYnV0dG9uIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBib3R0b206IDEwcHg7XFxuICAgIGxlZnQ6IDUwJTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBwYWRkaW5nOiA2cHggOHB4O1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XFxuICAgIGJveC1zaGFkb3c6XFxuICAgICAgMHB4IDJweCAycHggdmFyKC0tY29sb3ItZ3JheS1hbHBoYS0xMDApLFxcbiAgICAgIDBweCA4cHggOHB4IC04cHggdmFyKC0tY29sb3ItZ3JheS1hbHBoYS0xMDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTMpO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlO1xcbiAgfVxcblxcbiAgLm5leHRqc19fY29udGFpbmVyX2Vycm9yc19leHBhbmRfYnV0dG9uOmhvdmVyIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgfVxcblwiLFwiXFxuICBcIikuY29uY2F0KFwiXFxuICAuZXJyb3Itb3ZlcmxheS10b29sYmFyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZ2FwOiA2cHg7XFxuICB9XFxuXFxuICAubm9kZWpzLWluc3BlY3Rvci1idXR0b24sXFxuICAuY29weS1lcnJvci1idXR0b24sXFxuICAuZG9jcy1saW5rLWJ1dHRvbiB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcblxcbiAgICB3aWR0aDogdmFyKC0tc2l6ZS0yOCk7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yOCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc21hbGwpO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTQpO1xcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICB9XFxuXFxuICAgICY6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktYWxwaGEtMTAwKTtcXG4gICAgfVxcblxcbiAgICAmOm5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSB7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS1hbHBoYS0yMDApO1xcbiAgICB9XFxuXFxuICAgICY6ZGlzYWJsZWQge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcXG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZXJyb3Itb3ZlcmxheS10b29sYmFyLWJ1dHRvbi1pY29uIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gIH1cXG5cIixcIlxcblxcbiAgW2RhdGEtbmV4dGpzLWVycm9yLWxhYmVsLWdyb3VwXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogOHB4O1xcbiAgfVxcblwiKTtmdW5jdGlvbiBucCgpe3ZhciBlLHQsbj0oZT1bXCJcXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV0ge1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIHRvcDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGJvdHRvbTogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgLyogc2Vjb25kYXJ5IHotaW5kZXgsIC0xIHRoYW4gdG9hc3Qgei1pbmRleCAqL1xcbiAgICB6LWluZGV4OiAyMTQ3NDgzNjQ2O1xcblxcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIHBhZGRpbmc6IDEwdmggMTVweCAwO1xcbiAgfVxcblxcbiAgQG1lZGlhIChtYXgtaGVpZ2h0OiA4MTJweCkge1xcbiAgICBbZGF0YS1uZXh0anMtZGlhbG9nLW92ZXJsYXldIHtcXG4gICAgICBwYWRkaW5nOiAxNXB4IDE1cHggMDtcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcF0ge1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIHRvcDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGJvdHRvbTogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2Ryb3ApO1xcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuICAgIHotaW5kZXg6IC0xO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcC1maXhlZF0ge1xcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTtcXG4gIH1cXG5cIl0sdHx8KHQ9ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUodCl9fSkpKTtyZXR1cm4gbnA9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sbn12YXIgbmg9ZXUobnAoKSk7ZnVuY3Rpb24gbm0oZSl7dmFyIHQsbixyLG8sYSxpPSgwLHguYykoOSksbD1lLmZpbGUscz1lLmxvY2F0aW9uLGM9bnVsbCE9KHQ9bnVsbD09cz92b2lkIDA6cy5saW5lKT90OjEsdT1udWxsIT0obj1udWxsPT1zP3ZvaWQgMDpzLmNvbHVtbik/bjoxO2lbMF0hPT1sfHxpWzFdIT09Y3x8aVsyXSE9PXU/KHI9e2ZpbGU6bCxsaW5lMTpjLGNvbHVtbjE6dX0saVswXT1sLGlbMV09YyxpWzJdPXUsaVszXT1yKTpyPWlbM107dmFyIGQ9ZUIociksZj1zP1wiOlwiLmNvbmNhdChzLmxpbmUsXCI6XCIpLmNvbmNhdChzLmNvbHVtbik6bnVsbDtyZXR1cm4gaVs0XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhvPSgwLEEuanN4cykoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLHN0cm9rZVdpZHRoOlwiMlwiLHN0cm9rZUxpbmVjYXA6XCJyb3VuZFwiLHN0cm9rZUxpbmVqb2luOlwicm91bmRcIixjaGlsZHJlbjpbKDAsQS5qc3gpKFwicGF0aFwiLHtkOlwiTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDZcIn0pLCgwLEEuanN4KShcInBvbHlsaW5lXCIse3BvaW50czpcIjE1IDMgMjEgMyAyMSA5XCJ9KSwoMCxBLmpzeCkoXCJsaW5lXCIse3gxOlwiMTBcIix5MTpcIjE0XCIseDI6XCIyMVwiLHkyOlwiM1wifSldfSksaVs0XT1vKTpvPWlbNF0saVs1XSE9PWx8fGlbNl0hPT1kfHxpWzddIT09Zj8oYT0oMCxBLmpzeHMpKFwiZGl2XCIse1wiZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmtcIjohMCxcImRhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rLWltcG9ydC10cmFjZVwiOiEwLHJvbGU6XCJsaW5rXCIsb25DbGljazpkLHRpdGxlOlwiQ2xpY2sgdG8gb3BlbiBpbiB5b3VyIGVkaXRvclwiLGNoaWxkcmVuOltsLGYsb119KSxpWzVdPWwsaVs2XT1kLGlbN109ZixpWzhdPWEpOmE9aVs4XSxhfWZ1bmN0aW9uIG5nKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn12YXIgbnk9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8sYSxpLGwscyxjLHUsZD1lLmNvbnRlbnQsZj13LnVzZU1lbW8oZnVuY3Rpb24oKXt2YXIgZSx0LG47cmV0dXJuIHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWUuc2hpZnQoKTtpZighcilyZXR1cm4gbnVsbDt2YXIgbz0odD1yLnNwbGl0KFwiOlwiLDMpLG49MyxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSh0KXx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPShuPW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaChuLnZhbHVlKSxhLmxlbmd0aCE9PXQpO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fSh0LDMpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBuZyhlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4pcmV0dXJuIEFycmF5LmZyb20obik7aWYoXCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBuZyhlLHQpfX0odCxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksYT1vWzBdLGk9b1sxXSxsPW9bMl0scz1OdW1iZXIoaSksYz1OdW1iZXIobCksdT0hTnVtYmVyLmlzTmFOKHMpJiYhTnVtYmVyLmlzTmFOKGMpO3JldHVybntmaWxlTmFtZTp1P2E6cixsb2NhdGlvbjp1P3tsaW5lMTpzLGNvbHVtbjE6Y306dm9pZCAwfX0oZT1kLnNwbGl0KFwiXFxuXCIpKSxuPWZ1bmN0aW9uKGUpe2lmKGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4vUmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3I6Ly50ZXN0KGUpfSl8fGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4vSW1wb3J0IHRyYWNlIGZvciByZXF1ZXN0ZWQgbW9kdWxlOi8udGVzdChlKX0pKXtmb3IodmFyIHQ9W107Ly4rXFwuLisvLnRlc3QoZVtlLmxlbmd0aC0xXSkmJiFlW2UubGVuZ3RoLTFdLmluY2x1ZGVzKFwiOlwiKTspe3ZhciBuPWUucG9wKCkudHJpbSgpO3QudW5zaGlmdChuKX1yZXR1cm4gdH1yZXR1cm5bXX0oZSkse2ZpbGU6dCxzb3VyY2U6ZS5qb2luKFwiXFxuXCIpLGltcG9ydFRyYWNlRmlsZXM6bn19LFtkXSkscD1mLmZpbGUsaD1mLnNvdXJjZSxtPWYuaW1wb3J0VHJhY2VGaWxlcyxnPXcudXNlTWVtbyhmdW5jdGlvbigpe3JldHVybiBlcSgpLmFuc2lUb0pzb24oaCx7anNvbjohMCx1c2VfY2xhc3NlczohMCxyZW1vdmVfZW1wdHk6ITB9KX0sW2hdKTtjb25zb2xlLmxvZyh7ZmlsZTpwfSk7dmFyIHk9ZUIoe2ZpbGU6bnVsbD09cD92b2lkIDA6cC5maWxlTmFtZSxsaW5lMTpudWxsIT0oaT1udWxsPT1wfHxudWxsPT0odD1wLmxvY2F0aW9uKT92b2lkIDA6dC5saW5lMSk/aToxLGNvbHVtbjE6bnVsbCE9KGw9bnVsbD09cHx8bnVsbD09KG49cC5sb2NhdGlvbik/dm9pZCAwOm4uY29sdW1uMSk/bDoxfSksdj17ZmlsZTpudWxsIT0ocz1udWxsPT1wP3ZvaWQgMDpwLmZpbGVOYW1lKT9zOm51bGwsbWV0aG9kTmFtZTpcIlwiLGFyZ3VtZW50czpbXSxsaW5lMTpudWxsIT0oYz1udWxsPT1wfHxudWxsPT0ocj1wLmxvY2F0aW9uKT92b2lkIDA6ci5saW5lMSk/YzpudWxsLGNvbHVtbjE6bnVsbCE9KHU9bnVsbD09cHx8bnVsbD09KG89cC5sb2NhdGlvbik/dm9pZCAwOm8uY29sdW1uMSk/dTpudWxsfSxiPW51bGw9PXZ8fG51bGw9PShhPXYuZmlsZSk/dm9pZCAwOmEuc3BsaXQoXCIuXCIpLnBvcCgpO3JldHVybigwLEEuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jb2RlZnJhbWVcIjohMCxjaGlsZHJlbjpbKDAsQS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtaGVhZGVyXCIsY2hpbGRyZW46KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWxpbmtcIixjaGlsZHJlbjpbKDAsQS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWljb25cIixjaGlsZHJlbjooMCxBLmpzeCkoZUwse2xhbmc6Yn0pfSksKDAsQS5qc3gpKFwic3BhblwiLHtcImRhdGEtdGV4dFwiOiEwLGNoaWxkcmVuOmVPKHYpfSksKDAsQS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1sYWJlbFwiOlwiT3BlbiBpbiBlZGl0b3JcIixcImRhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rLXNvdXJjZS1maWxlXCI6ITAsb25DbGljazp5LGNoaWxkcmVuOigwLEEuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1pY29uXCIsXCJkYXRhLWljb25cIjpcInJpZ2h0XCIsY2hpbGRyZW46KDAsQS5qc3gpKGV6LHt3aWR0aDoxNixoZWlnaHQ6MTZ9KX0pfSldfSl9KSwoMCxBLmpzeCkoXCJwcmVcIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1wcmVcIixjaGlsZHJlbjooMCxBLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtbGluZXNcIixjaGlsZHJlbjpbZy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxBLmpzeCkoXCJzcGFuXCIse3N0eWxlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe2NvbG9yOmUuZmc/XCJ2YXIoLS1jb2xvci1cIi5jb25jYXQoZS5mZyxcIilcIik6dm9pZCAwfSxcImJvbGRcIj09PWUuZGVjb3JhdGlvbj97Zm9udFdlaWdodDo1MDB9OlwiaXRhbGljXCI9PT1lLmRlY29yYXRpb24/e2ZvbnRTdHlsZTpcIml0YWxpY1wifTp2b2lkIDApLGNoaWxkcmVuOigwLEEuanN4KShlQSx7dGV4dDplLmNvbnRlbnR9KX0sXCJ0ZXJtaW5hbC1lbnRyeS1cIi5jb25jYXQodCkpfSksbS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuKDAsQS5qc3gpKG5tLHtpc1NvdXJjZUZpbGU6ITEsZmlsZTplfSxlKX0pXX0pfSldfSl9LG52PWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BsaXQoXCJcXG5cIik7cmV0dXJuIGVWKCkodFsxXXx8XCJcIikucmVwbGFjZSgvXkVycm9yOiAvLFwiXCIpfSxuYj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxhLGksbCxzLGMsdSxkPSgwLHguYykoMTkpO2RbMF0hPT1lPyhvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSwhKHQuaW5kZXhPZihuKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxbXCJtZXNzYWdlXCJdKSxyPWUubWVzc2FnZSxkWzBdPWUsZFsxXT1yLGRbMl09byk6KHI9ZFsxXSxvPWRbMl0pLGRbM10hPT1yPyhhPUVycm9yKHIpLGRbM109cixkWzRdPWEpOmE9ZFs0XTt2YXIgZj1hO2RbNV0hPT1yPyhsPW52KHIpfHxcIkZhaWxlZCB0byBjb21waWxlXCIsZFs1XT1yLGRbNl09bCk6bD1kWzZdLGk9bCxkWzddIT09aXx8ZFs4XSE9PXJ8fGRbOV0hPT1vLnZlcnNpb25JbmZvLmluc3RhbGxlZD8ocz1mdW5jdGlvbigpe3ZhciBlPVtdO2lmKGUucHVzaChcIiMjIEVycm9yIFR5cGVcXG5CdWlsZCBFcnJvclwiKSxpJiZlLnB1c2goXCIjIyBFcnJvciBNZXNzYWdlXFxuXCIuY29uY2F0KGkpKSxyKXt2YXIgdD1lVigpKHIpO2UucHVzaChcIiMjIEJ1aWxkIE91dHB1dFxcblwiLmNvbmNhdCh0KSl9cmV0dXJuXCJcIi5jb25jYXQoZS5qb2luKFwiXFxuXFxuXCIpLFwiXFxuXFxuTmV4dC5qcyB2ZXJzaW9uOiBcIikuY29uY2F0KG8udmVyc2lvbkluZm8uaW5zdGFsbGVkLFwiIChcIikuY29uY2F0KHByb2Nlc3MuZW52Ll9fTkVYVF9CVU5ETEVSLFwiKVxcblwiKX0sZFs3XT1pLGRbOF09cixkWzldPW8udmVyc2lvbkluZm8uaW5zdGFsbGVkLGRbMTBdPXMpOnM9ZFsxMF07dmFyIHA9cztyZXR1cm4oZFsxMV0hPT1yPyhjPSgwLEEuanN4KShueSx7Y29udGVudDpyfSksZFsxMV09cixkWzEyXT1jKTpjPWRbMTJdLGRbMTNdIT09Znx8ZFsxNF0hPT1pfHxkWzE1XSE9PXB8fGRbMTZdIT09b3x8ZFsxN10hPT1jKT8odT0oMCxBLmpzeCkobmQsKHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7ZXJyb3JUeXBlOlwiQnVpbGQgRXJyb3JcIixlcnJvck1lc3NhZ2U6aSxvbkNsb3NlOm5BLGVycm9yOmYsZ2VuZXJhdGVFcnJvckluZm86cH0sbyksbj1uPXtjaGlsZHJlbjpjfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pLHQpKSxkWzEzXT1mLGRbMTRdPWksZFsxNV09cCxkWzE2XT1vLGRbMTddPWMsZFsxOF09dSk6dT1kWzE4XSx1fTtmdW5jdGlvbiBuQSgpe312YXIgbng9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8sYSxpLGwscyxjLHUsZCxmPSgwLHguYykoMjYpLHA9ZS5mcmFtZSxoPW51bGwhPSh0PXAub3JpZ2luYWxTdGFja0ZyYW1lKT90OnAuc291cmNlU3RhY2tGcmFtZSxtPSEhcC5vcmlnaW5hbENvZGVGcmFtZTtmWzBdIT09aHx8ZlsxXSE9PW0/KG49bT97ZmlsZTpoLmZpbGUsbGluZTE6bnVsbCE9KHI9aC5saW5lMSk/cjoxLGNvbHVtbjE6bnVsbCE9KG89aC5jb2x1bW4xKT9vOjF9OnZvaWQgMCxmWzBdPWgsZlsxXT1tLGZbMl09bik6bj1mWzJdO3ZhciBnPWVCKG4pO2ZbM10hPT1oPyhhPWVPKGgpLGZbM109aCxmWzRdPWEpOmE9Zls0XTt2YXIgeT1hO2lmKCF5KXJldHVybiBudWxsO3ZhciB2PSFtO3JldHVybiBmWzVdIT09aC5tZXRob2ROYW1lPyhpPSgwLEEuanN4KShlQSx7dGV4dDpoLm1ldGhvZE5hbWV9KSxmWzVdPWgubWV0aG9kTmFtZSxmWzZdPWkpOmk9Zls2XSxmWzddIT09aC5tZXRob2ROYW1lfHxmWzhdIT09bXx8Zls5XSE9PWc/KGw9bSYmKDAsQS5qc3gpKFwiYnV0dG9uXCIse29uQ2xpY2s6ZyxjbGFzc05hbWU6XCJvcGVuLWluLWVkaXRvci1idXR0b25cIixcImFyaWEtbGFiZWxcIjpcIk9wZW4gXCIuY29uY2F0KGgubWV0aG9kTmFtZSxcIiBpbiBlZGl0b3JcIiksY2hpbGRyZW46KDAsQS5qc3gpKGV6LHt3aWR0aDoxNixoZWlnaHQ6MTZ9KX0pLGZbN109aC5tZXRob2ROYW1lLGZbOF09bSxmWzldPWcsZlsxMF09bCk6bD1mWzEwXSxmWzExXSE9PXAuZXJyb3J8fGZbMTJdIT09cC5yZWFzb24/KHM9cC5lcnJvcj8oMCxBLmpzeCkoXCJidXR0b25cIix7Y2xhc3NOYW1lOlwic291cmNlLW1hcHBpbmctZXJyb3ItYnV0dG9uXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKHAucmVhc29uKX0sdGl0bGU6XCJTb3VyY2VtYXBwaW5nIGZhaWxlZC4gQ2xpY2sgdG8gbG9nIGNhdXNlIG9mIGVycm9yLlwiLGNoaWxkcmVuOigwLEEuanN4KShlRCx7d2lkdGg6MTYsaGVpZ2h0OjE2fSl9KTpudWxsLGZbMTFdPXAuZXJyb3IsZlsxMl09cC5yZWFzb24sZlsxM109cyk6cz1mWzEzXSxmWzE0XSE9PWl8fGZbMTVdIT09bHx8ZlsxNl0hPT1zPyhjPSgwLEEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiY2FsbC1zdGFjay1mcmFtZS1tZXRob2QtbmFtZVwiLGNoaWxkcmVuOltpLGwsc119KSxmWzE0XT1pLGZbMTVdPWwsZlsxNl09cyxmWzE3XT1jKTpjPWZbMTddLGZbMThdIT09eXx8ZlsxOV0hPT1tPyh1PSgwLEEuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiY2FsbC1zdGFjay1mcmFtZS1maWxlLXNvdXJjZVwiLFwiZGF0YS1oYXMtc291cmNlXCI6bSxjaGlsZHJlbjp5fSksZlsxOF09eSxmWzE5XT1tLGZbMjBdPXUpOnU9ZlsyMF0sZlsyMV0hPT1wLmlnbm9yZWR8fGZbMjJdIT09dnx8ZlsyM10hPT1jfHxmWzI0XSE9PXU/KGQ9KDAsQS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVcIjohMCxcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWUtbm8tc291cmNlXCI6dixcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWUtaWdub3JlZFwiOnAuaWdub3JlZCxjaGlsZHJlbjpbYyx1XX0pLGZbMjFdPXAuaWdub3JlZCxmWzIyXT12LGZbMjNdPWMsZlsyNF09dSxmWzI1XT1kKTpkPWZbMjVdLGR9O2Z1bmN0aW9uIG53KCl7dmFyIGUsdD0oMCx4LmMpKDEpO3JldHVybiB0WzBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGU9KDAsQS5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOC43MDcyMiAyLjM5NjQxQzguMzE2NyAyLjAwNTg4IDcuNjgzNTMgMi4wMDU4OCA3LjI5MzAxIDIuMzk2NDFMNC40Njk3OCA1LjIxOTYzTDMuOTM5NDUgNS43NDk5Nkw1LjAwMDExIDYuODEwNjJMNS41MzA0NCA2LjI4MDI5TDguMDAwMTEgMy44MTA2MkwxMC40Njk4IDYuMjgwMjlMMTEuMDAwMSA2LjgxMDYyTDEyLjA2MDggNS43NDk5NkwxMS41MzA0IDUuMjE5NjNMOC43MDcyMiAyLjM5NjQxWk01LjUzMDQ0IDkuNzE5NjNMNS4wMDAxMSA5LjE4OTNMMy45Mzk0NSAxMC4yNUw0LjQ2OTc4IDEwLjc4MDNMNy4yOTMwMSAxMy42MDM1QzcuNjgzNTMgMTMuOTk0IDguMzE2NyAxMy45OTQgOC43MDcyMiAxMy42MDM1TDExLjUzMDQgMTAuNzgwM0wxMi4wNjA4IDEwLjI1TDExLjAwMDEgOS4xODkzTDEwLjQ2OTggOS43MTk2M0w4LjAwMDExIDEyLjE4OTNMNS41MzA0NCA5LjcxOTYzWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSksdFswXT1lKTplPXRbMF0sZX1mdW5jdGlvbiBuQygpe3ZhciBlLHQsbj0oZT1bXCJcXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNvbnRhaW5lcl0ge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIG1hcmdpbi10b3A6IDhweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWhlYWRlcl0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIG1pbi1oZWlnaHQ6IHZhcigtLXNpemUtMjgpO1xcbiAgICBwYWRkaW5nOiA4cHggOHB4IDEycHggNHB4O1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLXRpdGxlXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA4cHg7XFxuXFxuICAgIG1hcmdpbjogMDtcXG5cXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb3VudF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXG4gICAgd2lkdGg6IHZhcigtLXNpemUtMjApO1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBnYXA6IDRweDtcXG5cXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTExKTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcblxcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1pZ25vcmVkLWxpc3QtdG9nZ2xlLWJ1dHRvbl0ge1xcbiAgICBhbGw6IHVuc2V0O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDZweDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICAgIHBhZGRpbmc6IDRweCA2cHg7XFxuICAgIG1hcmdpbi1yaWdodDogLTZweDtcXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxNTBtcyBlYXNlO1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIH1cXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgIH1cXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNik7XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgfVxcbiAgfVxcblwiXSx0fHwodD1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZSh0KX19KSkpO3JldHVybiBuQz1mdW5jdGlvbigpe3JldHVybiBufSxufWZ1bmN0aW9uIG5fKGUpe3ZhciB0LG4scixvLGEsaSxsPSgwLHguYykoMTcpLHM9ZS5mcmFtZXMsYz1lLmlzSWdub3JlTGlzdE9wZW4sdT1lLmlnbm9yZWRGcmFtZXNUYWxseSxkPWUub25Ub2dnbGVJZ25vcmVMaXN0O3JldHVybiBsWzBdIT09cy5sZW5ndGg/KHQ9KDAsQS5qc3hzKShcInBcIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLXRpdGxlXCI6ITAsY2hpbGRyZW46W1wiQ2FsbCBTdGFjayBcIiwoMCxBLmpzeCkoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb3VudFwiOiEwLGNoaWxkcmVuOnMubGVuZ3RofSldfSksbFswXT1zLmxlbmd0aCxsWzFdPXQpOnQ9bFsxXSxsWzJdIT09dXx8bFszXSE9PWN8fGxbNF0hPT1kPyhuPXU+MCYmKDAsQS5qc3hzKShcImJ1dHRvblwiLHtcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2staWdub3JlZC1saXN0LXRvZ2dsZS1idXR0b25cIjpjLG9uQ2xpY2s6ZCxjaGlsZHJlbjpbXCJcIi5jb25jYXQoYz9cIkhpZGVcIjpcIlNob3dcIixcIiBcIikuY29uY2F0KHUsXCIgaWdub3JlLWxpc3RlZCBmcmFtZShzKVwiKSwoMCxBLmpzeCkobncse30pXX0pLGxbMl09dSxsWzNdPWMsbFs0XT1kLGxbNV09bik6bj1sWzVdLGxbNl0hPT10fHxsWzddIT09bj8ocj0oMCxBLmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1oZWFkZXJcIjohMCxjaGlsZHJlbjpbdCxuXX0pLGxbNl09dCxsWzddPW4sbFs4XT1yKTpyPWxbOF0sbFs5XSE9PXN8fGxbMTBdIT09Yz8obFsxMl0hPT1jPyhhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIWUuaWdub3JlZHx8Yz8oMCxBLmpzeCkobngse2ZyYW1lOmV9LHQpOm51bGx9LGxbMTJdPWMsbFsxM109YSk6YT1sWzEzXSxvPXMubWFwKGEpLGxbOV09cyxsWzEwXT1jLGxbMTFdPW8pOm89bFsxMV0sbFsxNF0hPT1yfHxsWzE1XSE9PW8/KGk9KDAsQS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stY29udGFpbmVyXCI6ITAsY2hpbGRyZW46W3Isb119KSxsWzE0XT1yLGxbMTVdPW8sbFsxNl09aSk6aT1sWzE2XSxpfXZhciBuaz1ldShuQygpKTtmdW5jdGlvbiBuRShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gbmooZSl7dmFyIHQsbixyPWUuZnJhbWVzLG89ZS5kaWFsb2dSZXNpemVyUmVmLGE9KDAsdy51c2VSZWYpKE5hTiksaT0odD0oMCx3LnVzZVN0YXRlKSghMSksbj0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHQpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KHQsMil8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG5FKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIG5FKGUsdCl9fSh0LG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxsPWlbMF0scz1pWzFdLGM9KDAsdy51c2VNZW1vKShmdW5jdGlvbigpe3JldHVybiByLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlKyArISF0Lmlnbm9yZWR9LDApfSxbcl0pO3JldHVybigwLEEuanN4KShuXyx7ZnJhbWVzOnIsaXNJZ25vcmVMaXN0T3BlbjpsLG9uVG9nZ2xlSWdub3JlTGlzdDpmdW5jdGlvbigpe3ZhciBlPW51bGw9PW8/dm9pZCAwOm8uY3VycmVudDtpZihlKXt2YXIgdD0obnVsbD09ZT92b2lkIDA6ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkuaGVpZ2h0O2EuY3VycmVudHx8KGEuY3VycmVudD10KSxsPyhlLnN0eWxlLmhlaWdodD1cIlwiLmNvbmNhdChhLmN1cnJlbnQsXCJweFwiKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsZnVuY3Rpb24gdCgpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIix0KSxzKCExKX0pKTpzKCEwKX19LGlnbm9yZWRGcmFtZXNUYWxseTpjfSl9ZnVuY3Rpb24gblMoZSl7dmFyIHQsbixyLG8sYSxpLGw9KDAseC5jKSg4KTtsWzBdIT09ZT8ocj12b2lkIDA9PT1lP3t9OmUsbFswXT1lLGxbMV09cik6cj1sWzFdO3ZhciBzPXIuY29sbGFwc2VkO3JldHVybihsWzJdIT09cz8obz1cImJvb2xlYW5cIj09dHlwZW9mIHM/e3N0eWxlOnt0cmFuc2Zvcm06cz92b2lkIDA6XCJyb3RhdGUoOTBkZWcpXCJ9fTp7fSxsWzJdPXMsbFszXT1vKTpvPWxbM10sbFs0XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhhPSgwLEEuanN4KShcInBhdGhcIix7c3R5bGU6e2ZpbGw6XCJ2YXIoLS1jb2xvci1mb250KVwifSxmaWxsUnVsZTpcImV2ZW5vZGRcIixkOlwibTYuNzUgMy45NC41My41MyAyLjgyNCAyLjgyM2ExIDEgMCAwIDEgMCAxLjQxNEw3LjI4IDExLjUzbC0uNTMuNTNMNS42OSAxMWwuNTMtLjUzTDguNjkgOCA2LjIyIDUuNTMgNS42OSA1bDEuMDYtMS4wNlpcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLGxbNF09YSk6YT1sWzRdLGxbNV0hPT1zfHxsWzZdIT09byk/KGk9KDAsQS5qc3gpKFwic3ZnXCIsKHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNoZXZyb24taWNvblwiOiEwLFwiZGF0YS1jb2xsYXBzZWRcIjpzLHdpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLGZpbGw6XCJub25lXCJ9LG8pLG49bj17Y2hpbGRyZW46YX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSx0KSksbFs1XT1zLGxbNl09byxsWzddPWkpOmk9bFs3XSxpfWZ1bmN0aW9uIG5PKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBuQihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPShuPW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaChuLnZhbHVlKSwhdHx8YS5sZW5ndGghPT10KTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbk8oZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uKXJldHVybiBBcnJheS5mcm9tKG4pO2lmKFwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gbk8oZSx0KX19KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gblAoZSl7dmFyIHQsbixyLG8sYSxpLGwscz0oMCx4LmMpKDE1KSxjPWUucmVhY3RPdXRwdXRDb21wb25lbnREaWZmLHU9bkIoKDAsdy51c2VTdGF0ZSkoITApLDIpLGQ9dVswXSxmPXVbMV07c1swXSE9PWM/KG49W10sYy5zcGxpdChcIlxcblwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7dmFyIHIsbyxhPVwiK1wiPT09ZVswXXx8XCItXCI9PT1lWzBdLGk9XCI+XCI9PT1lWzBdLGw9YXx8aSxzPWw/ZVswXTpcIlwiLGM9bD9lLmluZGV4T2Yocyk6LTEsdT1uQihsP1tlLnNsaWNlKDAsYyksZS5zbGljZShjKzEpXTpbZSxcIlwiXSwyKSxkPXVbMF0sZj11WzFdO2E/bi5wdXNoKCgwLEEuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWxpbmVcIjohMCxcImRhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLWRpZmZcIjpcIitcIj09PXM/XCJhZGRcIjpcInJlbW92ZVwiLGNoaWxkcmVuOigwLEEuanN4cykoXCJzcGFuXCIse2NoaWxkcmVuOltkLCgwLEEuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWxpbmUtc2lnblwiOiEwLGNoaWxkcmVuOnN9KSxmLFwiXFxuXCJdfSl9LFwiY29tcC1kaWZmXCIrdCkpOm4ucHVzaCgoMCxBLmpzeHMpKFwic3BhblwiLChyPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe1wiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1saW5lXCI6ITB9LGk/e1wiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZlwiOlwiZXJyb3JcIn06dm9pZCAwKSxvPW89e2NoaWxkcmVuOltkLCgwLEEuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWxpbmUtc2lnblwiOiEwLGNoaWxkcmVuOnN9KSxmLFwiXFxuXCJdfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG8pKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KG8pKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLGUpKX0pLHIpLFwiY29tcC1kaWZmXCIrdCkpfSksc1swXT1jLHNbMV09bik6bj1zWzFdLHQ9bjt2YXIgcD0hZDtyZXR1cm4gc1syXSE9PWQ/KHI9ZnVuY3Rpb24oKXtyZXR1cm4gZighZCl9LG89KDAsQS5qc3gpKG5TLHtjb2xsYXBzZWQ6ZH0pLHNbMl09ZCxzWzNdPXIsc1s0XT1vKToocj1zWzNdLG89c1s0XSksc1s1XSE9PXB8fHNbNl0hPT1yfHxzWzddIT09bz8oYT0oMCxBLmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWV4cGFuZGVkXCI6cCxcImFyaWEtbGFiZWxcIjpcImNvbXBsZXRlIENvbXBvbmVudCBTdGFja1wiLFwiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1jb2xsYXBzZS1idXR0b25cIjohMCxvbkNsaWNrOnIsY2hpbGRyZW46b30pLHNbNV09cCxzWzZdPXIsc1s3XT1vLHNbOF09YSk6YT1zWzhdLHNbOV0hPT10PyhpPSgwLEEuanN4KShcInByZVwiLHtjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2NvbXBvbmVudC1zdGFja1wiLGNoaWxkcmVuOigwLEEuanN4KShcImNvZGVcIix7Y2hpbGRyZW46dH0pfSksc1s5XT10LHNbMTBdPWkpOmk9c1sxMF0sc1sxMV0hPT1kfHxzWzEyXSE9PWF8fHNbMTNdIT09aT8obD0oMCxBLmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbFwiOiEwLFwiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1jb2xsYXBzZVwiOmQsY2hpbGRyZW46W2EsaV19KSxzWzExXT1kLHNbMTJdPWEsc1sxM109aSxzWzE0XT1sKTpsPXNbMTRdLGx9dmFyIG5JPVN5bWJvbC5mb3IoXCJOZXh0anNFcnJvclwiKTtmdW5jdGlvbiBuVChlKXtyZXR1cm4gZVtuSV18fG51bGx9ZnVuY3Rpb24gbnooZSx0LG4scixvLGEsaSl7dHJ5e3ZhciBsPWVbYV0oaSkscz1sLnZhbHVlfWNhdGNoKGUpe24oZSk7cmV0dXJufWwuZG9uZT90KHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKHIsbyl9ZnVuY3Rpb24gbkQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt2YXIgYT1lLmFwcGx5KHQsbik7ZnVuY3Rpb24gaShlKXtueihhLHIsbyxpLGwsXCJuZXh0XCIsZSl9ZnVuY3Rpb24gbChlKXtueihhLHIsbyxpLGwsXCJ0aHJvd1wiLGUpfWkodm9pZCAwKX0pfX1mdW5jdGlvbiBuTChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9ZSxvPXQsYT1uW3RdLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gbk4oZSx0KXtyZXR1cm4gdD1udWxsIT10P3Q6e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKSl9KSxlfWZ1bmN0aW9uIG5SKGUsdCl7dmFyIG4scixvLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX0saT1PYmplY3QuY3JlYXRlKChcImZ1bmN0aW9uXCI9PXR5cGVvZiBJdGVyYXRvcj9JdGVyYXRvcjpPYmplY3QpLnByb3RvdHlwZSk7cmV0dXJuIGkubmV4dD1sKDApLGkudGhyb3c9bCgxKSxpLnJldHVybj1sKDIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksaTtmdW5jdGlvbiBsKGwpe3JldHVybiBmdW5jdGlvbihzKXt2YXIgYz1bbCxzXTtpZihuKXRocm93IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDtpJiYoaT0wLGNbMF0mJihhPTApKSxhOyl0cnl7aWYobj0xLHImJihvPTImY1swXT9yLnJldHVybjpjWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYoYz1bMiZjWzBdLG8udmFsdWVdKSxjWzBdKXtjYXNlIDA6Y2FzZSAxOm89YzticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6Y1sxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9Y1sxXSxjPVswXTtjb250aW51ZTtjYXNlIDc6Yz1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKG89KG89YS50cnlzKS5sZW5ndGg+MCYmb1tvLmxlbmd0aC0xXSkmJig2PT09Y1swXXx8Mj09PWNbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWNbMF0mJighb3x8Y1sxXT5vWzBdJiZjWzFdPG9bM10pKXthLmxhYmVsPWNbMV07YnJlYWt9aWYoNj09PWNbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89YzticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGMpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1jPXQuY2FsbChlLGEpfWNhdGNoKGUpe2M9WzYsZV0scj0wfWZpbmFsbHl7bj1vPTB9aWYoNSZjWzBdKXRocm93IGNbMV07cmV0dXJue3ZhbHVlOmNbMF0/Y1sxXTp2b2lkIDAsZG9uZTohMH19fX12YXIgbk09ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuW107aWYoXCJ1c2VcImluIHcpe3ZhciB0PWUuZnJhbWVzO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgRXJyb3IoXCJJbnZhcmlhbnQ6IGZyYW1lcyBtdXN0IGJlIGEgZnVuY3Rpb24gd2hlbiB0aGUgUmVhY3QgdmVyc2lvbiBoYXMgUmVhY3QudXNlLiBUaGlzIGlzIGEgYnVnIGluIE5leHQuanMuXCIpO3JldHVybiB3LnVzZSh0KCkpfWlmKCFBcnJheS5pc0FycmF5KGUuZnJhbWVzKSl0aHJvdyBFcnJvcihcIkludmFyaWFudDogZnJhbWVzIG11c3QgYmUgYW4gYXJyYXkgd2hlbiB0aGUgUmVhY3QgdmVyc2lvbiBkb2VzIG5vdCBoYXZlIFJlYWN0LnVzZS4gVGhpcyBpcyBhIGJ1ZyBpbiBOZXh0LmpzLlwiKTtyZXR1cm4gZS5mcmFtZXN9O2Z1bmN0aW9uIG5aKGUpe3ZhciB0LG4scixvLGEsaT0oMCx4LmMpKDgpLGw9ZS5lcnJvcixzPWUuZGlhbG9nUmVzaXplclJlZixjPW5NKGwpLHU9Yy5maW5kSW5kZXgoblUpO3JldHVybiB0PW51bGwhPShuPWNbdV0pP246bnVsbCxpWzBdIT09dD8ocj10JiYoMCxBLmpzeCkoZVkse3N0YWNrRnJhbWU6dC5vcmlnaW5hbFN0YWNrRnJhbWUsY29kZUZyYW1lOnQub3JpZ2luYWxDb2RlRnJhbWV9KSxpWzBdPXQsaVsxXT1yKTpyPWlbMV0saVsyXSE9PXN8fGlbM10hPT1jPyhvPWMubGVuZ3RoPjAmJigwLEEuanN4KShuaix7ZGlhbG9nUmVzaXplclJlZjpzLGZyYW1lczpjfSksaVsyXT1zLGlbM109YyxpWzRdPW8pOm89aVs0XSxpWzVdIT09cnx8aVs2XSE9PW8/KGE9KDAsQS5qc3hzKShBLkZyYWdtZW50LHtjaGlsZHJlbjpbcixvXX0pLGlbNV09cixpWzZdPW8saVs3XT1hKTphPWlbN10sYX1mdW5jdGlvbiBuVShlKXtyZXR1cm4hZS5pZ25vcmVkJiYhIWUub3JpZ2luYWxDb2RlRnJhbWUmJiEhZS5vcmlnaW5hbFN0YWNrRnJhbWV9dmFyIG5GPVwiXFxuICBcIi5jb25jYXQoXCJcXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sXSB7XFxuICAgIHBhZGRpbmc6IDhweCAwO1xcbiAgICBtYXJnaW46IDhweCAwO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXN5bnRheC1jb25zdGFudCk7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzZW07IC8qIDE2cHggaW4gMTJweCBmb250IHNpemUgKi9cXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWxpbmVdIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgcGFkZGluZy1sZWZ0OiA0MHB4O1xcbiAgICBsaW5lLWhlaWdodDogY2FsYyg1IC8gMyk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZj0nZXJyb3InXSB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFtYmVyLTEwMCk7XFxuICAgIGJveC1zaGFkb3c6IDJweCAwIDAgMCB2YXIoLS1jb2xvci1hbWJlci05MDApIGluc2V0O1xcbiAgICBmb250LXdlaWdodDogYm9sZDtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWNvbGxhcHNlLWJ1dHRvbl0ge1xcbiAgICBhbGw6IHVuc2V0O1xcbiAgICBtYXJnaW4tbGVmdDogMTJweDtcXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgfVxcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLWRpZmY9J2FkZCddIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JlZW4tMzAwKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWxpbmUtc2lnbl0ge1xcbiAgICBtYXJnaW4tbGVmdDogY2FsYygyNHB4ICogLTEpO1xcbiAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZj0nYWRkJ11cXG4gICAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZS1zaWduXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmVlbi05MDApO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLWRpZmY9J3JlbW92ZSddIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcmVkLTMwMCk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZj0ncmVtb3ZlJ11cXG4gICAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZS1zaWduXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1yZWQtOTAwKTtcXG4gICAgbWFyZ2luLWxlZnQ6IGNhbGMoMjRweCAqIC0xKTtcXG4gICAgbWFyZ2luLXJpZ2h0OiAyNHB4O1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLWRpZmY9J2Vycm9yJ11cXG4gICAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZS1zaWduXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hbWJlci05MDApO1xcbiAgfVxcbiAgXFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0taGludF0ge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIGZvbnQtc2l6ZTogMDtcXG4gICAgaGVpZ2h0OiAwO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLXRhZy1hZGphY2VudD0nZmFsc2UnXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnRzLTEpO1xcbiAgfVxcbiAgLm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fY29tcG9uZW50LXN0YWNrIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtY29sbGFwc2U9J3RydWUnXVxcbiAgICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX19jb21wb25lbnQtc3RhY2tcXG4gICAgY29kZSB7XFxuICAgIG1heC1oZWlnaHQ6IDEyMHB4O1xcbiAgICBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMCwwLDAsMCkgMCUsYmxhY2sgMTAlKTtcXG4gICAgcGFkZGluZy1ib3R0b206IDQwcHg7XFxuICB9XFxuICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX19jb21wb25lbnQtc3RhY2sgY29kZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbiAgICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcXG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLWRpZmZdIHtcXG4gICAgc2Nyb2xsLXNuYXAtYWxpZ246IGNlbnRlcjtcXG4gIH1cXG4gIC5lcnJvci1vdmVybGF5LWh5ZHJhdGlvbi1lcnJvci1kaWZmLXBsdXMtaWNvbiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmVlbi05MDApO1xcbiAgfVxcbiAgLmVycm9yLW92ZXJsYXktaHlkcmF0aW9uLWVycm9yLWRpZmYtbWludXMtaWNvbiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1yZWQtOTAwKTtcXG4gIH1cXG5cIixcIlxcblwiKTtmdW5jdGlvbiBucShlKXtyZXR1cm4gZSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiBlfWZ1bmN0aW9uIG5IKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBuVihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwiaHR0cHM6Ly9uZXh0anMub3JnXCIpfWZ1bmN0aW9uIG4kKGUpe3ZhciB0LG49KDAseC5jKSgyKSxyPWUubWVzc2FnZTtyZXR1cm4gblswXSE9PXI/KHQ9KDAsQS5qc3gpKGVBLHt0ZXh0OnIsbWF0Y2hlcjpuVn0pLG5bMF09cixuWzFdPXQpOnQ9blsxXSx0fWZ1bmN0aW9uIG5XKGUpe3ZhciB0LG4scj0oMCx4LmMpKDUpLG89ZS5lcnJvcixhPVwiZW52aXJvbm1lbnROYW1lXCJpbiBvP28uZW52aXJvbm1lbnROYW1lOlwiXCIsaT1hP1wiWyBcIi5jb25jYXQoYSxcIiBdIFwiKTpcIlwiLGw9by5tZXNzYWdlO3JldHVybiBsLnN0YXJ0c1dpdGgoaSkmJihyWzBdIT09aS5sZW5ndGh8fHJbMV0hPT1sPyh0PWwuc2xpY2UoaS5sZW5ndGgpLHJbMF09aS5sZW5ndGgsclsxXT1sLHJbMl09dCk6dD1yWzJdLGw9dCksclszXSE9PWw/KG49KDAsQS5qc3gpKEEuRnJhZ21lbnQse2NoaWxkcmVuOigwLEEuanN4KShlQSx7dGV4dDpsLG1hdGNoZXI6blZ9KX0pLHJbM109bCxyWzRdPW4pOm49cls0XSxufXZhciBuWT17aHlkcmF0aW9uV2FybmluZzpudWxsLG5vdGVzOm51bGwscmVhY3RPdXRwdXRDb21wb25lbnREaWZmOm51bGx9O2Z1bmN0aW9uIG5LKGUpe3ZhciB0LG4scj1lLmdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzLG89ZS5ydW50aW1lRXJyb3JzLGE9ZS5kZWJ1Z0luZm8saT1lLm9uQ2xvc2UsbD1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sISh0LmluZGV4T2Yobik+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsW1wiZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHNcIixcInJ1bnRpbWVFcnJvcnNcIixcImRlYnVnSW5mb1wiLFwib25DbG9zZVwiXSkscz0oMCx3LnVzZVJlZikobnVsbCksYz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxhLGksbCxzLGMsdSxkLGYscCxoLG09KDAseC5jKSgxNyksZz1lLnJ1bnRpbWVFcnJvcnMseT1lLmdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzLHY9KGE9KDAsdy51c2VTdGF0ZSkoMCksaT0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGEpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGEsMil8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG5IKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIG5IKGUsdCl9fShhLGkpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxiPXZbMF0sQT12WzFdO3M9MD09PWcubGVuZ3RoO3ZhciBDPSh0PW51bGw9PShjPW51bGwhPSh1PWdbYl0pP3U6bnVsbCk/dm9pZCAwOmMuZXJyb3Isbj15LCgwLHcudXNlTWVtbykoZnVuY3Rpb24oKXtpZih2b2lkIDA9PT10KXJldHVybiBuWTt2YXIgZSxyLG8sYT1uKHQpO2lmKG51bGwhPT1hKXJldHVybntoeWRyYXRpb25XYXJuaW5nOm51bGwhPShyPWEud2FybmluZyk/cjpudWxsLG5vdGVzOm51bGwscmVhY3RPdXRwdXRDb21wb25lbnREaWZmOm51bGwhPShvPWEucmVhY3RPdXRwdXRDb21wb25lbnREaWZmKT9vOm51bGx9O2lmKCEodHYoKGU9dCkubWVzc2FnZSl8fC9IeWRyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIHNlcnZlciByZW5kZXJlZCAodGV4dHxIVE1MKSBkaWRuJ3QgbWF0Y2ggdGhlIGNsaWVudFxcLi8udGVzdChlLm1lc3NhZ2UpfHwvQSB0cmVlIGh5ZHJhdGVkIGJ1dCBzb21lIGF0dHJpYnV0ZXMgb2YgdGhlIHNlcnZlciByZW5kZXJlZCBIVE1MIGRpZG4ndCBtYXRjaCB0aGUgY2xpZW50IHByb3BlcnRpZXMuLy50ZXN0KGUubWVzc2FnZSkpKXJldHVybiBuWTt2YXIgaT1mdW5jdGlvbihlKXt2YXIgdD1lLm1lc3NhZ2U7aWYodHYodCkpe3ZhciBuPXRmKHQuc3BsaXQoXCJcXG5cXG5cIiksMikscj1uWzBdLG89blsxXSxhPSh2b2lkIDA9PT1vP1wiXCI6bykudHJpbSgpO3JldHVybnttZXNzYWdlOlwiXCI9PT1hP3QudHJpbSgpOnIudHJpbSgpLGRpZmY6YSxub3RlczpudWxsfX12YXIgaT10Zih0LnNwbGl0KFwiXCIuY29uY2F0KHRtKSksMiksbD1pWzBdLHM9aVsxXSxjPWwudHJpbSgpO2lmKHZvaWQgMCE9PXMmJnMubGVuZ3RoPjEpe3ZhciB1PVtdO3Muc3BsaXQoXCJcXG5cIikuZm9yRWFjaChmdW5jdGlvbihlKXtcIlwiIT09ZS50cmltKCkmJihlLnRyaW0oKS5zdGFydHNXaXRoKFwiYXQgXCIpfHx1LnB1c2goZSkpfSk7dmFyIGQ9dHAoYy5zcGxpdChcIlxcblxcblwiKSksZj1kWzBdLHA9ZC5zbGljZSgxKTtyZXR1cm57bWVzc2FnZTpmLGRpZmY6dS5qb2luKFwiXFxuXCIpLG5vdGVzOnAuam9pbihcIlxcblxcblwiKXx8bnVsbH19dmFyIGg9dHAoYy5zcGxpdChcIlxcblxcblwiKSk7cmV0dXJue21lc3NhZ2U6aFswXSxkaWZmOm51bGwsbm90ZXM6aC5zbGljZSgxKS5qb2luKFwiXFxuXFxuXCIpfX0odCksbD1pLm1lc3NhZ2Uscz1pLm5vdGVzLGM9aS5kaWZmO3JldHVybiBudWxsPT09bD9uWTp7aHlkcmF0aW9uV2FybmluZzpsLG5vdGVzOnMscmVhY3RPdXRwdXRDb21wb25lbnREaWZmOmN9fSxbdCxuXSkpO2lmKHN8fCFjKXJldHVybiBtWzBdIT09Ynx8bVsxXSE9PXM/KGQ9e2lzTG9hZGluZzpzLGFjdGl2ZUlkeDpiLHNldEFjdGl2ZUluZGV4OkEsYWN0aXZlRXJyb3I6bnVsbCxlcnJvckRldGFpbHM6bnVsbCxlcnJvckNvZGU6bnVsbCxlcnJvclR5cGU6bnVsbCxub3RlczpudWxsLGh5ZHJhdGlvbldhcm5pbmc6bnVsbH0sbVswXT1iLG1bMV09cyxtWzJdPWQpOmQ9bVsyXSxkO3ZhciBfPWMuZXJyb3I7bVszXSE9PV8/KGY9KHZvaWQgMD09PShsPV8pP1widW5kZWZpbmVkXCI6bnEobCkpPT09XCJvYmplY3RcIiYmbnVsbCE9PWwmJlwiX19ORVhUX0VSUk9SX0NPREVcImluIGwmJlwic3RyaW5nXCI9PXR5cGVvZiBsLl9fTkVYVF9FUlJPUl9DT0RFP2wuX19ORVhUX0VSUk9SX0NPREU6KHZvaWQgMD09PWw/XCJ1bmRlZmluZWRcIjpucShsKSk9PT1cIm9iamVjdFwiJiZudWxsIT09bCYmXCJkaWdlc3RcImluIGwmJlwic3RyaW5nXCI9PXR5cGVvZiBsLmRpZ2VzdD9sLmRpZ2VzdC5zcGxpdChcIkBcIikuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwiRVwiKX0pOnZvaWQgMCxtWzNdPV8sbVs0XT1mKTpmPW1bNF07dmFyIGs9ZjttWzVdIT09Yy50eXBlfHxtWzZdIT09Xz8ocj1fLHA9XCJyZWNvdmVyYWJsZVwiPT09KG89Yy50eXBlKT9cIlJlY292ZXJhYmxlIFwiLmNvbmNhdChyLm5hbWUpOlwiY29uc29sZVwiPT09bz9cIkNvbnNvbGUgXCIuY29uY2F0KHIubmFtZSk6XCJSdW50aW1lIFwiLmNvbmNhdChyLm5hbWUpLG1bNV09Yy50eXBlLG1bNl09XyxtWzddPXApOnA9bVs3XTt2YXIgRT1wLGo9Qy5ub3RlcyxTPUMuaHlkcmF0aW9uV2FybmluZztyZXR1cm4gbVs4XSE9PWN8fG1bOV0hPT1ifHxtWzEwXSE9PWt8fG1bMTFdIT09Q3x8bVsxMl0hPT1FfHxtWzEzXSE9PVN8fG1bMTRdIT09c3x8bVsxNV0hPT1qPyhoPXtpc0xvYWRpbmc6cyxhY3RpdmVJZHg6YixzZXRBY3RpdmVJbmRleDpBLGFjdGl2ZUVycm9yOmMsZXJyb3JEZXRhaWxzOkMsZXJyb3JDb2RlOmssZXJyb3JUeXBlOkUsbm90ZXM6aixoeWRyYXRpb25XYXJuaW5nOlN9LG1bOF09YyxtWzldPWIsbVsxMF09ayxtWzExXT1DLG1bMTJdPUUsbVsxM109UyxtWzE0XT1zLG1bMTVdPWosbVsxNl09aCk6aD1tWzE2XSxofSh7cnVudGltZUVycm9yczpvLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOnJ9KSx1PWMuaXNMb2FkaW5nLGQ9Yy5lcnJvckNvZGUsZj1jLmVycm9yVHlwZSxwPWMubm90ZXMsaD1jLmh5ZHJhdGlvbldhcm5pbmcsbT1jLmFjdGl2ZUlkeCxnPWMuZXJyb3JEZXRhaWxzLHk9Yy5hY3RpdmVFcnJvcix2PWMuc2V0QWN0aXZlSW5kZXgsYj1uTSh5KSxDPSgwLHcudXNlTWVtbykoZnVuY3Rpb24oKXt2YXIgZSx0PWIuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiFlLmlnbm9yZWQmJiEhZS5vcmlnaW5hbENvZGVGcmFtZSYmISFlLm9yaWdpbmFsU3RhY2tGcmFtZX0pO3JldHVybiBudWxsIT0oZT1iW3RdKT9lOm51bGx9LFtiXSksXz0oMCx3LnVzZUNhbGxiYWNrKShmdW5jdGlvbigpe2lmKCF5KXJldHVyblwiXCI7dmFyIGU9W107ZiYmZS5wdXNoKFwiIyMgRXJyb3IgVHlwZVxcblwiLmNvbmNhdChmKSk7dmFyIHQ9eS5lcnJvcixuPXQubWVzc2FnZTtpZihcImVudmlyb25tZW50TmFtZVwiaW4gdCYmdC5lbnZpcm9ubWVudE5hbWUpe3ZhciByPVwiWyBcIi5jb25jYXQodC5lbnZpcm9ubWVudE5hbWUsXCIgXSBcIik7bi5zdGFydHNXaXRoKHIpJiYobj1uLnNsaWNlKHIubGVuZ3RoKSl9aWYobiYmZS5wdXNoKFwiIyMgRXJyb3IgTWVzc2FnZVxcblwiLmNvbmNhdChuKSksYi5sZW5ndGg+MCl7dmFyIG89Yi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaWdub3JlZH0pO2lmKG8ubGVuZ3RoPjApe3ZhciBhPW8ubWFwKGZ1bmN0aW9uKGUpe2lmKGUub3JpZ2luYWxTdGFja0ZyYW1lKXt2YXIgdD1lLm9yaWdpbmFsU3RhY2tGcmFtZSxuPXQubWV0aG9kTmFtZSxyPXQuZmlsZSxvPXQubGluZTEsYT10LmNvbHVtbjE7cmV0dXJuXCIgICAgYXQgXCIuY29uY2F0KG4sXCIgKFwiKS5jb25jYXQocixcIjpcIikuY29uY2F0KG8sXCI6XCIpLmNvbmNhdChhLFwiKVwiKX1pZihlLnNvdXJjZVN0YWNrRnJhbWUpe3ZhciBpPWUuc291cmNlU3RhY2tGcmFtZSxsPWkubWV0aG9kTmFtZSxzPWkuZmlsZSxjPWkubGluZTEsdT1pLmNvbHVtbjE7cmV0dXJuXCIgICAgYXQgXCIuY29uY2F0KGwsXCIgKFwiKS5jb25jYXQocyxcIjpcIikuY29uY2F0KGMsXCI6XCIpLmNvbmNhdCh1LFwiKVwiKX1yZXR1cm5cIlwifSkuZmlsdGVyKEJvb2xlYW4pO2EubGVuZ3RoPjAmJmUucHVzaChcIlxcblwiLmNvbmNhdChhLmpvaW4oXCJcXG5cIikpKX19aWYobnVsbD09Qz92b2lkIDA6Qy5vcmlnaW5hbENvZGVGcmFtZSl7dmFyIGk9ZVYoKShlJChDLm9yaWdpbmFsQ29kZUZyYW1lKSk7ZS5wdXNoKFwiIyMgQ29kZSBGcmFtZVxcblwiLmNvbmNhdChpKSl9cmV0dXJuXCJcIi5jb25jYXQoZS5qb2luKFwiXFxuXFxuXCIpLFwiXFxuXFxuTmV4dC5qcyB2ZXJzaW9uOiBcIikuY29uY2F0KGwudmVyc2lvbkluZm8uaW5zdGFsbGVkLFwiIChcIikuY29uY2F0KHByb2Nlc3MuZW52Ll9fTkVYVF9CVU5ETEVSLFwiKVxcblwiKX0sW3ksZixDLGIsbC52ZXJzaW9uSW5mb10pO2lmKHUpcmV0dXJuKDAsQS5qc3gpKHQwLHtjaGlsZHJlbjooMCxBLmpzeCkobmkse30pfSk7aWYoIXkpcmV0dXJuIG51bGw7dmFyIGs9eS5lcnJvcixFPVtcInNlcnZlclwiLFwiZWRnZS1zZXJ2ZXJcIl0uaW5jbHVkZXMoblQoayl8fFwiXCIpO3JldHVybigwLEEuanN4cykobmQsKHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7ZXJyb3JDb2RlOmQsZXJyb3JUeXBlOmYsZXJyb3JNZXNzYWdlOmg/KDAsQS5qc3gpKG4kLHttZXNzYWdlOmh9KTooMCxBLmpzeCkoblcse2Vycm9yOmt9KSxvbkNsb3NlOkU/dm9pZCAwOmksZGVidWdJbmZvOmEsZXJyb3I6ayxydW50aW1lRXJyb3JzOm8sYWN0aXZlSWR4Om0sc2V0QWN0aXZlSW5kZXg6dixkaWFsb2dSZXNpemVyUmVmOnMsZ2VuZXJhdGVFcnJvckluZm86X30sbCksbj1uPXtjaGlsZHJlbjpbKDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LW5vdGVzLWNvbnRhaW5lclwiLGNoaWxkcmVuOltwPygwLEEuanN4KShBLkZyYWdtZW50LHtjaGlsZHJlbjooMCxBLmpzeCkoXCJwXCIse2lkOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19ub3Rlc1wiLGNsYXNzTmFtZTpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbm90ZXNcIixjaGlsZHJlbjpwfSl9KTpudWxsLGg/KDAsQS5qc3gpKFwicFwiLHtpZDpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbGlua1wiLGNsYXNzTmFtZTpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbGlua1wiLGNoaWxkcmVuOigwLEEuanN4KShlQSx7dGV4dDpcIlNlZSBtb3JlIGluZm8gaGVyZTogXCIuY29uY2F0KHRnKX0pfSk6bnVsbF19KSxnLnJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZj8oMCxBLmpzeCkoblAse3JlYWN0T3V0cHV0Q29tcG9uZW50RGlmZjpnLnJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZnx8XCJcIn0pOm51bGwsKDAsQS5qc3gpKHcuU3VzcGVuc2Use2ZhbGxiYWNrOigwLEEuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWVycm9yLXN1c3BlbmRlZFwiOiEwfSksY2hpbGRyZW46KDAsQS5qc3gpKG5aLHtlcnJvcjp5LGRpYWxvZ1Jlc2l6ZXJSZWY6c30seS5pZC50b1N0cmluZygpKX0pXX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSx0KSl9ZnVuY3Rpb24gblgoZSl7dmFyIHQsbixyLG8sYSxpLGwscyxjLHUsZCxmLHAsaCxtLGcseSx2LGIsdz0oMCx4LmMpKDE5KTtyZXR1cm4od1swXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhyPSgwLEEuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOlwicGFnZXNcIn0pLHdbMF09cik6cj13WzBdLHdbMV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8obz0oMCxBLmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpbXCJUdXJib3BhY2sgaXMgYW4gaW5jcmVtZW50YWwgYnVuZGxlciBvcHRpbWl6ZWQgZm9yIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQsIHdyaXR0ZW4gaW4gUnVzdCwgYW5kIGJ1aWx0IGludG8gTmV4dC5qcy4gVHVyYm9wYWNrIGNhbiBiZSB1c2VkIGluIE5leHQuanMgaW4gYm90aCB0aGVcIixcIiBcIixyLFwiIGFuZFwiLFwiIFwiLCgwLEEuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOlwiYXBwXCJ9KSxcIiBkaXJlY3RvcmllcyBmb3IgZmFzdGVyIGxvY2FsIGRldmVsb3BtZW50LlwiXX0pLHdbMV09byk6bz13WzFdLHdbMl09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oYT0oMCxBLmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpbXCJUbyBlbmFibGUgVHVyYm9wYWNrLCB1c2UgdGhlXCIsXCIgXCIsKDAsQS5qc3gpKFwiY29kZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlXCIsY2hpbGRyZW46XCItLXR1cmJvcGFja1wifSksXCIgZmxhZyB3aGVuIHJ1bm5pbmcgdGhlIE5leHQuanMgZGV2ZWxvcG1lbnQgc2VydmVyLlwiXX0pLHdbMl09YSk6YT13WzJdLHdbM10hPT1lKT8oaT0oMCxBLmpzeHMpKFwiYXJ0aWNsZVwiLCh0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWFydGljbGVcIn0sZSksbj1uPXtjaGlsZHJlbjpbbyxhXX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSx0KSksd1szXT1lLHdbNF09aSk6aT13WzRdLHdbNV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8obD0oMCxBLmpzeCkoZTgse2FjdGlvbkxhYmVsOlwiQ29weSBOZXh0LmpzIFR1cmJvcGFjayBDb21tYW5kXCIsc3VjY2Vzc0xhYmVsOlwiTmV4dC5qcyBUdXJib3BhY2sgQ29tbWFuZCBDb3BpZWRcIixjb250ZW50OlwiLS10dXJib3BhY2tcIixjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb3B5LWJ1dHRvblwifSksd1s1XT1sKTpsPXdbNV0sd1s2XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhzPSgwLEEuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpcIiAgXCJ9KSxjPSgwLEEuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpcIntcIn0pLHdbNl09cyx3WzddPWMpOihzPXdbNl0sYz13WzddKSx3WzhdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHU9KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpbXCIgIFwiLCgwLEEuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLWtleVwiLGNoaWxkcmVuOidcInNjcmlwdHNcIid9KSxcIjogXCIsXCJ7XCJdfSksd1s4XT11KTp1PXdbOF0sd1s5XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhkPSgwLEEuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLWtleVwiLGNoaWxkcmVuOidcImRldlwiJ30pLHdbOV09ZCk6ZD13WzldLHdbMTBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGY9KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmUgZGV2LXRvb2xzLWluZm8taGlnaGxpZ2h0XCIsY2hpbGRyZW46W1wiICAgIFwiLGQsXCI6XCIsXCIgXCIsKDAsQS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24tdmFsdWVcIixjaGlsZHJlbjonXCJuZXh0IGRldiAtLXR1cmJvcGFja1wiJ30pLFwiLFwiXX0pLHdbMTBdPWYpOmY9d1sxMF0sd1sxMV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8ocD0oMCxBLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stanNvbi1rZXlcIixjaGlsZHJlbjonXCJidWlsZFwiJ30pLHdbMTFdPXApOnA9d1sxMV0sd1sxMl09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oaD0oMCxBLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZVwiLGNoaWxkcmVuOltcIiAgICBcIixwLFwiOlwiLFwiIFwiLCgwLEEuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLXZhbHVlXCIsY2hpbGRyZW46J1wibmV4dCBidWlsZFwiJ30pLFwiLFwiXX0pLHdbMTJdPWgpOmg9d1sxMl0sd1sxM109PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8obT0oMCxBLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stanNvbi1rZXlcIixjaGlsZHJlbjonXCJzdGFydFwiJ30pLHdbMTNdPW0pOm09d1sxM10sd1sxNF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZz0oMCxBLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZVwiLGNoaWxkcmVuOltcIiAgICBcIixtLFwiOlwiLFwiIFwiLCgwLEEuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLXZhbHVlXCIsY2hpbGRyZW46J1wibmV4dCBzdGFydFwiJ30pLFwiLFwiXX0pLHdbMTRdPWcpOmc9d1sxNF0sd1sxNV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oeT0oMCxBLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stanNvbi1rZXlcIixjaGlsZHJlbjonXCJsaW50XCInfSksd1sxNV09eSk6eT13WzE1XSx3WzE2XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh2PSgwLEEuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWNvbnRhaW5lclwiLGNoaWxkcmVuOigwLEEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9ja1wiLGNoaWxkcmVuOltsLCgwLEEuanN4KShcInByZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLXByZVwiLGNoaWxkcmVuOigwLEEuanN4cykoXCJjb2RlXCIse2NoaWxkcmVuOltzLGMsdSxmLGgsZywoMCxBLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZVwiLGNoaWxkcmVuOltcIiAgICBcIix5LFwiOlwiLFwiIFwiLCgwLEEuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLXZhbHVlXCIsY2hpbGRyZW46J1wibmV4dCBsaW50XCInfSldfSksKDAsQS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZVwiLGNoaWxkcmVuOlwiICB9XCJ9KSwoMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lXCIsY2hpbGRyZW46XCJ9XCJ9KSwoMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lXCIsY2hpbGRyZW46XCIgIFwifSldfSl9KV19KX0pLHdbMTZdPXYpOnY9d1sxNl0sd1sxN10hPT1pPyhiPSgwLEEuanN4cykoQS5GcmFnbWVudCx7Y2hpbGRyZW46W2ksdl19KSx3WzE3XT1pLHdbMThdPWIpOmI9d1sxOF0sYn1mdW5jdGlvbiBuRyhlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9ZSxvPXQsYT1uW3RdLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gblEoZSx0KXtyZXR1cm4gdD1udWxsIT10P3Q6e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKSl9KSxlfWZ1bmN0aW9uIG5KKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSwhKHQuaW5kZXhPZihuKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb31mdW5jdGlvbiBuMChlKXt2YXIgdCxuLHIsbyxhLGksbD0oMCx4LmMpKDEwKTtsWzBdIT09ZT8odD1uSihlLFtcInJvdXRlclR5cGVcIl0pLG49ZS5yb3V0ZXJUeXBlLGxbMF09ZSxsWzFdPXQsbFsyXT1uKToodD1sWzFdLG49bFsyXSksbFszXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhyPSgwLEEuanN4cykoXCJwXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLXBhcmFncmFwaFwiLGNoaWxkcmVuOltcIlRoZSBwYXRoXCIsXCIgXCIsKDAsQS5qc3gpKFwiY29kZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlXCIsY2hpbGRyZW46d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfSksXCIgXCIsJ2lzIG1hcmtlZCBhcyBcInN0YXRpY1wiIHNpbmNlIGl0IHdpbGwgYmUgcHJlcmVuZGVyZWQgZHVyaW5nIHRoZSBidWlsZCB0aW1lLiddfSksbFszXT1yKTpyPWxbM107dmFyIHM9XCJwYWdlc1wiPT09bj9cImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vZGF0YS1mZXRjaGluZy9pbmNyZW1lbnRhbC1zdGF0aWMtcmVnZW5lcmF0aW9uXCI6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9kYXRhLWZldGNoaW5nL2luY3JlbWVudGFsLXN0YXRpYy1yZWdlbmVyYXRpb25cIjtyZXR1cm4gbFs0XSE9PXM/KG89KDAsQS5qc3hzKShcInBcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tcGFyYWdyYXBoXCIsY2hpbGRyZW46W1wiV2l0aCBTdGF0aWMgUmVuZGVyaW5nLCByb3V0ZXMgYXJlIHJlbmRlcmVkIGF0IGJ1aWxkIHRpbWUsIG9yIGluIHRoZSBiYWNrZ3JvdW5kIGFmdGVyXCIsXCIgXCIsKDAsQS5qc3gpKFwiYVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1saW5rXCIsaHJlZjpzLHRhcmdldDpcIl9ibGFua1wiLHJlbDpcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixjaGlsZHJlbjpcImRhdGEgcmV2YWxpZGF0aW9uXCJ9KSxcIi5cIl19KSxsWzRdPXMsbFs1XT1vKTpvPWxbNV0sbFs2XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhhPSgwLEEuanN4KShcInBcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tcGFyYWdyYXBoXCIsY2hpbGRyZW46XCJTdGF0aWMgcmVuZGVyaW5nIGlzIHVzZWZ1bCB3aGVuIGEgcm91dGUgaGFzIGRhdGEgdGhhdCBpcyBub3QgcGVyc29uYWxpemVkIHRvIHRoZSB1c2VyIGFuZCBjYW4gYmUga25vd24gYXQgYnVpbGQgdGltZSwgc3VjaCBhcyBhIHN0YXRpYyBibG9nIHBvc3Qgb3IgYSBwcm9kdWN0IHBhZ2UuXCJ9KSxsWzZdPWEpOmE9bFs2XSxsWzddIT09dHx8bFs4XSE9PW8/KGk9KDAsQS5qc3hzKShcImFydGljbGVcIixuUShuRyh7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tYXJ0aWNsZVwifSx0KSx7Y2hpbGRyZW46W3IsbyxhXX0pKSxsWzddPXQsbFs4XT1vLGxbOV09aSk6aT1sWzldLGl9ZnVuY3Rpb24gbjEoZSl7dmFyIHQsbixyLG8sYSxpLGwscz0oMCx4LmMpKDExKTtyZXR1cm4gc1swXSE9PWU/KHQ9bkooZSxbXCJyb3V0ZXJUeXBlXCJdKSxuPWUucm91dGVyVHlwZSxzWzBdPWUsc1sxXT10LHNbMl09bik6KHQ9c1sxXSxuPXNbMl0pLHNbM109PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8ocj0oMCxBLmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjp3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9KSxzWzNdPXIpOnI9c1szXSxzWzRdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KG89KDAsQS5qc3hzKShcInBcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tcGFyYWdyYXBoXCIsY2hpbGRyZW46W1wiVGhlIHBhdGhcIixcIiBcIixyLFwiIFwiLCdpcyBtYXJrZWQgYXMgXCJkeW5hbWljXCIgc2luY2UgaXQgd2lsbCBiZSByZW5kZXJlZCBmb3IgZWFjaCB1c2VyIGF0JyxcIiBcIiwoMCxBLmpzeCkoXCJzdHJvbmdcIix7Y2hpbGRyZW46XCJyZXF1ZXN0IHRpbWVcIn0pLFwiLlwiXX0pLGE9KDAsQS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpcIkR5bmFtaWMgcmVuZGVyaW5nIGlzIHVzZWZ1bCB3aGVuIGEgcm91dGUgaGFzIGRhdGEgdGhhdCBpcyBwZXJzb25hbGl6ZWQgdG8gdGhlIHVzZXIgb3IgaGFzIGluZm9ybWF0aW9uIHRoYXQgY2FuIG9ubHkgYmUga25vd24gYXQgcmVxdWVzdCB0aW1lLCBzdWNoIGFzIGNvb2tpZXMgb3IgdGhlIFVSTCdzIHNlYXJjaCBwYXJhbXMuXCJ9KSxzWzRdPW8sc1s1XT1hKToobz1zWzRdLGE9c1s1XSksc1s2XSE9PW4/KGk9XCJwYWdlc1wiPT09bj8oMCxBLmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYWdyYXBoXCIsY2hpbGRyZW46W1wiRXhwb3J0aW5nIHRoZVwiLFwiIFwiLCgwLEEuanN4KShcImFcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tbGlua1wiLGhyZWY6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9wYWdlcy9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL2RhdGEtZmV0Y2hpbmcvZ2V0LXNlcnZlci1zaWRlLXByb3BzXCIsdGFyZ2V0OlwiX2JsYW5rXCIscmVsOlwibm9vcGVuZXIgbm9yZWZlcnJlclwiLGNoaWxkcmVuOlwiZ2V0U2VydmVyU2lkZVByb3BzXCJ9KSxcIiBcIixcImZ1bmN0aW9uIHdpbGwgb3B0IHRoZSByb3V0ZSBpbnRvIGR5bmFtaWMgcmVuZGVyaW5nLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBzZXJ2ZXIgb24gZXZlcnkgcmVxdWVzdC5cIl19KTooMCxBLmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpbXCJEdXJpbmcgcmVuZGVyaW5nLCBpZiBhXCIsXCIgXCIsKDAsQS5qc3gpKFwiYVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1saW5rXCIsaHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL3JlbmRlcmluZy9zZXJ2ZXItY29tcG9uZW50cyNkeW5hbWljLWFwaXNcIix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsY2hpbGRyZW46XCJEeW5hbWljIEFQSVwifSksXCIgXCIsXCJvciBhXCIsXCIgXCIsKDAsQS5qc3gpKFwiYVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1saW5rXCIsaHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy9mZXRjaFwiLHRhcmdldDpcIl9ibGFua1wiLHJlbDpcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixjaGlsZHJlbjpcImZldGNoXCJ9KSxcIiBcIixcIm9wdGlvbiBvZlwiLFwiIFwiLCgwLEEuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOlwieyBjYWNoZTogJ25vLXN0b3JlJyB9XCJ9KSxcIiBcIixcImlzIGRpc2NvdmVyZWQsIE5leHQuanMgd2lsbCBzd2l0Y2ggdG8gZHluYW1pY2FsbHkgcmVuZGVyaW5nIHRoZSB3aG9sZSByb3V0ZS5cIl19KSxzWzZdPW4sc1s3XT1pKTppPXNbN10sc1s4XSE9PXR8fHNbOV0hPT1pPyhsPSgwLEEuanN4cykoXCJhcnRpY2xlXCIsblEobkcoe2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWFydGljbGVcIn0sdCkse2NoaWxkcmVuOltvLGEsaV19KSksc1s4XT10LHNbOV09aSxzWzEwXT1sKTpsPXNbMTBdLGx9dmFyIG4yPXtwYWdlczp7c3RhdGljOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvcGFnZXMvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc3RhdGljLXNpdGUtZ2VuZXJhdGlvblwiLGR5bmFtaWM6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9wYWdlcy9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL3JlbmRlcmluZy9zZXJ2ZXItc2lkZS1yZW5kZXJpbmdcIn0sYXBwOntzdGF0aWM6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc2VydmVyLWNvbXBvbmVudHMjc3RhdGljLXJlbmRlcmluZy1kZWZhdWx0XCIsZHluYW1pYzpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL3JlbmRlcmluZy9zZXJ2ZXItY29tcG9uZW50cyNkeW5hbWljLXJlbmRlcmluZ1wifX07ZnVuY3Rpb24gbjQoZSl7dmFyIHQsbixyLG8sYT0oMCx4LmMpKDgpO3JldHVybiBhWzBdIT09ZT8obj1uSihlLFtcInJvdXRlclR5cGVcIixcImlzU3RhdGljUm91dGVcIl0pLHI9ZS5yb3V0ZXJUeXBlLHQ9ZS5pc1N0YXRpY1JvdXRlLGFbMF09ZSxhWzFdPXQsYVsyXT1uLGFbM109cik6KHQ9YVsxXSxuPWFbMl0scj1hWzNdKSxhWzRdIT09dHx8YVs1XSE9PW58fGFbNl0hPT1yPyhvPXQ/KDAsQS5qc3gpKG4wLG5HKHtyb3V0ZXJUeXBlOnJ9LG4pKTooMCxBLmpzeCkobjEsbkcoe3JvdXRlclR5cGU6cn0sbikpLGFbNF09dCxhWzVdPW4sYVs2XT1yLGFbN109byk6bz1hWzddLG99ZnVuY3Rpb24gbjUoKXt2YXIgZSx0PSgwLHguYykoMSk7cmV0dXJuIHRbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZT0oMCxBLmpzeCkoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLGZpbGw6XCJub25lXCIsY2hpbGRyZW46KDAsQS5qc3gpKFwicGF0aFwiLHtmaWxsOlwiY3VycmVudENvbG9yXCIsZmlsbFJ1bGU6XCJldmVub2RkXCIsZDpcIm0uMTkxIDIuMDYzLjU2LjQ5OCAxMy41IDEyIC41NjEuNDk4Ljk5Ny0xLjEyMS0uNTYtLjQ5OC0xLjgxLTEuNjA4IDIuODgtMy4zNDJ2LS45OGwtMy4yMDQtMy43MkMxMC42NDUuOTIzIDYuMzY1LjY4NiAzLjU5NCAzLjA4TDEuNzQ4IDEuNDQgMS4xODguOTQuMTkgMi4wNjNaTTE0Ljc2MSA4bC0yLjQ0MiAyLjgzNi0xLjY1LTEuNDY2YTMuMDAxIDMuMDAxIDAgMCAwLTQuMzQyLTMuODZsLTEuNi0xLjQyMmE1LjI1MyA1LjI1MyAwIDAgMSA3LjI1MS42ODJMMTQuNzYgOFpNNy41MjYgNi41NzZsMS45NDIgMS43MjdhMS40OTkgMS40OTkgMCAwIDAtMS45NDItMS43MjdabS03Ljg0NS45MzUgMS43MjItMiAxLjEzNy45NzlMMS4yNCA4bDIuNzgyIDMuMjNBNS4yNSA1LjI1IDAgMCAwIDkuOSAxMi43MDNsLjU0IDEuNGE2Ljc1MSA2Ljc1MSAwIDAgMS03LjU1NS0xLjg5MkwtLjMxOCA4LjQ5di0uOThaXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KX0pLHRbMF09ZSk6ZT10WzBdLGV9ZnVuY3Rpb24gbjMoKXt2YXIgZSx0LG49KDAseC5jKSgyKTtyZXR1cm4gblswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhlPSgwLEEuanN4KShcImdcIix7Y2xpcFBhdGg6XCJ1cmwoI2xpZ2h0X2ljb25fY2xpcF9wYXRoKVwiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOC43NS43NVYwaC0xLjV2MmgxLjVWLjc1Wk0zLjI2IDQuMzJsLS41My0uNTMtLjM1NC0uMzUzLS41My0uNTMgMS4wNi0xLjA2MS41My41My4zNTQuMzU0LjUzLjUzLTEuMDYgMS4wNlptOC40Mi0xLjA2LjUzLS41My4zNTMtLjM1NC41My0uNTMgMS4wNjEgMS4wNi0uNTMuNTMtLjM1NC4zNTQtLjUzLjUzLTEuMDYtMS4wNlpNOCAxMS4yNWEzLjI1IDMuMjUgMCAxIDAgMC02LjUgMy4yNSAzLjI1IDAgMCAwIDAgNi41Wm0wIDEuNWE0Ljc1IDQuNzUgMCAxIDAgMC05LjUgNC43NSA0Ljc1IDAgMCAwIDAgOS41Wm02LTUuNWgydjEuNWgtMnYtMS41Wm0tMTMuMjUgMEgwdjEuNWgydi0xLjVILjc1Wm0xLjYyIDUuMzItLjUzLjUzIDEuMDYgMS4wNi41My0uNTMuMzU0LS4zNTMuNTMtLjUzLTEuMDYtMS4wNjEtLjUzLjUzLS4zNTQuMzU0Wm0xMC4yIDEuMDYuNTMuNTMgMS4wNi0xLjA2LS41My0uNTMtLjM1NC0uMzU0LS41My0uNTMtMS4wNiAxLjA2LjUzLjUzLjM1My4zNTRaTTguNzUgMTR2MmgtMS41di0yaDEuNVpcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pfSksblswXT1lKTplPW5bMF0sblsxXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PSgwLEEuanN4cykoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjBcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLGNoaWxkcmVuOltlLCgwLEEuanN4KShcImRlZnNcIix7Y2hpbGRyZW46KDAsQS5qc3gpKFwiY2xpcFBhdGhcIix7aWQ6XCJsaWdodF9pY29uX2NsaXBfcGF0aFwiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGQ6XCJNMCAwaDE2djE2SDB6XCJ9KX0pfSldfSksblsxXT10KTp0PW5bMV0sdH1mdW5jdGlvbiBuNigpe3ZhciBlLHQ9KDAseC5jKSgxKTtyZXR1cm4gdFswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhlPSgwLEEuanN4KShcInN2Z1wiLHtcImRhdGEtdGVzdGlkXCI6XCJnZWlzdC1pY29uXCIsaGVpZ2h0OlwiMTZcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLHdpZHRoOlwiMTZcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMS41IDguMDAwMDVDMS41IDUuNTMwODkgMi45OTE5OCAzLjQwOTMyIDUuMTIzNDkgMi40ODg4OUM0Ljg4MTM2IDMuMTk4NTggNC43NSAzLjk1OTM2IDQuNzUgNC43NTAxQzQuNzUgOC42MTYwOSA3Ljg4NDAxIDExLjc1MDEgMTEuNzUgMTEuNzUwMUMxMS44OTk1IDExLjc1MDEgMTIuMDQ4IDExLjc0NTQgMTIuMTk1MyAxMS43MzYxQzExLjA5NTUgMTMuMTE2NCA5LjQwMDQ3IDE0LjAwMDEgNy41IDE0LjAwMDFDNC4xODYyOSAxNC4wMDAxIDEuNSAxMS4zMTM4IDEuNSA4LjAwMDA1Wk02LjQxNzA2IDAuNTc3NzU5QzIuNzg3ODQgMS4xMDMxIDAgNC4yMjUzNiAwIDguMDAwMDVDMCAxMi4xNDIyIDMuMzU3ODYgMTUuNTAwMSA3LjUgMTUuNTAwMUMxMC41Nzk4IDE1LjUwMDEgMTMuMjI0NCAxMy42NDM4IDE0LjM3OTIgMTAuOTkyMUwxMy40NTg4IDkuOTc5N0MxMi45MjE4IDEwLjE1NSAxMi4zNDc4IDEwLjI1MDEgMTEuNzUgMTAuMjUwMUM4LjcxMjQzIDEwLjI1MDEgNi4yNSA3Ljc4NzY3IDYuMjUgNC43NTAxQzYuMjUgMy42MzQzMSA2LjU4MTQ2IDIuNTk4MjMgNy4xNTExMSAxLjczMjE3TDYuNDE3MDYgMC41Nzc3NTlaTTEzLjI1IDFWMS43NVYyLjc1TDE0LjI1IDIuNzVIMTVWNC4yNUgxNC4yNUgxMy4yNVY1LjI1VjZIMTEuNzVWNS4yNVY0LjI1SDEwLjc1TDEwIDQuMjVWMi43NUgxMC43NUwxMS43NSAyLjc1VjEuNzVWMUgxMy4yNVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pLHRbMF09ZSk6ZT10WzBdLGV9ZnVuY3Rpb24gbjkoKXt2YXIgZSx0PSgwLHguYykoMSk7cmV0dXJuIHRbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZT0oMCxBLmpzeCkoXCJzdmdcIix7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMCAyYTEgMSAwIDAgMSAxLTFoMTRhMSAxIDAgMCAxIDEgMXY4LjVhMSAxIDAgMCAxLTEgMUg4Ljc1djNoMS43NVYxNmgtNXYtMS41aDEuNzV2LTNIMWExIDEgMCAwIDEtMS0xVjJabTEuNS41VjEwaDEzVjIuNWgtMTNaXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KX0pLHRbMF09ZSk6ZT10WzBdLGV9ZnVuY3Rpb24gbjgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIG43KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLCF0fHxhLmxlbmd0aCE9PXQpO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLHQpfHxydChlLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHJlKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBuOChlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxydChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gcnQoZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbjgoZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uKXJldHVybiBBcnJheS5mcm9tKG4pO2lmKFwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gbjgoZSx0KX19ZnVuY3Rpb24gcm4oKXt2YXIgZSx0LG49KGU9W1wiXFxuICAuc2hvcnRjdXQtcmVjb3JkZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgZ2FwOiA4cHg7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stc2Fucyk7XFxuXFxuICAgIC5zaG9ydGN1dC1yZWNvcmRlci1idXR0b24ge1xcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICBnYXA6IDRweDtcXG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgICBib3JkZXI6IDFweCBkYXNoZWQgdmFyKC0tY29sb3ItZ3JheS01MDApO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbGcpO1xcbiAgICAgIHBhZGRpbmc6IDZweCA4cHg7XFxuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gICAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAxNTBtcyB2YXIoLS10aW1pbmctc3dpZnQpO1xcblxcbiAgICAgICZbZGF0YS1oYXMtc2hvcnRjdXQ9J3RydWUnXSB7XFxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuXFxuICAgICAgICAmOmhvdmVyIHtcXG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTUwMCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcblxcbiAgICAgICY6aG92ZXIge1xcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTYwMCk7XFxuICAgICAgfVxcblxcbiAgICAgICY6OnBsYWNlaG9sZGVyIHtcXG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgICAgfVxcblxcbiAgICAgICZbZGF0YS1wcmlzdGluZT0nZmFsc2UnXTo6cGxhY2Vob2xkZXIge1xcbiAgICAgICAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgICAgIH1cXG5cXG4gICAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAga2JkIHtcXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLXNhbnMpO1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcXG4gICAgICBtaW4td2lkdGg6IDIwcHg7XFxuICAgICAgaGVpZ2h0OiAyMHB4O1xcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcXG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuXFxuICAgICAgJltkYXRhLXN5bWJvbD0nZmFsc2UnXSB7XFxuICAgICAgICBwYWRkaW5nOiAwIDRweDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgLnNob3J0Y3V0LXJlY29yZGVyLWNsZWFyLWJ1dHRvbiB7XFxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICAgIHdpZHRoOiAyMHB4O1xcbiAgICAgIGhlaWdodDogMjBweDtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTUwbXMgdmFyKC0tdGltaW5nLXN3aWZ0KTtcXG5cXG4gICAgICAmOmhvdmVyIHtcXG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gICAgICB9XFxuXFxuICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgIH1cXG5cXG4gICAgICBzdmcge1xcbiAgICAgICAgd2lkdGg6IDE0cHg7XFxuICAgICAgICBoZWlnaHQ6IDE0cHg7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXFxuICAuc2hvcnRjdXQtcmVjb3JkZXIta2V5cyB7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiAycHg7XFxuICB9XFxuXFxuICAuc2hvcnRjdXQtcmVjb3JkZXItdG9vbHRpcCB7XFxuICAgIC0tZ2FwOiA4cHg7XFxuICAgIC0tYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tYmFja2dyb3VuZCk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIHBhZGRpbmc6IDRweCA4cHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBib3R0b206IGNhbGMoMTAwJSArIHZhcigtLWdhcCkpO1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHNjYWxlOiAwLjk2O1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgdHJhbnNpdGlvbjpcXG4gICAgICBvcGFjaXR5IDE1MG1zIHZhcigtLXRpbWluZy1zd2lmdCksXFxuICAgICAgc2NhbGUgMTUwbXMgdmFyKC0tdGltaW5nLXN3aWZ0KTtcXG5cXG4gICAgJltkYXRhLXNob3c9J3RydWUnXSB7XFxuICAgICAgb3BhY2l0eTogMTtcXG4gICAgICBzY2FsZTogMTtcXG4gICAgfVxcblxcbiAgICBzdmcge1xcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICAgICAgYm90dG9tOiAtNnB4O1xcbiAgICAgIGxlZnQ6IDUwJTtcXG4gICAgfVxcblxcbiAgICAuc2hvcnRjdXQtcmVjb3JkZXItc3RhdHVzIHtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgZ2FwOiA2cHg7XFxuICAgIH1cXG5cXG4gICAgLnNob3J0Y3V0LXJlY29yZGVyLXN0YXR1cy1pY29uIHtcXG4gICAgICB3aWR0aDogN3B4O1xcbiAgICAgIGhlaWdodDogN3B4O1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gICAgICBmbGV4LXNocmluazogMDtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1yZWQtNzAwKTtcXG5cXG4gICAgICAmW2RhdGEtc3VjY2Vzcz0ndHJ1ZSddIHtcXG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyZWVuLTcwMCk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdLHR8fCh0PWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKHQpfX0pKSk7cmV0dXJuIHJuPWZ1bmN0aW9uKCl7cmV0dXJuIG59LG59dmFyIHJyPVtcIk1ldGFcIixcIkNvbnRyb2xcIixcIkN0cmxcIixcIkFsdFwiLFwiT3B0aW9uXCIsXCJTaGlmdFwiXTtmdW5jdGlvbiBybyhlKXt2YXIgdCxuLHIsbyxhLGksbCxzLGMsdSxkLGYscCxoPSgwLHguYykoMzMpLG09ZS52YWx1ZSxnPWUub25DaGFuZ2UseT1uNygoMCx3LnVzZVN0YXRlKSghMCksMiksdj15WzBdLGI9eVsxXSxDPW43KCgwLHcudXNlU3RhdGUpKCExKSwyKSxfPUNbMF0saz1DWzFdO2hbMF0hPT1tPyh0PW51bGwhPW0/bTpbXSxoWzBdPW0saFsxXT10KTp0PWhbMV07dmFyIEU9bjcoKDAsdy51c2VTdGF0ZSkodCksMiksaj1FWzBdLFM9RVsxXSxPPW43KCgwLHcudXNlU3RhdGUpKCExKSwyKSxCPU9bMF0sUD1PWzFdLEk9KDAsdy51c2VSZWYpKG51bGwpLFQ9KDAsdy51c2VSZWYpKG51bGwpLHo9ISFtfHxqLmxlbmd0aD4wO2hbMl0hPT1nfHxoWzNdIT09dnx8aFs0XSE9PV8/KG49ZnVuY3Rpb24oZSl7aWYoZS50YXJnZXQ9PT1ULmN1cnJlbnQmJlwiVGFiXCIhPT1lLmtleSl7SS5jdXJyZW50JiZjbGVhclRpbWVvdXQoSS5jdXJyZW50KSxffHxrKCEwKSx2JiYoUyhbXSksYighMSkpO3ZhciB0PWZ1bmN0aW9uKGUpe0kuY3VycmVudD13aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe1AoITApLGcoZS5qb2luKFwiK1wiKSksSS5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ayghMSl9LDFlMyl9LDE4MCl9O2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLFMoZnVuY3Rpb24obil7aWYobi5pbmNsdWRlcyhlLmNvZGUpfHxuLmluY2x1ZGVzKGUua2V5KSlyZXR1cm4gbjtpZighcnIuaW5jbHVkZXMoZS5rZXkpKXt2YXIgcj1uLmZpbmRJbmRleChybCk7aWYoLTEhPT1yKXt2YXIgbz1yZShuKTtyZXR1cm4gb1tyXT1lLmNvZGUsdChvKSxvfXZhciBhPXJlKG4pLmNvbmNhdChbZS5jb2RlXSk7cmV0dXJuIHQoYSksYX1mb3IodmFyIGk9cmUobiksbD1yci5pbmRleE9mKGUua2V5KSxzPTAsYz0wO2M8aS5sZW5ndGg7YysrKWlmKHJyLmluY2x1ZGVzKGlbY10pKXtpZihsPHJyLmluZGV4T2YoaVtjXSkpe3M9YzticmVha31zPWMrMX1lbHNlIGJyZWFrO3JldHVybiBpLnNwbGljZShzLDAsZS5rZXkpLHQoaSksaX0pfX0saFsyXT1nLGhbM109dixoWzRdPV8saFs1XT1uKTpuPWhbNV07dmFyIEQ9bjtoWzZdIT09Zz8ocj1mdW5jdGlvbigpe3ZhciBlO251bGw9PShlPVQuY3VycmVudCl8fGUuZm9jdXMoKSxTKFtdKSxQKCExKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ayghMCl9KSxnKG51bGwpfSxoWzZdPWcsaFs3XT1yKTpyPWhbN107dmFyIEw9cjtoWzhdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KG89ZnVuY3Rpb24oKXtQKCExKSxrKCExKSxiKCEwKX0saFs4XT1vKTpvPWhbOF07dmFyIE49bztoWzldPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGE9ZnVuY3Rpb24oKXt2YXIgZTtJLmN1cnJlbnQmJmNsZWFyVGltZW91dChJLmN1cnJlbnQpLGsoITApLG51bGw9PShlPVQuY3VycmVudCl8fGUuZm9jdXMoKX0saFs5XT1hKTphPWhbOV07dmFyIFI9YTtoWzEwXSE9PXp8fGhbMTFdIT09aj8oaT16PygwLEEuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJzaG9ydGN1dC1yZWNvcmRlci1rZXlzXCIsY2hpbGRyZW46ai5tYXAocmkpfSk6XCJSZWNvcmQgU2hvcnRjdXRcIixoWzEwXT16LGhbMTFdPWosaFsxMl09aSk6aT1oWzEyXSxoWzEzXSE9PUx8fGhbMTRdIT09ej8obD16JiYoMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2hvcnRjdXQtcmVjb3JkZXItY2xlYXItYnV0dG9uXCIscm9sZTpcImJ1dHRvblwiLG9uQ2xpY2s6TCxvbkZvY3VzOnJhLG9uS2V5RG93bjpmdW5jdGlvbihlKXsoXCJFbnRlclwiPT09ZS5rZXl8fFwiIFwiPT09ZS5rZXkpJiYoTCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxcImFyaWEtbGFiZWxcIjpcIkNsZWFyIHNob3J0Y3V0XCIsdGFiSW5kZXg6MCxjaGlsZHJlbjooMCxBLmpzeCkocmQse30pfSksaFsxM109TCxoWzE0XT16LGhbMTVdPWwpOmw9aFsxNV0saFsxNl0hPT1EfHxoWzE3XSE9PXp8fGhbMThdIT09aXx8aFsxOV0hPT1sPyhzPSgwLEEuanN4cykoXCJidXR0b25cIix7Y2xhc3NOYW1lOlwic2hvcnRjdXQtcmVjb3JkZXItYnV0dG9uXCIscmVmOlQsb25DbGljazpSLG9uRm9jdXM6UixvbkJsdXI6TixvbktleURvd246RCxcImRhdGEtaGFzLXNob3J0Y3V0XCI6eixcImRhdGEtc2hvcnRjdXQtcmVjb3JkZXJcIjpcInRydWVcIixjaGlsZHJlbjpbaSxsXX0pLGhbMTZdPUQsaFsxN109eixoWzE4XT1pLGhbMTldPWwsaFsyMF09cyk6cz1oWzIwXSxoWzIxXSE9PUI/KGM9KDAsQS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNob3J0Y3V0LXJlY29yZGVyLXN0YXR1cy1pY29uXCIsXCJkYXRhLXN1Y2Nlc3NcIjpCfSksaFsyMV09QixoWzIyXT1jKTpjPWhbMjJdO3ZhciBNPUI/XCJTaG9ydGN1dCBzZXRcIjpcIlJlY29yZGluZ1wiO3JldHVybiBoWzIzXSE9PU18fGhbMjRdIT09Yz8odT0oMCxBLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNob3J0Y3V0LXJlY29yZGVyLXN0YXR1c1wiLGNoaWxkcmVuOltjLE1dfSksaFsyM109TSxoWzI0XT1jLGhbMjVdPXUpOnU9aFsyNV0saFsyNl09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZD0oMCxBLmpzeCkocnMse30pLGhbMjZdPWQpOmQ9aFsyNl0saFsyN10hPT1ffHxoWzI4XSE9PXU/KGY9KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJzaG9ydGN1dC1yZWNvcmRlci10b29sdGlwXCIsXCJkYXRhLXNob3dcIjpfLGNoaWxkcmVuOlt1LGRdfSksaFsyN109XyxoWzI4XT11LGhbMjldPWYpOmY9aFsyOV0saFszMF0hPT1mfHxoWzMxXSE9PXM/KHA9KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJzaG9ydGN1dC1yZWNvcmRlclwiLGNoaWxkcmVuOltzLGZdfSksaFszMF09ZixoWzMxXT1zLGhbMzJdPXApOnA9aFszMl0scH1mdW5jdGlvbiByYShlKXtyZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKX1mdW5jdGlvbiByaShlKXtyZXR1cm4oMCxBLmpzeCkocmMse2NoaWxkcmVuOmV9LGUpfWZ1bmN0aW9uIHJsKGUpe3JldHVybiFyci5pbmNsdWRlcyhlKX1mdW5jdGlvbiBycygpe3ZhciBlLHQ9KDAseC5jKSgxKTtyZXR1cm4gdFswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhlPSgwLEEuanN4KShcInN2Z1wiLHtmaWxsOlwibm9uZVwiLGhlaWdodDpcIjZcIix2aWV3Qm94OlwiMCAwIDE0IDZcIix3aWR0aDpcIjE0XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZDpcIk0xMy44Mjg0IDBIMC4xNzE1N0MwLjcwMjAwMyAwIDEuMjEwNzEgMC4yMTA3MTQgMS41ODU3OCAwLjU4NTc4N0w1LjU4NTc4IDQuNTg1NzlDNi4zNjY4MyA1LjM2Njg0IDcuNjMzMTYgNS4zNjY4MyA4LjQxNDIxIDQuNTg1NzlMMTIuNDE0MiAwLjU4NTc4NkMxMi43ODkzIDAuMjEwNzE0IDEzLjI5OCAwIDEzLjgyODQgMFpcIixmaWxsOlwidmFyKC0tYmFja2dyb3VuZClcIn0pfSksdFswXT1lKTplPXRbMF0sZX1mdW5jdGlvbiByYyhlKXt2YXIgdCxuLHIsbyxhPSgwLHguYykoOSksaT1lLmNoaWxkcmVuO2FbMF0hPT1pPyh0PWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlXCJNZXRhXCI6cmV0dXJuKDAsQS5qc3gpKHJ1LHt9KTtjYXNlXCJBbHRcIjpjYXNlXCJPcHRpb25cIjpyZXR1cm5cIuKMpVwiO2Nhc2VcIkNvbnRyb2xcIjpjYXNlXCJDdHJsXCI6cmV0dXJuXCJDdHJsXCI7Y2FzZVwiU2hpZnRcIjpyZXR1cm5cIuKHp1wiO2Nhc2VcIkVudGVyXCI6cmV0dXJuXCLij45cIjtjYXNlXCJFc2NhcGVcIjpjYXNlXCJFc2NcIjpyZXR1cm5cIkVzY1wiO2Nhc2VcIiBcIjpjYXNlXCJTcGFjZVwiOmNhc2VcIlNwYWNlYmFyXCI6cmV0dXJuXCJTcGFjZVwiO2Nhc2VcIkFycm93VXBcIjpyZXR1cm5cIuKGkVwiO2Nhc2VcIkFycm93RG93blwiOnJldHVyblwi4oaTXCI7Y2FzZVwiQXJyb3dMZWZ0XCI6cmV0dXJuXCLihpBcIjtjYXNlXCJBcnJvd1JpZ2h0XCI6cmV0dXJuXCLihpJcIjtjYXNlXCJUYWJcIjpyZXR1cm5cIlRhYlwiO2Nhc2VcIkJhY2tzcGFjZVwiOnJldHVyblwi4oyrXCI7Y2FzZVwiRGVsZXRlXCI6cmV0dXJuXCLijKZcIjtkZWZhdWx0OmlmKDE9PT1pLmxlbmd0aClyZXR1cm4gaS50b1VwcGVyQ2FzZSgpO3JldHVybiBpfX0sYVswXT1pLGFbMV09dCk6dD1hWzFdO3ZhciBsPXQ7aWYoYVsyXSE9PWl8fGFbM10hPT1sKXt2YXIgcz1sKGkpO249XCJzdHJpbmdcIj09dHlwZW9mIHMmJjE9PT1zLmxlbmd0aCxyPWZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiBlO3ZhciB0PXtNaW51czpcIi1cIixFcXVhbDpcIj1cIixCcmFja2V0TGVmdDpcIltcIixCcmFja2V0UmlnaHQ6XCJdXCIsQmFja3NsYXNoOlwiXFxcXFwiLFNlbWljb2xvbjpcIjtcIixRdW90ZTpcIidcIixDb21tYTpcIixcIixQZXJpb2Q6XCIuXCIsQmFja3F1b3RlOlwiYFwiLFNwYWNlOlwiIFwiLFNsYXNoOlwiL1wiLEludGxCYWNrc2xhc2g6XCJcXFxcXCJ9O3JldHVybiB0W2VdP3RbZV06L15LZXkoW0EtWl0pJC8udGVzdChlKT9lLnJlcGxhY2UoL15LZXkvLFwiXCIpOi9eRGlnaXQoWzAtOV0pJC8udGVzdChlKT9lLnJlcGxhY2UoL15EaWdpdC8sXCJcIik6L15OdW1wYWQoWzAtOV0pJC8udGVzdChlKT9lLnJlcGxhY2UoL15OdW1wYWQvLFwiXCIpOlwiTnVtcGFkQWRkXCI9PT1lP1wiK1wiOlwiTnVtcGFkU3VidHJhY3RcIj09PWU/XCItXCI6XCJOdW1wYWRNdWx0aXBseVwiPT09ZT9cIipcIjpcIk51bXBhZERpdmlkZVwiPT09ZT9cIi9cIjpcIk51bXBhZERlY2ltYWxcIj09PWU/XCIuXCI6XCJOdW1wYWRFbnRlclwiPT09ZT9cIkVudGVyXCI6ZX0ocyksYVsyXT1pLGFbM109bCxhWzRdPW4sYVs1XT1yfWVsc2Ugbj1hWzRdLHI9YVs1XTtyZXR1cm4gYVs2XSE9PW58fGFbN10hPT1yPyhvPSgwLEEuanN4KShcImtiZFwiLHtcImRhdGEtc3ltYm9sXCI6bixjaGlsZHJlbjpyfSksYVs2XT1uLGFbN109cixhWzhdPW8pOm89YVs4XSxvfWZ1bmN0aW9uIHJ1KCl7dmFyIGUsdCxuLHIsbyxhPSgwLHguYykoNiksaT1uNygoMCx3LnVzZVN0YXRlKShcIlxceGEwXCIpLDIpLGw9aVswXSxzPWlbMV07YVswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhlPXJwKC9eTWFjLyl8fHJwKC9eaVBob25lLyl8fHJwKC9eaVBhZC8pfHxycCgvXk1hYy8pJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MSxhWzBdPWUpOmU9YVswXTt2YXIgYz1lO3JldHVybiBhWzFdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHQ9ZnVuY3Rpb24oKXshMD09PWMmJnMoXCLijJhcIiksITE9PT1jJiZzKFwiQ3RybFwiKX0sbj1bY10sYVsxXT10LGFbMl09bik6KHQ9YVsxXSxuPWFbMl0pLCgwLHcudXNlRWZmZWN0KSh0LG4pLGFbM109PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8ocj17bWluV2lkdGg6XCIxZW1cIixkaXNwbGF5OlwiaW5saW5lLWJsb2NrXCJ9LGFbM109cik6cj1hWzNdLGFbNF0hPT1sPyhvPSgwLEEuanN4KShcInNwYW5cIix7c3R5bGU6cixjaGlsZHJlbjpsfSksYVs0XT1sLGFbNV09byk6bz1hWzVdLG99ZnVuY3Rpb24gcmQoKXt2YXIgZSx0PSgwLHguYykoMSk7cmV0dXJuIHRbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZT0oMCxBLmpzeCkoXCJzdmdcIix7aGVpZ2h0OlwiMTZcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLHdpZHRoOlwiMTZcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTIuNDY5NyAxMy41MzAzTDEzIDE0LjA2MDdMMTQuMDYwNyAxM0wxMy41MzAzIDEyLjQ2OTdMOS4wNjA2NSA3Ljk5OTk5TDEzLjUzMDMgMy41MzAzMkwxNC4wNjA3IDIuOTk5OTlMMTMgMS45MzkzM0wxMi40Njk3IDIuNDY5NjZMNy45OTk5OSA2LjkzOTMzTDMuNTMwMzIgMi40Njk2NkwyLjk5OTk5IDEuOTM5MzNMMS45MzkzMyAyLjk5OTk5TDIuNDY5NjYgMy41MzAzMkw2LjkzOTMzIDcuOTk5OTlMMi40Njk2NiAxMi40Njk3TDEuOTM5MzMgMTNMMi45OTk5OSAxNC4wNjA3TDMuNTMwMzIgMTMuNTMwM0w3Ljk5OTk5IDkuMDYwNjVMMTIuNDY5NyAxMy41MzAzWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSksdFswXT1lKTplPXRbMF0sZX12YXIgcmY9ZXUocm4oKSk7ZnVuY3Rpb24gcnAoZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmbnVsbCE9d2luZG93Lm5hdmlnYXRvcj9lLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSk6dm9pZCAwfWZ1bmN0aW9uIHJoKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBybShlLHQsbixyLG8sYSxpKXt0cnl7dmFyIGw9ZVthXShpKSxzPWwudmFsdWV9Y2F0Y2goZSl7bihlKTtyZXR1cm59bC5kb25lP3Qocyk6UHJvbWlzZS5yZXNvbHZlKHMpLnRoZW4ocixvKX12YXIgcmc9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vZGlzdC9jb21waWxlZC96b2QvaW5kZXguY2pzXCIpLHJ5PXJnLnoub2JqZWN0KHt0aGVtZTpyZy56LmVudW0oW1wibGlnaHRcIixcImRhcmtcIixcInN5c3RlbVwiXSkub3B0aW9uYWwoKSxkaXNhYmxlRGV2SW5kaWNhdG9yOnJnLnouYm9vbGVhbigpLm9wdGlvbmFsKCksZGV2VG9vbHNQb3NpdGlvbjpyZy56LmVudW0oW1widG9wLWxlZnRcIixcInRvcC1yaWdodFwiLFwiYm90dG9tLWxlZnRcIixcImJvdHRvbS1yaWdodFwiXSkub3B0aW9uYWwoKSxkZXZUb29sc1BhbmVsUG9zaXRpb246cmcuei5yZWNvcmQocmcuei5zdHJpbmcoKSxyZy56LmVudW0oW1widG9wLWxlZnRcIixcInRvcC1yaWdodFwiLFwiYm90dG9tLWxlZnRcIixcImJvdHRvbS1yaWdodFwiXSkpLm9wdGlvbmFsKCksZGV2VG9vbHNQYW5lbFNpemU6cmcuei5yZWNvcmQocmcuei5zdHJpbmcoKSxyZy56Lm9iamVjdCh7d2lkdGg6cmcuei5udW1iZXIoKSxoZWlnaHQ6cmcuei5udW1iZXIoKX0pKS5vcHRpb25hbCgpLHNjYWxlOnJnLnoubnVtYmVyKCkub3B0aW9uYWwoKSxoaWRlU2hvcnRjdXQ6cmcuei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCl9KTtmdW5jdGlvbiBydihlKXtyZXR1cm4gZSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiBlfXZhciByYj17fSxyQT1udWxsO2Z1bmN0aW9uIHJ4KCl7aWYoMCE9PU9iamVjdC5rZXlzKHJiKS5sZW5ndGgpe3ZhciBlPUpTT04uc3RyaW5naWZ5KHJiKTtyYj17fSxmZXRjaChcIi9fX25leHRqc19kZXZ0b29sc19jb25maWdcIix7bWV0aG9kOlwiUE9TVFwiLGhlYWRlcnM6e1wiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9LGJvZHk6ZSxrZWVwYWxpdmU6ITB9KS5jYXRjaChmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oXCJbTmV4dC5qcyBEZXZUb29sc10gRmFpbGVkIHRvIHNhdmUgY29uZmlnOlwiLHtkYXRhOmUsZXJyb3I6dH0pfSl9fWZ1bmN0aW9uIHJ3KGUpe3ZhciB0PXJ5LnNhZmVQYXJzZShlKTtpZighdC5zdWNjZXNzKXJldHVybiB2b2lkIGNvbnNvbGUud2FybihcIltOZXh0LmpzIERldlRvb2xzXSBJbnZhbGlkIGNvbmZpZyBwYXRjaDpcIix0LmVycm9yLm1lc3NhZ2UpO3JiPWZ1bmN0aW9uIGUodCxuKXtpZighbnx8KHZvaWQgMD09PW4/XCJ1bmRlZmluZWRcIjpydihuKSkhPT1cIm9iamVjdFwifHxBcnJheS5pc0FycmF5KG4pfHwhdHx8KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpydih0KSkhPT1cIm9iamVjdFwifHxBcnJheS5pc0FycmF5KHQpKXJldHVybiBuO3ZhciByPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe30sdCk7Zm9yKHZhciBvIGluIG4pe3ZhciBhPW5bb10saT10W29dO3ZvaWQgMCE9PWEmJihhJiYodm9pZCAwPT09YT9cInVuZGVmaW5lZFwiOnJ2KGEpKT09PVwib2JqZWN0XCImJiFBcnJheS5pc0FycmF5KGEpJiZpJiYodm9pZCAwPT09aT9cInVuZGVmaW5lZFwiOnJ2KGkpKT09PVwib2JqZWN0XCImJiFBcnJheS5pc0FycmF5KGkpP3Jbb109ZShpLGEpOnJbb109YSl9cmV0dXJuIHJ9KHJiLGUpLHJBJiZjbGVhclRpbWVvdXQockEpLHJBPXNldFRpbWVvdXQocngsMTIwKX1mdW5jdGlvbiByQyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gcl8oKXt2YXIgZSx0LG49KGU9W1wiXFxuICAucHJlZmVyZW5jZXMtY29udGFpbmVyIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxuXFxuICBAbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gICAgLnByZWZlcmVuY2VzLWNvbnRhaW5lciB7XFxuICAgICAgd2lkdGg6IDQ4MHB4O1xcbiAgICB9XFxuICB9XFxuXFxuICAucHJlZmVyZW5jZS1zZWN0aW9uOmZpcnN0LWNoaWxkIHtcXG4gICAgcGFkZGluZy10b3A6IDA7XFxuICB9XFxuXFxuICAucHJlZmVyZW5jZS1zZWN0aW9uIHtcXG4gICAgcGFkZGluZzogMTJweCAwO1xcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogMjRweDtcXG4gIH1cXG5cXG4gIC5wcmVmZXJlbmNlLXNlY3Rpb246bGFzdC1jaGlsZCB7XFxuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XFxuICB9XFxuXFxuICAucHJlZmVyZW5jZS1oZWFkZXIge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgICBmbGV4OiAxO1xcbiAgfVxcblxcbiAgLnByZWZlcmVuY2UtaGVhZGVyIGxhYmVsIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG5cXG4gIC5wcmVmZXJlbmNlLWRlc2NyaXB0aW9uIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcblxcbiAgLnNlbGVjdC1idXR0b24sXFxuICAuYWN0aW9uLWJ1dHRvbiB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogOHB4O1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1sZyk7XFxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBwYWRkaW5nOiA2cHggOHB4O1xcbiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMTUwbXMgdmFyKC0tdGltaW5nLXN3aWZ0KTtcXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTUwMCk7XFxuICAgIH1cXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogMTRweDtcXG4gICAgICBoZWlnaHQ6IDE0cHg7XFxuICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5zZWxlY3QtYnV0dG9uIHtcXG4gICAgJjpmb2N1cy13aXRoaW4ge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xcbiAgICB9XFxuXFxuICAgIHNlbGVjdCB7XFxuICAgICAgYWxsOiB1bnNldDtcXG4gICAgfVxcblxcbiAgICBvcHRpb24ge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLnByZWZlcmVuY2Utc2VjdGlvbiBidXR0b246ZGlzYWJsZWQge1xcbiAgICBvcGFjaXR5OiAwLjY7XFxuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICB9XFxuXFxuICA6Z2xvYmFsKC5pY29uKSB7XFxuICAgIHdpZHRoOiAxOHB4O1xcbiAgICBoZWlnaHQ6IDE4cHg7XFxuICAgIGNvbG9yOiAjNjY2O1xcbiAgfVxcblwiXSx0fHwodD1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZSh0KX19KSkpO3JldHVybiByXz1mdW5jdGlvbigpe3JldHVybiBufSxufWZ1bmN0aW9uIHJrKGUpe3ZhciB0LG4scixvLGEsaSxsLHMsYyx1LGQsZixwLGgsbSxnLHksdixiLEMsXyxrLEUsaixTLE8sUCxJLFQseixELEwsTixSLE0sWixVLEYscSxILFYsJCxXLFk9KDAseC5jKSg2NSksSz1lLnRoZW1lLFg9ZS5oaWRlLEc9ZS5oaWRlU2hvcnRjdXQsUT1lLnNldEhpZGVTaG9ydGN1dCxKPWUuc2NhbGUsZWU9ZS5zZXRQb3NpdGlvbixldD1lLnNldFNjYWxlLGVuPWUucG9zaXRpb24sZXI9KG89KHQ9KDAsdy51c2VTdGF0ZSkoITEpLG49MixyPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHQpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KHQsMil8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHJoKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIHJoKGUsdCl9fSh0LG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKVswXSxhPXJbMV0se3Jlc3RhcnRTZXJ2ZXI6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLmludmFsaWRhdGVQZXJzaXN0ZW50Q2FjaGU7cmV0dXJuKHQ9ZnVuY3Rpb24oKXt2YXIgZSx0LHIsbyxpLGw7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX0saT1PYmplY3QuY3JlYXRlKChcImZ1bmN0aW9uXCI9PXR5cGVvZiBJdGVyYXRvcj9JdGVyYXRvcjpPYmplY3QpLnByb3RvdHlwZSk7cmV0dXJuIGkubmV4dD1sKDApLGkudGhyb3c9bCgxKSxpLnJldHVybj1sKDIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksaTtmdW5jdGlvbiBsKGwpe3JldHVybiBmdW5jdGlvbihzKXt2YXIgYz1bbCxzXTtpZihuKXRocm93IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDtpJiYoaT0wLGNbMF0mJihhPTApKSxhOyl0cnl7aWYobj0xLHImJihvPTImY1swXT9yLnJldHVybjpjWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYoYz1bMiZjWzBdLG8udmFsdWVdKSxjWzBdKXtjYXNlIDA6Y2FzZSAxOm89YzticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6Y1sxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9Y1sxXSxjPVswXTtjb250aW51ZTtjYXNlIDc6Yz1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKG89KG89YS50cnlzKS5sZW5ndGg+MCYmb1tvLmxlbmd0aC0xXSkmJig2PT09Y1swXXx8Mj09PWNbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWNbMF0mJighb3x8Y1sxXT5vWzBdJiZjWzFdPG9bM10pKXthLmxhYmVsPWNbMV07YnJlYWt9aWYoNj09PWNbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89YzticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGMpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1jPXQuY2FsbChlLGEpfWNhdGNoKGUpe2M9WzYsZV0scj0wfWZpbmFsbHl7bj1vPTB9aWYoNSZjWzBdKXRocm93IGNbMV07cmV0dXJue3ZhbHVlOmNbMF0/Y1sxXTp2b2lkIDAsZG9uZTohMH19fX0odGhpcyxmdW5jdGlvbihzKXtzd2l0Y2gocy5sYWJlbCl7Y2FzZSAwOmEoITApLGU9bj9cIi9fX25leHRqc19yZXN0YXJ0X2Rldj9pbnZhbGlkYXRlUGVyc2lzdGVudENhY2hlPTFcIjpcIi9fX25leHRqc19yZXN0YXJ0X2RldlwiLHQ9ITEscy5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gcy50cnlzLnB1c2goWzEsMTEsMTIsMTNdKSxbNCxmZXRjaChcIi9fX25leHRqc19zZXJ2ZXJfc3RhdHVzXCIpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGUuanNvbigpfSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZS5leGVjdXRpb25JZH0pLmNhdGNoKGZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLmxvZyhcIltOZXh0LmpzIERldlRvb2xzXSBGYWlsZWQgdG8gZmV0Y2ggc2VydmVyIHN0YXR1cyB3aGlsZSByZXN0YXJ0aW5nIGRldiBzZXJ2ZXIuXCIsZSksbnVsbH0pXTtjYXNlIDI6aWYoIShyPXMuc2VudCgpKSlyZXR1cm4gY29uc29sZS5sb2coXCJbTmV4dC5qcyBEZXZUb29sc10gRmFpbGVkIHRvIGdldCB0aGUgY3VycmVudCBzZXJ2ZXIgZXhlY3V0aW9uIElEIHdoaWxlIHJlc3RhcnRpbmcgZGV2IHNlcnZlci5cIiksWzJdO3JldHVybls0LGZldGNoKGUse21ldGhvZDpcIlBPU1RcIn0pXTtjYXNlIDM6aWYoIShvPXMuc2VudCgpKS5vaylyZXR1cm4gY29uc29sZS5sb2coXCJbTmV4dC5qcyBEZXZUb29sc10gRmFpbGVkIHRvIGZldGNoIHJlc3RhcnQgc2VydmVyIGVuZHBvaW50LiBTdGF0dXM6XCIsby5zdGF0dXMpLFsyXTtpPTAscy5sYWJlbD00O2Nhc2UgNDppZighKGk8MTApKXJldHVyblszLDEwXTtyZXR1cm5bNCxuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtyZXR1cm4gc2V0VGltZW91dChlLDFlMyl9KV07Y2FzZSA1OnMuc2VudCgpLHMubGFiZWw9NjtjYXNlIDY6cmV0dXJuIHMudHJ5cy5wdXNoKFs2LDgsLDldKSxbNCxmZXRjaChcIi9fX25leHRqc19zZXJ2ZXJfc3RhdHVzXCIpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGUuanNvbigpfSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZS5leGVjdXRpb25JZH0pXTtjYXNlIDc6aWYobD1zLnNlbnQoKSxyIT09bClyZXR1cm4gdD0hMCx3aW5kb3cubG9jYXRpb24ucmVsb2FkKCksWzJdO3JldHVyblszLDldO2Nhc2UgODpyZXR1cm4gcy5zZW50KCksWzMsOV07Y2FzZSA5OnJldHVybiBpKyssWzMsNF07Y2FzZSAxMDpyZXR1cm4gY29uc29sZS5sb2coXCJbTmV4dC5qcyBEZXZUb29sc10gRmFpbGVkIHRvIHJlc3RhcnQgc2VydmVyLiBFeGhhdXN0ZWQgYWxsIHBvbGxpbmcgYXR0ZW1wdHMuXCIpLFsyXTtjYXNlIDExOnJldHVybiBjb25zb2xlLmxvZyhcIltOZXh0LmpzIERldlRvb2xzXSBGYWlsZWQgdG8gcmVzdGFydCBzZXJ2ZXIuXCIscy5zZW50KCkpLFsyXTtjYXNlIDEyOnJldHVybiB0fHxhKCExKSxbN107Y2FzZSAxMzpyZXR1cm5bMl19fSl9LGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt2YXIgYT10LmFwcGx5KGUsbik7ZnVuY3Rpb24gaShlKXtybShhLHIsbyxpLGwsXCJuZXh0XCIsZSl9ZnVuY3Rpb24gbChlKXtybShhLHIsbyxpLGwsXCJ0aHJvd1wiLGUpfWkodm9pZCAwKX0pfSkoKX0saXNQZW5kaW5nOm99KSxlbz1lci5yZXN0YXJ0U2VydmVyLGVhPWVyLmlzUGVuZGluZyxlaT1kbCgpLnNoYWRvd1Jvb3Q7WVswXSE9PWVpLmhvc3Q/KGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZWkuaG9zdDtpZihcInN5c3RlbVwiPT09ZS50YXJnZXQudmFsdWUpe3QuY2xhc3NMaXN0LnJlbW92ZShcImRhcmtcIiksdC5jbGFzc0xpc3QucmVtb3ZlKFwibGlnaHRcIikscncoe3RoZW1lOlwic3lzdGVtXCJ9KTtyZXR1cm59XCJkYXJrXCI9PT1lLnRhcmdldC52YWx1ZT8odC5jbGFzc0xpc3QuYWRkKFwiZGFya1wiKSx0LmNsYXNzTGlzdC5yZW1vdmUoXCJsaWdodFwiKSxydyh7dGhlbWU6XCJkYXJrXCJ9KSk6KHQuY2xhc3NMaXN0LnJlbW92ZShcImRhcmtcIiksdC5jbGFzc0xpc3QuYWRkKFwibGlnaHRcIikscncoe3RoZW1lOlwibGlnaHRcIn0pKX0sWVswXT1laS5ob3N0LFlbMV09aSk6aT1ZWzFdO3ZhciBlbD1pO1lbMl0hPT1lZT8obD1mdW5jdGlvbihlKXtlZShlLnRhcmdldC52YWx1ZSkscncoe2RldlRvb2xzUG9zaXRpb246ZS50YXJnZXQudmFsdWV9KX0sWVsyXT1lZSxZWzNdPWwpOmw9WVszXTt2YXIgZXM9bDtZWzRdIT09ZXQ/KHM9ZnVuY3Rpb24oZSl7dmFyIHQ9TnVtYmVyKGUudGFyZ2V0LnZhbHVlKTtldCh0KSxydyh7c2NhbGU6dH0pfSxZWzRdPWV0LFlbNV09cyk6cz1ZWzVdO3ZhciBlYz1zO3JldHVybiBZWzZdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGM9KDAsQS5qc3gpKFwiaDJcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tc2VjdGlvbi10aXRsZVwiLGNoaWxkcmVuOlwiR2VuZXJhbFwifSksWVs2XT1jKTpjPVlbNl0sWVs3XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh1PSgwLEEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1oZWFkZXJcIixjaGlsZHJlbjpbKDAsQS5qc3gpKFwibGFiZWxcIix7aHRtbEZvcjpcInRoZW1lXCIsY2hpbGRyZW46XCJUaGVtZVwifSksKDAsQS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWRlc2NyaXB0aW9uXCIsY2hpbGRyZW46XCJTZWxlY3QgeW91ciB0aGVtZSBwcmVmZXJlbmNlLlwifSldfSksWVs3XT11KTp1PVlbN10sWVs4XSE9PUs/KGQ9KDAsQS5qc3gpKHJTLHt0aGVtZTpLfSksWVs4XT1LLFlbOV09ZCk6ZD1ZWzldLFlbMTBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHA9KDAsQS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwic3lzdGVtXCIsY2hpbGRyZW46XCJTeXN0ZW1cIn0pLGg9KDAsQS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwibGlnaHRcIixjaGlsZHJlbjpcIkxpZ2h0XCJ9KSxmPSgwLEEuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcImRhcmtcIixjaGlsZHJlbjpcIkRhcmtcIn0pLFlbMTBdPWYsWVsxMV09cCxZWzEyXT1oKTooZj1ZWzEwXSxwPVlbMTFdLGg9WVsxMl0pLFlbMTNdIT09ZWx8fFlbMTRdIT09ZHx8WVsxNV0hPT1LPyhtPSgwLEEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1zZWN0aW9uXCIsY2hpbGRyZW46W3UsKDAsQS5qc3hzKShyaix7aWQ6XCJ0aGVtZVwiLG5hbWU6XCJ0aGVtZVwiLHByZWZpeDpkLHZhbHVlOkssb25DaGFuZ2U6ZWwsY2hpbGRyZW46W3AsaCxmXX0pXX0pLFlbMTNdPWVsLFlbMTRdPWQsWVsxNV09SyxZWzE2XT1tKTptPVlbMTZdLFlbMTddPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGc9KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWhlYWRlclwiLGNoaWxkcmVuOlsoMCxBLmpzeCkoXCJsYWJlbFwiLHtodG1sRm9yOlwicG9zaXRpb25cIixjaGlsZHJlbjpcIlBvc2l0aW9uXCJ9KSwoMCxBLmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtZGVzY3JpcHRpb25cIixjaGlsZHJlbjpcIkFkanVzdCB0aGUgcGxhY2VtZW50IG9mIHlvdXIgZGV2IHRvb2xzLlwifSldfSksWVsxN109Zyk6Zz1ZWzE3XSxZWzE4XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh5PSgwLEEuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcImJvdHRvbS1sZWZ0XCIsY2hpbGRyZW46XCJCb3R0b20gTGVmdFwifSksdj0oMCxBLmpzeCkoXCJvcHRpb25cIix7dmFsdWU6XCJib3R0b20tcmlnaHRcIixjaGlsZHJlbjpcIkJvdHRvbSBSaWdodFwifSksYj0oMCxBLmpzeCkoXCJvcHRpb25cIix7dmFsdWU6XCJ0b3AtbGVmdFwiLGNoaWxkcmVuOlwiVG9wIExlZnRcIn0pLEM9KDAsQS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwidG9wLXJpZ2h0XCIsY2hpbGRyZW46XCJUb3AgUmlnaHRcIn0pLFlbMThdPXksWVsxOV09dixZWzIwXT1iLFlbMjFdPUMpOih5PVlbMThdLHY9WVsxOV0sYj1ZWzIwXSxDPVlbMjFdKSxZWzIyXSE9PWVzfHxZWzIzXSE9PWVuPyhfPSgwLEEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1zZWN0aW9uXCIsY2hpbGRyZW46W2csKDAsQS5qc3hzKShyaix7aWQ6XCJwb3NpdGlvblwiLG5hbWU6XCJwb3NpdGlvblwiLHZhbHVlOmVuLG9uQ2hhbmdlOmVzLGNoaWxkcmVuOlt5LHYsYixDXX0pXX0pLFlbMjJdPWVzLFlbMjNdPWVuLFlbMjRdPV8pOl89WVsyNF0sWVsyNV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oaz0oMCxBLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtaGVhZGVyXCIsY2hpbGRyZW46WygwLEEuanN4KShcImxhYmVsXCIse2h0bWxGb3I6XCJzaXplXCIsY2hpbGRyZW46XCJTaXplXCJ9KSwoMCxBLmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtZGVzY3JpcHRpb25cIixjaGlsZHJlbjpcIkFkanVzdCB0aGUgc2l6ZSBvZiB5b3VyIGRldiB0b29scy5cIn0pXX0pLFlbMjVdPWspOms9WVsyNV0sWVsyNl09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oRT1PYmplY3QuZW50cmllcyhCKS5tYXAockUpLFlbMjZdPUUpOkU9WVsyNl0sWVsyN10hPT1lY3x8WVsyOF0hPT1KPyhqPSgwLEEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1zZWN0aW9uXCIsY2hpbGRyZW46W2ssKDAsQS5qc3gpKHJqLHtpZDpcInNpemVcIixuYW1lOlwic2l6ZVwiLHZhbHVlOkosb25DaGFuZ2U6ZWMsY2hpbGRyZW46RX0pXX0pLFlbMjddPWVjLFlbMjhdPUosWVsyOV09aik6aj1ZWzI5XSxZWzMwXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhTPSgwLEEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1oZWFkZXJcIixjaGlsZHJlbjpbKDAsQS5qc3gpKFwibGFiZWxcIix7aWQ6XCJoaWRlLWRldi10b29sc1wiLGNoaWxkcmVuOlwiSGlkZSBEZXYgVG9vbHMgZm9yIHRoaXMgc2Vzc2lvblwifSksKDAsQS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWRlc2NyaXB0aW9uXCIsY2hpbGRyZW46XCJIaWRlIERldiBUb29scyB1bnRpbCB5b3UgcmVzdGFydCB5b3VyIGRldiBzZXJ2ZXIsIG9yIDEgZGF5LlwifSldfSksWVszMF09Uyk6Uz1ZWzMwXSxZWzMxXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhPPSgwLEEuanN4KShuNSx7fSksUD0oMCxBLmpzeCkoXCJzcGFuXCIse2NoaWxkcmVuOlwiSGlkZVwifSksWVszMV09TyxZWzMyXT1QKTooTz1ZWzMxXSxQPVlbMzJdKSxZWzMzXSE9PVg/KEk9KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLXNlY3Rpb25cIixjaGlsZHJlbjpbUywoMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1jb250cm9sXCIsY2hpbGRyZW46KDAsQS5qc3hzKShcImJ1dHRvblwiLHtcImFyaWEtZGVzY3JpYmVkYnlcIjpcImhpZGUtZGV2LXRvb2xzXCIsbmFtZTpcImhpZGUtZGV2LXRvb2xzXCIsXCJkYXRhLWhpZGUtZGV2LXRvb2xzXCI6ITAsY2xhc3NOYW1lOlwiYWN0aW9uLWJ1dHRvblwiLG9uQ2xpY2s6WCxjaGlsZHJlbjpbTyxQXX0pfSldfSksWVszM109WCxZWzM0XT1JKTpJPVlbMzRdLFlbMzVdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KFQ9KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWhlYWRlclwiLGNoaWxkcmVuOlsoMCxBLmpzeCkoXCJsYWJlbFwiLHtpZDpcImhpZGUtZGV2LXRvb2xzXCIsY2hpbGRyZW46XCJIaWRlIERldiBUb29scyBzaG9ydGN1dFwifSksKDAsQS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWRlc2NyaXB0aW9uXCIsY2hpbGRyZW46XCJTZXQgYSBjdXN0b20ga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdG9nZ2xlIHZpc2liaWxpdHkuXCJ9KV19KSxZWzM1XT1UKTpUPVlbMzVdLFlbMzZdIT09Rz8oej1udWxsIT0oRD1udWxsPT1HP3ZvaWQgMDpHLnNwbGl0KFwiK1wiKSk/RDpudWxsLFlbMzZdPUcsWVszN109eik6ej1ZWzM3XSxZWzM4XSE9PVF8fFlbMzldIT09ej8oTD0oMCxBLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOltULCgwLEEuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWNvbnRyb2xcIixjaGlsZHJlbjooMCxBLmpzeCkocm8se3ZhbHVlOnosb25DaGFuZ2U6UX0pfSldfSksWVszOF09USxZWzM5XT16LFlbNDBdPUwpOkw9WVs0MF0sWVs0MV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oTj0oMCxBLmpzeCkoXCJsYWJlbFwiLHtjaGlsZHJlbjpcIkRpc2FibGUgRGV2IFRvb2xzIGZvciB0aGlzIHByb2plY3RcIn0pLFlbNDFdPU4pOk49WVs0MV0sWVs0Ml09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oUj0oMCxBLmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjpcImRldkluZGljYXRvcnM6IGZhbHNlXCJ9KSxZWzQyXT1SKTpSPVlbNDJdLFlbNDNdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KE09KDAsQS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOigwLEEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1oZWFkZXJcIixjaGlsZHJlbjpbTiwoMCxBLmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWRlc2NyaXB0aW9uXCIsY2hpbGRyZW46W1wiVG8gZGlzYWJsZSB0aGlzIFVJIGNvbXBsZXRlbHksIHNldFwiLFwiIFwiLFIsXCIgXCIsXCJpbiB5b3VyIFwiLCgwLEEuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOlwibmV4dC5jb25maWdcIn0pLFwiIFwiLFwiZmlsZS5cIl19KV19KX0pLFlbNDNdPU0pOk09WVs0M10sWVs0NF0hPT1tfHxZWzQ1XSE9PV98fFlbNDZdIT09anx8WVs0N10hPT1JfHxZWzQ4XSE9PUw/KFo9KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlcy1jb250YWluZXJcIixjaGlsZHJlbjpbbSxfLGosSSxMLE1dfSksWVs0NF09bSxZWzQ1XT1fLFlbNDZdPWosWVs0N109SSxZWzQ4XT1MLFlbNDldPVopOlo9WVs0OV0sWVs1MF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oVT0oMCxBLmpzeCkoXCJoMlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1zZWN0aW9uLXRpdGxlXCIsY2hpbGRyZW46XCJEZXZlbG9wbWVudCBTZXJ2ZXJcIn0pLFlbNTBdPVUpOlU9WVs1MF0sWVs1MV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oRj0oMCxBLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtaGVhZGVyXCIsY2hpbGRyZW46WygwLEEuanN4KShcImxhYmVsXCIse2lkOlwicmVzdGFydC1kZXYtc2VydmVyXCIsY2hpbGRyZW46XCJSZXN0YXJ0IERldiBTZXJ2ZXJcIn0pLCgwLEEuanN4KShcInBcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1kZXNjcmlwdGlvblwiLGNoaWxkcmVuOlwiUmVzdGFydHMgdGhlIGRldmVsb3BtZW50IHNlcnZlciB3aXRob3V0IG5lZWRpbmcgdG8gbGVhdmUgdGhlIGJyb3dzZXIuXCJ9KV19KSxZWzUxXT1GKTpGPVlbNTFdLFlbNTJdIT09ZW8/KHE9ZnVuY3Rpb24oKXtyZXR1cm4gZW8oe2ludmFsaWRhdGVQZXJzaXN0ZW50Q2FjaGU6ITF9KX0sWVs1Ml09ZW8sWVs1M109cSk6cT1ZWzUzXSxZWzU0XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhIPSgwLEEuanN4KShcInNwYW5cIix7Y2hpbGRyZW46XCJSZXN0YXJ0XCJ9KSxZWzU0XT1IKTpIPVlbNTRdLFlbNTVdIT09ZWF8fFlbNTZdIT09cT8oVj0oMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZXMtY29udGFpbmVyXCIsY2hpbGRyZW46KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLXNlY3Rpb25cIixjaGlsZHJlbjpbRiwoMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1jb250cm9sXCIsY2hpbGRyZW46KDAsQS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1kZXNjcmliZWRieVwiOlwicmVzdGFydC1kZXYtc2VydmVyXCIsdGl0bGU6XCJSZXN0YXJ0cyB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyIHdpdGhvdXQgbmVlZGluZyB0byBsZWF2ZSB0aGUgYnJvd3Nlci5cIixuYW1lOlwicmVzdGFydC1kZXYtc2VydmVyXCIsXCJkYXRhLXJlc3RhcnQtZGV2LXNlcnZlclwiOiEwLGNsYXNzTmFtZTpcImFjdGlvbi1idXR0b25cIixvbkNsaWNrOnEsZGlzYWJsZWQ6ZWEsY2hpbGRyZW46SH0pfSldfSl9KSxZWzU1XT1lYSxZWzU2XT1xLFlbNTddPVYpOlY9WVs1N10sWVs1OF0hPT1lYXx8WVs1OV0hPT1lbz8oJD1wcm9jZXNzLmVudi5fX05FWFRfQlVORExFUl9IQVNfUEVSU0lTVEVOVF9DQUNIRT8oMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZXMtY29udGFpbmVyXCIsY2hpbGRyZW46KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLXNlY3Rpb25cIixjaGlsZHJlbjpbKDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWhlYWRlclwiLGNoaWxkcmVuOlsoMCxBLmpzeCkoXCJsYWJlbFwiLHtpZDpcInJlc2V0LWJ1bmRsZXItY2FjaGVcIixjaGlsZHJlbjpcIlJlc2V0IEJ1bmRsZXIgQ2FjaGVcIn0pLCgwLEEuanN4KShcInBcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1kZXNjcmlwdGlvblwiLGNoaWxkcmVuOlwiQ2xlYXJzIHRoZSBidW5kbGVyIGNhY2hlIGFuZCByZXN0YXJ0cyB0aGUgZGV2IHNlcnZlci4gSGVscGZ1bCBpZiB5b3UgYXJlIHNlZWluZyBzdGFsZSBlcnJvcnMgb3IgY2hhbmdlcyBhcmUgbm90IGFwcGVhcmluZy5cIn0pXX0pLCgwLEEuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWNvbnRyb2xcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWRlc2NyaWJlZGJ5XCI6XCJyZXNldC1idW5kbGVyLWNhY2hlXCIsdGl0bGU6XCJDbGVhcnMgdGhlIGJ1bmRsZXIgY2FjaGUgYW5kIHJlc3RhcnRzIHRoZSBkZXYgc2VydmVyLiBIZWxwZnVsIGlmIHlvdSBhcmUgc2VlaW5nIHN0YWxlIGVycm9ycyBvciBjaGFuZ2VzIGFyZSBub3QgYXBwZWFyaW5nLlwiLG5hbWU6XCJyZXNldC1idW5kbGVyLWNhY2hlXCIsXCJkYXRhLXJlc2V0LWJ1bmRsZXItY2FjaGVcIjohMCxjbGFzc05hbWU6XCJhY3Rpb24tYnV0dG9uXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBlbyh7aW52YWxpZGF0ZVBlcnNpc3RlbnRDYWNoZTohMH0pfSxkaXNhYmxlZDplYSxjaGlsZHJlbjooMCxBLmpzeCkoXCJzcGFuXCIse2NoaWxkcmVuOlwiUmVzZXQgQ2FjaGVcIn0pfSl9KV19KX0pOm51bGwsWVs1OF09ZWEsWVs1OV09ZW8sWVs2MF09JCk6JD1ZWzYwXSxZWzYxXSE9PVp8fFlbNjJdIT09Vnx8WVs2M10hPT0kPyhXPSgwLEEuanN4cykoQS5GcmFnbWVudCx7Y2hpbGRyZW46W2MsWixVLFYsJF19KSxZWzYxXT1aLFlbNjJdPVYsWVs2M109JCxZWzY0XT1XKTpXPVlbNjRdLFd9ZnVuY3Rpb24gckUoZSl7dmFyIHQsbixyPShuPTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0odD1lKXx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPShuPW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaChuLnZhbHVlKSxhLmxlbmd0aCE9PXQpO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fSh0LDIpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiByQyhlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4pcmV0dXJuIEFycmF5LmZyb20obik7aWYoXCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiByQyhlLHQpfX0odCxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksbz1yWzBdLGE9clsxXTtyZXR1cm4oMCxBLmpzeCkoXCJvcHRpb25cIix7dmFsdWU6YSxjaGlsZHJlbjpvfSxvKX1mdW5jdGlvbiByaihlKXt2YXIgdCxuLHIsbyxhLGksbCxzLGM9KDAseC5jKSgxMSk7cmV0dXJuKGNbMF0hPT1lPyhhPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSwhKHQuaW5kZXhPZihuKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxbXCJjaGlsZHJlblwiLFwicHJlZml4XCJdKSxyPWUuY2hpbGRyZW4sbz1lLnByZWZpeCxjWzBdPWUsY1sxXT1yLGNbMl09byxjWzNdPWEpOihyPWNbMV0sbz1jWzJdLGE9Y1szXSksY1s0XSE9PXJ8fGNbNV0hPT1hKT8oaT0oMCxBLmpzeCkoXCJzZWxlY3RcIiwodD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9ZSxvPXQsYT1uW3RdLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt9LGEpLG49bj17Y2hpbGRyZW46cn0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSx0KSksY1s0XT1yLGNbNV09YSxjWzZdPWkpOmk9Y1s2XSxjWzddPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGw9KDAsQS5qc3gpKHJCLHt9KSxjWzddPWwpOmw9Y1s3XSxjWzhdIT09b3x8Y1s5XSE9PWk/KHM9KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJzZWxlY3QtYnV0dG9uXCIsY2hpbGRyZW46W28saSxsXX0pLGNbOF09byxjWzldPWksY1sxMF09cyk6cz1jWzEwXSxzfWZ1bmN0aW9uIHJTKGUpe3ZhciB0LG4scixvPSgwLHguYykoMyk7c3dpdGNoKGUudGhlbWUpe2Nhc2VcInN5c3RlbVwiOnJldHVybiBvWzBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHQ9KDAsQS5qc3gpKG45LHt9KSxvWzBdPXQpOnQ9b1swXSx0O2Nhc2VcImRhcmtcIjpyZXR1cm4gb1sxXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhuPSgwLEEuanN4KShuNix7fSksb1sxXT1uKTpuPW9bMV0sbjtjYXNlXCJsaWdodFwiOnJldHVybiBvWzJdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHI9KDAsQS5qc3gpKG4zLHt9KSxvWzJdPXIpOnI9b1syXSxyO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciByTz1ldShyXygpKTtmdW5jdGlvbiByQigpe3ZhciBlLHQ9KDAseC5jKSgxKTtyZXR1cm4gdFswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhlPSgwLEEuanN4KShcInN2Z1wiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsXCJhcmlhLWhpZGRlblwiOiEwLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xNC4wNjA3IDUuNDk5OTlMMTMuNTMwMyA2LjAzMDMyTDguNzA3MSAxMC44NTM1QzguMzE2NTggMTEuMjQ0MSA3LjY4MzQxIDExLjI0NDEgNy4yOTI4OSAxMC44NTM1TDIuNDY5NjYgNi4wMzAzMkwxLjkzOTMzIDUuNDk5OTlMMi45OTk5OSA0LjQzOTMzTDMuNTMwMzIgNC45Njk2Nkw3Ljk5OTk5IDkuNDM5MzNMMTIuNDY5NyA0Ljk2OTY2TDEzIDQuNDM5MzNMMTQuMDYwNyA1LjQ5OTk5WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSksdFswXT1lKTplPXRbMF0sZX1mdW5jdGlvbiByUCgpe3ZhciBlLHQsbj0oZT1bXCJcXG4gIFtkYXRhLW5leHRqcy1pc3N1ZS1mZWVkYmFjay1idXR0b24tZ3JvdXBdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbWFsbCk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtaXNzdWUtZmVlZGJhY2stYnV0dG9uLWdyb3VwXSBidXR0b24ge1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWlzc3VlLWZlZWRiYWNrLWJ1dHRvbi1ncm91cF0gYnV0dG9uOmZpcnN0LWNoaWxkIHtcXG4gICAgcGFkZGluZzogNHB4IDNweCA0cHggNXB4O1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpIDAgMCB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWlzc3VlLWZlZWRiYWNrLWJ1dHRvbi1ncm91cF0gYnV0dG9uOmxhc3QtY2hpbGQge1xcbiAgICBwYWRkaW5nOiA0cHggNXB4IDRweCAzcHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tcm91bmRlZC1mdWxsKSB2YXIoLS1yb3VuZGVkLWZ1bGwpIDA7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtaXNzdWUtZmVlZGJhY2stc2VwYXJhdG9yXSB7XFxuICAgIHdpZHRoOiAxcHg7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgfVxcblwiXSx0fHwodD1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZSh0KX19KSkpO3JldHVybiByUD1mdW5jdGlvbigpe3JldHVybiBufSxufXZhciByST1ldShyUCgpKTtmdW5jdGlvbiByVCgpe3ZhciBlLHQsbj0oZT1bXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgIFwiXSx0fHwodD1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZSh0KX19KSkpO3JldHVybiByVD1mdW5jdGlvbigpe3JldHVybiBufSxufWZ1bmN0aW9uIHJ6KCl7cmV0dXJuKDAsQS5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46ZXUoclQoKSxcIlxcbiAgLm5leHRqcy1kYXRhLWNvcHktYnV0dG9uIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuXFxuICAgIHN2ZyB7XFxuICAgICAgd2lkdGg6IHZhcigtLXNpemUtMTYpO1xcbiAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIH1cXG4gIH1cXG4gIC5uZXh0anMtZGF0YS1jb3B5LWJ1dHRvbjpkaXNhYmxlZCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcXG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gIH1cXG4gIC5uZXh0anMtZGF0YS1jb3B5LWJ1dHRvbi0taW5pdGlhbDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gIH1cXG4gIC5uZXh0anMtZGF0YS1jb3B5LWJ1dHRvbi0tZXJyb3I6bm90KDpkaXNhYmxlZCksXFxuICAubmV4dGpzLWRhdGEtY29weS1idXR0b24tLWVycm9yOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktcmVkKTtcXG4gIH1cXG4gIC5uZXh0anMtZGF0YS1jb3B5LWJ1dHRvbi0tc3VjY2Vzczpub3QoOmRpc2FibGVkKSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLWdyZWVuKTtcXG4gIH1cXG5cIiwnXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZS1uby1zb3VyY2VdIHtcXG4gICAgcGFkZGluZzogNnB4IDhweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogNHB4O1xcblxcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWxnKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lLW5vLXNvdXJjZV06bGFzdC1jaGlsZCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZS1pZ25vcmVkPVwidHJ1ZVwiXSB7XFxuICAgIG9wYWNpdHk6IDAuNjtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lXSB7XFxuICAgIHVzZXItc2VsZWN0OiB0ZXh0O1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXG4gICAgdXNlci1zZWxlY3Q6IHRleHQ7XFxuICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7XFxuICAgIC1tb3otdXNlci1zZWxlY3Q6IHRleHQ7XFxuICAgIC1tcy11c2VyLXNlbGVjdDogdGV4dDtcXG5cXG4gICAgcGFkZGluZzogNnB4IDhweDtcXG5cXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1sZyk7XFxuICB9XFxuXFxuICAuY2FsbC1zdGFjay1mcmFtZS1tZXRob2QtbmFtZSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogNHB4O1xcblxcbiAgICBtYXJnaW4tYm90dG9tOiA0cHg7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuXFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuXFxuICAgIHN2ZyB7XFxuICAgICAgd2lkdGg6IHZhcigtLXNpemUtMTZweCk7XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2cHgpO1xcbiAgICB9XFxuICB9XFxuXFxuICAub3Blbi1pbi1lZGl0b3ItYnV0dG9uLCAuc291cmNlLW1hcHBpbmctZXJyb3ItYnV0dG9uIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgIHBhZGRpbmc6IDRweDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWZvbnQpO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxuICAgIH1cXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgICB9XFxuICB9XFxuXFxuICAuY2FsbC1zdGFjay1mcmFtZS1maWxlLXNvdXJjZSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gIH1cXG4nLG5rLFwiXFxuICBbZGF0YS1uZXh0anMtZW52aXJvbm1lbnQtbmFtZS1sYWJlbF0ge1xcbiAgICBwYWRkaW5nOiAycHggNnB4O1xcbiAgICBtYXJnaW46IDA7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbWQtMik7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgfVxcblwiLG5oLGVRLG5mLHRQLFwiXFxuICAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXIge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zdGFjay1sYXllci1oZWlnaHQpO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC14bCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgdHJhbnNpdGlvbjpcXG4gICAgICB0cmFuc2xhdGUgMzUwbXMgdmFyKC0tdGltaW5nLXN3aWZ0KSxcXG4gICAgICBib3gtc2hhZG93IDM1MG1zIHZhcigtLXRpbWluZy1zd2lmdCk7XFxuICB9XFxuXFxuICAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXItMSB7XFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSB2YXIoLS1zaXplLTI0KSk7XFxuICB9XFxuXFxuICAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXItMiB7XFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSB2YXIoLS1zaXplLTQ4KSk7XFxuICAgIHotaW5kZXg6IC0xO1xcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgYm90dG9tOiAtMXB4O1xcbiAgICBoZWlnaHQ6IDA7XFxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLXN0YWNrIHtcXG4gICAgLS1zdGFjay1sYXllci1oZWlnaHQ6IDQ0cHg7XFxuICAgIC0tc3RhY2stbGF5ZXItaGVpZ2h0LWhhbGY6IGNhbGModmFyKC0tc3RhY2stbGF5ZXItaGVpZ2h0KSAvIDIpO1xcbiAgICAtLXN0YWNrLWxheWVyLXRyaW06IDEzcHg7XFxuICAgIC0tc2hhZG93OiAwcHggMC45MjVweCAwLjkyNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDIpLFxcbiAgICAgIDBweCAzLjdweCA3LjRweCAtMy43cHggcmdiYSgwLCAwLCAwLCAwLjA0KSxcXG4gICAgICAwcHggMTQuOHB4IDIyLjJweCAtNy40cHggcmdiYSgwLCAwLCAwLCAwLjA2KTtcXG5cXG4gICAgZGlzcGxheTogZ3JpZDtcXG4gICAgcGxhY2UtaXRlbXM6IGNlbnRlciBjZW50ZXI7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHotaW5kZXg6IC0xO1xcbiAgICBtYXgtd2lkdGg6IHZhcigtLW5leHQtZGlhbG9nLW1heC13aWR0aCk7XFxuXFxuICAgIC5lcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllciB7XFxuICAgICAgZ3JpZC1hcmVhOiAxIC8gMTtcXG4gICAgICAvKiBIaWRlICovXFxuICAgICAgdHJhbnNsYXRlOiAwIGNhbGModmFyKC0tc3RhY2stbGF5ZXItaGVpZ2h0KSAqIC0xKTtcXG4gICAgfVxcblxcbiAgICAmW2RhdGEtc3RhY2stY291bnQ9JzEnXSxcXG4gICAgJltkYXRhLXN0YWNrLWNvdW50PScyJ10ge1xcbiAgICAgIC5lcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllci0xIHtcXG4gICAgICAgIHRyYW5zbGF0ZTogMFxcbiAgICAgICAgICBjYWxjKHZhcigtLXN0YWNrLWxheWVyLWhlaWdodC1oYWxmKSAqIC0xIC0gdmFyKC0tc3RhY2stbGF5ZXItdHJpbSkpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAmW2RhdGEtc3RhY2stY291bnQ9JzInXSB7XFxuICAgICAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyLTIge1xcbiAgICAgICAgdHJhbnNsYXRlOiAwIGNhbGModmFyKC0tc3RhY2stbGF5ZXItdHJpbSkgKiAtMSAqIDIpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAvKiBPbmx5IHRoZSBib3R0b20gc3RhY2sgc2hvdWxkIGhhdmUgdGhlIHNoYWRvdyAqL1xcbiAgICAmW2RhdGEtc3RhY2stY291bnQ9JzEnXSAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXItMSB7XFxuICAgICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93KTtcXG4gICAgfVxcblxcbiAgICAmW2RhdGEtc3RhY2stY291bnQ9JzInXSB7XFxuICAgICAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyLTIge1xcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93KTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIixcIlxcbiAgLmVycm9yLW92ZXJsYXktcGFnaW5hdGlvbiB7XFxuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA4cHg7XFxuICAgIHdpZHRoOiBmaXQtY29udGVudDtcXG4gIH1cXG5cXG4gIC5lcnJvci1vdmVybGF5LXBhZ2luYXRpb24tY291bnQge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcXG4gIH1cXG5cXG4gIC5lcnJvci1vdmVybGF5LXBhZ2luYXRpb24tYnV0dG9uIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTI0KTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0zMDApO1xcbiAgICBmbGV4LXNocmluazogMDtcXG5cXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgIH1cXG5cXG4gICAgJjpub3QoOmRpc2FibGVkKTphY3RpdmUge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktNTAwKTtcXG4gICAgfVxcblxcbiAgICAmOmRpc2FibGVkIHtcXG4gICAgICBvcGFjaXR5OiAwLjU7XFxuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktcGFnaW5hdGlvbi1idXR0b24taWNvbiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgfVxcblwiLCdcXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdIHtcXG4gICAgLS1jb2RlLWZyYW1lLXBhZGRpbmc6IDEycHg7XFxuICAgIC0tY29kZS1mcmFtZS1saW5lLWhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWNvZGUtZnJhbWUtbGluZS1oZWlnaHQpO1xcbiAgICBtYXJnaW46IDhweCAwO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1saW5rLFxcbiAgLmNvZGUtZnJhbWUtcHJlIHtcXG4gICAgcGFkZGluZzogdmFyKC0tY29kZS1mcmFtZS1wYWRkaW5nKTtcXG4gIH1cXG5cXG4gIC5jb2RlLWZyYW1lLWxpbmsgc3ZnIHtcXG4gICAgZmxleC1zaHJpbms6IDA7XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1saW5lcyB7XFxuICAgIG1pbi13aWR0aDogbWF4LWNvbnRlbnQ7XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1saW5rIFtkYXRhLXRleHRdIHtcXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcXG4gICAgbWFyZ2luOiBhdXRvIDZweDtcXG4gIH1cXG5cXG4gIC5jb2RlLWZyYW1lLWhlYWRlciB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDEwMG1zIGVhc2Utb3V0O1xcbiAgICBib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gIH1cXG5cXG4gIFtkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGluay1zb3VyY2UtZmlsZV0ge1xcbiAgICBwYWRkaW5nOiA0cHg7XFxuICAgIG1hcmdpbjogLTRweCAwIC00cHggYXV0bztcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuXFxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxuICAgIH1cXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgICB9XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXTo6c2VsZWN0aW9uLFxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gKjo6c2VsZWN0aW9uIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS1zZWxlY3Rpb24pO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gKjpub3QoYSkge1xcbiAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLWxpbmVdW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1saW5lLS1lcnJvcmVkPVwidHJ1ZVwiXSB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgaXNvbGF0aW9uOiBpc29sYXRlO1xcblxcbiAgICA+IHNwYW4geyBcXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgei1pbmRleDogMTtcXG4gICAgfVxcblxcbiAgICAmOjphZnRlciB7XFxuICAgICAgY29udGVudDogXCJcIjtcXG4gICAgICB3aWR0aDogY2FsYygxMDAlICsgdmFyKC0tY29kZS1mcmFtZS1wYWRkaW5nKSAqIDIpO1xcbiAgICAgIGhlaWdodDogdmFyKC0tY29kZS1mcmFtZS1saW5lLWhlaWdodCk7XFxuICAgICAgbGVmdDogY2FsYygtMSAqIHZhcigtLWNvZGUtZnJhbWUtcGFkZGluZykpO1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXJlZC0yMDApO1xcbiAgICAgIGJveC1zaGFkb3c6IDJweCAwIDAgMCB2YXIoLS1jb2xvci1yZWQtOTAwKSBpbnNldDtcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIH1cXG4gIH1cXG5cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdID4gKiB7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG5cXG4gIC5jb2RlLWZyYW1lLWxpbmsge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBtYXJnaW46IDA7XFxuICAgIG91dGxpbmU6IDA7XFxuICB9XFxuICAuY29kZS1mcmFtZS1saW5rIFtkYXRhLWljb249XFwncmlnaHRcXCddIHtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSBkaXYgPiBwcmUge1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSBzdmcge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgfVxcbicsXCJcXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF06OnNlbGVjdGlvbixcXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gKjo6c2VsZWN0aW9uIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS1zZWxlY3Rpb24pO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLXRlcm1pbmFsXSAqIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLXRlcm1pbmFsXSA+IGRpdiA+IHAge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLXRlcm1pbmFsXSA+IGRpdiA+IHA6aG92ZXIge1xcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdIGRpdiA+IHByZSB7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIH1cXG5cIixcIlxcbiAgW2RhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rXSBzdmcge1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcXG4gIH1cXG4gIFtkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGlua10ge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICB9XFxuICBbZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmtdOmhvdmVyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgfVxcbiAgW2RhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rLWltcG9ydC10cmFjZV0ge1xcbiAgICBtYXJnaW4tbGVmdDogMTZweDtcXG4gIH1cXG5cIixcIlwiLFwiXFxuICAubmV4dGpzLWVycm9yLXdpdGgtc3RhdGljIHtcXG4gICAgYm90dG9tOiBjYWxjKDE2cHggKiA0LjUpO1xcbiAgfVxcbiAgcC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2xpbmsge1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgfVxcbiAgcC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX25vdGVzIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXN0YWNrLW5vdGVzKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1ib2R5ID4gaDI6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBtYXJnaW4tdG9wOiBjYWxjKDE2cHggKyA4cHgpO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWJvZHkgPiBoMiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10aXRsZS1jb2xvcik7XFxuICAgIG1hcmdpbi1ib3R0b206IDhweDtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTIwKTtcXG4gIH1cXG4gIC5uZXh0anMtdG9hc3QtZXJyb3JzLXBhcmVudCB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTtcXG4gIH1cXG4gIC5uZXh0anMtdG9hc3QtZXJyb3JzLXBhcmVudDpob3ZlciB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcXG4gIH1cXG4gIC5uZXh0anMtdG9hc3QtZXJyb3JzIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbiAgfVxcbiAgLm5leHRqcy10b2FzdC1lcnJvcnMgPiBzdmcge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcXG4gIH1cXG4gIC5uZXh0anMtdG9hc3QtaGlkZS1idXR0b24ge1xcbiAgICBtYXJnaW4tbGVmdDogMjRweDtcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1icmlnaHQtd2hpdGUpO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzIGVhc2U7XFxuICAgIG9wYWNpdHk6IDAuNztcXG4gIH1cXG4gIC5uZXh0anMtdG9hc3QtaGlkZS1idXR0b246aG92ZXIge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgLm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fZXJyb3JfdGl0bGUge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIG1hcmdpbi1ib3R0b206IDE0cHg7XFxuICB9XFxuICAuZXJyb3Itb3ZlcmxheS1ub3Rlcy1jb250YWluZXIge1xcbiAgICBtYXJnaW46IDhweCAycHg7XFxuICB9XFxuICAuZXJyb3Itb3ZlcmxheS1ub3Rlcy1jb250YWluZXIgcCB7XFxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG4gIH1cXG5cIixuRixcIlxcbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA0cHg7XFxuXFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yNik7XFxuICAgIHBhZGRpbmc6IDZweCA4cHggNnB4IDZweDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbWFsbCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuXFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gIH1cXG5cXG4gIGEubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci12ZXJzaW9uLXN0YXR1cyB7XFxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICB9XFxuICB9XFxuXFxuICAudmVyc2lvbi1zdGFsZW5lc3MtaW5kaWNhdG9yLmZyZXNoIHtcXG4gICAgZmlsbDogdmFyKC0tY29sb3ItZ3JlZW4tODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1ncmVlbi0zMDApO1xcbiAgfVxcbiAgLnZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvci5zdGFsZSB7XFxuICAgIGZpbGw6IHZhcigtLWNvbG9yLWFtYmVyLTgwMCk7XFxuICAgIHN0cm9rZTogdmFyKC0tY29sb3ItYW1iZXItMzAwKTtcXG4gIH1cXG4gIC52ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3Iub3V0ZGF0ZWQge1xcbiAgICBmaWxsOiB2YXIoLS1jb2xvci1yZWQtODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1yZWQtMzAwKTtcXG4gIH1cXG4gIC52ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3IudW5rbm93biB7XFxuICAgIGZpbGw6IHZhcigtLWNvbG9yLWdyYXktODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XFxuICB9XFxuXFxuICAubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci12ZXJzaW9uLXN0YXR1cyA+IC50dXJib3BhY2stdGV4dCB7XFxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcXG4gICAgICB0byByaWdodCxcXG4gICAgICB2YXIoLS1jb2xvci10dXJib3BhY2stdGV4dC1yZWQpIDAlLFxcbiAgICAgIHZhcigtLWNvbG9yLXR1cmJvcGFjay10ZXh0LWJsdWUpIDEwMCVcXG4gICAgKTtcXG4gICAgYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xcbiAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDtcXG4gICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgfVxcblwiLFwiXFxuICAuZGV2LXRvb2xzLWluZm8tY29kZSB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICAgIHBhZGRpbmc6IDJweCA0cHg7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEzKTtcXG4gICAgd2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlcztcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWNvbnRhaW5lciB7XFxuICAgIHBhZGRpbmc6IDZweDtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gICAgbWluLXdpZHRoOiAzMjZweDtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLXByZSB7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb3B5LWJ1dHRvbiB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIHJpZ2h0OiA4cHg7XFxuICAgIHRvcDogOHB4O1xcbiAgICBwYWRkaW5nOiA0cHg7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTI0KTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAgIHBhZGRpbmc6IDAgMTZweDtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmUuZGV2LXRvb2xzLWluZm8taGlnaGxpZ2h0IHtcXG4gICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ibHVlLTkwMCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJsdWUtNDAwKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24ta2V5IHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXN5bnRheC1rZXl3b3JkKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24tdmFsdWUge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itc3ludGF4LWxpbmspO1xcbiAgfVxcblwiLFwiXCIsck8sJ1xcbiAgLm5leHRqcy1zY3JvbGwtZmFkZXIge1xcbiAgICAtLWJsdXI6IDFweDtcXG4gICAgLS1zdG9wOiAyNSU7XFxuICAgIC0taGVpZ2h0OiAxNTBweDtcXG4gICAgLS1jb2xvci1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KTtcXG4gICAgbGVmdDogMDtcXG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKHZhcigtLWJsdXIpKTtcXG5cXG4gICAgJltkYXRhLXNpZGU9XCJ0b3BcIl0ge1xcbiAgICAgIHRvcDogMDtcXG4gICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCB0cmFuc3BhcmVudCwgdmFyKC0tY29sb3ItYmcpKTtcXG4gICAgICBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jb2xvci1iZykgdmFyKC0tc3RvcCksIHRyYW5zcGFyZW50KTtcXG4gICAgfVxcbiAgfVxcbicsckkscmYpfSl9ZnVuY3Rpb24gckQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIHJMKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLCF0fHxhLmxlbmd0aCE9PXQpO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLHQpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiByRChlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4pcmV0dXJuIEFycmF5LmZyb20obik7aWYoXCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiByRChlLHQpfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiByTihlLHQpe3ZhciBuLHIsbyxhLGk9KDAseC5jKSgxMCksbD12b2lkIDAhPT1lJiZlO2lbMF0hPT10PyhuPXZvaWQgMD09PXQ/e306dCxpWzBdPXQsaVsxXT1uKTpuPWlbMV07dmFyIHM9bixjPXJMKCgwLHcudXNlU3RhdGUpKGwpLDIpLHU9Y1swXSxkPWNbMV0sZj1yTCgoMCx3LnVzZVN0YXRlKSghMSksMikscD1mWzBdLGg9ZlsxXSxtPXMuZW50ZXJEZWxheSxnPXMuZXhpdERlbGF5LHk9dm9pZCAwPT09bT8xOm0sdj12b2lkIDA9PT1nPzA6ZztyZXR1cm4gaVsyXSE9PWx8fGlbM10hPT15fHxpWzRdIT09dj8ocj1mdW5jdGlvbigpe3ZhciBlLHQ7cmV0dXJuIGw/KGQoITApLHk8PTA/aCghMCk6ZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aCghMCl9LHkpKTooaCghMSksdjw9MD9kKCExKTp0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkKCExKX0sdikpLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGUpLGNsZWFyVGltZW91dCh0KX19LG89W2wseSx2XSxpWzJdPWwsaVszXT15LGlbNF09dixpWzVdPXIsaVs2XT1vKToocj1pWzVdLG89aVs2XSksKDAsdy51c2VFZmZlY3QpKHIsbyksaVs3XSE9PXV8fGlbOF0hPT1wPyhhPXttb3VudGVkOnUscmVuZGVyZWQ6cH0saVs3XT11LGlbOF09cCxpWzldPWEpOmE9aVs5XSxhfWZ1bmN0aW9uIHJSKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX1mdW5jdGlvbiByTShlLHQpe3JldHVybiB0PW51bGwhPXQ/dDp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pKX0pLGV9ZnVuY3Rpb24gclooZSl7dmFyIHQsbixyLG8sYSxpLGwscz0oMCx4LmMpKDE4KSxjPWUuc3RhdGUsdT1lLmRpc3BhdGNoLGQ9ZS5nZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscyxmPWUucnVudGltZUVycm9ycyxwPWUuZXJyb3JDb3VudCxoPSEhcHJvY2Vzcy5lbnYuVFVSQk9QQUNLO3NbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8odD17ZXhpdERlbGF5OjIwMH0sc1swXT10KTp0PXNbMF07dmFyIG09ck4oYy5pc0Vycm9yT3ZlcmxheU9wZW4sdCksZz1tLm1vdW50ZWQseT1tLnJlbmRlcmVkO3NbMV0hPT1wfHxzWzJdIT09eXx8c1szXSE9PWMudmVyc2lvbkluZm8/KG49e3JlbmRlcmVkOnksdHJhbnNpdGlvbkR1cmF0aW9uTXM6MjAwLGlzVHVyYm9wYWNrOmgsdmVyc2lvbkluZm86Yy52ZXJzaW9uSW5mbyxlcnJvckNvdW50OnB9LHNbMV09cCxzWzJdPXksc1szXT1jLnZlcnNpb25JbmZvLHNbNF09bik6bj1zWzRdO3ZhciB2PW47cmV0dXJuIG51bGwhPT1jLmJ1aWxkRXJyb3I/KHNbNV0hPT12fHxzWzZdIT09Yy5idWlsZEVycm9yPyhyPSgwLEEuanN4KShuYixyTShyUih7fSx2KSx7bWVzc2FnZTpjLmJ1aWxkRXJyb3IscmVuZGVyZWQ6ITB9KSksc1s1XT12LHNbNl09Yy5idWlsZEVycm9yLHNbN109cik6cj1zWzddLHIpOmYubGVuZ3RoP2c/KHNbMTBdIT09dT8oaT1mdW5jdGlvbigpe3Uoe3R5cGU6cX0pfSxzWzEwXT11LHNbMTFdPWkpOmk9c1sxMV0sc1sxMl0hPT12fHxzWzEzXSE9PWR8fHNbMTRdIT09Znx8c1sxNV0hPT1jLmRlYnVnSW5mb3x8c1sxNl0hPT1pPyhsPSgwLEEuanN4KShuSyxyTShyUih7fSx2KSx7ZGVidWdJbmZvOmMuZGVidWdJbmZvLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOmQscnVudGltZUVycm9yczpmLG9uQ2xvc2U6aX0pKSxzWzEyXT12LHNbMTNdPWQsc1sxNF09ZixzWzE1XT1jLmRlYnVnSW5mbyxzWzE2XT1pLHNbMTddPWwpOmw9c1sxN10sbCk6KHNbOV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oYT0oMCxBLmpzeCkody5TdXNwZW5zZSx7fSksc1s5XT1hKTphPXNbOV0sYSk6KHNbOF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8obz0oMCxBLmpzeCkody5TdXNwZW5zZSx7fSksc1s4XT1vKTpvPXNbOF0sbyl9ZnVuY3Rpb24gclUoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIHJGKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBycShlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7ckYoZSx0LG5bdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gckgoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0obj1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2gobi52YWx1ZSksIXR8fGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsdCl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHJVKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIHJVKGUsdCl9fShlLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfXZhciByVj1mdW5jdGlvbihlKXt2YXIgdCxuLHI9KDAseC5jKSg0KTtyZXR1cm4gZS5zdGF0ZS5idWlsZEVycm9yPyhyWzBdIT09ZT8odD0oMCxBLmpzeCkoclcscnEoe30sZSkpLHJbMF09ZSxyWzFdPXQpOnQ9clsxXSx0KTooclsyXSE9PWU/KG49KDAsQS5qc3gpKHIkLHJxKHt9LGUpKSxyWzJdPWUsclszXT1uKTpuPXJbM10sbil9LHIkPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGEsaT0oMCx4LmMpKDEyKSxsPWUuY2hpbGRyZW4scz1lLnN0YXRlLGM9ZS5pc0FwcERpcix1PXMuZXJyb3JzO2lbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8odD17fSxpWzBdPXQpOnQ9aVswXTt2YXIgZD1ySCgoMCx3LnVzZVN0YXRlKSh0KSwyKSxmPWRbMF0scD1kWzFdO2lmKGlbMV0hPT11fHxpWzJdIT09Zil7Zm9yKHZhciBoPVtdLG09bnVsbCxnPTA7Zzx1Lmxlbmd0aDsrK2cpe3ZhciB5PXVbZ10sdj15LmlkO2lmKHYgaW4gZil7aC5wdXNoKGZbdl0pO2NvbnRpbnVlfW09eTticmVha31uPVtoLG1dLGlbMV09dSxpWzJdPWYsaVszXT1ufWVsc2Ugbj1pWzNdO3ZhciBiPXJIKG4sMiksQT1iWzBdLEM9YlsxXTtpWzRdIT09Y3x8aVs1XSE9PUM/KHI9ZnVuY3Rpb24oKXtpZihudWxsIT1DKXt2YXIgZSx0LG49ITA7cmV0dXJuKGU9Qyx0PWMsbkQoZnVuY3Rpb24oKXt2YXIgbixyLG87cmV0dXJuIG5SKHRoaXMsZnVuY3Rpb24oYSl7c3dpdGNoKGEubGFiZWwpe2Nhc2UgMDp2YXIgaSxsO2lmKG49e2lkOmUuaWQscnVudGltZTohMCxlcnJvcjplLmVycm9yLHR5cGU6ZS50eXBlfSwhKFwidXNlXCJpbiB3KSlyZXR1cm5bMywxXTtyZXR1cm5bMixuTihuTCh7fSxuKSx7ZnJhbWVzOihsPShpPWZ1bmN0aW9uKCl7cmV0dXJuIG5EKGZ1bmN0aW9uKCl7cmV0dXJuIG5SKHRoaXMsZnVuY3Rpb24obil7c3dpdGNoKG4ubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxlUyhlLmZyYW1lcyxuVChlLmVycm9yKSx0KV07Y2FzZSAxOnJldHVyblsyLG4uc2VudCgpXX19KX0pKCl9KSgpLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KX0pXTtjYXNlIDE6cmV0dXJuIHI9W25MKHt9LG4pXSxvPXt9LFs0LGVTKGUuZnJhbWVzLG5UKGUuZXJyb3IpLHQpXTtjYXNlIDI6cmV0dXJuWzIsbk4uYXBwbHkodm9pZCAwLHIuY29uY2F0KFsoby5mcmFtZXM9YS5zZW50KCksbyldKSldO2Nhc2UgMzpyZXR1cm5bMl19fSl9KSgpKS50aGVuKGZ1bmN0aW9uKGUpe24mJnAoZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gbj1ycSh7fSx0KSxyPW51bGwhPShyPXJGKHt9LGUuaWQsZSkpP3I6e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdChyKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSxufSl9KSxmdW5jdGlvbigpe249ITF9fX0sbz1bQyxjXSxpWzRdPWMsaVs1XT1DLGlbNl09cixpWzddPW8pOihyPWlbNl0sbz1pWzddKSwoMCx3LnVzZUVmZmVjdCkocixvKTt2YXIgXz11Lmxlbmd0aDtyZXR1cm4gaVs4XSE9PWx8fGlbOV0hPT1BfHxpWzEwXSE9PV8/KGE9bCh7cnVudGltZUVycm9yczpBLHRvdGFsRXJyb3JDb3VudDpffSksaVs4XT1sLGlbOV09QSxpWzEwXT1fLGlbMTFdPWEpOmE9aVsxMV0sYX0sclc9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsZS5jaGlsZHJlbikoe3J1bnRpbWVFcnJvcnM6W10sdG90YWxFcnJvckNvdW50OjF9KX07ZnVuY3Rpb24gclkoKXt2YXIgZSx0LG49KDAseC5jKSg0KSxyPWRsKCksbz1yLnNoYWRvd1Jvb3QsYT1yLnN0YXRlO3JldHVybiBuWzBdIT09b3x8blsxXSE9PWEuc2NhbGU/KGU9ZnVuY3Rpb24oKXsobnVsbD09bz92b2lkIDA6by5ob3N0KSYmby5ob3N0LnN0eWxlLnNldFByb3BlcnR5KFwiLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlXCIsU3RyaW5nKGEuc2NhbGV8fDEpKX0sdD1bbyxhLnNjYWxlXSxuWzBdPW8sblsxXT1hLnNjYWxlLG5bMl09ZSxuWzNdPXQpOihlPW5bMl0sdD1uWzNdKSwoMCx3LnVzZUxheW91dEVmZmVjdCkoZSx0KSxudWxsfXZhciBySz1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZGV2dG9vbHMtaW5kaWNhdG9yL2RldnRvb2xzLWluZGljYXRvci5jc3NcIiksclg9e307ZnVuY3Rpb24gckcoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIHJRKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBySihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPShuPW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaChuLnZhbHVlKSwhdHx8YS5sZW5ndGghPT10KTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gclEoZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uKXJldHVybiBBcnJheS5mcm9tKG4pO2lmKFwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gclEoZSx0KX19KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gcjAoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIHIxKGUpe3ZhciB0LG4scixvLGE9KDAseC5jKSgzKTtyZXR1cm4oYVswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhyPSgwLEEuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0zLjA4ODg5IDExLjgzODRMMi42MjQ4NiAxMi4zMDI0TDEuNjk2NzggMTEuMzc0NEwyLjE2MDgyIDEwLjkxMDNMNi4wNzE3OCA2Ljk5OTM3TDIuMTYwODIgMy4wODg0MUwxLjY5Njc4IDIuNjI0MzdMMi42MjQ4NiAxLjY5NjI5TDMuMDg4ODkgMi4xNjAzM0w2Ljk5OTg2IDYuMDcxMjlMMTAuOTEwOCAyLjE2MDMzTDExLjM3NDkgMS42OTYyOUwxMi4zMDI5IDIuNjI0MzdMMTEuODM4OSAzLjA4ODQxTDcuOTI3OTMgNi45OTkzN0wxMS44Mzg5IDEwLjkxMDNMMTIuMzAyOSAxMS4zNzQ0TDExLjM3NDkgMTIuMzAyNEwxMC45MTA4IDExLjgzODRMNi45OTk4NiA3LjkyNzQ0TDMuMDg4ODkgMTEuODM4NFpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSxhWzBdPXIpOnI9YVswXSxhWzFdIT09ZSk/KG89KDAsQS5qc3gpKFwic3ZnXCIsKHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7d2lkdGg6XCIxMlwiLGhlaWdodDpcIjEyXCIsdmlld0JveDpcIjAgMCAxNCAxNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxuPW49e2NoaWxkcmVuOnJ9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSksdCkpLGFbMV09ZSxhWzJdPW8pOm89YVsyXSxvfWZ1bmN0aW9uIHIyKGUpe3ZhciB0LG4scixvLGE9KDAseC5jKSgzKTtyZXR1cm4oYVswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhyPSgwLEEuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0zLjk4MDcxIDEuMTI1TDEuMTI1IDMuOTgwNzFMMS4xMjUgOC4wMTkyOUwzLjk4MDcxIDEwLjg3NUg4LjAxOTI5TDEwLjg3NSA4LjAxOTI5VjMuOTgwNzFMOC4wMTkyOSAxLjEyNUgzLjk4MDcxWk0zLjgyNTM4IDBDMy42MjY0NyAwIDMuNDM1NyAwLjA3OTAxNzYgMy4yOTUwNSAwLjIxOTY3TDAuMjE5NjcgMy4yOTUwNUMwLjA3OTAxNzYgMy40MzU3IDAgMy42MjY0NyAwIDMuODI1MzhWOC4xNzQ2MkMwIDguMzczNTMgMC4wNzkwMTc4IDguNTY0MyAwLjIxOTY3IDguNzA0OTVMMy4yOTUwNSAxMS43ODAzQzMuNDM1NyAxMS45MjEgMy42MjY0NyAxMiAzLjgyNTM4IDEySDguMTc0NjJDOC4zNzM1MyAxMiA4LjU2NDMgMTEuOTIxIDguNzA0OTUgMTEuNzgwM0wxMS43ODAzIDguNzA0OTVDMTEuOTIxIDguNTY0MyAxMiA4LjM3MzUzIDEyIDguMTc0NjJWMy44MjUzOEMxMiAzLjYyNjQ3IDExLjkyMSAzLjQzNTcgMTEuNzgwMyAzLjI5NTA1TDguNzA0OTUgMC4yMTk2N0M4LjU2NDMgMC4wNzkwMTc3IDguMzczNTMgMCA4LjE3NDYyIDBIMy44MjUzOFpNNi41NjI1IDIuODEyNVYzLjM3NVY2VjYuNTYyNUg1LjQzNzVWNlYzLjM3NVYyLjgxMjVINi41NjI1Wk02IDlDNi40MTQyMSA5IDYuNzUgOC42NjQyMSA2Ljc1IDguMjVDNi43NSA3LjgzNTc5IDYuNDE0MjEgNy41IDYgNy41QzUuNTg1NzkgNy41IDUuMjUgNy44MzU3OSA1LjI1IDguMjVDNS4yNSA4LjY2NDIxIDUuNTg1NzkgOSA2IDlaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSksYVswXT1yKTpyPWFbMF0sYVsxXSE9PWUpPyhvPSgwLEEuanN4KShcInN2Z1wiLCh0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTIgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksbj1uPXtjaGlsZHJlbjpyfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pLHQpKSxhWzFdPWUsYVsyXT1vKTpvPWFbMl0sb31yWC5zdHlsZVRhZ1RyYW5zZm9ybT1tKCksclguc2V0QXR0cmlidXRlcz1kKCksclguaW5zZXJ0PWMoKSxyWC5kb21BUEk9bCgpLHJYLmluc2VydFN0eWxlRWxlbWVudD1wKCksYSgpKHJLLlosclgpLHJLLlomJnJLLloubG9jYWxzJiZySy5aLmxvY2Fsczt2YXIgcjQ9KDAsdy5jcmVhdGVDb250ZXh0KShudWxsKSxyNT1mdW5jdGlvbigpe3JldHVybigwLHcudXNlQ29udGV4dCkocjQpfTtmdW5jdGlvbiByMyhlKXtyZXR1cm4gb3crMzYvZS5zY2FsZSs5fWZ1bmN0aW9uIHI2KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiByOShlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9ZSxvPXQsYT1uW3RdLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gcjgoZSx0KXtyZXR1cm4gdD1udWxsIT10P3Q6e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKSl9KSxlfWZ1bmN0aW9uIHI3KGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSwhKHQuaW5kZXhPZihuKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb31mdW5jdGlvbiBvZShlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPShuPW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaChuLnZhbHVlKSwhdHx8YS5sZW5ndGghPT10KTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gcjYoZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uKXJldHVybiBBcnJheS5mcm9tKG4pO2lmKFwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gcjYoZSx0KX19KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gb3QoKXt2YXIgZSx0LG49KGU9W1wiXFxuICAgICAgICAgIFtkYXRhLW5leHQtYmFkZ2Utcm9vdF0ge1xcbiAgICAgICAgICAgIC0tdGltaW5nOiBjdWJpYy1iZXppZXIoMC4yMywgMC44OCwgMC4yNiwgMC45Mik7XFxuICAgICAgICAgICAgLS1kdXJhdGlvbi1sb25nOiAyNTBtcztcXG4gICAgICAgICAgICAtLWNvbG9yLW91dGVyLWJvcmRlcjogIzE3MTcxNztcXG4gICAgICAgICAgICAtLWNvbG9yLWlubmVyLWJvcmRlcjogaHNsYSgwLCAwJSwgMTAwJSwgMC4xNCk7XFxuICAgICAgICAgICAgLS1jb2xvci1ob3Zlci1hbHBoYS1zdWJ0bGU6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMTMpO1xcbiAgICAgICAgICAgIC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3I6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMik7XFxuICAgICAgICAgICAgLS1jb2xvci1ob3Zlci1hbHBoYS1lcnJvci0yOiBoc2xhKDAsIDAlLCAxMDAlLCAwLjI1KTtcXG4gICAgICAgICAgICAtLW1hcmstc2l6ZTogY2FsYyh2YXIoLS1zaXplKSAtIHZhcigtLXNpemUtMikgKiAyKTtcXG5cXG4gICAgICAgICAgICAtLWZvY3VzLWNvbG9yOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XFxuICAgICAgICAgICAgLS1mb2N1cy1yaW5nOiAycHggc29saWQgdmFyKC0tZm9jdXMtY29sb3IpO1xcblxcbiAgICAgICAgICAgICY6aGFzKFtkYXRhLW5leHQtYmFkZ2VdW2RhdGEtZXJyb3I9J3RydWUnXSkge1xcbiAgICAgICAgICAgICAgLS1mb2N1cy1jb2xvcjogI2ZmZjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtZGlzYWJsZWQtaWNvbl0ge1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtbmV4dC1iYWRnZV0ge1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1zaXplKTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUpO1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpO1xcbiAgICAgICAgICAgIGJveC1zaGFkb3c6XFxuICAgICAgICAgICAgICAwIDAgMCAxcHggdmFyKC0tY29sb3Itb3V0ZXItYm9yZGVyKSxcXG4gICAgICAgICAgICAgIGluc2V0IDAgMCAwIDFweCB2YXIoLS1jb2xvci1pbm5lci1ib3JkZXIpLFxcbiAgICAgICAgICAgICAgMHB4IDE2cHggMzJweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7XFxuICAgICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDQ4cHgpO1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHNjYWxlOiAxO1xcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICAgICAgd2lsbC1jaGFuZ2U6IHNjYWxlLCBib3gtc2hhZG93LCB3aWR0aCwgYmFja2dyb3VuZDtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOlxcbiAgICAgICAgICAgICAgc2NhbGUgdmFyKC0tZHVyYXRpb24tc2hvcnQpIHZhcigtLXRpbWluZyksXFxuICAgICAgICAgICAgICB3aWR0aCB2YXIoLS1kdXJhdGlvbi1sb25nKSB2YXIoLS10aW1pbmcpLFxcbiAgICAgICAgICAgICAgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1sb25nKSB2YXIoLS10aW1pbmcpLFxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG5cXG4gICAgICAgICAgICAmOmFjdGl2ZVtkYXRhLWVycm9yPSdmYWxzZSddIHtcXG4gICAgICAgICAgICAgIHNjYWxlOiAwLjk1O1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtYW5pbWF0ZT0ndHJ1ZSddOm5vdCg6aG92ZXIpIHtcXG4gICAgICAgICAgICAgIHNjYWxlOiAxLjAyO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtZXJyb3I9J2ZhbHNlJ106aGFzKFtkYXRhLW5leHQtbWFya106Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgICAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICAgICAgICBvdXRsaW5lLW9mZnNldDogM3B4O1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtZXJyb3I9J3RydWUnXSB7XFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjY2EyYTMwO1xcbiAgICAgICAgICAgICAgLS1jb2xvci1pbm5lci1ib3JkZXI6ICNlNTQ4NGQ7XFxuXFxuICAgICAgICAgICAgICBbZGF0YS1uZXh0LW1hcmtdIHtcXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3IpO1xcbiAgICAgICAgICAgICAgICBvdXRsaW5lLW9mZnNldDogMHB4O1xcblxcbiAgICAgICAgICAgICAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yLTIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICZbZGF0YS1lcnJvci1leHBhbmRlZD0nZmFsc2UnXVtkYXRhLWVycm9yPSd0cnVlJ10gfiBbZGF0YS1kb3RdIHtcXG4gICAgICAgICAgICAgIHNjYWxlOiAxO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICA+IGRpdiB7XFxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtY29sbGFwc2VdOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlc106aGFzKFtkYXRhLWlzc3Vlcy1vcGVuXTpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtZG90XSB7XFxuICAgICAgICAgICAgY29udGVudDogJyc7XFxuICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUtOCk7XFxuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTgpO1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XFxuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHZhcigtLWNvbG9yLW91dGVyLWJvcmRlcik7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgICAgICB0b3A6IDJweDtcXG4gICAgICAgICAgICByaWdodDogMHB4O1xcbiAgICAgICAgICAgIHNjYWxlOiAwO1xcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHNjYWxlIDIwMG1zIHZhcigtLXRpbWluZyk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tZHVyYXRpb24tc2hvcnQpO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlc10ge1xcbiAgICAgICAgICAgIC0tcGFkZGluZy1sZWZ0OiA4cHg7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBnYXA6IDJweDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogOHB4O1xcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDhweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMzIpO1xcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG5cXG4gICAgICAgICAgICAmOmhhcyhbZGF0YS1pc3N1ZXMtb3Blbl06aG92ZXIpIHtcXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgJjpoYXMoW2RhdGEtaXNzdWVzLWNvbGxhcHNlXSkge1xcbiAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogY2FsYyh2YXIoLS1wYWRkaW5nLWxlZnQpIC8gMik7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIFtkYXRhLWNyb3NzXSB7XFxuICAgICAgICAgICAgICB0cmFuc2xhdGU6IDBweCAtMXB4O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtb3Blbl0ge1xcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMyk7XFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xcbiAgICAgICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBnYXA6IDJweDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0zNik7XFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgICAgICAgICB6LWluZGV4OiAyO1xcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuXFxuICAgICAgICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb2xsYXBzZV0ge1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTI0KTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjQpO1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG5cXG4gICAgICAgICAgICAmOmhvdmVyIHtcXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtY3Jvc3NdIHtcXG4gICAgICAgICAgICBjb2xvcjogI2ZmZjtcXG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xMik7XFxuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTEyKTtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1uZXh0LW1hcmtdIHtcXG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tbWFyay1zaXplKTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLW1hcmstc2l6ZSk7XFxuICAgICAgICAgICAgbWFyZ2luOiAwIDJweDtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWxvbmcpIHZhcigtLXRpbWluZyk7XFxuXFxuICAgICAgICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtc3VidGxlKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgc3ZnIHtcXG4gICAgICAgICAgICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUtNDApO1xcbiAgICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTQwKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LWFuaW1hdGlvbl0ge1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7XFxuICAgICAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlciBjZW50ZXI7XFxuICAgICAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcXG5cXG4gICAgICAgICAgICAmW2RhdGEtYW5pbWF0ZT0nZmFsc2UnXSB7XFxuICAgICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZXhpdF0sXFxuICAgICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZW50ZXJdIHtcXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwbXM7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgID4gKiB7XFxuICAgICAgICAgICAgICBncmlkLWFyZWE6IDEgLyAxO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZXhpdF0ge1xcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWRlT3V0IDMwMG1zIHZhcigtLXRpbWluZykgZm9yd2FyZHM7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1lbnRlcl0ge1xcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMzAwbXMgdmFyKC0tdGltaW5nKSBmb3J3YXJkcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LXBsdXJhbF0ge1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICAgICAgICAmW2RhdGEtYW5pbWF0ZT0ndHJ1ZSddIHtcXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZUluIDMwMG1zIHZhcigtLXRpbWluZykgZm9yd2FyZHM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIC5wYXRoMCB7XFxuICAgICAgICAgICAgYW5pbWF0aW9uOiBkcmF3MCAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIC5wYXRoMSB7XFxuICAgICAgICAgICAgYW5pbWF0aW9uOiBkcmF3MSAxLjVzIGVhc2Utb3V0IGluZmluaXRlO1xcbiAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMC4zcztcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICAucGF1c2VkIHtcXG4gICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7XFxuICAgICAgICAgICAgMCUge1xcbiAgICAgICAgICAgICAgb3BhY2l0eTogMDtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigycHgpO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDhweCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDEwMCUge1xcbiAgICAgICAgICAgICAgb3BhY2l0eTogMTtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigwcHgpO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGZhZGVPdXQge1xcbiAgICAgICAgICAgIDAlIHtcXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgICAgICAgICBmaWx0ZXI6IGJsdXIoMHB4KTtcXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMnB4KTtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigycHgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGRyYXcwIHtcXG4gICAgICAgICAgICAwJSxcXG4gICAgICAgICAgICAyNSUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0yOS42O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAyNSUsXFxuICAgICAgICAgICAgNTAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICA1MCUsXFxuICAgICAgICAgICAgNzUlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICA3NSUsXFxuICAgICAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMjkuNjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgQGtleWZyYW1lcyBkcmF3MSB7XFxuICAgICAgICAgICAgMCUsXFxuICAgICAgICAgICAgMjAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTEuNjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgMjAlLFxcbiAgICAgICAgICAgIDUwJSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgNTAlLFxcbiAgICAgICAgICAgIDc1JSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgNzUlLFxcbiAgICAgICAgICAgIDEwMCUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDExLjY7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbikge1xcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1leGl0XSxcXG4gICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZW50ZXJdLFxcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1wbHVyYWxdIHtcXG4gICAgICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMG1zICFpbXBvcnRhbnQ7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICBcIl0sdHx8KHQ9ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUodCl9fSkpKTtyZXR1cm4gb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sbn1mdW5jdGlvbiBvbihlKXt2YXIgdCxuLHIsbyxhLGksbCxzLGMsdSxkLGYscCxoLG0sZyx5LHYsYixDLF8sayxFLGosUyxPLEIsUCxJLFQseixELEwsTixSLE0sWixVLEgsViwkLFcsWT0oMCx4LmMpKDQwKTtZWzBdIT09ZT8oRD1yNyhlLFtcIm9uVHJpZ2dlckNsaWNrXCJdKSxMPWUub25UcmlnZ2VyQ2xpY2ssWVswXT1lLFlbMV09RCxZWzJdPUwpOihEPVlbMV0sTD1ZWzJdKTt2YXIgSz1kbCgpLFg9Sy5zdGF0ZSxHPUsuZGlzcGF0Y2gsUT11MygpLnRvdGFsRXJyb3JDb3VudCxKPTM2L1guc2NhbGUsZWU9cjUoKSxldD1lZS5wYW5lbCxlbj1lZS50cmlnZ2VyUmVmLGVyPWVlLnNldFBhbmVsLGVvPVwicGFuZWwtc2VsZWN0b3JcIj09PWV0LGVhPVE+MCxlaT1vZSgoMCx3LnVzZVN0YXRlKShlYSksMiksZWw9ZWlbMF0sZXM9ZWlbMV0sZWM9b2UoKDAsdy51c2VTdGF0ZSkoZWEpLDIpLGVkPWVjWzBdLGVmPWVjWzFdO2VkIT09ZWEmJihlZihlYSksZXMoZWEpKTt2YXIgZXA9b2UoKDAsdy51c2VTdGF0ZSkoITEpLDIpLGVoPWVwWzBdLGVtPWVwWzFdLGVnPSh0PVEsbj0xNTAsYT0oMCx4LmMpKDQpLGk9bixsPSgwLHcudXNlUmVmKShudWxsKSxkPShzPSgwLHcudXNlU3RhdGUpKCExKSxjPTIsdT1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShzKXx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPShuPW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaChuLnZhbHVlKSxhLmxlbmd0aCE9PXQpO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShzLDIpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiByRyhlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4pcmV0dXJuIEFycmF5LmZyb20obik7aWYoXCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiByRyhlLHQpfX0ocyxjKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSlbMF0sZj11WzFdLGFbMF0hPT1pfHxhWzFdIT09dD8ocj1mdW5jdGlvbigpe2lmKHQ+MCl7dmFyIGU9bC5jdXJyZW50P0RhdGUubm93KCktbC5jdXJyZW50Oi0xO2lmKGwuY3VycmVudD1EYXRlLm5vdygpLCEoZTw9aSkpe2YoITApO3ZhciBuPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZighMSl9LGkpO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKX19fX0sbz1bdCxpXSxhWzBdPWksYVsxXT10LGFbMl09cixhWzNdPW8pOihyPWFbMl0sbz1hWzNdKSwoMCx3LnVzZUVmZmVjdCkocixvKSxkKSxleT0oMCx3LnVzZVJlZikobnVsbCksZXY9KHA9ZXksZz0oMCx4LmMpKDQpLHY9KHk9ckooKDAsdy51c2VTdGF0ZSkoMCksMikpWzBdLGI9eVsxXSxnWzBdIT09cC5jdXJyZW50PyhoPWZ1bmN0aW9uKCl7dmFyIGU9cC5jdXJyZW50O2lmKGUpe3ZhciB0PW5ldyBSZXNpemVPYnNlcnZlcihmdW5jdGlvbihlKXtiKHJKKGUsMSlbMF0uY29udGVudFJlY3Qud2lkdGgpfSk7cmV0dXJuIHQub2JzZXJ2ZShlKSxmdW5jdGlvbigpe3JldHVybiB0LmRpc2Nvbm5lY3QoKX19fSxnWzBdPXAuY3VycmVudCxnWzFdPWgpOmg9Z1sxXSxnWzJdIT09cD8obT1bcF0sZ1syXT1wLGdbM109bSk6bT1nWzNdLCgwLHcudXNlRWZmZWN0KShoLG0pLHYpLGViPShDPVguYnVpbGRpbmdJbmRpY2F0b3J8fFgucmVuZGVyaW5nSW5kaWNhdG9yLEU9KDAseC5jKSg0KSxqPTc1MCxQPShTPSgwLHcudXNlU3RhdGUpKCExKSxPPTIsQj1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShTKXx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPShuPW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaChuLnZhbHVlKSxhLmxlbmd0aCE9PXQpO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShTLDIpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiByMChlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4pcmV0dXJuIEFycmF5LmZyb20obik7aWYoXCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiByMChlLHQpfX0oUyxPKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSlbMF0sST1CWzFdLFQ9KDAsdy51c2VSZWYpKG51bGwpLHo9KDAsdy51c2VSZWYpKG51bGwpLEVbMF0hPT1qfHxFWzFdIT09Qz8oXz1mdW5jdGlvbigpe2lmKHouY3VycmVudCYmKGNsZWFyVGltZW91dCh6LmN1cnJlbnQpLHouY3VycmVudD1udWxsKSxDKW51bGw9PT1ULmN1cnJlbnQmJihULmN1cnJlbnQ9RGF0ZS5ub3coKSksSSghMCk7ZWxzZSBpZihudWxsPT09VC5jdXJyZW50KUkoITEpO2Vsc2V7dmFyIGU9RGF0ZS5ub3coKS1ULmN1cnJlbnQsdD1qKk1hdGguY2VpbChlL2opLWU7dD4wP3ouY3VycmVudD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7SSghMSksVC5jdXJyZW50PW51bGx9LHQpOihJKCExKSxULmN1cnJlbnQ9bnVsbCl9cmV0dXJuIGZ1bmN0aW9uKCl7ei5jdXJyZW50JiZjbGVhclRpbWVvdXQoei5jdXJyZW50KX19LGs9W0Msal0sRVswXT1qLEVbMV09QyxFWzJdPV8sRVszXT1rKTooXz1FWzJdLGs9RVszXSksKDAsdy51c2VFZmZlY3QpKF8sayksUCksZUE9ZWx8fFguZGlzYWJsZURldkluZGljYXRvcixleD0wPT09ZXY/XCJhdXRvXCI6ZXYsZXc9XCJcIi5jb25jYXQoSixcInB4XCIpLGVDPVguZGlzYWJsZURldkluZGljYXRvciYmKCFlYXx8ZWgpP1wibm9uZVwiOlwiYmxvY2tcIjtZWzNdIT09ZXd8fFlbNF0hPT1lQz8oTj17XCItLXNpemVcIjpldyxcIi0tZHVyYXRpb24tc2hvcnRcIjpcIlwiLmNvbmNhdCgxNTAsXCJtc1wiKSxkaXNwbGF5OmVDfSxZWzNdPWV3LFlbNF09ZUMsWVs1XT1OKTpOPVlbNV07dmFyIGVfPU47cmV0dXJuIFlbNl09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oUj0oMCxBLmpzeCkoXCJzdHlsZVwiLHtjaGlsZHJlbjpldShvdCgpKX0pLFlbNl09Uik6Uj1ZWzZdLFlbN10hPT1leD8oTT17d2lkdGg6ZXh9LFlbN109ZXgsWVs4XT1NKTpNPVlbOF0sWVs5XSE9PUR8fFlbMTBdIT09ZWJ8fFlbMTFdIT09ZW98fFlbMTJdIT09THx8WVsxM10hPT1YLmJ1aWxkaW5nSW5kaWNhdG9yfHxZWzE0XSE9PVguZGlzYWJsZURldkluZGljYXRvcnx8WVsxNV0hPT1lbj8oWj0hWC5kaXNhYmxlRGV2SW5kaWNhdG9yJiYoMCxBLmpzeCkoXCJidXR0b25cIixyOChyOSh7aWQ6XCJuZXh0LWxvZ29cIixyZWY6ZW4sXCJkYXRhLW5leHQtbWFya1wiOiEwLFwiZGF0YS1uZXh0LW1hcmstbG9hZGluZ1wiOmViLG9uQ2xpY2s6TCxkaXNhYmxlZDpYLmRpc2FibGVEZXZJbmRpY2F0b3IsXCJhcmlhLWhhc3BvcHVwXCI6XCJtZW51XCIsXCJhcmlhLWV4cGFuZGVkXCI6ZW8sXCJhcmlhLWNvbnRyb2xzXCI6XCJuZXh0anMtZGV2LXRvb2xzLW1lbnVcIixcImFyaWEtbGFiZWxcIjpcIlwiLmNvbmNhdChlbz9cIkNsb3NlXCI6XCJPcGVuXCIsXCIgTmV4dC5qcyBEZXYgVG9vbHNcIiksXCJkYXRhLW5leHRqcy1kZXYtdG9vbHMtYnV0dG9uXCI6ITB9LEQpLHtjaGlsZHJlbjooMCxBLmpzeCkob28se2lzTG9hZGluZzplYixpc0RldkJ1aWxkaW5nOlguYnVpbGRpbmdJbmRpY2F0b3J9KX0pKSxZWzldPUQsWVsxMF09ZWIsWVsxMV09ZW8sWVsxMl09TCxZWzEzXT1YLmJ1aWxkaW5nSW5kaWNhdG9yLFlbMTRdPVguZGlzYWJsZURldkluZGljYXRvcixZWzE1XT1lbixZWzE2XT1aKTpaPVlbMTZdLFlbMTddIT09R3x8WVsxOF0hPT1lQXx8WVsxOV0hPT1lZ3x8WVsyMF0hPT1lcnx8WVsyMV0hPT1YLmJ1aWxkRXJyb3J8fFlbMjJdIT09WC5kaXNhYmxlRGV2SW5kaWNhdG9yfHxZWzIzXSE9PVguaXNFcnJvck92ZXJsYXlPcGVufHxZWzI0XSE9PVF8fFlbMjVdIT09ZW4/KFU9ZUEmJigwLEEuanN4cykoXCJkaXZcIix7XCJkYXRhLWlzc3Vlc1wiOiEwLGNoaWxkcmVuOlsoMCxBLmpzeHMpKFwiYnV0dG9uXCIse1wiZGF0YS1pc3N1ZXMtb3BlblwiOiEwLFwiYXJpYS1sYWJlbFwiOlwiT3BlbiBpc3N1ZXMgb3ZlcmxheVwiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtpZihYLmlzRXJyb3JPdmVybGF5T3BlbilyZXR1cm4gdm9pZCBHKHt0eXBlOnF9KTtHKHt0eXBlOkZ9KSxlcihudWxsKX0sY2hpbGRyZW46W1guZGlzYWJsZURldkluZGljYXRvciYmKDAsQS5qc3gpKFwiZGl2XCIse1wiZGF0YS1kaXNhYmxlZC1pY29uXCI6ITAsY2hpbGRyZW46KDAsQS5qc3gpKHIyLHt9KX0pLCgwLEEuanN4KShvcix7YW5pbWF0ZTplZyxcImRhdGEtaXNzdWVzLWNvdW50LWFuaW1hdGlvblwiOiEwLGNoaWxkcmVuOlF9LFEpLFwiIFwiLCgwLEEuanN4cykoXCJkaXZcIix7Y2hpbGRyZW46W1wiSXNzdWVcIixRPjEmJigwLEEuanN4KShcInNwYW5cIix7XCJhcmlhLWhpZGRlblwiOiEwLFwiZGF0YS1pc3N1ZXMtY291bnQtcGx1cmFsXCI6ITAsXCJkYXRhLWFuaW1hdGVcIjplZyYmMj09PVEsY2hpbGRyZW46XCJzXCJ9KV19KV19KSwhWC5idWlsZEVycm9yJiYoMCxBLmpzeCkoXCJidXR0b25cIix7XCJkYXRhLWlzc3Vlcy1jb2xsYXBzZVwiOiEwLFwiYXJpYS1sYWJlbFwiOlwiQ29sbGFwc2UgaXNzdWVzIGJhZGdlXCIsb25DbGljazpmdW5jdGlvbigpe3ZhciBlO1guZGlzYWJsZURldkluZGljYXRvcj9lbSghMCk6ZXMoITEpLG51bGw9PShlPWVuLmN1cnJlbnQpfHxlLmZvY3VzKCl9LGNoaWxkcmVuOigwLEEuanN4KShyMSx7XCJkYXRhLWNyb3NzXCI6ITB9KX0pXX0pLFlbMTddPUcsWVsxOF09ZUEsWVsxOV09ZWcsWVsyMF09ZXIsWVsyMV09WC5idWlsZEVycm9yLFlbMjJdPVguZGlzYWJsZURldkluZGljYXRvcixZWzIzXT1YLmlzRXJyb3JPdmVybGF5T3BlbixZWzI0XT1RLFlbMjVdPWVuLFlbMjZdPVUpOlU9WVsyNl0sWVsyN10hPT1afHxZWzI4XSE9PVU/KEg9KDAsQS5qc3hzKShcImRpdlwiLHtyZWY6ZXksY2hpbGRyZW46W1osVV19KSxZWzI3XT1aLFlbMjhdPVUsWVsyOV09SCk6SD1ZWzI5XSxZWzMwXSE9PWVhfHxZWzMxXSE9PWVBfHxZWzMyXSE9PWVnfHxZWzMzXSE9PU18fFlbMzRdIT09SD8oVj0oMCxBLmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHQtYmFkZ2VcIjohMCxcImRhdGEtZXJyb3JcIjplYSxcImRhdGEtZXJyb3ItZXhwYW5kZWRcIjplQSxcImRhdGEtYW5pbWF0ZVwiOmVnLHN0eWxlOk0sY2hpbGRyZW46SH0pLFlbMzBdPWVhLFlbMzFdPWVBLFlbMzJdPWVnLFlbMzNdPU0sWVszNF09SCxZWzM1XT1WKTpWPVlbMzVdLFlbMzZdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KCQ9KDAsQS5qc3gpKFwiZGl2XCIse1wiYXJpYS1oaWRkZW5cIjohMCxcImRhdGEtZG90XCI6ITB9KSxZWzM2XT0kKTokPVlbMzZdLFlbMzddIT09Vnx8WVszOF0hPT1lXz8oVz0oMCxBLmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0LWJhZGdlLXJvb3RcIjohMCxzdHlsZTplXyxjaGlsZHJlbjpbUixWLCRdfSksWVszN109VixZWzM4XT1lXyxZWzM5XT1XKTpXPVlbMzldLFd9ZnVuY3Rpb24gb3IoZSl7dmFyIHQsbixyLG8sYSxpLGw9KDAseC5jKSgxMyk7bFswXSE9PWU/KG49cjcoZSxbXCJjaGlsZHJlblwiLFwiYW5pbWF0ZVwiXSksdD1lLmNoaWxkcmVuLHI9ZS5hbmltYXRlLGxbMF09ZSxsWzFdPXQsbFsyXT1uLGxbM109cik6KHQ9bFsxXSxuPWxbMl0scj1sWzNdKTt2YXIgcz12b2lkIDA9PT1yfHxyLGM9dC0xO3JldHVybiBsWzRdIT09Yz8obz0oMCxBLmpzeCkoXCJkaXZcIix7XCJhcmlhLWhpZGRlblwiOiEwLFwiZGF0YS1pc3N1ZXMtY291bnQtZXhpdFwiOiEwLGNoaWxkcmVuOmN9KSxsWzRdPWMsbFs1XT1vKTpvPWxbNV0sbFs2XSE9PXQ/KGE9KDAsQS5qc3gpKFwiZGl2XCIse1wiZGF0YS1pc3N1ZXMtY291bnRcIjohMCxcImRhdGEtaXNzdWVzLWNvdW50LWVudGVyXCI6ITAsY2hpbGRyZW46dH0pLGxbNl09dCxsWzddPWEpOmE9bFs3XSxsWzhdIT09c3x8bFs5XSE9PW58fGxbMTBdIT09b3x8bFsxMV0hPT1hPyhpPSgwLEEuanN4cykoXCJkaXZcIixyOChyOSh7fSxuKSx7XCJkYXRhLWFuaW1hdGVcIjpzLGNoaWxkcmVuOltvLGFdfSkpLGxbOF09cyxsWzldPW4sbFsxMF09byxsWzExXT1hLGxbMTJdPWkpOmk9bFsxMl0saX1mdW5jdGlvbiBvbyhlKXt2YXIgdCxuLHIsbyxhLGksbCxzLGM9KDAseC5jKSgxOSksdT1lLmlzTG9hZGluZyxkPWUuaXNEZXZCdWlsZGluZz9cInJnYmEoMjU1LDI1NSwyNTUsMC43KVwiOlwid2hpdGVcIixmPXU/XCJwYXRoMFwiOlwicGF1c2VkXCI7Y1swXSE9PWY/KHQ9KDAsQS5qc3gpKFwicGF0aFwiLHtjbGFzc05hbWU6ZixkOlwiTTEzLjMgMTUuMiBMMi4zNCAxIFYxMi42XCIsZmlsbDpcIm5vbmVcIixzdHJva2U6XCJ1cmwoI25leHRfbG9nb19wYWludDBfbGluZWFyXzEzNTdfMTA4NTMpXCIsc3Ryb2tlV2lkdGg6XCIxLjg2XCIsbWFzazpcInVybCgjbmV4dF9sb2dvX21hc2swKVwiLHN0cm9rZURhc2hhcnJheTpcIjI5LjZcIixzdHJva2VEYXNob2Zmc2V0OlwiMjkuNlwifSksY1swXT1mLGNbMV09dCk6dD1jWzFdO3ZhciBwPXU/XCJwYXRoMVwiOlwicGF1c2VkXCI7cmV0dXJuIGNbMl0hPT1wPyhuPSgwLEEuanN4KShcInBhdGhcIix7Y2xhc3NOYW1lOnAsZDpcIk0xMS44MjUgMS41IFYxMy4xXCIsc3Ryb2tlV2lkdGg6XCIxLjg2XCIsc3Ryb2tlOlwidXJsKCNuZXh0X2xvZ29fcGFpbnQxX2xpbmVhcl8xMzU3XzEwODUzKVwiLHN0cm9rZURhc2hhcnJheTpcIjExLjZcIixzdHJva2VEYXNob2Zmc2V0OlwiMTEuNlwifSksY1syXT1wLGNbM109bik6bj1jWzNdLGNbNF0hPT10fHxjWzVdIT09bj8ocj0oMCxBLmpzeHMpKFwiZ1wiLHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoOC41LCAxMylcIixjaGlsZHJlbjpbdCxuXX0pLGNbNF09dCxjWzVdPW4sY1s2XT1yKTpyPWNbNl0sY1s3XSE9PWQ/KG89KDAsQS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibmV4dF9sb2dvX3BhaW50MF9saW5lYXJfMTM1N18xMDg1M1wiLHgxOlwiOS45NTU1NVwiLHkxOlwiMTEuMTIyNlwiLHgyOlwiMTUuNDc3OFwiLHkyOlwiMTcuOTY3MVwiLGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNoaWxkcmVuOlsoMCxBLmpzeCkoXCJzdG9wXCIse3N0b3BDb2xvcjpkfSksKDAsQS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIwLjYwNDA3MlwiLHN0b3BDb2xvcjpkLHN0b3BPcGFjaXR5OlwiMFwifSksKDAsQS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIxXCIsc3RvcENvbG9yOmQsc3RvcE9wYWNpdHk6XCIwXCJ9KV19KSxjWzddPWQsY1s4XT1vKTpvPWNbOF0sY1s5XSE9PWQ/KGE9KDAsQS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibmV4dF9sb2dvX3BhaW50MV9saW5lYXJfMTM1N18xMDg1M1wiLHgxOlwiMTEuODIyMlwiLHkxOlwiMS40MDAzOVwiLHgyOlwiMTEuNzkxXCIseTI6XCI5LjYyNTQyXCIsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY2hpbGRyZW46WygwLEEuanN4KShcInN0b3BcIix7c3RvcENvbG9yOmR9KSwoMCxBLmpzeCkoXCJzdG9wXCIse29mZnNldDpcIjFcIixzdG9wQ29sb3I6ZCxzdG9wT3BhY2l0eTpcIjBcIn0pXX0pLGNbOV09ZCxjWzEwXT1hKTphPWNbMTBdLGNbMTFdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGk9KDAsQS5qc3hzKShcIm1hc2tcIix7aWQ6XCJuZXh0X2xvZ29fbWFzazBcIixjaGlsZHJlbjpbKDAsQS5qc3gpKFwicmVjdFwiLHt3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCIsZmlsbDpcIndoaXRlXCJ9KSwoMCxBLmpzeCkoXCJyZWN0XCIse3dpZHRoOlwiNVwiLGhlaWdodDpcIjEuNVwiLGZpbGw6XCJibGFja1wifSldfSksY1sxMV09aSk6aT1jWzExXSxjWzEyXSE9PW98fGNbMTNdIT09YT8obD0oMCxBLmpzeHMpKFwiZGVmc1wiLHtjaGlsZHJlbjpbbyxhLGldfSksY1sxMl09byxjWzEzXT1hLGNbMTRdPWwpOmw9Y1sxNF0sY1sxNV0hPT11fHxjWzE2XSE9PXJ8fGNbMTddIT09bD8ocz0oMCxBLmpzeHMpKFwic3ZnXCIse3dpZHRoOlwiNDBcIixoZWlnaHQ6XCI0MFwiLHZpZXdCb3g6XCIwIDAgNDAgNDBcIixmaWxsOlwibm9uZVwiLFwiZGF0YS1uZXh0LW1hcmstbG9hZGluZ1wiOnUsY2hpbGRyZW46W3IsbF19KSxjWzE1XT11LGNbMTZdPXIsY1sxN109bCxjWzE4XT1zKTpzPWNbMThdLHN9dmFyIG9hPXcuZm9yd2FyZFJlZihmdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxhLGksbCxzLGMsdSxkPSgwLHguYykoMTUpO3JldHVybihkWzBdIT09ZT8obD1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sISh0LmluZGV4T2Yobik+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsW1wib25DbGlja1wiLFwiY2hpbGRyZW5cIixcImNsYXNzTmFtZVwiXSksaT1lLm9uQ2xpY2ssbz1lLmNoaWxkcmVuLGE9ZS5jbGFzc05hbWUsZFswXT1lLGRbMV09byxkWzJdPWEsZFszXT1pLGRbNF09bCk6KG89ZFsxXSxhPWRbMl0saT1kWzNdLGw9ZFs0XSksZFs1XSE9PWk/KHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0LmNsb3Nlc3QoXCJhXCIpfHxlLnByZXZlbnREZWZhdWx0KCksbnVsbD09aT92b2lkIDA6aSgpfSxkWzVdPWksZFs2XT1zKTpzPWRbNl0sZFs3XSE9PWE/KGM9ZUooXCJuZXh0anMtdG9hc3RcIixhKSxkWzddPWEsZFs4XT1jKTpjPWRbOF0sZFs5XSE9PW98fGRbMTBdIT09bHx8ZFsxMV0hPT10fHxkWzEyXSE9PXN8fGRbMTNdIT09Yyk/KHU9KDAsQS5qc3gpKFwiZGl2XCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7fSxsKSxyPXI9e3JlZjp0LG9uQ2xpY2s6cyxjbGFzc05hbWU6YyxjaGlsZHJlbjpvfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KHIpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpKX0pLG4pKSxkWzldPW8sZFsxMF09bCxkWzExXT10LGRbMTJdPXMsZFsxM109YyxkWzE0XT11KTp1PWRbMTRdLHV9KTtmdW5jdGlvbiBvaShlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9ZSxvPXQsYT1uW3RdLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9dmFyIG9sPSgwLHcuY3JlYXRlQ29udGV4dCkobnVsbCk7ZnVuY3Rpb24gb3MoZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuZGlzYWJsZWQscj12b2lkIDAhPT1uJiZuLG89KDAsdy51c2VSZWYpKG5ldyBTZXQpLGE9KDAsdy51c2VDYWxsYmFjaykoZnVuY3Rpb24oZSl7by5jdXJyZW50LmFkZChlKX0sW10pLGk9KDAsdy51c2VDYWxsYmFjaykoZnVuY3Rpb24oZSl7by5jdXJyZW50LmRlbGV0ZShlKX0sW10pLGw9KDAsdy51c2VNZW1vKShmdW5jdGlvbigpe3JldHVybntyZWdpc3RlcjphLHVucmVnaXN0ZXI6aSxoYW5kbGVzOm8uY3VycmVudCxkaXNhYmxlZDpyfX0sW2EsaSxyXSk7cmV0dXJuKDAsQS5qc3gpKG9sLlByb3ZpZGVyLHt2YWx1ZTpsLGNoaWxkcmVuOnR9KX1mdW5jdGlvbiBvYygpe3JldHVybigwLHcudXNlQ29udGV4dCkob2wpfWZ1bmN0aW9uIG91KGUpe3ZhciB0LG4scixvLGEsaSxsLHMsYyx1LGQsZj0oMCx4LmMpKDE5KTtmWzBdIT09ZT8obz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sISh0LmluZGV4T2Yobik+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsW1wiY2hpbGRyZW5cIixcInJlZlwiXSkscj1lLmNoaWxkcmVuLGE9ZS5yZWYsZlswXT1lLGZbMV09cixmWzJdPW8sZlszXT1hKToocj1mWzFdLG89ZlsyXSxhPWZbM10pO3ZhciBwPSgwLHcudXNlUmVmKShudWxsKSxoPW9jKCk7Zls0XSE9PWE/KGk9ZnVuY3Rpb24oZSl7aWYocC5jdXJyZW50PW51bGwhPWU/ZTpudWxsLFwiZnVuY3Rpb25cIj09dHlwZW9mIGEpYShlKTtlbHNle3ZhciB0O2EmJih2b2lkIDA9PT1hP1widW5kZWZpbmVkXCI6KHQ9YSkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2w/XCJzeW1ib2xcIjp0eXBlb2YgdCk9PVwib2JqZWN0XCImJihhLmN1cnJlbnQ9ZSl9fSxmWzRdPWEsZls1XT1pKTppPWZbNV07dmFyIG09aTtmWzZdIT09aD8obD1mdW5jdGlvbigpe2lmKGgmJnAuY3VycmVudCYmIWguZGlzYWJsZWQpe3ZhciBlPXAuY3VycmVudDtyZXR1cm4gaC5yZWdpc3RlcihlKSxmdW5jdGlvbigpe3JldHVybiBoLnVucmVnaXN0ZXIoZSl9fX0scz1baF0sZls2XT1oLGZbN109bCxmWzhdPXMpOihsPWZbN10scz1mWzhdKSwoMCx3LnVzZUVmZmVjdCkobCxzKTt2YXIgZz0obnVsbD09aD92b2lkIDA6aC5kaXNhYmxlZCk/XCJkZWZhdWx0XCI6XCJncmFiXCI7cmV0dXJuKGZbOV0hPT1vLnN0eWxlPyhjPW8uc3R5bGV8fHt9LGZbOV09by5zdHlsZSxmWzEwXT1jKTpjPWZbMTBdLGZbMTFdIT09Z3x8ZlsxMl0hPT1jPyh1PW9pKHtjdXJzb3I6Z30sYyksZlsxMV09ZyxmWzEyXT1jLGZbMTNdPXUpOnU9ZlsxM10sZlsxNF0hPT1yfHxmWzE1XSE9PW98fGZbMTZdIT09bXx8ZlsxN10hPT11KT8oZD0oMCxBLmpzeCkoXCJkaXZcIiwodD1vaSh7cmVmOm19LG8pLG49bj17c3R5bGU6dSxjaGlsZHJlbjpyfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pLHQpKSxmWzE0XT1yLGZbMTVdPW8sZlsxNl09bSxmWzE3XT11LGZbMThdPWQpOmQ9ZlsxOF0sZH1mdW5jdGlvbiBvZChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gb2YoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIG9wKGUsdCl7cmV0dXJuIHQ9bnVsbCE9dD90Ont9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbikpfSksZX1mdW5jdGlvbiBvaChlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sISh0LmluZGV4T2Yobik+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99ZnVuY3Rpb24gb20oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG9kKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fG9nKGUpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBvZyhlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBvZChlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4pcmV0dXJuIEFycmF5LmZyb20obik7aWYoXCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBvZChlLHQpfX1mdW5jdGlvbiBveShlKXt2YXIgdCxuLHIsbyxhLGksbCxzLGMsdSxkLGYscD0oMCx4LmMpKDE4KTtwWzBdIT09ZT8ocz1vaChlLFtcImNoaWxkcmVuXCIsXCJwYWRkaW5nXCIsXCJwb3NpdGlvblwiLFwic2V0UG9zaXRpb25cIixcIm9uRHJhZ1N0YXJ0XCIsXCJkcmFnSGFuZGxlU2VsZWN0b3JcIixcImRpc2FibGVEcmFnXCIsXCJhdm9pZFpvbmVcIl0pLHI9ZS5jaGlsZHJlbixsPWUucGFkZGluZyxvPWUucG9zaXRpb24sYz1lLnNldFBvc2l0aW9uLGk9ZS5vbkRyYWdTdGFydCxhPWUuZHJhZ0hhbmRsZVNlbGVjdG9yLHU9ZS5kaXNhYmxlRHJhZyxuPWUuYXZvaWRab25lLHBbMF09ZSxwWzFdPW4scFsyXT1yLHBbM109byxwWzRdPWEscFs1XT1pLHBbNl09bCxwWzddPXMscFs4XT1jLHBbOV09dSk6KG49cFsxXSxyPXBbMl0sbz1wWzNdLGE9cFs0XSxpPXBbNV0sbD1wWzZdLHM9cFs3XSxjPXBbOF0sdT1wWzldKTt2YXIgaD1mdW5jdGlvbihlKXt2YXIgdD0oMCx3LnVzZVJlZikobnVsbCksbj0oMCx3LnVzZVJlZikoe3N0YXRlOlwiaWRsZVwifSkscj0oMCx3LnVzZVJlZikobnVsbCksbz0oMCx3LnVzZVJlZikoe3g6MCx5OjB9KSxhPSgwLHcudXNlUmVmKSh7eDowLHk6MH0pLGk9KDAsdy51c2VSZWYpKDApLGw9KDAsdy51c2VSZWYpKFtdKSxzPSgwLHcudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKCl7dmFyIGUsbztcImRyYWdcIj09PW4uY3VycmVudC5zdGF0ZSYmKG51bGw9PShvPXQuY3VycmVudCl8fG8ucmVsZWFzZVBvaW50ZXJDYXB0dXJlKG4uY3VycmVudC5wb2ludGVySWQpKSxuLmN1cnJlbnQ9XCJkcmFnXCI9PT1uLmN1cnJlbnQuc3RhdGU/e3N0YXRlOlwiZHJhZy1lbmRcIn06e3N0YXRlOlwiaWRsZVwifSxudWxsIT09ci5jdXJyZW50JiYoci5jdXJyZW50KCksci5jdXJyZW50PW51bGwpLGwuY3VycmVudD1bXSxudWxsPT0oZT10LmN1cnJlbnQpfHxlLmNsYXNzTGlzdC5yZW1vdmUoXCJkZXYtdG9vbHMtZ3JhYmJpbmdcIiksZG9jdW1lbnQuYm9keS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInVzZXItc2VsZWN0XCIpLGRvY3VtZW50LmJvZHkuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCItd2Via2l0LXVzZXItc2VsZWN0XCIpfSxbXSk7ZnVuY3Rpb24gYyhlKXt0LmN1cnJlbnQmJihhLmN1cnJlbnQ9ZSx0LmN1cnJlbnQuc3R5bGUudHJhbnNsYXRlPVwiXCIuY29uY2F0KGUueCxcInB4IFwiKS5jb25jYXQoZS55LFwicHhcIikpfWZ1bmN0aW9uIHUobil7dmFyIHI9dC5jdXJyZW50O251bGwhPT1yJiYoci5zdHlsZS50cmFuc2l0aW9uPVwidHJhbnNsYXRlIDQ5MS4yMm1zIHZhcigtLXRpbWluZy1ib3VuY2UpXCIsci5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLGZ1bmN0aW9uIHQobyl7aWYoXCJ0cmFuc2xhdGVcIj09PW8ucHJvcGVydHlOYW1lKXt2YXIgaTtudWxsPT0oaT1lLm9uQW5pbWF0aW9uRW5kKXx8aS5jYWxsKGUsbiksYS5jdXJyZW50PXt4OjAseTowfSxyLnN0eWxlLnRyYW5zaXRpb249XCJcIixyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsdCl9fSksYyhuLnRyYW5zbGF0aW9uKSl9ZnVuY3Rpb24gZChlKXtpZihcImRyYWctZW5kXCI9PT1uLmN1cnJlbnQuc3RhdGUpe3ZhciByO2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLG4uY3VycmVudD17c3RhdGU6XCJpZGxlXCJ9LG51bGw9PShyPXQuY3VycmVudCl8fHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZCl9fWZ1bmN0aW9uIGYocil7aWYoXCJwcmVzc1wiPT09bi5jdXJyZW50LnN0YXRlKXt2YXIgcyx1LGQsZixwPXIuY2xpZW50WC1vLmN1cnJlbnQueCxoPXIuY2xpZW50WS1vLmN1cnJlbnQueTtNYXRoLnNxcnQocCpwK2gqaCk+PWUudGhyZXNob2xkJiYobi5jdXJyZW50PXtzdGF0ZTpcImRyYWdcIixwb2ludGVySWQ6ci5wb2ludGVySWR9LG51bGw9PSh1PXQuY3VycmVudCl8fHUuc2V0UG9pbnRlckNhcHR1cmUoci5wb2ludGVySWQpLG51bGw9PShkPXQuY3VycmVudCl8fGQuY2xhc3NMaXN0LmFkZChcImRldi10b29scy1ncmFiYmluZ1wiKSxkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9XCJub25lXCIsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PVwibm9uZVwiLG51bGw9PShmPWUub25EcmFnU3RhcnQpfHxmLmNhbGwoZSkpfWlmKFwiZHJhZ1wiPT09bi5jdXJyZW50LnN0YXRlKXt2YXIgbT17eDpyLmNsaWVudFgseTpyLmNsaWVudFl9LGc9bS54LW8uY3VycmVudC54LHk9bS55LW8uY3VycmVudC55O28uY3VycmVudD1tLGMoe3g6YS5jdXJyZW50LngrZyx5OmEuY3VycmVudC55K3l9KTt2YXIgdj1EYXRlLm5vdygpO3YtaS5jdXJyZW50Pj0xMCYmKGwuY3VycmVudD1vbShsLmN1cnJlbnQuc2xpY2UoLTUpKS5jb25jYXQoW3twb3NpdGlvbjptLHRpbWVzdGFtcDp2fV0pKSxpLmN1cnJlbnQ9dixudWxsPT0ocz1lLm9uRHJhZyl8fHMuY2FsbChlLGEuY3VycmVudCl9fWZ1bmN0aW9uIHAoKXt2YXIgdCxuPWZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJue3g6MCx5OjB9O3ZhciB0PWVbMF0sbj1lW2UubGVuZ3RoLTFdLHI9bi50aW1lc3RhbXAtdC50aW1lc3RhbXA7cmV0dXJuIDA9PT1yP3t4OjAseTowfTp7eDoxZTMqKChuLnBvc2l0aW9uLngtdC5wb3NpdGlvbi54KS9yKSx5OjFlMyooKG4ucG9zaXRpb24ueS10LnBvc2l0aW9uLnkpL3IpfX0obC5jdXJyZW50KTtzKCksbnVsbD09KHQ9ZS5vbkRyYWdFbmQpfHx0LmNhbGwoZSxhLmN1cnJlbnQsbil9cmV0dXJuKDAsdy51c2VMYXlvdXRFZmZlY3QpKGZ1bmN0aW9uKCl7ZS5kaXNhYmxlZCYmcygpfSxbcyxlLmRpc2FibGVkXSksZS5kaXNhYmxlZD97cmVmOnQsYW5pbWF0ZTp1fTp7cmVmOnQsb25Qb2ludGVyRG93bjpmdW5jdGlvbihhKXt2YXIgaTswPT09YS5idXR0b24mJmZ1bmN0aW9uKG4pe2lmKCFufHwhdC5jdXJyZW50KXJldHVybiEwO2lmKGUuaGFuZGxlcyYmZS5oYW5kbGVzLnNpemU+MCl7Zm9yKHZhciByPW47ciYmciE9PXQuY3VycmVudDspe2lmKGUuaGFuZGxlcy5oYXMocikpcmV0dXJuITA7cj1yLnBhcmVudEVsZW1lbnR9cmV0dXJuITF9cmV0dXJuIWUuZHJhZ0hhbmRsZVNlbGVjdG9yfHxudWxsIT09bi5jbG9zZXN0KGUuZHJhZ0hhbmRsZVNlbGVjdG9yKX0oYS50YXJnZXQpJiYoby5jdXJyZW50PXt4OmEuY2xpZW50WCx5OmEuY2xpZW50WX0sbi5jdXJyZW50PXtzdGF0ZTpcInByZXNzXCJ9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIixmKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLHApLG51bGwhPT1yLmN1cnJlbnQmJihyLmN1cnJlbnQoKSxyLmN1cnJlbnQ9bnVsbCksci5jdXJyZW50PWZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLGYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIscCl9LG51bGw9PShpPXQuY3VycmVudCl8fGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZCkpfSxhbmltYXRlOnV9fSh7ZGlzYWJsZWQ6dm9pZCAwIT09dSYmdSxoYW5kbGVzOm51bGw9PSh0PW9jKCkpP3ZvaWQgMDp0LmhhbmRsZXMsdGhyZXNob2xkOjUsb25EcmFnU3RhcnQ6aSxvbkRyYWdFbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgcixhLGkscyxjLHUsZCxmLHAsaCx5LHYsYixBLHgsdyxDLF87aWYoMD09PU1hdGguc3FydChlLngqZS54K2UueSplLnkpKXtudWxsPT0ocj1tLmN1cnJlbnQpfHxyLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidHJhbnNsYXRlXCIpO3JldHVybn1nKChiPShhPXt4OmUueCtvYih0LngpLHk6ZS55K29iKHQueSl9KS54LEE9YS55LHc9T2JqZWN0LmVudHJpZXMoeD0oYz0yKmwsdT0obnVsbD09KGk9bS5jdXJyZW50KT92b2lkIDA6aS5vZmZzZXRXaWR0aCl8fDAsZD0obnVsbD09KHM9bS5jdXJyZW50KT92b2lkIDA6cy5vZmZzZXRIZWlnaHQpfHwwLGY9d2luZG93LmlubmVyV2lkdGgtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGg9KHA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmNsdWRlcyhcInJpZ2h0XCIpLHI9ZS5pbmNsdWRlcyhcImJvdHRvbVwiKSxvPXQ/d2luZG93LmlubmVyV2lkdGgtZi1jLXU6MCxhPXI/d2luZG93LmlubmVySGVpZ2h0LWMtZDowO2lmKG4mJm4uY29ybmVyPT09ZSl7dmFyIGk9bi5zcXVhcmUrbi5wYWRkaW5nO3I/YS09aTphKz1pfXJldHVybnt4Om8seTphfX0pKG8pLHtcInRvcC1sZWZ0XCI6KHk9ZnVuY3Rpb24oZSl7cmV0dXJue3g6ZS54LWgueCx5OmUueS1oLnl9fSkocChcInRvcC1sZWZ0XCIpKSxcInRvcC1yaWdodFwiOnkocChcInRvcC1yaWdodFwiKSksXCJib3R0b20tbGVmdFwiOnkocChcImJvdHRvbS1sZWZ0XCIpKSxcImJvdHRvbS1yaWdodFwiOnkocChcImJvdHRvbS1yaWdodFwiKSl9KSkubWFwKGZ1bmN0aW9uKGUpe3ZhciB0LG4scj0obj0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHQ9ZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0obj1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2gobi52YWx1ZSksYS5sZW5ndGghPT10KTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0odCwyKXx8b2codCxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksbz1yWzBdLGE9clsxXTtyZXR1cm57a2V5Om8sZGlzdGFuY2U6TWF0aC5zcXJ0KE1hdGgucG93KGItYS54LDIpK01hdGgucG93KEEtYS55LDIpKX19KSxDPSh2PU1hdGgpLm1pbi5hcHBseSh2LG9tKHcubWFwKG92KSkpLChfPXcuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXN0YW5jZT09PUN9KSk/e3RyYW5zbGF0aW9uOnhbXy5rZXldLGNvcm5lcjpfLmtleX06e2Nvcm5lcjpvLHRyYW5zbGF0aW9uOnhbb119KSl9LG9uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY29ybmVyO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgZTtudWxsPT0oZT1tLmN1cnJlbnQpfHxlLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidHJhbnNsYXRlXCIpLGModCl9KX0sZHJhZ0hhbmRsZVNlbGVjdG9yOmF9KSxtPWgucmVmLGc9aC5hbmltYXRlLHk9b2goaCxbXCJyZWZcIixcImFuaW1hdGVcIl0pO3JldHVybiBwWzEwXSE9PXMuc3R5bGU/KGQ9b2Yoe3RvdWNoQWN0aW9uOlwibm9uZVwiLHVzZXJTZWxlY3Q6XCJub25lXCIsV2Via2l0VXNlclNlbGVjdDpcIm5vbmVcIn0scy5zdHlsZSkscFsxMF09cy5zdHlsZSxwWzExXT1kKTpkPXBbMTFdLHBbMTJdIT09cnx8cFsxM10hPT15fHxwWzE0XSE9PXN8fHBbMTVdIT09bXx8cFsxNl0hPT1kPyhmPSgwLEEuanN4KShcImRpdlwiLG9wKG9mKG9wKG9mKHt9LHMpLHtyZWY6bX0pLHkpLHtzdHlsZTpkLGNoaWxkcmVuOnJ9KSkscFsxMl09cixwWzEzXT15LHBbMTRdPXMscFsxNV09bSxwWzE2XT1kLHBbMTddPWYpOmY9cFsxN10sZn1mdW5jdGlvbiBvdihlKXtyZXR1cm4gZS5kaXN0YW5jZX1mdW5jdGlvbiBvYihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Ljk5OTtyZXR1cm4gZS8xZTMqdC8oMS10KX1mdW5jdGlvbiBvQShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gb3goZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfXZhciBvdz0yMDtmdW5jdGlvbiBvQygpe3ZhciBlLHQsbixyLG8sYSxpLGwscyxjPSgwLHguYykoMjApLHU9ZGwoKSxkPXUuc3RhdGUsZj11LmRpc3BhdGNoLHA9cjUoKSxoPXAucGFuZWwsbT1wLnNldFBhbmVsLGc9cC5zZXRTZWxlY3RlZEluZGV4LHk9b18oKTtjWzBdIT09ZC5kZXZUb29sc1Bvc2l0aW9uPyhuPWQuZGV2VG9vbHNQb3NpdGlvbi5zcGxpdChcIi1cIiwyKSxjWzBdPWQuZGV2VG9vbHNQb3NpdGlvbixjWzFdPW4pOm49Y1sxXTt2YXIgdj0odD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGU9bil8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0obj1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2gobi52YWx1ZSksYS5sZW5ndGghPT10KTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSwyKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gb0EoZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uKXJldHVybiBBcnJheS5mcm9tKG4pO2lmKFwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gb0EoZSx0KX19KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLGI9dlswXSx3PXZbMV07Y1syXSE9PXd8fGNbM10hPT1iPyhveChvPXtcIi0tYW5pbWF0ZS1vdXQtZHVyYXRpb24tbXNcIjpcIlwiLmNvbmNhdCgyMDAsXCJtc1wiKSxcIi0tYW5pbWF0ZS1vdXQtdGltaW5nLWZ1bmN0aW9uXCI6bnQsYm94U2hhZG93Olwibm9uZVwifSxiLFwiXCIuY29uY2F0KG93LFwicHhcIikpLG94KG8sdyxcIlwiLmNvbmNhdChvdyxcInB4XCIpKSxyPW8sY1syXT13LGNbM109YixjWzRdPXIpOnI9Y1s0XTt2YXIgQz1yLF89bnVsbCE9PWg7cmV0dXJuIGNbNV0hPT1mfHxjWzZdIT09eT8oYT1mdW5jdGlvbihlKXtmKHt0eXBlOkssZGV2VG9vbHNQb3NpdGlvbjplfSkscncoe2RldlRvb2xzUG9zaXRpb246ZX0pLHkoZSl9LGNbNV09ZixjWzZdPXksY1s3XT1hKTphPWNbN10sY1s4XSE9PWh8fGNbOV0hPT1tfHxjWzEwXSE9PWc/KGk9KDAsQS5qc3gpKG9uLHtvblRyaWdnZXJDbGljazpmdW5jdGlvbigpe3ZhciBlPVwicGFuZWwtc2VsZWN0b3JcIj09PWg/bnVsbDpcInBhbmVsLXNlbGVjdG9yXCI7aWYobShlKSwhZSlyZXR1cm4gdm9pZCBnKC0xKX19KSxjWzhdPWgsY1s5XT1tLGNbMTBdPWcsY1sxMV09aSk6aT1jWzExXSxjWzEyXSE9PWQuZGV2VG9vbHNQb3NpdGlvbnx8Y1sxM10hPT1ffHxjWzE0XSE9PWF8fGNbMTVdIT09aT8obD0oMCxBLmpzeCkob3kse2Rpc2FibGVEcmFnOl8scGFkZGluZzpvdyxwb3NpdGlvbjpkLmRldlRvb2xzUG9zaXRpb24sc2V0UG9zaXRpb246YSxjaGlsZHJlbjppfSksY1sxMl09ZC5kZXZUb29sc1Bvc2l0aW9uLGNbMTNdPV8sY1sxNF09YSxjWzE1XT1pLGNbMTZdPWwpOmw9Y1sxNl0sY1sxN10hPT1DfHxjWzE4XSE9PWw/KHM9KDAsQS5qc3gpKG9hLHtpZDpcImRldnRvb2xzLWluZGljYXRvclwiLFwiZGF0YS1uZXh0anMtdG9hc3RcIjohMCxzdHlsZTpDLGNoaWxkcmVuOmx9KSxjWzE3XT1DLGNbMThdPWwsY1sxOV09cyk6cz1jWzE5XSxzfXZhciBvXz1mdW5jdGlvbigpe3ZhciBlLHQ9KDAseC5jKSgzKSxuPWRsKCkscj1uLnN0YXRlLG89bi5kaXNwYXRjaDtyZXR1cm4gdFswXSE9PW98fHRbMV0hPT1yLmRldlRvb2xzUGFuZWxQb3NpdGlvbj8oZT1mdW5jdGlvbihlKXtvKHt0eXBlOlgsZGV2VG9vbHNQYW5lbFBvc2l0aW9uOmUsa2V5OmVufSk7dmFyIHQ9T2JqZWN0LmtleXMoci5kZXZUb29sc1BhbmVsUG9zaXRpb24pLmZpbHRlcihvayksbj1veCh7fSxlbixlKTt0LmZvckVhY2goZnVuY3Rpb24odCl7byh7dHlwZTpYLGRldlRvb2xzUGFuZWxQb3NpdGlvbjplLGtleTp0fSksblt0XT1lfSkscncoe2RldlRvb2xzUGFuZWxQb3NpdGlvbjpufSl9LHRbMF09byx0WzFdPXIuZGV2VG9vbHNQYW5lbFBvc2l0aW9uLHRbMl09ZSk6ZT10WzJdLGV9O2Z1bmN0aW9uIG9rKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoSil9ZnVuY3Rpb24gb0UoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIG9qKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBvUyhlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7b2ooZSx0LG5bdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gb08oZSx0KXtyZXR1cm4gdD1udWxsIT10P3Q6e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKSl9KSxlfWZ1bmN0aW9uIG9CKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLCF0fHxhLmxlbmd0aCE9PXQpO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLHQpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBvRShlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4pcmV0dXJuIEFycmF5LmZyb20obik7aWYoXCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBvRShlLHQpfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX12YXIgb1A9KDAsdy5jcmVhdGVDb250ZXh0KSh7fSk7ZnVuY3Rpb24gb0koZSl7dmFyIHQsbixyLG8sYSxpLGwscyxjLHUsZCxmLHAsaD0oMCx4LmMpKDM3KTtoWzBdIT09ZT8oYT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sISh0LmluZGV4T2Yobik+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsW1wiaW5kZXhcIixcImxhYmVsXCIsXCJ2YWx1ZVwiLFwib25DbGlja1wiLFwiaHJlZlwiXSksbj1lLmluZGV4LHI9ZS5sYWJlbCxpPWUudmFsdWUsbz1lLm9uQ2xpY2ssdD1lLmhyZWYsaFswXT1lLGhbMV09dCxoWzJdPW4saFszXT1yLGhbNF09byxoWzVdPWEsaFs2XT1pKToodD1oWzFdLG49aFsyXSxyPWhbM10sbz1oWzRdLGE9aFs1XSxpPWhbNl0pO3ZhciBtPVwiZnVuY3Rpb25cIj09dHlwZW9mIG98fFwic3RyaW5nXCI9PXR5cGVvZiB0LGc9KDAsdy51c2VDb250ZXh0KShvUCkseT1nLmNsb3NlTWVudSx2PWcuc2VsZWN0ZWRJbmRleCxiPWcuc2V0U2VsZWN0ZWRJbmRleCxDPXY9PT1uO2hbN10hPT15fHxoWzhdIT09dHx8aFs5XSE9PW18fGhbMTBdIT09bz8obD1mdW5jdGlvbigpe20mJihudWxsPT1vfHxvKCksbnVsbD09eXx8eSgpLHQmJndpbmRvdy5vcGVuKHQsXCJfYmxhbmtcIixcIm5vb3BlbmVyLCBub3JlZmVycmVyXCIpKX0saFs3XT15LGhbOF09dCxoWzldPW0saFsxMF09byxoWzExXT1sKTpsPWhbMTFdO3ZhciBfPWw7aFsxMl0hPT1ufHxoWzEzXSE9PW18fGhbMTRdIT09dnx8aFsxNV0hPT1iPyhzPWZ1bmN0aW9uKCl7bSYmdm9pZCAwIT09biYmdiE9PW4mJmIobil9LGhbMTJdPW4saFsxM109bSxoWzE0XT12LGhbMTVdPWIsaFsxNl09cyk6cz1oWzE2XSxoWzE3XSE9PWI/KGM9ZnVuY3Rpb24oKXtyZXR1cm4gYigtMSl9LGhbMTddPWIsaFsxOF09Yyk6Yz1oWzE4XSxoWzE5XSE9PV8/KHU9ZnVuY3Rpb24oZSl7KFwiRW50ZXJcIj09PWUua2V5fHxcIiBcIj09PWUua2V5KSYmXygpfSxoWzE5XT1fLGhbMjBdPXUpOnU9aFsyMF07dmFyIGs9bT9cIm1lbnVpdGVtXCI6dm9pZCAwLEU9Qz8wOi0xO3JldHVybiBoWzIxXSE9PXI/KGQ9KDAsQS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5kaWNhdG9yLWxhYmVsXCIsY2hpbGRyZW46cn0pLGhbMjFdPXIsaFsyMl09ZCk6ZD1oWzIyXSxoWzIzXSE9PWk/KGY9KDAsQS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5kaWNhdG9yLXZhbHVlXCIsY2hpbGRyZW46aX0pLGhbMjNdPWksaFsyNF09Zik6Zj1oWzI0XSxoWzI1XSE9PV98fGhbMjZdIT09bnx8aFsyN10hPT1hfHxoWzI4XSE9PUN8fGhbMjldIT09c3x8aFszMF0hPT1jfHxoWzMxXSE9PXV8fGhbMzJdIT09a3x8aFszM10hPT1FfHxoWzM0XSE9PWR8fGhbMzVdIT09Zj8ocD0oMCxBLmpzeHMpKFwiZGl2XCIsb08ob1Moe2NsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItaXRlbVwiLFwiZGF0YS1pbmRleFwiOm4sXCJkYXRhLXNlbGVjdGVkXCI6QyxvbkNsaWNrOl8sb25Nb3VzZU1vdmU6cyxvbk1vdXNlTGVhdmU6YyxvbktleURvd246dSxyb2xlOmssdGFiSW5kZXg6RX0sYSkse2NoaWxkcmVuOltkLGZdfSkpLGhbMjVdPV8saFsyNl09bixoWzI3XT1hLGhbMjhdPUMsaFsyOV09cyxoWzMwXT1jLGhbMzFdPXUsaFszMl09ayxoWzMzXT1FLGhbMzRdPWQsaFszNV09ZixoWzM2XT1wKTpwPWhbMzZdLHB9dmFyIG9UPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5jbG9zZU9uQ2xpY2tPdXRzaWRlLHI9dm9pZCAwPT09bnx8bixvPWUuaXRlbXMsYT1kbCgpLnN0YXRlLGk9cjUoKSxsPWkuc2V0UGFuZWwscz1pLnRyaWdnZXJSZWYsYz1pLnNldFNlbGVjdGVkSW5kZXgsdT1pLnNlbGVjdGVkSW5kZXgsZD11USgpLm1vdW50ZWQsZj1vQihhLmRldlRvb2xzUG9zaXRpb24uc3BsaXQoXCItXCIsMiksMikscD1mWzBdLGg9ZlsxXSxtPSgwLHcudXNlUmVmKShudWxsKTtuZShtLHMsciYmZCxmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZVwiZXNjYXBlXCI6bChudWxsKSxjKC0xKTtyZXR1cm47Y2FzZVwib3V0c2lkZVwiOmlmKCFyKXJldHVybjtsKG51bGwpLGMoLTEpO3JldHVybjtkZWZhdWx0OnJldHVybiBudWxsfX0pLCgwLHcudXNlTGF5b3V0RWZmZWN0KShmdW5jdGlvbigpe3ZhciBlO251bGw9PShlPW0uY3VycmVudCl8fGUuZm9jdXMoKSxvTih7aW5kZXg6LTE9PT11P1wiZmlyc3RcIjp1LG1lbnVSZWY6bSxzZXRTZWxlY3RlZEluZGV4OmN9KX0sW10pO3ZhciBnPXIzKGEpLHk9b0IoYS5kZXZUb29sc1Bvc2l0aW9uLnNwbGl0KFwiLVwiLDIpLDIpLHY9eVswXSxiPXlbMV0seD1wPT09diYmaD09PWI/ZzpvdyxDPShvaih0PXt9LHAsXCJcIi5jb25jYXQoeCxcInB4XCIpKSxvaih0LGgsXCJcIi5jb25jYXQob3csXCJweFwiKSksb2oodCxcInRvcFwiPT09cD9cImJvdHRvbVwiOlwidG9wXCIsXCJhdXRvXCIpLG9qKHQsXCJsZWZ0XCI9PT1oP1wicmlnaHRcIjpcImxlZnRcIixcImF1dG9cIiksdCksXz1vLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hIWV9KSxrPV8uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmZvb3Rlcn0pLEU9Xy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZm9vdGVyfSk7cmV0dXJuKDAsQS5qc3gpKFwiZGl2XCIse3JlZjptLG9uS2V5RG93bjpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHQ9Xy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUub25DbGlja30pLmxlbmd0aDtzd2l0Y2goZS5rZXkpe2Nhc2VcIkFycm93RG93blwiOm9OKHtpbmRleDp1Pj10LTE/MDp1KzEsbWVudVJlZjptLHNldFNlbGVjdGVkSW5kZXg6Y30pO2JyZWFrO2Nhc2VcIkFycm93VXBcIjpvTih7aW5kZXg6dTw9MD90LTE6dS0xLG1lbnVSZWY6bSxzZXRTZWxlY3RlZEluZGV4OmN9KTticmVhaztjYXNlXCJIb21lXCI6b04oe2luZGV4OlwiZmlyc3RcIixtZW51UmVmOm0sc2V0U2VsZWN0ZWRJbmRleDpjfSk7YnJlYWs7Y2FzZVwiRW5kXCI6b04oe2luZGV4OlwibGFzdFwiLG1lbnVSZWY6bSxzZXRTZWxlY3RlZEluZGV4OmN9KTticmVhaztjYXNlXCJuXCI6ZS5jdHJsS2V5JiZvTih7aW5kZXg6dT49dC0xPzA6dSsxLG1lbnVSZWY6bSxzZXRTZWxlY3RlZEluZGV4OmN9KTticmVhaztjYXNlXCJwXCI6ZS5jdHJsS2V5JiZvTih7aW5kZXg6dTw9MD90LTE6dS0xLG1lbnVSZWY6bSxzZXRTZWxlY3RlZEluZGV4OmN9KX19LGlkOlwibmV4dGpzLWRldi10b29scy1tZW51XCIscm9sZTpcIm1lbnVcIixkaXI6XCJsdHJcIixcImFyaWEtb3JpZW50YXRpb25cIjpcInZlcnRpY2FsXCIsXCJhcmlhLWxhYmVsXCI6XCJOZXh0LmpzIERldiBUb29scyBJdGVtc1wiLHRhYkluZGV4Oi0xLHN0eWxlOm9TKHtvdXRsaW5lOjAsV2Via2l0Rm9udFNtb290aGluZzpcImFudGlhbGlhc2VkXCIsZGlzcGxheTpcImZsZXhcIixmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsYWxpZ25JdGVtczpcImZsZXgtc3RhcnRcIixiYWNrZ3JvdW5kOlwidmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApXCIsYmFja2dyb3VuZENsaXA6XCJwYWRkaW5nLWJveFwiLGJveFNoYWRvdzpcInZhcigtLXNoYWRvdy1tZW51KVwiLGJvcmRlclJhZGl1czpcInZhcigtLXJvdW5kZWQteGwpXCIscG9zaXRpb246XCJmaXhlZFwiLGZvbnRGYW1pbHk6XCJ2YXIoLS1mb250LXN0YWNrLXNhbnMpXCIsekluZGV4OlwidmFyKC0tdG9wLXotaW5kZXgpXCIsb3ZlcmZsb3c6XCJoaWRkZW5cIixvcGFjaXR5OjEsbWluV2lkdGg6XCIyNDhweFwiLHRyYW5zaXRpb246XCJvcGFjaXR5IHZhcigtLWFuaW1hdGUtb3V0LWR1cmF0aW9uLW1zKSB2YXIoLS1hbmltYXRlLW91dC10aW1pbmctZnVuY3Rpb24pXCIsYm9yZGVyOlwiMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKVwifSxDKSxjaGlsZHJlbjooMCxBLmpzeHMpKG9QLHt2YWx1ZTp7c2VsZWN0ZWRJbmRleDp1LHNldFNlbGVjdGVkSW5kZXg6Y30sY2hpbGRyZW46WygwLEEuanN4KShcImRpdlwiLHtzdHlsZTp7cGFkZGluZzpcIjZweFwiLHdpZHRoOlwiMTAwJVwifSxjaGlsZHJlbjprLm1hcChmdW5jdGlvbihlLHQpe3JldHVybigwLEEuanN4KShvSSxvUyh7dGl0bGU6ZS50aXRsZSxsYWJlbDplLmxhYmVsLHZhbHVlOmUudmFsdWUsb25DbGljazplLm9uQ2xpY2ssaW5kZXg6ZS5vbkNsaWNrP296KGssdCk6dm9pZCAwfSxlLmF0dHJpYnV0ZXMpLGUubGFiZWwpfSl9KSwoMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZGljYXRvci1mb290ZXJcIixjaGlsZHJlbjpFLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybigwLEEuanN4KShvSSxvTyhvUyh7dGl0bGU6ZS50aXRsZSxsYWJlbDplLmxhYmVsLHZhbHVlOmUudmFsdWUsb25DbGljazplLm9uQ2xpY2t9LGUuYXR0cmlidXRlcykse2luZGV4OmUub25DbGljaz9veihFLHQpKyhuPWspLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5vbkNsaWNrfSkubGVuZ3RoOnZvaWQgMH0pLGUubGFiZWwpfSl9KV19KX0pfTtmdW5jdGlvbiBveihlLHQpe2Zvcih2YXIgbj0wLHI9MDtyPD10JiZyPGUubGVuZ3RoO3IrKylpZihlW3JdLm9uQ2xpY2spe2lmKHI9PT10KXJldHVybiBuO24rK31yZXR1cm4gbn1mdW5jdGlvbiBvRChlKXt2YXIgdCxuLHI9KDAseC5jKSg0KSxvPWUuY2hpbGRyZW4sYT1vPjA7cmV0dXJuIHJbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8odD0oMCxBLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItaXNzdWUtY291bnQtaW5kaWNhdG9yXCJ9KSxyWzBdPXQpOnQ9clswXSxyWzFdIT09b3x8clsyXSE9PWE/KG49KDAsQS5qc3hzKShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZGljYXRvci1pc3N1ZS1jb3VudFwiLFwiZGF0YS1oYXMtaXNzdWVzXCI6YSxjaGlsZHJlbjpbdCxvXX0pLHJbMV09byxyWzJdPWEsclszXT1uKTpuPXJbM10sbn1mdW5jdGlvbiBvTCgpe3ZhciBlLHQ9KDAseC5jKSgxKTtyZXR1cm4gdFswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhlPSgwLEEuanN4KShcInN2Z1wiLHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIsY2hpbGRyZW46KDAsQS5qc3gpKFwicGF0aFwiLHtmaWxsOlwiIzY2NlwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNS41MDAxMSAxLjkzOTQ1TDYuMDMwNDQgMi40Njk3OEwxMC44NTM3IDcuMjkzQzExLjI0NDIgNy42ODM1MyAxMS4yNDQyIDguMzE2NjkgMTAuODUzNyA4LjcwNzIyTDYuMDMwNDQgMTMuNTMwNEw1LjUwMDExIDE0LjA2MDhMNC40Mzk0NSAxMy4wMDAxTDQuOTY5NzggMTIuNDY5OEw5LjQzOTQ1IDguMDAwMTFMNC45Njk3OCAzLjUzMDQ0TDQuNDM5NDUgMy4wMDAxMUw1LjUwMDExIDEuOTM5NDVaXCJ9KX0pLHRbMF09ZSk6ZT10WzBdLGV9ZnVuY3Rpb24gb04oZSl7dmFyIHQsbj1lLmluZGV4LHI9ZS5tZW51UmVmLG89ZS5zZXRTZWxlY3RlZEluZGV4O2lmKFwiZmlyc3RcIj09PW4pcmV0dXJuIHZvaWQgc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlLHQ9bnVsbD09KGU9ci5jdXJyZW50KT92b2lkIDA6ZS5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1cIm1lbnVpdGVtXCJdJyk7dCYmb04oe2luZGV4Ok51bWJlcih0WzBdLmdldEF0dHJpYnV0ZShcImRhdGEtaW5kZXhcIikpLG1lbnVSZWY6cixzZXRTZWxlY3RlZEluZGV4Om99KX0pO2lmKFwibGFzdFwiPT09bilyZXR1cm4gdm9pZCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGUsdD1udWxsPT0oZT1yLmN1cnJlbnQpP3ZvaWQgMDplLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPVwibWVudWl0ZW1cIl0nKTt0JiZvTih7aW5kZXg6dC5sZW5ndGgtMSxtZW51UmVmOnIsc2V0U2VsZWN0ZWRJbmRleDpvfSl9KTt2YXIgYT1udWxsPT0odD1yLmN1cnJlbnQpP3ZvaWQgMDp0LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWluZGV4PVwiJy5jb25jYXQobiwnXCJdJykpO2EmJihvKG4pLG51bGw9PWF8fGEuZm9jdXMoKSl9ZnVuY3Rpb24gb1IoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfXZhciBvTT0oMCx3LmNyZWF0ZUNvbnRleHQpKG51bGwpLG9aPWZ1bmN0aW9uKGUpe3ZhciB0PS45NSp3aW5kb3cuaW5uZXJXaWR0aCxuPS45NSp3aW5kb3cuaW5uZXJIZWlnaHQ7cmV0dXJue3dpZHRoOk1hdGgubWluKHQsTWF0aC5tYXgoZS5taW5XaWR0aCxlLndpZHRoKSksaGVpZ2h0Ok1hdGgubWluKG4sTWF0aC5tYXgoZS5taW5IZWlnaHQsZS5oZWlnaHQpKX19LG9VPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGEsaSxsLHM9ZS52YWx1ZSxjPWUuY2hpbGRyZW4sdT1udWxsIT0oYT1zLm1pbldpZHRoKT9hOjEwMCxkPW51bGwhPShpPXMubWluSGVpZ2h0KT9pOjgwLGY9cy5tYXhXaWR0aCxwPXMubWF4SGVpZ2h0LGg9KHQ9KDAsdy51c2VTdGF0ZSkobnVsbCksbj0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHQpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KHQsMil8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG9SKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIG9SKGUsdCl9fSh0LG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxtPWhbMF0sZz1oWzFdLHk9bnVsbCE9KGw9cy5zdG9yYWdlS2V5KT9sOmV0LHY9KDAsdy51c2VDYWxsYmFjaykoZnVuY3Rpb24oKXtpZihzLnJlc2l6ZVJlZi5jdXJyZW50JiZudWxsPT09bSl7dmFyIGU9cy5kZXZUb29sc1BhbmVsU2l6ZVt5XTtpZihlKXt2YXIgdCxuLHI9b1ooKHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7fSxlKSxuPW49e21pbldpZHRoOm51bGwhPXU/dToxMDAsbWluSGVpZ2h0Om51bGwhPWQ/ZDo4MH0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSx0KSksbz1yLmhlaWdodCxhPXIud2lkdGg7cmV0dXJuIHMucmVzaXplUmVmLmN1cnJlbnQuc3R5bGUud2lkdGg9XCJcIi5jb25jYXQoYSxcInB4XCIpLHMucmVzaXplUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0PVwiXCIuY29uY2F0KG8sXCJweFwiKSwhMH19fSxbcy5yZXNpemVSZWYsbSx5LHUsZCxzLmRldlRvb2xzUGFuZWxTaXplXSk7cmV0dXJuKDAsdy51c2VMYXlvdXRFZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIGU7aWYoIXYoKSYmcy5yZXNpemVSZWYuY3VycmVudCYmKG51bGw9PShlPXMuaW5pdGlhbFNpemUpP3ZvaWQgMDplLmhlaWdodCkmJnMuaW5pdGlhbFNpemUud2lkdGgpe3ZhciB0PW9aKHtoZWlnaHQ6cy5pbml0aWFsU2l6ZS5oZWlnaHQsd2lkdGg6cy5pbml0aWFsU2l6ZS53aWR0aCxtaW5XaWR0aDpudWxsIT11P3U6MTAwLG1pbkhlaWdodDpudWxsIT1kP2Q6ODB9KSxuPXQuaGVpZ2h0LHI9dC53aWR0aDtzLnJlc2l6ZVJlZi5jdXJyZW50LnN0eWxlLndpZHRoPVwiXCIuY29uY2F0KHIsXCJweFwiKSxzLnJlc2l6ZVJlZi5jdXJyZW50LnN0eWxlLmhlaWdodD1cIlwiLmNvbmNhdChuLFwicHhcIil9fSxbXSksKDAsdy51c2VMYXlvdXRFZmZlY3QpKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdiksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix2KX19LFt2LG51bGw9PShyPXMuaW5pdGlhbFNpemUpP3ZvaWQgMDpyLmhlaWdodCxudWxsPT0obz1zLmluaXRpYWxTaXplKT92b2lkIDA6by53aWR0aCxzLnJlc2l6ZVJlZl0pLCgwLEEuanN4KShvTS5Qcm92aWRlcix7dmFsdWU6e3Jlc2l6ZVJlZjpzLnJlc2l6ZVJlZixtaW5XaWR0aDp1LG1pbkhlaWdodDpkLG1heFdpZHRoOmYsbWF4SGVpZ2h0OnAsZHJhZ2dpbmdEaXJlY3Rpb246bSxzZXREcmFnZ2luZ0RpcmVjdGlvbjpnLHN0b3JhZ2VLZXk6eX0sY2hpbGRyZW46Y30pfSxvRj1mdW5jdGlvbigpe3ZhciBlPSgwLHcudXNlQ29udGV4dCkob00pO2lmKCFlKXRocm93IEVycm9yKFwidXNlUmVzaXplIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBSZXNpemUgcHJvdmlkZXJcIik7cmV0dXJuIGV9LG9xPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9kZXZ0b29scy1wYW5lbC9yZXNpemUvcmVzaXplLWhhbmRsZS5jc3NcIiksb0g9e307ZnVuY3Rpb24gb1YoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfW9ILnN0eWxlVGFnVHJhbnNmb3JtPW0oKSxvSC5zZXRBdHRyaWJ1dGVzPWQoKSxvSC5pbnNlcnQ9YygpLG9ILmRvbUFQST1sKCksb0guaW5zZXJ0U3R5bGVFbGVtZW50PXAoKSxhKCkob3EuWixvSCksb3EuWiYmb3EuWi5sb2NhbHMmJm9xLloubG9jYWxzO3ZhciBvJD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxhLGksbCxzLGMsdSxkPSgwLHguYykoMzIpLGY9ZS5kaXJlY3Rpb24scD1lLnBvc2l0aW9uLGg9b0YoKSxtPWgucmVzaXplUmVmLGc9aC5taW5XaWR0aCx5PWgubWluSGVpZ2h0LHY9aC5tYXhXaWR0aCxiPWgubWF4SGVpZ2h0LEM9aC5zdG9yYWdlS2V5LF89aC5kcmFnZ2luZ0RpcmVjdGlvbixrPWguc2V0RHJhZ2dpbmdEaXJlY3Rpb247ZFswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhyPXt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sZFswXT1yKTpyPWRbMF07dmFyIEU9KHQ9KDAsdy51c2VTdGF0ZSkociksbj0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHQpfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KG49by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KHQsMil8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG9WKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIG9WKGUsdCl9fSh0LG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxqPUVbMF0sUz1FWzFdO2RbMV0hPT1tLmN1cnJlbnQ/KG89ZnVuY3Rpb24oKXtpZihtLmN1cnJlbnQpe3ZhciBlPW0uY3VycmVudCx0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpO1Moe3RvcDpwYXJzZUZsb2F0KHQuYm9yZGVyVG9wV2lkdGgpfHwwLHJpZ2h0OnBhcnNlRmxvYXQodC5ib3JkZXJSaWdodFdpZHRoKXx8MCxib3R0b206cGFyc2VGbG9hdCh0LmJvcmRlckJvdHRvbVdpZHRoKXx8MCxsZWZ0OnBhcnNlRmxvYXQodC5ib3JkZXJMZWZ0V2lkdGgpfHwwfSl9fSxkWzFdPW0uY3VycmVudCxkWzJdPW8pOm89ZFsyXSxkWzNdIT09bT8oYT1bbV0sZFszXT1tLGRbNF09YSk6YT1kWzRdLCgwLHcudXNlTGF5b3V0RWZmZWN0KShvLGEpLGRbNV0hPT1mfHxkWzZdIT09Ynx8ZFs3XSE9PXZ8fGRbOF0hPT15fHxkWzldIT09Z3x8ZFsxMF0hPT1tLmN1cnJlbnR8fGRbMTFdIT09a3x8ZFsxMl0hPT1DPyhpPWZ1bmN0aW9uKGUpe2lmKGUucHJldmVudERlZmF1bHQoKSxtLmN1cnJlbnQpe2soZik7dmFyIHQ9bS5jdXJyZW50LG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPWUuY2xpZW50WCxvPWUuY2xpZW50WSxhPWZ1bmN0aW9uKGUpe3ZhciBhPW9XKGYsZS5jbGllbnRYLXIsZS5jbGllbnRZLW8sbixnLHksdixiKSxpPWEubmV3V2lkdGgsbD1hLm5ld0hlaWdodDt2b2lkIDAhPT1pJiYodC5zdHlsZS53aWR0aD1cIlwiLmNvbmNhdChpLFwicHhcIikpLHZvaWQgMCE9PWwmJih0LnN0eWxlLmhlaWdodD1cIlwiLmNvbmNhdChsLFwicHhcIikpfSxpPWZ1bmN0aW9uKCl7aWYoayhudWxsKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsYSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixpKSxtLmN1cnJlbnQpe3ZhciBlLHQsbixyPW0uY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXIud2lkdGgsbD1yLmhlaWdodDtydyh7ZGV2VG9vbHNQYW5lbFNpemU6KGU9e30sdD1DLG49e3dpZHRoOm8saGVpZ2h0Omx9LHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGUpfSl9fTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsYSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixpKX19LGRbNV09ZixkWzZdPWIsZFs3XT12LGRbOF09eSxkWzldPWcsZFsxMF09bS5jdXJyZW50LGRbMTFdPWssZFsxMl09QyxkWzEzXT1pKTppPWRbMTNdO3ZhciBPPWk7aWYoISghcC5zcGxpdChcIi1cIikuaW5jbHVkZXMoZikmJighZi5pbmNsdWRlcyhcIi1cIil8fGY9PT1vWShwKSkpKXJldHVybiBudWxsO3ZhciBCPWoubGVmdCtqLnJpZ2h0LFA9ai50b3Arai5ib3R0b207ZFsxNF0hPT1mPyhsPWYuaW5jbHVkZXMoXCItXCIpLGRbMTRdPWYsZFsxNV09bCk6bD1kWzE1XTt2YXIgST1sLFQ9XCJyZXNpemUtY29udGFpbmVyIFwiLmNvbmNhdChmLFwiIFwiKS5jb25jYXQoXyYmXyE9PWY/XCJuby1ob3ZlclwiOlwiXCIpO3JldHVybiBkWzE2XSE9PU98fGRbMTddIT09VD8ocz0oMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlQsb25Nb3VzZURvd246T30pLGRbMTZdPU8sZFsxN109VCxkWzE4XT1zKTpzPWRbMThdLGRbMTldIT09ai5ib3R0b218fGRbMjBdIT09ai5sZWZ0fHxkWzIxXSE9PWoucmlnaHR8fGRbMjJdIT09ai50b3B8fGRbMjNdIT09Znx8ZFsyNF0hPT1ffHxkWzI1XSE9PUl8fGRbMjZdIT09Qnx8ZFsyN10hPT1QPyhjPSFJJiYoMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVzaXplLWxpbmUgXCIuY29uY2F0KGYsXCIgXCIpLmNvbmNhdChfPT09Zj9cImRyYWdnaW5nXCI6XCJcIiksc3R5bGU6e1wiLS1ib3JkZXItaG9yaXpvbnRhbFwiOlwiXCIuY29uY2F0KEIsXCJweFwiKSxcIi0tYm9yZGVyLXZlcnRpY2FsXCI6XCJcIi5jb25jYXQoUCxcInB4XCIpLFwiLS1ib3JkZXItdG9wXCI6XCJcIi5jb25jYXQoai50b3AsXCJweFwiKSxcIi0tYm9yZGVyLXJpZ2h0XCI6XCJcIi5jb25jYXQoai5yaWdodCxcInB4XCIpLFwiLS1ib3JkZXItYm90dG9tXCI6XCJcIi5jb25jYXQoai5ib3R0b20sXCJweFwiKSxcIi0tYm9yZGVyLWxlZnRcIjpcIlwiLmNvbmNhdChqLmxlZnQsXCJweFwiKX19KSxkWzE5XT1qLmJvdHRvbSxkWzIwXT1qLmxlZnQsZFsyMV09ai5yaWdodCxkWzIyXT1qLnRvcCxkWzIzXT1mLGRbMjRdPV8sZFsyNV09SSxkWzI2XT1CLGRbMjddPVAsZFsyOF09Yyk6Yz1kWzI4XSxkWzI5XSE9PXN8fGRbMzBdIT09Yz8odT0oMCxBLmpzeHMpKEEuRnJhZ21lbnQse2NoaWxkcmVuOltzLGNdfSksZFsyOV09cyxkWzMwXT1jLGRbMzFdPXUpOnU9ZFszMV0sdX0sb1c9ZnVuY3Rpb24oZSx0LG4scixvLGEsaSxsKXt2YXIgcz1udWxsIT1pP2k6Ljk1KndpbmRvdy5pbm5lcldpZHRoLGM9bnVsbCE9bD9sOi45NSp3aW5kb3cuaW5uZXJIZWlnaHQ7c3dpdGNoKGUpe2Nhc2VcInJpZ2h0XCI6cmV0dXJue25ld1dpZHRoOk1hdGgubWluKHMsTWF0aC5tYXgobyxyLndpZHRoK3QpKSxuZXdIZWlnaHQ6ci5oZWlnaHR9O2Nhc2VcImxlZnRcIjpyZXR1cm57bmV3V2lkdGg6TWF0aC5taW4ocyxNYXRoLm1heChvLHIud2lkdGgtdCkpLG5ld0hlaWdodDpyLmhlaWdodH07Y2FzZVwiYm90dG9tXCI6cmV0dXJue25ld1dpZHRoOnIud2lkdGgsbmV3SGVpZ2h0Ok1hdGgubWluKGMsTWF0aC5tYXgoYSxyLmhlaWdodCtuKSl9O2Nhc2VcInRvcFwiOnJldHVybntuZXdXaWR0aDpyLndpZHRoLG5ld0hlaWdodDpNYXRoLm1pbihjLE1hdGgubWF4KGEsci5oZWlnaHQtbikpfTtjYXNlXCJ0b3AtbGVmdFwiOnJldHVybntuZXdXaWR0aDpNYXRoLm1pbihzLE1hdGgubWF4KG8sci53aWR0aC10KSksbmV3SGVpZ2h0Ok1hdGgubWluKGMsTWF0aC5tYXgoYSxyLmhlaWdodC1uKSl9O2Nhc2VcInRvcC1yaWdodFwiOnJldHVybntuZXdXaWR0aDpNYXRoLm1pbihzLE1hdGgubWF4KG8sci53aWR0aCt0KSksbmV3SGVpZ2h0Ok1hdGgubWluKGMsTWF0aC5tYXgoYSxyLmhlaWdodC1uKSl9O2Nhc2VcImJvdHRvbS1sZWZ0XCI6cmV0dXJue25ld1dpZHRoOk1hdGgubWluKHMsTWF0aC5tYXgobyxyLndpZHRoLXQpKSxuZXdIZWlnaHQ6TWF0aC5taW4oYyxNYXRoLm1heChhLHIuaGVpZ2h0K24pKX07Y2FzZVwiYm90dG9tLXJpZ2h0XCI6cmV0dXJue25ld1dpZHRoOk1hdGgubWluKHMsTWF0aC5tYXgobyxyLndpZHRoK3QpKSxuZXdIZWlnaHQ6TWF0aC5taW4oYyxNYXRoLm1heChhLHIuaGVpZ2h0K24pKX07ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2Z1bmN0aW9uIG9ZKGUpe3N3aXRjaChlKXtjYXNlXCJ0b3AtbGVmdFwiOnJldHVyblwiYm90dG9tLXJpZ2h0XCI7Y2FzZVwidG9wLXJpZ2h0XCI6cmV0dXJuXCJib3R0b20tbGVmdFwiO2Nhc2VcImJvdHRvbS1sZWZ0XCI6cmV0dXJuXCJ0b3AtcmlnaHRcIjtjYXNlXCJib3R0b20tcmlnaHRcIjpyZXR1cm5cInRvcC1sZWZ0XCI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIG9LPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvcGFuZWwvZHluYW1pYy1wYW5lbC5jc3NcIiksb1g9e307ZnVuY3Rpb24gb0coZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIG9RKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBvSihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7b1EoZSx0LG5bdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gbzAoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0obj1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2gobi52YWx1ZSksIXR8fGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsdCl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG9HKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIG9HKGUsdCl9fShlLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIG8xKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpcIndpZHRoXCI7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtuLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixuLnN0eWxlLnZpc2liaWxpdHk9XCJoaWRkZW5cIixcIndpZHRoXCI9PT10P24uc3R5bGUud2lkdGg9ZTpuLnN0eWxlLmhlaWdodD1lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobik7dmFyIHI9XCJ3aWR0aFwiPT09dD9uLm9mZnNldFdpZHRoOm4ub2Zmc2V0SGVpZ2h0O3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG4pLHJ9ZnVuY3Rpb24gbzIoZSl7dmFyIHQsbixyLG8sYSxpLGwscyxjLHUsZCxmLHAsaCxtLGc9ZS5oZWFkZXIseT1lLmNoaWxkcmVuLHY9ZS5kcmFnZ2FibGUsYj12b2lkIDAhPT12JiZ2LEM9ZS5zaXplQ29uZmlnLF89dm9pZCAwPT09Qz97a2luZDpcInJlc2l6YWJsZVwiLG1pbldpZHRoOjQwMCxtaW5IZWlnaHQ6MzUwLG1heFdpZHRoOjFlMyxtYXhIZWlnaHQ6MWUzLGluaXRpYWxTaXplOntoZWlnaHQ6NDAwLHdpZHRoOjUwMH19OkMsaz1lLmNsb3NlT25DbGlja091dHNpZGUsRT12b2lkIDAhPT1rJiZrLGo9ZS5zaGFyZVBhbmVsU2l6ZUdsb2JhbGx5LFM9ZS5zaGFyZVBhbmVsUG9zaXRpb25HbG9iYWxseSxPPWUuY29udGFpbmVyUHJvcHMsQj1yNSgpLnNldFBhbmVsLFA9dVEoKSxJPVAubmFtZSxUPVAubW91bnRlZCx6PXZvaWQgMD09PWp8fGo/ZXQ6XCJcIi5jb25jYXQoZWUsXCJfXCIpLmNvbmNhdChJKSxEPXZvaWQgMD09PVN8fFM/ZW46XCJcIi5jb25jYXQoSixcIl9cIikuY29uY2F0KEkpLEw9ZGwoKSxOPUwuZGlzcGF0Y2gsUj1MLnN0YXRlLE09bnVsbCE9KGg9Ui5kZXZUb29sc1BhbmVsUG9zaXRpb25bRF0pP2g6Ui5kZXZUb29sc1Bvc2l0aW9uLFo9bzAoTS5zcGxpdChcIi1cIiwyKSwyKSxVPVpbMF0sRj1aWzFdLHE9KDAsdy51c2VSZWYpKG51bGwpO25lKHEscjUoKS50cmlnZ2VyUmVmLFQsZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2VcImVzY2FwZVwiOnJldHVybiB2b2lkIEIoXCJwYW5lbC1zZWxlY3RvclwiKTtjYXNlXCJvdXRzaWRlXCI6RSYmQihcInBhbmVsLXNlbGVjdG9yXCIpO3JldHVybjtkZWZhdWx0OnJldHVybiBudWxsfX0pO3ZhciBIPXIzKFIpLFY9bzAoUi5kZXZUb29sc1Bvc2l0aW9uLnNwbGl0KFwiLVwiLDIpLDIpLCQ9VlswXSxXPVZbMV0sWT1VPT09JCYmRj09PVc/SDpvdyxLPShvUShtPXt9LFUsXCJcIi5jb25jYXQoWSxcInB4XCIpKSxvUShtLEYsXCJcIi5jb25jYXQob3csXCJweFwiKSksb1EobSxcInRvcFwiPT09VT9cImJvdHRvbVwiOlwidG9wXCIsXCJhdXRvXCIpLG9RKG0sXCJsZWZ0XCI9PT1GP1wicmlnaHRcIjpcImxlZnRcIixcImF1dG9cIiksbSksRz1cInJlc2l6YWJsZVwiPT09Xy5raW5kLFE9KHQ9Rz9fLm1pbldpZHRoOnZvaWQgMCxuPUc/Xy5taW5IZWlnaHQ6dm9pZCAwLHI9Rz9fLm1heFdpZHRoOnZvaWQgMCxvPUc/Xy5tYXhIZWlnaHQ6dm9pZCAwLChzPSgwLHguYykoMTEpKVswXSE9PW98fHNbMV0hPT1yfHxzWzJdIT09bnx8c1szXSE9PXQ/KGE9ZnVuY3Rpb24oKXtyZXR1cm57bWluV2lkdGg6dD9vMSh0LFwid2lkdGhcIik6dm9pZCAwLG1pbkhlaWdodDpuP28xKG4sXCJoZWlnaHRcIik6dm9pZCAwLG1heFdpZHRoOnI/bzEocixcIndpZHRoXCIpOnZvaWQgMCxtYXhIZWlnaHQ6bz9vMShvLFwiaGVpZ2h0XCIpOnZvaWQgMH19LHNbMF09byxzWzFdPXIsc1syXT1uLHNbM109dCxzWzRdPWEpOmE9c1s0XSx1PShjPW8wKCgwLHcudXNlU3RhdGUpKGEpLDIpKVswXSxkPWNbMV0sc1s1XSE9PW98fHNbNl0hPT1yfHxzWzddIT09bnx8c1s4XSE9PXQ/KGk9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe2Qoe21pbldpZHRoOnQ/bzEodCxcIndpZHRoXCIpOnZvaWQgMCxtaW5IZWlnaHQ6bj9vMShuLFwiaGVpZ2h0XCIpOnZvaWQgMCxtYXhXaWR0aDpyP28xKHIsXCJ3aWR0aFwiKTp2b2lkIDAsbWF4SGVpZ2h0Om8/bzEobyxcImhlaWdodFwiKTp2b2lkIDB9KX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsZSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixlKX19LGw9W3QsbixyLG9dLHNbNV09byxzWzZdPXIsc1s3XT1uLHNbOF09dCxzWzldPWksc1sxMF09bCk6KGk9c1s5XSxsPXNbMTBdKSwoMCx3LnVzZUVmZmVjdCkoaSxsKSx1KSxlcj1RLm1pbldpZHRoLGVvPVEubWluSGVpZ2h0LGVhPVEubWF4V2lkdGgsZWk9US5tYXhIZWlnaHQsZWw9ST9cIlwiLmNvbmNhdChlZSxcIl9cIikuY29uY2F0KEkpOmV0LGVzPVIuZGV2VG9vbHNQYW5lbFNpemVbZWxdO3JldHVybigwLEEuanN4KShvVSx7dmFsdWU6e3Jlc2l6ZVJlZjpxLGluaXRpYWxTaXplOlwicmVzaXphYmxlXCI9PT1fLmtpbmQ/Xy5pbml0aWFsU2l6ZTpfLG1pbldpZHRoOmVyLG1pbkhlaWdodDplbyxtYXhXaWR0aDplYSxtYXhIZWlnaHQ6ZWksZGV2VG9vbHNQb3NpdGlvbjpSLmRldlRvb2xzUG9zaXRpb24sZGV2VG9vbHNQYW5lbFNpemU6Ui5kZXZUb29sc1BhbmVsU2l6ZSxzdG9yYWdlS2V5Onp9LGNoaWxkcmVuOigwLEEuanN4KShcImRpdlwiLHt0YWJJbmRleDotMSxyZWY6cSxjbGFzc05hbWU6XCJkeW5hbWljLXBhbmVsLWNvbnRhaW5lclwiLHN0eWxlOm9KKHtcIi0tcGFuZWwtdG9wXCI6Sy50b3AsXCItLXBhbmVsLWJvdHRvbVwiOksuYm90dG9tLFwiLS1wYW5lbC1sZWZ0XCI6Sy5sZWZ0LFwiLS1wYW5lbC1yaWdodFwiOksucmlnaHR9LEc/e1wiLS1wYW5lbC1taW4td2lkdGhcIjplcj9cIlwiLmNvbmNhdChlcixcInB4XCIpOnZvaWQgMCxcIi0tcGFuZWwtbWluLWhlaWdodFwiOmVvP1wiXCIuY29uY2F0KGVvLFwicHhcIik6dm9pZCAwLFwiLS1wYW5lbC1tYXgtd2lkdGhcIjplYT9cIlwiLmNvbmNhdChlYSxcInB4XCIpOnZvaWQgMCxcIi0tcGFuZWwtbWF4LWhlaWdodFwiOmVpP1wiXCIuY29uY2F0KGVpLFwicHhcIik6dm9pZCAwfTp7XCItLXBhbmVsLWhlaWdodFwiOlwiXCIuY29uY2F0KGVzP2VzLmhlaWdodDpfLmhlaWdodCxcInB4XCIpLFwiLS1wYW5lbC13aWR0aFwiOlwiXCIuY29uY2F0KGVzP2VzLndpZHRoOl8ud2lkdGgsXCJweFwiKX0pLGNoaWxkcmVuOigwLEEuanN4KShvcyx7ZGlzYWJsZWQ6IWIsY2hpbGRyZW46KDAsQS5qc3gpKG95LHtkcmFnSGFuZGxlU2VsZWN0b3I6XCIucmVzaXplLWNvbnRhaW5lclwiLGF2b2lkWm9uZTp7Y29ybmVyOlIuZGV2VG9vbHNQb3NpdGlvbixzcXVhcmU6MjUvUi5zY2FsZSxwYWRkaW5nOm93fSxwYWRkaW5nOm93LHBvc2l0aW9uOk0sc2V0UG9zaXRpb246ZnVuY3Rpb24oZSl7Tih7dHlwZTpYLGRldlRvb2xzUGFuZWxQb3NpdGlvbjplLGtleTpEfSksXCJyZXNpemFibGVcIj09PV8ua2luZCYmcncoe2RldlRvb2xzUGFuZWxQb3NpdGlvbjpvUSh7fSxELGUpfSl9LHN0eWxlOntvdmVyZmxvdzpcImF1dG9cIix3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCJ9LGRpc2FibGVEcmFnOiFiLGNoaWxkcmVuOigwLEEuanN4cykoQS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLEEuanN4cykoXCJkaXZcIiwoZj1vSih7fSxPKSxwPXA9e2NsYXNzTmFtZTpcInBhbmVsLWNvbnRlbnQtY29udGFpbmVyIFwiLmNvbmNhdCgobnVsbD09Tz92b2lkIDA6Ty5jbGFzc05hbWUpfHxcIlwiKSxzdHlsZTpvSih7fSxudWxsPT1PP3ZvaWQgMDpPLnN0eWxlKSxjaGlsZHJlbjpbKDAsQS5qc3gpKG91LHtjaGlsZHJlbjpnfSksKDAsQS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtc2Nyb2xsYWJsZS1jb250ZW50XCI6ITAsY2xhc3NOYW1lOlwiZHJhZ2dhYmxlLWNvbnRlbnRcIixjaGlsZHJlbjp5fSldfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhmLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHApKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KHApKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShmLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLGUpKX0pLGYpKSxHJiYoMCxBLmpzeHMpKEEuRnJhZ21lbnQse2NoaWxkcmVuOlsoIV8uc2lkZXN8fF8uc2lkZXMuaW5jbHVkZXMoXCJ2ZXJ0aWNhbFwiKSkmJigwLEEuanN4cykoQS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLEEuanN4KShvJCx7cG9zaXRpb246TSxkaXJlY3Rpb246XCJ0b3BcIn0pLCgwLEEuanN4KShvJCx7cG9zaXRpb246TSxkaXJlY3Rpb246XCJib3R0b21cIn0pXX0pLCghXy5zaWRlc3x8Xy5zaWRlcy5pbmNsdWRlcyhcImhvcml6b250YWxcIikpJiYoMCxBLmpzeHMpKEEuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxBLmpzeCkobyQse3Bvc2l0aW9uOk0sZGlyZWN0aW9uOlwicmlnaHRcIn0pLCgwLEEuanN4KShvJCx7cG9zaXRpb246TSxkaXJlY3Rpb246XCJsZWZ0XCJ9KV19KSwoIV8uc2lkZXN8fF8uc2lkZXMuaW5jbHVkZXMoXCJkaWFnb25hbFwiKSkmJigwLEEuanN4cykoQS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLEEuanN4KShvJCx7cG9zaXRpb246TSxkaXJlY3Rpb246XCJ0b3AtbGVmdFwifSksKDAsQS5qc3gpKG8kLHtwb3NpdGlvbjpNLGRpcmVjdGlvbjpcInRvcC1yaWdodFwifSksKDAsQS5qc3gpKG8kLHtwb3NpdGlvbjpNLGRpcmVjdGlvbjpcImJvdHRvbS1sZWZ0XCJ9KSwoMCxBLmpzeCkobyQse3Bvc2l0aW9uOk0sZGlyZWN0aW9uOlwiYm90dG9tLXJpZ2h0XCJ9KV19KV19KV19KX0pfSl9KX0pfW9YLnN0eWxlVGFnVHJhbnNmb3JtPW0oKSxvWC5zZXRBdHRyaWJ1dGVzPWQoKSxvWC5pbnNlcnQ9YygpLG9YLmRvbUFQST1sKCksb1guaW5zZXJ0U3R5bGVFbGVtZW50PXAoKSxhKCkob0suWixvWCksb0suWiYmb0suWi5sb2NhbHMmJm9LLloubG9jYWxzO3ZhciBvND1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1leHBsb3Jlci5jc3NcIiksbzU9e307ZnVuY3Rpb24gbzMoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxyPU9iamVjdC5rZXlzKG4pO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8sYTtyPWUsbz10LGE9blt0XSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfW81LnN0eWxlVGFnVHJhbnNmb3JtPW0oKSxvNS5zZXRBdHRyaWJ1dGVzPWQoKSxvNS5pbnNlcnQ9YygpLG81LmRvbUFQST1sKCksbzUuaW5zZXJ0U3R5bGVFbGVtZW50PXAoKSxhKCkobzQuWixvNSksbzQuWiYmbzQuWi5sb2NhbHMmJm80LloubG9jYWxzO3ZhciBvNj1uZXcgU2V0LG85PXtzdWJzY3JpYmU6ZnVuY3Rpb24oZSl7cmV0dXJuIG82LmFkZChlKSxmdW5jdGlvbigpe3JldHVybiBvNi5kZWxldGUoZSl9fSxnZXRTbmFwc2hvdDpmdW5jdGlvbigpe3JldHVybiBhdC5nZXRSb290KCl9LGdldFNlcnZlclNuYXBzaG90OmZ1bmN0aW9uKCl7cmV0dXJuIGF0LmdldFJvb3QoKX19LG84PW85LnN1YnNjcmliZSxvNz1vOS5nZXRTbmFwc2hvdCxhZT1vOS5nZXRTZXJ2ZXJTbmFwc2hvdCxhdD1mdW5jdGlvbihlKXt2YXIgdD1lLmdldENoYXJhY3RlcnMsbj12b2lkIDA9PT10P2Z1bmN0aW9uKGUpe3JldHVybltlXX06dCxyPWUuY29tcGFyZSxvPXZvaWQgMD09PXI/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR9OnIsYT17dmFsdWU6dm9pZCAwLGNoaWxkcmVuOnt9fTtmdW5jdGlvbiBpKCl7dmFyIGU9ITAsdD0hMSxuPXZvaWQgMDt0cnl7Zm9yKHZhciByLG89bzZbU3ltYm9sLml0ZXJhdG9yXSgpOyEoZT0ocj1vLm5leHQoKSkuZG9uZSk7ZT0hMCkoMCxyLnZhbHVlKSgpfWNhdGNoKGUpe3Q9ITAsbj1lfWZpbmFsbHl7dHJ5e2V8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYodCl0aHJvdyBufX19cmV0dXJue2luc2VydDpmdW5jdGlvbihlKXt2YXIgdD1hLHI9bihlKSxvPSEwLGw9ITEscz12b2lkIDA7dHJ5e2Zvcih2YXIgYyx1PXJbU3ltYm9sLml0ZXJhdG9yXSgpOyEobz0oYz11Lm5leHQoKSkuZG9uZSk7bz0hMCl7dmFyIGQ9Yy52YWx1ZTt0LmNoaWxkcmVuW2RdfHwodC5jaGlsZHJlbltkXT17dmFsdWU6dm9pZCAwLGNoaWxkcmVuOnt9fSksdD10LmNoaWxkcmVuW2RdfX1jYXRjaChlKXtsPSEwLHM9ZX1maW5hbGx5e3RyeXtvfHxudWxsPT11LnJldHVybnx8dS5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgc319dC52YWx1ZT1lLGE9bzMoe30sYSksaSgpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9YSxyPW4oZSksbD1bXSxzPSEwLGM9ITAsdT0hMSxkPXZvaWQgMDt0cnl7Zm9yKHZhciBmLHA9cltTeW1ib2wuaXRlcmF0b3JdKCk7IShjPShmPXAubmV4dCgpKS5kb25lKTtjPSEwKXt2YXIgaD1mLnZhbHVlO2lmKCF0LmNoaWxkcmVuW2hdKXtzPSExO2JyZWFrfWwucHVzaCh0KSx0PXQuY2hpbGRyZW5baF19fWNhdGNoKGUpe3U9ITAsZD1lfWZpbmFsbHl7dHJ5e2N8fG51bGw9PXAucmV0dXJufHxwLnJldHVybigpfWZpbmFsbHl7aWYodSl0aHJvdyBkfX1pZihzJiZvKHQudmFsdWUsZSkpe3QudmFsdWU9dm9pZCAwO2Zvcih2YXIgbT1sLmxlbmd0aC0xO20+PTA7bS0tKXt2YXIgZz1sW21dLHk9clttXTswPT09T2JqZWN0LmtleXMoZy5jaGlsZHJlblt5XS5jaGlsZHJlbikubGVuZ3RoJiZkZWxldGUgZy5jaGlsZHJlblt5XX1hPW8zKHt9LGEpLGkoKX19LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gYX19fSh7Y29tcGFyZTpmdW5jdGlvbihlLHQpe3JldHVybiEhZSYmISF0JiZlLnBhZ2VQYXRoPT09dC5wYWdlUGF0aCYmZS50eXBlPT09dC50eXBlJiZlLmJvdW5kYXJ5VHlwZT09PXQuYm91bmRhcnlUeXBlfSxnZXRDaGFyYWN0ZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBhZ2VQYXRoLnNwbGl0KFwiL1wiKX19KSxhbj1hdC5pbnNlcnQsYXI9YXQucmVtb3ZlLGFvPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9vdmVydmlldy9zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIuY3NzXCIpLGFhPXt9O2FhLnN0eWxlVGFnVHJhbnNmb3JtPW0oKSxhYS5zZXRBdHRyaWJ1dGVzPWQoKSxhYS5pbnNlcnQ9YygpLGFhLmRvbUFQST1sKCksYWEuaW5zZXJ0U3R5bGVFbGVtZW50PXAoKSxhKCkoYW8uWixhYSksYW8uWiYmYW8uWi5sb2NhbHMmJmFvLloubG9jYWxzO2xldCBhaT17fTtmdW5jdGlvbiBhbChlLHQpe2xldCBuPXcudXNlUmVmKGFpKTtyZXR1cm4gbi5jdXJyZW50PT09YWkmJihuLmN1cnJlbnQ9ZSh0KSksbn1sZXQgYXM9W107ZnVuY3Rpb24gYWMoZSl7dy51c2VFZmZlY3QoZSxhcyl9Y2xhc3MgYXV7c3RhdGljIGNyZWF0ZSgpe3JldHVybiBuZXcgYXV9Y3VycmVudElkPTA7c3RhcnQoZSx0KXt0aGlzLmNsZWFyKCksdGhpcy5jdXJyZW50SWQ9c2V0VGltZW91dCgoKT0+e3RoaXMuY3VycmVudElkPTAsdCgpfSxlKX1pc1N0YXJ0ZWQoKXtyZXR1cm4gMCE9PXRoaXMuY3VycmVudElkfWNsZWFyPSgpPT57MCE9PXRoaXMuY3VycmVudElkJiYoY2xlYXJUaW1lb3V0KHRoaXMuY3VycmVudElkKSx0aGlzLmN1cnJlbnRJZD0wKX07ZGlzcG9zZUVmZmVjdD0oKT0+dGhpcy5jbGVhcn1mdW5jdGlvbiBhZCgpe2xldCBlPWFsKGF1LmNyZWF0ZSkuY3VycmVudDtyZXR1cm4gYWMoZS5kaXNwb3NlRWZmZWN0KSxlfWxldCBhZj1DW2B1c2VJbnNlcnRpb25FZmZlY3Qke01hdGgucmFuZG9tKCkudG9GaXhlZCgxKX1gLnNsaWNlKDAsLTMpXSxhcD1hZiYmYWYhPT13LnVzZUxheW91dEVmZmVjdD9hZjplPT5lKCk7ZnVuY3Rpb24gYWgoZSl7bGV0IHQ9YWwoYW0pLmN1cnJlbnQ7cmV0dXJuIHQubmV4dD1lLGFwKHQuZWZmZWN0KSx0LnRyYW1wb2xpbmV9ZnVuY3Rpb24gYW0oKXtsZXQgZT17bmV4dDp2b2lkIDAsY2FsbGJhY2s6YWcsdHJhbXBvbGluZTooLi4udCk9PmUuY2FsbGJhY2s/LiguLi50KSxlZmZlY3Q6KCk9PntlLmNhbGxiYWNrPWUubmV4dH19O3JldHVybiBlfWZ1bmN0aW9uIGFnKCl7fWZ1bmN0aW9uIGF5KHtjb250cm9sbGVkOmUsZGVmYXVsdDp0LG5hbWU6bixzdGF0ZTpyPVwidmFsdWVcIn0pe2xldHtjdXJyZW50Om99PXcudXNlUmVmKHZvaWQgMCE9PWUpLFthLGldPXcudXNlU3RhdGUodCksbD13LnVzZUNhbGxiYWNrKGU9PntvfHxpKGUpfSxbXSk7cmV0dXJuW28/ZTphLGxdfWxldCBhdj17Li4uQ30sYWI9MCxhQT1hdi51c2VJZDtmdW5jdGlvbiBheChlLHQpe2lmKHZvaWQgMCE9PWFBKXtsZXQgbj1hQSgpO3JldHVybiBlPz8odD9gJHt0fS0ke259YDpuKX1yZXR1cm4gZnVuY3Rpb24oZSx0PVwibXVpXCIpe2xldFtuLHJdPXcudXNlU3RhdGUoZSksbz1lfHxuO3JldHVybiB3LnVzZUVmZmVjdCgoKT0+e251bGw9PW4mJihhYis9MSxyKGAke3R9LSR7YWJ9YCkpfSxbbix0XSksb30oZSx0KX1mdW5jdGlvbiBhdygpe2xldCBlPW5ldyBNYXA7cmV0dXJue2VtaXQodCxuKXtlLmdldCh0KT8uZm9yRWFjaChlPT5lKG4pKX0sb24odCxuKXtlLmhhcyh0KXx8ZS5zZXQodCxuZXcgU2V0KSxlLmdldCh0KS5hZGQobil9LG9mZih0LG4pe2UuZ2V0KHQpPy5kZWxldGUobil9fX1sZXQgYUM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P3cudXNlTGF5b3V0RWZmZWN0OigpPT57fSxhXz13LmNyZWF0ZUNvbnRleHQobnVsbCksYWs9dy5jcmVhdGVDb250ZXh0KG51bGwpLGFFPSgpPT53LnVzZUNvbnRleHQoYV8pPy5pZHx8bnVsbCxhaj0oKT0+dy51c2VDb250ZXh0KGFrKTtmdW5jdGlvbiBhUyhlKXtsZXR7Y2hpbGRyZW46dCxpZDpufT1lLHI9YUUoKTtyZXR1cm4oMCxBLmpzeCkoYV8uUHJvdmlkZXIse3ZhbHVlOncudXNlTWVtbygoKT0+KHtpZDpuLHBhcmVudElkOnJ9KSxbbixyXSksY2hpbGRyZW46dH0pfWZ1bmN0aW9uIGFPKGUpe2xldHtjaGlsZHJlbjp0fT1lLG49dy51c2VSZWYoW10pLHI9dy51c2VDYWxsYmFjayhlPT57bi5jdXJyZW50PVsuLi5uLmN1cnJlbnQsZV19LFtdKSxvPXcudXNlQ2FsbGJhY2soZT0+e24uY3VycmVudD1uLmN1cnJlbnQuZmlsdGVyKHQ9PnQhPT1lKX0sW10pLFthXT13LnVzZVN0YXRlKCgpPT5hdygpKTtyZXR1cm4oMCxBLmpzeCkoYWsuUHJvdmlkZXIse3ZhbHVlOncudXNlTWVtbygoKT0+KHtub2Rlc1JlZjpuLGFkZE5vZGU6cixyZW1vdmVOb2RlOm8sZXZlbnRzOmF9KSxbcixvLGFdKSxjaGlsZHJlbjp0fSl9ZnVuY3Rpb24gYUIoZSl7bGV0e29wZW46dD0hMSxvbk9wZW5DaGFuZ2U6bixlbGVtZW50czpyfT1lLG89YXgoKSxhPXcudXNlUmVmKHt9KSxbaV09dy51c2VTdGF0ZSgoKT0+YXcoKSksbD1udWxsIT1hRSgpLFtzLGNdPXcudXNlU3RhdGUoci5yZWZlcmVuY2UpLHU9YWgoKGUsdCxyKT0+e2EuY3VycmVudC5vcGVuRXZlbnQ9ZT90OnZvaWQgMCxpLmVtaXQoXCJvcGVuY2hhbmdlXCIse29wZW46ZSxldmVudDp0LHJlYXNvbjpyLG5lc3RlZDpsfSksbj8uKGUsdCxyKX0pLGQ9dy51c2VNZW1vKCgpPT4oe3NldFBvc2l0aW9uUmVmZXJlbmNlOmN9KSxbXSksZj13LnVzZU1lbW8oKCk9Pih7cmVmZXJlbmNlOnN8fHIucmVmZXJlbmNlfHxudWxsLGZsb2F0aW5nOnIuZmxvYXRpbmd8fG51bGwsZG9tUmVmZXJlbmNlOnIucmVmZXJlbmNlfSksW3Msci5yZWZlcmVuY2Usci5mbG9hdGluZ10pO3JldHVybiB3LnVzZU1lbW8oKCk9Pih7ZGF0YVJlZjphLG9wZW46dCxvbk9wZW5DaGFuZ2U6dSxlbGVtZW50czpmLGV2ZW50czppLGZsb2F0aW5nSWQ6byxyZWZzOmR9KSxbdCx1LGYsaSxvLGRdKX1mdW5jdGlvbiBhUCgpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3d9ZnVuY3Rpb24gYUkoZSl7cmV0dXJuIGFEKGUpPyhlLm5vZGVOYW1lfHxcIlwiKS50b0xvd2VyQ2FzZSgpOlwiI2RvY3VtZW50XCJ9ZnVuY3Rpb24gYVQoZSl7dmFyIHQ7cmV0dXJuKG51bGw9PWV8fG51bGw9PSh0PWUub3duZXJEb2N1bWVudCk/dm9pZCAwOnQuZGVmYXVsdFZpZXcpfHx3aW5kb3d9ZnVuY3Rpb24gYXooZSl7dmFyIHQ7cmV0dXJuIG51bGw9PSh0PShhRChlKT9lLm93bmVyRG9jdW1lbnQ6ZS5kb2N1bWVudCl8fHdpbmRvdy5kb2N1bWVudCk/dm9pZCAwOnQuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIGFEKGUpe3JldHVybiEhYVAoKSYmKGUgaW5zdGFuY2VvZiBOb2RlfHxlIGluc3RhbmNlb2YgYVQoZSkuTm9kZSl9ZnVuY3Rpb24gYUwoZSl7cmV0dXJuISFhUCgpJiYoZSBpbnN0YW5jZW9mIEVsZW1lbnR8fGUgaW5zdGFuY2VvZiBhVChlKS5FbGVtZW50KX1mdW5jdGlvbiBhTihlKXtyZXR1cm4hIWFQKCkmJihlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fGUgaW5zdGFuY2VvZiBhVChlKS5IVE1MRWxlbWVudCl9ZnVuY3Rpb24gYVIoZSl7cmV0dXJuISFhUCgpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgU2hhZG93Um9vdCYmKGUgaW5zdGFuY2VvZiBTaGFkb3dSb290fHxlIGluc3RhbmNlb2YgYVQoZSkuU2hhZG93Um9vdCl9bGV0IGFNPW5ldyBTZXQoW1wiaW5saW5lXCIsXCJjb250ZW50c1wiXSk7ZnVuY3Rpb24gYVooZSl7bGV0e292ZXJmbG93OnQsb3ZlcmZsb3dYOm4sb3ZlcmZsb3dZOnIsZGlzcGxheTpvfT1hRyhlKTtyZXR1cm4vYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdCh0K3IrbikmJiFhTS5oYXMobyl9bGV0IGFVPW5ldyBTZXQoW1widGFibGVcIixcInRkXCIsXCJ0aFwiXSksYUY9W1wiOnBvcG92ZXItb3BlblwiLFwiOm1vZGFsXCJdO2Z1bmN0aW9uIGFxKGUpe3JldHVybiBhRi5zb21lKHQ9Pnt0cnl7cmV0dXJuIGUubWF0Y2hlcyh0KX1jYXRjaChlKXtyZXR1cm4hMX19KX1sZXQgYUg9W1widHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGVcIixcInNjYWxlXCIsXCJyb3RhdGVcIixcInBlcnNwZWN0aXZlXCJdLGFWPVtcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlXCIsXCJzY2FsZVwiLFwicm90YXRlXCIsXCJwZXJzcGVjdGl2ZVwiLFwiZmlsdGVyXCJdLGEkPVtcInBhaW50XCIsXCJsYXlvdXRcIixcInN0cmljdFwiLFwiY29udGVudFwiXTtmdW5jdGlvbiBhVyhlKXtsZXQgdD1hWSgpLG49YUwoZSk/YUcoZSk6ZTtyZXR1cm4gYUguc29tZShlPT4hIW5bZV0mJlwibm9uZVwiIT09bltlXSl8fCEhbi5jb250YWluZXJUeXBlJiZcIm5vcm1hbFwiIT09bi5jb250YWluZXJUeXBlfHwhdCYmISFuLmJhY2tkcm9wRmlsdGVyJiZcIm5vbmVcIiE9PW4uYmFja2Ryb3BGaWx0ZXJ8fCF0JiYhIW4uZmlsdGVyJiZcIm5vbmVcIiE9PW4uZmlsdGVyfHxhVi5zb21lKGU9PihuLndpbGxDaGFuZ2V8fFwiXCIpLmluY2x1ZGVzKGUpKXx8YSQuc29tZShlPT4obi5jb250YWlufHxcIlwiKS5pbmNsdWRlcyhlKSl9ZnVuY3Rpb24gYVkoKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgQ1NTJiYhIUNTUy5zdXBwb3J0cyYmQ1NTLnN1cHBvcnRzKFwiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJcIixcIm5vbmVcIil9bGV0IGFLPW5ldyBTZXQoW1wiaHRtbFwiLFwiYm9keVwiLFwiI2RvY3VtZW50XCJdKTtmdW5jdGlvbiBhWChlKXtyZXR1cm4gYUsuaGFzKGFJKGUpKX1mdW5jdGlvbiBhRyhlKXtyZXR1cm4gYVQoZSkuZ2V0Q29tcHV0ZWRTdHlsZShlKX1mdW5jdGlvbiBhUShlKXtyZXR1cm4gYUwoZSk/e3Njcm9sbExlZnQ6ZS5zY3JvbGxMZWZ0LHNjcm9sbFRvcDplLnNjcm9sbFRvcH06e3Njcm9sbExlZnQ6ZS5zY3JvbGxYLHNjcm9sbFRvcDplLnNjcm9sbFl9fWZ1bmN0aW9uIGFKKGUpe2lmKFwiaHRtbFwiPT09YUkoZSkpcmV0dXJuIGU7bGV0IHQ9ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8YVIoZSkmJmUuaG9zdHx8YXooZSk7cmV0dXJuIGFSKHQpP3QuaG9zdDp0fWZ1bmN0aW9uIGEwKGUsdCxuKXt2YXIgcjt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49ITApO2xldCBvPWZ1bmN0aW9uIGUodCl7bGV0IG49YUoodCk7cmV0dXJuIGFYKG4pP3Qub3duZXJEb2N1bWVudD90Lm93bmVyRG9jdW1lbnQuYm9keTp0LmJvZHk6YU4obikmJmFaKG4pP246ZShuKX0oZSksYT1vPT09KG51bGw9PShyPWUub3duZXJEb2N1bWVudCk/dm9pZCAwOnIuYm9keSksaT1hVChvKTtpZihhKXtsZXQgZT1hMShpKTtyZXR1cm4gdC5jb25jYXQoaSxpLnZpc3VhbFZpZXdwb3J0fHxbXSxhWihvKT9vOltdLGUmJm4/YTAoZSk6W10pfXJldHVybiB0LmNvbmNhdChvLGEwKG8sW10sbikpfWZ1bmN0aW9uIGExKGUpe3JldHVybiBlLnBhcmVudCYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucGFyZW50KT9lLmZyYW1lRWxlbWVudDpudWxsfWZ1bmN0aW9uIGEyKGUpe2xldCB0PWFsKGE0LGUpLmN1cnJlbnQ7cmV0dXJuIHQubmV4dD1lLGFDKHQuZWZmZWN0KSx0fWZ1bmN0aW9uIGE0KGUpe2xldCB0PXtjdXJyZW50OmUsbmV4dDplLGVmZmVjdDooKT0+e3QuY3VycmVudD10Lm5leHR9fTtyZXR1cm4gdH1sZXQgYTU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvcixhMz1mdW5jdGlvbigpe2lmKCFhNSlyZXR1cm57cGxhdGZvcm06XCJcIixtYXhUb3VjaFBvaW50czotMX07bGV0IGU9bmF2aWdhdG9yLnVzZXJBZ2VudERhdGE7cmV0dXJuIGU/LnBsYXRmb3JtP3twbGF0Zm9ybTplLnBsYXRmb3JtLG1heFRvdWNoUG9pbnRzOm5hdmlnYXRvci5tYXhUb3VjaFBvaW50c306e3BsYXRmb3JtOm5hdmlnYXRvci5wbGF0Zm9ybT8/XCJcIixtYXhUb3VjaFBvaW50czpuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM/Py0xfX0oKSxhNj1mdW5jdGlvbigpe2lmKCFhNSlyZXR1cm5cIlwiO2xldCBlPW5hdmlnYXRvci51c2VyQWdlbnREYXRhO3JldHVybiBlPy5wbGF0Zm9ybT9lLnBsYXRmb3JtOm5hdmlnYXRvci5wbGF0Zm9ybT8/XCJcIn0oKSxhOT1mdW5jdGlvbigpe2lmKCFhNSlyZXR1cm5cIlwiO2xldCBlPW5hdmlnYXRvci51c2VyQWdlbnREYXRhO3JldHVybiBlJiZBcnJheS5pc0FycmF5KGUuYnJhbmRzKT9lLmJyYW5kcy5tYXAoKHticmFuZDplLHZlcnNpb246dH0pPT5gJHtlfS8ke3R9YCkuam9pbihcIiBcIik6bmF2aWdhdG9yLnVzZXJBZ2VudH0oKSxhOD1cInVuZGVmaW5lZFwiIT10eXBlb2YgQ1NTJiYhIUNTUy5zdXBwb3J0cyYmQ1NTLnN1cHBvcnRzKFwiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6bm9uZVwiKSxhNz1cIk1hY0ludGVsXCI9PT1hMy5wbGF0Zm9ybSYmYTMubWF4VG91Y2hQb2ludHM+MXx8L2lQKGhvbmV8YWR8b2QpfGlPUy8udGVzdChhMy5wbGF0Zm9ybSk7YTUmJi9maXJlZm94L2kudGVzdChhOSk7bGV0IGllPWE1JiYvYXBwbGUvaS50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLGl0PWE1JiYvYW5kcm9pZC9pLnRlc3QoYTYpfHwvYW5kcm9pZC9pLnRlc3QoYTkpLGlyPWE1JiZhNi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJtYWNcIikmJiFuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMsaW89YTkuaW5jbHVkZXMoXCJqc2RvbS9cIik7ZnVuY3Rpb24gaWEoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gaWkoZSl7cmV0dXJuIDA9PT1lLm1veklucHV0U291cmNlJiYhIWUuaXNUcnVzdGVkfHwoaXQmJmUucG9pbnRlclR5cGU/XCJjbGlja1wiPT09ZS50eXBlJiYxPT09ZS5idXR0b25zOjA9PT1lLmRldGFpbCYmIWUucG9pbnRlclR5cGUpfWZ1bmN0aW9uIGlsKGUpe3JldHVybiFpbyYmKCFpdCYmMD09PWUud2lkdGgmJjA9PT1lLmhlaWdodHx8aXQmJjE9PT1lLndpZHRoJiYxPT09ZS5oZWlnaHQmJjA9PT1lLnByZXNzdXJlJiYwPT09ZS5kZXRhaWwmJlwibW91c2VcIj09PWUucG9pbnRlclR5cGV8fGUud2lkdGg8MSYmZS5oZWlnaHQ8MSYmMD09PWUucHJlc3N1cmUmJjA9PT1lLmRldGFpbCYmXCJ0b3VjaFwiPT09ZS5wb2ludGVyVHlwZSl9ZnVuY3Rpb24gaXMoZSx0KXtsZXQgbj1bXCJtb3VzZVwiLFwicGVuXCJdO3JldHVybiB0fHxuLnB1c2goXCJcIix2b2lkIDApLG4uaW5jbHVkZXMoZSl9bGV0IGljPVwiZGF0YS1iYXNlLXVpLWZvY3VzYWJsZVwiLGl1PVwiYWN0aXZlXCIsaWQ9XCJzZWxlY3RlZFwiLGlwPVwiQXJyb3dMZWZ0XCIsaWg9XCJBcnJvd1JpZ2h0XCIsaW09XCJBcnJvd1VwXCIsaWc9XCJBcnJvd0Rvd25cIjtmdW5jdGlvbiBpeShlKXtsZXQgdD1lLmFjdGl2ZUVsZW1lbnQ7Zm9yKDt0Py5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50IT1udWxsOyl0PXQuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O3JldHVybiB0fWZ1bmN0aW9uIGl2KGUsdCl7aWYoIWV8fCF0KXJldHVybiExO2xldCBuPXQuZ2V0Um9vdE5vZGU/LigpO2lmKGUuY29udGFpbnModCkpcmV0dXJuITA7aWYobiYmYVIobikpe2xldCBuPXQ7Zm9yKDtuOyl7aWYoZT09PW4pcmV0dXJuITA7bj1uLnBhcmVudE5vZGV8fG4uaG9zdH19cmV0dXJuITF9ZnVuY3Rpb24gaWIoZSl7cmV0dXJuXCJjb21wb3NlZFBhdGhcImluIGU/ZS5jb21wb3NlZFBhdGgoKVswXTplLnRhcmdldH1mdW5jdGlvbiBpQShlLHQpe3JldHVybiBudWxsIT10JiYoXCJjb21wb3NlZFBhdGhcImluIGU/ZS5jb21wb3NlZFBhdGgoKS5pbmNsdWRlcyh0KTpudWxsIT1lLnRhcmdldCYmdC5jb250YWlucyhlLnRhcmdldCkpfWZ1bmN0aW9uIGl4KGUpe3JldHVybiBlPy5vd25lckRvY3VtZW50fHxkb2N1bWVudH1mdW5jdGlvbiBpdyhlKXtyZXR1cm4gYU4oZSkmJmUubWF0Y2hlcyhcImlucHV0Om5vdChbdHlwZT0naGlkZGVuJ10pOm5vdChbZGlzYWJsZWRdKSxbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT0nZmFsc2UnXSksdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pXCIpfWZ1bmN0aW9uIGlDKGUpe3JldHVybiEhZSYmXCJjb21ib2JveFwiPT09ZS5nZXRBdHRyaWJ1dGUoXCJyb2xlXCIpJiZpdyhlKX1mdW5jdGlvbiBpXyhlKXtyZXR1cm4gZT9lLmhhc0F0dHJpYnV0ZShpYyk/ZTplLnF1ZXJ5U2VsZWN0b3IoYFske2ljfV1gKXx8ZTpudWxsfWZ1bmN0aW9uIGlrKGUpe3JldHVybmBkYXRhLWJhc2UtdWktJHtlfWB9bGV0IGlFPWlrKFwic2FmZS1wb2x5Z29uXCIpO2Z1bmN0aW9uIGlqKGUsdCxuKXtpZihuJiYhaXMobikpcmV0dXJuIDA7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSl7bGV0IG49ZSgpO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBuP246bj8uW3RdfXJldHVybiBlPy5bdF19ZnVuY3Rpb24gaVMoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lKCk6ZX1mdW5jdGlvbiBpTyhlLHQ9e30pe2xldHtvcGVuOm4sb25PcGVuQ2hhbmdlOnIsZGF0YVJlZjpvLGV2ZW50czphLGVsZW1lbnRzOml9PWUse2VuYWJsZWQ6bD0hMCxkZWxheTpzPTAsaGFuZGxlQ2xvc2U6Yz1udWxsLG1vdXNlT25seTp1PSExLHJlc3RNczpkPTAsbW92ZTpmPSEwfT10LHA9YWooKSxoPWFFKCksbT1hMihjKSxnPWEyKHMpLHk9YTIobiksdj1hMihkKSxiPXcudXNlUmVmKHZvaWQgMCksQT1hZCgpLHg9dy51c2VSZWYodm9pZCAwKSxDPWFkKCksXz13LnVzZVJlZighMCksaz13LnVzZVJlZighMSksRT13LnVzZVJlZigoKT0+e30pLGo9dy51c2VSZWYoITEpLFM9YWgoKCk9PntsZXQgZT1vLmN1cnJlbnQub3BlbkV2ZW50Py50eXBlO3JldHVybiBlPy5pbmNsdWRlcyhcIm1vdXNlXCIpJiZcIm1vdXNlZG93blwiIT09ZX0pO3cudXNlRWZmZWN0KCgpPT57aWYobClyZXR1cm4gYS5vbihcIm9wZW5jaGFuZ2VcIixlKSwoKT0+e2Eub2ZmKFwib3BlbmNoYW5nZVwiLGUpfTtmdW5jdGlvbiBlKHtvcGVuOmV9KXtlfHwoQS5jbGVhcigpLEMuY2xlYXIoKSxfLmN1cnJlbnQ9ITAsai5jdXJyZW50PSExKX19LFtsLGEsQSxDXSksdy51c2VFZmZlY3QoKCk9PntpZighbHx8IW0uY3VycmVudHx8IW4pcmV0dXJuO2Z1bmN0aW9uIGUoZSl7UygpJiZyKCExLGUsXCJob3ZlclwiKX1sZXQgdD1peChpLmZsb2F0aW5nKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixlKSwoKT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixlKX19LFtpLmZsb2F0aW5nLG4scixsLG0sU10pO2xldCBPPXcudXNlQ2FsbGJhY2soKGUsdD0hMCxuPVwiaG92ZXJcIik9PntsZXQgbz1paihnLmN1cnJlbnQsXCJjbG9zZVwiLGIuY3VycmVudCk7byYmIXguY3VycmVudD9BLnN0YXJ0KG8sKCk9PnIoITEsZSxuKSk6dCYmKEEuY2xlYXIoKSxyKCExLGUsbikpfSxbZyxyLEFdKSxCPWFoKCgpPT57RS5jdXJyZW50KCkseC5jdXJyZW50PXZvaWQgMH0pLFA9YWgoKCk9PntpZihrLmN1cnJlbnQpe2xldCBlPWl4KGkuZmxvYXRpbmcpLmJvZHk7ZS5zdHlsZS5wb2ludGVyRXZlbnRzPVwiXCIsZS5yZW1vdmVBdHRyaWJ1dGUoaUUpLGsuY3VycmVudD0hMX19KSxJPWFoKCgpPT4hIW8uY3VycmVudC5vcGVuRXZlbnQmJltcImNsaWNrXCIsXCJtb3VzZWRvd25cIl0uaW5jbHVkZXMoby5jdXJyZW50Lm9wZW5FdmVudC50eXBlKSk7dy51c2VFZmZlY3QoKCk9PntpZihsJiZhTChpLmRvbVJlZmVyZW5jZSkpe2xldCByPWkuZG9tUmVmZXJlbmNlLG89aS5mbG9hdGluZztyZXR1cm4gbiYmci5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLGEpLGYmJnIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLGUse29uY2U6ITB9KSxyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsZSksci5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLHQpLG8mJihvLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsYSksby5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLHMpLG8uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixjKSksKCk9PntuJiZyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsYSksZiYmci5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsZSksci5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLGUpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix0KSxvJiYoby5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLGEpLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIixzKSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsYykpfX1mdW5jdGlvbiBlKGUpe2lmKEEuY2xlYXIoKSxfLmN1cnJlbnQ9ITEsdSYmIWlzKGIuY3VycmVudCl8fGlTKHYuY3VycmVudCk+MCYmIWlqKGcuY3VycmVudCxcIm9wZW5cIikpcmV0dXJuO2xldCB0PWlqKGcuY3VycmVudCxcIm9wZW5cIixiLmN1cnJlbnQpO3Q/QS5zdGFydCh0LCgpPT57eS5jdXJyZW50fHxyKCEwLGUsXCJob3ZlclwiKX0pOm58fHIoITAsZSxcImhvdmVyXCIpfWZ1bmN0aW9uIHQoZSl7aWYoSSgpKXJldHVybiB2b2lkIFAoKTtFLmN1cnJlbnQoKTtsZXQgdD1peChpLmZsb2F0aW5nKTtpZihDLmNsZWFyKCksai5jdXJyZW50PSExLG0uY3VycmVudCYmby5jdXJyZW50LmZsb2F0aW5nQ29udGV4dCl7bnx8QS5jbGVhcigpLHguY3VycmVudD1tLmN1cnJlbnQoey4uLm8uY3VycmVudC5mbG9hdGluZ0NvbnRleHQsdHJlZTpwLHg6ZS5jbGllbnRYLHk6ZS5jbGllbnRZLG9uQ2xvc2UoKXtQKCksQigpLEkoKXx8TyhlLCEwLFwic2FmZS1wb2x5Z29uXCIpfX0pO2xldCByPXguY3VycmVudDt0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixyKSxFLmN1cnJlbnQ9KCk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixyKX07cmV0dXJufVwidG91Y2hcIj09PWIuY3VycmVudCYmaXYoaS5mbG9hdGluZyxlLnJlbGF0ZWRUYXJnZXQpfHxPKGUpfWZ1bmN0aW9uIGEoZSl7IUkoKSYmby5jdXJyZW50LmZsb2F0aW5nQ29udGV4dCYmbS5jdXJyZW50Py4oey4uLm8uY3VycmVudC5mbG9hdGluZ0NvbnRleHQsdHJlZTpwLHg6ZS5jbGllbnRYLHk6ZS5jbGllbnRZLG9uQ2xvc2UoKXtQKCksQigpLEkoKXx8TyhlKX19KShlKX1mdW5jdGlvbiBzKCl7QS5jbGVhcigpfWZ1bmN0aW9uIGMoZSl7SSgpfHxPKGUsITEpfX0sW2ksbCxlLHUsZixPLEIsUCxyLG4seSxwLGcsbSxvLEksdixBLENdKSxhQygoKT0+e2lmKGwmJm4mJm0uY3VycmVudD8uX19vcHRpb25zPy5ibG9ja1BvaW50ZXJFdmVudHMmJlMoKSl7ay5jdXJyZW50PSEwO2xldCBlPWkuZmxvYXRpbmc7aWYoYUwoaS5kb21SZWZlcmVuY2UpJiZlKXtsZXQgdD1peChpLmZsb2F0aW5nKS5ib2R5O3Quc2V0QXR0cmlidXRlKGlFLFwiXCIpO2xldCBuPWkuZG9tUmVmZXJlbmNlLHI9cD8ubm9kZXNSZWYuY3VycmVudC5maW5kKGU9PmUuaWQ9PT1oKT8uY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmc7cmV0dXJuIHImJihyLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJcIiksdC5zdHlsZS5wb2ludGVyRXZlbnRzPVwibm9uZVwiLG4uc3R5bGUucG9pbnRlckV2ZW50cz1cImF1dG9cIixlLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJhdXRvXCIsKCk9Pnt0LnN0eWxlLnBvaW50ZXJFdmVudHM9XCJcIixuLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJcIixlLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJcIn19fX0sW2wsbixoLGkscCxtLFNdKSxhQygoKT0+e258fChiLmN1cnJlbnQ9dm9pZCAwLGouY3VycmVudD0hMSxCKCksUCgpKX0sW24sQixQXSksdy51c2VFZmZlY3QoKCk9PigpPT57QigpLEEuY2xlYXIoKSxDLmNsZWFyKCksUCgpfSxbbCxpLmRvbVJlZmVyZW5jZSxCLFAsQSxDXSk7bGV0IFQ9dy51c2VNZW1vKCgpPT57ZnVuY3Rpb24gZShlKXtiLmN1cnJlbnQ9ZS5wb2ludGVyVHlwZX1yZXR1cm57b25Qb2ludGVyRG93bjplLG9uUG9pbnRlckVudGVyOmUsb25Nb3VzZU1vdmUoZSl7bGV0e25hdGl2ZUV2ZW50OnR9PWU7ZnVuY3Rpb24gbygpe18uY3VycmVudHx8eS5jdXJyZW50fHxyKCEwLHQsXCJob3ZlclwiKX0oIXV8fGlzKGIuY3VycmVudCkpJiYhbiYmMCE9PWlTKHYuY3VycmVudCkmJihqLmN1cnJlbnQmJmUubW92ZW1lbnRYKioyK2UubW92ZW1lbnRZKioyPDJ8fChDLmNsZWFyKCksXCJ0b3VjaFwiPT09Yi5jdXJyZW50P28oKTooai5jdXJyZW50PSEwLEMuc3RhcnQoaVModi5jdXJyZW50KSxvKSkpKX19fSxbdSxyLG4seSx2LENdKTtyZXR1cm4gdy51c2VNZW1vKCgpPT5sP3tyZWZlcmVuY2U6VH06e30sW2wsVF0pfWZ1bmN0aW9uIGlCKGUsdCxuPSEwKXtyZXR1cm4gZS5maWx0ZXIoZT0+ZS5wYXJlbnRJZD09PXQmJighbnx8ZS5jb250ZXh0Py5vcGVuKSkuZmxhdE1hcCh0PT5bdCwuLi5pQihlLHQuaWQsbildKX1mdW5jdGlvbiBpUChlLHQpe2xldCBuPVtdLHI9ZS5maW5kKGU9PmUuaWQ9PT10KT8ucGFyZW50SWQ7Zm9yKDtyOyl7bGV0IHQ9ZS5maW5kKGU9PmUuaWQ9PT1yKTtyPXQ/LnBhcmVudElkLHQmJihuPW4uY29uY2F0KHQpKX1yZXR1cm4gbn1mdW5jdGlvbiBpSShlLHQpe2xldFtuLHJdPWUsbz0hMSxhPXQubGVuZ3RoO2ZvcihsZXQgZT0wLGk9YS0xO2U8YTtpPWUrKyl7bGV0W2EsbF09dFtlXXx8WzAsMF0sW3MsY109dFtpXXx8WzAsMF07bD49ciE9Yz49ciYmbjw9KHMtYSkqKHItbCkvKGMtbCkrYSYmKG89IW8pfXJldHVybiBvfWZ1bmN0aW9uIGlUKGU9e30pe2xldHtidWZmZXI6dD0uNSxibG9ja1BvaW50ZXJFdmVudHM6bj0hMSxyZXF1aXJlSW50ZW50OnI9ITB9PWUsbz1uZXcgYXUsYT0hMSxpPW51bGwsbD1udWxsLHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHBlcmZvcm1hbmNlP3BlcmZvcm1hbmNlLm5vdygpOjAsYz0oe3g6ZSx5Om4scGxhY2VtZW50OmMsZWxlbWVudHM6dSxvbkNsb3NlOmQsbm9kZUlkOmYsdHJlZTpwfSk9PmZ1bmN0aW9uKGgpe3ZhciBtLGc7ZnVuY3Rpb24geSgpe28uY2xlYXIoKSxkKCl9aWYoby5jbGVhcigpLCF1LmRvbVJlZmVyZW5jZXx8IXUuZmxvYXRpbmd8fG51bGw9PWN8fG51bGw9PWV8fG51bGw9PW4pcmV0dXJuO2xldHtjbGllbnRYOnYsY2xpZW50WTpifT1oLEE9W3YsYl0seD1pYihoKSx3PVwibW91c2VsZWF2ZVwiPT09aC50eXBlLEM9aXYodS5mbG9hdGluZyx4KSxfPWl2KHUuZG9tUmVmZXJlbmNlLHgpLGs9dS5kb21SZWZlcmVuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRT11LmZsb2F0aW5nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGo9Yy5zcGxpdChcIi1cIilbMF0sUz1lPkUucmlnaHQtRS53aWR0aC8yLE89bj5FLmJvdHRvbS1FLmhlaWdodC8yLEI9KG09QSxnPWssbVswXT49Zy54JiZtWzBdPD1nLngrZy53aWR0aCYmbVsxXT49Zy55JiZtWzFdPD1nLnkrZy5oZWlnaHQpLFA9RS53aWR0aD5rLndpZHRoLEk9RS5oZWlnaHQ+ay5oZWlnaHQsVD0oUD9rOkUpLmxlZnQsej0oUD9rOkUpLnJpZ2h0LEQ9KEk/azpFKS50b3AsTD0oST9rOkUpLmJvdHRvbTtpZihDJiYoYT0hMCwhdykpcmV0dXJuO2lmKF8mJihhPSExKSxfJiYhdyl7YT0hMDtyZXR1cm59aWYodyYmYUwoaC5yZWxhdGVkVGFyZ2V0KSYmaXYodS5mbG9hdGluZyxoLnJlbGF0ZWRUYXJnZXQpfHxwJiZpQihwLm5vZGVzUmVmLmN1cnJlbnQsZikuc29tZSgoe2NvbnRleHQ6ZX0pPT5lPy5vcGVuKSlyZXR1cm47aWYoXCJ0b3BcIj09PWomJm4+PWsuYm90dG9tLTF8fFwiYm90dG9tXCI9PT1qJiZuPD1rLnRvcCsxfHxcImxlZnRcIj09PWomJmU+PWsucmlnaHQtMXx8XCJyaWdodFwiPT09aiYmZTw9ay5sZWZ0KzEpcmV0dXJuIHkoKTtsZXQgTj1bXTtzd2l0Y2goail7Y2FzZVwidG9wXCI6Tj1bW1Qsay50b3ArMV0sW1QsRS5ib3R0b20tMV0sW3osRS5ib3R0b20tMV0sW3osay50b3ArMV1dO2JyZWFrO2Nhc2VcImJvdHRvbVwiOk49W1tULEUudG9wKzFdLFtULGsuYm90dG9tLTFdLFt6LGsuYm90dG9tLTFdLFt6LEUudG9wKzFdXTticmVhaztjYXNlXCJsZWZ0XCI6Tj1bW0UucmlnaHQtMSxMXSxbRS5yaWdodC0xLERdLFtrLmxlZnQrMSxEXSxbay5sZWZ0KzEsTF1dO2JyZWFrO2Nhc2VcInJpZ2h0XCI6Tj1bW2sucmlnaHQtMSxMXSxbay5yaWdodC0xLERdLFtFLmxlZnQrMSxEXSxbRS5sZWZ0KzEsTF1dfWlmKCFpSShbdixiXSxOKSl7aWYoYSYmIUIpcmV0dXJuIHkoKTtpZighdyYmcil7bGV0IGU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1wZXJmb3JtYW5jZS5ub3coKSxyPW4tcztpZihudWxsPT09aXx8bnVsbD09PWx8fDA9PT1yKXJldHVybiBpPWUsbD10LHM9bixudWxsO2xldCBvPWUtaSxhPXQtbCxjPU1hdGguc3FydChvKm8rYSphKTtyZXR1cm4gaT1lLGw9dCxzPW4sYy9yfShoLmNsaWVudFgsaC5jbGllbnRZKTtpZihudWxsIT09ZSYmZTwuMSlyZXR1cm4geSgpfWlJKFt2LGJdLGZ1bmN0aW9uKFtlLG5dKXtzd2l0Y2goail7Y2FzZVwidG9wXCI6e2xldCByPVtbRS5sZWZ0LFN8fFA/RS5ib3R0b20tdDpFLnRvcF0sW0UucmlnaHQsUz9QP0UuYm90dG9tLXQ6RS50b3A6RS5ib3R0b20tdF1dO3JldHVybltbUD9lK3QvMjpTP2UrNCp0OmUtNCp0LG4rdCsxXSxbUD9lLXQvMjpTP2UrNCp0OmUtNCp0LG4rdCsxXSwuLi5yXX1jYXNlXCJib3R0b21cIjp7bGV0IHI9W1tFLmxlZnQsU3x8UD9FLnRvcCt0OkUuYm90dG9tXSxbRS5yaWdodCxTP1A/RS50b3ArdDpFLmJvdHRvbTpFLnRvcCt0XV07cmV0dXJuW1tQP2UrdC8yOlM/ZSs0KnQ6ZS00KnQsbi10XSxbUD9lLXQvMjpTP2UrNCp0OmUtNCp0LG4tdF0sLi4ucl19Y2FzZVwibGVmdFwiOnJldHVybltbT3x8ST9FLnJpZ2h0LXQ6RS5sZWZ0LEUudG9wXSxbTz9JP0UucmlnaHQtdDpFLmxlZnQ6RS5yaWdodC10LEUuYm90dG9tXSxbZSt0KzEsST9uK3QvMjpPP24rNCp0Om4tNCp0XSxbZSt0KzEsST9uLXQvMjpPP24rNCp0Om4tNCp0XV07Y2FzZVwicmlnaHRcIjp7bGV0IHI9W1tPfHxJP0UubGVmdCt0OkUucmlnaHQsRS50b3BdLFtPP0k/RS5sZWZ0K3Q6RS5yaWdodDpFLmxlZnQrdCxFLmJvdHRvbV1dO3JldHVybltbZS10LEk/bit0LzI6Tz9uKzQqdDpuLTQqdF0sW2UtdCxJP24tdC8yOk8/bis0KnQ6bi00KnRdLC4uLnJdfWRlZmF1bHQ6cmV0dXJuW119fShbZSxuXSkpPyFhJiZyJiZvLnN0YXJ0KDQwLHkpOnkoKX19O3JldHVybiBjLl9fb3B0aW9ucz17YmxvY2tQb2ludGVyRXZlbnRzOm59LGN9bGV0IGl6PWlyJiZpZTtmdW5jdGlvbiBpRChlLHQ9e30pe2xldHtvcGVuOm4sb25PcGVuQ2hhbmdlOnIsZXZlbnRzOm8sZGF0YVJlZjphLGVsZW1lbnRzOml9PWUse2VuYWJsZWQ6bD0hMCx2aXNpYmxlT25seTpzPSEwfT10LGM9dy51c2VSZWYoITEpLHU9YWQoKSxkPXcudXNlUmVmKCEwKTt3LnVzZUVmZmVjdCgoKT0+e2lmKCFsKXJldHVybjtsZXQgZT1hVChpLmRvbVJlZmVyZW5jZSk7ZnVuY3Rpb24gdCgpeyFuJiZhTihpLmRvbVJlZmVyZW5jZSkmJmkuZG9tUmVmZXJlbmNlPT09aXkoaXgoaS5kb21SZWZlcmVuY2UpKSYmKGMuY3VycmVudD0hMCl9ZnVuY3Rpb24gcigpe2QuY3VycmVudD0hMH1mdW5jdGlvbiBvKCl7ZC5jdXJyZW50PSExfXJldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdCksaXomJihlLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsciwhMCksZS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIixvLCEwKSksKCk9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdCksaXomJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsciwhMCksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIixvLCEwKSl9fSxbaS5kb21SZWZlcmVuY2UsbixsXSksdy51c2VFZmZlY3QoKCk9PntpZihsKXJldHVybiBvLm9uKFwib3BlbmNoYW5nZVwiLGUpLCgpPT57by5vZmYoXCJvcGVuY2hhbmdlXCIsZSl9O2Z1bmN0aW9uIGUoe3JlYXNvbjplfSl7KFwicmVmZXJlbmNlLXByZXNzXCI9PT1lfHxcImVzY2FwZS1rZXlcIj09PWUpJiYoYy5jdXJyZW50PSEwKX19LFtvLGxdKTtsZXQgZj13LnVzZU1lbW8oKCk9Pih7b25Nb3VzZUxlYXZlKCl7Yy5jdXJyZW50PSExfSxvbkZvY3VzKGUpe2lmKGMuY3VycmVudClyZXR1cm47bGV0IHQ9aWIoZS5uYXRpdmVFdmVudCk7aWYocyYmYUwodCkpe2lmKGl6JiYhZS5yZWxhdGVkVGFyZ2V0KXtpZighZC5jdXJyZW50JiYhaXcodCkpcmV0dXJufWVsc2UgaWYoIWZ1bmN0aW9uKGUpe2lmKCFlfHxpbylyZXR1cm4hMDt0cnl7cmV0dXJuIGUubWF0Y2hlcyhcIjpmb2N1cy12aXNpYmxlXCIpfWNhdGNoKGUpe3JldHVybiEwfX0odCkpcmV0dXJufXIoITAsZS5uYXRpdmVFdmVudCxcImZvY3VzXCIpfSxvbkJsdXIoZSl7Yy5jdXJyZW50PSExO2xldCB0PWUucmVsYXRlZFRhcmdldCxuPWUubmF0aXZlRXZlbnQsbz1hTCh0KSYmdC5oYXNBdHRyaWJ1dGUoaWsoXCJmb2N1cy1ndWFyZFwiKSkmJlwib3V0c2lkZVwiPT09dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR5cGVcIik7dS5zdGFydCgwLCgpPT57bGV0IGU9aXkoaS5kb21SZWZlcmVuY2U/aS5kb21SZWZlcmVuY2Uub3duZXJEb2N1bWVudDpkb2N1bWVudCk7KHR8fGUhPT1pLmRvbVJlZmVyZW5jZSkmJihpdihhLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0Py5yZWZzLmZsb2F0aW5nLmN1cnJlbnQsZSl8fGl2KGkuZG9tUmVmZXJlbmNlLGUpfHxvfHxyKCExLG4sXCJmb2N1c1wiKSl9KX19KSxbYSxpLmRvbVJlZmVyZW5jZSxyLHMsdV0pO3JldHVybiB3LnVzZU1lbW8oKCk9Pmw/e3JlZmVyZW5jZTpmfTp7fSxbbCxmXSl9Z2xvYmFsVGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7bGV0IGlMPW5ldyBjbGFzc3tjYWxsYmFja3M9W107Y2FsbGJhY2tzQ291bnQ9MDtuZXh0SWQ9MTtzdGFydElkPTE7aXNTY2hlZHVsZWQ9ITE7dGljaz1lPT57dGhpcy5pc1NjaGVkdWxlZD0hMTtsZXQgdD10aGlzLmNhbGxiYWNrcyxuPXRoaXMuY2FsbGJhY2tzQ291bnQ7aWYodGhpcy5jYWxsYmFja3M9W10sdGhpcy5jYWxsYmFja3NDb3VudD0wLHRoaXMuc3RhcnRJZD10aGlzLm5leHRJZCxuPjApZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKz0xKXRbbl0/LihlKX07cmVxdWVzdChlKXtsZXQgdD10aGlzLm5leHRJZDtyZXR1cm4gdGhpcy5uZXh0SWQrPTEsdGhpcy5jYWxsYmFja3MucHVzaChlKSx0aGlzLmNhbGxiYWNrc0NvdW50Kz0xLHRoaXMuaXNTY2hlZHVsZWR8fChyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy50aWNrKSx0aGlzLmlzU2NoZWR1bGVkPSEwKSx0fWNhbmNlbChlKXtsZXQgdD1lLXRoaXMuc3RhcnRJZDt0PDB8fHQ+PXRoaXMuY2FsbGJhY2tzLmxlbmd0aHx8KHRoaXMuY2FsbGJhY2tzW3RdPW51bGwsdGhpcy5jYWxsYmFja3NDb3VudC09MSl9fTtjbGFzcyBpTntzdGF0aWMgY3JlYXRlKCl7cmV0dXJuIG5ldyBpTn1zdGF0aWMgcmVxdWVzdChlKXtyZXR1cm4gaUwucmVxdWVzdChlKX1zdGF0aWMgY2FuY2VsKGUpe3JldHVybiBpTC5jYW5jZWwoZSl9Y3VycmVudElkPW51bGw7cmVxdWVzdChlKXt0aGlzLmNhbmNlbCgpLHRoaXMuY3VycmVudElkPWlMLnJlcXVlc3QoKCk9Pnt0aGlzLmN1cnJlbnRJZD1udWxsLGUoKX0pfWNhbmNlbD0oKT0+e251bGwhPT10aGlzLmN1cnJlbnRJZCYmKGlMLmNhbmNlbCh0aGlzLmN1cnJlbnRJZCksdGhpcy5jdXJyZW50SWQ9bnVsbCl9O2Rpc3Bvc2VFZmZlY3Q9KCk9PnRoaXMuY2FuY2VsfWZ1bmN0aW9uIGlSKCl7bGV0IGU9YWwoaU4uY3JlYXRlKS5jdXJyZW50O3JldHVybiBhYyhlLmRpc3Bvc2VFZmZlY3QpLGV9bGV0IGlNPXtzdHlsZTp7dHJhbnNpdGlvbjpcIm5vbmVcIn19LGlaPXt9LGlVPVtdLGlGPXtmYWxsYmFja0F4aXNTaWRlOlwibm9uZVwifSxpcT17ZmFsbGJhY2tBeGlzU2lkZTpcImVuZFwifSxpSD17aW50ZW50aW9uYWw6XCJvbkNsaWNrXCIsc2xvcHB5Olwib25Qb2ludGVyRG93blwifTtmdW5jdGlvbiBpVihlKXtyZXR1cm57ZXNjYXBlS2V5OlwiYm9vbGVhblwiPT10eXBlb2YgZT9lOmU/LmVzY2FwZUtleT8/ITEsb3V0c2lkZVByZXNzOlwiYm9vbGVhblwiPT10eXBlb2YgZT9lOmU/Lm91dHNpZGVQcmVzcz8/ITB9fWZ1bmN0aW9uIGkkKGUsdD17fSl7bGV0e29wZW46bixvbk9wZW5DaGFuZ2U6cixlbGVtZW50czpvLGRhdGFSZWY6YX09ZSx7ZW5hYmxlZDppPSEwLGVzY2FwZUtleTpsPSEwLG91dHNpZGVQcmVzczpzPSEwLG91dHNpZGVQcmVzc0V2ZW50OmM9XCJzbG9wcHlcIixyZWZlcmVuY2VQcmVzczp1PSExLHJlZmVyZW5jZVByZXNzRXZlbnQ6ZD1cInNsb3BweVwiLGFuY2VzdG9yU2Nyb2xsOmY9ITEsYnViYmxlczpwLGNhcHR1cmU6aH09dCxtPWFqKCksZz1haChcImZ1bmN0aW9uXCI9PXR5cGVvZiBzP3M6KCk9PiExKSx5PVwiZnVuY3Rpb25cIj09dHlwZW9mIHM/ZzpzLHY9dy51c2VSZWYoITEpLHtlc2NhcGVLZXk6YixvdXRzaWRlUHJlc3M6QX09aVYocCkse2VzY2FwZUtleTp4LG91dHNpZGVQcmVzczpDfT1pVihoKSxfPXcudXNlUmVmKG51bGwpLGs9YWQoKSxFPWFkKCksaj13LnVzZVJlZighMSksUz13LnVzZVJlZihcIlwiKSxPPWFoKGU9PntTLmN1cnJlbnQ9ZS5wb2ludGVyVHlwZX0pLEI9YWgoKCk9PntsZXQgZT1TLmN1cnJlbnQ7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGM/YzpjW1wicGVuXCIhPT1lJiZlP2U6XCJtb3VzZVwiXX0pLFA9YWgoZT0+e2lmKCFufHwhaXx8IWx8fFwiRXNjYXBlXCIhPT1lLmtleXx8ai5jdXJyZW50KXJldHVybjtsZXQgdD1hLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0Py5ub2RlSWQsbz1tP2lCKG0ubm9kZXNSZWYuY3VycmVudCx0KTpbXTtpZighYiYmKGUuc3RvcFByb3BhZ2F0aW9uKCksby5sZW5ndGg+MCkpe2xldCBlPSEwO2lmKG8uZm9yRWFjaCh0PT57dC5jb250ZXh0Py5vcGVuJiYhdC5jb250ZXh0LmRhdGFSZWYuY3VycmVudC5fX2VzY2FwZUtleUJ1YmJsZXMmJihlPSExKX0pLCFlKXJldHVybn1yKCExLFwibmF0aXZlRXZlbnRcImluIGU/ZS5uYXRpdmVFdmVudDplLFwiZXNjYXBlLWtleVwiKX0pLEk9YWgoZT0+e2xldCB0PUIoKTtyZXR1cm5cImludGVudGlvbmFsXCI9PT10JiZcImNsaWNrXCIhPT1lLnR5cGV8fFwic2xvcHB5XCI9PT10JiZcImNsaWNrXCI9PT1lLnR5cGV9KSxUPWFoKGU9PntsZXQgdD0oKT0+e1AoZSksaWIoZSk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsdCl9O2liKGUpPy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHQpfSksej1haChlPT57aWYoSShlKSlyZXR1cm47bGV0IHQ9YS5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZTthLmN1cnJlbnQuaW5zaWRlUmVhY3RUcmVlPSExO2xldCBuPXYuY3VycmVudDtpZih2LmN1cnJlbnQ9ITEsXCJpbnRlbnRpb25hbFwiPT09QigpJiZufHx0fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB5JiYheShlKSlyZXR1cm47bGV0IGk9aWIoZSksbD1gWyR7aWsoXCJpbmVydFwiKX1dYCxzPWl4KG8uZmxvYXRpbmcpLnF1ZXJ5U2VsZWN0b3JBbGwobCksYz1hTChpKT9pOm51bGw7Zm9yKDtjJiYhYVgoYyk7KXtsZXQgZT1hSihjKTtpZihhWChlKXx8IWFMKGUpKWJyZWFrO2M9ZX1pZihzLmxlbmd0aCYmYUwoaSkmJiFpLm1hdGNoZXMoXCJodG1sLGJvZHlcIikmJiFpdihpLG8uZmxvYXRpbmcpJiZBcnJheS5mcm9tKHMpLmV2ZXJ5KGU9PiFpdihjLGUpKSlyZXR1cm47aWYoYU4oaSkpe2xldCB0PWFYKGkpLG49YUcoaSkscj0vYXV0b3xzY3JvbGwvLG89dHx8ci50ZXN0KG4ub3ZlcmZsb3dYKSxhPXR8fHIudGVzdChuLm92ZXJmbG93WSksbD1vJiZpLmNsaWVudFdpZHRoPjAmJmkuc2Nyb2xsV2lkdGg+aS5jbGllbnRXaWR0aCxzPWEmJmkuY2xpZW50SGVpZ2h0PjAmJmkuc2Nyb2xsSGVpZ2h0PmkuY2xpZW50SGVpZ2h0LGM9XCJydGxcIj09PW4uZGlyZWN0aW9uLHU9cyYmKGM/ZS5vZmZzZXRYPD1pLm9mZnNldFdpZHRoLWkuY2xpZW50V2lkdGg6ZS5vZmZzZXRYPmkuY2xpZW50V2lkdGgpLGQ9bCYmZS5vZmZzZXRZPmkuY2xpZW50SGVpZ2h0O2lmKHV8fGQpcmV0dXJufWxldCB1PWEuY3VycmVudC5mbG9hdGluZ0NvbnRleHQ/Lm5vZGVJZCxkPW0mJmlCKG0ubm9kZXNSZWYuY3VycmVudCx1KS5zb21lKHQ9PmlBKGUsdC5jb250ZXh0Py5lbGVtZW50cy5mbG9hdGluZykpO2lmKGlBKGUsby5mbG9hdGluZyl8fGlBKGUsby5kb21SZWZlcmVuY2UpfHxkKXJldHVybjtsZXQgZj1tP2lCKG0ubm9kZXNSZWYuY3VycmVudCx1KTpbXTtpZihmLmxlbmd0aD4wKXtsZXQgZT0hMDtpZihmLmZvckVhY2godD0+e3QuY29udGV4dD8ub3BlbiYmIXQuY29udGV4dC5kYXRhUmVmLmN1cnJlbnQuX19vdXRzaWRlUHJlc3NCdWJibGVzJiYoZT0hMSl9KSwhZSlyZXR1cm59cighMSxlLFwib3V0c2lkZS1wcmVzc1wiKX0pLEQ9YWgoZT0+e2lmKCEoXCJzbG9wcHlcIiE9PUIoKXx8IW58fCFpfHxpQShlLG8uZmxvYXRpbmcpfHxpQShlLG8uZG9tUmVmZXJlbmNlKSkpe2lmKFwidG91Y2hcIj09PWUucG9pbnRlclR5cGUpe18uY3VycmVudD17c3RhcnRUaW1lOkRhdGUubm93KCksc3RhcnRYOmUuY2xpZW50WCxzdGFydFk6ZS5jbGllbnRZLGRpc21pc3NPblBvaW50ZXJVcDohMSxkaXNtaXNzT25Nb3VzZURvd246ITB9LGsuc3RhcnQoMWUzLCgpPT57Xy5jdXJyZW50JiYoXy5jdXJyZW50LmRpc21pc3NPblBvaW50ZXJVcD0hMSxfLmN1cnJlbnQuZGlzbWlzc09uTW91c2VEb3duPSExKX0pO3JldHVybn16KGUpfX0pLEw9YWgoZT0+e2lmKEkoZSl8fChrLmNsZWFyKCksXCJtb3VzZWRvd25cIj09PWUudHlwZSYmXy5jdXJyZW50JiYhXy5jdXJyZW50LmRpc21pc3NPbk1vdXNlRG93bikpcmV0dXJuO2xldCB0PSgpPT57XCJwb2ludGVyZG93blwiPT09ZS50eXBlP0QoZSk6eihlKSxpYihlKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLnR5cGUsdCl9O2liKGUpPy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSx0KX0pLE49YWgoZT0+e2lmKFwic2xvcHB5XCIhPT1CKCl8fFwidG91Y2hcIiE9PWUucG9pbnRlclR5cGV8fCFfLmN1cnJlbnR8fGlBKGUsby5mbG9hdGluZyl8fGlBKGUsby5kb21SZWZlcmVuY2UpKXJldHVybjtsZXQgdD1NYXRoLmFicyhlLmNsaWVudFgtXy5jdXJyZW50LnN0YXJ0WCksbj1NYXRoLmFicyhlLmNsaWVudFktXy5jdXJyZW50LnN0YXJ0WSkscj1NYXRoLnNxcnQodCp0K24qbik7cj41JiYoXy5jdXJyZW50LmRpc21pc3NPblBvaW50ZXJVcD0hMCkscj4xMCYmKHooZSksay5jbGVhcigpLF8uY3VycmVudD1udWxsKX0pLFI9YWgoZT0+e1wic2xvcHB5XCIhPT1CKCl8fFwidG91Y2hcIiE9PWUucG9pbnRlclR5cGV8fCFfLmN1cnJlbnR8fGlBKGUsby5mbG9hdGluZyl8fGlBKGUsby5kb21SZWZlcmVuY2UpfHwoXy5jdXJyZW50LmRpc21pc3NPblBvaW50ZXJVcCYmeihlKSxrLmNsZWFyKCksXy5jdXJyZW50PW51bGwpfSk7dy51c2VFZmZlY3QoKCk9PntpZighbnx8IWkpcmV0dXJuO2EuY3VycmVudC5fX2VzY2FwZUtleUJ1YmJsZXM9YixhLmN1cnJlbnQuX19vdXRzaWRlUHJlc3NCdWJibGVzPUE7bGV0IGU9bmV3IGF1O2Z1bmN0aW9uIHQoZSl7cighMSxlLFwiYW5jZXN0b3Itc2Nyb2xsXCIpfWZ1bmN0aW9uIHMoKXtlLmNsZWFyKCksai5jdXJyZW50PSEwfWZ1bmN0aW9uIGMoKXtlLnN0YXJ0KDUqISFhWSgpLCgpPT57ai5jdXJyZW50PSExfSl9bGV0IHU9aXgoby5mbG9hdGluZyk7dS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIixPLCEwKSxsJiYodS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHg/VDpQLHgpLHUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uc3RhcnRcIixzKSx1LmFkZEV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbmVuZFwiLGMpKSx5JiYodS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixDP0w6eixDKSx1LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLEM/TDp6LEMpLHUuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsTixDKSx1LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIixSLEMpLHUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLEwsQykpO2xldCBkPVtdO3JldHVybiBmJiYoYUwoby5kb21SZWZlcmVuY2UpJiYoZD1hMChvLmRvbVJlZmVyZW5jZSkpLGFMKG8uZmxvYXRpbmcpJiYoZD1kLmNvbmNhdChhMChvLmZsb2F0aW5nKSkpLCFhTChvLnJlZmVyZW5jZSkmJm8ucmVmZXJlbmNlJiZvLnJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCYmKGQ9ZC5jb25jYXQoYTAoby5yZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpKSkpLChkPWQuZmlsdGVyKGU9PmUhPT11LmRlZmF1bHRWaWV3Py52aXN1YWxWaWV3cG9ydCkpLmZvckVhY2goZT0+e2UuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHQse3Bhc3NpdmU6ITB9KX0pLCgpPT57dS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIixPLCEwKSxsJiYodS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHg/VDpQLHgpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uc3RhcnRcIixzKSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbmVuZFwiLGMpKSx5JiYodS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIixDP0w6eixDKSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLEM/TDp6LEMpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsTixDKSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIixSLEMpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLEwsQykpLGQuZm9yRWFjaChlPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdCl9KSxlLmNsZWFyKCl9fSxbYSxvLGwseSxjLG4scixmLGksYixBLFAseCxULHosQyxMLEQsTixSLE9dKSx3LnVzZUVmZmVjdCgoKT0+e2EuY3VycmVudC5pbnNpZGVSZWFjdFRyZWU9ITF9LFthLHldKTtsZXQgTT13LnVzZU1lbW8oKCk9Pih7b25LZXlEb3duOlAsLi4udSYme1tpSFtkXV06ZT0+e3IoITEsZS5uYXRpdmVFdmVudCxcInJlZmVyZW5jZS1wcmVzc1wiKX0sLi4uXCJpbnRlbnRpb25hbFwiIT09ZCYme29uQ2xpY2soZSl7cighMSxlLm5hdGl2ZUV2ZW50LFwicmVmZXJlbmNlLXByZXNzXCIpfX19fSksW1Ascix1LGRdKSxaPWFoKGU9PntsZXQgdD1pYihlLm5hdGl2ZUV2ZW50KTtpdihvLmZsb2F0aW5nLHQpJiYodi5jdXJyZW50PSEwKX0pLFU9YWgoKCk9PnthLmN1cnJlbnQuaW5zaWRlUmVhY3RUcmVlPSEwLEUuc3RhcnQoMCwoKT0+e2EuY3VycmVudC5pbnNpZGVSZWFjdFRyZWU9ITF9KX0pLEY9dy51c2VNZW1vKCgpPT4oe29uS2V5RG93bjpQLG9uTW91c2VEb3duOlosb25Nb3VzZVVwOlosb25Qb2ludGVyRG93bkNhcHR1cmU6VSxvbk1vdXNlRG93bkNhcHR1cmU6VSxvbkNsaWNrQ2FwdHVyZTpVfSksW1AsWixVXSk7cmV0dXJuIHcudXNlTWVtbygoKT0+aT97cmVmZXJlbmNlOk0sZmxvYXRpbmc6Rn06e30sW2ksTSxGXSl9bGV0IGlXPW5ldyBNYXAoW1tcInNlbGVjdFwiLFwibGlzdGJveFwiXSxbXCJjb21ib2JveFwiLFwibGlzdGJveFwiXSxbXCJsYWJlbFwiLCExXV0pLGlZPVtcInRvcFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwibGVmdFwiXSxpSz1NYXRoLm1pbixpWD1NYXRoLm1heCxpRz1NYXRoLnJvdW5kLGlRPU1hdGguZmxvb3IsaUo9ZT0+KHt4OmUseTplfSksaTA9e2xlZnQ6XCJyaWdodFwiLHJpZ2h0OlwibGVmdFwiLGJvdHRvbTpcInRvcFwiLHRvcDpcImJvdHRvbVwifSxpMT17c3RhcnQ6XCJlbmRcIixlbmQ6XCJzdGFydFwifTtmdW5jdGlvbiBpMihlLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZSh0KTplfWZ1bmN0aW9uIGk0KGUpe3JldHVybiBlLnNwbGl0KFwiLVwiKVswXX1mdW5jdGlvbiBpNShlKXtyZXR1cm4gZS5zcGxpdChcIi1cIilbMV19ZnVuY3Rpb24gaTMoZSl7cmV0dXJuXCJ4XCI9PT1lP1wieVwiOlwieFwifWZ1bmN0aW9uIGk2KGUpe3JldHVyblwieVwiPT09ZT9cImhlaWdodFwiOlwid2lkdGhcIn1sZXQgaTk9bmV3IFNldChbXCJ0b3BcIixcImJvdHRvbVwiXSk7ZnVuY3Rpb24gaTgoZSl7cmV0dXJuIGk5LmhhcyhpNChlKSk/XCJ5XCI6XCJ4XCJ9ZnVuY3Rpb24gaTcoZSl7cmV0dXJuIGUucmVwbGFjZSgvc3RhcnR8ZW5kL2csZT0+aTFbZV0pfWxldCBsZT1bXCJsZWZ0XCIsXCJyaWdodFwiXSxsdD1bXCJyaWdodFwiLFwibGVmdFwiXSxsbj1bXCJ0b3BcIixcImJvdHRvbVwiXSxscj1bXCJib3R0b21cIixcInRvcFwiXTtmdW5jdGlvbiBsbyhlKXtyZXR1cm4gZS5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZyxlPT5pMFtlXSl9ZnVuY3Rpb24gbGEoZSl7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIGU/e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowLC4uLmV9Ont0b3A6ZSxyaWdodDplLGJvdHRvbTplLGxlZnQ6ZX19ZnVuY3Rpb24gbGkoZSl7bGV0e3g6dCx5Om4sd2lkdGg6cixoZWlnaHQ6b309ZTtyZXR1cm57d2lkdGg6cixoZWlnaHQ6byx0b3A6bixsZWZ0OnQscmlnaHQ6dCtyLGJvdHRvbTpuK28seDp0LHk6bn19ZnVuY3Rpb24gbGwoZSx0LG4pe3JldHVybiBNYXRoLmZsb29yKGUvdCkhPT1ufWZ1bmN0aW9uIGxzKGUsdCl7cmV0dXJuIHQ8MHx8dD49ZS5jdXJyZW50Lmxlbmd0aH1mdW5jdGlvbiBsYyhlLHQpe3JldHVybiBsZChlLHtkaXNhYmxlZEluZGljZXM6dH0pfWZ1bmN0aW9uIGx1KGUsdCl7cmV0dXJuIGxkKGUse2RlY3JlbWVudDohMCxzdGFydGluZ0luZGV4OmUuY3VycmVudC5sZW5ndGgsZGlzYWJsZWRJbmRpY2VzOnR9KX1mdW5jdGlvbiBsZChlLHtzdGFydGluZ0luZGV4OnQ9LTEsZGVjcmVtZW50Om49ITEsZGlzYWJsZWRJbmRpY2VzOnIsYW1vdW50Om89MX09e30pe2xldCBhPXQ7ZG8gYSs9bj8tbzpvO3doaWxlKGE+PTAmJmE8PWUuY3VycmVudC5sZW5ndGgtMSYmbGYoZSxhLHIpKTtyZXR1cm4gYX1mdW5jdGlvbiBsZihlLHQsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbilyZXR1cm4gbih0KTtpZihuKXJldHVybiBuLmluY2x1ZGVzKHQpO2xldCByPWUuY3VycmVudFt0XTtyZXR1cm4gbnVsbD09cnx8ci5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKXx8XCJ0cnVlXCI9PT1yLmdldEF0dHJpYnV0ZShcImFyaWEtZGlzYWJsZWRcIil9bGV0IGxwPTA7ZnVuY3Rpb24gbGgoZSx0PXt9KXtsZXR7cHJldmVudFNjcm9sbDpuPSExLGNhbmNlbFByZXZpb3VzOnI9ITAsc3luYzpvPSExfT10O3ImJmNhbmNlbEFuaW1hdGlvbkZyYW1lKGxwKTtsZXQgYT0oKT0+ZT8uZm9jdXMoe3ByZXZlbnRTY3JvbGw6bn0pO28/YSgpOmxwPXJlcXVlc3RBbmltYXRpb25GcmFtZShhKX1mdW5jdGlvbiBsbShlLHQsbil7c3dpdGNoKGUpe2Nhc2VcInZlcnRpY2FsXCI6cmV0dXJuIHQ7Y2FzZVwiaG9yaXpvbnRhbFwiOnJldHVybiBuO2RlZmF1bHQ6cmV0dXJuIHR8fG59fWZ1bmN0aW9uIGxnKGUsdCl7cmV0dXJuIGxtKHQsZT09PWltfHxlPT09aWcsZT09PWlwfHxlPT09aWgpfWZ1bmN0aW9uIGx5KGUsdCxuKXtyZXR1cm4gbG0odCxlPT09aWcsbj9lPT09aXA6ZT09PWloKXx8XCJFbnRlclwiPT09ZXx8XCIgXCI9PT1lfHxcIlwiPT09ZX1mdW5jdGlvbiBsdihlPVtdKXtsZXQgdD1lLm1hcChlPT5lPy5yZWZlcmVuY2UpLG49ZS5tYXAoZT0+ZT8uZmxvYXRpbmcpLHI9ZS5tYXAoZT0+ZT8uaXRlbSksbz13LnVzZUNhbGxiYWNrKHQ9PmxiKHQsZSxcInJlZmVyZW5jZVwiKSx0KSxhPXcudXNlQ2FsbGJhY2sodD0+bGIodCxlLFwiZmxvYXRpbmdcIiksbiksaT13LnVzZUNhbGxiYWNrKHQ9PmxiKHQsZSxcIml0ZW1cIikscik7cmV0dXJuIHcudXNlTWVtbygoKT0+KHtnZXRSZWZlcmVuY2VQcm9wczpvLGdldEZsb2F0aW5nUHJvcHM6YSxnZXRJdGVtUHJvcHM6aX0pLFtvLGEsaV0pfWZ1bmN0aW9uIGxiKGUsdCxuKXtsZXQgcj1uZXcgTWFwLG89XCJpdGVtXCI9PT1uLGE9e307Zm9yKGxldCB0IGluXCJmbG9hdGluZ1wiPT09biYmKGEudGFiSW5kZXg9LTEsYVtpY109XCJcIiksZSlvJiZlJiYodD09PWl1fHx0PT09aWQpfHwoYVt0XT1lW3RdKTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krPTEpe2xldCBsLHM9dFtpXT8uW25dOyhsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHM/ZT9zKGUpOm51bGw6cykmJmxBKGEsbCxvLHIpfXJldHVybiBsQShhLGUsbyxyKSxhfWZ1bmN0aW9uIGxBKGUsdCxuLHIpe2ZvcihsZXQgbyBpbiB0KXtsZXQgYT10W29dO24mJihvPT09aXV8fG89PT1pZCl8fChvLnN0YXJ0c1dpdGgoXCJvblwiKT8oci5oYXMobyl8fHIuc2V0KG8sW10pLFwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJihyLmdldChvKT8ucHVzaChhKSxlW29dPSguLi5lKT0+ci5nZXQobyk/Lm1hcCh0PT50KC4uLmUpKS5maW5kKGU9PnZvaWQgMCE9PWUpKSk6ZVtvXT1hKX19bGV0IGx4PXcuY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIGx3KGUpe2xldCB0PXcudXNlQ29udGV4dChseCk7aWYodm9pZCAwPT09dCYmIWUpdGhyb3cgRXJyb3IoXCJCYXNlIFVJOiBNZW51Um9vdENvbnRleHQgaXMgbWlzc2luZy4gTWVudSBwYXJ0cyBtdXN0IGJlIHBsYWNlZCB3aXRoaW4gPE1lbnUuUm9vdD4uXCIpO3JldHVybiB0fWxldCBsQz13LmNyZWF0ZUNvbnRleHQobnVsbCk7ZnVuY3Rpb24gbF8oZSx0PSExLG49ITEpe2xldFtyLG9dPXcudXNlU3RhdGUoZSYmdD9cImlkbGVcIjp2b2lkIDApLFthLGldPXcudXNlU3RhdGUoZSk7cmV0dXJuIGUmJiFhJiYoaSghMCksbyhcInN0YXJ0aW5nXCIpKSxlfHwhYXx8XCJlbmRpbmdcIj09PXJ8fG58fG8oXCJlbmRpbmdcIiksZXx8YXx8XCJlbmRpbmdcIiE9PXJ8fG8odm9pZCAwKSxhQygoKT0+e2lmKCFlJiZhJiZcImVuZGluZ1wiIT09ciYmbil7bGV0IGU9aU4ucmVxdWVzdCgoKT0+e28oXCJlbmRpbmdcIil9KTtyZXR1cm4oKT0+e2lOLmNhbmNlbChlKX19fSxbZSxhLHIsbl0pLGFDKCgpPT57aWYoIWV8fHQpcmV0dXJuO2xldCBuPWlOLnJlcXVlc3QoKCk9PntlaC5mbHVzaFN5bmMoKCk9PntvKHZvaWQgMCl9KX0pO3JldHVybigpPT57aU4uY2FuY2VsKG4pfX0sW3QsZV0pLGFDKCgpPT57aWYoIWV8fCF0KXJldHVybjtlJiZhJiZcImlkbGVcIiE9PXImJm8oXCJzdGFydGluZ1wiKTtsZXQgbj1pTi5yZXF1ZXN0KCgpPT57byhcImlkbGVcIil9KTtyZXR1cm4oKT0+e2lOLmNhbmNlbChuKX19LFt0LGUsYSxvLHJdKSx3LnVzZU1lbW8oKCk9Pih7bW91bnRlZDphLHNldE1vdW50ZWQ6aSx0cmFuc2l0aW9uU3RhdHVzOnJ9KSxbYSxyXSl9ZnVuY3Rpb24gbGsoZSl7bGV0e2VuYWJsZWQ6dD0hMCxvcGVuOm4scmVmOnIsb25Db21wbGV0ZTpvfT1lLGE9YTIobiksaT1haChvKSxsPWZ1bmN0aW9uKGUsdD0hMSl7bGV0IG49aVIoKTtyZXR1cm4gYWgoKHIsbz1udWxsKT0+e2xldCBhO2lmKG4uY2FuY2VsKCksbnVsbCE9ZSl7aWYoXCJjdXJyZW50XCJpbiBlKXtpZihudWxsPT1lLmN1cnJlbnQpcmV0dXJuO2E9ZS5jdXJyZW50fWVsc2UgYT1lO1wiZnVuY3Rpb25cIiE9dHlwZW9mIGEuZ2V0QW5pbWF0aW9uc3x8Z2xvYmFsVGhpcy5CQVNFX1VJX0FOSU1BVElPTlNfRElTQUJMRUQ/cigpOm4ucmVxdWVzdCgoKT0+e2Z1bmN0aW9uIGUoKXthJiZQcm9taXNlLmFsbFNldHRsZWQoYS5nZXRBbmltYXRpb25zKCkubWFwKGU9PmUuZmluaXNoZWQpKS50aGVuKCgpPT57bnVsbCE9byYmby5hYm9ydGVkfHxlaC5mbHVzaFN5bmMocil9KX10P24ucmVxdWVzdChlKTplKCl9KX19KX0ocixuKTt3LnVzZUVmZmVjdCgoKT0+e3QmJmwoKCk9PntuPT09YS5jdXJyZW50JiZpKCl9KX0sW3QsbixpLGwsYV0pfWxldCBsRT13LmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBsaihlPSEwKXtsZXQgdD13LnVzZUNvbnRleHQobEUpO2lmKHZvaWQgMD09PXQmJiFlKXRocm93IEVycm9yKFwiQmFzZSBVSTogRGlyZWN0aW9uQ29udGV4dCBpcyBtaXNzaW5nLlwiKTtyZXR1cm4gdD8uZGlyZWN0aW9uPz9cImx0clwifWZ1bmN0aW9uIGxTKGUpe3JldHVybiBlPy5vd25lckRvY3VtZW50fHxkb2N1bWVudH1sZXQgbE89KCk9Pnt9LGxCPXt9LGxQPXt9LGxJPVwiXCI7Y2xhc3MgbFR7bG9ja0NvdW50PTA7cmVzdG9yZT1udWxsO3RpbWVvdXRMb2NrPWF1LmNyZWF0ZSgpO3RpbWVvdXRVbmxvY2s9YXUuY3JlYXRlKCk7YWNxdWlyZShlKXtyZXR1cm4gdGhpcy5sb2NrQ291bnQrPTEsMT09PXRoaXMubG9ja0NvdW50JiZudWxsPT09dGhpcy5yZXN0b3JlJiZ0aGlzLnRpbWVvdXRMb2NrLnN0YXJ0KDAsKCk9PnRoaXMubG9jayhlKSksdGhpcy5yZWxlYXNlfXJlbGVhc2U9KCk9Pnt0aGlzLmxvY2tDb3VudC09MSwwPT09dGhpcy5sb2NrQ291bnQmJnRoaXMucmVzdG9yZSYmdGhpcy50aW1lb3V0VW5sb2NrLnN0YXJ0KDAsdGhpcy51bmxvY2spfTt1bmxvY2s9KCk9PnswPT09dGhpcy5sb2NrQ291bnQmJnRoaXMucmVzdG9yZSYmKHRoaXMucmVzdG9yZT8uKCksdGhpcy5yZXN0b3JlPW51bGwpfTtsb2NrKGUpe2lmKDA9PT10aGlzLmxvY2tDb3VudHx8bnVsbCE9PXRoaXMucmVzdG9yZSlyZXR1cm47bGV0IHQ9bFMoZSkuZG9jdW1lbnRFbGVtZW50LG49YVQodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5vdmVyZmxvd1k7aWYoXCJoaWRkZW5cIj09PW58fFwiY2xpcFwiPT09bil7dGhpcy5yZXN0b3JlPWxPO3JldHVybn1sZXQgcj1hN3x8IWZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBkb2N1bWVudClyZXR1cm4hMTtsZXQgdD1sUyhlKTtyZXR1cm4gYVQodCkuaW5uZXJXaWR0aC10LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aD4wfShlKTt0aGlzLnJlc3RvcmU9cj9mdW5jdGlvbihlKXtsZXQgdD1sUyhlKS5kb2N1bWVudEVsZW1lbnQsbj10LnN0eWxlLm92ZXJmbG93O3JldHVybiB0LnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCIsKCk9Pnt0LnN0eWxlLm92ZXJmbG93PW59fShlKTpmdW5jdGlvbihlKXtsZXQgdD1sUyhlKSxuPXQuZG9jdW1lbnRFbGVtZW50LHI9dC5ib2R5LG89YVQobiksYT0wLGk9MCxsPWlOLmNyZWF0ZSgpO2lmKGE4JiYoby52aXN1YWxWaWV3cG9ydD8uc2NhbGU/PzEpIT09MSlyZXR1cm4oKT0+e307ZnVuY3Rpb24gcygpe2xldCBlPW8uZ2V0Q29tcHV0ZWRTdHlsZShuKSx0PW8uZ2V0Q29tcHV0ZWRTdHlsZShyKTthPW4uc2Nyb2xsVG9wLGk9bi5zY3JvbGxMZWZ0LGxCPXtzY3JvbGxiYXJHdXR0ZXI6bi5zdHlsZS5zY3JvbGxiYXJHdXR0ZXIsb3ZlcmZsb3dZOm4uc3R5bGUub3ZlcmZsb3dZLG92ZXJmbG93WDpuLnN0eWxlLm92ZXJmbG93WH0sbEk9bi5zdHlsZS5zY3JvbGxCZWhhdmlvcixsUD17cG9zaXRpb246ci5zdHlsZS5wb3NpdGlvbixoZWlnaHQ6ci5zdHlsZS5oZWlnaHQsd2lkdGg6ci5zdHlsZS53aWR0aCxib3hTaXppbmc6ci5zdHlsZS5ib3hTaXppbmcsb3ZlcmZsb3dZOnIuc3R5bGUub3ZlcmZsb3dZLG92ZXJmbG93WDpyLnN0eWxlLm92ZXJmbG93WCxzY3JvbGxCZWhhdmlvcjpyLnN0eWxlLnNjcm9sbEJlaGF2aW9yfTtsZXQgbD1cInVuZGVmaW5lZFwiIT10eXBlb2YgQ1NTJiZDU1Muc3VwcG9ydHM/LihcInNjcm9sbGJhci1ndXR0ZXJcIixcInN0YWJsZVwiKSxzPW4uc2Nyb2xsSGVpZ2h0Pm4uY2xpZW50SGVpZ2h0LGM9bi5zY3JvbGxXaWR0aD5uLmNsaWVudFdpZHRoLHU9XCJzY3JvbGxcIj09PWUub3ZlcmZsb3dZfHxcInNjcm9sbFwiPT09dC5vdmVyZmxvd1ksZD1cInNjcm9sbFwiPT09ZS5vdmVyZmxvd1h8fFwic2Nyb2xsXCI9PT10Lm92ZXJmbG93WCxmPU1hdGgubWF4KDAsby5pbm5lcldpZHRoLW4uY2xpZW50V2lkdGgpLHA9TWF0aC5tYXgoMCxvLmlubmVySGVpZ2h0LW4uY2xpZW50SGVpZ2h0KSxoPXBhcnNlRmxvYXQodC5tYXJnaW5Ub3ApK3BhcnNlRmxvYXQodC5tYXJnaW5Cb3R0b20pLG09cGFyc2VGbG9hdCh0Lm1hcmdpbkxlZnQpK3BhcnNlRmxvYXQodC5tYXJnaW5SaWdodCk7T2JqZWN0LmFzc2lnbihuLnN0eWxlLHtzY3JvbGxiYXJHdXR0ZXI6XCJzdGFibGVcIixvdmVyZmxvd1k6IWwmJihzfHx1KT9cInNjcm9sbFwiOlwiaGlkZGVuXCIsb3ZlcmZsb3dYOiFsJiYoY3x8ZCk/XCJzY3JvbGxcIjpcImhpZGRlblwifSksT2JqZWN0LmFzc2lnbihyLnN0eWxlLHtwb3NpdGlvbjpcInJlbGF0aXZlXCIsaGVpZ2h0Omh8fHA/YGNhbGMoMTAwZHZoIC0gJHtoK3B9cHgpYDpcIjEwMGR2aFwiLHdpZHRoOm18fGY/YGNhbGMoMTAwdncgLSAke20rZn1weClgOlwiMTAwdndcIixib3hTaXppbmc6XCJib3JkZXItYm94XCIsb3ZlcmZsb3c6XCJoaWRkZW5cIixzY3JvbGxCZWhhdmlvcjpcInVuc2V0XCJ9KSxyLnNjcm9sbFRvcD1hLHIuc2Nyb2xsTGVmdD1pLG4uc2V0QXR0cmlidXRlKFwiZGF0YS1iYXNlLXVpLXNjcm9sbC1sb2NrZWRcIixcIlwiKSxuLnN0eWxlLnNjcm9sbEJlaGF2aW9yPVwidW5zZXRcIn1mdW5jdGlvbiBjKCl7T2JqZWN0LmFzc2lnbihuLnN0eWxlLGxCKSxPYmplY3QuYXNzaWduKHIuc3R5bGUsbFApLG4uc2Nyb2xsVG9wPWEsbi5zY3JvbGxMZWZ0PWksbi5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLWJhc2UtdWktc2Nyb2xsLWxvY2tlZFwiKSxuLnN0eWxlLnNjcm9sbEJlaGF2aW9yPWxJfWZ1bmN0aW9uIHUoKXtjKCksbC5yZXF1ZXN0KHMpfXJldHVybiBzKCksby5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdSksKCk9PntsLmNhbmNlbCgpLGMoKSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix1KX19KGUpfX1sZXQgbHo9bmV3IGxUO2Z1bmN0aW9uIGxEKGUpe2lmKGUpcmV0dXJuKHtcImZvY3VzLW91dFwiOlwiZm9jdXMtb3V0XCIsXCJlc2NhcGUta2V5XCI6XCJlc2NhcGUta2V5XCIsXCJvdXRzaWRlLXByZXNzXCI6XCJvdXRzaWRlLXByZXNzXCIsXCJsaXN0LW5hdmlnYXRpb25cIjpcImxpc3QtbmF2aWdhdGlvblwiLGNsaWNrOlwidHJpZ2dlci1wcmVzc1wiLGhvdmVyOlwidHJpZ2dlci1ob3ZlclwiLGZvY3VzOlwidHJpZ2dlci1mb2N1c1wiLFwicmVmZXJlbmNlLXByZXNzXCI6XCJ0cmlnZ2VyLXByZXNzXCIsXCJzYWZlLXBvbHlnb25cIjpcInRyaWdnZXItaG92ZXJcIixcImFuY2VzdG9yLXNjcm9sbFwiOnZvaWQgMH0pW2VdfWxldCBsTD13LmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBsTihlPSEwKXtsZXQgdD13LnVzZUNvbnRleHQobEwpO2lmKHZvaWQgMD09PXQmJiFlKXRocm93IEVycm9yKFwiQmFzZSBVSTogQ29udGV4dE1lbnVSb290Q29udGV4dCBpcyBtaXNzaW5nLiBDb250ZXh0TWVudSBwYXJ0cyBtdXN0IGJlIHBsYWNlZCB3aXRoaW4gPENvbnRleHRNZW51LlJvb3Q+LlwiKTtyZXR1cm4gdH1sZXQgbFI9dy5jcmVhdGVDb250ZXh0KCExKTtmdW5jdGlvbiBsTShlLHQpe3JldHVybiBlJiYhdD9lOiFlJiZ0P3Q6ZXx8dD97Li4uZSwuLi50fTp2b2lkIDB9bGV0IGxaPXt9O2Z1bmN0aW9uIGxVKGUsdCxuLHIsbyl7bGV0IGE9ey4uLmxIKGUsbFopfTtyZXR1cm4gdCYmKGE9bEYoYSx0KSksbiYmKGE9bEYoYSxuKSksciYmKGE9bEYoYSxyKSksbyYmKGE9bEYoYSxvKSksYX1mdW5jdGlvbiBsRihlLHQpe3JldHVybiBscSh0KT90KGUpOmZ1bmN0aW9uKGUsdCl7aWYoIXQpcmV0dXJuIGU7Zm9yKGxldCBuIGluIHQpe2xldCByPXRbbl07c3dpdGNoKG4pe2Nhc2VcInN0eWxlXCI6ZVtuXT1sTShlLnN0eWxlLHIpO2JyZWFrO2Nhc2VcImNsYXNzTmFtZVwiOmVbbl09bCQoZS5jbGFzc05hbWUscik7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmNoYXJDb2RlQXQoMCkscj1lLmNoYXJDb2RlQXQoMSksbz1lLmNoYXJDb2RlQXQoMik7cmV0dXJuIDExMT09PW4mJjExMD09PXImJm8+PTY1JiZvPD05MCYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHR8fHZvaWQgMD09PXQpfShuLHIpP2Vbbl09cjplW25dPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZT9uPT57dmFyIHI7aWYobnVsbCE9KHI9bikmJlwib2JqZWN0XCI9PXR5cGVvZiByJiZcIm5hdGl2ZUV2ZW50XCJpbiByKXtsVihuKTtsZXQgcj10KG4pO3JldHVybiBuLmJhc2VVSUhhbmRsZXJQcmV2ZW50ZWR8fGU/LihuKSxyfWxldCBvPXQobik7cmV0dXJuIGU/LihuKSxvfTp0OmV9KGVbbl0scil9fXJldHVybiBlfShlLHQpfWZ1bmN0aW9uIGxxKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9ZnVuY3Rpb24gbEgoZSx0KXtyZXR1cm4gbHEoZSk/ZSh0KTplPz9sWn1mdW5jdGlvbiBsVihlKXtyZXR1cm4gZS5wcmV2ZW50QmFzZVVJSGFuZGxlcj0oKT0+e2UuYmFzZVVJSGFuZGxlclByZXZlbnRlZD0hMH0sZX1mdW5jdGlvbiBsJChlLHQpe3JldHVybiB0P2U/dCtcIiBcIitlOnQ6ZX1sZXQgbFc9W10sbFk9e2N1cnJlbnQ6ITF9LGxLPWZ1bmN0aW9uKGUpe2xldCB0LG4se2NoaWxkcmVuOnIsb3BlbjpvLG9uT3BlbkNoYW5nZTphLG9uT3BlbkNoYW5nZUNvbXBsZXRlOmksZGVmYXVsdE9wZW46bD0hMSxkaXNhYmxlZDpzPSExLG1vZGFsOmMsbG9vcDp1PSEwLG9yaWVudGF0aW9uOmQ9XCJ2ZXJ0aWNhbFwiLGFjdGlvbnNSZWY6ZixvcGVuT25Ib3ZlcjpwLGRlbGF5Omg9MTAwLGNsb3NlRGVsYXk6bT0wLGNsb3NlUGFyZW50T25Fc2M6Zz0hMH09ZSxbeSx2XT13LnVzZVN0YXRlKG51bGwpLFtiLHhdPXcudXNlU3RhdGUobnVsbCksW0MsX109dy51c2VTdGF0ZSgpLFtrLEVdPXcudXNlU3RhdGUoITApLFtqLFNdPXcudXNlU3RhdGUobnVsbCksW08sQl09dy51c2VTdGF0ZShudWxsKSxbUCxJXT13LnVzZVN0YXRlKCEwKSxbVCx6XT13LnVzZVN0YXRlKCExKSxEPXcudXNlUmVmKG51bGwpLEw9dy51c2VSZWYobnVsbCksTj13LnVzZVJlZihudWxsKSxSPXcudXNlUmVmKFtdKSxNPXcudXNlUmVmKFtdKSxaPWFkKCksVT1sTighMCksRj13LnVzZUNvbnRleHQobFIpO3tsZXQgZT1sdyghMCksbj1mdW5jdGlvbihlKXtsZXQgdD13LnVzZUNvbnRleHQobEMpO2lmKG51bGw9PT10JiYhZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IE1lbnViYXJDb250ZXh0IGlzIG1pc3NpbmcuIE1lbnViYXIgcGFydHMgbXVzdCBiZSBwbGFjZWQgd2l0aGluIDxNZW51YmFyPi5cIik7cmV0dXJuIHR9KCEwKTt0PUYmJmU/e3R5cGU6XCJtZW51XCIsY29udGV4dDplfTpuP3t0eXBlOlwibWVudWJhclwiLGNvbnRleHQ6bn06VT97dHlwZTpcImNvbnRleHQtbWVudVwiLGNvbnRleHQ6VX06e3R5cGU6dm9pZCAwfX1sZXQgcT1heCgpO3ZvaWQgMCE9PXQudHlwZSYmKHE9dC5jb250ZXh0LnJvb3RJZCk7bGV0IEg9KHZvaWQgMD09PXQudHlwZXx8XCJjb250ZXh0LW1lbnVcIj09PXQudHlwZSkmJihjPz8hMCksVj1cIm1lbnVcIj09PXQudHlwZT90LmNvbnRleHQuYWxsb3dNb3VzZUVudGVyOlQsJD1cIm1lbnVcIj09PXQudHlwZT90LmNvbnRleHQuc2V0QWxsb3dNb3VzZUVudGVyOnosVz1wPz8oXCJtZW51XCI9PT10LnR5cGV8fFwibWVudWJhclwiPT09dC50eXBlJiZ0LmNvbnRleHQuaGFzU3VibWVudU9wZW4pLFtZLEtdPWF5KHtjb250cm9sbGVkOm8sZGVmYXVsdDpsLG5hbWU6XCJNZW51Um9vdFwiLHN0YXRlOlwib3BlblwifSksWD13LnVzZVJlZihcImNvbnRleHQtbWVudVwiIT09dC50eXBlKSxHPWFkKCk7dy51c2VFZmZlY3QoKCk9PntpZihZfHwoRC5jdXJyZW50PW51bGwpLFwiY29udGV4dC1tZW51XCI9PT10LnR5cGUpe2lmKCFZKXtHLmNsZWFyKCksWC5jdXJyZW50PSExO3JldHVybn1HLnN0YXJ0KDUwMCwoKT0+e1guY3VycmVudD0hMH0pfX0sW0csWSx0LnR5cGVdKTtsZXQgUT13LnVzZUNhbGxiYWNrKGU9PntOLmN1cnJlbnQ9ZSx4KGUpfSxbXSkse21vdW50ZWQ6SixzZXRNb3VudGVkOmVlLHRyYW5zaXRpb25TdGF0dXM6ZXR9PWxfKFkpLHtvcGVuTWV0aG9kOmVuLHRyaWdnZXJQcm9wczplcixyZXNldDplb309ZnVuY3Rpb24oZSl7bGV0W3Qsbl09dy51c2VTdGF0ZShudWxsKSxyPWFoKCh0LHIpPT57ZXx8bihyKX0pLG89YWgoKCk9PntuKG51bGwpfSkse29uQ2xpY2s6YSxvblBvaW50ZXJEb3duOml9PWZ1bmN0aW9uKGUpe2xldCB0PXcudXNlUmVmKFwiXCIpLG49dy51c2VDYWxsYmFjayhuPT57bi5kZWZhdWx0UHJldmVudGVkfHwodC5jdXJyZW50PW4ucG9pbnRlclR5cGUsZShuLG4ucG9pbnRlclR5cGUpKX0sW2VdKTtyZXR1cm57b25DbGljazp3LnVzZUNhbGxiYWNrKG49PntpZigwPT09bi5kZXRhaWwpcmV0dXJuIHZvaWQgZShuLFwia2V5Ym9hcmRcIik7XCJwb2ludGVyVHlwZVwiaW4gbiYmZShuLG4ucG9pbnRlclR5cGUpLGUobix0LmN1cnJlbnQpLHQuY3VycmVudD1cIlwifSxbZV0pLG9uUG9pbnRlckRvd246bn19KHIpO3JldHVybiB3LnVzZU1lbW8oKCk9Pih7b3Blbk1ldGhvZDp0LHJlc2V0Om8sdHJpZ2dlclByb3BzOntvbkNsaWNrOmEsb25Qb2ludGVyRG93bjppfX0pLFt0LG8sYSxpXSl9KFkpO3ZhciBlYT17ZW5hYmxlZDpZJiZIJiZcInRyaWdnZXItaG92ZXJcIiE9PU8mJlwidG91Y2hcIiE9PWVuLG1vdW50ZWQ6SixvcGVuOlkscmVmZXJlbmNlRWxlbWVudDpifTtsZXR7ZW5hYmxlZDplaT0hMCxtb3VudGVkOmVsLG9wZW46ZXMscmVmZXJlbmNlRWxlbWVudDplYz1udWxsfT1lYTthQygoKT0+e2lmKGVpJiZhOCYmZWwmJiFlcyl7bGV0IGU9bFMoZWMpLHQ9ZS5ib2R5LnN0eWxlLnVzZXJTZWxlY3Qsbj1lLmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdDtyZXR1cm4gZS5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9XCJub25lXCIsZS5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9XCJub25lXCIsKCk9PntlLmJvZHkuc3R5bGUudXNlclNlbGVjdD10LGUuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PW59fX0sW2VpLGVsLGVzLGVjXSksYUMoKCk9PntpZihlaSlyZXR1cm4gbHouYWNxdWlyZShlYyl9LFtlaSxlY10pLFl8fGt8fEUoITApO2xldCBldT1haCgoKT0+e2VlKCExKSxJKCEwKSwkKCExKSxpPy4oITEpLGVvKCl9KTtsayh7ZW5hYmxlZDohZixvcGVuOlkscmVmOkwsb25Db21wbGV0ZSgpe1l8fGV1KCl9fSk7bGV0IGVkPXcudXNlUmVmKCEwKSxlZj1hZCgpLGVwPWFoKChlLG4scik9PntpZihZPT09ZXx8ITE9PT1lJiZuPy50eXBlPT09XCJjbGlja1wiJiZcInRvdWNoXCI9PT1uLnBvaW50ZXJUeXBlJiYhZWQuY3VycmVudClyZXR1cm47aWYoIWUmJm51bGwhPT1qKXtsZXQgZT1SLmN1cnJlbnRbal07cXVldWVNaWNyb3Rhc2soKCk9PntlPy5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIil9KX1lJiZcInRyaWdnZXItZm9jdXNcIj09PXI/KGVkLmN1cnJlbnQ9ITEsZWYuc3RhcnQoMzAwLCgpPT57ZWQuY3VycmVudD0hMH0pKTooZWQuY3VycmVudD0hMCxlZi5jbGVhcigpKTtsZXQgbz0oXCJ0cmlnZ2VyLXByZXNzXCI9PT1yfHxcIml0ZW0tcHJlc3NcIj09PXIpJiYwPT09bi5kZXRhaWwmJm4/LmlzVHJ1c3RlZCxpPSFlJiYoXCJlc2NhcGUta2V5XCI9PT1yfHxudWxsPT1yKTtmdW5jdGlvbiBsKCl7YT8uKGUsbixyKSxLKGUpLEIocj8/bnVsbCksRC5jdXJyZW50PW4/P251bGx9XCJ0cmlnZ2VyLWhvdmVyXCI9PT1yPyhJKCEwKSxaLnN0YXJ0KDUwMCwoKT0+e0koITEpfSksZWguZmx1c2hTeW5jKGwpKTpsKCksXCJtZW51YmFyXCI9PT10LnR5cGUmJihcInRyaWdnZXItZm9jdXNcIj09PXJ8fFwiZm9jdXMtb3V0XCI9PT1yfHxcInRyaWdnZXItaG92ZXJcIj09PXJ8fFwibGlzdC1uYXZpZ2F0aW9uXCI9PT1yfHxcInNpYmxpbmctb3BlblwiPT09cik/XyhcImdyb3VwXCIpOm98fGk/XyhvP1wiY2xpY2tcIjpcImRpc21pc3NcIik6Xyh2b2lkIDApfSk7dy51c2VJbXBlcmF0aXZlSGFuZGxlKGYsKCk9Pih7dW5tb3VudDpldX0pLFtldV0pLFwiY29udGV4dC1tZW51XCI9PT10LnR5cGUmJihuPXQuY29udGV4dCksdy51c2VJbXBlcmF0aXZlSGFuZGxlKG4/LnBvc2l0aW9uZXJSZWYsKCk9PmIsW2JdKSx3LnVzZUltcGVyYXRpdmVIYW5kbGUobj8uYWN0aW9uc1JlZiwoKT0+KHtzZXRPcGVuOmVwfSksW2VwXSksdy51c2VFZmZlY3QoKCk9PntZfHxaLmNsZWFyKCl9LFtaLFldKTtsZXQgZW09YUIoe2VsZW1lbnRzOntyZWZlcmVuY2U6eSxmbG9hdGluZzpifSxvcGVuOlksb25PcGVuQ2hhbmdlKGUsdCxuKXtlcChlLHQsbEQobikpfX0pLGVnPWlPKGVtLHtlbmFibGVkOmsmJlcmJiFzJiZcImNvbnRleHQtbWVudVwiIT09dC50eXBlJiYoXCJtZW51YmFyXCIhPT10LnR5cGV8fHQuY29udGV4dC5oYXNTdWJtZW51T3BlbiYmIVkpLGhhbmRsZUNsb3NlOmlUKHtibG9ja1BvaW50ZXJFdmVudHM6ITB9KSxtb3VzZU9ubHk6ITAsbW92ZTpcIm1lbnVcIj09PXQudHlwZSxyZXN0TXM6dm9pZCAwPT09dC50eXBlfHxcIm1lbnVcIj09PXQudHlwZSYmVj9oOnZvaWQgMCxkZWxheTpcIm1lbnVcIj09PXQudHlwZT97b3BlbjpWP2g6MWUxMCxjbG9zZTptfTp7Y2xvc2U6bX19KSxleT1pRChlbSx7ZW5hYmxlZDohcyYmIVkmJlwibWVudWJhclwiPT09dC50eXBlJiZ0LmNvbnRleHQuaGFzU3VibWVudU9wZW4mJiFVfSksZXY9ZnVuY3Rpb24oZSx0PXt9KXtsZXR7b3BlbjpuLG9uT3BlbkNoYW5nZTpyLGRhdGFSZWY6b309ZSx7ZW5hYmxlZDphPSEwLGV2ZW50Omk9XCJjbGlja1wiLHRvZ2dsZTpsPSEwLGlnbm9yZU1vdXNlOnM9ITEsc3RpY2tJZk9wZW46Yz0hMH09dCx1PXcudXNlUmVmKHZvaWQgMCksZD1pUigpLGY9dy51c2VNZW1vKCgpPT4oe29uUG9pbnRlckRvd24oZSl7dS5jdXJyZW50PWUucG9pbnRlclR5cGV9LG9uTW91c2VEb3duKGUpe2xldCB0PXUuY3VycmVudCxhPWUubmF0aXZlRXZlbnQ7aWYoMCE9PWUuYnV0dG9ufHxcImNsaWNrXCI9PT1pfHxpcyh0LCEwKSYmcylyZXR1cm47bGV0IGY9by5jdXJyZW50Lm9wZW5FdmVudCxwPWY/LnR5cGUsaD0hKG4mJmwmJighZnx8IWN8fFwiY2xpY2tcIj09PXB8fFwibW91c2Vkb3duXCI9PT1wKSk7ZC5yZXF1ZXN0KCgpPT57cihoLGEsXCJjbGlja1wiKX0pfSxvbkNsaWNrKGUpe2xldCB0PXUuY3VycmVudDtpZihcIm1vdXNlZG93blwiPT09aSYmdCl7dS5jdXJyZW50PXZvaWQgMDtyZXR1cm59aWYoaXModCwhMCkmJnMpcmV0dXJuO2xldCBhPW8uY3VycmVudC5vcGVuRXZlbnQsZD1hPy50eXBlO3IoIShuJiZsJiYoIWF8fCFjfHxcImNsaWNrXCI9PT1kfHxcIm1vdXNlZG93blwiPT09ZHx8XCJrZXlkb3duXCI9PT1kfHxcImtleXVwXCI9PT1kKSksZS5uYXRpdmVFdmVudCxcImNsaWNrXCIpfSxvbktleURvd24oKXt1LmN1cnJlbnQ9dm9pZCAwfX0pLFtvLGkscyxyLG4sYyxsLGRdKTtyZXR1cm4gdy51c2VNZW1vKCgpPT5hP3tyZWZlcmVuY2U6Zn06aVosW2EsZl0pfShlbSx7ZW5hYmxlZDohcyYmXCJjb250ZXh0LW1lbnVcIiE9PXQudHlwZSxldmVudDpZJiZcIm1lbnViYXJcIj09PXQudHlwZT9cImNsaWNrXCI6XCJtb3VzZWRvd25cIix0b2dnbGU6IVd8fFwibWVudVwiIT09dC50eXBlLGlnbm9yZU1vdXNlOlcmJlwibWVudVwiPT09dC50eXBlLHN0aWNrSWZPcGVuOnZvaWQgMD09PXQudHlwZSYmUH0pLGViPWkkKGVtLHtlbmFibGVkOiFzLGJ1YmJsZXM6ZyYmXCJtZW51XCI9PT10LnR5cGUsb3V0c2lkZVByZXNzOigpPT5cImNvbnRleHQtbWVudVwiIT09dC50eXBlfHxELmN1cnJlbnQ/LnR5cGU9PT1cImNvbnRleHRtZW51XCJ8fFguY3VycmVudH0pLGVBPWZ1bmN0aW9uKGUsdD17fSl7bGV0e29wZW46bixlbGVtZW50czpyLGZsb2F0aW5nSWQ6b309ZSx7ZW5hYmxlZDphPSEwLHJvbGU6aT1cImRpYWxvZ1wifT10LGw9YXgoKSxzPXIuZG9tUmVmZXJlbmNlPy5pZHx8bCxjPXcudXNlTWVtbygoKT0+aV8oci5mbG9hdGluZyk/LmlkfHxvLFtyLmZsb2F0aW5nLG9dKSx1PWlXLmdldChpKT8/aSxkPW51bGwhPWFFKCksZj13LnVzZU1lbW8oKCk9PlwidG9vbHRpcFwiPT09dXx8XCJsYWJlbFwiPT09aT97W2BhcmlhLSR7XCJsYWJlbFwiPT09aT9cImxhYmVsbGVkYnlcIjpcImRlc2NyaWJlZGJ5XCJ9YF06bj9jOnZvaWQgMH06e1wiYXJpYS1leHBhbmRlZFwiOm4/XCJ0cnVlXCI6XCJmYWxzZVwiLFwiYXJpYS1oYXNwb3B1cFwiOlwiYWxlcnRkaWFsb2dcIj09PXU/XCJkaWFsb2dcIjp1LFwiYXJpYS1jb250cm9sc1wiOm4/Yzp2b2lkIDAsLi4uXCJsaXN0Ym94XCI9PT11JiZ7cm9sZTpcImNvbWJvYm94XCJ9LC4uLlwibWVudVwiPT09dSYme2lkOnN9LC4uLlwibWVudVwiPT09dSYmZCYme3JvbGU6XCJtZW51aXRlbVwifSwuLi5cInNlbGVjdFwiPT09aSYme1wiYXJpYS1hdXRvY29tcGxldGVcIjpcIm5vbmVcIn0sLi4uXCJjb21ib2JveFwiPT09aSYme1wiYXJpYS1hdXRvY29tcGxldGVcIjpcImxpc3RcIn19LFt1LGMsZCxuLHMsaV0pLHA9dy51c2VNZW1vKCgpPT57bGV0IGU9e2lkOmMsLi4udSYme3JvbGU6dX19O3JldHVyblwidG9vbHRpcFwiPT09dXx8XCJsYWJlbFwiPT09aT9lOnsuLi5lLC4uLlwibWVudVwiPT09dSYme1wiYXJpYS1sYWJlbGxlZGJ5XCI6c319fSxbdSxjLHMsaV0pLGg9dy51c2VDYWxsYmFjaygoe2FjdGl2ZTplLHNlbGVjdGVkOnR9KT0+e2xldCBuPXtyb2xlOlwib3B0aW9uXCIsLi4uZSYme2lkOmAke2N9LWZ1aS1vcHRpb25gfX07c3dpdGNoKGkpe2Nhc2VcInNlbGVjdFwiOmNhc2VcImNvbWJvYm94XCI6cmV0dXJuey4uLm4sXCJhcmlhLXNlbGVjdGVkXCI6dH19cmV0dXJue319LFtjLGldKTtyZXR1cm4gdy51c2VNZW1vKCgpPT5hP3tyZWZlcmVuY2U6ZixmbG9hdGluZzpwLGl0ZW06aH06e30sW2EsZixwLGhdKX0oZW0se3JvbGU6XCJtZW51XCJ9KSxleD1saigpLGV3PWZ1bmN0aW9uKGUsdCl7bGV0e29wZW46bixvbk9wZW5DaGFuZ2U6cixlbGVtZW50czpvLGZsb2F0aW5nSWQ6YX09ZSx7bGlzdFJlZjppLGFjdGl2ZUluZGV4Omwsb25OYXZpZ2F0ZTpzPSgpPT57fSxlbmFibGVkOmM9ITAsc2VsZWN0ZWRJbmRleDp1PW51bGwsYWxsb3dFc2NhcGU6ZD0hMSxsb29wOmY9ITEsbmVzdGVkOnA9ITEscnRsOmg9ITEsdmlydHVhbDptPSExLGZvY3VzSXRlbU9uT3BlbjpnPVwiYXV0b1wiLGZvY3VzSXRlbU9uSG92ZXI6eT0hMCxvcGVuT25BcnJvd0tleURvd246dj0hMCxkaXNhYmxlZEluZGljZXM6YixvcmllbnRhdGlvbjpBPVwidmVydGljYWxcIixwYXJlbnRPcmllbnRhdGlvbjp4LGNvbHM6Qz0xLHNjcm9sbEl0ZW1JbnRvVmlldzpfPSEwLHZpcnR1YWxJdGVtUmVmOmssaXRlbVNpemVzOkUsZGVuc2U6aj0hMX09dCxTPWEyKGlfKG8uZmxvYXRpbmcpKSxPPWFFKCksQj1haigpO2FDKCgpPT57ZS5kYXRhUmVmLmN1cnJlbnQub3JpZW50YXRpb249QX0sW2UsQV0pO2xldCBQPWlDKG8uZG9tUmVmZXJlbmNlKSxJPXcudXNlUmVmKGcpLFQ9dy51c2VSZWYodT8/LTEpLHo9dy51c2VSZWYobnVsbCksRD13LnVzZVJlZighMCksTD1haCgoKT0+e3MoLTE9PT1ULmN1cnJlbnQ/bnVsbDpULmN1cnJlbnQpfSksTj13LnVzZVJlZihMKSxSPXcudXNlUmVmKCEhby5mbG9hdGluZyksTT13LnVzZVJlZihuKSxaPXcudXNlUmVmKCExKSxVPXcudXNlUmVmKCExKSxGPWEyKGIpLHE9YTIobiksSD1hMihfKSxWPWEyKHUpLFskLFddPXcudXNlU3RhdGUoKSxZPWFoKCgpPT57ZnVuY3Rpb24gZShlKXttPyhlLmlkPy5lbmRzV2l0aChcIi1mdWktb3B0aW9uXCIpJiYoZS5pZD1gJHthfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnNsaWNlKDIsMTApfWApLFcoZS5pZCksQj8uZXZlbnRzLmVtaXQoXCJ2aXJ0dWFsZm9jdXNcIixlKSxrJiYoay5jdXJyZW50PWUpKTpsaChlLHtzeW5jOlouY3VycmVudCxwcmV2ZW50U2Nyb2xsOiEwfSl9bGV0IHQ9aS5jdXJyZW50W1QuY3VycmVudF0sbj1VLmN1cnJlbnQ7dCYmZSh0KSwoWi5jdXJyZW50P2U9PmUoKTpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKCgpPT57bGV0IHI9aS5jdXJyZW50W1QuY3VycmVudF18fHQ7aWYoIXIpcmV0dXJuO3R8fGUocik7bGV0IG89SC5jdXJyZW50O28mJlgmJihufHwhRC5jdXJyZW50KSYmci5zY3JvbGxJbnRvVmlldz8uKFwiYm9vbGVhblwiPT10eXBlb2Ygbz97YmxvY2s6XCJuZWFyZXN0XCIsaW5saW5lOlwibmVhcmVzdFwifTpvKX0pfSk7YUMoKCk9PntjJiYobiYmby5mbG9hdGluZz9JLmN1cnJlbnQmJm51bGwhPXUmJihVLmN1cnJlbnQ9ITAsVC5jdXJyZW50PXUsTCgpKTpSLmN1cnJlbnQmJihULmN1cnJlbnQ9LTEsTi5jdXJyZW50KCkpKX0sW2MsbixvLmZsb2F0aW5nLHUsTF0pLGFDKCgpPT57aWYoYyYmbiYmby5mbG9hdGluZylpZihudWxsPT1sKXtpZihaLmN1cnJlbnQ9ITEsbnVsbCE9Vi5jdXJyZW50KXJldHVybjtpZihSLmN1cnJlbnQmJihULmN1cnJlbnQ9LTEsWSgpKSwoIU0uY3VycmVudHx8IVIuY3VycmVudCkmJkkuY3VycmVudCYmKG51bGwhPXouY3VycmVudHx8ITA9PT1JLmN1cnJlbnQmJm51bGw9PXouY3VycmVudCkpe2xldCBlPTAsdD0oKT0+e251bGw9PWkuY3VycmVudFswXT8oZTwyJiYoZT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWU6cXVldWVNaWNyb3Rhc2spKHQpLGUrPTEpOihULmN1cnJlbnQ9bnVsbD09ei5jdXJyZW50fHxseSh6LmN1cnJlbnQsQSxoKXx8cD9sYyhpLEYuY3VycmVudCk6bHUoaSxGLmN1cnJlbnQpLHouY3VycmVudD1udWxsLEwoKSl9O3QoKX19ZWxzZSBscyhpLGwpfHwoVC5jdXJyZW50PWwsWSgpLFUuY3VycmVudD0hMSl9LFtjLG4sby5mbG9hdGluZyxsLFYscCxpLEEsaCxMLFksRl0pLGFDKCgpPT57aWYoIWN8fG8uZmxvYXRpbmd8fCFCfHxtfHwhUi5jdXJyZW50KXJldHVybjtsZXQgZT1CLm5vZGVzUmVmLmN1cnJlbnQsdD1lLmZpbmQoZT0+ZS5pZD09PU8pPy5jb250ZXh0Py5lbGVtZW50cy5mbG9hdGluZyxuPWl5KGl4KG8uZmxvYXRpbmcpKSxyPWUuc29tZShlPT5lLmNvbnRleHQmJml2KGUuY29udGV4dC5lbGVtZW50cy5mbG9hdGluZyxuKSk7dCYmIXImJkQuY3VycmVudCYmdC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfSxbYyxvLmZsb2F0aW5nLEIsTyxtXSksYUMoKCk9PntOLmN1cnJlbnQ9TCxNLmN1cnJlbnQ9bixSLmN1cnJlbnQ9ISFvLmZsb2F0aW5nfSksYUMoKCk9PntufHwoei5jdXJyZW50PW51bGwsSS5jdXJyZW50PWcpfSxbbixnXSk7bGV0IEs9bnVsbCE9bCxYPXcudXNlTWVtbygoKT0+e2Z1bmN0aW9uIGUoZSl7aWYoIXEuY3VycmVudClyZXR1cm47bGV0IHQ9aS5jdXJyZW50LmluZGV4T2YoZSk7LTEhPT10JiZULmN1cnJlbnQhPT10JiYoVC5jdXJyZW50PXQsTCgpKX1yZXR1cm57b25Gb2N1cyh7Y3VycmVudFRhcmdldDp0fSl7Wi5jdXJyZW50PSEwLGUodCl9LG9uQ2xpY2s6KHtjdXJyZW50VGFyZ2V0OmV9KT0+ZS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLG9uTW91c2VNb3ZlKHtjdXJyZW50VGFyZ2V0OnR9KXtaLmN1cnJlbnQ9ITAsVS5jdXJyZW50PSExLHkmJmUodCl9LG9uUG9pbnRlckxlYXZlKHtwb2ludGVyVHlwZTplfSl7RC5jdXJyZW50JiZcInRvdWNoXCIhPT1lJiYoWi5jdXJyZW50PSEwLHkmJihULmN1cnJlbnQ9LTEsTCgpLG18fFMuY3VycmVudD8uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSkpfX19LFtxLFMseSxpLEwsbV0pLEc9dy51c2VDYWxsYmFjaygoKT0+eD8/Qj8ubm9kZXNSZWYuY3VycmVudC5maW5kKGU9PmUuaWQ9PT1PKT8uY29udGV4dD8uZGF0YVJlZj8uY3VycmVudC5vcmllbnRhdGlvbixbTyxCLHhdKSxRPWFoKGU9Pnt2YXIgdCxhLGwscyxjO2lmKEQuY3VycmVudD0hMSxaLmN1cnJlbnQ9ITAsMjI5PT09ZS53aGljaHx8IXEuY3VycmVudCYmZS5jdXJyZW50VGFyZ2V0PT09Uy5jdXJyZW50KXJldHVybjtpZihwJiYodD1lLmtleSxhPUEsbD1oLHM9QyxcImJvdGhcIj09PWF8fFwiaG9yaXpvbnRhbFwiPT09YSYmcyYmcz4xP1wiRXNjYXBlXCI9PT10OmxtKGEsbD90PT09aWg6dD09PWlwLHQ9PT1pbSkpKXtsZyhlLmtleSxHKCkpfHxpYShlKSxyKCExLGUubmF0aXZlRXZlbnQsXCJsaXN0LW5hdmlnYXRpb25cIiksYU4oby5kb21SZWZlcmVuY2UpJiYobT9CPy5ldmVudHMuZW1pdChcInZpcnR1YWxmb2N1c1wiLG8uZG9tUmVmZXJlbmNlKTpvLmRvbVJlZmVyZW5jZS5mb2N1cygpKTtyZXR1cm59bGV0IHU9VC5jdXJyZW50LGc9bGMoaSxiKSx5PWx1KGksYik7aWYoUHx8KFwiSG9tZVwiPT09ZS5rZXkmJihpYShlKSxULmN1cnJlbnQ9ZyxMKCkpLFwiRW5kXCI9PT1lLmtleSYmKGlhKGUpLFQuY3VycmVudD15LEwoKSkpLEM+MSl7bGV0IHQ9RXx8QXJyYXkuZnJvbSh7bGVuZ3RoOmkuY3VycmVudC5sZW5ndGh9LCgpPT4oe3dpZHRoOjEsaGVpZ2h0OjF9KSksbj1mdW5jdGlvbihlLHQsbil7bGV0IHI9W10sbz0wO3JldHVybiBlLmZvckVhY2goKHt3aWR0aDplLGhlaWdodDphfSxpKT0+e2xldCBsPSExO2ZvcihuJiYobz0wKTshbDspe2xldCBuPVtdO2ZvcihsZXQgcj0wO3I8ZTtyKz0xKWZvcihsZXQgZT0wO2U8YTtlKz0xKW4ucHVzaChvK3IrZSp0KTtvJXQrZTw9dCYmbi5ldmVyeShlPT5udWxsPT1yW2VdKT8obi5mb3JFYWNoKGU9PntyW2VdPWl9KSxsPSEwKTpvKz0xfX0pLFsuLi5yXX0odCxDLGopLHI9bi5maW5kSW5kZXgoZT0+bnVsbCE9ZSYmIWxmKGksZSxiKSksbz1uLnJlZHVjZSgoZSx0LG4pPT5udWxsPT10fHxsZihpLHQsYik/ZTpuLC0xKSxhPW5bZnVuY3Rpb24oZSx7ZXZlbnQ6dCxvcmllbnRhdGlvbjpuLGxvb3A6cixydGw6byxjb2xzOmEsZGlzYWJsZWRJbmRpY2VzOmksbWluSW5kZXg6bCxtYXhJbmRleDpzLHByZXZJbmRleDpjLHN0b3BFdmVudDp1PSExfSl7bGV0IGQ9YztpZih0LmtleT09PWltKXtpZih1JiZpYSh0KSwtMT09PWMpZD1zO2Vsc2UgaWYoZD1sZChlLHtzdGFydGluZ0luZGV4OmQsYW1vdW50OmEsZGVjcmVtZW50OiEwLGRpc2FibGVkSW5kaWNlczppfSksciYmKGMtYTxsfHxkPDApKXtsZXQgZT1jJWEsdD1zJWEsbj1zLSh0LWUpO2Q9dD09PWU/czp0PmU/bjpuLWF9bHMoZSxkKSYmKGQ9Yyl9aWYodC5rZXk9PT1pZyYmKHUmJmlhKHQpLC0xPT09Yz9kPWw6KGQ9bGQoZSx7c3RhcnRpbmdJbmRleDpjLGFtb3VudDphLGRpc2FibGVkSW5kaWNlczppfSksciYmYythPnMmJihkPWxkKGUse3N0YXJ0aW5nSW5kZXg6YyVhLWEsYW1vdW50OmEsZGlzYWJsZWRJbmRpY2VzOml9KSkpLGxzKGUsZCkmJihkPWMpKSxcImJvdGhcIj09PW4pe2xldCBuPWlRKGMvYSk7dC5rZXk9PT0obz9pcDppaCkmJih1JiZpYSh0KSxjJWEhPWEtMT8oZD1sZChlLHtzdGFydGluZ0luZGV4OmMsZGlzYWJsZWRJbmRpY2VzOml9KSxyJiZsbChkLGEsbikmJihkPWxkKGUse3N0YXJ0aW5nSW5kZXg6Yy1jJWEtMSxkaXNhYmxlZEluZGljZXM6aX0pKSk6ciYmKGQ9bGQoZSx7c3RhcnRpbmdJbmRleDpjLWMlYS0xLGRpc2FibGVkSW5kaWNlczppfSkpLGxsKGQsYSxuKSYmKGQ9YykpLHQua2V5PT09KG8/aWg6aXApJiYodSYmaWEodCksYyVhIT0wPyhkPWxkKGUse3N0YXJ0aW5nSW5kZXg6YyxkZWNyZW1lbnQ6ITAsZGlzYWJsZWRJbmRpY2VzOml9KSxyJiZsbChkLGEsbikmJihkPWxkKGUse3N0YXJ0aW5nSW5kZXg6YysoYS1jJWEpLGRlY3JlbWVudDohMCxkaXNhYmxlZEluZGljZXM6aX0pKSk6ciYmKGQ9bGQoZSx7c3RhcnRpbmdJbmRleDpjKyhhLWMlYSksZGVjcmVtZW50OiEwLGRpc2FibGVkSW5kaWNlczppfSkpLGxsKGQsYSxuKSYmKGQ9YykpO2xldCBsPWlRKHMvYSk9PT1uO2xzKGUsZCkmJihkPXImJmw/dC5rZXk9PT0obz9paDppcCk/czpsZChlLHtzdGFydGluZ0luZGV4OmMtYyVhLTEsZGlzYWJsZWRJbmRpY2VzOml9KTpjKX1yZXR1cm4gZH0oe2N1cnJlbnQ6bi5tYXAoZT0+bnVsbCE9ZT9pLmN1cnJlbnRbZV06bnVsbCl9LHtldmVudDplLG9yaWVudGF0aW9uOkEsbG9vcDpmLHJ0bDpoLGNvbHM6QyxkaXNhYmxlZEluZGljZXM6KGM9Wy4uLihcImZ1bmN0aW9uXCIhPXR5cGVvZiBiP2I6bnVsbCl8fGkuY3VycmVudC5tYXAoKGUsdCk9PmxmKGksdCxiKT90OnZvaWQgMCksdm9pZCAwXSxuLmZsYXRNYXAoKGUsdCk9PmMuaW5jbHVkZXMoZSk/W3RdOltdKSksbWluSW5kZXg6cixtYXhJbmRleDpvLHByZXZJbmRleDpmdW5jdGlvbihlLHQsbixyLG8pe2lmKC0xPT09ZSlyZXR1cm4gLTE7bGV0IGE9bi5pbmRleE9mKGUpLGk9dFtlXTtzd2l0Y2gobyl7Y2FzZVwidGxcIjpyZXR1cm4gYTtjYXNlXCJ0clwiOmlmKCFpKXJldHVybiBhO3JldHVybiBhK2kud2lkdGgtMTtjYXNlXCJibFwiOmlmKCFpKXJldHVybiBhO3JldHVybiBhKyhpLmhlaWdodC0xKSpyO2Nhc2VcImJyXCI6cmV0dXJuIG4ubGFzdEluZGV4T2YoZSk7ZGVmYXVsdDpyZXR1cm4gLTF9fShULmN1cnJlbnQ+eT9nOlQuY3VycmVudCx0LG4sQyxlLmtleT09PWlnP1wiYmxcIjplLmtleT09PShoP2lwOmloKT9cInRyXCI6XCJ0bFwiKSxzdG9wRXZlbnQ6ITB9KV07aWYobnVsbCE9YSYmKFQuY3VycmVudD1hLEwoKSksXCJib3RoXCI9PT1BKXJldHVybn1pZihsZyhlLmtleSxBKSl7aWYoaWEoZSksbiYmIW0mJml5KGUuY3VycmVudFRhcmdldC5vd25lckRvY3VtZW50KT09PWUuY3VycmVudFRhcmdldCl7VC5jdXJyZW50PWx5KGUua2V5LEEsaCk/Zzp5LEwoKTtyZXR1cm59bHkoZS5rZXksQSxoKT9mP1QuY3VycmVudD11Pj15P2QmJnUhPT1pLmN1cnJlbnQubGVuZ3RoPy0xOmc6bGQoaSx7c3RhcnRpbmdJbmRleDp1LGRpc2FibGVkSW5kaWNlczpifSk6VC5jdXJyZW50PU1hdGgubWluKHksbGQoaSx7c3RhcnRpbmdJbmRleDp1LGRpc2FibGVkSW5kaWNlczpifSkpOmY/VC5jdXJyZW50PXU8PWc/ZCYmLTEhPT11P2kuY3VycmVudC5sZW5ndGg6eTpsZChpLHtzdGFydGluZ0luZGV4OnUsZGVjcmVtZW50OiEwLGRpc2FibGVkSW5kaWNlczpifSk6VC5jdXJyZW50PU1hdGgubWF4KGcsbGQoaSx7c3RhcnRpbmdJbmRleDp1LGRlY3JlbWVudDohMCxkaXNhYmxlZEluZGljZXM6Yn0pKSxscyhpLFQuY3VycmVudCkmJihULmN1cnJlbnQ9LTEpLEwoKX19KSxKPXcudXNlTWVtbygoKT0+bSYmbiYmSyYme1wiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6JH0sW20sbixLLCRdKSxlZT13LnVzZU1lbW8oKCk9Pih7XCJhcmlhLW9yaWVudGF0aW9uXCI6XCJib3RoXCI9PT1BP3ZvaWQgMDpBLC4uLiFQP0o6e30sb25LZXlEb3duKGUpe2lmKFwiVGFiXCI9PT1lLmtleSYmZS5zaGlmdEtleSYmbiYmIW0pe2lhKGUpLHIoITEsZS5uYXRpdmVFdmVudCxcImxpc3QtbmF2aWdhdGlvblwiKSxhTihvLmRvbVJlZmVyZW5jZSkmJm8uZG9tUmVmZXJlbmNlLmZvY3VzKCk7cmV0dXJufVEoZSl9LG9uUG9pbnRlck1vdmUoKXtELmN1cnJlbnQ9ITB9fSksW0osUSxBLFAscixuLG0sby5kb21SZWZlcmVuY2VdKSxldD13LnVzZU1lbW8oKCk9PntmdW5jdGlvbiBlKGUpe1wiYXV0b1wiPT09ZyYmaWkoZS5uYXRpdmVFdmVudCkmJihJLmN1cnJlbnQ9ITApfWZ1bmN0aW9uIHQoZSl7SS5jdXJyZW50PWcsXCJhdXRvXCI9PT1nJiZpbChlLm5hdGl2ZUV2ZW50KSYmKEkuY3VycmVudD0hMCl9cmV0dXJuey4uLkosb25LZXlEb3duKGUpe3ZhciB0LG87RC5jdXJyZW50PSExO2xldCBhPWUua2V5LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSxsPSh0PWUua2V5LG89RygpLGxtKG8saD90PT09aXA6dD09PWloLHQ9PT1pZykpLHM9bGcoZS5rZXksQSksYz0ocD9sOnMpfHxcIkVudGVyXCI9PT1lLmtleXx8XCJcIj09PWUua2V5LnRyaW0oKTtpZihtJiZuKXJldHVybiBRKGUpO2lmKG58fHZ8fCFhKXtpZihjKXtsZXQgdD1sZyhlLmtleSxHKCkpO3ouY3VycmVudD1wJiZ0P251bGw6ZS5rZXl9aWYocCl7bCYmKGlhKGUpLG4/KFQuY3VycmVudD1sYyhpLEYuY3VycmVudCksTCgpKTpyKCEwLGUubmF0aXZlRXZlbnQsXCJsaXN0LW5hdmlnYXRpb25cIikpO3JldHVybn1zJiYobnVsbCE9dSYmKFQuY3VycmVudD11KSxpYShlKSwhbiYmdj9yKCEwLGUubmF0aXZlRXZlbnQsXCJsaXN0LW5hdmlnYXRpb25cIik6UShlKSxuJiZMKCkpfX0sb25Gb2N1cygpe24mJiFtJiYoVC5jdXJyZW50PS0xLEwoKSl9LG9uUG9pbnRlckRvd246dCxvblBvaW50ZXJFbnRlcjp0LG9uTW91c2VEb3duOmUsb25DbGljazplfX0sW0osUSxGLGcsaSxwLEwscixuLHYsQSxHLGgsdSxtXSk7cmV0dXJuIHcudXNlTWVtbygoKT0+Yz97cmVmZXJlbmNlOmV0LGZsb2F0aW5nOmVlLGl0ZW06WH06e30sW2MsZXQsZWUsWF0pfShlbSx7ZW5hYmxlZDohcyxsaXN0UmVmOlIsYWN0aXZlSW5kZXg6aixuZXN0ZWQ6dm9pZCAwIT09dC50eXBlLGxvb3A6dSxvcmllbnRhdGlvbjpkLHBhcmVudE9yaWVudGF0aW9uOlwibWVudWJhclwiPT09dC50eXBlP3QuY29udGV4dC5vcmllbnRhdGlvbjp2b2lkIDAscnRsOlwicnRsXCI9PT1leCxkaXNhYmxlZEluZGljZXM6bFcsb25OYXZpZ2F0ZTpTLG9wZW5PbkFycm93S2V5RG93bjpcImNvbnRleHQtbWVudVwiIT09dC50eXBlfSksZUM9dy51c2VSZWYoITEpLGVfPWZ1bmN0aW9uKGUsdCl7bGV0e29wZW46bixkYXRhUmVmOnJ9PWUse2xpc3RSZWY6byxhY3RpdmVJbmRleDphLG9uTWF0Y2g6aSxvblR5cGluZ0NoYW5nZTpsLGVuYWJsZWQ6cz0hMCxmaW5kTWF0Y2g6Yz1udWxsLHJlc2V0TXM6dT03NTAsaWdub3JlS2V5czpkPVtdLHNlbGVjdGVkSW5kZXg6Zj1udWxsfT10LHA9YWQoKSxoPXcudXNlUmVmKFwiXCIpLG09dy51c2VSZWYoZj8/YT8/LTEpLGc9dy51c2VSZWYobnVsbCkseT1haChpKSx2PWFoKGwpLGI9YTIoYyksQT1hMihkKTthQygoKT0+e24mJihwLmNsZWFyKCksZy5jdXJyZW50PW51bGwsaC5jdXJyZW50PVwiXCIpfSxbbixwXSksYUMoKCk9PntuJiZcIlwiPT09aC5jdXJyZW50JiYobS5jdXJyZW50PWY/P2E/Py0xKX0sW24sZixhXSk7bGV0IHg9YWgoZT0+e2U/ci5jdXJyZW50LnR5cGluZ3x8KHIuY3VycmVudC50eXBpbmc9ZSx2KGUpKTpyLmN1cnJlbnQudHlwaW5nJiYoci5jdXJyZW50LnR5cGluZz1lLHYoZSkpfSksQz1haChlPT57ZnVuY3Rpb24gdChlLHQsbil7bGV0IHI9Yi5jdXJyZW50P2IuY3VycmVudCh0LG4pOnQuZmluZChlPT5lPy50b0xvY2FsZUxvd2VyQ2FzZSgpLmluZGV4T2Yobi50b0xvY2FsZUxvd2VyQ2FzZSgpKT09PTApO3JldHVybiByP2UuaW5kZXhPZihyKTotMX1sZXQgcj1vLmN1cnJlbnQ7aWYoaC5jdXJyZW50Lmxlbmd0aD4wJiZcIiBcIiE9PWguY3VycmVudFswXSYmKC0xPT09dChyLHIsaC5jdXJyZW50KT94KCExKTpcIiBcIj09PWUua2V5JiZpYShlKSksbnVsbD09cnx8QS5jdXJyZW50LmluY2x1ZGVzKGUua2V5KXx8MSE9PWUua2V5Lmxlbmd0aHx8ZS5jdHJsS2V5fHxlLm1ldGFLZXl8fGUuYWx0S2V5KXJldHVybjtuJiZcIiBcIiE9PWUua2V5JiYoaWEoZSkseCghMCkpLHIuZXZlcnkoZT0+IWV8fGVbMF0/LnRvTG9jYWxlTG93ZXJDYXNlKCkhPT1lWzFdPy50b0xvY2FsZUxvd2VyQ2FzZSgpKSYmaC5jdXJyZW50PT09ZS5rZXkmJihoLmN1cnJlbnQ9XCJcIixtLmN1cnJlbnQ9Zy5jdXJyZW50KSxoLmN1cnJlbnQrPWUua2V5LHAuc3RhcnQodSwoKT0+e2guY3VycmVudD1cIlwiLG0uY3VycmVudD1nLmN1cnJlbnQseCghMSl9KTtsZXQgYT1tLmN1cnJlbnQsaT10KHIsWy4uLnIuc2xpY2UoKGF8fDApKzEpLC4uLnIuc2xpY2UoMCwoYXx8MCkrMSldLGguY3VycmVudCk7LTEhPT1pPyh5KGkpLGcuY3VycmVudD1pKTpcIiBcIiE9PWUua2V5JiYoaC5jdXJyZW50PVwiXCIseCghMSkpfSksXz13LnVzZU1lbW8oKCk9Pih7b25LZXlEb3duOkN9KSxbQ10pLGs9dy51c2VNZW1vKCgpPT4oe29uS2V5RG93bjpDLG9uS2V5VXAoZSl7XCIgXCI9PT1lLmtleSYmeCghMSl9fSksW0MseF0pO3JldHVybiB3LnVzZU1lbW8oKCk9PnM/e3JlZmVyZW5jZTpfLGZsb2F0aW5nOmt9Ont9LFtzLF8sa10pfShlbSx7bGlzdFJlZjpNLGFjdGl2ZUluZGV4OmoscmVzZXRNczo1MDAsb25NYXRjaDplPT57WSYmZSE9PWomJlMoZSl9LG9uVHlwaW5nQ2hhbmdlOncudXNlQ2FsbGJhY2soZT0+e2VDLmN1cnJlbnQ9ZX0sW10pfSkse2dldFJlZmVyZW5jZVByb3BzOmVrLGdldEZsb2F0aW5nUHJvcHM6ZUUsZ2V0SXRlbVByb3BzOmVqfT1sdihbZWcsZXYsZWIsZXksZUEsZXcsZV9dKSxlUz1mdW5jdGlvbihlKXtsZXR7ZW5hYmxlZDp0PSEwLG1vdXNlRG93bkFjdGlvbjpuLG9wZW46cn09ZSxvPXcudXNlUmVmKCExKTtyZXR1cm4gdy51c2VNZW1vKCgpPT50P3tvbk1vdXNlRG93bjplPT57KFwib3BlblwiPT09biYmIXJ8fFwiY2xvc2VcIj09PW4mJnIpJiYoby5jdXJyZW50PSEwLGxTKGUuY3VycmVudFRhcmdldCkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKCk9PntvLmN1cnJlbnQ9ITF9LHtvbmNlOiEwfSkpfSxvbkNsaWNrOmU9PntvLmN1cnJlbnQmJihvLmN1cnJlbnQ9ITEsZS5wcmV2ZW50QmFzZVVJSGFuZGxlcigpKX19OmlaLFt0LG4scl0pfSh7b3BlbjpZLGVuYWJsZWQ6XCJtZW51YmFyXCI9PT10LnR5cGUsbW91c2VEb3duQWN0aW9uOlwib3BlblwifSksZU89dy51c2VNZW1vKCgpPT57bGV0IGU9bFUoZWsoKSx7b25Nb3VzZUVudGVyKCl7RSghMCl9LG9uTW91c2VNb3ZlKCl7JCghMCl9fSxlcixlUyk7cmV0dXJuIGRlbGV0ZSBlLnJvbGUsZX0sW2VrLGVTLCQsZXJdKSxlQj13LnVzZU1lbW8oKCk9PmVFKHtvbk1vdXNlRW50ZXIoKXtXJiZcIm1lbnVcIiE9PXQudHlwZXx8RSghMSl9LG9uTW91c2VNb3ZlKCl7JCghMCl9LG9uQ2xpY2soKXtXJiZFKCExKX19KSxbZUUsVyx0LnR5cGUsJF0pLGVQPXcudXNlTWVtbygoKT0+ZWooKSxbZWpdKSxlST13LnVzZU1lbW8oKCk9Pih7YWN0aXZlSW5kZXg6aixzZXRBY3RpdmVJbmRleDpTLGFsbG93TW91c2VVcFRyaWdnZXJSZWY6dC50eXBlP3QuY29udGV4dC5hbGxvd01vdXNlVXBUcmlnZ2VyUmVmOmxZLGZsb2F0aW5nUm9vdENvbnRleHQ6ZW0saXRlbVByb3BzOmVQLHBvcHVwUHJvcHM6ZUIsdHJpZ2dlclByb3BzOmVPLGl0ZW1Eb21FbGVtZW50czpSLGl0ZW1MYWJlbHM6TSxtb3VudGVkOkosb3BlbjpZLHBvcHVwUmVmOkwscG9zaXRpb25lclJlZjpOLHNldE9wZW46ZXAsc2V0UG9zaXRpb25lckVsZW1lbnQ6USx0cmlnZ2VyRWxlbWVudDp5LHNldFRyaWdnZXJFbGVtZW50OnYsdHJhbnNpdGlvblN0YXR1czpldCxsYXN0T3BlbkNoYW5nZVJlYXNvbjpPLGluc3RhbnRUeXBlOkMsb25PcGVuQ2hhbmdlQ29tcGxldGU6aSxzZXRIb3ZlckVuYWJsZWQ6RSx0eXBpbmdSZWY6ZUMsbW9kYWw6SCxkaXNhYmxlZDpzLHBhcmVudDp0LHJvb3RJZDpxLGFsbG93TW91c2VFbnRlcjpWLHNldEFsbG93TW91c2VFbnRlcjokfSksW2osZW0sZVAsZUIsZU8sUixNLEosWSxOLGVwLGV0LHksUSxPLEMsaSxILHMsdCxxLFYsJF0pLGVUPSgwLEEuanN4KShseC5Qcm92aWRlcix7dmFsdWU6ZUksY2hpbGRyZW46cn0pO3JldHVybiB2b2lkIDA9PT10LnR5cGV8fFwiY29udGV4dC1tZW51XCI9PT10LnR5cGU/KDAsQS5qc3gpKGFPLHtjaGlsZHJlbjplVH0pOmVUfTtmdW5jdGlvbiBsWChlLHQsbixyKXt2YXIgbyxhLGksbCxzO2xldCBjPWFsKGxHKS5jdXJyZW50O3JldHVybiBvPWMsYT1lLGk9dCxsPW4scz1yLChvLnJlZnNbMF0hPT1hfHxvLnJlZnNbMV0hPT1pfHxvLnJlZnNbMl0hPT1sfHxvLnJlZnNbM10hPT1zKSYmbFEoYyxbZSx0LG4scl0pLGMuY2FsbGJhY2t9ZnVuY3Rpb24gbEcoKXtyZXR1cm57Y2FsbGJhY2s6bnVsbCxjbGVhbnVwOm51bGwscmVmczpbXX19ZnVuY3Rpb24gbFEoZSx0KXtpZihlLnJlZnM9dCx0LmV2ZXJ5KGU9Pm51bGw9PWUpKXtlLmNhbGxiYWNrPW51bGw7cmV0dXJufWUuY2FsbGJhY2s9bj0+e2lmKGUuY2xlYW51cCYmKGUuY2xlYW51cCgpLGUuY2xlYW51cD1udWxsKSxudWxsIT1uKXtsZXQgcj1BcnJheSh0Lmxlbmd0aCkuZmlsbChudWxsKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrPTEpe2xldCBvPXRbZV07aWYobnVsbCE9bylzd2l0Y2godHlwZW9mIG8pe2Nhc2VcImZ1bmN0aW9uXCI6e2xldCB0PW8obik7XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHJbZV09dCk7YnJlYWt9Y2FzZVwib2JqZWN0XCI6by5jdXJyZW50PW59fWUuY2xlYW51cD0oKT0+e2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSs9MSl7bGV0IG49dFtlXTtpZihudWxsIT1uKXN3aXRjaCh0eXBlb2Ygbil7Y2FzZVwiZnVuY3Rpb25cIjp7bGV0IHQ9cltlXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QoKTpuKG51bGwpO2JyZWFrfWNhc2VcIm9iamVjdFwiOm4uY3VycmVudD1udWxsfX19fX19bGV0IGxKPWZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0aW5nU3R5bGU9XCJkYXRhLXN0YXJ0aW5nLXN0eWxlXCIsZS5lbmRpbmdTdHlsZT1cImRhdGEtZW5kaW5nLXN0eWxlXCIsZX0oe30pLGwwPXtbbEouc3RhcnRpbmdTdHlsZV06XCJcIn0sbDE9e1tsSi5lbmRpbmdTdHlsZV06XCJcIn0sbDI9e3RyYW5zaXRpb25TdGF0dXM6ZT0+XCJzdGFydGluZ1wiPT09ZT9sMDpcImVuZGluZ1wiPT09ZT9sMTpudWxsfSxsND1mdW5jdGlvbihlKXtyZXR1cm4gZS5vcGVuPVwiZGF0YS1vcGVuXCIsZS5jbG9zZWQ9XCJkYXRhLWNsb3NlZFwiLGVbZS5zdGFydGluZ1N0eWxlPWxKLnN0YXJ0aW5nU3R5bGVdPVwic3RhcnRpbmdTdHlsZVwiLGVbZS5lbmRpbmdTdHlsZT1sSi5lbmRpbmdTdHlsZV09XCJlbmRpbmdTdHlsZVwiLGUuYW5jaG9ySGlkZGVuPVwiZGF0YS1hbmNob3ItaGlkZGVuXCIsZX0oe30pLGw1PWZ1bmN0aW9uKGUpe3JldHVybiBlLnBvcHVwT3Blbj1cImRhdGEtcG9wdXAtb3BlblwiLGUucHJlc3NlZD1cImRhdGEtcHJlc3NlZFwiLGV9KHt9KSxsMz17W2w1LnBvcHVwT3Blbl06XCJcIn0sbDY9e1tsNS5wb3B1cE9wZW5dOlwiXCIsW2w1LnByZXNzZWRdOlwiXCJ9LGw5PXtbbDQub3Blbl06XCJcIn0sbDg9e1tsNC5jbG9zZWRdOlwiXCJ9LGw3PXtbbDQuYW5jaG9ySGlkZGVuXTpcIlwifSxzZT17b3BlbjplPT5lP2wzOm51bGx9LHN0PXtvcGVuOmU9PmU/bDY6bnVsbH0sc249e29wZW46ZT0+ZT9sOTpsOCxhbmNob3JIaWRkZW46ZT0+ZT9sNzpudWxsfSxzcj1wYXJzZUludCh3LnZlcnNpb24sMTApO2Z1bmN0aW9uIHNvKGUsdCxuPXt9KXtsZXQgcj10LnJlbmRlcixvPWZ1bmN0aW9uKGUsdD17fSl7dmFyIG4scjtsZXQgbyx7Y2xhc3NOYW1lOmEscmVuZGVyOml9PWUse3N0YXRlOmw9aVoscmVmOnMscHJvcHM6YyxkaXNhYmxlU3R5bGVIb29rczp1LGN1c3RvbVN0eWxlSG9va01hcHBpbmc6ZCxlbmFibGVkOmY9ITB9PXQscD1mPyhuPWEscj1sLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bihyKTpuKTp2b2lkIDA7ITAhPT11JiYobz13LnVzZU1lbW8oKCk9PmY/ZnVuY3Rpb24oZSx0KXtsZXQgbj17fTtmb3IobGV0IHIgaW4gZSl7bGV0IG89ZVtyXTtpZih0Py5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IGU9dFtyXShvKTtudWxsIT1lJiZPYmplY3QuYXNzaWduKG4sZSk7Y29udGludWV9ITA9PT1vP25bYGRhdGEtJHtyLnRvTG93ZXJDYXNlKCl9YF09XCJcIjpvJiYobltgZGF0YS0ke3IudG9Mb3dlckNhc2UoKX1gXT1vLnRvU3RyaW5nKCkpfXJldHVybiBufShsLGQpOmlaLFtsLGQsZl0pKTtsZXQgaD1mP2xNKG8sQXJyYXkuaXNBcnJheShjKT9mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGxaO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gbEgoZVswXSxsWik7bGV0IHQ9ey4uLmxIKGVbMF0sbFopfTtmb3IobGV0IG49MTtuPGUubGVuZ3RoO24rPTEpdD1sRih0LGVbbl0pO3JldHVybiB0fShjKTpjKT8/aVo6aVo7cmV0dXJuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCYmKGY/QXJyYXkuaXNBcnJheShzKT9oLnJlZj1mdW5jdGlvbihlKXt2YXIgdCxuO2xldCByPWFsKGxHKS5jdXJyZW50O3JldHVybiB0PXIsbj1lLCh0LnJlZnMubGVuZ3RoIT09bi5sZW5ndGh8fHQucmVmcy5zb21lKChlLHQpPT5lIT09blt0XSkpJiZsUShyLGUpLHIuY2FsbGJhY2t9KFtoLnJlZixzYShpKSwuLi5zXSk6aC5yZWY9bFgoaC5yZWYsc2EoaSkscyk6bFgobnVsbCxudWxsKSksZik/KHZvaWQgMCE9PXAmJihoLmNsYXNzTmFtZT1sJChoLmNsYXNzTmFtZSxwKSksaCk6aVp9KHQsbik7cmV0dXJuITE9PT1uLmVuYWJsZWQ/bnVsbDpmdW5jdGlvbihlLHQsbixyKXtpZih0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXJldHVybiB0KG4scik7bGV0IGU9bFUobix0LnByb3BzKTtyZXR1cm4gZS5yZWY9bi5yZWYsdy5jbG9uZUVsZW1lbnQodCxlKX1pZihlJiZcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIG8sYTtyZXR1cm4gbz1lLGE9bixcImJ1dHRvblwiPT09bz8oMCxBLmpzeCkoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLC4uLmF9KTpcImltZ1wiPT09bz8oMCxBLmpzeCkoXCJpbWdcIix7YWx0OlwiXCIsLi4uYX0pOncuY3JlYXRlRWxlbWVudChvLGEpfXRocm93IEVycm9yKFwiQmFzZSBVSTogUmVuZGVyIGVsZW1lbnQgb3IgZnVuY3Rpb24gYXJlIG5vdCBkZWZpbmVkLlwiKX0oZSxyLG8sbi5zdGF0ZT8/aVopfWZ1bmN0aW9uIHNhKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3NyPj0xOT9lLnByb3BzLnJlZjplLnJlZjpudWxsfWxldCBzaT13LmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBzbChlPSExKXtsZXQgdD13LnVzZUNvbnRleHQoc2kpO2lmKHZvaWQgMD09PXQmJiFlKXRocm93IEVycm9yKFwiQmFzZSBVSTogQ29tcG9zaXRlUm9vdENvbnRleHQgaXMgbWlzc2luZy4gQ29tcG9zaXRlIHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8Q29tcG9zaXRlLlJvb3Q+LlwiKTtyZXR1cm4gdH1mdW5jdGlvbiBzcyhlPXt9KXtsZXR7ZGlzYWJsZWQ6dD0hMSxmb2N1c2FibGVXaGVuRGlzYWJsZWQ6bix0YWJJbmRleDpyPTAsbmF0aXZlOm89ITB9PWUsYT13LnVzZVJlZihudWxsKSxpPXZvaWQgMCE9PXNsKCEwKSxsPWFoKCgpPT57bGV0IGU9YS5jdXJyZW50O3JldHVybiEhKGU/LnRhZ05hbWU9PT1cIkFcIiYmZT8uaHJlZil9KSx7cHJvcHM6c309ZnVuY3Rpb24oZSl7bGV0e2ZvY3VzYWJsZVdoZW5EaXNhYmxlZDp0LGRpc2FibGVkOm4sY29tcG9zaXRlOnI9ITEsdGFiSW5kZXg6bz0wLGlzTmF0aXZlQnV0dG9uOmF9PWUsaT1yJiYhMSE9PXQsbD1yJiYhMT09PXQ7cmV0dXJue3Byb3BzOncudXNlTWVtbygoKT0+e2xldCBlPXtvbktleURvd24oZSl7biYmdCYmXCJUYWJcIiE9PWUua2V5JiZlLnByZXZlbnREZWZhdWx0KCl9fTtyZXR1cm4gcnx8KGUudGFiSW5kZXg9bywhYSYmbiYmKGUudGFiSW5kZXg9dD9vOi0xKSksKGEmJih0fHxpKXx8IWEmJm4pJiYoZVtcImFyaWEtZGlzYWJsZWRcIl09biksYSYmKCF0fHxsKSYmKGUuZGlzYWJsZWQ9biksZX0sW3Isbix0LGksbCxhLG9dKX19KHtmb2N1c2FibGVXaGVuRGlzYWJsZWQ6bixkaXNhYmxlZDp0LGNvbXBvc2l0ZTppLHRhYkluZGV4OnIsaXNOYXRpdmVCdXR0b246b30pO3JldHVybiBhQygoKT0+e2xldCBlPWEuY3VycmVudDtlIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQmJmkmJnQmJnZvaWQgMD09PXMuZGlzYWJsZWQmJmUuZGlzYWJsZWQmJihlLmRpc2FibGVkPSExKX0sW3Qscy5kaXNhYmxlZCxpXSkse2dldEJ1dHRvblByb3BzOncudXNlQ2FsbGJhY2soKGU9e30pPT57bGV0e29uQ2xpY2s6bixvbk1vdXNlRG93bjpyLG9uS2V5VXA6YSxvbktleURvd246aSxvblBvaW50ZXJEb3duOmMsLi4udX09ZTtyZXR1cm4gbFUoe3R5cGU6bz9cImJ1dHRvblwiOnZvaWQgMCxvbkNsaWNrKGUpe2lmKHQpcmV0dXJuIHZvaWQgZS5wcmV2ZW50RGVmYXVsdCgpO24/LihlKX0sb25Nb3VzZURvd24oZSl7dHx8cj8uKGUpfSxvbktleURvd24oZSl7aWYodHx8KGxWKGUpLGk/LihlKSksZS5iYXNlVUlIYW5kbGVyUHJldmVudGVkKXJldHVybjtsZXQgcj1lLnRhcmdldD09PWUuY3VycmVudFRhcmdldCYmIW8mJiFsKCkmJiF0LGE9XCJFbnRlclwiPT09ZS5rZXkscz1cIiBcIj09PWUua2V5O3ImJigoc3x8YSkmJmUucHJldmVudERlZmF1bHQoKSxhJiZuPy4oZSkpfSxvbktleVVwKGUpe3R8fChsVihlKSxhPy4oZSkpLCFlLmJhc2VVSUhhbmRsZXJQcmV2ZW50ZWQmJihlLnRhcmdldCE9PWUuY3VycmVudFRhcmdldHx8b3x8dHx8XCIgXCIhPT1lLmtleXx8bj8uKGUpKX0sb25Qb2ludGVyRG93bihlKXtpZih0KXJldHVybiB2b2lkIGUucHJldmVudERlZmF1bHQoKTtjPy4oZSl9fSxvP3ZvaWQgMDp7cm9sZTpcImJ1dHRvblwifSxzLHUpfSxbdCxzLG8sbF0pLGJ1dHRvblJlZjphfX1sZXQgc2M9dy5jcmVhdGVDb250ZXh0KHtyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e30sc3Vic2NyaWJlTWFwQ2hhbmdlOigpPT4oKT0+e30sZWxlbWVudHNSZWY6e2N1cnJlbnQ6W119LG5leHRJbmRleFJlZjp7Y3VycmVudDowfX0pLHN1PWZ1bmN0aW9uKGUpe3JldHVybiBlW2UuTm9uZT0wXT1cIk5vbmVcIixlW2UuR3Vlc3NGcm9tT3JkZXI9MV09XCJHdWVzc0Zyb21PcmRlclwiLGV9KHt9KTtmdW5jdGlvbiBzZChlPXt9KXtsZXR7bGFiZWw6dCxtZXRhZGF0YTpuLHRleHRSZWY6cixpbmRleEd1ZXNzQmVoYXZpb3I6b309ZSx7cmVnaXN0ZXI6YSx1bnJlZ2lzdGVyOmksc3Vic2NyaWJlTWFwQ2hhbmdlOmwsZWxlbWVudHNSZWY6cyxsYWJlbHNSZWY6YyxuZXh0SW5kZXhSZWY6dX09dy51c2VDb250ZXh0KHNjKSxkPXcudXNlUmVmKC0xKSxbZixwXT13LnVzZVN0YXRlKG89PT1zdS5HdWVzc0Zyb21PcmRlcj8oKT0+e2lmKC0xPT09ZC5jdXJyZW50KXtsZXQgZT11LmN1cnJlbnQ7dS5jdXJyZW50Kz0xLGQuY3VycmVudD1lfXJldHVybiBkLmN1cnJlbnR9Oi0xKSxoPXcudXNlUmVmKG51bGwpLG09dy51c2VDYWxsYmFjayhlPT57aWYoaC5jdXJyZW50PWUsLTEhPT1mJiZudWxsIT09ZSYmKHMuY3VycmVudFtmXT1lLGMpKXtsZXQgbj12b2lkIDAhPT10O2MuY3VycmVudFtmXT1uP3Q6cj8uY3VycmVudD8udGV4dENvbnRlbnQ/P2UudGV4dENvbnRlbnR9fSxbZixzLGMsdCxyXSk7cmV0dXJuIGFDKCgpPT57bGV0IGU9aC5jdXJyZW50O2lmKGUpcmV0dXJuIGEoZSxuKSwoKT0+e2koZSl9fSxbYSxpLG5dKSxhQygoKT0+bChlPT57bGV0IHQ9aC5jdXJyZW50P2UuZ2V0KGguY3VycmVudCk/LmluZGV4Om51bGw7bnVsbCE9dCYmcCh0KX0pLFtsLHBdKSx3LnVzZU1lbW8oKCk9Pih7cmVmOm0saW5kZXg6Zn0pLFtmLG1dKX1mdW5jdGlvbiBzZihlKXtsZXR7cmVuZGVyOnQsY2xhc3NOYW1lOm4sc3RhdGU6cj1pWixwcm9wczpvPWlVLHJlZnM6YT1pVSxtZXRhZGF0YTppLGN1c3RvbVN0eWxlSG9va01hcHBpbmc6bCx0YWc6cz1cImRpdlwiLC4uLmN9PWUse2NvbXBvc2l0ZVByb3BzOnUsY29tcG9zaXRlUmVmOmR9PWZ1bmN0aW9uKGU9e30pe2xldHtoaWdobGlnaHRJdGVtT25Ib3Zlcjp0LGhpZ2hsaWdodGVkSW5kZXg6bixvbkhpZ2hsaWdodGVkSW5kZXhDaGFuZ2U6cn09c2woKSx7cmVmOm8saW5kZXg6YX09c2QoZSksaT1uPT09YSxsPXcudXNlUmVmKG51bGwpLHM9bFgobyxsKTtyZXR1cm57Y29tcG9zaXRlUHJvcHM6dy51c2VNZW1vKCgpPT4oe3RhYkluZGV4Omk/MDotMSxvbkZvY3VzKCl7cihhKX0sb25Nb3VzZU1vdmUoKXtsZXQgZT1sLmN1cnJlbnQ7aWYoIXR8fCFlKXJldHVybjtsZXQgbj1lLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpfHxcInRydWVcIj09PWUuYXJpYURpc2FibGVkO2l8fG58fGUuZm9jdXMoKX19KSxbaSxyLGEsdF0pLGNvbXBvc2l0ZVJlZjpzLGluZGV4OmF9fSh7bWV0YWRhdGE6aX0pO3JldHVybiBzbyhzLGUse3N0YXRlOnIscmVmOlsuLi5hLGRdLHByb3BzOlt1LC4uLm8sY10sY3VzdG9tU3R5bGVIb29rTWFwcGluZzpsfSl9bGV0IHNwPXcuZm9yd2FyZFJlZihmdW5jdGlvbihlLHQpe2xldHtyZW5kZXI6bixjbGFzc05hbWU6cixkaXNhYmxlZDpvPSExLG5hdGl2ZUJ1dHRvbjphPSEwLC4uLml9PWUse3RyaWdnZXJQcm9wczpsLGRpc2FibGVkOnMsc2V0VHJpZ2dlckVsZW1lbnQ6YyxvcGVuOnUsYWxsb3dNb3VzZVVwVHJpZ2dlclJlZjpkLHBvc2l0aW9uZXJSZWY6ZixwYXJlbnQ6cCxsYXN0T3BlbkNoYW5nZVJlYXNvbjpoLHJvb3RJZDptfT1sdygpLGc9b3x8cyx5PXcudXNlUmVmKG51bGwpLHY9YWQoKSx7Z2V0QnV0dG9uUHJvcHM6YixidXR0b25SZWY6eH09c3Moe2Rpc2FibGVkOmcsbmF0aXZlOmF9KSxDPWxYKHgsYykse2V2ZW50czpffT1haigpO3cudXNlRWZmZWN0KCgpPT57dXx8dm9pZCAwIT09cC50eXBlfHwoZC5jdXJyZW50PSExKX0sW2QsdSxwLnR5cGVdKTtsZXQgaz1haChlPT57aWYoIXkuY3VycmVudClyZXR1cm47di5jbGVhcigpLGQuY3VycmVudD0hMTtsZXQgdD1lLnRhcmdldDtpZihpdih5LmN1cnJlbnQsdCl8fGl2KGYuY3VycmVudCx0KXx8dD09PXkuY3VycmVudHx8bnVsbCE9dCYmZnVuY3Rpb24gZSh0KXtyZXR1cm4gYU4odCkmJnQuaGFzQXR0cmlidXRlKFwiZGF0YS1yb290b3duZXJpZFwiKT90LmdldEF0dHJpYnV0ZShcImRhdGEtcm9vdG93bmVyaWRcIik/P3ZvaWQgMDphWCh0KT92b2lkIDA6ZShhSih0KSl9KHQpPT09bSlyZXR1cm47bGV0IG49ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsXCI6OmJlZm9yZVwiKSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsXCI6OmFmdGVyXCIpO2lmKFwibm9uZVwiPT09bi5jb250ZW50JiZcIm5vbmVcIj09PXIuY29udGVudClyZXR1cm4gdDtsZXQgbz1wYXJzZUZsb2F0KG4ud2lkdGgpfHwwLGE9cGFyc2VGbG9hdChuLmhlaWdodCl8fDAsaT1wYXJzZUZsb2F0KHIud2lkdGgpfHwwLGw9cGFyc2VGbG9hdChyLmhlaWdodCl8fDAscz1NYXRoLm1heCh0LndpZHRoLG8saSksYz1NYXRoLm1heCh0LmhlaWdodCxhLGwpLHU9cy10LndpZHRoLGQ9Yy10LmhlaWdodDtyZXR1cm57bGVmdDp0LmxlZnQtdS8yLHJpZ2h0OnQucmlnaHQrdS8yLHRvcDp0LnRvcC1kLzIsYm90dG9tOnQuYm90dG9tK2QvMn19KHkuY3VycmVudCk7ZS5jbGllbnRYPj1uLmxlZnQtMiYmZS5jbGllbnRYPD1uLnJpZ2h0KzImJmUuY2xpZW50WT49bi50b3AtMiYmZS5jbGllbnRZPD1uLmJvdHRvbSsyfHxfLmVtaXQoXCJjbG9zZVwiLHtkb21FdmVudDplLHJlYXNvbjpcImNhbmNlbC1vcGVuXCJ9KX0pO3cudXNlRWZmZWN0KCgpPT57dSYmXCJ0cmlnZ2VyLWhvdmVyXCI9PT1oJiZsUyh5LmN1cnJlbnQpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsayx7b25jZTohMH0pfSxbdSxrLGhdKTtsZXQgRT1cIm1lbnViYXJcIj09PXAudHlwZSxqPXcudXNlQ2FsbGJhY2soZT0+bFUoRT97cm9sZTpcIm1lbnVpdGVtXCJ9Ont9LHtcImFyaWEtaGFzcG9wdXBcIjpcIm1lbnVcIixyZWY6Qyxvbk1vdXNlRG93bjplPT57dXx8KHYuc3RhcnQoMjAwLCgpPT57ZC5jdXJyZW50PSEwfSksbFMoZS5jdXJyZW50VGFyZ2V0KS5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLGsse29uY2U6ITB9KSl9fSxlLGIpLFtiLEMsdSxkLHYsayxFXSksUz13LnVzZU1lbW8oKCk9Pih7ZGlzYWJsZWQ6ZyxvcGVuOnV9KSxbZyx1XSksTz1beSx0LHhdLEI9W2wsaSxqXSxQPXNvKFwiYnV0dG9uXCIsZSx7ZW5hYmxlZDohRSxjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnN0LHN0YXRlOlMscmVmOk8scHJvcHM6Qn0pO3JldHVybiBFPygwLEEuanN4KShzZix7dGFnOlwiYnV0dG9uXCIscmVuZGVyOm4sY2xhc3NOYW1lOnIsc3RhdGU6UyxyZWZzOk8scHJvcHM6QixjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnN0fSk6UH0pLHNoPXtjbGlwOlwicmVjdCgwIDAgMCAwKVwiLG92ZXJmbG93OlwiaGlkZGVuXCIsd2hpdGVTcGFjZTpcIm5vd3JhcFwiLHBvc2l0aW9uOlwiZml4ZWRcIix0b3A6MCxsZWZ0OjAsYm9yZGVyOjAscGFkZGluZzowLHdpZHRoOjEsaGVpZ2h0OjEsbWFyZ2luOi0xfSxzbT13LmZvcndhcmRSZWYoZnVuY3Rpb24oZSx0KXtsZXRbbixyXT13LnVzZVN0YXRlKCk7cmV0dXJuIGFDKCgpPT57aWUmJnIoXCJidXR0b25cIil9LFtdKSwoMCxBLmpzeCkoXCJzcGFuXCIsey4uLmUscmVmOnQsdGFiSW5kZXg6MCxyb2xlOm4sXCJhcmlhLWhpZGRlblwiOiFufHx2b2lkIDAsc3R5bGU6c2gsXCJkYXRhLWJhc2UtdWktZm9jdXMtZ3VhcmRcIjpcIlwifSl9KTt2YXIgc2c9J2lucHV0Om5vdChbaW5lcnRdKSxzZWxlY3Q6bm90KFtpbmVydF0pLHRleHRhcmVhOm5vdChbaW5lcnRdKSxhW2hyZWZdOm5vdChbaW5lcnRdKSxidXR0b246bm90KFtpbmVydF0pLFt0YWJpbmRleF06bm90KHNsb3QpOm5vdChbaW5lcnRdKSxhdWRpb1tjb250cm9sc106bm90KFtpbmVydF0pLHZpZGVvW2NvbnRyb2xzXTpub3QoW2luZXJ0XSksW2NvbnRlbnRlZGl0YWJsZV06bm90KFtjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiXSk6bm90KFtpbmVydF0pLGRldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlOm5vdChbaW5lcnRdKSxkZXRhaWxzOm5vdChbaW5lcnRdKScsc3k9XCJ1bmRlZmluZWRcIj09dHlwZW9mIEVsZW1lbnQsc3Y9c3k/ZnVuY3Rpb24oKXt9OkVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXN8fEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yfHxFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3Isc2I9IXN5JiZFbGVtZW50LnByb3RvdHlwZS5nZXRSb290Tm9kZT9mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09ZXx8bnVsbD09KHQ9ZS5nZXRSb290Tm9kZSk/dm9pZCAwOnQuY2FsbChlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmUub3duZXJEb2N1bWVudH0sc0E9ZnVuY3Rpb24gZSh0LG4pe3ZvaWQgMD09PW4mJihuPSEwKTt2YXIgcixvPW51bGw9PXR8fG51bGw9PShyPXQuZ2V0QXR0cmlidXRlKT92b2lkIDA6ci5jYWxsKHQsXCJpbmVydFwiKTtyZXR1cm5cIlwiPT09b3x8XCJ0cnVlXCI9PT1vfHxuJiZ0JiZlKHQucGFyZW50Tm9kZSl9LHN4PWZ1bmN0aW9uKGUpe3ZhciB0LG49bnVsbD09ZXx8bnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUpP3ZvaWQgMDp0LmNhbGwoZSxcImNvbnRlbnRlZGl0YWJsZVwiKTtyZXR1cm5cIlwiPT09bnx8XCJ0cnVlXCI9PT1ufSxzdz1mdW5jdGlvbihlLHQsbil7aWYoc0EoZSkpcmV0dXJuW107dmFyIHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGUucXVlcnlTZWxlY3RvckFsbChzZykpO3JldHVybiB0JiZzdi5jYWxsKGUsc2cpJiZyLnVuc2hpZnQoZSkscj1yLmZpbHRlcihuKX0sc0M9ZnVuY3Rpb24gZSh0LG4scil7Zm9yKHZhciBvPVtdLGE9QXJyYXkuZnJvbSh0KTthLmxlbmd0aDspe3ZhciBpPWEuc2hpZnQoKTtpZighc0EoaSwhMSkpaWYoXCJTTE9UXCI9PT1pLnRhZ05hbWUpe3ZhciBsPWkuYXNzaWduZWRFbGVtZW50cygpLHM9ZShsLmxlbmd0aD9sOmkuY2hpbGRyZW4sITAscik7ci5mbGF0dGVuP28ucHVzaC5hcHBseShvLHMpOm8ucHVzaCh7c2NvcGVQYXJlbnQ6aSxjYW5kaWRhdGVzOnN9KX1lbHNle3N2LmNhbGwoaSxzZykmJnIuZmlsdGVyKGkpJiYobnx8IXQuaW5jbHVkZXMoaSkpJiZvLnB1c2goaSk7dmFyIGM9aS5zaGFkb3dSb290fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmdldFNoYWRvd1Jvb3QmJnIuZ2V0U2hhZG93Um9vdChpKSx1PSFzQShjLCExKSYmKCFyLnNoYWRvd1Jvb3RGaWx0ZXJ8fHIuc2hhZG93Um9vdEZpbHRlcihpKSk7aWYoYyYmdSl7dmFyIGQ9ZSghMD09PWM/aS5jaGlsZHJlbjpjLmNoaWxkcmVuLCEwLHIpO3IuZmxhdHRlbj9vLnB1c2guYXBwbHkobyxkKTpvLnB1c2goe3Njb3BlUGFyZW50OmksY2FuZGlkYXRlczpkfSl9ZWxzZSBhLnVuc2hpZnQuYXBwbHkoYSxpLmNoaWxkcmVuKX19cmV0dXJuIG99LHNfPWZ1bmN0aW9uKGUpe3JldHVybiFpc05hTihwYXJzZUludChlLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpLDEwKSl9LHNrPWZ1bmN0aW9uKGUpe2lmKCFlKXRocm93IEVycm9yKFwiTm8gbm9kZSBwcm92aWRlZFwiKTtyZXR1cm4gZS50YWJJbmRleDwwJiYoL14oQVVESU98VklERU98REVUQUlMUykkLy50ZXN0KGUudGFnTmFtZSl8fHN4KGUpKSYmIXNfKGUpPzA6ZS50YWJJbmRleH0sc0U9ZnVuY3Rpb24oZSx0KXt2YXIgbj1zayhlKTtyZXR1cm4gbjwwJiZ0JiYhc18oZSk/MDpufSxzaj1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRhYkluZGV4PT09dC50YWJJbmRleD9lLmRvY3VtZW50T3JkZXItdC5kb2N1bWVudE9yZGVyOmUudGFiSW5kZXgtdC50YWJJbmRleH0sc1M9ZnVuY3Rpb24oZSl7cmV0dXJuXCJJTlBVVFwiPT09ZS50YWdOYW1lfSxzTz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0uY2hlY2tlZCYmZVtuXS5mb3JtPT09dClyZXR1cm4gZVtuXX0sc0I9ZnVuY3Rpb24oZSl7aWYoIWUubmFtZSlyZXR1cm4hMDt2YXIgdCxuPWUuZm9ybXx8c2IoZSkscj1mdW5jdGlvbihlKXtyZXR1cm4gbi5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicmFkaW9cIl1bbmFtZT1cIicrZSsnXCJdJyl9O2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5DU1MmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5DU1MuZXNjYXBlKXQ9cih3aW5kb3cuQ1NTLmVzY2FwZShlLm5hbWUpKTtlbHNlIHRyeXt0PXIoZS5uYW1lKX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS5lcnJvcihcIkxvb2tzIGxpa2UgeW91IGhhdmUgYSByYWRpbyBidXR0b24gd2l0aCBhIG5hbWUgYXR0cmlidXRlIGNvbnRhaW5pbmcgaW52YWxpZCBDU1Mgc2VsZWN0b3IgY2hhcmFjdGVycyBhbmQgbmVlZCB0aGUgQ1NTLmVzY2FwZSBwb2x5ZmlsbDogJXNcIixlLm1lc3NhZ2UpLCExfXZhciBvPXNPKHQsZS5mb3JtKTtyZXR1cm4hb3x8bz09PWV9LHNQPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBzUyh0PWUpJiZcInJhZGlvXCI9PT10LnR5cGUmJiFzQihlKX0sc0k9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8sYSxpLGwscz1lJiZzYihlKSxjPW51bGw9PSh0PXMpP3ZvaWQgMDp0Lmhvc3QsdT0hMTtpZihzJiZzIT09ZSlmb3IodT0hIShudWxsIT0obj1jKSYmbnVsbCE9KHI9bi5vd25lckRvY3VtZW50KSYmci5jb250YWlucyhjKXx8bnVsbCE9ZSYmbnVsbCE9KG89ZS5vd25lckRvY3VtZW50KSYmby5jb250YWlucyhlKSk7IXUmJmM7KXU9ISEobnVsbCE9KGk9Yz1udWxsPT0oYT1zPXNiKGMpKT92b2lkIDA6YS5ob3N0KSYmbnVsbCE9KGw9aS5vd25lckRvY3VtZW50KSYmbC5jb250YWlucyhjKSk7cmV0dXJuIHV9LHNUPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10LndpZHRoLHI9dC5oZWlnaHQ7cmV0dXJuIDA9PT1uJiYwPT09cn0sc3o9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmRpc3BsYXlDaGVjayxyPXQuZ2V0U2hhZG93Um9vdDtpZihcImhpZGRlblwiPT09Z2V0Q29tcHV0ZWRTdHlsZShlKS52aXNpYmlsaXR5KXJldHVybiEwO3ZhciBvPXN2LmNhbGwoZSxcImRldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlXCIpP2UucGFyZW50RWxlbWVudDplO2lmKHN2LmNhbGwobyxcImRldGFpbHM6bm90KFtvcGVuXSkgKlwiKSlyZXR1cm4hMDtpZihuJiZcImZ1bGxcIiE9PW4mJlwibGVnYWN5LWZ1bGxcIiE9PW4pe2lmKFwibm9uLXplcm8tYXJlYVwiPT09bilyZXR1cm4gc1QoZSl9ZWxzZXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXtmb3IodmFyIGE9ZTtlOyl7dmFyIGk9ZS5wYXJlbnRFbGVtZW50LGw9c2IoZSk7aWYoaSYmIWkuc2hhZG93Um9vdCYmITA9PT1yKGkpKXJldHVybiBzVChlKTtlPWUuYXNzaWduZWRTbG90P2UuYXNzaWduZWRTbG90Oml8fGw9PT1lLm93bmVyRG9jdW1lbnQ/aTpsLmhvc3R9ZT1hfWlmKHNJKGUpKXJldHVybiFlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoO2lmKFwibGVnYWN5LWZ1bGxcIiE9PW4pcmV0dXJuITB9cmV0dXJuITF9LHNEPWZ1bmN0aW9uKGUpe2lmKC9eKElOUFVUfEJVVFRPTnxTRUxFQ1R8VEVYVEFSRUEpJC8udGVzdChlLnRhZ05hbWUpKWZvcih2YXIgdD1lLnBhcmVudEVsZW1lbnQ7dDspe2lmKFwiRklFTERTRVRcIj09PXQudGFnTmFtZSYmdC5kaXNhYmxlZCl7Zm9yKHZhciBuPTA7bjx0LmNoaWxkcmVuLmxlbmd0aDtuKyspe3ZhciByPXQuY2hpbGRyZW4uaXRlbShuKTtpZihcIkxFR0VORFwiPT09ci50YWdOYW1lKXJldHVybiEhc3YuY2FsbCh0LFwiZmllbGRzZXRbZGlzYWJsZWRdICpcIil8fCFyLmNvbnRhaW5zKGUpfXJldHVybiEwfXQ9dC5wYXJlbnRFbGVtZW50fXJldHVybiExfSxzTD1mdW5jdGlvbihlLHQpe3ZhciBuLHI7cmV0dXJuISh0LmRpc2FibGVkfHxzQSh0KXx8c1Mobj10KSYmXCJoaWRkZW5cIj09PW4udHlwZXx8c3oodCxlKXx8XCJERVRBSUxTXCI9PT0ocj10KS50YWdOYW1lJiZBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoci5jaGlsZHJlbikuc29tZShmdW5jdGlvbihlKXtyZXR1cm5cIlNVTU1BUllcIj09PWUudGFnTmFtZX0pfHxzRCh0KSl9LHNOPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIShzUCh0KXx8MD5zayh0KSkmJiEhc0woZSx0KX0sc1I9ZnVuY3Rpb24oZSl7dmFyIHQ9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSwxMCk7cmV0dXJuISFpc05hTih0KXx8ISEodD49MCl9LHNNPWZ1bmN0aW9uIGUodCl7dmFyIG49W10scj1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQsbyl7dmFyIGE9ISF0LnNjb3BlUGFyZW50LGk9YT90LnNjb3BlUGFyZW50OnQsbD1zRShpLGEpLHM9YT9lKHQuY2FuZGlkYXRlcyk6aTswPT09bD9hP24ucHVzaC5hcHBseShuLHMpOm4ucHVzaChpKTpyLnB1c2goe2RvY3VtZW50T3JkZXI6byx0YWJJbmRleDpsLGl0ZW06dCxpc1Njb3BlOmEsY29udGVudDpzfSl9KSxyLnNvcnQoc2opLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiB0LmlzU2NvcGU/ZS5wdXNoLmFwcGx5KGUsdC5jb250ZW50KTplLnB1c2godC5jb250ZW50KSxlfSxbXSkuY29uY2F0KG4pfSxzWj1mdW5jdGlvbihlLHQpe3JldHVybiBzTSgodD10fHx7fSkuZ2V0U2hhZG93Um9vdD9zQyhbZV0sdC5pbmNsdWRlQ29udGFpbmVyLHtmaWx0ZXI6c04uYmluZChudWxsLHQpLGZsYXR0ZW46ITEsZ2V0U2hhZG93Um9vdDp0LmdldFNoYWRvd1Jvb3Qsc2hhZG93Um9vdEZpbHRlcjpzUn0pOnN3KGUsdC5pbmNsdWRlQ29udGFpbmVyLHNOLmJpbmQobnVsbCx0KSkpfSxzVT1mdW5jdGlvbihlLHQpe3JldHVybih0PXR8fHt9KS5nZXRTaGFkb3dSb290P3NDKFtlXSx0LmluY2x1ZGVDb250YWluZXIse2ZpbHRlcjpzTC5iaW5kKG51bGwsdCksZmxhdHRlbjohMCxnZXRTaGFkb3dSb290OnQuZ2V0U2hhZG93Um9vdH0pOnN3KGUsdC5pbmNsdWRlQ29udGFpbmVyLHNMLmJpbmQobnVsbCx0KSl9LHNGPWZ1bmN0aW9uKGUsdCl7aWYodD10fHx7fSwhZSl0aHJvdyBFcnJvcihcIk5vIG5vZGUgcHJvdmlkZWRcIik7cmV0dXJuITEhPT1zdi5jYWxsKGUsc2cpJiZzTih0LGUpfTtsZXQgc3E9KCk9Pih7Z2V0U2hhZG93Um9vdDohMCxkaXNwbGF5Q2hlY2s6XCJmdW5jdGlvblwiPT10eXBlb2YgUmVzaXplT2JzZXJ2ZXImJlJlc2l6ZU9ic2VydmVyLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJbbmF0aXZlIGNvZGVdXCIpP1wiZnVsbFwiOlwibm9uZVwifSk7ZnVuY3Rpb24gc0goZSx0KXtsZXQgbj1zWihlLHNxKCkpLHI9bi5sZW5ndGg7aWYoMD09PXIpcmV0dXJuO2xldCBvPWl5KGl4KGUpKSxhPW4uaW5kZXhPZihvKTtyZXR1cm4gblstMT09PWE/MT09PXQ/MDpyLTE6YSt0XX1mdW5jdGlvbiBzVihlKXtyZXR1cm4gc0goaXgoZSkuYm9keSwxKXx8ZX1mdW5jdGlvbiBzJChlKXtyZXR1cm4gc0goaXgoZSkuYm9keSwtMSl8fGV9ZnVuY3Rpb24gc1coZSx0KXtsZXQgbj10fHxlLmN1cnJlbnRUYXJnZXQscj1lLnJlbGF0ZWRUYXJnZXQ7cmV0dXJuIXJ8fCFpdihuLHIpfWZ1bmN0aW9uIHNZKGUpe3NaKGUsc3EoKSkuZm9yRWFjaChlPT57ZS5kYXRhc2V0LnRhYmluZGV4PWUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIil8fFwiXCIsZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIil9KX1mdW5jdGlvbiBzSyhlKXtlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS10YWJpbmRleF1cIikuZm9yRWFjaChlPT57bGV0IHQ9ZS5kYXRhc2V0LnRhYmluZGV4O2RlbGV0ZSBlLmRhdGFzZXQudGFiaW5kZXgsdD9lLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsdCk6ZS5yZW1vdmVBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKX0pfWxldCBzWD13LmNyZWF0ZUNvbnRleHQobnVsbCksc0c9KCk9PncudXNlQ29udGV4dChzWCksc1E9aWsoXCJwb3J0YWxcIik7ZnVuY3Rpb24gc0ooZT17fSl7bGV0e2lkOnQscm9vdDpufT1lLHI9YXgoKSxvPXNHKCksW2EsaV09dy51c2VTdGF0ZShudWxsKSxsPXcudXNlUmVmKG51bGwpO3JldHVybiBhQygoKT0+KCk9PnthPy5yZW1vdmUoKSxxdWV1ZU1pY3JvdGFzaygoKT0+e2wuY3VycmVudD1udWxsfSl9LFthXSksYUMoKCk9PntpZighcnx8bC5jdXJyZW50KXJldHVybjtsZXQgZT10P2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpOm51bGw7aWYoIWUpcmV0dXJuO2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7bi5pZD1yLG4uc2V0QXR0cmlidXRlKHNRLFwiXCIpLGUuYXBwZW5kQ2hpbGQobiksbC5jdXJyZW50PW4saShuKX0sW3Qscl0pLGFDKCgpPT57aWYobnVsbD09PW58fCFyfHxsLmN1cnJlbnQpcmV0dXJuO2xldCBlPW58fG8/LnBvcnRhbE5vZGU7ZSYmIWFEKGUpJiYoZT1lLmN1cnJlbnQpLGU9ZXx8ZG9jdW1lbnQuYm9keTtsZXQgYT1udWxsO3QmJigoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5pZD10LGUuYXBwZW5kQ2hpbGQoYSkpO2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cy5pZD1yLHMuc2V0QXR0cmlidXRlKHNRLFwiXCIpLChlPWF8fGUpLmFwcGVuZENoaWxkKHMpLGwuY3VycmVudD1zLGkocyl9LFt0LG4scixvXSksYX1mdW5jdGlvbiBzMChlKXtsZXR7Y2hpbGRyZW46dCxpZDpuLHJvb3Q6cixwcmVzZXJ2ZVRhYk9yZGVyOm89ITB9PWUsYT1zSih7aWQ6bixyb290OnJ9KSxbaSxsXT13LnVzZVN0YXRlKG51bGwpLHM9dy51c2VSZWYobnVsbCksYz13LnVzZVJlZihudWxsKSx1PXcudXNlUmVmKG51bGwpLGQ9dy51c2VSZWYobnVsbCksZj1pPy5tb2RhbCxwPWk/Lm9wZW4saD0hIWkmJiFpLm1vZGFsJiZpLm9wZW4mJm8mJiEhKHJ8fGEpO3JldHVybiB3LnVzZUVmZmVjdCgoKT0+e2lmKGEmJm8mJiFmKXJldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsZSwhMCksYS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIixlLCEwKSwoKT0+e2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIixlLCEwKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLGUsITApfTtmdW5jdGlvbiBlKGUpe2lmKGEmJnNXKGUpKXtsZXQgdD1cImZvY3VzaW5cIj09PWUudHlwZTsodD9zSzpzWSkoYSl9fX0sW2EsbyxmXSksdy51c2VFZmZlY3QoKCk9PnthJiYocHx8c0soYSkpfSxbcCxhXSksKDAsQS5qc3hzKShzWC5Qcm92aWRlcix7dmFsdWU6dy51c2VNZW1vKCgpPT4oe3ByZXNlcnZlVGFiT3JkZXI6byxiZWZvcmVPdXRzaWRlUmVmOnMsYWZ0ZXJPdXRzaWRlUmVmOmMsYmVmb3JlSW5zaWRlUmVmOnUsYWZ0ZXJJbnNpZGVSZWY6ZCxwb3J0YWxOb2RlOmEsc2V0Rm9jdXNNYW5hZ2VyU3RhdGU6bH0pLFtvLGFdKSxjaGlsZHJlbjpbaCYmYSYmKDAsQS5qc3gpKHNtLHtcImRhdGEtdHlwZVwiOlwib3V0c2lkZVwiLHJlZjpzLG9uRm9jdXM6ZT0+e2lmKHNXKGUsYSkpdS5jdXJyZW50Py5mb2N1cygpO2Vsc2V7bGV0IGU9cyQoaT9pLmRvbVJlZmVyZW5jZTpudWxsKTtlPy5mb2N1cygpfX19KSxoJiZhJiYoMCxBLmpzeCkoXCJzcGFuXCIse1wiYXJpYS1vd25zXCI6YS5pZCxzdHlsZTpzaH0pLGEmJmVoLmNyZWF0ZVBvcnRhbCh0LGEpLGgmJmEmJigwLEEuanN4KShzbSx7XCJkYXRhLXR5cGVcIjpcIm91dHNpZGVcIixyZWY6YyxvbkZvY3VzOmU9PntpZihzVyhlLGEpKWQuY3VycmVudD8uZm9jdXMoKTtlbHNle2xldCB0PXNWKGk/aS5kb21SZWZlcmVuY2U6bnVsbCk7dD8uZm9jdXMoKSxpPy5jbG9zZU9uRm9jdXNPdXQmJmk/Lm9uT3BlbkNoYW5nZSghMSxlLm5hdGl2ZUV2ZW50LFwiZm9jdXMtb3V0XCIpfX19KV19KX1sZXQgczE9dy5jcmVhdGVDb250ZXh0KHZvaWQgMCk7ZnVuY3Rpb24gczIoZSl7bGV0e2NoaWxkcmVuOnQsa2VlcE1vdW50ZWQ6bj0hMSxjb250YWluZXI6cn09ZSx7bW91bnRlZDpvfT1sdygpO3JldHVybiBvfHxuPygwLEEuanN4KShzMS5Qcm92aWRlcix7dmFsdWU6bixjaGlsZHJlbjooMCxBLmpzeCkoczAse3Jvb3Q6cixjaGlsZHJlbjp0fSl9KTpudWxsfWxldCBzND13LmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBzNShlLHQsbil7bGV0IHIse3JlZmVyZW5jZTpvLGZsb2F0aW5nOmF9PWUsaT1pOCh0KSxsPWkzKGk4KHQpKSxzPWk2KGwpLGM9aTQodCksdT1cInlcIj09PWksZD1vLngrby53aWR0aC8yLWEud2lkdGgvMixmPW8ueStvLmhlaWdodC8yLWEuaGVpZ2h0LzIscD1vW3NdLzItYVtzXS8yO3N3aXRjaChjKXtjYXNlXCJ0b3BcIjpyPXt4OmQseTpvLnktYS5oZWlnaHR9O2JyZWFrO2Nhc2VcImJvdHRvbVwiOnI9e3g6ZCx5Om8ueStvLmhlaWdodH07YnJlYWs7Y2FzZVwicmlnaHRcIjpyPXt4Om8ueCtvLndpZHRoLHk6Zn07YnJlYWs7Y2FzZVwibGVmdFwiOnI9e3g6by54LWEud2lkdGgseTpmfTticmVhaztkZWZhdWx0OnI9e3g6by54LHk6by55fX1zd2l0Y2goaTUodCkpe2Nhc2VcInN0YXJ0XCI6cltsXS09cCoobiYmdT8tMToxKTticmVhaztjYXNlXCJlbmRcIjpyW2xdKz1wKihuJiZ1Py0xOjEpfXJldHVybiByfWxldCBzMz1hc3luYyhlLHQsbik9PntsZXR7cGxhY2VtZW50OnI9XCJib3R0b21cIixzdHJhdGVneTpvPVwiYWJzb2x1dGVcIixtaWRkbGV3YXJlOmE9W10scGxhdGZvcm06aX09bixsPWEuZmlsdGVyKEJvb2xlYW4pLHM9YXdhaXQgKG51bGw9PWkuaXNSVEw/dm9pZCAwOmkuaXNSVEwodCkpLGM9YXdhaXQgaS5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTplLGZsb2F0aW5nOnQsc3RyYXRlZ3k6b30pLHt4OnUseTpkfT1zNShjLHIscyksZj1yLHA9e30saD0wO2ZvcihsZXQgbj0wO248bC5sZW5ndGg7bisrKXtsZXR7bmFtZTphLGZuOm19PWxbbl0se3g6Zyx5OnksZGF0YTp2LHJlc2V0OmJ9PWF3YWl0IG0oe3g6dSx5OmQsaW5pdGlhbFBsYWNlbWVudDpyLHBsYWNlbWVudDpmLHN0cmF0ZWd5Om8sbWlkZGxld2FyZURhdGE6cCxyZWN0czpjLHBsYXRmb3JtOmksZWxlbWVudHM6e3JlZmVyZW5jZTplLGZsb2F0aW5nOnR9fSk7dT1udWxsIT1nP2c6dSxkPW51bGwhPXk/eTpkLHA9ey4uLnAsW2FdOnsuLi5wW2FdLC4uLnZ9fSxiJiZoPD01MCYmKGgrKyxcIm9iamVjdFwiPT10eXBlb2YgYiYmKGIucGxhY2VtZW50JiYoZj1iLnBsYWNlbWVudCksYi5yZWN0cyYmKGM9ITA9PT1iLnJlY3RzP2F3YWl0IGkuZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6ZSxmbG9hdGluZzp0LHN0cmF0ZWd5Om99KTpiLnJlY3RzKSx7eDp1LHk6ZH09czUoYyxmLHMpKSxuPS0xKX1yZXR1cm57eDp1LHk6ZCxwbGFjZW1lbnQ6ZixzdHJhdGVneTpvLG1pZGRsZXdhcmVEYXRhOnB9fTthc3luYyBmdW5jdGlvbiBzNihlLHQpe3ZhciBuO3ZvaWQgMD09PXQmJih0PXt9KTtsZXR7eDpyLHk6byxwbGF0Zm9ybTphLHJlY3RzOmksZWxlbWVudHM6bCxzdHJhdGVneTpzfT1lLHtib3VuZGFyeTpjPVwiY2xpcHBpbmdBbmNlc3RvcnNcIixyb290Qm91bmRhcnk6dT1cInZpZXdwb3J0XCIsZWxlbWVudENvbnRleHQ6ZD1cImZsb2F0aW5nXCIsYWx0Qm91bmRhcnk6Zj0hMSxwYWRkaW5nOnA9MH09aTIodCxlKSxoPWxhKHApLG09bFtmP1wiZmxvYXRpbmdcIj09PWQ/XCJyZWZlcmVuY2VcIjpcImZsb2F0aW5nXCI6ZF0sZz1saShhd2FpdCBhLmdldENsaXBwaW5nUmVjdCh7ZWxlbWVudDpudWxsPT0obj1hd2FpdCAobnVsbD09YS5pc0VsZW1lbnQ/dm9pZCAwOmEuaXNFbGVtZW50KG0pKSl8fG4/bTptLmNvbnRleHRFbGVtZW50fHxhd2FpdCAobnVsbD09YS5nZXREb2N1bWVudEVsZW1lbnQ/dm9pZCAwOmEuZ2V0RG9jdW1lbnRFbGVtZW50KGwuZmxvYXRpbmcpKSxib3VuZGFyeTpjLHJvb3RCb3VuZGFyeTp1LHN0cmF0ZWd5OnN9KSkseT1cImZsb2F0aW5nXCI9PT1kP3t4OnIseTpvLHdpZHRoOmkuZmxvYXRpbmcud2lkdGgsaGVpZ2h0OmkuZmxvYXRpbmcuaGVpZ2h0fTppLnJlZmVyZW5jZSx2PWF3YWl0IChudWxsPT1hLmdldE9mZnNldFBhcmVudD92b2lkIDA6YS5nZXRPZmZzZXRQYXJlbnQobC5mbG9hdGluZykpLGI9YXdhaXQgKG51bGw9PWEuaXNFbGVtZW50P3ZvaWQgMDphLmlzRWxlbWVudCh2KSkmJmF3YWl0IChudWxsPT1hLmdldFNjYWxlP3ZvaWQgMDphLmdldFNjYWxlKHYpKXx8e3g6MSx5OjF9LEE9bGkoYS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdD9hd2FpdCBhLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtlbGVtZW50czpsLHJlY3Q6eSxvZmZzZXRQYXJlbnQ6dixzdHJhdGVneTpzfSk6eSk7cmV0dXJue3RvcDooZy50b3AtQS50b3AraC50b3ApL2IueSxib3R0b206KEEuYm90dG9tLWcuYm90dG9tK2guYm90dG9tKS9iLnksbGVmdDooZy5sZWZ0LUEubGVmdCtoLmxlZnQpL2IueCxyaWdodDooQS5yaWdodC1nLnJpZ2h0K2gucmlnaHQpL2IueH19ZnVuY3Rpb24gczkoZSx0KXtyZXR1cm57dG9wOmUudG9wLXQuaGVpZ2h0LHJpZ2h0OmUucmlnaHQtdC53aWR0aCxib3R0b206ZS5ib3R0b20tdC5oZWlnaHQsbGVmdDplLmxlZnQtdC53aWR0aH19ZnVuY3Rpb24gczgoZSl7cmV0dXJuIGlZLnNvbWUodD0+ZVt0XT49MCl9bGV0IHM3PW5ldyBTZXQoW1wibGVmdFwiLFwidG9wXCJdKTthc3luYyBmdW5jdGlvbiBjZShlLHQpe2xldHtwbGFjZW1lbnQ6bixwbGF0Zm9ybTpyLGVsZW1lbnRzOm99PWUsYT1hd2FpdCAobnVsbD09ci5pc1JUTD92b2lkIDA6ci5pc1JUTChvLmZsb2F0aW5nKSksaT1pNChuKSxsPWk1KG4pLHM9XCJ5XCI9PT1pOChuKSxjPXM3LmhhcyhpKT8tMToxLHU9YSYmcz8tMToxLGQ9aTIodCxlKSx7bWFpbkF4aXM6Zixjcm9zc0F4aXM6cCxhbGlnbm1lbnRBeGlzOmh9PVwibnVtYmVyXCI9PXR5cGVvZiBkP3ttYWluQXhpczpkLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbH06e21haW5BeGlzOmQubWFpbkF4aXN8fDAsY3Jvc3NBeGlzOmQuY3Jvc3NBeGlzfHwwLGFsaWdubWVudEF4aXM6ZC5hbGlnbm1lbnRBeGlzfTtyZXR1cm4gbCYmXCJudW1iZXJcIj09dHlwZW9mIGgmJihwPVwiZW5kXCI9PT1sPy0xKmg6aCkscz97eDpwKnUseTpmKmN9Ont4OmYqYyx5OnAqdX19ZnVuY3Rpb24gY3QoZSl7bGV0IHQ9YUcoZSksbj1wYXJzZUZsb2F0KHQud2lkdGgpfHwwLHI9cGFyc2VGbG9hdCh0LmhlaWdodCl8fDAsbz1hTihlKSxhPW8/ZS5vZmZzZXRXaWR0aDpuLGk9bz9lLm9mZnNldEhlaWdodDpyLGw9aUcobikhPT1hfHxpRyhyKSE9PWk7cmV0dXJuIGwmJihuPWEscj1pKSx7d2lkdGg6bixoZWlnaHQ6ciwkOmx9fWZ1bmN0aW9uIGNuKGUpe3JldHVybiBhTChlKT9lOmUuY29udGV4dEVsZW1lbnR9ZnVuY3Rpb24gY3IoZSl7bGV0IHQ9Y24oZSk7aWYoIWFOKHQpKXJldHVybiBpSigxKTtsZXQgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpyLGhlaWdodDpvLCQ6YX09Y3QodCksaT0oYT9pRyhuLndpZHRoKTpuLndpZHRoKS9yLGw9KGE/aUcobi5oZWlnaHQpOm4uaGVpZ2h0KS9vO3JldHVybiBpJiZOdW1iZXIuaXNGaW5pdGUoaSl8fChpPTEpLGwmJk51bWJlci5pc0Zpbml0ZShsKXx8KGw9MSkse3g6aSx5Omx9fWxldCBjbz1pSigwKTtmdW5jdGlvbiBjYShlKXtsZXQgdD1hVChlKTtyZXR1cm4gYVkoKSYmdC52aXN1YWxWaWV3cG9ydD97eDp0LnZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQseTp0LnZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcH06Y299ZnVuY3Rpb24gY2koZSx0LG4scil7dmFyIG8sYSxpO3ZvaWQgMD09PXQmJih0PSExKSx2b2lkIDA9PT1uJiYobj0hMSk7bGV0IGw9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWNuKGUpLGM9aUooMSk7dCYmKHI/YUwocikmJihjPWNyKHIpKTpjPWNyKGUpKTtsZXQgdT0obz1zLHZvaWQgMD09PShhPW4pJiYoYT0hMSksKGk9cikmJighYXx8aT09PWFUKG8pKSYmYSk/Y2Eocyk6aUooMCksZD0obC5sZWZ0K3UueCkvYy54LGY9KGwudG9wK3UueSkvYy55LHA9bC53aWR0aC9jLngsaD1sLmhlaWdodC9jLnk7aWYocyl7bGV0IGU9YVQocyksdD1yJiZhTChyKT9hVChyKTpyLG49ZSxvPWExKG4pO2Zvcig7byYmciYmdCE9PW47KXtsZXQgZT1jcihvKSx0PW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1hRyhvKSxhPXQubGVmdCsoby5jbGllbnRMZWZ0K3BhcnNlRmxvYXQoci5wYWRkaW5nTGVmdCkpKmUueCxpPXQudG9wKyhvLmNsaWVudFRvcCtwYXJzZUZsb2F0KHIucGFkZGluZ1RvcCkpKmUueTtkKj1lLngsZio9ZS55LHAqPWUueCxoKj1lLnksZCs9YSxmKz1pLG89YTEobj1hVChvKSl9fXJldHVybiBsaSh7d2lkdGg6cCxoZWlnaHQ6aCx4OmQseTpmfSl9ZnVuY3Rpb24gY2woZSx0KXtsZXQgbj1hUShlKS5zY3JvbGxMZWZ0O3JldHVybiB0P3QubGVmdCtuOmNpKGF6KGUpKS5sZWZ0K259ZnVuY3Rpb24gY3MoZSx0LG4pe3ZvaWQgMD09PW4mJihuPSExKTtsZXQgcj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci5sZWZ0K3Quc2Nyb2xsTGVmdC0obj8wOmNsKGUscikpO3JldHVybnt4Om8seTpyLnRvcCt0LnNjcm9sbFRvcH19bGV0IGNjPW5ldyBTZXQoW1wiYWJzb2x1dGVcIixcImZpeGVkXCJdKTtmdW5jdGlvbiBjdShlLHQsbil7bGV0IHI7aWYoXCJ2aWV3cG9ydFwiPT09dClyPWZ1bmN0aW9uKGUsdCl7bGV0IG49YVQoZSkscj1heihlKSxvPW4udmlzdWFsVmlld3BvcnQsYT1yLmNsaWVudFdpZHRoLGk9ci5jbGllbnRIZWlnaHQsbD0wLHM9MDtpZihvKXthPW8ud2lkdGgsaT1vLmhlaWdodDtsZXQgZT1hWSgpOyghZXx8ZSYmXCJmaXhlZFwiPT09dCkmJihsPW8ub2Zmc2V0TGVmdCxzPW8ub2Zmc2V0VG9wKX1yZXR1cm57d2lkdGg6YSxoZWlnaHQ6aSx4OmwseTpzfX0oZSxuKTtlbHNlIGlmKFwiZG9jdW1lbnRcIj09PXQpcj1mdW5jdGlvbihlKXtsZXQgdD1heihlKSxuPWFRKGUpLHI9ZS5vd25lckRvY3VtZW50LmJvZHksbz1pWCh0LnNjcm9sbFdpZHRoLHQuY2xpZW50V2lkdGgsci5zY3JvbGxXaWR0aCxyLmNsaWVudFdpZHRoKSxhPWlYKHQuc2Nyb2xsSGVpZ2h0LHQuY2xpZW50SGVpZ2h0LHIuc2Nyb2xsSGVpZ2h0LHIuY2xpZW50SGVpZ2h0KSxpPS1uLnNjcm9sbExlZnQrY2woZSksbD0tbi5zY3JvbGxUb3A7cmV0dXJuXCJydGxcIj09PWFHKHIpLmRpcmVjdGlvbiYmKGkrPWlYKHQuY2xpZW50V2lkdGgsci5jbGllbnRXaWR0aCktbykse3dpZHRoOm8saGVpZ2h0OmEseDppLHk6bH19KGF6KGUpKTtlbHNlIGlmKGFMKHQpKXI9ZnVuY3Rpb24oZSx0KXtsZXQgbj1jaShlLCEwLFwiZml4ZWRcIj09PXQpLHI9bi50b3ArZS5jbGllbnRUb3Asbz1uLmxlZnQrZS5jbGllbnRMZWZ0LGE9YU4oZSk/Y3IoZSk6aUooMSksaT1lLmNsaWVudFdpZHRoKmEueCxsPWUuY2xpZW50SGVpZ2h0KmEueSxzPW8qYS54O3JldHVybnt3aWR0aDppLGhlaWdodDpsLHg6cyx5OnIqYS55fX0odCxuKTtlbHNle2xldCBuPWNhKGUpO3I9e3g6dC54LW4ueCx5OnQueS1uLnksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fXJldHVybiBsaShyKX1mdW5jdGlvbiBjZChlKXtyZXR1cm5cInN0YXRpY1wiPT09YUcoZSkucG9zaXRpb259ZnVuY3Rpb24gY2YoZSx0KXtpZighYU4oZSl8fFwiZml4ZWRcIj09PWFHKGUpLnBvc2l0aW9uKXJldHVybiBudWxsO2lmKHQpcmV0dXJuIHQoZSk7bGV0IG49ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF6KGUpPT09biYmKG49bi5vd25lckRvY3VtZW50LmJvZHkpLG59ZnVuY3Rpb24gY3AoZSx0KXt2YXIgbjtsZXQgcj1hVChlKTtpZihhcShlKSlyZXR1cm4gcjtpZighYU4oZSkpe2xldCB0PWFKKGUpO2Zvcig7dCYmIWFYKHQpOyl7aWYoYUwodCkmJiFjZCh0KSlyZXR1cm4gdDt0PWFKKHQpfXJldHVybiByfWxldCBvPWNmKGUsdCk7Zm9yKDtvJiYobj1vLGFVLmhhcyhhSShuKSkpJiZjZChvKTspbz1jZihvLHQpO3JldHVybiBvJiZhWChvKSYmY2QobykmJiFhVyhvKT9yOm98fGZ1bmN0aW9uKGUpe2xldCB0PWFKKGUpO2Zvcig7YU4odCkmJiFhWCh0KTspe2lmKGFXKHQpKXJldHVybiB0O2lmKGFxKHQpKWJyZWFrO3Q9YUoodCl9cmV0dXJuIG51bGx9KGUpfHxyfWxldCBjaD1hc3luYyBmdW5jdGlvbihlKXtsZXQgdD10aGlzLmdldE9mZnNldFBhcmVudHx8Y3Asbj10aGlzLmdldERpbWVuc2lvbnMscj1hd2FpdCBuKGUuZmxvYXRpbmcpO3JldHVybntyZWZlcmVuY2U6ZnVuY3Rpb24oZSx0LG4pe2xldCByPWFOKHQpLG89YXoodCksYT1cImZpeGVkXCI9PT1uLGk9Y2koZSwhMCxhLHQpLGw9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0scz1pSigwKTtpZihyfHwhciYmIWEpaWYoKFwiYm9keVwiIT09YUkodCl8fGFaKG8pKSYmKGw9YVEodCkpLHIpe2xldCBlPWNpKHQsITAsYSx0KTtzLng9ZS54K3QuY2xpZW50TGVmdCxzLnk9ZS55K3QuY2xpZW50VG9wfWVsc2UgbyYmKHMueD1jbChvKSk7YSYmIXImJm8mJihzLng9Y2wobykpO2xldCBjPSFvfHxyfHxhP2lKKDApOmNzKG8sbCksdT1pLmxlZnQrbC5zY3JvbGxMZWZ0LXMueC1jLng7cmV0dXJue3g6dSx5OmkudG9wK2wuc2Nyb2xsVG9wLXMueS1jLnksd2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9fShlLnJlZmVyZW5jZSxhd2FpdCB0KGUuZmxvYXRpbmcpLGUuc3RyYXRlZ3kpLGZsb2F0aW5nOnt4OjAseTowLHdpZHRoOnIud2lkdGgsaGVpZ2h0OnIuaGVpZ2h0fX19LGNtPXtjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdDpmdW5jdGlvbihlKXtsZXR7ZWxlbWVudHM6dCxyZWN0Om4sb2Zmc2V0UGFyZW50OnIsc3RyYXRlZ3k6b309ZSxhPVwiZml4ZWRcIj09PW8saT1heihyKSxsPSEhdCYmYXEodC5mbG9hdGluZyk7aWYocj09PWl8fGwmJmEpcmV0dXJuIG47bGV0IHM9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0sYz1pSigxKSx1PWlKKDApLGQ9YU4ocik7aWYoKGR8fCFkJiYhYSkmJigoXCJib2R5XCIhPT1hSShyKXx8YVooaSkpJiYocz1hUShyKSksYU4ocikpKXtsZXQgZT1jaShyKTtjPWNyKHIpLHUueD1lLngrci5jbGllbnRMZWZ0LHUueT1lLnkrci5jbGllbnRUb3B9bGV0IGY9IWl8fGR8fGE/aUooMCk6Y3MoaSxzLCEwKTtyZXR1cm57d2lkdGg6bi53aWR0aCpjLngsaGVpZ2h0Om4uaGVpZ2h0KmMueSx4Om4ueCpjLngtcy5zY3JvbGxMZWZ0KmMueCt1LngrZi54LHk6bi55KmMueS1zLnNjcm9sbFRvcCpjLnkrdS55K2YueX19LGdldERvY3VtZW50RWxlbWVudDpheixnZXRDbGlwcGluZ1JlY3Q6ZnVuY3Rpb24oZSl7bGV0e2VsZW1lbnQ6dCxib3VuZGFyeTpuLHJvb3RCb3VuZGFyeTpyLHN0cmF0ZWd5Om99PWUsYT1bLi4uXCJjbGlwcGluZ0FuY2VzdG9yc1wiPT09bj9hcSh0KT9bXTpmdW5jdGlvbihlLHQpe2xldCBuPXQuZ2V0KGUpO2lmKG4pcmV0dXJuIG47bGV0IHI9YTAoZSxbXSwhMSkuZmlsdGVyKGU9PmFMKGUpJiZcImJvZHlcIiE9PWFJKGUpKSxvPW51bGwsYT1cImZpeGVkXCI9PT1hRyhlKS5wb3NpdGlvbixpPWE/YUooZSk6ZTtmb3IoO2FMKGkpJiYhYVgoaSk7KXtsZXQgdD1hRyhpKSxuPWFXKGkpO258fFwiZml4ZWRcIiE9PXQucG9zaXRpb258fChvPW51bGwpLChhPyFuJiYhbzohbiYmXCJzdGF0aWNcIj09PXQucG9zaXRpb24mJiEhbyYmY2MuaGFzKG8ucG9zaXRpb24pfHxhWihpKSYmIW4mJmZ1bmN0aW9uIGUodCxuKXtsZXQgcj1hSih0KTtyZXR1cm4hKHI9PT1ufHwhYUwocil8fGFYKHIpKSYmKFwiZml4ZWRcIj09PWFHKHIpLnBvc2l0aW9ufHxlKHIsbikpfShlLGkpKT9yPXIuZmlsdGVyKGU9PmUhPT1pKTpvPXQsaT1hSihpKX1yZXR1cm4gdC5zZXQoZSxyKSxyfSh0LHRoaXMuX2MpOltdLmNvbmNhdChuKSxyXSxpPWFbMF0sbD1hLnJlZHVjZSgoZSxuKT0+e2xldCByPWN1KHQsbixvKTtyZXR1cm4gZS50b3A9aVgoci50b3AsZS50b3ApLGUucmlnaHQ9aUsoci5yaWdodCxlLnJpZ2h0KSxlLmJvdHRvbT1pSyhyLmJvdHRvbSxlLmJvdHRvbSksZS5sZWZ0PWlYKHIubGVmdCxlLmxlZnQpLGV9LGN1KHQsaSxvKSk7cmV0dXJue3dpZHRoOmwucmlnaHQtbC5sZWZ0LGhlaWdodDpsLmJvdHRvbS1sLnRvcCx4OmwubGVmdCx5OmwudG9wfX0sZ2V0T2Zmc2V0UGFyZW50OmNwLGdldEVsZW1lbnRSZWN0czpjaCxnZXRDbGllbnRSZWN0czpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuZnJvbShlLmdldENsaWVudFJlY3RzKCkpfSxnZXREaW1lbnNpb25zOmZ1bmN0aW9uKGUpe2xldHt3aWR0aDp0LGhlaWdodDpufT1jdChlKTtyZXR1cm57d2lkdGg6dCxoZWlnaHQ6bn19LGdldFNjYWxlOmNyLGlzRWxlbWVudDphTCxpc1JUTDpmdW5jdGlvbihlKXtyZXR1cm5cInJ0bFwiPT09YUcoZSkuZGlyZWN0aW9ufX07ZnVuY3Rpb24gY2coZSx0KXtyZXR1cm4gZS54PT09dC54JiZlLnk9PT10LnkmJmUud2lkdGg9PT10LndpZHRoJiZlLmhlaWdodD09PXQuaGVpZ2h0fWZ1bmN0aW9uIGN5KGUsdCxuLHIpe2xldCBvO3ZvaWQgMD09PXImJihyPXt9KTtsZXR7YW5jZXN0b3JTY3JvbGw6YT0hMCxhbmNlc3RvclJlc2l6ZTppPSEwLGVsZW1lbnRSZXNpemU6bD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBSZXNpemVPYnNlcnZlcixsYXlvdXRTaGlmdDpzPVwiZnVuY3Rpb25cIj09dHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyLGFuaW1hdGlvbkZyYW1lOmM9ITF9PXIsdT1jbihlKSxkPWF8fGk/Wy4uLnU/YTAodSk6W10sLi4uYTAodCldOltdO2QuZm9yRWFjaChlPT57YSYmZS5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsbix7cGFzc2l2ZTohMH0pLGkmJmUuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLG4pfSk7bGV0IGY9dSYmcz9mdW5jdGlvbihlLHQpe2xldCBuLHI9bnVsbCxvPWF6KGUpO2Z1bmN0aW9uIGEoKXt2YXIgZTtjbGVhclRpbWVvdXQobiksbnVsbD09KGU9cil8fGUuZGlzY29ubmVjdCgpLHI9bnVsbH1yZXR1cm4hZnVuY3Rpb24gaShsLHMpe3ZvaWQgMD09PWwmJihsPSExKSx2b2lkIDA9PT1zJiYocz0xKSxhKCk7bGV0IGM9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7bGVmdDp1LHRvcDpkLHdpZHRoOmYsaGVpZ2h0OnB9PWM7aWYobHx8dCgpLCFmfHwhcClyZXR1cm47bGV0IGg9aVEoZCksbT1pUShvLmNsaWVudFdpZHRoLSh1K2YpKSxnPWlRKG8uY2xpZW50SGVpZ2h0LShkK3ApKSx5PXtyb290TWFyZ2luOi1oK1wicHggXCIrLW0rXCJweCBcIistZytcInB4IFwiKy1pUSh1KStcInB4XCIsdGhyZXNob2xkOmlYKDAsaUsoMSxzKSl8fDF9LHY9ITA7ZnVuY3Rpb24gYih0KXtsZXQgcj10WzBdLmludGVyc2VjdGlvblJhdGlvO2lmKHIhPT1zKXtpZighdilyZXR1cm4gaSgpO3I/aSghMSxyKTpuPXNldFRpbWVvdXQoKCk9PntpKCExLDFlLTcpfSwxZTMpfTEhPT1yfHxjZyhjLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpfHxpKCksdj0hMX10cnl7cj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoYix7Li4ueSxyb290Om8ub3duZXJEb2N1bWVudH0pfWNhdGNoKGUpe3I9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGIseSl9ci5vYnNlcnZlKGUpfSghMCksYX0odSxuKTpudWxsLHA9LTEsaD1udWxsO2wmJihoPW5ldyBSZXNpemVPYnNlcnZlcihlPT57bGV0W3JdPWU7ciYmci50YXJnZXQ9PT11JiZoJiYoaC51bm9ic2VydmUodCksY2FuY2VsQW5pbWF0aW9uRnJhbWUocCkscD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt2YXIgZTtudWxsPT0oZT1oKXx8ZS5vYnNlcnZlKHQpfSkpLG4oKX0pLHUmJiFjJiZoLm9ic2VydmUodSksaC5vYnNlcnZlKHQpKTtsZXQgbT1jP2NpKGUpOm51bGw7cmV0dXJuIGMmJmZ1bmN0aW9uIHQoKXtsZXQgcj1jaShlKTttJiYhY2cobSxyKSYmbigpLG09cixvPXJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX0oKSxuKCksKCk9Pnt2YXIgZTtkLmZvckVhY2goZT0+e2EmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLG4pLGkmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLG4pfSksbnVsbD09Znx8ZigpLG51bGw9PShlPWgpfHxlLmRpc2Nvbm5lY3QoKSxoPW51bGwsYyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUobyl9fXZhciBjdj1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQsY2I9Y3Y/dy51c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIGNBKGUsdCl7bGV0IG4scixvO2lmKGU9PT10KXJldHVybiEwO2lmKHR5cGVvZiBlIT10eXBlb2YgdClyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlLnRvU3RyaW5nKCk9PT10LnRvU3RyaW5nKCkpcmV0dXJuITA7aWYoZSYmdCYmXCJvYmplY3RcIj09dHlwZW9mIGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKChuPWUubGVuZ3RoKSE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihyPW47MCE9ci0tOylpZighY0EoZVtyXSx0W3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1pZigobj0obz1PYmplY3Qua2V5cyhlKSkubGVuZ3RoKSE9PU9iamVjdC5rZXlzKHQpLmxlbmd0aClyZXR1cm4hMTtmb3Iocj1uOzAhPXItLTspaWYoISh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LG9bcl0pKXJldHVybiExO2ZvcihyPW47MCE9ci0tOyl7bGV0IG49b1tyXTtpZigoXCJfb3duZXJcIiE9PW58fCFlLiQkdHlwZW9mKSYmIWNBKGVbbl0sdFtuXSkpcmV0dXJuITF9cmV0dXJuITB9cmV0dXJuIGUhPWUmJnQhPXR9ZnVuY3Rpb24gY3goZSl7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIHdpbmRvdz8xOihlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZGV2aWNlUGl4ZWxSYXRpb3x8MX1mdW5jdGlvbiBjdyhlLHQpe2xldCBuPWN4KGUpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn1mdW5jdGlvbiBjQyhlKXtsZXQgdD13LnVzZVJlZihlKTtyZXR1cm4gY2IoKCk9Pnt0LmN1cnJlbnQ9ZX0pLHR9ZnVuY3Rpb24gY18oZSx0LG4pe2xldCByPVwiaW5saW5lLXN0YXJ0XCI9PT1lfHxcImlubGluZS1lbmRcIj09PWU7cmV0dXJuKHt0b3A6XCJ0b3BcIixyaWdodDpyP24/XCJpbmxpbmUtc3RhcnRcIjpcImlubGluZS1lbmRcIjpcInJpZ2h0XCIsYm90dG9tOlwiYm90dG9tXCIsbGVmdDpyP24/XCJpbmxpbmUtZW5kXCI6XCJpbmxpbmUtc3RhcnRcIjpcImxlZnRcIn0pW3RdfWZ1bmN0aW9uIGNrKGUsdCxuKXtsZXR7cmVjdHM6cixwbGFjZW1lbnQ6b309ZTtyZXR1cm57c2lkZTpjXyh0LGk0KG8pLG4pLGFsaWduOmk1KG8pfHxcImNlbnRlclwiLGFuY2hvcjp7d2lkdGg6ci5yZWZlcmVuY2Uud2lkdGgsaGVpZ2h0OnIucmVmZXJlbmNlLmhlaWdodH0scG9zaXRpb25lcjp7d2lkdGg6ci5mbG9hdGluZy53aWR0aCxoZWlnaHQ6ci5mbG9hdGluZy5oZWlnaHR9fX1mdW5jdGlvbiBjRShlKXt2YXIgdCxuLHIsbyxhO2xldCBpLGwscyxjLHUsZCxmLHAsaCxtLGcseSx2LHthbmNob3I6Yixwb3NpdGlvbk1ldGhvZDpBPVwiYWJzb2x1dGVcIixzaWRlOng9XCJib3R0b21cIixzaWRlT2Zmc2V0OkM9MCxhbGlnbjpfPVwiY2VudGVyXCIsYWxpZ25PZmZzZXQ6az0wLGNvbGxpc2lvbkJvdW5kYXJ5OkUsY29sbGlzaW9uUGFkZGluZzpqPTUsc3RpY2t5OlM9ITEsYXJyb3dQYWRkaW5nOk89NSx0cmFja0FuY2hvcjpCPSEwLGtlZXBNb3VudGVkOlA9ITEsZmxvYXRpbmdSb290Q29udGV4dDpJLG1vdW50ZWQ6VCxjb2xsaXNpb25Bdm9pZGFuY2U6eixzaGlmdENyb3NzQXhpczpEPSExLG5vZGVJZDpMLGFkYXB0aXZlT3JpZ2luOk59PWUsUj16LnNpZGV8fFwiZmxpcFwiLE09ei5hbGlnbnx8XCJmbGlwXCIsWj16LmZhbGxiYWNrQXhpc1NpZGV8fFwiZW5kXCIsVT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBiP2I6dm9pZCAwLEY9YWgoVSkscT1VP0Y6YixIPWEyKGIpLFY9XCJydGxcIj09PWxqKCksJD17dG9wOlwidG9wXCIscmlnaHQ6XCJyaWdodFwiLGJvdHRvbTpcImJvdHRvbVwiLGxlZnQ6XCJsZWZ0XCIsXCJpbmxpbmUtZW5kXCI6Vj9cImxlZnRcIjpcInJpZ2h0XCIsXCJpbmxpbmUtc3RhcnRcIjpWP1wicmlnaHRcIjpcImxlZnRcIn1beF0sVz1cImNlbnRlclwiPT09Xz8kOmAkeyR9LSR7X31gLFk9e2JvdW5kYXJ5OlwiY2xpcHBpbmctYW5jZXN0b3JzXCI9PT1FP1wiY2xpcHBpbmdBbmNlc3RvcnNcIjpFLHBhZGRpbmc6an0sSz13LnVzZVJlZihudWxsKSxYPWEyKEMpLEc9YTIoayksUT1cImZ1bmN0aW9uXCIhPXR5cGVvZiBDP0M6MCxKPVsoaT1lPT57bGV0IHQ9Y2soZSx4LFYpLG49XCJmdW5jdGlvblwiPT10eXBlb2YgWC5jdXJyZW50P1guY3VycmVudCh0KTpYLmN1cnJlbnQscj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBHLmN1cnJlbnQ/Ry5jdXJyZW50KHQpOkcuY3VycmVudDtyZXR1cm57bWFpbkF4aXM6bixjcm9zc0F4aXM6cixhbGlnbm1lbnRBeGlzOnJ9fSxsPVtRLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGs/azowLFYseF0sey4uLih2b2lkIDA9PT0odD1pKSYmKHQ9MCkse25hbWU6XCJvZmZzZXRcIixvcHRpb25zOnQsYXN5bmMgZm4oZSl7dmFyIG4scjtsZXR7eDpvLHk6YSxwbGFjZW1lbnQ6aSxtaWRkbGV3YXJlRGF0YTpsfT1lLHM9YXdhaXQgY2UoZSx0KTtyZXR1cm4gaT09PShudWxsPT0obj1sLm9mZnNldCk/dm9pZCAwOm4ucGxhY2VtZW50KSYmbnVsbCE9KHI9bC5hcnJvdykmJnIuYWxpZ25tZW50T2Zmc2V0P3t9Ont4Om8rcy54LHk6YStzLnksZGF0YTp7Li4ucyxwbGFjZW1lbnQ6aX19fX0pLG9wdGlvbnM6W2ksbF19KV0sZWU9XCJub25lXCI9PT1NJiZcInNoaWZ0XCIhPT1SLGV0PSFlZSYmKFN8fER8fFwic2hpZnRcIj09PVIpLGVuPVwibm9uZVwiPT09Uj9udWxsOnsuLi57bmFtZTpcImZsaXBcIixvcHRpb25zOm49cz17Li4uWSxtYWluQXhpczohRCYmXCJmbGlwXCI9PT1SLGNyb3NzQXhpczpcImZsaXBcIj09PU0mJlwiYWxpZ25tZW50XCIsZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbjpafSxhc3luYyBmbihlKXt2YXIgdCxyLG8sYSxpO2xldHtwbGFjZW1lbnQ6bCxtaWRkbGV3YXJlRGF0YTpzLHJlY3RzOmMsaW5pdGlhbFBsYWNlbWVudDp1LHBsYXRmb3JtOmQsZWxlbWVudHM6Zn09ZSx7bWFpbkF4aXM6cD0hMCxjcm9zc0F4aXM6aD0hMCxmYWxsYmFja1BsYWNlbWVudHM6bSxmYWxsYmFja1N0cmF0ZWd5Omc9XCJiZXN0Rml0XCIsZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbjp5PVwibm9uZVwiLGZsaXBBbGlnbm1lbnQ6dj0hMCwuLi5ifT1pMihuLGUpO2lmKG51bGwhPSh0PXMuYXJyb3cpJiZ0LmFsaWdubWVudE9mZnNldClyZXR1cm57fTtsZXQgQT1pNChsKSx4PWk4KHUpLHc9aTQodSk9PT11LEM9YXdhaXQgKG51bGw9PWQuaXNSVEw/dm9pZCAwOmQuaXNSVEwoZi5mbG9hdGluZykpLF89bXx8KHd8fCF2P1tsbyh1KV06ZnVuY3Rpb24oZSl7bGV0IHQ9bG8oZSk7cmV0dXJuW2k3KGUpLHQsaTcodCldfSh1KSksaz1cIm5vbmVcIiE9PXk7IW0mJmsmJl8ucHVzaCguLi5mdW5jdGlvbihlLHQsbixyKXtsZXQgbz1pNShlKSxhPWZ1bmN0aW9uKGUsdCxuKXtzd2l0Y2goZSl7Y2FzZVwidG9wXCI6Y2FzZVwiYm90dG9tXCI6aWYobilyZXR1cm4gdD9sdDpsZTtyZXR1cm4gdD9sZTpsdDtjYXNlXCJsZWZ0XCI6Y2FzZVwicmlnaHRcIjpyZXR1cm4gdD9sbjpscjtkZWZhdWx0OnJldHVybltdfX0oaTQoZSksXCJzdGFydFwiPT09bixyKTtyZXR1cm4gbyYmKGE9YS5tYXAoZT0+ZStcIi1cIitvKSx0JiYoYT1hLmNvbmNhdChhLm1hcChpNykpKSksYX0odSx2LHksQykpO2xldCBFPVt1LC4uLl9dLGo9YXdhaXQgczYoZSxiKSxTPVtdLE89KG51bGw9PShyPXMuZmxpcCk/dm9pZCAwOnIub3ZlcmZsb3dzKXx8W107aWYocCYmUy5wdXNoKGpbQV0pLGgpe2xldCBlPWZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT1uJiYobj0hMSk7bGV0IHI9aTUoZSksbz1pMyhpOChlKSksYT1pNihvKSxpPVwieFwiPT09bz9yPT09KG4/XCJlbmRcIjpcInN0YXJ0XCIpP1wicmlnaHRcIjpcImxlZnRcIjpcInN0YXJ0XCI9PT1yP1wiYm90dG9tXCI6XCJ0b3BcIjtyZXR1cm4gdC5yZWZlcmVuY2VbYV0+dC5mbG9hdGluZ1thXSYmKGk9bG8oaSkpLFtpLGxvKGkpXX0obCxjLEMpO1MucHVzaChqW2VbMF1dLGpbZVsxXV0pfWlmKE89Wy4uLk8se3BsYWNlbWVudDpsLG92ZXJmbG93czpTfV0sIVMuZXZlcnkoZT0+ZTw9MCkpe2xldCBlPSgobnVsbD09KG89cy5mbGlwKT92b2lkIDA6by5pbmRleCl8fDApKzEsdD1FW2VdO2lmKHQmJihcImFsaWdubWVudFwiIT09aHx8eD09PWk4KHQpfHxPLmV2ZXJ5KGU9Pmk4KGUucGxhY2VtZW50KSE9PXh8fGUub3ZlcmZsb3dzWzBdPjApKSlyZXR1cm57ZGF0YTp7aW5kZXg6ZSxvdmVyZmxvd3M6T30scmVzZXQ6e3BsYWNlbWVudDp0fX07bGV0IG49bnVsbD09KGE9Ty5maWx0ZXIoZT0+ZS5vdmVyZmxvd3NbMF08PTApLnNvcnQoKGUsdCk9PmUub3ZlcmZsb3dzWzFdLXQub3ZlcmZsb3dzWzFdKVswXSk/dm9pZCAwOmEucGxhY2VtZW50O2lmKCFuKXN3aXRjaChnKXtjYXNlXCJiZXN0Rml0XCI6e2xldCBlPW51bGw9PShpPU8uZmlsdGVyKGU9PntpZihrKXtsZXQgdD1pOChlLnBsYWNlbWVudCk7cmV0dXJuIHQ9PT14fHxcInlcIj09PXR9cmV0dXJuITB9KS5tYXAoZT0+W2UucGxhY2VtZW50LGUub3ZlcmZsb3dzLmZpbHRlcihlPT5lPjApLnJlZHVjZSgoZSx0KT0+ZSt0LDApXSkuc29ydCgoZSx0KT0+ZVsxXS10WzFdKVswXSk/dm9pZCAwOmlbMF07ZSYmKG49ZSk7YnJlYWt9Y2FzZVwiaW5pdGlhbFBsYWNlbWVudFwiOm49dX1pZihsIT09bilyZXR1cm57cmVzZXQ6e3BsYWNlbWVudDpufX19cmV0dXJue319fSxvcHRpb25zOltzLGNdfSxlcj1lZT9udWxsOih1PWU9Pnt2YXIgdDtsZXQgbixyLG89bFMoZS5lbGVtZW50cy5mbG9hdGluZykuZG9jdW1lbnRFbGVtZW50O3JldHVybnsuLi5ZLHJvb3RCb3VuZGFyeTpEP3t4OjAseTowLHdpZHRoOm8uY2xpZW50V2lkdGgsaGVpZ2h0Om8uY2xpZW50SGVpZ2h0fTp2b2lkIDAsbWFpbkF4aXM6XCJub25lXCIhPT1NLGNyb3NzQXhpczpldCxsaW1pdGVyOlN8fEQ/dm9pZCAwOnsuLi4odm9pZCAwPT09KHQ9bj0oKT0+e2lmKCFLLmN1cnJlbnQpcmV0dXJue307bGV0e2hlaWdodDplfT1LLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue29mZnNldDplLzIrKFwibnVtYmVyXCI9PXR5cGVvZiBqP2o6MCl9fSkmJih0PXt9KSx7b3B0aW9uczp0LGZuKGUpe2xldHt4Om4seTpyLHBsYWNlbWVudDpvLHJlY3RzOmEsbWlkZGxld2FyZURhdGE6aX09ZSx7b2Zmc2V0Omw9MCxtYWluQXhpczpzPSEwLGNyb3NzQXhpczpjPSEwfT1pMih0LGUpLHU9e3g6bix5OnJ9LGQ9aTgobyksZj1pMyhkKSxwPXVbZl0saD11W2RdLG09aTIobCxlKSxnPVwibnVtYmVyXCI9PXR5cGVvZiBtP3ttYWluQXhpczptLGNyb3NzQXhpczowfTp7bWFpbkF4aXM6MCxjcm9zc0F4aXM6MCwuLi5tfTtpZihzKXtsZXQgZT1cInlcIj09PWY/XCJoZWlnaHRcIjpcIndpZHRoXCIsdD1hLnJlZmVyZW5jZVtmXS1hLmZsb2F0aW5nW2VdK2cubWFpbkF4aXMsbj1hLnJlZmVyZW5jZVtmXSthLnJlZmVyZW5jZVtlXS1nLm1haW5BeGlzO3A8dD9wPXQ6cD5uJiYocD1uKX1pZihjKXt2YXIgeSx2O2xldCBlPVwieVwiPT09Zj9cIndpZHRoXCI6XCJoZWlnaHRcIix0PXM3LmhhcyhpNChvKSksbj1hLnJlZmVyZW5jZVtkXS1hLmZsb2F0aW5nW2VdKyh0JiYobnVsbD09KHk9aS5vZmZzZXQpP3ZvaWQgMDp5W2RdKXx8MCkrKHQ/MDpnLmNyb3NzQXhpcykscj1hLnJlZmVyZW5jZVtkXSthLnJlZmVyZW5jZVtlXSsodD8wOihudWxsPT0odj1pLm9mZnNldCk/dm9pZCAwOnZbZF0pfHwwKS0odD9nLmNyb3NzQXhpczowKTtoPG4/aD1uOmg+ciYmKGg9cil9cmV0dXJue1tmXTpwLFtkXTpofX19KSxvcHRpb25zOltuLHJdfX19LGQ9W1ksUyxELGosTV0sey4uLih2b2lkIDA9PT0ocj11KSYmKHI9e30pLHtuYW1lOlwic2hpZnRcIixvcHRpb25zOnIsYXN5bmMgZm4oZSl7bGV0e3g6dCx5Om4scGxhY2VtZW50Om99PWUse21haW5BeGlzOmE9ITAsY3Jvc3NBeGlzOmk9ITEsbGltaXRlcjpsPXtmbjplPT57bGV0e3g6dCx5Om59PWU7cmV0dXJue3g6dCx5Om59fX0sLi4uc309aTIocixlKSxjPXt4OnQseTpufSx1PWF3YWl0IHM2KGUscyksZD1pOChpNChvKSksZj1pMyhkKSxwPWNbZl0saD1jW2RdO2lmKGEpe2xldCBlPVwieVwiPT09Zj9cInRvcFwiOlwibGVmdFwiLHQ9XCJ5XCI9PT1mP1wiYm90dG9tXCI6XCJyaWdodFwiLG49cCt1W2VdLHI9cC11W3RdO3A9aVgobixpSyhwLHIpKX1pZihpKXtsZXQgZT1cInlcIj09PWQ/XCJ0b3BcIjpcImxlZnRcIix0PVwieVwiPT09ZD9cImJvdHRvbVwiOlwicmlnaHRcIixuPWgrdVtlXSxyPWgtdVt0XTtoPWlYKG4saUsoaCxyKSl9bGV0IG09bC5mbih7Li4uZSxbZl06cCxbZF06aH0pO3JldHVybnsuLi5tLGRhdGE6e3g6bS54LXQseTptLnktbixlbmFibGVkOntbZl06YSxbZF06aX19fX19KSxvcHRpb25zOlt1LGRdfSk7XCJzaGlmdFwiPT09Unx8XCJzaGlmdFwiPT09TXx8XCJjZW50ZXJcIj09PV8/Si5wdXNoKGVyLGVuKTpKLnB1c2goZW4sZXIpLEoucHVzaCh7Li4ue25hbWU6XCJzaXplXCIsb3B0aW9uczpvPWY9ey4uLlksYXBwbHkoe2VsZW1lbnRzOntmbG9hdGluZzplfSxyZWN0czp7cmVmZXJlbmNlOnR9LGF2YWlsYWJsZVdpZHRoOm4sYXZhaWxhYmxlSGVpZ2h0OnJ9KXtPYmplY3QuZW50cmllcyh7XCItLWF2YWlsYWJsZS13aWR0aFwiOmAke259cHhgLFwiLS1hdmFpbGFibGUtaGVpZ2h0XCI6YCR7cn1weGAsXCItLWFuY2hvci13aWR0aFwiOmAke3Qud2lkdGh9cHhgLFwiLS1hbmNob3ItaGVpZ2h0XCI6YCR7dC5oZWlnaHR9cHhgfSkuZm9yRWFjaCgoW3Qsbl0pPT57ZS5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4pfSl9fSxhc3luYyBmbihlKXt2YXIgdCxuO2xldCByLGEse3BsYWNlbWVudDppLHJlY3RzOmwscGxhdGZvcm06cyxlbGVtZW50czpjfT1lLHthcHBseTp1PSgpPT57fSwuLi5kfT1pMihvLGUpLGY9YXdhaXQgczYoZSxkKSxwPWk0KGkpLGg9aTUoaSksbT1cInlcIj09PWk4KGkpLHt3aWR0aDpnLGhlaWdodDp5fT1sLmZsb2F0aW5nO1widG9wXCI9PT1wfHxcImJvdHRvbVwiPT09cD8ocj1wLGE9aD09PShhd2FpdCAobnVsbD09cy5pc1JUTD92b2lkIDA6cy5pc1JUTChjLmZsb2F0aW5nKSk/XCJzdGFydFwiOlwiZW5kXCIpP1wibGVmdFwiOlwicmlnaHRcIik6KGE9cCxyPVwiZW5kXCI9PT1oP1widG9wXCI6XCJib3R0b21cIik7bGV0IHY9eS1mLnRvcC1mLmJvdHRvbSxiPWctZi5sZWZ0LWYucmlnaHQsQT1pSyh5LWZbcl0sdikseD1pSyhnLWZbYV0sYiksdz0hZS5taWRkbGV3YXJlRGF0YS5zaGlmdCxDPUEsXz14O2lmKG51bGwhPSh0PWUubWlkZGxld2FyZURhdGEuc2hpZnQpJiZ0LmVuYWJsZWQueCYmKF89YiksbnVsbCE9KG49ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkmJm4uZW5hYmxlZC55JiYoQz12KSx3JiYhaCl7bGV0IGU9aVgoZi5sZWZ0LDApLHQ9aVgoZi5yaWdodCwwKSxuPWlYKGYudG9wLDApLHI9aVgoZi5ib3R0b20sMCk7bT9fPWctMiooMCE9PWV8fDAhPT10P2UrdDppWChmLmxlZnQsZi5yaWdodCkpOkM9eS0yKigwIT09bnx8MCE9PXI/bityOmlYKGYudG9wLGYuYm90dG9tKSl9YXdhaXQgdSh7Li4uZSxhdmFpbGFibGVXaWR0aDpfLGF2YWlsYWJsZUhlaWdodDpDfSk7bGV0IGs9YXdhaXQgcy5nZXREaW1lbnNpb25zKGMuZmxvYXRpbmcpO3JldHVybiBnIT09ay53aWR0aHx8eSE9PWsuaGVpZ2h0P3tyZXNldDp7cmVjdHM6ITB9fTp7fX19LG9wdGlvbnM6W2YscF19LChoPSgpPT4oe2VsZW1lbnQ6Sy5jdXJyZW50fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHBhZGRpbmc6TyxvZmZzZXRQYXJlbnQ6XCJmbG9hdGluZ1wifSksbT1bT10sey4uLntuYW1lOlwiYXJyb3dcIixvcHRpb25zOmc9aCxhc3luYyBmbihlKXtsZXR7eDp0LHk6bixwbGFjZW1lbnQ6cixyZWN0czpvLHBsYXRmb3JtOmEsZWxlbWVudHM6aSxtaWRkbGV3YXJlRGF0YTpsfT1lLHtlbGVtZW50OnMscGFkZGluZzpjPTAsb2Zmc2V0UGFyZW50OnU9XCJyZWFsXCJ9PWkyKGcsZSl8fHt9O2lmKG51bGw9PXMpcmV0dXJue307bGV0IGQ9bGEoYyksZj17eDp0LHk6bn0scD1pMyhpOChyKSksaD1pNihwKSxtPWF3YWl0IGEuZ2V0RGltZW5zaW9ucyhzKSx5PVwieVwiPT09cCx2PXk/XCJjbGllbnRIZWlnaHRcIjpcImNsaWVudFdpZHRoXCIsYj1vLnJlZmVyZW5jZVtoXStvLnJlZmVyZW5jZVtwXS1mW3BdLW8uZmxvYXRpbmdbaF0sQT1mW3BdLW8ucmVmZXJlbmNlW3BdLHg9XCJyZWFsXCI9PT11P2F3YWl0IGEuZ2V0T2Zmc2V0UGFyZW50Py4ocyk6aS5mbG9hdGluZyx3PWkuZmxvYXRpbmdbdl18fG8uZmxvYXRpbmdbaF07dyYmYXdhaXQgYS5pc0VsZW1lbnQ/Lih4KXx8KHc9aS5mbG9hdGluZ1t2XXx8by5mbG9hdGluZ1toXSk7bGV0IEM9dy8yLW1baF0vMi0xLF89TWF0aC5taW4oZFt5P1widG9wXCI6XCJsZWZ0XCJdLEMpLGs9TWF0aC5taW4oZFt5P1wiYm90dG9tXCI6XCJyaWdodFwiXSxDKSxFPXctbVtoXS1rLGo9dy8yLW1baF0vMisoYi8yLUEvMiksUz1pWChfLGlLKGosRSkpLE89IWwuYXJyb3cmJm51bGwhPWk1KHIpJiZqIT09UyYmby5yZWZlcmVuY2VbaF0vMi0oajxfP186ayktbVtoXS8yPDAsQj1PP2o8Xz9qLV86ai1FOjA7cmV0dXJue1twXTpmW3BdK0IsZGF0YTp7W3BdOlMsY2VudGVyT2Zmc2V0OmotUy1CLC4uLk8mJnthbGlnbm1lbnRPZmZzZXQ6Qn19LHJlc2V0Ok99fX0sb3B0aW9uczpbaCxtXX0pLHsuLi4odm9pZCAwPT09KGE9eSkmJihhPXt9KSx7bmFtZTpcImhpZGVcIixvcHRpb25zOmEsYXN5bmMgZm4oZSl7bGV0e3JlY3RzOnR9PWUse3N0cmF0ZWd5Om49XCJyZWZlcmVuY2VIaWRkZW5cIiwuLi5yfT1pMihhLGUpO3N3aXRjaChuKXtjYXNlXCJyZWZlcmVuY2VIaWRkZW5cIjp7bGV0IG49czkoYXdhaXQgczYoZSx7Li4ucixlbGVtZW50Q29udGV4dDpcInJlZmVyZW5jZVwifSksdC5yZWZlcmVuY2UpO3JldHVybntkYXRhOntyZWZlcmVuY2VIaWRkZW5PZmZzZXRzOm4scmVmZXJlbmNlSGlkZGVuOnM4KG4pfX19Y2FzZVwiZXNjYXBlZFwiOntsZXQgbj1zOShhd2FpdCBzNihlLHsuLi5yLGFsdEJvdW5kYXJ5OiEwfSksdC5mbG9hdGluZyk7cmV0dXJue2RhdGE6e2VzY2FwZWRPZmZzZXRzOm4sZXNjYXBlZDpzOChuKX19fWRlZmF1bHQ6cmV0dXJue319fX0pLG9wdGlvbnM6W3ksdl19LHtuYW1lOlwidHJhbnNmb3JtT3JpZ2luXCIsZm4oZSl7bGV0e2VsZW1lbnRzOnQsbWlkZGxld2FyZURhdGE6bixwbGFjZW1lbnQ6cixyZWN0czpvLHk6YX09ZSxpPWk0KHIpLGw9aTgoaSkscz1LLmN1cnJlbnQsYz1uLmFycm93Py54fHwwLHU9bi5hcnJvdz8ueXx8MCxkPXM/LmNsaWVudFdpZHRofHwwLGY9cz8uY2xpZW50SGVpZ2h0fHwwLHA9YytkLzIsaD11K2YvMixtPU1hdGguYWJzKG4uc2hpZnQ/Lnl8fDApLGc9by5yZWZlcmVuY2UuaGVpZ2h0LzIseT1tPihcImZ1bmN0aW9uXCI9PXR5cGVvZiBDP0MoY2soZSx4LFYpKTpDKSx2PXt0b3A6YCR7cH1weCBjYWxjKDEwMCUgKyAke0N9cHgpYCxib3R0b206YCR7cH1weCAkey1DfXB4YCxsZWZ0OmBjYWxjKDEwMCUgKyAke0N9cHgpICR7aH1weGAscmlnaHQ6YCR7LUN9cHggJHtofXB4YH1baV0sYj1gJHtwfXB4ICR7by5yZWZlcmVuY2UueStnLWF9cHhgO3JldHVybiB0LmZsb2F0aW5nLnN0eWxlLnNldFByb3BlcnR5KFwiLS10cmFuc2Zvcm0tb3JpZ2luXCIsZXQmJlwieVwiPT09bCYmeT9iOnYpLHt9fX0sTik7bGV0IGVvPUk7IVQmJkkmJihlbz17Li4uSSxlbGVtZW50czp7cmVmZXJlbmNlOm51bGwsZmxvYXRpbmc6bnVsbCxkb21SZWZlcmVuY2U6bnVsbH19KTtsZXQgZWE9dy51c2VNZW1vKCgpPT4oe2VsZW1lbnRSZXNpemU6QiYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFJlc2l6ZU9ic2VydmVyLGxheW91dFNoaWZ0OkImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlcn0pLFtCXSkse3JlZnM6ZWksZWxlbWVudHM6ZWwseDplcyx5OmVjLG1pZGRsZXdhcmVEYXRhOmV1LHVwZGF0ZTplZCxwbGFjZW1lbnQ6ZWYsY29udGV4dDplcCxpc1Bvc2l0aW9uZWQ6ZW0sZmxvYXRpbmdTdHlsZXM6ZWd9PWZ1bmN0aW9uKGU9e30pe2xldHtub2RlSWQ6dH09ZSxuPWFCKHsuLi5lLGVsZW1lbnRzOntyZWZlcmVuY2U6bnVsbCxmbG9hdGluZzpudWxsLC4uLmUuZWxlbWVudHN9fSkscj1lLnJvb3RDb250ZXh0fHxuLG89ci5lbGVtZW50cyxbYSxpXT13LnVzZVN0YXRlKG51bGwpLFtsLHNdPXcudXNlU3RhdGUobnVsbCksYz1vPy5kb21SZWZlcmVuY2V8fGEsdT13LnVzZVJlZihudWxsKSxkPWFqKCk7YUMoKCk9PntjJiYodS5jdXJyZW50PWMpfSxbY10pO2xldCBmPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KTtsZXR7cGxhY2VtZW50OnQ9XCJib3R0b21cIixzdHJhdGVneTpuPVwiYWJzb2x1dGVcIixtaWRkbGV3YXJlOnI9W10scGxhdGZvcm06byxlbGVtZW50czp7cmVmZXJlbmNlOmEsZmxvYXRpbmc6aX09e30sdHJhbnNmb3JtOmw9ITAsd2hpbGVFbGVtZW50c01vdW50ZWQ6cyxvcGVuOmN9PWUsW3UsZF09dy51c2VTdGF0ZSh7eDowLHk6MCxzdHJhdGVneTpuLHBsYWNlbWVudDp0LG1pZGRsZXdhcmVEYXRhOnt9LGlzUG9zaXRpb25lZDohMX0pLFtmLHBdPXcudXNlU3RhdGUocik7Y0EoZixyKXx8cChyKTtsZXRbaCxtXT13LnVzZVN0YXRlKG51bGwpLFtnLHldPXcudXNlU3RhdGUobnVsbCksdj13LnVzZUNhbGxiYWNrKGU9PntlIT09Qy5jdXJyZW50JiYoQy5jdXJyZW50PWUsbShlKSl9LFtdKSxiPXcudXNlQ2FsbGJhY2soZT0+e2UhPT1fLmN1cnJlbnQmJihfLmN1cnJlbnQ9ZSx5KGUpKX0sW10pLEE9YXx8aCx4PWl8fGcsQz13LnVzZVJlZihudWxsKSxfPXcudXNlUmVmKG51bGwpLGs9dy51c2VSZWYodSksRT1udWxsIT1zLGo9Y0MocyksUz1jQyhvKSxPPWNDKGMpLEI9dy51c2VDYWxsYmFjaygoKT0+e2lmKCFDLmN1cnJlbnR8fCFfLmN1cnJlbnQpcmV0dXJuO2xldCBlPXtwbGFjZW1lbnQ6dCxzdHJhdGVneTpuLG1pZGRsZXdhcmU6Zn07Uy5jdXJyZW50JiYoZS5wbGF0Zm9ybT1TLmN1cnJlbnQpLCgoZSx0LG4pPT57bGV0IHI9bmV3IE1hcCxvPXtwbGF0Zm9ybTpjbSwuLi5ufSxhPXsuLi5vLnBsYXRmb3JtLF9jOnJ9O3JldHVybiBzMyhlLHQsey4uLm8scGxhdGZvcm06YX0pfSkoQy5jdXJyZW50LF8uY3VycmVudCxlKS50aGVuKGU9PntsZXQgdD17Li4uZSxpc1Bvc2l0aW9uZWQ6ITEhPT1PLmN1cnJlbnR9O1AuY3VycmVudCYmIWNBKGsuY3VycmVudCx0KSYmKGsuY3VycmVudD10LGVoLmZsdXNoU3luYygoKT0+e2QodCl9KSl9KX0sW2YsdCxuLFMsT10pO2NiKCgpPT57ITE9PT1jJiZrLmN1cnJlbnQuaXNQb3NpdGlvbmVkJiYoay5jdXJyZW50LmlzUG9zaXRpb25lZD0hMSxkKGU9Pih7Li4uZSxpc1Bvc2l0aW9uZWQ6ITF9KSkpfSxbY10pO2xldCBQPXcudXNlUmVmKCExKTtjYigoKT0+KFAuY3VycmVudD0hMCwoKT0+e1AuY3VycmVudD0hMX0pLFtdKSxjYigoKT0+e2lmKEEmJihDLmN1cnJlbnQ9QSkseCYmKF8uY3VycmVudD14KSxBJiZ4KXtpZihqLmN1cnJlbnQpcmV0dXJuIGouY3VycmVudChBLHgsQik7QigpfX0sW0EseCxCLGosRV0pO2xldCBJPXcudXNlTWVtbygoKT0+KHtyZWZlcmVuY2U6QyxmbG9hdGluZzpfLHNldFJlZmVyZW5jZTp2LHNldEZsb2F0aW5nOmJ9KSxbdixiXSksVD13LnVzZU1lbW8oKCk9Pih7cmVmZXJlbmNlOkEsZmxvYXRpbmc6eH0pLFtBLHhdKSx6PXcudXNlTWVtbygoKT0+e2xldCBlPXtwb3NpdGlvbjpuLGxlZnQ6MCx0b3A6MH07aWYoIVQuZmxvYXRpbmcpcmV0dXJuIGU7bGV0IHQ9Y3coVC5mbG9hdGluZyx1LngpLHI9Y3coVC5mbG9hdGluZyx1LnkpO3JldHVybiBsP3suLi5lLHRyYW5zZm9ybTpcInRyYW5zbGF0ZShcIit0K1wicHgsIFwiK3IrXCJweClcIiwuLi5jeChULmZsb2F0aW5nKT49MS41JiZ7d2lsbENoYW5nZTpcInRyYW5zZm9ybVwifX06e3Bvc2l0aW9uOm4sbGVmdDp0LHRvcDpyfX0sW24sbCxULmZsb2F0aW5nLHUueCx1LnldKTtyZXR1cm4gdy51c2VNZW1vKCgpPT4oey4uLnUsdXBkYXRlOkIscmVmczpJLGVsZW1lbnRzOlQsZmxvYXRpbmdTdHlsZXM6en0pLFt1LEIsSSxULHpdKX0oey4uLmUsZWxlbWVudHM6ey4uLm8sLi4ubCYme3JlZmVyZW5jZTpsfX19KSxwPXcudXNlQ2FsbGJhY2soZT0+e2xldCB0PWFMKGUpP3tnZXRCb3VuZGluZ0NsaWVudFJlY3Q6KCk9PmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZ2V0Q2xpZW50UmVjdHM6KCk9PmUuZ2V0Q2xpZW50UmVjdHMoKSxjb250ZXh0RWxlbWVudDplfTplO3ModCksZi5yZWZzLnNldFJlZmVyZW5jZSh0KX0sW2YucmVmc10pLGg9dy51c2VDYWxsYmFjayhlPT57KGFMKGUpfHxudWxsPT09ZSkmJih1LmN1cnJlbnQ9ZSxpKGUpKSwoYUwoZi5yZWZzLnJlZmVyZW5jZS5jdXJyZW50KXx8bnVsbD09PWYucmVmcy5yZWZlcmVuY2UuY3VycmVudHx8bnVsbCE9PWUmJiFhTChlKSkmJmYucmVmcy5zZXRSZWZlcmVuY2UoZSl9LFtmLnJlZnNdKSxtPXcudXNlTWVtbygoKT0+KHsuLi5mLnJlZnMsc2V0UmVmZXJlbmNlOmgsc2V0UG9zaXRpb25SZWZlcmVuY2U6cCxkb21SZWZlcmVuY2U6dX0pLFtmLnJlZnMsaCxwXSksZz13LnVzZU1lbW8oKCk9Pih7Li4uZi5lbGVtZW50cyxkb21SZWZlcmVuY2U6Y30pLFtmLmVsZW1lbnRzLGNdKSx5PXcudXNlTWVtbygoKT0+KHsuLi5mLC4uLnIscmVmczptLGVsZW1lbnRzOmcsbm9kZUlkOnR9KSxbZixtLGcsdCxyXSk7cmV0dXJuIGFDKCgpPT57ci5kYXRhUmVmLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0PXk7bGV0IGU9ZD8ubm9kZXNSZWYuY3VycmVudC5maW5kKGU9PmUuaWQ9PT10KTtlJiYoZS5jb250ZXh0PXkpfSksdy51c2VNZW1vKCgpPT4oey4uLmYsY29udGV4dDp5LHJlZnM6bSxlbGVtZW50czpnfSksW2YsbSxnLHldKX0oe3Jvb3RDb250ZXh0OmVvLHBsYWNlbWVudDpXLG1pZGRsZXdhcmU6SixzdHJhdGVneTpBLHdoaWxlRWxlbWVudHNNb3VudGVkOlA/dm9pZCAwOiguLi5lKT0+Y3koLi4uZSxlYSksbm9kZUlkOkx9KSx7c2lkZVg6ZXksc2lkZVk6ZXZ9PWV1LmFkYXB0aXZlT3JpZ2lufHx7fSxlYj13LnVzZU1lbW8oKCk9Pk4/e3Bvc2l0aW9uOkEsW2V5XTpgJHtlc31weGAsW2V2XTpgJHtlY31weGB9OmVnLFtOLGV5LGV2LEEsZXMsZWMsZWddKSxlQT13LnVzZVJlZihudWxsKTthQygoKT0+e2lmKCFUKXJldHVybjtsZXQgZT1ILmN1cnJlbnQsdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UoKTplLG49KGNqKHQpP3QuY3VycmVudDp0KXx8bnVsbDtuIT09ZUEuY3VycmVudCYmKGVpLnNldFBvc2l0aW9uUmVmZXJlbmNlKG4pLGVBLmN1cnJlbnQ9bil9LFtULGVpLHEsSF0pLHcudXNlRWZmZWN0KCgpPT57aWYoIVQpcmV0dXJuO2xldCBlPUguY3VycmVudDtcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZjaihlKSYmZS5jdXJyZW50IT09ZUEuY3VycmVudCYmKGVpLnNldFBvc2l0aW9uUmVmZXJlbmNlKGUuY3VycmVudCksZUEuY3VycmVudD1lLmN1cnJlbnQpfSxbVCxlaSxxLEhdKSx3LnVzZUVmZmVjdCgoKT0+e2lmKFAmJlQmJmVsLmRvbVJlZmVyZW5jZSYmZWwuZmxvYXRpbmcpcmV0dXJuIGN5KGVsLmRvbVJlZmVyZW5jZSxlbC5mbG9hdGluZyxlZCxlYSl9LFtQLFQsZWwsZWQsZWFdKTtsZXQgZXg9Y18oeCxpNChlZiksViksZXc9aTUoZWYpfHxcImNlbnRlclwiLGVDPSEhZXUuaGlkZT8ucmVmZXJlbmNlSGlkZGVuLGVfPXcudXNlTWVtbygoKT0+KHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOmV1LmFycm93Py55LGxlZnQ6ZXUuYXJyb3c/Lnh9KSxbZXUuYXJyb3ddKSxlaz1ldS5hcnJvdz8uY2VudGVyT2Zmc2V0IT09MDtyZXR1cm4gdy51c2VNZW1vKCgpPT4oe3Bvc2l0aW9uZXJTdHlsZXM6ZWIsYXJyb3dTdHlsZXM6ZV8sYXJyb3dSZWY6SyxhcnJvd1VuY2VudGVyZWQ6ZWssc2lkZTpleCxhbGlnbjpldyxhbmNob3JIaWRkZW46ZUMscmVmczplaSxjb250ZXh0OmVwLGlzUG9zaXRpb25lZDplbSx1cGRhdGU6ZWR9KSxbZWIsZV8sSyxlayxleCxldyxlQyxlaSxlcCxlbSxlZF0pfWZ1bmN0aW9uIGNqKGUpe3JldHVybiBudWxsIT1lJiZcImN1cnJlbnRcImluIGV9ZnVuY3Rpb24gY1MoZSl7bGV0e2NoaWxkcmVuOnQsZWxlbWVudHNSZWY6bixsYWJlbHNSZWY6cixvbk1hcENoYW5nZTpvfT1lLGE9dy51c2VSZWYoMCksaT1hbChjQikuY3VycmVudCxsPWFsKGNPKS5jdXJyZW50LFtzLGNdPXcudXNlU3RhdGUoMCksdT13LnVzZVJlZihzKSxkPWFoKChlLHQpPT57bC5zZXQoZSx0Pz9udWxsKSx1LmN1cnJlbnQrPTEsYyh1LmN1cnJlbnQpfSksZj1haChlPT57bC5kZWxldGUoZSksdS5jdXJyZW50Kz0xLGModS5jdXJyZW50KX0pLHA9dy51c2VNZW1vKCgpPT57bGV0IGU9bmV3IE1hcDtyZXR1cm4gQXJyYXkuZnJvbShsLmtleXMoKSkuc29ydChjUCkuZm9yRWFjaCgodCxuKT0+e2xldCByPWwuZ2V0KHQpPz97fTtlLnNldCh0LHsuLi5yLGluZGV4Om59KX0pLGV9LFtsLHNdKTthQygoKT0+e3UuY3VycmVudD09PXMmJihuLmN1cnJlbnQubGVuZ3RoIT09cC5zaXplJiYobi5jdXJyZW50Lmxlbmd0aD1wLnNpemUpLHImJnIuY3VycmVudC5sZW5ndGghPT1wLnNpemUmJihyLmN1cnJlbnQubGVuZ3RoPXAuc2l6ZSkpLG8/LihwKX0sW28scCxuLHIscyx1XSk7bGV0IGg9YWgoZT0+KGkuYWRkKGUpLCgpPT57aS5kZWxldGUoZSl9KSk7YUMoKCk9PntpLmZvckVhY2goZT0+ZShwKSl9LFtpLHBdKTtsZXQgbT13LnVzZU1lbW8oKCk9Pih7cmVnaXN0ZXI6ZCx1bnJlZ2lzdGVyOmYsc3Vic2NyaWJlTWFwQ2hhbmdlOmgsZWxlbWVudHNSZWY6bixsYWJlbHNSZWY6cixuZXh0SW5kZXhSZWY6YX0pLFtkLGYsaCxuLHIsYV0pO3JldHVybigwLEEuanN4KShzYy5Qcm92aWRlcix7dmFsdWU6bSxjaGlsZHJlbjp0fSl9ZnVuY3Rpb24gY08oKXtyZXR1cm4gbmV3IE1hcH1mdW5jdGlvbiBjQigpe3JldHVybiBuZXcgU2V0fWZ1bmN0aW9uIGNQKGUsdCl7bGV0IG49ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KTtyZXR1cm4gbiZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lOR3x8biZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWT8tMTpuJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HfHxuJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlM/MTowfWxldCBjST13LmZvcndhcmRSZWYoZnVuY3Rpb24oZSx0KXtsZXQgbix7Y3V0b3V0OnIsLi4ub309ZTtpZihyKXtsZXQgZT1yPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtuPWBwb2x5Z29uKFxuICAgICAgMCUgMCUsXG4gICAgICAxMDAlIDAlLFxuICAgICAgMTAwJSAxMDAlLFxuICAgICAgMCUgMTAwJSxcbiAgICAgIDAlIDAlLFxuICAgICAgJHtlLmxlZnR9cHggJHtlLnRvcH1weCxcbiAgICAgICR7ZS5sZWZ0fXB4ICR7ZS5ib3R0b219cHgsXG4gICAgICAke2UucmlnaHR9cHggJHtlLmJvdHRvbX1weCxcbiAgICAgICR7ZS5yaWdodH1weCAke2UudG9wfXB4LFxuICAgICAgJHtlLmxlZnR9cHggJHtlLnRvcH1weFxuICAgIClgfXJldHVybigwLEEuanN4KShcImRpdlwiLHtyZWY6dCxyb2xlOlwicHJlc2VudGF0aW9uXCIsXCJkYXRhLWJhc2UtdWktaW5lcnRcIjpcIlwiLC4uLm8sc3R5bGU6e3Bvc2l0aW9uOlwiZml4ZWRcIixpbnNldDowLHVzZXJTZWxlY3Q6XCJub25lXCIsV2Via2l0VXNlclNlbGVjdDpcIm5vbmVcIixjbGlwUGF0aDpufX0pfSksY1Q9dy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7dmFyIG47bGV0e2FuY2hvcjpyLHBvc2l0aW9uTWV0aG9kOm89XCJhYnNvbHV0ZVwiLGNsYXNzTmFtZTphLHJlbmRlcjppLHNpZGU6bCxhbGlnbjpzLHNpZGVPZmZzZXQ6Yz0wLGFsaWduT2Zmc2V0OnU9MCxjb2xsaXNpb25Cb3VuZGFyeTpkPVwiY2xpcHBpbmctYW5jZXN0b3JzXCIsY29sbGlzaW9uUGFkZGluZzpmPTUsYXJyb3dQYWRkaW5nOnA9NSxzdGlja3k6aD0hMSx0cmFja0FuY2hvcjptPSEwLGNvbGxpc2lvbkF2b2lkYW5jZTpnPWlGLC4uLnl9PWUse29wZW46dixzZXRPcGVuOmIsZmxvYXRpbmdSb290Q29udGV4dDp4LHNldFBvc2l0aW9uZXJFbGVtZW50OkMsaXRlbURvbUVsZW1lbnRzOl8saXRlbUxhYmVsczprLG1vdW50ZWQ6RSxtb2RhbDpqLGxhc3RPcGVuQ2hhbmdlUmVhc29uOlMscGFyZW50Ok8sc2V0SG92ZXJFbmFibGVkOkIsdHJpZ2dlckVsZW1lbnQ6UH09bHcoKSxJPWZ1bmN0aW9uKCl7bGV0IGU9dy51c2VDb250ZXh0KHMxKTtpZih2b2lkIDA9PT1lKXRocm93IEVycm9yKFwiQmFzZSBVSTogPE1lbnUuUG9ydGFsPiBpcyBtaXNzaW5nLlwiKTtyZXR1cm4gZX0oKSxUPWZ1bmN0aW9uKGUpe2xldCB0PWF4KCksbj1haigpLHI9YUUoKSxvPXI7cmV0dXJuIGFDKCgpPT57aWYoIXQpcmV0dXJuO2xldCBlPXtpZDp0LHBhcmVudElkOm99O3JldHVybiBuPy5hZGROb2RlKGUpLCgpPT57bj8ucmVtb3ZlTm9kZShlKX19LFtuLHQsb10pLHR9KCksej1hRSgpLEQ9bE4oITApLEw9cixOPWMsUj11LE09cztcImNvbnRleHQtbWVudVwiPT09Ty50eXBlJiYoTD1PLmNvbnRleHQ/LmFuY2hvcj8/cixNPWUuYWxpZ24/P1wic3RhcnRcIixSPWUuYWxpZ25PZmZzZXQ/PzIsTj1lLnNpZGVPZmZzZXQ/Py01KTtsZXQgWj1sLFU9TTtcIm1lbnVcIj09PU8udHlwZT8oWj1aPz9cImlubGluZS1lbmRcIixVPVU/P1wic3RhcnRcIik6XCJtZW51YmFyXCI9PT1PLnR5cGUmJihaPVo/P1wiYm90dG9tXCIsVT1VPz9cInN0YXJ0XCIpO2xldCBGPVwiY29udGV4dC1tZW51XCI9PT1PLnR5cGUscT1jRSh7YW5jaG9yOkwsZmxvYXRpbmdSb290Q29udGV4dDp4LHBvc2l0aW9uTWV0aG9kOkQ/XCJmaXhlZFwiOm8sbW91bnRlZDpFLHNpZGU6WixzaWRlT2Zmc2V0Ok4sYWxpZ246VSxhbGlnbk9mZnNldDpSLGFycm93UGFkZGluZzpGPzA6cCxjb2xsaXNpb25Cb3VuZGFyeTpkLGNvbGxpc2lvblBhZGRpbmc6ZixzdGlja3k6aCxub2RlSWQ6VCxrZWVwTW91bnRlZDpJLHRyYWNrQW5jaG9yOm0sY29sbGlzaW9uQXZvaWRhbmNlOmcsc2hpZnRDcm9zc0F4aXM6Rn0pLHtldmVudHM6SH09YWooKSxWPXcudXNlTWVtbygoKT0+e2xldCBlPXt9O3JldHVybiB2fHwoZS5wb2ludGVyRXZlbnRzPVwibm9uZVwiKSx7cm9sZTpcInByZXNlbnRhdGlvblwiLGhpZGRlbjohRSxzdHlsZTp7Li4ucS5wb3NpdGlvbmVyU3R5bGVzLC4uLmV9fX0sW3YsRSxxLnBvc2l0aW9uZXJTdHlsZXNdKTt3LnVzZUVmZmVjdCgoKT0+e2Z1bmN0aW9uIGUoZSl7ZS5vcGVuPyhlLnBhcmVudE5vZGVJZD09PVQmJkIoITEpLGUubm9kZUlkIT09VCYmZS5wYXJlbnROb2RlSWQ9PT16JiZiKCExLHZvaWQgMCxcInNpYmxpbmctb3BlblwiKSk6ZS5wYXJlbnROb2RlSWQ9PT1UJiZCKCEwKX1yZXR1cm4gSC5vbihcIm9wZW5jaGFuZ2VcIixlKSwoKT0+e0gub2ZmKFwib3BlbmNoYW5nZVwiLGUpfX0sW0gsVCx6LGIsQl0pLHcudXNlRWZmZWN0KCgpPT57SC5lbWl0KFwib3BlbmNoYW5nZVwiLHtvcGVuOnYsbm9kZUlkOlQscGFyZW50Tm9kZUlkOnp9KX0sW0gsdixULHpdKTtsZXQgJD13LnVzZU1lbW8oKCk9Pih7b3Blbjp2LHNpZGU6cS5zaWRlLGFsaWduOnEuYWxpZ24sYW5jaG9ySGlkZGVuOnEuYW5jaG9ySGlkZGVuLG5lc3RlZDpcIm1lbnVcIj09PU8udHlwZX0pLFt2LHEuc2lkZSxxLmFsaWduLHEuYW5jaG9ySGlkZGVuLE8udHlwZV0pLFc9dy51c2VNZW1vKCgpPT4oe3NpZGU6cS5zaWRlLGFsaWduOnEuYWxpZ24sYXJyb3dSZWY6cS5hcnJvd1JlZixhcnJvd1VuY2VudGVyZWQ6cS5hcnJvd1VuY2VudGVyZWQsYXJyb3dTdHlsZXM6cS5hcnJvd1N0eWxlcyxmbG9hdGluZ0NvbnRleHQ6cS5jb250ZXh0fSksW3Euc2lkZSxxLmFsaWduLHEuYXJyb3dSZWYscS5hcnJvd1VuY2VudGVyZWQscS5hcnJvd1N0eWxlcyxxLmNvbnRleHRdKSxZPXNvKFwiZGl2XCIsZSx7c3RhdGU6JCxjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnNuLHJlZjpbdCxDXSxwcm9wczp7Li4uViwuLi55fX0pLEs9RSYmXCJtZW51XCIhPT1PLnR5cGUmJihcIm1lbnViYXJcIiE9PU8udHlwZSYmaiYmXCJ0cmlnZ2VyLWhvdmVyXCIhPT1TfHxcIm1lbnViYXJcIj09PU8udHlwZSYmTy5jb250ZXh0Lm1vZGFsKSxYPW51bGw7cmV0dXJuXCJtZW51YmFyXCI9PT1PLnR5cGU/WD1PLmNvbnRleHQuY29udGVudEVsZW1lbnQ6dm9pZCAwPT09Ty50eXBlJiYoWD1QKSwoMCxBLmpzeHMpKHM0LlByb3ZpZGVyLHt2YWx1ZTpXLGNoaWxkcmVuOltLJiYoMCxBLmpzeCkoY0kse3JlZjpcImNvbnRleHQtbWVudVwiPT09Ty50eXBlfHxcIm5lc3RlZC1jb250ZXh0LW1lbnVcIj09PU8udHlwZT9PLmNvbnRleHQuaW50ZXJuYWxCYWNrZHJvcFJlZjpudWxsLGluZXJ0OihuPSF2LHNyPj0xOT9uOm4/XCJ0cnVlXCI6dm9pZCAwKSxjdXRvdXQ6WH0pLCgwLEEuanN4KShhUyx7aWQ6VCxjaGlsZHJlbjooMCxBLmpzeCkoY1Mse2VsZW1lbnRzUmVmOl8sbGFiZWxzUmVmOmssY2hpbGRyZW46WX0pfSldfSl9KSxjej17aW5lcnQ6bmV3IFdlYWtNYXAsXCJhcmlhLWhpZGRlblwiOm5ldyBXZWFrTWFwLG5vbmU6bmV3IFdlYWtNYXB9O2Z1bmN0aW9uIGNEKGUpe3JldHVyblwiaW5lcnRcIj09PWU/Y3ouaW5lcnQ6XCJhcmlhLWhpZGRlblwiPT09ZT9jeltcImFyaWEtaGlkZGVuXCJdOmN6Lm5vbmV9bGV0IGNMPW5ldyBXZWFrU2V0LGNOPXt9LGNSPTAsY009ZT0+ZSYmKGUuaG9zdHx8Y00oZS5wYXJlbnROb2RlKSksY1o9W107ZnVuY3Rpb24gY1UoKXtjWj1jWi5maWx0ZXIoZT0+ZS5pc0Nvbm5lY3RlZCl9ZnVuY3Rpb24gY0YoKXtyZXR1cm4gY1UoKSxjWltjWi5sZW5ndGgtMV19ZnVuY3Rpb24gY3EoZSx0KXtpZighdC5jdXJyZW50LmluY2x1ZGVzKFwiZmxvYXRpbmdcIikmJiFlLmdldEF0dHJpYnV0ZShcInJvbGVcIik/LmluY2x1ZGVzKFwiZGlhbG9nXCIpKXJldHVybjtsZXQgbj1zcSgpLHI9c1UoZSxuKS5maWx0ZXIoZT0+e2xldCB0PWUuZ2V0QXR0cmlidXRlKFwiZGF0YS10YWJpbmRleFwiKXx8XCJcIjtyZXR1cm4gc0YoZSxuKXx8ZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLXRhYmluZGV4XCIpJiYhdC5zdGFydHNXaXRoKFwiLVwiKX0pLG89ZS5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKTt0LmN1cnJlbnQuaW5jbHVkZXMoXCJmbG9hdGluZ1wiKXx8MD09PXIubGVuZ3RoP1wiMFwiIT09byYmZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiMFwiKTooXCItMVwiIT09b3x8ZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLXRhYmluZGV4XCIpJiZcIi0xXCIhPT1lLmdldEF0dHJpYnV0ZShcImRhdGEtdGFiaW5kZXhcIikpJiYoZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLXRhYmluZGV4XCIsXCItMVwiKSl9ZnVuY3Rpb24gY0goZSl7bGV0e2NvbnRleHQ6dCxjaGlsZHJlbjpuLGRpc2FibGVkOnI9ITEsb3JkZXI6bz1bXCJjb250ZW50XCJdLGluaXRpYWxGb2N1czphPTAscmV0dXJuRm9jdXM6aT0hMCxyZXN0b3JlRm9jdXM6bD0hMSxtb2RhbDpzPSEwLGNsb3NlT25Gb2N1c091dDpjPSEwLGdldEluc2lkZUVsZW1lbnRzOnU9KCk9PltdfT1lLHtvcGVuOmQsb25PcGVuQ2hhbmdlOmYsZXZlbnRzOnAsZGF0YVJlZjpoLGVsZW1lbnRzOntkb21SZWZlcmVuY2U6bSxmbG9hdGluZzpnfX09dCx5PWFoKCgpPT5oLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0Py5ub2RlSWQpLHY9YWgodSksYj1cIm51bWJlclwiPT10eXBlb2YgYSYmYTwwLHg9aUMobSkmJmIsQz1hMihvKSxfPWEyKGEpLGs9YTIoaSksRT1haigpLGo9c0coKSxTPXcudXNlUmVmKG51bGwpLE89dy51c2VSZWYobnVsbCksQj13LnVzZVJlZighMSksUD13LnVzZVJlZighMSksST13LnVzZVJlZigtMSksVD1hZCgpLHo9bnVsbCE9aixEPWlfKGcpLEw9YWgoKGU9RCk9PmU/c1ooZSxzcSgpKTpbXSksTj1haChlPT57bGV0IHQ9TChlKTtyZXR1cm4gQy5jdXJyZW50Lm1hcCgoKT0+dCkuZmlsdGVyKEJvb2xlYW4pLmZsYXQoKX0pO3cudXNlRWZmZWN0KCgpPT57aWYocnx8IXMpcmV0dXJuO2Z1bmN0aW9uIGUoZSl7XCJUYWJcIj09PWUua2V5JiZpdihELGl5KGl4KEQpKSkmJjA9PT1MKCkubGVuZ3RoJiYheCYmaWEoZSl9bGV0IHQ9aXgoRCk7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKSwoKT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKX19LFtyLG0sRCxzLEMseCxMLE5dKSx3LnVzZUVmZmVjdCgoKT0+e2lmKCFyJiZnKXJldHVybiBnLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsZSksKCk9PntnLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsZSl9O2Z1bmN0aW9uIGUoZSl7bGV0IHQ9aWIoZSksbj1MKCkuaW5kZXhPZih0KTstMSE9PW4mJihJLmN1cnJlbnQ9bil9fSxbcixnLExdKSx3LnVzZUVmZmVjdCgoKT0+e2lmKHJ8fCFjKXJldHVybjtmdW5jdGlvbiBlKCl7UC5jdXJyZW50PSEwfWZ1bmN0aW9uIHQoZSl7bGV0IHQ9ZS5yZWxhdGVkVGFyZ2V0LG49ZS5jdXJyZW50VGFyZ2V0LHI9aWIoZSk7cXVldWVNaWNyb3Rhc2soKCk9PntsZXQgbz15KCksYT0hKGl2KG0sdCl8fGl2KGcsdCl8fGl2KHQsZyl8fGl2KGo/LnBvcnRhbE5vZGUsdCl8fHQ/Lmhhc0F0dHJpYnV0ZShpayhcImZvY3VzLWd1YXJkXCIpKXx8RSYmKGlCKEUubm9kZXNSZWYuY3VycmVudCxvKS5maW5kKGU9Pml2KGUuY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcsdCl8fGl2KGUuY29udGV4dD8uZWxlbWVudHMuZG9tUmVmZXJlbmNlLHQpKXx8aVAoRS5ub2Rlc1JlZi5jdXJyZW50LG8pLmZpbmQoZT0+W2UuY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcsaV8oZS5jb250ZXh0Py5lbGVtZW50cy5mbG9hdGluZyldLmluY2x1ZGVzKHQpfHxlLmNvbnRleHQ/LmVsZW1lbnRzLmRvbVJlZmVyZW5jZT09PXQpKSk7aWYobj09PW0mJkQmJmNxKEQsQyksbCYmbiE9PW0mJiFyPy5pc0Nvbm5lY3RlZCYmaXkoaXgoRCkpPT09aXgoRCkuYm9keSl7YU4oRCkmJkQuZm9jdXMoKTtsZXQgZT1JLmN1cnJlbnQsdD1MKCksbj10W2VdfHx0W3QubGVuZ3RoLTFdfHxEO2FOKG4pJiZuLmZvY3VzKCl9aWYoaC5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZSl7aC5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZT0hMTtyZXR1cm59aWYoUC5jdXJyZW50KXtQLmN1cnJlbnQ9ITE7cmV0dXJufSh4fHwhcykmJnQmJmEmJnQhPT1jRigpJiYoQi5jdXJyZW50PSEwLGYoITEsZSxcImZvY3VzLW91dFwiKSl9KX1sZXQgbj0hISghRSYmaik7ZnVuY3Rpb24gbygpe2guY3VycmVudC5pbnNpZGVSZWFjdFRyZWU9ITAsVC5zdGFydCgwLCgpPT57aC5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZT0hMX0pfWlmKGcmJmFOKG0pKXJldHVybiBtLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLHQpLG0uYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsZSksZy5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIix0KSxuJiZnLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLG8sITApLCgpPT57bS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIix0KSxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLGUpLGcucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsdCksbiYmZy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIixvLCEwKX19LFtyLG0sZyxELHMsRSxqLGYsYyxsLEwseCx5LEMsaCxUXSk7bGV0IFI9dy51c2VSZWYobnVsbCksTT13LnVzZVJlZihudWxsKSxaPWxYKFIsaj8uYmVmb3JlSW5zaWRlUmVmKSxVPWxYKE0saj8uYWZ0ZXJJbnNpZGVSZWYpO3cudXNlRWZmZWN0KCgpPT57aWYocnx8IWcpcmV0dXJuO2xldCBlPUFycmF5LmZyb20oaj8ucG9ydGFsTm9kZT8ucXVlcnlTZWxlY3RvckFsbChgWyR7aWsoXCJwb3J0YWxcIil9XWApfHxbXSksdD1FP2lQKEUubm9kZXNSZWYuY3VycmVudCx5KCkpOltdLG49ZnVuY3Rpb24oZSx0PSExLG49ITEpe2xldCByPWl4KGVbMF0pLmJvZHk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe2xldCBvLGE9XCJkYXRhLWJhc2UtdWktaW5lcnRcIixpPXI/XCJpbmVydFwiOm4/XCJhcmlhLWhpZGRlblwiOm51bGwsbD0obz10LGUubWFwKGU9PntpZihvLmNvbnRhaW5zKGUpKXJldHVybiBlO2xldCB0PWNNKGUpO3JldHVybiBvLmNvbnRhaW5zKHQpP3Q6bnVsbH0pLmZpbHRlcihlPT5udWxsIT1lKSkscz1uZXcgU2V0LGM9bmV3IFNldChsKSx1PVtdO2NOW2FdfHwoY05bYV09bmV3IFdlYWtNYXApO2xldCBkPWNOW2FdO3JldHVybiBsLmZvckVhY2goZnVuY3Rpb24gZSh0KXshKCF0fHxzLmhhcyh0KSkmJihzLmFkZCh0KSx0LnBhcmVudE5vZGUmJmUodC5wYXJlbnROb2RlKSl9KSxmdW5jdGlvbiBlKHQpeyF0fHxjLmhhcyh0KXx8W10uZm9yRWFjaC5jYWxsKHQuY2hpbGRyZW4sdD0+e2lmKFwic2NyaXB0XCIhPT1hSSh0KSlpZihzLmhhcyh0KSllKHQpO2Vsc2V7bGV0IGU9aT90LmdldEF0dHJpYnV0ZShpKTpudWxsLG49bnVsbCE9PWUmJlwiZmFsc2VcIiE9PWUscj1jRChpKSxvPShyLmdldCh0KXx8MCkrMSxsPShkLmdldCh0KXx8MCkrMTtyLnNldCh0LG8pLGQuc2V0KHQsbCksdS5wdXNoKHQpLDE9PT1vJiZuJiZjTC5hZGQodCksMT09PWwmJnQuc2V0QXR0cmlidXRlKGEsXCJcIiksIW4mJmkmJnQuc2V0QXR0cmlidXRlKGksXCJpbmVydFwiPT09aT9cIlwiOlwidHJ1ZVwiKX19KX0odCkscy5jbGVhcigpLGNSKz0xLCgpPT57dS5mb3JFYWNoKGU9PntsZXQgdD1jRChpKSxuPSh0LmdldChlKXx8MCktMSxyPShkLmdldChlKXx8MCktMTt0LnNldChlLG4pLGQuc2V0KGUsciksbnx8KCFjTC5oYXMoZSkmJmkmJmUucmVtb3ZlQXR0cmlidXRlKGkpLGNMLmRlbGV0ZShlKSkscnx8ZS5yZW1vdmVBdHRyaWJ1dGUoYSl9KSwoY1ItPTEpfHwoY3ouaW5lcnQ9bmV3IFdlYWtNYXAsY3pbXCJhcmlhLWhpZGRlblwiXT1uZXcgV2Vha01hcCxjei5ub25lPW5ldyBXZWFrTWFwLGNMPW5ldyBXZWFrU2V0LGNOPXt9KX19KGUuY29uY2F0KEFycmF5LmZyb20oci5xdWVyeVNlbGVjdG9yQWxsKFwiW2FyaWEtbGl2ZV1cIikpKSxyLHQsbil9KFtnLHQuZmluZChlPT5pQyhlLmNvbnRleHQ/LmVsZW1lbnRzLmRvbVJlZmVyZW5jZXx8bnVsbCkpPy5jb250ZXh0Py5lbGVtZW50cy5kb21SZWZlcmVuY2UsLi4uZSwuLi52KCksUy5jdXJyZW50LE8uY3VycmVudCxSLmN1cnJlbnQsTS5jdXJyZW50LGo/LmJlZm9yZU91dHNpZGVSZWYuY3VycmVudCxqPy5hZnRlck91dHNpZGVSZWYuY3VycmVudCx4P206bnVsbF0uZmlsdGVyKGU9Pm51bGwhPWUpLHN8fHgpO3JldHVybigpPT57bigpfX0sW3IsbSxnLHMsQyxqLHgsRSx5LHZdKSxhQygoKT0+e2lmKHJ8fCFhTihEKSlyZXR1cm47bGV0IGU9aXkoaXgoRCkpO3F1ZXVlTWljcm90YXNrKCgpPT57bGV0IHQ9TihEKSxuPV8uY3VycmVudCxyPShcIm51bWJlclwiPT10eXBlb2Ygbj90W25dOm4uY3VycmVudCl8fEQsbz1pdihELGUpO2J8fG98fCFkfHxsaChyLHtwcmV2ZW50U2Nyb2xsOnI9PT1EfSl9KX0sW3IsZCxELGIsTixfXSksYUMoKCk9Pnt2YXIgZTtpZihyfHwhRClyZXR1cm47bGV0IHQ9aXgoRCk7ZnVuY3Rpb24gbih7cmVhc29uOmUsZXZlbnQ6dCxuZXN0ZWQ6bn0pe2lmKFtcImhvdmVyXCIsXCJzYWZlLXBvbHlnb25cIl0uaW5jbHVkZXMoZSkmJlwibW91c2VsZWF2ZVwiPT09dC50eXBlJiYoQi5jdXJyZW50PSEwKSxcIm91dHNpZGUtcHJlc3NcIj09PWUpaWYobilCLmN1cnJlbnQ9ITE7ZWxzZSBpZihpaSh0KXx8aWwodCkpQi5jdXJyZW50PSExO2Vsc2V7bGV0IGU9ITE7ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5mb2N1cyh7Z2V0IHByZXZlbnRTY3JvbGwoKXtyZXR1cm4gZT0hMCwhMX19KSxlP0IuY3VycmVudD0hMTpCLmN1cnJlbnQ9ITB9fWU9aXkodCksY1UoKSxlJiZcImJvZHlcIiE9PWFJKGUpJiYoY1oucHVzaChlKSxjWi5sZW5ndGg+MjAmJihjWj1jWi5zbGljZSgtMjApKSkscC5vbihcIm9wZW5jaGFuZ2VcIixuKTtsZXQgbz10LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO3JldHVybiBvLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSxvLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLE9iamVjdC5hc3NpZ24oby5zdHlsZSxzaCkseiYmbSYmbS5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmVuZFwiLG8pLCgpPT57cC5vZmYoXCJvcGVuY2hhbmdlXCIsbik7bGV0IGU9aXkodCkscj1pdihnLGUpfHxFJiZpQihFLm5vZGVzUmVmLmN1cnJlbnQseSgpLCExKS5zb21lKHQ9Pml2KHQuY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcsZSkpLGE9ZnVuY3Rpb24oKXtpZihcImJvb2xlYW5cIj09dHlwZW9mIGsuY3VycmVudCl7bGV0IGU9bXx8Y0YoKTtyZXR1cm4gZSYmZS5pc0Nvbm5lY3RlZD9lOm99cmV0dXJuIGsuY3VycmVudC5jdXJyZW50fHxvfSgpO3F1ZXVlTWljcm90YXNrKCgpPT57bGV0IG49ZnVuY3Rpb24oZSl7bGV0IHQ9c3EoKTtyZXR1cm4gc0YoZSx0KT9lOnNaKGUsdClbMF18fGV9KGEpO2suY3VycmVudCYmIUIuY3VycmVudCYmYU4obikmJihuPT09ZXx8ZT09PXQuYm9keXx8cikmJm4uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxvLnJlbW92ZSgpfSl9fSxbcixnLEQsayxoLHAsRSx6LG0seV0pLHcudXNlRWZmZWN0KCgpPT57cXVldWVNaWNyb3Rhc2soKCk9PntCLmN1cnJlbnQ9ITF9KX0sW3JdKSx3LnVzZUVmZmVjdCgoKT0+e2lmKHJ8fCFkKXJldHVybjtmdW5jdGlvbiBlKGUpe2xldCB0PWliKGUpO3Q/LmNsb3Nlc3QoXCJbZGF0YS1iYXNlLXVpLWNsaWNrLXRyaWdnZXJdXCIpJiYoUC5jdXJyZW50PSEwKX1sZXQgdD1peChEKTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIixlLCEwKSwoKT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsZSwhMCl9fSxbcixkLERdKSxhQygoKT0+e2lmKCFyJiZqKXJldHVybiBqLnNldEZvY3VzTWFuYWdlclN0YXRlKHttb2RhbDpzLGNsb3NlT25Gb2N1c091dDpjLG9wZW46ZCxvbk9wZW5DaGFuZ2U6Zixkb21SZWZlcmVuY2U6bX0pLCgpPT57ai5zZXRGb2N1c01hbmFnZXJTdGF0ZShudWxsKX19LFtyLGoscyxkLGYsYyxtXSksYUMoKCk9PntpZighciYmRClyZXR1cm4gY3EoRCxDKSwoKT0+e3F1ZXVlTWljcm90YXNrKGNVKX19LFtyLEQsQ10pO2xldCBGPSFyJiYoIXN8fCF4KSYmKHp8fHMpO3JldHVybigwLEEuanN4cykody5GcmFnbWVudCx7Y2hpbGRyZW46W0YmJigwLEEuanN4KShzbSx7XCJkYXRhLXR5cGVcIjpcImluc2lkZVwiLHJlZjpaLG9uRm9jdXM6ZT0+e2lmKHMpe2xldCBlPU4oKTtsaChlW2UubGVuZ3RoLTFdKX1lbHNlIGlmKGo/LnByZXNlcnZlVGFiT3JkZXImJmoucG9ydGFsTm9kZSlpZihCLmN1cnJlbnQ9ITEsc1coZSxqLnBvcnRhbE5vZGUpKXtsZXQgZT1zVihtKTtlPy5mb2N1cygpfWVsc2Ugai5iZWZvcmVPdXRzaWRlUmVmLmN1cnJlbnQ/LmZvY3VzKCl9fSksbixGJiYoMCxBLmpzeCkoc20se1wiZGF0YS10eXBlXCI6XCJpbnNpZGVcIixyZWY6VSxvbkZvY3VzOmU9PntpZihzKWxoKE4oKVswXSk7ZWxzZSBpZihqPy5wcmVzZXJ2ZVRhYk9yZGVyJiZqLnBvcnRhbE5vZGUpaWYoYyYmKEIuY3VycmVudD0hMCksc1coZSxqLnBvcnRhbE5vZGUpKXtsZXQgZT1zJChtKTtlPy5mb2N1cygpfWVsc2Ugai5hZnRlck91dHNpZGVSZWYuY3VycmVudD8uZm9jdXMoKX19KV19KX1sZXQgY1Y9ey4uLnNuLC4uLmwyfSxjJD13LmZvcndhcmRSZWYoZnVuY3Rpb24oZSx0KXtsZXR7cmVuZGVyOm4sY2xhc3NOYW1lOnIsZmluYWxGb2N1czpvLC4uLmF9PWUse29wZW46aSxzZXRPcGVuOmwscG9wdXBSZWY6cyx0cmFuc2l0aW9uU3RhdHVzOmMscG9wdXBQcm9wczp1LG1vdW50ZWQ6ZCxpbnN0YW50VHlwZTpmLG9uT3BlbkNoYW5nZUNvbXBsZXRlOnAscGFyZW50OmgsbGFzdE9wZW5DaGFuZ2VSZWFzb246bSxyb290SWQ6Z309bHcoKSx7c2lkZTp5LGFsaWduOnYsZmxvYXRpbmdDb250ZXh0OmJ9PWZ1bmN0aW9uKCl7bGV0IGU9dy51c2VDb250ZXh0KHM0KTtpZih2b2lkIDA9PT1lKXRocm93IEVycm9yKFwiQmFzZSBVSTogTWVudVBvc2l0aW9uZXJDb250ZXh0IGlzIG1pc3NpbmcuIE1lbnVQb3NpdGlvbmVyIHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8TWVudS5Qb3NpdGlvbmVyPi5cIik7cmV0dXJuIGV9KCk7bGsoe29wZW46aSxyZWY6cyxvbkNvbXBsZXRlKCl7aSYmcD8uKCEwKX19KTtsZXR7ZXZlbnRzOnh9PWFqKCk7dy51c2VFZmZlY3QoKCk9PntmdW5jdGlvbiBlKGUpe2woITEsZS5kb21FdmVudCxlLnJlYXNvbil9cmV0dXJuIHgub24oXCJjbG9zZVwiLGUpLCgpPT57eC5vZmYoXCJjbG9zZVwiLGUpfX0sW3gsbF0pO2xldCBDPXNvKFwiZGl2XCIsZSx7c3RhdGU6dy51c2VNZW1vKCgpPT4oe3RyYW5zaXRpb25TdGF0dXM6YyxzaWRlOnksYWxpZ246dixvcGVuOmksbmVzdGVkOlwibWVudVwiPT09aC50eXBlLGluc3RhbnQ6Zn0pLFtjLHksdixpLGgudHlwZSxmXSkscmVmOlt0LHNdLGN1c3RvbVN0eWxlSG9va01hcHBpbmc6Y1YscHJvcHM6W3UsXCJzdGFydGluZ1wiPT09Yz9pTTppWixhLHtcImRhdGEtcm9vdG93bmVyaWRcIjpnfV19KSxfPXZvaWQgMD09PWgudHlwZXx8XCJjb250ZXh0LW1lbnVcIj09PWgudHlwZTtyZXR1cm5cIm1lbnViYXJcIj09PWgudHlwZSYmXCJvdXRzaWRlLXByZXNzXCIhPT1tJiYoXz0hMCksKDAsQS5qc3gpKGNILHtjb250ZXh0OmIsbW9kYWw6ITEsZGlzYWJsZWQ6IWQscmV0dXJuRm9jdXM6b3x8Xyxpbml0aWFsRm9jdXM6XCJtZW51XCI9PT1oLnR5cGU/LTE6MCxyZXN0b3JlRm9jdXM6ITAsY2hpbGRyZW46Q30pfSksY1c9dy5jcmVhdGVDb250ZXh0KHZvaWQgMCksY1k9dy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7bGV0e3JlbmRlcjpuLGNsYXNzTmFtZTpyLC4uLm99PWUsW2EsaV09dy51c2VTdGF0ZSh2b2lkIDApLGw9dy51c2VNZW1vKCgpPT4oe3NldExhYmVsSWQ6aX0pLFtpXSkscz1zbyhcImRpdlwiLGUse3JlZjp0LHByb3BzOntyb2xlOlwiZ3JvdXBcIixcImFyaWEtbGFiZWxsZWRieVwiOmEsLi4ub319KTtyZXR1cm4oMCxBLmpzeCkoY1cuUHJvdmlkZXIse3ZhbHVlOmwsY2hpbGRyZW46c30pfSk7ZnVuY3Rpb24gY0soZSl7cmV0dXJuIGF4KGUsXCJiYXNlLXVpXCIpfWxldCBjWD13LmZvcndhcmRSZWYoZnVuY3Rpb24oZSx0KXtsZXR7Y2xhc3NOYW1lOm4scmVuZGVyOnIsaWQ6bywuLi5hfT1lLGk9Y0sobykse3NldExhYmVsSWQ6bH09ZnVuY3Rpb24oKXtsZXQgZT13LnVzZUNvbnRleHQoY1cpO2lmKHZvaWQgMD09PWUpdGhyb3cgRXJyb3IoXCJCYXNlIFVJOiBNZW51R3JvdXBSb290Q29udGV4dCBpcyBtaXNzaW5nLiBNZW51IGdyb3VwIHBhcnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gPE1lbnUuR3JvdXA+LlwiKTtyZXR1cm4gZX0oKTtyZXR1cm4gYUMoKCk9PihsKGkpLCgpPT57bCh2b2lkIDApfSksW2wsaV0pLHNvKFwiZGl2XCIsZSx7cmVmOnQscHJvcHM6e2lkOmkscm9sZTpcInByZXNlbnRhdGlvblwiLC4uLmF9fSl9KSxjRz17dHlwZTpcInJlZ3VsYXItaXRlbVwifSxjUT13Lm1lbW8ody5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7bGV0e2NsYXNzTmFtZTpuLGNsb3NlT25DbGljazpyPSEwLGRpc2FibGVkOm89ITEsaGlnaGxpZ2h0ZWQ6YSxpZDppLG1lbnVFdmVudHM6bCxpdGVtUHJvcHM6cyxyZW5kZXI6YyxhbGxvd01vdXNlVXBUcmlnZ2VyUmVmOnUsdHlwaW5nUmVmOmQsbmF0aXZlQnV0dG9uOmYsLi4ucH09ZSx7Z2V0SXRlbVByb3BzOmgsaXRlbVJlZjptfT1mdW5jdGlvbihlKXtsZXR7Y2xvc2VPbkNsaWNrOnQsZGlzYWJsZWQ6bj0hMSxoaWdobGlnaHRlZDpyLGlkOm8sbWVudUV2ZW50czphLGFsbG93TW91c2VVcFRyaWdnZXJSZWY6aSx0eXBpbmdSZWY6bCxuYXRpdmVCdXR0b246cyxpdGVtTWV0YWRhdGE6Y309ZSx1PXcudXNlUmVmKG51bGwpLHtnZXRCdXR0b25Qcm9wczpkLGJ1dHRvblJlZjpmfT1zcyh7ZGlzYWJsZWQ6bixmb2N1c2FibGVXaGVuRGlzYWJsZWQ6ITAsbmF0aXZlOnN9KSxwPXcudXNlQ2FsbGJhY2soZT0+bFUoe2lkOm8scm9sZTpcIm1lbnVpdGVtXCIsdGFiSW5kZXg6cj8wOi0xLG9uTW91c2VFbnRlcigpe1wic3VibWVudS10cmlnZ2VyXCI9PT1jLnR5cGUmJmMuc2V0QWN0aXZlKCl9LG9uS2V5VXA6ZT0+e1wiIFwiPT09ZS5rZXkmJmwuY3VycmVudCYmZS5wcmV2ZW50QmFzZVVJSGFuZGxlcigpfSxvbkNsaWNrOmU9Pnt0JiZhLmVtaXQoXCJjbG9zZVwiLHtkb21FdmVudDplLHJlYXNvbjpcIml0ZW0tcHJlc3NcIn0pfSxvbk1vdXNlVXA6KCk9Pnt1LmN1cnJlbnQmJmkuY3VycmVudCYmXCJyZWd1bGFyLWl0ZW1cIj09PWMudHlwZSYmdS5jdXJyZW50LmNsaWNrKCl9fSxlLGQpLFtvLHIsZCxsLHQsYSxpLGNdKSxoPWxYKHUsZik7cmV0dXJuIHcudXNlTWVtbygoKT0+KHtnZXRJdGVtUHJvcHM6cCxpdGVtUmVmOmh9KSxbcCxoXSl9KHtjbG9zZU9uQ2xpY2s6cixkaXNhYmxlZDpvLGhpZ2hsaWdodGVkOmEsaWQ6aSxtZW51RXZlbnRzOmwsYWxsb3dNb3VzZVVwVHJpZ2dlclJlZjp1LHR5cGluZ1JlZjpkLG5hdGl2ZUJ1dHRvbjpmLGl0ZW1NZXRhZGF0YTpjR30pO3JldHVybiBzbyhcImRpdlwiLGUse3N0YXRlOncudXNlTWVtbygoKT0+KHtkaXNhYmxlZDpvLGhpZ2hsaWdodGVkOmF9KSxbbyxhXSkscmVmOlttLHRdLHByb3BzOltzLHAsaF19KX0pKSxjSj13LmZvcndhcmRSZWYoZnVuY3Rpb24oZSx0KXtsZXR7aWQ6bixsYWJlbDpyLG5hdGl2ZUJ1dHRvbjpvPSExLC4uLmF9PWUsaT13LnVzZVJlZihudWxsKSxsPXNkKHtsYWJlbDpyfSkscz1sWCh0LGwucmVmLGkpLHtpdGVtUHJvcHM6YyxhY3RpdmVJbmRleDp1LGFsbG93TW91c2VVcFRyaWdnZXJSZWY6ZCx0eXBpbmdSZWY6Zn09bHcoKSxwPWNLKG4pLGg9bC5pbmRleD09PXUse2V2ZW50czptfT1haigpO3JldHVybigwLEEuanN4KShjUSx7Li4uYSxpZDpwLHJlZjpzLGhpZ2hsaWdodGVkOmgsbWVudUV2ZW50czptLGl0ZW1Qcm9wczpjLGFsbG93TW91c2VVcFRyaWdnZXJSZWY6ZCx0eXBpbmdSZWY6ZixuYXRpdmVCdXR0b246b30pfSk7dmFyIGMwPVwiX19uZXh0X2J1aWx0aW5fX1wiO2Z1bmN0aW9uIGMxKGUpe3JldHVybiBlLnJlcGxhY2UobmV3IFJlZ0V4cChcIl5cIi5jb25jYXQoYzApKSxcIlwiKS5yZXBsYWNlKG5ldyBSZWdFeHAoXCJcIi5jb25jYXQoXCJAYm91bmRhcnlcIixcIiRcIikpLFwiXCIpfXZhciBjMj1cImJvdW5kYXJ5OlwiO2Z1bmN0aW9uIGM0KGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoYzIpfWZ1bmN0aW9uIGM1KGUpe3JldHVybiBlLnJlcGxhY2UoYzIsXCJcIil9ZnVuY3Rpb24gYzMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIGM2KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX1mdW5jdGlvbiBjOShlLHQpe3JldHVybiB0PW51bGwhPXQ/dDp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pKX0pLGV9ZnVuY3Rpb24gYzgoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0obj1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2gobi52YWx1ZSksIXR8fGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsdCl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGMzKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIGMzKGUsdCl9fShlLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfXZhciBjNz1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGZ1bmN0aW9uKGUpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QoZSk6dCYmKHQuY3VycmVudD1lKX0pfX07ZnVuY3Rpb24gdWUoZSl7dmFyIHQsbj1lLm5vZGVTdGF0ZSxyPWUuYm91bmRhcmllcyxvPW4ucGFnZVBhdGgsYT1uLmJvdW5kYXJ5VHlwZSxpPW4uc2V0Qm91bmRhcnlUeXBlLGw9YzgoKDAsdy51c2VTdGF0ZSkoITEpLDIpLHM9bFswXSxjPWxbMV0sdT1kbCgpLnNoYWRvd1Jvb3QsZD0oMCx3LnVzZVJlZikobnVsbCksZj0oMCx3LnVzZVJlZikobnVsbCk7bmUoZixkLHMsZnVuY3Rpb24oKXtjKCExKX0sbnVsbD09KHQ9ZC5jdXJyZW50KT92b2lkIDA6dC5vd25lckRvY3VtZW50KTt2YXIgcD0oT2JqZWN0LnZhbHVlcyhyKS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZX0pfHxcIlwiKS5zcGxpdChcIi5cIikucG9wKCl8fFwianNcIixoPSgwLHcudXNlTWVtbykoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHIpLm1hcChmdW5jdGlvbihlKXt2YXIgdD1jOChlLDIpLG49dFswXSxyPWMxKCh0WzFdfHxcIlwiKS5zcGxpdChcIi9cIikucG9wKCl8fFwiXCIuY29uY2F0KG4sXCIuXCIpLmNvbmNhdChwKSk7cmV0dXJuW24scl19KSl9LFtyLHBdKSxtPShvfHxcIlwiKS5zcGxpdChcIi9cIikucG9wKCl8fFwiXCIsZz1jMShhP1wicGFnZS5cIi5jb25jYXQocCk6bXx8XCJwYWdlLlwiLmNvbmNhdChwKSkseT1be2xhYmVsOmgubG9hZGluZyx2YWx1ZTpcImxvYWRpbmdcIixpY29uOigwLEEuanN4KSh1dCx7fSksZGlzYWJsZWQ6IXIubG9hZGluZ30se2xhYmVsOmguZXJyb3IsdmFsdWU6XCJlcnJvclwiLGljb246KDAsQS5qc3gpKHVuLHt9KSxkaXNhYmxlZDohci5lcnJvcn0se2xhYmVsOmhbXCJub3QtZm91bmRcIl0sdmFsdWU6XCJub3QtZm91bmRcIixpY29uOigwLEEuanN4KSh1cix7fSksZGlzYWJsZWQ6IXJbXCJub3QtZm91bmRcIl19XSx2PXtsYWJlbDphP1wiUmVzZXRcIjpnLHZhbHVlOlwicmVzZXRcIixpY29uOigwLEEuanN4KSh1byx7fSksZGlzYWJsZWQ6bnVsbD09PWF9LGI9KDAsdy51c2VDYWxsYmFjaykoZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVSTFNlYXJjaFBhcmFtcyh7ZmlsZTplLmZpbGVQYXRoLGlzQXBwUmVsYXRpdmVQYXRoOlwiMVwifSk7ZmV0Y2goXCJcIi5jb25jYXQocHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSHx8XCJcIixcIi9fX25leHRqc19sYXVuY2gtZWRpdG9yP1wiKS5jb25jYXQodC50b1N0cmluZygpKSkuY2F0Y2goY29uc29sZS53YXJuKX0sW10pLHg9KDAsdy51c2VDYWxsYmFjaykoZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2VcIm5vdC1mb3VuZFwiOmNhc2VcImxvYWRpbmdcIjpjYXNlXCJlcnJvclwiOmkoZSk7YnJlYWs7Y2FzZVwicmVzZXRcIjppKG51bGwpO2JyZWFrO2Nhc2VcIm9wZW4tZWRpdG9yXCI6byYmYih7ZmlsZVBhdGg6b30pfX0sW2ksbyxiXSksQz0oMCx3LnVzZU1lbW8pKGZ1bmN0aW9uKCl7cmV0dXJuXCJsYXlvdXRcIiE9PW4udHlwZSYmXCJ0ZW1wbGF0ZVwiIT09bi50eXBlJiZPYmplY3QudmFsdWVzKHIpLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lfSl9LFtuLnR5cGUscl0pO3JldHVybigwLEEuanN4cykobEsse2RlbGF5OjAsbW9kYWw6ITEsb3BlbjpzLG9uT3BlbkNoYW5nZTpjLGNoaWxkcmVuOlsoMCxBLmpzeCkoc3Ase2NsYXNzTmFtZTpcInNlZ21lbnQtYm91bmRhcnktdHJpZ2dlclwiLFwiZGF0YS1uZXh0anMtZGV2LW92ZXJsYXktc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLWJ1dHRvblwiOiEwLHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD1jNyhlLnJlZixkKTtyZXR1cm4oMCxBLmpzeCkodWksYzkoYzYoe30sZSkse3JlZjp0fSkpfSxkaXNhYmxlZDohQ30pLCgwLEEuanN4KShzMix7Y29udGFpbmVyOnUsY2hpbGRyZW46KDAsQS5qc3gpKGNULHtjbGFzc05hbWU6XCJzZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLXBvc2l0aW9uZXJcIixzaWRlOlwiYm90dG9tXCIsYWxpZ246XCJjZW50ZXJcIixzaWRlT2Zmc2V0OjYsYXJyb3dQYWRkaW5nOjgscmVmOmYsY2hpbGRyZW46KDAsQS5qc3hzKShjJCx7Y2xhc3NOYW1lOlwic2VnbWVudC1ib3VuZGFyeS1kcm9wZG93blwiLGNoaWxkcmVuOlsoMCxBLmpzeHMpKGNZLHtjaGlsZHJlbjpbKDAsQS5qc3gpKGNYLHtjbGFzc05hbWU6XCJzZWdtZW50LWJvdW5kYXJ5LWdyb3VwLWxhYmVsXCIsY2hpbGRyZW46XCJUb2dnbGUgT3ZlcnJpZGVzXCJ9KSx5Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4oMCxBLmpzeHMpKGNKLHtjbGFzc05hbWU6XCJzZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW1cIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHgoZS52YWx1ZSl9LGRpc2FibGVkOmUuZGlzYWJsZWQsY2hpbGRyZW46W2UuaWNvbixlLmxhYmVsXX0sZS52YWx1ZSl9KV19KSwoMCxBLmpzeCkoY1kse2NoaWxkcmVuOigwLEEuanN4cykoY0ose2NsYXNzTmFtZTpcInNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24taXRlbVwiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4geCh2LnZhbHVlKX0sZGlzYWJsZWQ6di5kaXNhYmxlZCxjaGlsZHJlbjpbdi5pY29uLHYubGFiZWxdfSx2LnZhbHVlKX0pXX0pfSl9KV19KX1mdW5jdGlvbiB1dCgpe3ZhciBlLHQsbj0oMCx4LmMpKDIpO3JldHVybiBuWzBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGU9KDAsQS5qc3gpKFwiZ1wiLHtjbGlwUGF0aDpcInVybCgjY2xpcDBfMjc1OV8xODY2KVwiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xMCAzLjVDMTMuNTg5OSAzLjUgMTYuNSA2LjQxMDE1IDE2LjUgMTBDMTYuNSAxMy41ODk5IDEzLjU4OTkgMTYuNSAxMCAxNi41QzYuNDEwMTUgMTYuNSAzLjUgMTMuNTg5OSAzLjUgMTBDMy41IDYuNDEwMTUgNi40MTAxNSAzLjUgMTAgMy41Wk0yIDEwQzIgMTQuNDE4MyA1LjU4MTcyIDE4IDEwIDE4QzE0LjQxODMgMTggMTggMTQuNDE4MyAxOCAxMEMxOCA1LjU4MTcyIDE0LjQxODMgMiAxMCAyQzUuNTgxNzIgMiAyIDUuNTgxNzIgMiAxMFpNMTAuNzUgOS42MjQwMlY2SDkuMjVWOS44NzVDOS4yNSAxMC4xODk4IDkuMzk4NTggMTAuNDg2IDkuNjUwMzkgMTAuNjc0OEwxMS41NDk4IDEyLjA5OTZMMTIuMTUwNCAxMi41NDk4TDEzLjA0OTggMTEuMzQ5NkwxMi40NTAyIDEwLjkwMDRMMTAuNzUgOS42MjQwMlpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pLG5bMF09ZSk6ZT1uWzBdLG5bMV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8odD0oMCxBLmpzeHMpKFwic3ZnXCIse3dpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDIwIDIwXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46W2UsKDAsQS5qc3gpKFwiZGVmc1wiLHtjaGlsZHJlbjooMCxBLmpzeCkoXCJjbGlwUGF0aFwiLHtpZDpcImNsaXAwXzI3NTlfMTg2NlwiLGNoaWxkcmVuOigwLEEuanN4KShcInJlY3RcIix7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsZmlsbDpcIndoaXRlXCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDIgMilcIn0pfSl9KV19KSxuWzFdPXQpOnQ9blsxXSx0fWZ1bmN0aW9uIHVuKCl7dmFyIGUsdCxuPSgwLHguYykoMik7cmV0dXJuIG5bMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZT0oMCxBLmpzeCkoXCJnXCIse2NsaXBQYXRoOlwidXJsKCNjbGlwMF8yNzU5XzE4ODEpXCIsY2hpbGRyZW46KDAsQS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTMuNSA3LjMwNzYyVjEyLjY5MjRMNy4zMDc2MiAxNi41SDEyLjY5MjRMMTYuNSAxMi42OTI0VjcuMzA3NjJMMTIuNjkyNCAzLjVINy4zMDc2MkwzLjUgNy4zMDc2MlpNMTggMTIuODk5NEwxNy45OTUxIDEyLjk5OEMxNy45NzI0IDEzLjIyNzEgMTcuODcxMiAxMy40NDIzIDE3LjcwNyAxMy42MDY0TDEzLjYwNjQgMTcuNzA3TDEzLjUzMzIgMTcuNzczNEMxMy4zODA2IDE3Ljg5ODUgMTMuMTk0NCAxNy45NzU3IDEyLjk5OCAxNy45OTUxTDEyLjg5OTQgMThINy4xMDA1OUw3LjAwMTk1IDE3Ljk5NTFDNi44MDU2MiAxNy45NzU3IDYuNjE5NCAxNy44OTg1IDYuNDY2OCAxNy43NzM0TDYuMzkzNTUgMTcuNzA3TDIuMjkyOTcgMTMuNjA2NEMyLjEyODgzIDEzLjQ0MjMgMi4wMjc1NiAxMy4yMjcxIDIuMDA0ODggMTIuOTk4TDIgMTIuODk5NFY3LjEwMDU5QzIgNi44MzUzOSAyLjEwNTQ2IDYuNTgxMDkgMi4yOTI5NyA2LjM5MzU1TDYuMzkzNTUgMi4yOTI5N0M2LjU1NzcxIDIuMTI4ODMgNi43NzI5NCAyLjAyNzU2IDcuMDAxOTUgMi4wMDQ4OEw3LjEwMDU5IDJIMTIuODk5NEwxMi45OTggMi4wMDQ4OEMxMy4yMjcxIDIuMDI3NTYgMTMuNDQyMyAyLjEyODgzIDEzLjYwNjQgMi4yOTI5N0wxNy43MDcgNi4zOTM1NUMxNy44OTQ1IDYuNTgxMDkgMTggNi44MzUzOSAxOCA3LjEwMDU5VjEyLjg5OTRaTTkuMjUgNS43NUgxMC43NUwxMC43NSAxMC43NUg5LjI1TDkuMjUgNS43NVpNMTAgMTRDMTAuNTUyMyAxNCAxMSAxMy41NTIzIDExIDEzQzExIDEyLjQ0NzcgMTAuNTUyMyAxMiAxMCAxMkM5LjQ0NzcyIDEyIDkgMTIuNDQ3NyA5IDEzQzkgMTMuNTUyMyA5LjQ0NzcyIDE0IDEwIDE0WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSksblswXT1lKTplPW5bMF0sblsxXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PSgwLEEuanN4cykoXCJzdmdcIix7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyMCAyMFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOltlLCgwLEEuanN4KShcImRlZnNcIix7Y2hpbGRyZW46KDAsQS5qc3gpKFwiY2xpcFBhdGhcIix7aWQ6XCJjbGlwMF8yNzU5XzE4ODFcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJyZWN0XCIse3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLGZpbGw6XCJ3aGl0ZVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgyIDIpXCJ9KX0pfSldfSksblsxXT10KTp0PW5bMV0sdH1mdW5jdGlvbiB1cigpe3ZhciBlLHQ9KDAseC5jKSgxKTtyZXR1cm4gdFswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhlPSgwLEEuanN4KShcInN2Z1wiLHt3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyMCAyMFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xMC41NTg2IDIuNUMxMS4xMzQxIDIuNTAwMDQgMTEuNjU4OCAyLjgyOTQgMTEuOTA5MSAzLjM0NzY2TDE3LjgwNzYgMTUuNTY1NEMxOC4xMjc4IDE2LjIyOTIgMTcuNjQ0MiAxNi45OTk3IDE2LjkwNzIgMTdIMy4wOTI3NEMyLjM1NTc0IDE2Ljk5OTcgMS44NzIxIDE2LjIyOTIgMi4xOTIzNSAxNS41NjU0TDguMDkwNzkgMy4zNDc2NkM4LjM0MTA5IDIuODI5NCA4Ljg2NTgzIDIuNTAwMDQgOS40NDEzNyAyLjVIMTAuNTU4NlpNMy44OTA1OSAxNS41SDE2LjEwOTNMMTAuNTU4NiA0SDkuNDQxMzdMMy44OTA1OSAxNS41Wk05LjI0OTk3IDYuNzVIMTAuNzVMMTAuNzUgMTAuNzVIOS4yNDk5N0w5LjI0OTk3IDYuNzVaTTkuOTk5OTcgMTRDMTAuNTUyMyAxNCAxMSAxMy41NTIzIDExIDEzQzExIDEyLjQ0NzcgMTAuNTUyMyAxMiA5Ljk5OTk3IDEyQzkuNDQ3NjggMTIgOC45OTk5NyAxMi40NDc3IDguOTk5OTcgMTNDOC45OTk5NyAxMy41NTIzIDkuNDQ3NjggMTQgOS45OTk5NyAxNFpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pLHRbMF09ZSk6ZT10WzBdLGV9ZnVuY3Rpb24gdW8oKXt2YXIgZSx0PSgwLHguYykoMSk7cmV0dXJuIHRbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZT0oMCxBLmpzeCkoXCJzdmdcIix7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyMCAyMFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZDpcIk05Ljk2NDg0IDNDMTMuODQ2MyAzLjAwMDE4IDE3IDYuMTMwMTIgMTcgMTBDMTcgMTMuODY5OSAxMy44NDYzIDE2Ljk5OTggOS45NjQ4NCAxN0M3LjYyNDA0IDE3IDUuNTQ4NzcgMTUuODYxNyA0LjI3MDUxIDE0LjExMjNMMy44MjgxMiAxMy41MDY4TDUuMDM5MDYgMTIuNjIyMUw1LjQ4MTQ1IDEzLjIyNzVDNi40ODgxNSAxNC42MDUzIDguMTIwOTIgMTUuNSA5Ljk2NDg0IDE1LjVDMTMuMDI1OSAxNS40OTk4IDE1LjUgMTMuMDMzNSAxNS41IDEwQzE1LjUgNi45NjY1NCAxMy4wMjU5IDQuNTAwMTggOS45NjQ4NCA0LjVDNy40MjkwNSA0LjUgNS4yOTU0NCA2LjE5NDI5IDQuNjM4NjcgOC41SDhWMTBIMi43NUMyLjMzNTc5IDEwIDIgOS42NjQyMSAyIDkuMjVWNEgzLjVWNy4yMzczQzQuNTc3ODEgNC43NDM3NiA3LjA2NzQ5IDMgOS45NjQ4NCAzWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSksdFswXT1lKTplPXRbMF0sZX1mdW5jdGlvbiB1YShlKXt2YXIgdCxuLHI9KDAseC5jKSgzKTtyZXR1cm4gclswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PSgwLEEuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk04LjcwNzEgMi4zOTY0NEM4LjMxNjU4IDIuMDA1OTIgNy42ODM0MSAyLjAwNTkyIDcuMjkyODkgMi4zOTY0NEw0LjQ2OTY2IDUuMjE5NjZMMy45MzkzMyA1Ljc0OTk5TDQuOTk5OTkgNi44MTA2NUw1LjUzMDMyIDYuMjgwMzJMNy45OTk5OSAzLjgxMDY1TDEwLjQ2OTcgNi4yODAzMkwxMSA2LjgxMDY1TDEyLjA2MDcgNS43NDk5OUwxMS41MzAzIDUuMjE5NjZMOC43MDcxIDIuMzk2NDRaTTUuNTMwMzIgOS43MTk2Nkw0Ljk5OTk5IDkuMTg5MzNMMy45MzkzMyAxMC4yNUw0LjQ2OTY2IDEwLjc4MDNMNy4yOTI4OSAxMy42MDM1QzcuNjgzNDEgMTMuOTk0MSA4LjMxNjU4IDEzLjk5NDEgOC43MDcxIDEzLjYwMzVMMTEuNTMwMyAxMC43ODAzTDEyLjA2MDcgMTAuMjVMMTEgOS4xODkzM0wxMC40Njk3IDkuNzE5NjZMNy45OTk5OSAxMi4xODkzTDUuNTMwMzIgOS43MTk2NlpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSxyWzBdPXQpOnQ9clswXSxyWzFdIT09ZT8obj0oMCxBLmpzeCkoXCJzdmdcIixjOShjNih7c3Ryb2tlTGluZWpvaW46XCJyb3VuZFwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIn0sZSkse2NoaWxkcmVuOnR9KSksclsxXT1lLHJbMl09bik6bj1yWzJdLG59ZnVuY3Rpb24gdWkoZSl7dmFyIHQsbixyPSgwLHguYykoMyk7cmV0dXJuIHJbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8odD0oMCxBLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcInNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci10ZXh0XCIsY2hpbGRyZW46KDAsQS5qc3gpKHVhLHtjbGFzc05hbWU6XCJwbHVzLWljb25cIn0pfSksclswXT10KTp0PXJbMF0sclsxXSE9PWU/KG49KDAsQS5qc3gpKFwiYnV0dG9uXCIsYzkoYzYoe30sZSkse2NoaWxkcmVuOnR9KSksclsxXT1lLHJbMl09bik6bj1yWzJdLG59bGV0IHVsPXcuY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIHVzKCl7bGV0IGU9dy51c2VDb250ZXh0KHVsKTtpZih2b2lkIDA9PT1lKXRocm93IEVycm9yKFwiQmFzZSBVSTogVG9vbHRpcFJvb3RDb250ZXh0IGlzIG1pc3NpbmcuIFRvb2x0aXAgcGFydHMgbXVzdCBiZSBwbGFjZWQgd2l0aGluIDxUb29sdGlwLlJvb3Q+LlwiKTtyZXR1cm4gZX1sZXQgdWM9dy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7bGV0e2NsYXNzTmFtZTpuLHJlbmRlcjpyLC4uLm99PWUse29wZW46YSxzZXRUcmlnZ2VyRWxlbWVudDppLHRyaWdnZXJQcm9wczpsfT11cygpO3JldHVybiBzbyhcImJ1dHRvblwiLGUse3N0YXRlOncudXNlTWVtbygoKT0+KHtvcGVuOmF9KSxbYV0pLHJlZjpbdCxpXSxwcm9wczpbbCxvXSxjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnNlfSl9KSx1dT13LmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiB1ZCgpe2xldCBlPXcudXNlQ29udGV4dCh1dSk7aWYodm9pZCAwPT09ZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IFRvb2x0aXBQb3NpdGlvbmVyQ29udGV4dCBpcyBtaXNzaW5nLiBUb29sdGlwUG9zaXRpb25lciBwYXJ0cyBtdXN0IGJlIHBsYWNlZCB3aXRoaW4gPFRvb2x0aXAuUG9zaXRpb25lcj4uXCIpO3JldHVybiBlfWxldCB1Zj13LmZvcndhcmRSZWYoZnVuY3Rpb24oZSx0KXtsZXR7Y2xhc3NOYW1lOm4scmVuZGVyOnIsLi4ub309ZSx7b3BlbjphLGFycm93UmVmOmksc2lkZTpsLGFsaWduOnMsYXJyb3dVbmNlbnRlcmVkOmMsYXJyb3dTdHlsZXM6dX09dWQoKTtyZXR1cm4gc28oXCJkaXZcIixlLHtzdGF0ZTp3LnVzZU1lbW8oKCk9Pih7b3BlbjphLHNpZGU6bCxhbGlnbjpzLHVuY2VudGVyZWQ6Y30pLFthLGwscyxjXSkscmVmOlt0LGldLHByb3BzOlt7c3R5bGU6dSxcImFyaWEtaGlkZGVuXCI6ITB9LG9dLGN1c3RvbVN0eWxlSG9va01hcHBpbmc6c259KX0pLHVwPXsuLi5zbiwuLi5sMn0sdWg9dy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7bGV0e2NsYXNzTmFtZTpuLHJlbmRlcjpyLC4uLm99PWUse29wZW46YSxpbnN0YW50VHlwZTppLHRyYW5zaXRpb25TdGF0dXM6bCxwb3B1cFByb3BzOnMscG9wdXBSZWY6Yyxvbk9wZW5DaGFuZ2VDb21wbGV0ZTp1fT11cygpLHtzaWRlOmQsYWxpZ246Zn09dWQoKTtyZXR1cm4gbGsoe29wZW46YSxyZWY6YyxvbkNvbXBsZXRlKCl7YSYmdT8uKCEwKX19KSxzbyhcImRpdlwiLGUse3N0YXRlOncudXNlTWVtbygoKT0+KHtvcGVuOmEsc2lkZTpkLGFsaWduOmYsaW5zdGFudDppLHRyYW5zaXRpb25TdGF0dXM6bH0pLFthLGQsZixpLGxdKSxyZWY6W3QsY10scHJvcHM6W3MsXCJzdGFydGluZ1wiPT09bD9pTTppWixvXSxjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnVwfSl9KSx1bT13LmNyZWF0ZUNvbnRleHQodm9pZCAwKSx1Zz13LmZvcndhcmRSZWYoZnVuY3Rpb24oZSx0KXtsZXR7cmVuZGVyOm4sY2xhc3NOYW1lOnIsYW5jaG9yOm8scG9zaXRpb25NZXRob2Q6YT1cImFic29sdXRlXCIsc2lkZTppPVwidG9wXCIsYWxpZ246bD1cImNlbnRlclwiLHNpZGVPZmZzZXQ6cz0wLGFsaWduT2Zmc2V0OmM9MCxjb2xsaXNpb25Cb3VuZGFyeTp1PVwiY2xpcHBpbmctYW5jZXN0b3JzXCIsY29sbGlzaW9uUGFkZGluZzpkPTUsYXJyb3dQYWRkaW5nOmY9NSxzdGlja3k6cD0hMSx0cmFja0FuY2hvcjpoPSEwLGNvbGxpc2lvbkF2b2lkYW5jZTptPWlxLC4uLmd9PWUse29wZW46eSxzZXRQb3NpdGlvbmVyRWxlbWVudDp2LG1vdW50ZWQ6YixmbG9hdGluZ1Jvb3RDb250ZXh0OngsdHJhY2tDdXJzb3JBeGlzOkMsaG92ZXJhYmxlOl99PXVzKCksaz1jRSh7YW5jaG9yOm8scG9zaXRpb25NZXRob2Q6YSxmbG9hdGluZ1Jvb3RDb250ZXh0OngsbW91bnRlZDpiLHNpZGU6aSxzaWRlT2Zmc2V0OnMsYWxpZ246bCxhbGlnbk9mZnNldDpjLGNvbGxpc2lvbkJvdW5kYXJ5OnUsY29sbGlzaW9uUGFkZGluZzpkLHN0aWNreTpwLGFycm93UGFkZGluZzpmLHRyYWNrQW5jaG9yOmgsa2VlcE1vdW50ZWQ6ZnVuY3Rpb24oKXtsZXQgZT13LnVzZUNvbnRleHQodW0pO2lmKHZvaWQgMD09PWUpdGhyb3cgRXJyb3IoXCJCYXNlIFVJOiA8VG9vbHRpcC5Qb3J0YWw+IGlzIG1pc3NpbmcuXCIpO3JldHVybiBlfSgpLGNvbGxpc2lvbkF2b2lkYW5jZTptfSksRT13LnVzZU1lbW8oKCk9PntsZXQgZT17fTtyZXR1cm4geSYmXCJib3RoXCIhPT1DJiZffHwoZS5wb2ludGVyRXZlbnRzPVwibm9uZVwiKSx7cm9sZTpcInByZXNlbnRhdGlvblwiLGhpZGRlbjohYixzdHlsZTp7Li4uay5wb3NpdGlvbmVyU3R5bGVzLC4uLmV9fX0sW3ksQyxfLGIsay5wb3NpdGlvbmVyU3R5bGVzXSksaj13LnVzZU1lbW8oKCk9Pih7cHJvcHM6RSwuLi5rfSksW0Usa10pLFM9dy51c2VNZW1vKCgpPT4oe29wZW46eSxzaWRlOmouc2lkZSxhbGlnbjpqLmFsaWduLGFuY2hvckhpZGRlbjpqLmFuY2hvckhpZGRlbn0pLFt5LGouc2lkZSxqLmFsaWduLGouYW5jaG9ySGlkZGVuXSksTz13LnVzZU1lbW8oKCk9Pih7Li4uUyxhcnJvd1JlZjpqLmFycm93UmVmLGFycm93U3R5bGVzOmouYXJyb3dTdHlsZXMsYXJyb3dVbmNlbnRlcmVkOmouYXJyb3dVbmNlbnRlcmVkfSksW1Msai5hcnJvd1JlZixqLmFycm93U3R5bGVzLGouYXJyb3dVbmNlbnRlcmVkXSksQj1zbyhcImRpdlwiLGUse3N0YXRlOlMscHJvcHM6W2oucHJvcHMsZ10scmVmOlt0LHZdLGN1c3RvbVN0eWxlSG9va01hcHBpbmc6c259KTtyZXR1cm4oMCxBLmpzeCkodXUuUHJvdmlkZXIse3ZhbHVlOk8sY2hpbGRyZW46Qn0pfSk7ZnVuY3Rpb24gdXkoZSl7bGV0IHQ9c0ooe3Jvb3Q6ZS5yb290fSk7cmV0dXJuIHQmJmVoLmNyZWF0ZVBvcnRhbChlLmNoaWxkcmVuLHQpfWZ1bmN0aW9uIHV2KGUpe2xldHtjaGlsZHJlbjp0LGtlZXBNb3VudGVkOm49ITEsY29udGFpbmVyOnJ9PWUse21vdW50ZWQ6b309dXMoKTtyZXR1cm4gb3x8bj8oMCxBLmpzeCkodW0uUHJvdmlkZXIse3ZhbHVlOm4sY2hpbGRyZW46KDAsQS5qc3gpKHV5LHtyb290OnIsY2hpbGRyZW46dH0pfSk6bnVsbH1sZXQgdWI9dy5jcmVhdGVDb250ZXh0KHtoYXNQcm92aWRlcjohMSx0aW1lb3V0TXM6MCxkZWxheVJlZjp7Y3VycmVudDowfSxpbml0aWFsRGVsYXlSZWY6e2N1cnJlbnQ6MH0sdGltZW91dDpuZXcgYXUsY3VycmVudElkUmVmOntjdXJyZW50Om51bGx9LGN1cnJlbnRDb250ZXh0UmVmOntjdXJyZW50Om51bGx9fSk7ZnVuY3Rpb24gdUEoZSl7bGV0e2NoaWxkcmVuOnQsZGVsYXk6bix0aW1lb3V0TXM6cj0wfT1lLG89dy51c2VSZWYobiksYT13LnVzZVJlZihuKSxpPXcudXNlUmVmKG51bGwpLGw9dy51c2VSZWYobnVsbCkscz1hZCgpO3JldHVybigwLEEuanN4KSh1Yi5Qcm92aWRlcix7dmFsdWU6dy51c2VNZW1vKCgpPT4oe2hhc1Byb3ZpZGVyOiEwLGRlbGF5UmVmOm8saW5pdGlhbERlbGF5UmVmOmEsY3VycmVudElkUmVmOmksdGltZW91dE1zOnIsY3VycmVudENvbnRleHRSZWY6bCx0aW1lb3V0OnN9KSxbcixzXSksY2hpbGRyZW46dH0pfWxldCB1eD13LmNyZWF0ZUNvbnRleHQodm9pZCAwKSx1dz1mdW5jdGlvbihlKXtsZXR7ZGVsYXk6dCxjbG9zZURlbGF5Om4sdGltZW91dDpyPTQwMH09ZSxvPXcudXNlTWVtbygoKT0+KHtkZWxheTp0LGNsb3NlRGVsYXk6bn0pLFt0LG5dKSxhPXcudXNlTWVtbygoKT0+KHtvcGVuOnQsY2xvc2U6bn0pLFt0LG5dKTtyZXR1cm4oMCxBLmpzeCkodXguUHJvdmlkZXIse3ZhbHVlOm8sY2hpbGRyZW46KDAsQS5qc3gpKHVBLHtkZWxheTphLHRpbWVvdXRNczpyLGNoaWxkcmVuOmUuY2hpbGRyZW59KX0pfTtmdW5jdGlvbiB1QyhlKXtyZXR1cm4gbnVsbCE9ZSYmbnVsbCE9ZS5jbGllbnRYfWZ1bmN0aW9uIHVfKGUpe2xldHtkaXNhYmxlZDp0PSExLGRlZmF1bHRPcGVuOm49ITEsb25PcGVuQ2hhbmdlOnIsb3BlbjpvLGRlbGF5OmEsY2xvc2VEZWxheTppLGhvdmVyYWJsZTpsPSEwLHRyYWNrQ3Vyc29yQXhpczpzPVwibm9uZVwiLGFjdGlvbnNSZWY6Yyxvbk9wZW5DaGFuZ2VDb21wbGV0ZTp1fT1lLGQ9YT8/NjAwLGY9aT8/MCxbcCxoXT13LnVzZVN0YXRlKG51bGwpLFttLGddPXcudXNlU3RhdGUobnVsbCksW3ksdl09dy51c2VTdGF0ZSgpLGI9dy51c2VSZWYobnVsbCksW3gsQ109YXkoe2NvbnRyb2xsZWQ6byxkZWZhdWx0Om4sbmFtZTpcIlRvb2x0aXBcIixzdGF0ZTpcIm9wZW5cIn0pLF89IXQmJng7ZnVuY3Rpb24gayhlLHQsbil7bGV0IG89XCJ0cmlnZ2VyLWhvdmVyXCI9PT1uLGE9ZSYmXCJ0cmlnZ2VyLWZvY3VzXCI9PT1uLGk9IWUmJihcInRyaWdnZXItcHJlc3NcIj09PW58fFwiZXNjYXBlLWtleVwiPT09bik7ZnVuY3Rpb24gbCgpe3I/LihlLHQsbiksQyhlKX1vP2VoLmZsdXNoU3luYyhsKTpsKCksYXx8aT92KGE/XCJmb2N1c1wiOlwiZGlzbWlzc1wiKTpcInRyaWdnZXItaG92ZXJcIj09PW4mJnYodm9pZCAwKX1sZXQgRT1haChrKTt4JiZ0JiZrKCExLHZvaWQgMCxcImRpc2FibGVkXCIpO2xldHttb3VudGVkOmosc2V0TW91bnRlZDpTLHRyYW5zaXRpb25TdGF0dXM6T309bF8oXyksQj1haCgoKT0+e1MoITEpLHU/LighMSl9KTtsayh7ZW5hYmxlZDohYyxvcGVuOl8scmVmOmIsb25Db21wbGV0ZSgpe198fEIoKX19KSx3LnVzZUltcGVyYXRpdmVIYW5kbGUoYywoKT0+KHt1bm1vdW50OkJ9KSxbQl0pO2xldCBQPWFCKHtlbGVtZW50czp7cmVmZXJlbmNlOnAsZmxvYXRpbmc6bX0sb3BlbjpfLG9uT3BlbkNoYW5nZShlLHQsbil7RShlLHQsbEQobikpfX0pLEk9dy51c2VDb250ZXh0KHV4KSx7ZGVsYXlSZWY6VCxpc0luc3RhbnRQaGFzZTp6LGhhc1Byb3ZpZGVyOkR9PWZ1bmN0aW9uKGUsdD17fSl7bGV0e29wZW46bixvbk9wZW5DaGFuZ2U6cixmbG9hdGluZ0lkOm99PWUse2VuYWJsZWQ6YT0hMH09dCx7Y3VycmVudElkUmVmOmksZGVsYXlSZWY6bCx0aW1lb3V0TXM6cyxpbml0aWFsRGVsYXlSZWY6YyxjdXJyZW50Q29udGV4dFJlZjp1LGhhc1Byb3ZpZGVyOmQsdGltZW91dDpmfT13LnVzZUNvbnRleHQodWIpLFtwLGhdPXcudXNlU3RhdGUoITEpO3JldHVybiBhQygoKT0+e2Z1bmN0aW9uIGUoKXtoKCExKSx1LmN1cnJlbnQ/LnNldElzSW5zdGFudFBoYXNlKCExKSxpLmN1cnJlbnQ9bnVsbCx1LmN1cnJlbnQ9bnVsbCxsLmN1cnJlbnQ9Yy5jdXJyZW50fWlmKGEmJmkuY3VycmVudCYmIW4mJmkuY3VycmVudD09PW8pe2lmKGgoITEpLHMpcmV0dXJuIGYuc3RhcnQocyxlKSwoKT0+e2YuY2xlYXIoKX07ZSgpfX0sW2EsbixvLGksbCxzLGMsdSxmXSksYUMoKCk9PntpZighYXx8IW4pcmV0dXJuO2xldCBlPXUuY3VycmVudCx0PWkuY3VycmVudDt1LmN1cnJlbnQ9e29uT3BlbkNoYW5nZTpyLHNldElzSW5zdGFudFBoYXNlOmh9LGkuY3VycmVudD1vLGwuY3VycmVudD17b3BlbjowLGNsb3NlOmlqKGMuY3VycmVudCxcImNsb3NlXCIpfSxudWxsIT09dCYmdCE9PW8/KGYuY2xlYXIoKSxoKCEwKSxlPy5zZXRJc0luc3RhbnRQaGFzZSghMCksZT8ub25PcGVuQ2hhbmdlKCExKSk6KGgoITEpLGU/LnNldElzSW5zdGFudFBoYXNlKCExKSl9LFthLG4sbyxyLGksbCxzLGMsdSxmXSksYUMoKCk9PigpPT57dS5jdXJyZW50PW51bGx9LFt1XSksdy51c2VNZW1vKCgpPT4oe2hhc1Byb3ZpZGVyOmQsZGVsYXlSZWY6bCxpc0luc3RhbnRQaGFzZTpwfSksW2QsbCxwXSl9KFApLEw9ej9cImRlbGF5XCI6eSxOPWlPKFAse2VuYWJsZWQ6IXQsbW91c2VPbmx5OiEwLG1vdmU6ITEsaGFuZGxlQ2xvc2U6bCYmXCJib3RoXCIhPT1zP2lUKCk6bnVsbCxyZXN0TXMoKXtsZXQgZT1JPy5kZWxheSx0PVwib2JqZWN0XCI9PXR5cGVvZiBULmN1cnJlbnQ/VC5jdXJyZW50Lm9wZW46dm9pZCAwLG49ZDtyZXR1cm4gRCYmKG49MCE9PXQ/YT8/ZT8/ZDowKSxufSxkZWxheSgpe2xldCBlPVwib2JqZWN0XCI9PXR5cGVvZiBULmN1cnJlbnQ/VC5jdXJyZW50LmNsb3NlOnZvaWQgMCx0PWY7cmV0dXJuIG51bGw9PWkmJkQmJih0PWUpLHtjbG9zZTp0fX19KSxSPWlEKFAse2VuYWJsZWQ6IXR9KSxNPWkkKFAse2VuYWJsZWQ6IXQscmVmZXJlbmNlUHJlc3M6ITB9KSx7Z2V0UmVmZXJlbmNlUHJvcHM6WixnZXRGbG9hdGluZ1Byb3BzOlV9PWx2KFtOLFIsTSxmdW5jdGlvbihlLHQ9e30pe2xldHtvcGVuOm4sZGF0YVJlZjpyLGVsZW1lbnRzOntmbG9hdGluZzpvLGRvbVJlZmVyZW5jZTphfSxyZWZzOml9PWUse2VuYWJsZWQ6bD0hMCxheGlzOnM9XCJib3RoXCIseDpjPW51bGwseTp1PW51bGx9PXQsZD13LnVzZVJlZighMSksZj13LnVzZVJlZihudWxsKSxbcCxoXT13LnVzZVN0YXRlKCksW20sZ109dy51c2VTdGF0ZShbXSkseT1haCgoZSx0KT0+e2lmKCFkLmN1cnJlbnQmJighci5jdXJyZW50Lm9wZW5FdmVudHx8dUMoci5jdXJyZW50Lm9wZW5FdmVudCkpKXt2YXIgbixvO2xldCBsLGMsdTtpLnNldFBvc2l0aW9uUmVmZXJlbmNlKChuPWEsbz17eDplLHk6dCxheGlzOnMsZGF0YVJlZjpyLHBvaW50ZXJUeXBlOnB9LGw9bnVsbCxjPW51bGwsdT0hMSx7Y29udGV4dEVsZW1lbnQ6bnx8dm9pZCAwLGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpe2xldCBlPW4/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfHx7d2lkdGg6MCxoZWlnaHQ6MCx4OjAseTowfSx0PVwieFwiPT09by5heGlzfHxcImJvdGhcIj09PW8uYXhpcyxyPVwieVwiPT09by5heGlzfHxcImJvdGhcIj09PW8uYXhpcyxhPVtcIm1vdXNlZW50ZXJcIixcIm1vdXNlbW92ZVwiXS5pbmNsdWRlcyhvLmRhdGFSZWYuY3VycmVudC5vcGVuRXZlbnQ/LnR5cGV8fFwiXCIpJiZcInRvdWNoXCIhPT1vLnBvaW50ZXJUeXBlLGk9ZS53aWR0aCxzPWUuaGVpZ2h0LGQ9ZS54LGY9ZS55O3JldHVybiBudWxsPT1sJiZvLngmJnQmJihsPWUueC1vLngpLG51bGw9PWMmJm8ueSYmciYmKGM9ZS55LW8ueSksZC09bHx8MCxmLT1jfHwwLGk9MCxzPTAsIXV8fGE/KGk9XCJ5XCI9PT1vLmF4aXM/ZS53aWR0aDowLHM9XCJ4XCI9PT1vLmF4aXM/ZS5oZWlnaHQ6MCxkPXQmJm51bGwhPW8ueD9vLng6ZCxmPXImJm51bGwhPW8ueT9vLnk6Zik6dSYmIWEmJihzPVwieFwiPT09by5heGlzP2UuaGVpZ2h0OnMsaT1cInlcIj09PW8uYXhpcz9lLndpZHRoOmkpLHU9ITAse3dpZHRoOmksaGVpZ2h0OnMseDpkLHk6Zix0b3A6ZixyaWdodDpkK2ksYm90dG9tOmYrcyxsZWZ0OmR9fX0pKX19KSx2PWFoKGU9PntudWxsPT1jJiZudWxsPT11JiYobj9mLmN1cnJlbnR8fGcoW10pOnkoZS5jbGllbnRYLGUuY2xpZW50WSkpfSksYj1pcyhwKT9vOm4sQT13LnVzZUNhbGxiYWNrKCgpPT57aWYoIWJ8fCFsfHxudWxsIT1jfHxudWxsIT11KXJldHVybjtsZXQgZT1hVChvKTtmdW5jdGlvbiB0KG4pe2l2KG8saWIobikpPyhlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0KSxmLmN1cnJlbnQ9bnVsbCk6eShuLmNsaWVudFgsbi5jbGllbnRZKX1pZighci5jdXJyZW50Lm9wZW5FdmVudHx8dUMoci5jdXJyZW50Lm9wZW5FdmVudCkpe2UuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHQpO2xldCBuPSgpPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdCksZi5jdXJyZW50PW51bGx9O3JldHVybiBmLmN1cnJlbnQ9bixufWkuc2V0UG9zaXRpb25SZWZlcmVuY2UoYSl9LFtiLGwsYyx1LG8scixpLGEseV0pO3cudXNlRWZmZWN0KCgpPT5BKCksW0EsbV0pLHcudXNlRWZmZWN0KCgpPT57bCYmIW8mJihkLmN1cnJlbnQ9ITEpfSxbbCxvXSksdy51c2VFZmZlY3QoKCk9PnshbCYmbiYmKGQuY3VycmVudD0hMCl9LFtsLG5dKSxhQygoKT0+e2wmJihudWxsIT1jfHxudWxsIT11KSYmKGQuY3VycmVudD0hMSx5KGMsdSkpfSxbbCxjLHUseV0pO2xldCB4PXcudXNlTWVtbygoKT0+e2Z1bmN0aW9uIGUoZSl7aChlLnBvaW50ZXJUeXBlKX1yZXR1cm57b25Qb2ludGVyRG93bjplLG9uUG9pbnRlckVudGVyOmUsb25Nb3VzZU1vdmU6dixvbk1vdXNlRW50ZXI6dn19LFt2XSk7cmV0dXJuIHcudXNlTWVtbygoKT0+bD97cmVmZXJlbmNlOnh9Ont9LFtsLHhdKX0oUCx7ZW5hYmxlZDohdCYmXCJub25lXCIhPT1zLGF4aXM6XCJub25lXCI9PT1zP3ZvaWQgMDpzfSldKSxGPXcudXNlTWVtbygoKT0+KHtvcGVuOl8sc2V0T3BlbjpFLG1vdW50ZWQ6aixzZXRNb3VudGVkOlMsc2V0VHJpZ2dlckVsZW1lbnQ6aCxwb3NpdGlvbmVyRWxlbWVudDptLHNldFBvc2l0aW9uZXJFbGVtZW50OmcscG9wdXBSZWY6Yix0cmlnZ2VyUHJvcHM6WigpLHBvcHVwUHJvcHM6VSgpLGZsb2F0aW5nUm9vdENvbnRleHQ6UCxpbnN0YW50VHlwZTpMLHRyYW5zaXRpb25TdGF0dXM6Tyxvbk9wZW5DaGFuZ2VDb21wbGV0ZTp1fSksW18sRSxqLFMsaCxtLGcsYixaLFUsUCxMLE8sdV0pLHE9dy51c2VNZW1vKCgpPT4oey4uLkYsZGVsYXk6ZCxjbG9zZURlbGF5OmYsdHJhY2tDdXJzb3JBeGlzOnMsaG92ZXJhYmxlOmx9KSxbRixkLGYscyxsXSk7cmV0dXJuKDAsQS5qc3gpKHVsLlByb3ZpZGVyLHt2YWx1ZTpxLGNoaWxkcmVuOmUuY2hpbGRyZW59KX12YXIgdWs9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL3Rvb2x0aXAvdG9vbHRpcC5jc3NcIiksdUU9e307dUUuc3R5bGVUYWdUcmFuc2Zvcm09bSgpLHVFLnNldEF0dHJpYnV0ZXM9ZCgpLHVFLmluc2VydD1jKCksdUUuZG9tQVBJPWwoKSx1RS5pbnNlcnRTdHlsZUVsZW1lbnQ9cCgpLGEoKSh1ay5aLHVFKSx1ay5aJiZ1ay5aLmxvY2FscyYmdWsuWi5sb2NhbHM7dmFyIHVqPSgwLHcuZm9yd2FyZFJlZikoZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8sYSxpLGwscyxjLHUsZCxmLHAsaD0oMCx4LmMpKDM1KSxtPWUuY2xhc3NOYW1lLGc9ZS5jaGlsZHJlbix5PWUudGl0bGUsdj1lLmRpcmVjdGlvbixiPWUuYXJyb3dTaXplLHc9ZS5vZmZzZXQsQz12b2lkIDA9PT12P1widG9wXCI6dixfPXZvaWQgMD09PWI/NjpiLGs9ZGwoKS5zaGFkb3dSb290O2lmKCF5KXJldHVybiBnO2hbMF0hPT1nPyhuPWZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuKDAsQS5qc3gpKFwic3BhblwiLCh0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1lLG89dCxhPW5bdF0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe30sZSksbj1uPXtjaGlsZHJlbjpnfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO24ucHVzaC5hcHBseShuLHIpfXJldHVybiBufSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pLHQpKX0saFswXT1nLGhbMV09bik6bj1oWzFdLGhbMl0hPT10fHxoWzNdIT09bj8ocj0oMCxBLmpzeCkodWMse3JlZjp0LHJlbmRlcjpufSksaFsyXT10LGhbM109bixoWzRdPXIpOnI9aFs0XTt2YXIgRT0odm9pZCAwPT09dz84OncpK18saj1cIlwiLmNvbmNhdChfLFwicHhcIiksUz1cIlwiLmNvbmNhdChfLFwicHhcIik7aFs1XSE9PWp8fGhbNl0hPT1TPyhvPXtcIi0tYW5jaG9yLXdpZHRoXCI6aixcIi0tYW5jaG9yLWhlaWdodFwiOlN9LGhbNV09aixoWzZdPVMsaFs3XT1vKTpvPWhbN107dmFyIE89bztoWzhdIT09bT8oYT1lSihcInRvb2x0aXBcIixtKSxoWzhdPW0saFs5XT1hKTphPWhbOV07dmFyIEI9XCJcIi5jb25jYXQoXyxcInB4XCIpO2hbMTBdIT09Qj8oaT17XCItLWFycm93LXNpemVcIjpCfSxoWzEwXT1CLGhbMTFdPWkpOmk9aFsxMV07dmFyIFA9aSxJPVwidG9vbHRpcC1hcnJvdy0tXCIuY29uY2F0KEMpO2hbMTJdIT09ST8obD1lSihcInRvb2x0aXAtYXJyb3dcIixJKSxoWzEyXT1JLGhbMTNdPWwpOmw9aFsxM107dmFyIFQ9XCJcIi5jb25jYXQoXyxcInB4XCIpO2hbMTRdIT09VD8ocz17XCItLWFycm93LXNpemVcIjpUfSxoWzE0XT1ULGhbMTVdPXMpOnM9aFsxNV07dmFyIHo9cztyZXR1cm4gaFsxNl0hPT1sfHxoWzE3XSE9PXo/KGM9KDAsQS5qc3gpKHVmLHtjbGFzc05hbWU6bCxzdHlsZTp6fSksaFsxNl09bCxoWzE3XT16LGhbMThdPWMpOmM9aFsxOF0saFsxOV0hPT1hfHxoWzIwXSE9PVB8fGhbMjFdIT09Y3x8aFsyMl0hPT15Pyh1PSgwLEEuanN4cykodWgse2NsYXNzTmFtZTphLHN0eWxlOlAsY2hpbGRyZW46W3ksY119KSxoWzE5XT1hLGhbMjBdPVAsaFsyMV09YyxoWzIyXT15LGhbMjNdPXUpOnU9aFsyM10saFsyNF0hPT1DfHxoWzI1XSE9PU98fGhbMjZdIT09dXx8aFsyN10hPT1FPyhkPSgwLEEuanN4KSh1Zyx7c2lkZTpDLHNpZGVPZmZzZXQ6RSxjbGFzc05hbWU6XCJ0b29sdGlwLXBvc2l0aW9uZXJcIixzdHlsZTpPLGNoaWxkcmVuOnV9KSxoWzI0XT1DLGhbMjVdPU8saFsyNl09dSxoWzI3XT1FLGhbMjhdPWQpOmQ9aFsyOF0saFsyOV0hPT1rfHxoWzMwXSE9PWQ/KGY9KDAsQS5qc3gpKHV2LHtjb250YWluZXI6ayxjaGlsZHJlbjpkfSksaFsyOV09ayxoWzMwXT1kLGhbMzFdPWYpOmY9aFszMV0saFszMl0hPT1mfHxoWzMzXSE9PXI/KHA9KDAsQS5qc3gpKHV3LHtjaGlsZHJlbjooMCxBLmpzeHMpKHVfLHtkZWxheTo0MDAsY2hpbGRyZW46W3IsZl19KX0pLGhbMzJdPWYsaFszM109cixoWzM0XT1wKTpwPWhbMzRdLHB9KTtmdW5jdGlvbiB1UyhlKXt2YXIgdCxuLHI9KDAseC5jKSgzKSxvPWUucG9zc2libGVFeHRlbnNpb24sYT1lLm1pc3NpbmdHbG9iYWxFcnJvcj9cIk5vIGdsb2JhbC1lcnJvci5cIi5jb25jYXQobyxcIiBmb3VuZDogQWRkIG9uZSB0byBlbnN1cmUgdXNlcnMgc2VlIGEgaGVscGZ1bCBtZXNzYWdlIHdoZW4gYW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnMuXCIpOm51bGw7cmV0dXJuIHJbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8odD0oMCxBLmpzeCkodVIse30pLHJbMF09dCk6dD1yWzBdLHJbMV0hPT1hPyhuPSgwLEEuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1zdWdnZXN0aW9uc1wiLGNoaWxkcmVuOigwLEEuanN4KSh1aix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1zdWdnZXN0aW9ucy10b29sdGlwXCIsdGl0bGU6YSxjaGlsZHJlbjp0fSl9KSxyWzFdPWEsclsyXT1uKTpuPXJbMl0sbn1mdW5jdGlvbiB1TyhlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9ZSxvPXQsYT1uW3RdLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gdUIoZSx0KXtyZXR1cm4gdD1udWxsIT10P3Q6e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKSl9KSxlfXZhciB1UD1mdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiEhKG51bGw9PSh0PWUudmFsdWUpP3ZvaWQgMDp0LnR5cGUpJiYhIShudWxsPT0obj1lLnZhbHVlKT92b2lkIDA6bi5wYWdlUGF0aCl9O2Z1bmN0aW9uIHVJKGUpe3ZhciB0LG4scj0oMCx4LmMpKDMpLG89ZS5wYWdlO3JldHVybiByWzBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHQ9KDAsQS5qc3gpKHVNLHt9KSxyWzBdPXQpOnQ9clswXSxyWzFdIT09bz8obj0oMCxBLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItcGFnZS1yb3V0ZS1iYXJcIixjaGlsZHJlbjpbdCwoMCxBLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItcGFnZS1yb3V0ZS1iYXItcGF0aFwiLGNoaWxkcmVuOm99KV19KSxyWzFdPW8sclsyXT1uKTpuPXJbMl0sbn1mdW5jdGlvbiB1VChlKXt2YXIgdCxuLHIsbz0oMCx4LmMpKDkpLGE9ZS5hY3RpdmVCb3VuZGFyaWVzQ291bnQsaT1lLm9uR2xvYmFsUmVzZXQsbD1hPjAscz1cInNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJ1dHRvbiBcIi5jb25jYXQobD9cIlwiOlwic2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uLS1kaXNhYmxlZFwiKSxjPWw/aTp2b2lkIDAsdT0hbDtyZXR1cm4gb1swXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PSgwLEEuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1mb290ZXItdGV4dFwiLGNoaWxkcmVuOlwiQ2xlYXIgU2VnbWVudCBPdmVycmlkZXNcIn0pLG9bMF09dCk6dD1vWzBdLG9bMV0hPT1hfHxvWzJdIT09bD8obj1sJiYoMCxBLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJhZGdlXCIsY2hpbGRyZW46YX0pLG9bMV09YSxvWzJdPWwsb1szXT1uKTpuPW9bM10sb1s0XSE9PXN8fG9bNV0hPT1jfHxvWzZdIT09dXx8b1s3XSE9PW4/KHI9KDAsQS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItZm9vdGVyXCIsY2hpbGRyZW46KDAsQS5qc3hzKShcImJ1dHRvblwiLHtjbGFzc05hbWU6cyxvbkNsaWNrOmMsZGlzYWJsZWQ6dSx0eXBlOlwiYnV0dG9uXCIsY2hpbGRyZW46W3Qsbl19KX0pLG9bNF09cyxvWzVdPWMsb1s2XT11LG9bN109bixvWzhdPXIpOnI9b1s4XSxyfWZ1bmN0aW9uIHV6KGUpe3ZhciB0LG4scixvLGEsaT0oMCx4LmMpKDE1KSxsPWUudHlwZSxzPWUuaXNCdWlsdGluLGM9ZS5pc092ZXJyaWRkZW4sdT1lLmZpbGVQYXRoLGQ9ZS5maWxlTmFtZSxmPVwic2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLS1cIi5jb25jYXQobCkscD1zJiZcInNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC0tYnVpbHRpblwiLGg9YyYmXCJzZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLW92ZXJyaWRkZW5cIjtyZXR1cm4gaVswXSE9PWZ8fGlbMV0hPT1wfHxpWzJdIT09aD8odD1lSihcInNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbFwiLGYscCxoKSxpWzBdPWYsaVsxXT1wLGlbMl09aCxpWzNdPXQpOnQ9aVszXSxpWzRdIT09dT8obj1mdW5jdGlvbigpe3ZhciBlO2U9bmV3IFVSTFNlYXJjaFBhcmFtcyh7ZmlsZTp7ZmlsZVBhdGg6dX0uZmlsZVBhdGgsaXNBcHBSZWxhdGl2ZVBhdGg6XCIxXCJ9KSxmZXRjaChcIlwiLmNvbmNhdChwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIfHxcIlwiLFwiL19fbmV4dGpzX2xhdW5jaC1lZGl0b3I/XCIpLmNvbmNhdChlLnRvU3RyaW5nKCkpKX0saVs0XT11LGlbNV09bik6bj1pWzVdLGlbNl0hPT1kPyhyPSgwLEEuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLXRleHRcIixjaGlsZHJlbjpkfSksaVs2XT1kLGlbN109cik6cj1pWzddLGlbOF0hPT1zPyhvPXM/KDAsQS5qc3gpKHVSLHt9KTooMCxBLmpzeCkodVose2NsYXNzTmFtZTpcImNvZGUtaWNvblwifSksaVs4XT1zLGlbOV09byk6bz1pWzldLGlbMTBdIT09dHx8aVsxMV0hPT1ufHxpWzEyXSE9PXJ8fGlbMTNdIT09bz8oYT0oMCxBLmpzeHMpKFwic3BhblwiLHtjbGFzc05hbWU6dCxvbkNsaWNrOm4sY2hpbGRyZW46W3Isb119KSxpWzEwXT10LGlbMTFdPW4saVsxMl09cixpWzEzXT1vLGlbMTRdPWEpOmE9aVsxNF0sYX1mdW5jdGlvbiB1RChlKXt2YXIgdCxuLHIsbyxhLGksbCxzLGMsdT0oMCx4LmMpKDE3KSxkPWUucGFnZSxmPSgwLHcudXNlU3luY0V4dGVybmFsU3RvcmUpKG84LG83LGFlKTt1WzBdIT09Zj8obj1mdW5jdGlvbiBlKHQpe3ZhciBuLHI9MDtyZXR1cm4obnVsbD09KG49dC52YWx1ZSk/dm9pZCAwOm4uc2V0Qm91bmRhcnlUeXBlKSYmbnVsbCE9PXQudmFsdWUuYm91bmRhcnlUeXBlJiYhYzQodC52YWx1ZS50eXBlKSYmcisrLE9iamVjdC52YWx1ZXModC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbih0KXt0JiYocis9ZSh0KSl9KSxyfShmKSx1WzBdPWYsdVsxXT1uKTpuPXVbMV0sdD1uLHVbMl0hPT1mPyhyPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIGUodCl7dmFyIG47KG51bGw9PShuPXQudmFsdWUpP3ZvaWQgMDpuLnNldEJvdW5kYXJ5VHlwZSkmJnQudmFsdWUuc2V0Qm91bmRhcnlUeXBlKG51bGwpLE9iamVjdC52YWx1ZXModC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbih0KXt0JiZlKHQpfSl9KGYpfSx1WzJdPWYsdVszXT1yKTpyPXVbM107dmFyIHA9cjtyZXR1cm4gdVs0XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhvPXtkaXNwbGF5OlwiZmxleFwiLGZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixoZWlnaHQ6XCIxMDAlXCJ9LHVbNF09byk6bz11WzRdLHVbNV0hPT1kPyhhPSgwLEEuanN4KSh1SSx7cGFnZTpkfSksdVs1XT1kLHVbNl09YSk6YT11WzZdLHVbN109PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oaT17ZmxleDpcIjEgMSBhdXRvXCIsb3ZlcmZsb3c6XCJhdXRvXCJ9LHVbN109aSk6aT11WzddLHVbOF0hPT1mPyhsPSgwLEEuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJzZWdtZW50LWV4cGxvcmVyLWNvbnRlbnRcIixcImRhdGEtbmV4dGpzLWRldnRvb2wtc2VnbWVudC1leHBsb3JlclwiOiEwLHN0eWxlOmksY2hpbGRyZW46KDAsQS5qc3gpKHVOLHtub2RlOmYsbGV2ZWw6MCxzZWdtZW50OlwiXCJ9KX0pLHVbOF09Zix1WzldPWwpOmw9dVs5XSx1WzEwXSE9PXR8fHVbMTFdIT09cD8ocz0oMCxBLmpzeCkodVQse2FjdGl2ZUJvdW5kYXJpZXNDb3VudDp0LG9uR2xvYmFsUmVzZXQ6cH0pLHVbMTBdPXQsdVsxMV09cCx1WzEyXT1zKTpzPXVbMTJdLHVbMTNdIT09YXx8dVsxNF0hPT1sfHx1WzE1XSE9PXM/KGM9KDAsQS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNlZ21lbnRzLWV4cGxvcmVyXCI6ITAsc3R5bGU6byxjaGlsZHJlbjpbYSxsLHNdfSksdVsxM109YSx1WzE0XT1sLHVbMTVdPXMsdVsxNl09Yyk6Yz11WzE2XSxjfXZhciB1TD1cImdsb2JhbC1lcnJvclwiO2Z1bmN0aW9uIHVOKGUpe3ZhciB0PWUuc2VnbWVudCxuPWUubm9kZSxyPWUubGV2ZWwsbz0oMCx3LnVzZU1lbW8pKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKG4uY2hpbGRyZW4pfSxbbi5jaGlsZHJlbl0pLGE9KDAsdy51c2VNZW1vKShmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBvLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5jaGlsZHJlblt0XTtpZihyJiZyLnZhbHVlKXt2YXIgbz1jNShyLnZhbHVlLnR5cGUpLGE9bz09PXVMOyhhJiYhci52YWx1ZS5wYWdlUGF0aC5zdGFydHNXaXRoKGMwKXx8IWEmJmM0KHIudmFsdWUudHlwZSkpJiZlLnB1c2gobyl9fSksMD09PXImJiFlLmluY2x1ZGVzKHVMKX0sW24uY2hpbGRyZW4sbyxyXSksaT1vLnNvcnQoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmluY2x1ZGVzKFwiLlwiKSxvPXQuaW5jbHVkZXMoXCIuXCIpO2lmKHImJiFvKXJldHVybiAtMTtpZighciYmbylyZXR1cm4gMTtpZihyJiZvKXt2YXIgYSxpLGwscyxjLHUsZCxmLHA9bnVsbD09KGk9bi5jaGlsZHJlbltlXSl8fG51bGw9PShhPWkudmFsdWUpP3ZvaWQgMDphLnR5cGUsaD1udWxsPT0ocz1uLmNoaWxkcmVuW3RdKXx8bnVsbD09KGw9cy52YWx1ZSk/dm9pZCAwOmwudHlwZSxtPWZ1bmN0aW9uKGUpe3JldHVybiBlP1wibGF5b3V0XCI9PT1lPzE6XCJ0ZW1wbGF0ZVwiPT09ZT8yOlwicGFnZVwiPT09ZT8zOmM0KGUpPzQ6NTo1fSxnPW0ocCkseT1tKGgpO2lmKGchPT15KXJldHVybiBnLXk7dmFyIHY9KG51bGw9PSh1PW4uY2hpbGRyZW5bZV0pfHxudWxsPT0oYz11LnZhbHVlKT92b2lkIDA6Yy5wYWdlUGF0aCl8fFwiXCIsYj0obnVsbD09KGY9bi5jaGlsZHJlblt0XSl8fG51bGw9PShkPWYudmFsdWUpP3ZvaWQgMDpkLnBhZ2VQYXRoKXx8XCJcIjtyZXR1cm4gdi5sb2NhbGVDb21wYXJlKGIpfXJldHVybiBlLmxvY2FsZUNvbXBhcmUodCl9KSxsPTAhPT1yfHx0P3Q6XCJhcHBcIixzPVtdLGM9W10sdT0hMCxkPSExLGY9dm9pZCAwO3RyeXtmb3IodmFyIHAsaD1pW1N5bWJvbC5pdGVyYXRvcl0oKTshKHU9KHA9aC5uZXh0KCkpLmRvbmUpO3U9ITApe3ZhciBtPXAudmFsdWUsZz1uLmNoaWxkcmVuW21dO2lmKGcpe2lmKHVQKGcpKXtjLnB1c2gobSk7Y29udGludWV9cy5wdXNoKG0pfX19Y2F0Y2goZSl7ZD0hMCxmPWV9ZmluYWxseXt0cnl7dXx8bnVsbD09aC5yZXR1cm58fGgucmV0dXJuKCl9ZmluYWxseXtpZihkKXRocm93IGZ9fWZvcih2YXIgeT1jMShjWzBdfHxcIlwiKS5zcGxpdChcIi5cIikucG9wKCl8fFwianNcIix2PW51bGwsYj1pLmxlbmd0aC0xO2I+PTA7Yi0tKXt2YXIgeD1uLmNoaWxkcmVuW2lbYl1dO2lmKHgmJngudmFsdWUpe3ZhciBDPWM0KHgudmFsdWUudHlwZSk7aWYoIXYmJiFDKXt2PXg7YnJlYWt9fX12YXIgXz1udWxsLGs9ITAsRT0hMSxqPXZvaWQgMDt0cnl7Zm9yKHZhciBTLE89aVtTeW1ib2wuaXRlcmF0b3JdKCk7IShrPShTPU8ubmV4dCgpKS5kb25lKTtrPSEwKXt2YXIgQj1TLnZhbHVlLFA9bi5jaGlsZHJlbltCXTtpZihQJiZQLnZhbHVlJiZjNChQLnZhbHVlLnR5cGUpKXtfPVA7YnJlYWt9fX1jYXRjaChlKXtFPSEwLGo9ZX1maW5hbGx5e3RyeXtrfHxudWxsPT1PLnJldHVybnx8Ty5yZXR1cm4oKX1maW5hbGx5e2lmKEUpdGhyb3cgan19dj12fHxfO3ZhciBJPWMubGVuZ3RoPjAsVD17XCJub3QtZm91bmRcIjpudWxsLGxvYWRpbmc6bnVsbCxlcnJvcjpudWxsLFwiZ2xvYmFsLWVycm9yXCI6bnVsbH07cmV0dXJuIGMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1uLmNoaWxkcmVuW2VdO2lmKHQmJnQudmFsdWUmJmM0KHQudmFsdWUudHlwZSkpe3ZhciByPWM1KHQudmFsdWUudHlwZSk7ciBpbiBUJiYoVFtyXT10LnZhbHVlLnBhZ2VQYXRofHxudWxsKX19KSwoMCxBLmpzeHMpKEEuRnJhZ21lbnQse2NoaWxkcmVuOltJJiYoMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1pdGVtXCIsXCJkYXRhLW5leHRqcy1kZXZ0b29sLXNlZ21lbnQtZXhwbG9yZXItc2VnbWVudFwiOnQrXCItXCIrcixjaGlsZHJlbjooMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1pdGVtLXJvd1wiLHN0eWxlOnVPKHt9LHtwYWRkaW5nTGVmdDpcIlwiLmNvbmNhdCgocisxKSo4LFwicHhcIil9KSxjaGlsZHJlbjooMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1pdGVtLXJvdy1tYWluXCIsY2hpbGRyZW46KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJzZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lXCIsY2hpbGRyZW46W2wmJigwLEEuanN4cykoXCJzcGFuXCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLXBhdGhcIixjaGlsZHJlbjpbbCwoMCxBLmpzeCkoXCJzbWFsbFwiLHtjaGlsZHJlbjpcIi9cIn0pXX0pLGEmJigwLEEuanN4KSh1Uyx7cG9zc2libGVFeHRlbnNpb246eSxtaXNzaW5nR2xvYmFsRXJyb3I6YX0pLGMubGVuZ3RoPjAmJigwLEEuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1maWxlc1wiLGNoaWxkcmVuOmMubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PW4uY2hpbGRyZW5bZV07aWYoIXR8fCF0LnZhbHVlfHxjNCh0LnZhbHVlLnR5cGUpKXJldHVybiBudWxsO3ZhciByPXQudmFsdWUucGFnZVBhdGgsbz1yLnNwbGl0KFwiL1wiKS5wb3AoKXx8XCJcIixhPXIuc3RhcnRzV2l0aChjMCksaT1jMShvKSxsPWE/XCJUaGUgZGVmYXVsdCBOZXh0LmpzIFwiLmNvbmNhdCh0LnZhbHVlLnR5cGUsXCIgaXMgYmVpbmcgc2hvd24uIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgcGFnZSBieSBhZGRpbmcgeW91ciBvd24gXCIpLmNvbmNhdChpLFwiIGZpbGUgdG8gdGhlIGFwcC8gZGlyZWN0b3J5LlwiKTpudWxsLHM9bnVsbCE9PXQudmFsdWUuYm91bmRhcnlUeXBlO3JldHVybigwLEEuanN4KSh1aix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLXRvb2x0aXAtLVwiKyhhP1wibGdcIjpcInNtXCIpLGRpcmVjdGlvbjphP1wicmlnaHRcIjpcInRvcFwiLHRpdGxlOmwsb2Zmc2V0OjEyLGNoaWxkcmVuOigwLEEuanN4KSh1eix7dHlwZTp0LnZhbHVlLnR5cGUsaXNCdWlsdGluOmEsaXNPdmVycmlkZGVuOnMsZmlsZVBhdGg6cixmaWxlTmFtZTppfSl9LGUpfSl9KSx2JiZ2LnZhbHVlJiYoMCxBLmpzeCkodWUse25vZGVTdGF0ZTp2LnZhbHVlLGJvdW5kYXJpZXM6VH0pXX0pfSl9KX0pLHMubWFwKGZ1bmN0aW9uKGUpe3ZhciBvPW4uY2hpbGRyZW5bZV07aWYoIW8pcmV0dXJuIG51bGw7dmFyIGE9ST9lOnQrXCIgLyBcIitlO3JldHVybigwLEEuanN4KSh1Tix7c2VnbWVudDphLG5vZGU6byxsZXZlbDpJP3IrMTpyfSxlKX0pXX0pfWZ1bmN0aW9uIHVSKGUpe3ZhciB0LG4scixvPSgwLHguYykoNCk7cmV0dXJuIG9bMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8odD0oMCxBLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTQgOEMxNCAxMS4zMTM3IDExLjMxMzcgMTQgOCAxNEM0LjY4NjI5IDE0IDIgMTEuMzEzNyAyIDhDMiA0LjY4NjI5IDQuNjg2MjkgMiA4IDJDMTEuMzEzNyAyIDE0IDQuNjg2MjkgMTQgOFpcIixmaWxsOlwidmFyKC0tY29sb3ItZ3JheS00MDApXCJ9KSxuPSgwLEEuanN4KShcInBhdGhcIix7ZDpcIk03Ljc1IDdDOC4zMDIyOCA3LjAwMDAxIDguNzUgNy40NDc3MiA4Ljc1IDhWMTEuMjVINy4yNVY4LjVINi4yNVY3SDcuNzVaTTggNEM4LjU1MjI4IDQgOSA0LjQ0NzcyIDkgNUM5IDUuNTUyMjggOC41NTIyOCA2IDggNkM3LjQ0NzcyIDYgNyA1LjU1MjI4IDcgNUM3IDQuNDQ3NzIgNy40NDc3MiA0IDggNFpcIixmaWxsOlwidmFyKC0tY29sb3ItZ3JheS05MDApXCJ9KSxvWzBdPXQsb1sxXT1uKToodD1vWzBdLG49b1sxXSksb1syXSE9PWU/KHI9KDAsQS5qc3hzKShcInN2Z1wiLHVCKHVPKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHtjaGlsZHJlbjpbdCxuXX0pKSxvWzJdPWUsb1szXT1yKTpyPW9bM10scn1mdW5jdGlvbiB1TSgpe3ZhciBlLHQ9KDAseC5jKSgxKTtyZXR1cm4gdFswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhlPSgwLEEuanN4KShcInN2Z1wiLHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDIwIDIwXCIsZmlsbDpcInZhcigtLWNvbG9yLWdyYXktNjAwKVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCxBLmpzeCkoXCJwYXRoXCIse2Q6XCJNNC41IDExLjI1QzQuNSAxMS4zODgxIDQuNjExOTMgMTEuNSA0Ljc1IDExLjVIMTQuNDM5NUwxMS45Mzk1IDlMMTMgNy45Mzk0NUwxNi43ODAzIDExLjcxOTdMMTYuODMyIDExLjc3NjRDMTcuMDcyMyAxMi4wNzA5IDE3LjA1NDkgMTIuNTA1NyAxNi43ODAzIDEyLjc4MDNMMTMgMTYuNTYwNUwxMS45Mzk1IDE1LjVMMTQuNDM5NSAxM0g0Ljc1QzMuNzgzNSAxMyAzIDEyLjIxNjUgMyAxMS4yNVY0LjI1SDQuNVYxMS4yNVpcIn0pfSksdFswXT1lKTplPXRbMF0sZX1mdW5jdGlvbiB1WihlKXt2YXIgdCxuLHI9KDAseC5jKSgzKTtyZXR1cm4gclswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PSgwLEEuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk03LjIyNzYzIDE0LjE4MTlMMTAuMjI3NiAyLjE4MTkzTDEwLjQwOTUgMS40NTQzMkw4Ljk1NDMyIDEuMDkwNTJMOC43NzI0MiAxLjgxODEyTDUuNzcyNDIgMTMuODE4MUw1LjU5MDUxIDE0LjU0NTdMNy4wNDU3MyAxNC45MDk1TDcuMjI3NjMgMTQuMTgxOVpNMy43NTAwMiAxMi4wNjA3TDMuMjE5NjkgMTEuNTMwNEwwLjM5NjQ3IDguNzA3MTNDMC4wMDU5NDU1OSA4LjMxNjYxIDAuMDA1OTQ1NTkgNy42ODM0NCAwLjM5NjQ3IDcuMjkyOTJMMy4yMTk2OSA0LjQ2OTY5TDMuNzUwMDIgMy45MzkzNkw0LjgxMDY4IDUuMDAwMDJMNC4yODAzNSA1LjUzMDM1TDEuODEwNjggOC4wMDAwM0w0LjI4MDM1IDEwLjQ2OTdMNC44MTA2OCAxMUwzLjc1MDAyIDEyLjA2MDdaTTEyLjI1IDEyLjA2MDdMMTIuNzgwNCAxMS41MzA0TDE1LjYwMzYgOC43MDcxM0MxNS45OTQxIDguMzE2NjEgMTUuOTk0MSA3LjY4MzQ0IDE1LjYwMzYgNy4yOTI5MkwxMi43ODA0IDQuNDY5NjlMMTIuMjUgMy45MzkzNkwxMS4xODk0IDUuMDAwMDJMMTEuNzE5NyA1LjUzMDM1TDE0LjE4OTQgOC4wMDAwM0wxMS43MTk3IDEwLjQ2OTdMMTEuMTg5NCAxMUwxMi4yNSAxMi4wNjA3WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pLHJbMF09dCk6dD1yWzBdLHJbMV0hPT1lPyhuPSgwLEEuanN4KShcInN2Z1wiLHVCKHVPKHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTJcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0sZSkse2NoaWxkcmVuOnR9KSksclsxXT1lLHJbMl09bik6bj1yWzJdLG59ZnVuY3Rpb24gdVUoKXt2YXIgZSx0LG49KGU9W1wiXFxuICAgICAgICAuZGV2LXRvb2xzLWluZm8tY2xvc2UtYnV0dG9uOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICAgIH1cXG4gICAgICBcIl0sdHx8KHQ9ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUodCl9fSkpKTtyZXR1cm4gdVU9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sbn1mdW5jdGlvbiB1RihlKXt2YXIgdCxuLHIsbyxhLGksbCxzLGMsdSxkLGY9KDAseC5jKSgxOCkscD1lLnRpdGxlLGg9ZS5jaGlsZHJlbixtPWUucmVmLGc9cjUoKS5zZXRQYW5lbCx5PSgwLHcudXNlUmVmKShudWxsKTtyZXR1cm4gZlswXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PWZ1bmN0aW9uKCl7dmFyIGU7bnVsbD09KGU9eS5jdXJyZW50KXx8ZS5mb2N1cygpfSxuPVtdLGZbMF09dCxmWzFdPW4pOih0PWZbMF0sbj1mWzFdKSwoMCx3LnVzZUxheW91dEVmZmVjdCkodCxuKSxmWzJdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHI9e3dpZHRoOlwiMTAwJVwiLGRpc3BsYXk6XCJmbGV4XCIsYWxpZ25JdGVtczpcImNlbnRlclwiLGp1c3RpZnlDb250ZW50Olwic3BhY2UtYmV0d2VlblwiLHBhZGRpbmc6XCI4cHggMjBweFwiLHVzZXJTZWxlY3Q6XCJub25lXCIsV2Via2l0VXNlclNlbGVjdDpcIm5vbmVcIixib3JkZXJCb3R0b206XCIxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApXCJ9LGZbMl09cik6cj1mWzJdLGZbM109PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8obz17bWFyZ2luOjAsZm9udFNpemU6XCIxNHB4XCIsY29sb3I6XCJ2YXIoLS1jb2xvci10ZXh0LXByaW1hcnkpXCIsZm9udFdlaWdodDpcIm5vcm1hbFwifSxmWzNdPW8pOm89ZlszXSxmWzRdIT09cD8oYT0oMCxBLmpzeCkoXCJoM1wiLHtzdHlsZTpvLGNoaWxkcmVuOnB9KSxmWzRdPXAsZls1XT1hKTphPWZbNV0sZls2XSE9PWc/KGk9ZnVuY3Rpb24oKXtnKFwicGFuZWwtc2VsZWN0b3JcIil9LGZbNl09ZyxmWzddPWkpOmk9Zls3XSxmWzhdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGw9e2JhY2tncm91bmQ6XCJub25lXCIsYm9yZGVyOlwibm9uZVwiLGN1cnNvcjpcInBvaW50ZXJcIixwYWRkaW5nOlwiNHB4XCIsZGlzcGxheTpcImZsZXhcIixhbGlnbkl0ZW1zOlwiY2VudGVyXCIsanVzdGlmeUNvbnRlbnQ6XCJjZW50ZXJcIixib3JkZXJSYWRpdXM6XCI0cHhcIixjb2xvcjpcInZhcigtLWNvbG9yLWdyYXktOTAwKVwifSxzPSgwLEEuanN4KSh1cSx7fSksZls4XT1sLGZbOV09cyk6KGw9Zls4XSxzPWZbOV0pLGZbMTBdIT09aT8oYz0oMCxBLmpzeCkoXCJidXR0b25cIix7cmVmOnksaWQ6XCJfbmV4dC1kZXZ0b29scy1wYW5lbC1jbG9zZVwiLGNsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNsb3NlLWJ1dHRvblwiLG9uQ2xpY2s6aSxcImFyaWEtbGFiZWxcIjpcIkNsb3NlIGRldnRvb2xzIHBhbmVsXCIsc3R5bGU6bCxjaGlsZHJlbjpzfSksZlsxMF09aSxmWzExXT1jKTpjPWZbMTFdLGZbMTJdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHU9KDAsQS5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46ZXUodVUoKSl9KSxmWzEyXT11KTp1PWZbMTJdLGZbMTNdIT09aHx8ZlsxNF0hPT1tfHxmWzE1XSE9PWF8fGZbMTZdIT09Yz8oZD0oMCxBLmpzeHMpKFwiZGl2XCIse3N0eWxlOnIscmVmOm0sY2hpbGRyZW46W2EsaCxjLHVdfSksZlsxM109aCxmWzE0XT1tLGZbMTVdPWEsZlsxNl09YyxmWzE3XT1kKTpkPWZbMTddLGR9ZnVuY3Rpb24gdXEoZSl7dmFyIHQsbixyLG89KDAseC5jKSg0KSxhPWUuc2l6ZSxpPXZvaWQgMD09PWE/MjI6YTtyZXR1cm4gb1swXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyh0PSgwLEEuanN4KShcInBhdGhcIix7ZDpcIk0xOCA2IDYgMThcIn0pLG49KDAsQS5qc3gpKFwicGF0aFwiLHtkOlwibTYgNiAxMiAxMlwifSksb1swXT10LG9bMV09bik6KHQ9b1swXSxuPW9bMV0pLG9bMl0hPT1pPyhyPSgwLEEuanN4cykoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOmksaGVpZ2h0Omksdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIsc3Ryb2tlOlwiY3VycmVudENvbG9yXCIsc3Ryb2tlV2lkdGg6XCIyXCIsc3Ryb2tlTGluZWNhcDpcInJvdW5kXCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwiLGNoaWxkcmVuOlt0LG5dfSksb1syXT1pLG9bM109cik6cj1vWzNdLHJ9ZnVuY3Rpb24gdUgoKXt2YXIgZSx0PSgwLHguYykoMSk7cmV0dXJuIHRbMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZT0oMCxBLmpzeCkoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMjAgMjBcIixmaWxsOlwibm9uZVwiLGNoaWxkcmVuOigwLEEuanN4KShcInBhdGhcIix7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGQ6XCJtOS43IDMuNzM2LjA0NS0uMjM2aC41MWwuMDQ0LjIzNmEyLjAyNCAyLjAyNCAwIDAgMCAxLjMzNCAxLjUzNmMuMTkuMDY2LjM3NS4xNDMuNTU0LjIzLjYxOC4zMDEgMS4zOTguMjkgMi4wMy0uMTQzbC4xOTktLjEzNi4zNi4zNjEtLjEzNS4xOTlhMi4wMjQgMi4wMjQgMCAwIDAtLjE0MyAyLjAzYy4wODcuMTc5LjE2NC4zNjQuMjMuNTU0LjIyNC42NS43ODMgMS4xOTIgMS41MzYgMS4zMzRsLjIzNi4wNDR2LjUxbC0uMjM2LjA0NGEyLjAyNCAyLjAyNCAwIDAgMC0xLjUzNiAxLjMzNCA0Ljk1IDQuOTUgMCAwIDEtLjIzLjU1NCAyLjAyNCAyLjAyNCAwIDAgMCAuMTQzIDIuMDNsLjEzNi4xOTktLjM2MS4zNi0uMTk5LS4xMzVhMi4wMjQgMi4wMjQgMCAwIDAtMi4wMy0uMTQzYy0uMTc5LjA4Ny0uMzY0LjE2NC0uNTU0LjIzYTIuMDI0IDIuMDI0IDAgMCAwLTEuMzM0IDEuNTM2bC0uMDQ0LjIzNmgtLjUxbC0uMDQ0LS4yMzZhMi4wMjQgMi4wMjQgMCAwIDAtMS4zMzQtMS41MzYgNC45NTIgNC45NTIgMCAwIDEtLjU1NC0uMjMgMi4wMjQgMi4wMjQgMCAwIDAtMi4wMy4xNDNsLS4xOTkuMTM2LS4zNi0uMzYxLjEzNS0uMTk5YTIuMDI0IDIuMDI0IDAgMCAwIC4xNDMtMi4wMyA0Ljk1OCA0Ljk1OCAwIDAgMS0uMjMtLjU1NCAyLjAyNCAyLjAyNCAwIDAgMC0xLjUzNi0xLjMzNGwtLjIzNi0uMDQ0di0uNTFsLjIzNi0uMDQ0YTIuMDI0IDIuMDI0IDAgMCAwIDEuNTM2LTEuMzM0IDQuOTYgNC45NiAwIDAgMSAuMjMtLjU1NCAyLjAyNCAyLjAyNCAwIDAgMC0uMTQzLTIuMDNsLS4xMzYtLjE5OS4zNjEtLjM2LjE5OS4xMzVhMi4wMjQgMi4wMjQgMCAwIDAgMi4wMy4xNDNjLjE3OS0uMDg3LjM2NC0uMTY0LjU1NC0uMjNhMi4wMjQgMi4wMjQgMCAwIDAgMS4zMzQtMS41MzZaTTguNSAyaDNsLjI3NCAxLjQ2Yy4wMzQuMTg1LjE3LjMzMy4zNDguMzk0LjI0OC4wODYuNDkuMTg2LjcyMi4zLjE3LjA4Mi4zNy4wNzQuNTI2LS4wMzNsMS4yMjYtLjgzOSAyLjEyMiAyLjEyMi0uODQgMS4yMjZhLjUyNC41MjQgMCAwIDAtLjAzMi41MjZjLjExNC4yMzMuMjE0LjQ3NC4zLjcyMi4wNjEuMTc3LjIxLjMxNC4zOTQuMzQ4TDE4IDguNXYzbC0xLjQ2LjI3NGEuNTI0LjUyNCAwIDAgMC0uMzk0LjM0OCA2LjQ3IDYuNDcgMCAwIDEtLjMuNzIyLjUyNC41MjQgMCAwIDAgLjAzMy41MjZsLjgzOSAxLjIyNi0yLjEyMiAyLjEyMi0xLjIyNi0uODRhLjUyNC41MjQgMCAwIDAtLjUyNi0uMDMyIDYuNDc3IDYuNDc3IDAgMCAxLS43MjIuMy41MjQuNTI0IDAgMCAwLS4zNDguMzk0TDExLjUgMThoLTNsLS4yNzQtMS40NmEuNTI0LjUyNCAwIDAgMC0uMzQ4LS4zOTQgNi40NzcgNi40NzcgMCAwIDEtLjcyMi0uMy41MjQuNTI0IDAgMCAwLS41MjYuMDMzbC0xLjIyNi44MzktMi4xMjItMi4xMjIuODQtMS4yMjZhLjUyNC41MjQgMCAwIDAgLjAzMi0uNTI2IDYuNDUzIDYuNDUzIDAgMCAxLS4zLS43MjIuNTI0LjUyNCAwIDAgMC0uMzk0LS4zNDhMMiAxMS41di0zbDEuNDYtLjI3NGEuNTI0LjUyNCAwIDAgMCAuMzk0LS4zNDhjLjA4Ni0uMjQ4LjE4Ni0uNDkuMy0uNzIyYS41MjQuNTI0IDAgMCAwLS4wMzMtLjUyNmwtLjgzOS0xLjIyNiAyLjEyMi0yLjEyMiAxLjIyNi44NGEuNTI0LjUyNCAwIDAgMCAuNTI2LjAzMiA2LjQ2IDYuNDYgMCAwIDEgLjcyMi0uMy41MjQuNTI0IDAgMCAwIC4zNDgtLjM5NEw4LjUgMlptMyA4YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwWm0xLjUgMGEzIDMgMCAxIDEtNiAwIDMgMyAwIDAgMSA2IDBaXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KX0pLHRbMF09ZSk6ZT10WzBdLGV9dmFyIHVWPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvbWVudS9wYW5lbC1yb3V0ZXIuY3NzXCIpLHUkPXt9O3UkLnN0eWxlVGFnVHJhbnNmb3JtPW0oKSx1JC5zZXRBdHRyaWJ1dGVzPWQoKSx1JC5pbnNlcnQ9YygpLHUkLmRvbUFQST1sKCksdSQuaW5zZXJ0U3R5bGVFbGVtZW50PXAoKSxhKCkodVYuWix1JCksdVYuWiYmdVYuWi5sb2NhbHMmJnVWLloubG9jYWxzO3ZhciB1Vz1mdW5jdGlvbigpe3ZhciBlLHQsbixyLG8sYSxpLGwscyxjLHUsZD0oMCx4LmMpKDMyKSxmPXI1KCkscD1mLnNldFBhbmVsLGg9Zi5zZXRTZWxlY3RlZEluZGV4LG09ZGwoKSxnPW0uc3RhdGUseT1tLmRpc3BhdGNoLHY9dTMoKS50b3RhbEVycm9yQ291bnQsYj1cImFwcFwiPT09Zy5yb3V0ZXJUeXBlO2RbMF0hPT15fHxkWzFdIT09cHx8ZFsyXSE9PWh8fGRbM10hPT1nLmlzRXJyb3JPdmVybGF5T3Blbnx8ZFs0XSE9PXY/KGU9dj4wJiZ7dGl0bGU6XCJcIi5jb25jYXQodixcIiBcIikuY29uY2F0KDE9PT12P1wiaXNzdWVcIjpcImlzc3Vlc1wiLFwiIGZvdW5kLiBDbGljayB0byB2aWV3IGRldGFpbHMgaW4gdGhlIGRldiBvdmVybGF5LlwiKSxsYWJlbDpcIklzc3Vlc1wiLHZhbHVlOigwLEEuanN4KShvRCx7Y2hpbGRyZW46dn0pLG9uQ2xpY2s6ZnVuY3Rpb24oKXtpZihnLmlzRXJyb3JPdmVybGF5T3Blbil7eSh7dHlwZTpxfSkscChudWxsKTtyZXR1cm59cChudWxsKSxoKC0xKSx2PjAmJnkoe3R5cGU6Rn0pfX0sZFswXT15LGRbMV09cCxkWzJdPWgsZFszXT1nLmlzRXJyb3JPdmVybGF5T3BlbixkWzRdPXYsZFs1XT1lKTplPWRbNV07dmFyIHc9XCJDdXJyZW50IHJvdXRlIGlzIFwiLmNvbmNhdChnLnN0YXRpY0luZGljYXRvcj9cInN0YXRpY1wiOlwiZHluYW1pY1wiLFwiLlwiKSxDPWcuc3RhdGljSW5kaWNhdG9yP1wiU3RhdGljXCI6XCJEeW5hbWljXCI7ZFs2XSE9PXA/KHQ9ZnVuY3Rpb24oKXtyZXR1cm4gcChcInJvdXRlLXR5cGVcIil9LGRbNl09cCxkWzddPXQpOnQ9ZFs3XTt2YXIgXz1nLnN0YXRpY0luZGljYXRvcj9cInN0YXRpY1wiOlwiZHluYW1pY1wiO3JldHVybiBkWzhdIT09Xz8obj17XCJkYXRhLW5leHRqcy1yb3V0ZS10eXBlXCI6X30sZFs4XT1fLGRbOV09bik6bj1kWzldLGRbMTBdIT09d3x8ZFsxMV0hPT1DfHxkWzEyXSE9PXR8fGRbMTNdIT09bj8ocj17dGl0bGU6dyxsYWJlbDpcIlJvdXRlXCIsdmFsdWU6QyxvbkNsaWNrOnQsYXR0cmlidXRlczpufSxkWzEwXT13LGRbMTFdPUMsZFsxMl09dCxkWzEzXT1uLGRbMTRdPXIpOnI9ZFsxNF0sZFsxNV0hPT1wPyhvPXByb2Nlc3MuZW52LlRVUkJPUEFDSz97dGl0bGU6XCJUdXJib3BhY2sgaXMgZW5hYmxlZC5cIixsYWJlbDpcIlR1cmJvcGFja1wiLHZhbHVlOlwiRW5hYmxlZFwifTp7dGl0bGU6XCJMZWFybiBhYm91dCBUdXJib3BhY2sgYW5kIGhvdyB0byBlbmFibGUgaXQgaW4geW91ciBhcHBsaWNhdGlvbi5cIixsYWJlbDpcIlRyeSBUdXJib3BhY2tcIix2YWx1ZTooMCxBLmpzeCkob0wse30pLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gcChcInR1cmJvLWluZm9cIil9fSxkWzE1XT1wLGRbMTZdPW8pOm89ZFsxNl0sZFsxN10hPT1ifHxkWzE4XSE9PXA/KGE9ISFwcm9jZXNzLmVudi5fX05FWFRfREVWVE9PTF9TRUdNRU5UX0VYUExPUkVSJiZiJiZ7bGFiZWw6XCJSb3V0ZSBJbmZvXCIsdmFsdWU6KDAsQS5qc3gpKG9MLHt9KSxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHAoXCJzZWdtZW50LWV4cGxvcmVyXCIpfSxhdHRyaWJ1dGVzOntcImRhdGEtc2VnbWVudC1leHBsb3JlclwiOiEwfX0sZFsxN109YixkWzE4XT1wLGRbMTldPWEpOmE9ZFsxOV0sZFsyMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oaT0oMCxBLmpzeCkodUgse30pLGRbMjBdPWkpOmk9ZFsyMF0sZFsyMV0hPT1wPyhsPWZ1bmN0aW9uKCl7cmV0dXJuIHAoXCJwcmVmZXJlbmNlc1wiKX0sZFsyMV09cCxkWzIyXT1sKTpsPWRbMjJdLGRbMjNdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHM9e1wiZGF0YS1wcmVmZXJlbmNlc1wiOiEwfSxkWzIzXT1zKTpzPWRbMjNdLGRbMjRdIT09bD8oYz17bGFiZWw6XCJQcmVmZXJlbmNlc1wiLHZhbHVlOmksb25DbGljazpsLGZvb3RlcjohMCxhdHRyaWJ1dGVzOnN9LGRbMjRdPWwsZFsyNV09Yyk6Yz1kWzI1XSxkWzI2XSE9PWV8fGRbMjddIT09Y3x8ZFsyOF0hPT1yfHxkWzI5XSE9PW98fGRbMzBdIT09YT8odT0oMCxBLmpzeCkob1Qse2l0ZW1zOltlLHIsbyxhLGNdfSksZFsyNl09ZSxkWzI3XT1jLGRbMjhdPXIsZFsyOV09byxkWzMwXT1hLGRbMzFdPXUpOnU9ZFszMV0sdX0sdVk9ZnVuY3Rpb24oKXt2YXIgZSx0PSgwLHguYykoNCksbj1kbCgpLHI9bi5zdGF0ZSxvPW4uZGlzcGF0Y2gsYT1uLnNoYWRvd1Jvb3Q7cmV0dXJuIHRbMF0hPT1vfHx0WzFdIT09YXx8dFsyXSE9PXIuZGlzYWJsZURldkluZGljYXRvcj8oZT1mdW5jdGlvbigpe28oe3R5cGU6VSxkaXNhYmxlZDohci5kaXNhYmxlRGV2SW5kaWNhdG9yfSk7dmFyIGU9YS5nZXRFbGVtZW50QnlJZChcInBhbmVsLXJvdXRlXCIpLHQ9YS5nZXRFbGVtZW50QnlJZChcImRhdGEtZGV2dG9vbHMtaW5kaWNhdG9yXCIpO2lmKGUmJmUuZmlyc3RFbGVtZW50Q2hpbGQpe3ZhciBuPWUuZmlyc3RFbGVtZW50Q2hpbGQsaT1cIm5vbmVcIj09PW4uc3R5bGUuZGlzcGxheTtuLnN0eWxlLmRpc3BsYXk9aT9cIlwiOlwibm9uZVwifWlmKHQpe3ZhciBsPVwibm9uZVwiPT09dC5zdHlsZS5kaXNwbGF5O3Quc3R5bGUuZGlzcGxheT1sP1wiXCI6XCJub25lXCJ9fSx0WzBdPW8sdFsxXT1hLHRbMl09ci5kaXNhYmxlRGV2SW5kaWNhdG9yLHRbM109ZSk6ZT10WzNdLGV9LHVLPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsbyxhLGksbCxzLGMsdSxkLGYscCxoLG0sZyx5LHYsYixDLF8sayxFLGosUyxPPSgwLHguYykoNDQpLEI9ZGwoKS5zdGF0ZSxQPXI1KCkudHJpZ2dlclJlZixJPXVZKCksVD1cImFwcFwiPT09Qi5yb3V0ZXJUeXBlO09bMF0hPT1CLmhpZGVTaG9ydGN1dHx8T1sxXSE9PUk/KHM9Qi5oaWRlU2hvcnRjdXQ/KGU9e30sdD1CLmhpZGVTaG9ydGN1dCxuPUksdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZSk6e30sT1swXT1CLmhpZGVTaG9ydGN1dCxPWzFdPUksT1syXT1zKTpzPU9bMl0scj1zLG89UCwobD0oMCx4LmMpKDQpKVswXSE9PW98fGxbMV0hPT1yPyhhPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7aWYoISgobj10NygodD1vKS5jdXJyZW50KSkmJihcInRydWVcIj09PW4uY29udGVudEVkaXRhYmxlfHxcIklOUFVUXCI9PT1uLnRhZ05hbWV8fFwiVEVYVEFSRUFcIj09PW4udGFnTmFtZXx8XCJTRUxFQ1RcIj09PW4udGFnTmFtZXx8XCJ0cnVlXCI9PT1uLmRhdGFzZXRbXCJzaG9ydGN1dC1yZWNvcmRlclwiXSkmJiFuLmhhc0F0dHJpYnV0ZShcInJlYWRvbmx5XCIpKSl7dmFyIHQsbixhPVtdO2UubWV0YUtleSYmYS5wdXNoKFwiTWV0YVwiKSxlLmN0cmxLZXkmJmEucHVzaChcIkNvbnRyb2xcIiksZS5hbHRLZXkmJmEucHVzaChcIkFsdFwiKSxlLnNoaWZ0S2V5JiZhLnB1c2goXCJTaGlmdFwiKSxcIk1ldGFcIiE9PWUua2V5JiZcIkNvbnRyb2xcIiE9PWUua2V5JiZcIkFsdFwiIT09ZS5rZXkmJlwiU2hpZnRcIiE9PWUua2V5JiZhLnB1c2goZS5jb2RlKTt2YXIgaT1hLmpvaW4oXCIrXCIpO3JbaV0mJihlLnByZXZlbnREZWZhdWx0KCkscltpXSgpKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKX19LGk9W28scl0sbFswXT1vLGxbMV09cixsWzJdPWEsbFszXT1pKTooYT1sWzJdLGk9bFszXSksKDAsdy51c2VFZmZlY3QpKGEsaSksT1szXT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhjPSgwLEEuanN4KSh1MCx7bmFtZTpcInBhbmVsLXNlbGVjdG9yXCIsY2hpbGRyZW46KDAsQS5qc3gpKHVXLHt9KX0pLE9bM109Yyk6Yz1PWzNdO3ZhciB6PTUwMC9CLnNjYWxlO09bNF0hPT16Pyh1PXtraW5kOlwiZml4ZWRcIixoZWlnaHQ6eix3aWR0aDo1MTJ9LE9bNF09eixPWzVdPXUpOnU9T1s1XSxPWzZdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KGQ9KDAsQS5qc3gpKHVGLHt0aXRsZTpcIlByZWZlcmVuY2VzXCJ9KSxmPSgwLEEuanN4KSh1Ryx7fSksT1s2XT1kLE9bN109Zik6KGQ9T1s2XSxmPU9bN10pLE9bOF0hPT11PyhwPSgwLEEuanN4KSh1MCx7bmFtZTpcInByZWZlcmVuY2VzXCIsY2hpbGRyZW46KDAsQS5qc3gpKG8yLHtzaGFyZVBhbmVsU2l6ZUdsb2JhbGx5OiExLHNpemVDb25maWc6dSxjbG9zZU9uQ2xpY2tPdXRzaWRlOiEwLGhlYWRlcjpkLGNoaWxkcmVuOmZ9KX0pLE9bOF09dSxPWzldPXApOnA9T1s5XTt2YXIgRD1CLnN0YXRpY0luZGljYXRvcj9cInN0YXRpY1wiOlwiZHluYW1pY1wiLEw9Qi5zdGF0aWNJbmRpY2F0b3I/MzAwL0Iuc2NhbGU6MzI1L0Iuc2NhbGUsTj00MDAvQi5zY2FsZTtPWzEwXSE9PUx8fE9bMTFdIT09Tj8oaD17a2luZDpcImZpeGVkXCIsaGVpZ2h0Okwsd2lkdGg6Tn0sT1sxMF09TCxPWzExXT1OLE9bMTJdPWgpOmg9T1sxMl07dmFyIFI9XCJcIi5jb25jYXQoQi5zdGF0aWNJbmRpY2F0b3I/XCJTdGF0aWNcIjpcIkR5bmFtaWNcIixcIiBSb3V0ZVwiKTtPWzEzXSE9PVI/KG09KDAsQS5qc3gpKHVGLHt0aXRsZTpSfSksT1sxM109UixPWzE0XT1tKTptPU9bMTRdLE9bMTVdIT09Qi5yb3V0ZXJUeXBlfHxPWzE2XSE9PUIuc3RhdGljSW5kaWNhdG9yPyhnPSgwLEEuanN4KShuNCx7cm91dGVyVHlwZTpCLnJvdXRlclR5cGUsaXNTdGF0aWNSb3V0ZTpCLnN0YXRpY0luZGljYXRvcn0pLE9bMTVdPUIucm91dGVyVHlwZSxPWzE2XT1CLnN0YXRpY0luZGljYXRvcixPWzE3XT1nKTpnPU9bMTddO3ZhciBNPW4yW0Iucm91dGVyVHlwZV1bQi5zdGF0aWNJbmRpY2F0b3I/XCJzdGF0aWNcIjpcImR5bmFtaWNcIl07T1sxOF0hPT1NPyh5PSgwLEEuanN4KSh1WCx7aHJlZjpNfSksT1sxOF09TSxPWzE5XT15KTp5PU9bMTldLE9bMjBdIT09Z3x8T1syMV0hPT15Pyh2PSgwLEEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicGFuZWwtY29udGVudFwiLGNoaWxkcmVuOltnLHldfSksT1syMF09ZyxPWzIxXT15LE9bMjJdPXYpOnY9T1syMl0sT1syM10hPT1ofHxPWzI0XSE9PW18fE9bMjVdIT09dnx8T1syNl0hPT1EPyhiPSgwLEEuanN4KSh1MCx7bmFtZTpcInJvdXRlLXR5cGVcIixjaGlsZHJlbjooMCxBLmpzeCkobzIse3NoYXJlUGFuZWxTaXplR2xvYmFsbHk6ITEsc2l6ZUNvbmZpZzpoLGNsb3NlT25DbGlja091dHNpZGU6ITAsaGVhZGVyOm0sY2hpbGRyZW46dn0sRCl9KSxPWzIzXT1oLE9bMjRdPW0sT1syNV09dixPWzI2XT1ELE9bMjddPWIpOmI9T1syN10sT1syOF0hPT1UfHxPWzI5XSE9PUIucGFnZXx8T1szMF0hPT1CLnNjYWxlPyhDPXByb2Nlc3MuZW52Ll9fTkVYVF9ERVZUT09MX1NFR01FTlRfRVhQTE9SRVImJlQmJigwLEEuanN4KSh1MCx7bmFtZTpcInNlZ21lbnQtZXhwbG9yZXJcIixjaGlsZHJlbjooMCxBLmpzeCkobzIse3NoYXJlUGFuZWxTaXplR2xvYmFsbHk6ITEsc2hhcmVQYW5lbFBvc2l0aW9uR2xvYmFsbHk6ITEsZHJhZ2dhYmxlOiEwLHNpemVDb25maWc6e2tpbmQ6XCJyZXNpemFibGVcIixtYXhIZWlnaHQ6XCI5MHZoXCIsbWF4V2lkdGg6XCI5MHZ3XCIsbWluSGVpZ2h0OjIwMC9CLnNjYWxlLG1pbldpZHRoOjI1MC9CLnNjYWxlLGluaXRpYWxTaXplOntoZWlnaHQ6Mzc1L0Iuc2NhbGUsd2lkdGg6NDAwL0Iuc2NhbGV9fSxoZWFkZXI6KDAsQS5qc3gpKHVGLHt0aXRsZTpcIlJvdXRlIEluZm9cIn0pLGNoaWxkcmVuOigwLEEuanN4KSh1RCx7cGFnZTpCLnBhZ2V9KX0pfSksT1syOF09VCxPWzI5XT1CLnBhZ2UsT1szMF09Qi5zY2FsZSxPWzMxXT1DKTpDPU9bMzFdO3ZhciBaPTQ3MC9CLnNjYWxlLFU9NDAwL0Iuc2NhbGU7cmV0dXJuIE9bMzJdIT09Wnx8T1szM10hPT1VPyhfPXtraW5kOlwiZml4ZWRcIixoZWlnaHQ6Wix3aWR0aDpVfSxPWzMyXT1aLE9bMzNdPVUsT1szNF09Xyk6Xz1PWzM0XSxPWzM1XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhrPSgwLEEuanN4KSh1Rix7dGl0bGU6XCJUcnkgVHVyYm9wYWNrXCJ9KSxPWzM1XT1rKTprPU9bMzVdLE9bMzZdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KEU9KDAsQS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwYW5lbC1jb250ZW50XCIsY2hpbGRyZW46WygwLEEuanN4KShuWCx7fSksKDAsQS5qc3gpKHVYLHtocmVmOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvdHVyYm9wYWNrXCJ9KV19KSxPWzM2XT1FKTpFPU9bMzZdLE9bMzddIT09Xz8oaj0oMCxBLmpzeCkodTAse25hbWU6XCJ0dXJiby1pbmZvXCIsY2hpbGRyZW46KDAsQS5qc3gpKG8yLHtzaGFyZVBhbmVsU2l6ZUdsb2JhbGx5OiExLHNpemVDb25maWc6XyxjbG9zZU9uQ2xpY2tPdXRzaWRlOiEwLGhlYWRlcjprLGNoaWxkcmVuOkV9KX0pLE9bMzddPV8sT1szOF09aik6aj1PWzM4XSxPWzM5XSE9PWJ8fE9bNDBdIT09Q3x8T1s0MV0hPT1qfHxPWzQyXSE9PXA/KFM9KDAsQS5qc3hzKShBLkZyYWdtZW50LHtjaGlsZHJlbjpbYyxwLGIsQyxqXX0pLE9bMzldPWIsT1s0MF09QyxPWzQxXT1qLE9bNDJdPXAsT1s0M109Uyk6Uz1PWzQzXSxTfSx1WD1mdW5jdGlvbihlKXt2YXIgdCxuPSgwLHguYykoMikscj1lLmhyZWY7cmV0dXJuIG5bMF0hPT1yPyh0PSgwLEEuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1idXR0b24tY29udGFpbmVyXCIsY2hpbGRyZW46KDAsQS5qc3gpKFwiYVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1sZWFybi1tb3JlLWJ1dHRvblwiLGhyZWY6cix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub3JlZmVycmVyIG5vb3BlbmVyXCIsY2hpbGRyZW46XCJMZWFybiBNb3JlXCJ9KX0pLG5bMF09cixuWzFdPXQpOnQ9blsxXSx0fSx1Rz1mdW5jdGlvbigpe3ZhciBlLHQsbixyLG89KDAseC5jKSgxNyksYT1kbCgpLGk9YS5kaXNwYXRjaCxsPWEuc3RhdGUscz1yNSgpLGM9cy5zZXRQYW5lbCx1PXMuc2V0U2VsZWN0ZWRJbmRleCxkPW9fKCk7cmV0dXJuIG9bMF0hPT1pPyhlPWZ1bmN0aW9uKGUpe2koe3R5cGU6RyxzY2FsZTplfSl9LG9bMF09aSxvWzFdPWUpOmU9b1sxXSxvWzJdIT09aXx8b1szXSE9PWQ/KHQ9ZnVuY3Rpb24oZSl7aSh7dHlwZTpLLGRldlRvb2xzUG9zaXRpb246ZX0pLGQoZSl9LG9bMl09aSxvWzNdPWQsb1s0XT10KTp0PW9bNF0sb1s1XSE9PWl8fG9bNl0hPT1jfHxvWzddIT09dT8obj1mdW5jdGlvbigpe2koe3R5cGU6VSxkaXNhYmxlZDohMH0pLHUoLTEpLGMobnVsbCksZmV0Y2goXCIvX19uZXh0anNfZGlzYWJsZV9kZXZfaW5kaWNhdG9yXCIse21ldGhvZDpcIlBPU1RcIn0pfSxvWzVdPWksb1s2XT1jLG9bN109dSxvWzhdPW4pOm49b1s4XSxvWzldIT09bC5kZXZUb29sc1Bvc2l0aW9ufHxvWzEwXSE9PWwuaGlkZVNob3J0Y3V0fHxvWzExXSE9PWwuc2NhbGV8fG9bMTJdIT09bC50aGVtZXx8b1sxM10hPT1lfHxvWzE0XSE9PXR8fG9bMTVdIT09bj8ocj0oMCxBLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwidXNlci1wcmVmZXJlbmNlcy13cmFwcGVyXCIsY2hpbGRyZW46KDAsQS5qc3gpKHJrLHt0aGVtZTpsLnRoZW1lLHBvc2l0aW9uOmwuZGV2VG9vbHNQb3NpdGlvbixzY2FsZTpsLnNjYWxlLHNldFNjYWxlOmUsc2V0UG9zaXRpb246dCxoaWRlU2hvcnRjdXQ6bC5oaWRlU2hvcnRjdXQsc2V0SGlkZVNob3J0Y3V0OnUxLGhpZGU6bn0pfSksb1s5XT1sLmRldlRvb2xzUG9zaXRpb24sb1sxMF09bC5oaWRlU2hvcnRjdXQsb1sxMV09bC5zY2FsZSxvWzEyXT1sLnRoZW1lLG9bMTNdPWUsb1sxNF09dCxvWzE1XT1uLG9bMTZdPXIpOnI9b1sxNl0scn0sdVE9ZnVuY3Rpb24oKXtyZXR1cm4oMCx3LnVzZUNvbnRleHQpKHVKKX0sdUo9KDAsdy5jcmVhdGVDb250ZXh0KShudWxsKTtmdW5jdGlvbiB1MChlKXt2YXIgdCxuLHIsbyxhLGk9KDAseC5jKSgxMiksbD1lLmNoaWxkcmVuLHM9ZS5uYW1lLGM9cjUoKS5wYW5lbDtpWzBdPT09U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik/KHQ9e2VudGVyRGVsYXk6MCxleGl0RGVsYXk6MjAwfSxpWzBdPXQpOnQ9aVswXTt2YXIgdT1yTihzPT09Yyx0KSxkPXUubW91bnRlZCxmPXUucmVuZGVyZWQ7aWYoIWQpcmV0dXJuIG51bGw7aVsxXSE9PWR8fGlbMl0hPT1zPyhuPXtuYW1lOnMsbW91bnRlZDpkfSxpWzFdPWQsaVsyXT1zLGlbM109bik6bj1pWzNdO3ZhciBwPSshIWY7aVs0XSE9PXA/KHI9e1wiLS1wYW5lbC1vcGFjaXR5XCI6cCxcIi0tcGFuZWwtdHJhbnNpdGlvblwiOlwib3BhY2l0eSBcIi5jb25jYXQoMjAwLFwibXMgXCIpLmNvbmNhdChudCl9LGlbNF09cCxpWzVdPXIpOnI9aVs1XTt2YXIgaD1yO3JldHVybiBpWzZdIT09bHx8aVs3XSE9PWg/KG89KDAsQS5qc3gpKFwiZGl2XCIse2lkOlwicGFuZWwtcm91dGVcIixjbGFzc05hbWU6XCJwYW5lbC1yb3V0ZVwiLHN0eWxlOmgsY2hpbGRyZW46bH0pLGlbNl09bCxpWzddPWgsaVs4XT1vKTpvPWlbOF0saVs5XSE9PW58fGlbMTBdIT09bz8oYT0oMCxBLmpzeCkodUose3ZhbHVlOm4sY2hpbGRyZW46b30pLGlbOV09bixpWzEwXT1vLGlbMTFdPWEpOmE9aVsxMV0sYX1mdW5jdGlvbiB1MShlKXtydyh7aGlkZVNob3J0Y3V0OmV9KX1mdW5jdGlvbiB1MihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gdTQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0obj1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2gobi52YWx1ZSksIXR8fGEubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsdCl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHUyKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIHUyKGUsdCl9fShlLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfXZhciB1NT0oMCx3LmNyZWF0ZUNvbnRleHQpKG51bGwpLHUzPWZ1bmN0aW9uKCl7cmV0dXJuKDAsdy51c2VDb250ZXh0KSh1NSl9O2Z1bmN0aW9uIHU2KCl7dmFyIGUsdCxuLHIsbz0oMCx4LmMpKDExKSxhPXU0KCgwLHcudXNlU3RhdGUpKG51bGwpLDIpLGk9YVswXSxsPWFbMV0scz11NCgoMCx3LnVzZVN0YXRlKSgtMSksMiksYz1zWzBdLHU9c1sxXSxkPWRsKCksZj1kLnN0YXRlLHA9ZC5kaXNwYXRjaCxoPWQuZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMsbT0oMCx3LnVzZVJlZikobnVsbCk7cmV0dXJuIG9bMF09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZT0oMCxBLmpzeCkoclkse30pLHQ9KDAsQS5qc3gpKHJ6LHt9KSxvWzBdPWUsb1sxXT10KTooZT1vWzBdLHQ9b1sxXSksb1syXSE9PXB8fG9bM10hPT1ofHxvWzRdIT09aXx8b1s1XSE9PWN8fG9bNl0hPT1mPyhuPWZ1bmN0aW9uKGUpe3ZhciB0PWUucnVudGltZUVycm9ycyxuPWUudG90YWxFcnJvckNvdW50O3JldHVybigwLEEuanN4KShBLkZyYWdtZW50LHtjaGlsZHJlbjpmLnNob3dJbmRpY2F0b3I/KDAsQS5qc3gpKEEuRnJhZ21lbnQse2NoaWxkcmVuOigwLEEuanN4KSh1NSx7dmFsdWU6e3J1bnRpbWVFcnJvcnM6dCx0b3RhbEVycm9yQ291bnQ6bn0sY2hpbGRyZW46KDAsQS5qc3hzKShyNCx7dmFsdWU6e3BhbmVsOmksc2V0UGFuZWw6bCx0cmlnZ2VyUmVmOm0sc2VsZWN0ZWRJbmRleDpjLHNldFNlbGVjdGVkSW5kZXg6dX0sY2hpbGRyZW46WygwLEEuanN4KShyWix7c3RhdGU6ZixkaXNwYXRjaDpwLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOmgscnVudGltZUVycm9yczp0LGVycm9yQ291bnQ6bn0pLCgwLEEuanN4KSh1Syx7fSksKDAsQS5qc3gpKG9DLHt9KV19KX0pfSk6bnVsbH0pfSxvWzJdPXAsb1szXT1oLG9bNF09aSxvWzVdPWMsb1s2XT1mLG9bN109bik6bj1vWzddLG9bOF0hPT1mfHxvWzldIT09bj8ocj0oMCxBLmpzeHMpKGVtLHtjaGlsZHJlbjpbZSx0LCgwLEEuanN4KShyVix7c3RhdGU6Zixpc0FwcERpcjohMCxjaGlsZHJlbjpufSldfSksb1s4XT1mLG9bOV09bixvWzEwXT1yKTpyPW9bMTBdLHJ9ZnVuY3Rpb24gdTkoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIHU4KGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiB1OShlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHx1NyhlKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gdTcoZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gdTkoZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uKXJldHVybiBBcnJheS5mcm9tKG4pO2lmKFwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gdTkoZSx0KX19dmFyIGRlPW51bGwsZHQ9W107ZnVuY3Rpb24gZG4oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWFyZ3VtZW50c1tyXTtkZT9lLmFwcGx5KHZvaWQgMCxbZGVdLmNvbmNhdCh1OChuKSkpOmR0LnB1c2goZnVuY3Rpb24odCl7ZS5hcHBseSh2b2lkIDAsW3RdLmNvbmNhdCh1OChuKSkpfSl9fXZhciBkcj17b25CdWlsZE9rOmRuKGZ1bmN0aW9uKGUpe2Uoe3R5cGU6SX0pfSksb25CdWlsZEVycm9yOmRuKGZ1bmN0aW9uKGUsdCl7ZSh7dHlwZTpULG1lc3NhZ2U6dH0pfSksb25CZWZvcmVSZWZyZXNoOmRuKGZ1bmN0aW9uKGUpe2Uoe3R5cGU6en0pfSksb25SZWZyZXNoOmRuKGZ1bmN0aW9uKGUpe2Uoe3R5cGU6RH0pfSksb25WZXJzaW9uSW5mbzpkbihmdW5jdGlvbihlLHQpe2Uoe3R5cGU6TCx2ZXJzaW9uSW5mbzp0fSl9KSxvblN0YXRpY0luZGljYXRvcjpkbihmdW5jdGlvbihlLHQpe2Uoe3R5cGU6UCxzdGF0aWNJbmRpY2F0b3I6dH0pfSksb25EZWJ1Z0luZm86ZG4oZnVuY3Rpb24oZSx0KXtlKHt0eXBlOk0sZGVidWdJbmZvOnR9KX0pLG9uRGV2SW5kaWNhdG9yOmRuKGZ1bmN0aW9uKGUsdCl7ZSh7dHlwZTpaLGRldkluZGljYXRvcjp0fSl9KSxvbkRldlRvb2xzQ29uZmlnOmRuKGZ1bmN0aW9uKGUsdCl7ZSh7dHlwZTpRLGRldlRvb2xzQ29uZmlnOnR9KX0pLG9uVW5oYW5kbGVkRXJyb3I6ZG4oZnVuY3Rpb24oZSx0KXtlKHt0eXBlOk4scmVhc29uOnR9KX0pLG9uVW5oYW5kbGVkUmVqZWN0aW9uOmRuKGZ1bmN0aW9uKGUsdCl7ZSh7dHlwZTpSLHJlYXNvbjp0fSl9KSxvcGVuRXJyb3JPdmVybGF5OmRuKGZ1bmN0aW9uKGUpe2Uoe3R5cGU6Rn0pfSksY2xvc2VFcnJvck92ZXJsYXk6ZG4oZnVuY3Rpb24oZSl7ZSh7dHlwZTpxfSl9KSx0b2dnbGVFcnJvck92ZXJsYXk6ZG4oZnVuY3Rpb24oZSl7ZSh7dHlwZTpIfSl9KSxidWlsZGluZ0luZGljYXRvckhpZGU6ZG4oZnVuY3Rpb24oZSl7ZSh7dHlwZTokfSl9KSxidWlsZGluZ0luZGljYXRvclNob3c6ZG4oZnVuY3Rpb24oZSl7ZSh7dHlwZTpWfSl9KSxyZW5kZXJpbmdJbmRpY2F0b3JIaWRlOmRuKGZ1bmN0aW9uKGUpe2Uoe3R5cGU6WX0pfSkscmVuZGVyaW5nSW5kaWNhdG9yU2hvdzpkbihmdW5jdGlvbihlKXtlKHt0eXBlOld9KX0pLHNlZ21lbnRFeHBsb3Jlck5vZGVBZGQ6ZG4oZnVuY3Rpb24oZSx0KXthbih0KX0pLHNlZ21lbnRFeHBsb3Jlck5vZGVSZW1vdmU6ZG4oZnVuY3Rpb24oZSx0KXthcih0KX0pLHNlZ21lbnRFeHBsb3JlclVwZGF0ZVJvdXRlU3RhdGU6ZG4oZnVuY3Rpb24oZSx0KXtlKHt0eXBlOmVyLHBhZ2U6dH0pfSl9O2Z1bmN0aW9uIGRhKGUpe3ZhciB0LG4scixvLGEsaSxsLHMsYyx1LGQsZixwLGgsbSxnLHksdixiLEM9KDAseC5jKSgxOCksQj1lLmdldE93bmVyU3RhY2ssSj1lLmdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzLGVlPWUuaXNSZWNvdmVyYWJsZUVycm9yLGV0PWUucm91dGVyVHlwZSxlbj1lLnNoYWRvd1Jvb3QsZW89KHQ9ZXQsbj1CLHI9ZWUsKHM9KDAseC5jKSg3KSlbMF0hPT1ufHxzWzFdIT09cj8oYT1mdW5jdGlvbihlLHQsbyl7dmFyIGEsaT1uKG8pLGw9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnByb2Nlc3MuZW52Ll9fTkVYVF9ESVNUX0RJUjtyZXR1cm4gZT8oZT1lLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmNsdWRlcyhcIihldmFsIFwiKSYmKGU9ZS5yZXBsYWNlKC9ldmFsIGNvZGUvZyxcImV2YWxcIikucmVwbGFjZSgvXFwoZXZhbCBhdCBbXigpXSogXFwoLyxcIihmaWxlOi8vXCIpLnJlcGxhY2UoL1xcKSwuKiQvZyxcIilcIikpLGV9KS5qb2luKFwiXFxuXCIpLCgwLF8ucGFyc2UpKGUpLm1hcChmdW5jdGlvbihlKXt0cnl7dmFyIG49bmV3IFVSTChlLmZpbGUpLHI9ay5leGVjKG4ucGF0aG5hbWUpO2lmKHIpe3ZhciBvLGE9bnVsbD09dHx8bnVsbD09KG89dC5yZXBsYWNlKC9cXFxcL2csXCIvXCIpKT92b2lkIDA6by5yZXBsYWNlKC9cXC8kLyxcIlwiKTthJiYoZS5maWxlPVwiZmlsZTovL1wiK2EuY29uY2F0KHIucG9wKCkpK24uc2VhcmNoKX19Y2F0Y2goZSl7fXJldHVybntmaWxlOmUuZmlsZSxsaW5lMTplLmxpbmVOdW1iZXIsY29sdW1uMTplLmNvbHVtbixtZXRob2ROYW1lOmUubWV0aG9kTmFtZSxhcmd1bWVudHM6ZS5hcmd1bWVudHN9fSkpOltdfSgoby5zdGFja3x8XCJcIikrKGl8fFwiXCIpKSxzPXtpZDp0LGVycm9yOm8sZnJhbWVzOmwsdHlwZTpyKG8pP1wicmVjb3ZlcmFibGVcIjooYT1vKSYmXCJORVhUX0NPTlNPTEVfRVJST1JcIj09PWFbRV0/XCJjb25zb2xlXCI6XCJydW50aW1lXCJ9LGM9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3Iuc3RhY2shPT1zLmVycm9yLnN0YWNrJiZlYShlLmVycm9yLnN0YWNrKSE9PWVhKHMuZXJyb3Iuc3RhY2spfHxuKGUuZXJyb3IpIT09bihzLmVycm9yKX0pO3JldHVybiBjLmxlbmd0aD09PWUubGVuZ3RoPyhjLnB1c2gocyksYyk6ZX0sc1swXT1uLHNbMV09cixzWzJdPWEpOmE9c1syXSxjPWEsKHNbM10hPT1jPyhpPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBNOnJldHVybiBPKFMoe30sZSkse2RlYnVnSW5mbzp0LmRlYnVnSW5mb30pO2Nhc2UgUDpyZXR1cm4gTyhTKHt9LGUpLHtzdGF0aWNJbmRpY2F0b3I6dC5zdGF0aWNJbmRpY2F0b3J9KTtjYXNlIEk6cmV0dXJuIE8oUyh7fSxlKSx7YnVpbGRFcnJvcjpudWxsfSk7Y2FzZSBUOnJldHVybiBPKFMoe30sZSkse2J1aWxkRXJyb3I6dC5tZXNzYWdlfSk7Y2FzZSB6OnJldHVybiBPKFMoe30sZSkse3JlZnJlc2hTdGF0ZTp7dHlwZTpcInBlbmRpbmdcIixlcnJvcnM6W119fSk7Y2FzZSBEOnJldHVybiBPKFMoe30sZSkse2J1aWxkRXJyb3I6bnVsbCxlcnJvcnM6XCJwZW5kaW5nXCI9PT1lLnJlZnJlc2hTdGF0ZS50eXBlP2UucmVmcmVzaFN0YXRlLmVycm9yczpbXSxyZWZyZXNoU3RhdGU6e3R5cGU6XCJpZGxlXCJ9fSk7Y2FzZSBOOmNhc2UgUjpzd2l0Y2goZS5yZWZyZXNoU3RhdGUudHlwZSl7Y2FzZVwiaWRsZVwiOnJldHVybiBPKFMoe30sZSkse25leHRJZDplLm5leHRJZCsxLGVycm9yczpjKGUuZXJyb3JzLGUubmV4dElkLHQucmVhc29uKX0pO2Nhc2VcInBlbmRpbmdcIjpyZXR1cm4gTyhTKHt9LGUpLHtuZXh0SWQ6ZS5uZXh0SWQrMSxyZWZyZXNoU3RhdGU6TyhTKHt9LGUucmVmcmVzaFN0YXRlKSx7ZXJyb3JzOmMoZS5lcnJvcnMsZS5uZXh0SWQsdC5yZWFzb24pfSl9KTtkZWZhdWx0OnJldHVybiBlfWNhc2UgTDpyZXR1cm4gTyhTKHt9LGUpLHt2ZXJzaW9uSW5mbzp0LnZlcnNpb25JbmZvfSk7Y2FzZSBVOnJldHVybiBPKFMoe30sZSkse2Rpc2FibGVEZXZJbmRpY2F0b3I6dC5kaXNhYmxlZH0pO2Nhc2UgWjpyZXR1cm4gTyhTKHt9LGUpLHtzaG93SW5kaWNhdG9yOiEwLGRpc2FibGVEZXZJbmRpY2F0b3I6ZWl8fCEhdC5kZXZJbmRpY2F0b3IuZGlzYWJsZWRVbnRpbH0pO2Nhc2UgRjpyZXR1cm4gTyhTKHt9LGUpLHtpc0Vycm9yT3ZlcmxheU9wZW46ITB9KTtjYXNlIHE6cmV0dXJuIE8oUyh7fSxlKSx7aXNFcnJvck92ZXJsYXlPcGVuOiExfSk7Y2FzZSBIOnJldHVybiBPKFMoe30sZSkse2lzRXJyb3JPdmVybGF5T3BlbjohZS5pc0Vycm9yT3ZlcmxheU9wZW59KTtjYXNlIFY6cmV0dXJuIE8oUyh7fSxlKSx7YnVpbGRpbmdJbmRpY2F0b3I6ITB9KTtjYXNlICQ6cmV0dXJuIE8oUyh7fSxlKSx7YnVpbGRpbmdJbmRpY2F0b3I6ITF9KTtjYXNlIFc6cmV0dXJuIE8oUyh7fSxlKSx7cmVuZGVyaW5nSW5kaWNhdG9yOiEwfSk7Y2FzZSBZOnJldHVybiBPKFMoe30sZSkse3JlbmRlcmluZ0luZGljYXRvcjohMX0pO2Nhc2UgSzpyZXR1cm4gTyhTKHt9LGUpLHtkZXZUb29sc1Bvc2l0aW9uOnQuZGV2VG9vbHNQb3NpdGlvbn0pO2Nhc2UgWDpyZXR1cm4gTyhTKHt9LGUpLHtkZXZUb29sc1BhbmVsUG9zaXRpb246TyhTKHt9LGUuZGV2VG9vbHNQYW5lbFBvc2l0aW9uKSxqKHt9LHQua2V5LHQuZGV2VG9vbHNQYW5lbFBvc2l0aW9uKSl9KTtjYXNlIEc6cmV0dXJuIE8oUyh7fSxlKSx7c2NhbGU6dC5zY2FsZX0pO2Nhc2UgZXI6cmV0dXJuIE8oUyh7fSxlKSx7cGFnZTp0LnBhZ2V9KTtjYXNlIFE6dmFyIG49dC5kZXZUb29sc0NvbmZpZyxyPW4udGhlbWUsbz1uLmRpc2FibGVEZXZJbmRpY2F0b3IsYT1uLmRldlRvb2xzUG9zaXRpb24saT1uLmRldlRvb2xzUGFuZWxQb3NpdGlvbixsPW4uZGV2VG9vbHNQYW5lbFNpemUscz1uLnNjYWxlLHU9bi5oaWRlU2hvcnRjdXQ7cmV0dXJuIE8oUyh7fSxlKSx7dGhlbWU6bnVsbCE9cj9yOmUudGhlbWUsZGlzYWJsZURldkluZGljYXRvcjpudWxsIT1vP286ZS5kaXNhYmxlRGV2SW5kaWNhdG9yLGRldlRvb2xzUG9zaXRpb246bnVsbCE9YT9hOmUuZGV2VG9vbHNQb3NpdGlvbixkZXZUb29sc1BhbmVsUG9zaXRpb246bnVsbCE9aT9pOmUuZGV2VG9vbHNQYW5lbFBvc2l0aW9uLHNjYWxlOm51bGwhPXM/czplLnNjYWxlLGRldlRvb2xzUGFuZWxTaXplOm51bGwhPWw/bDplLmRldlRvb2xzUGFuZWxTaXplLGhpZGVTaG9ydGN1dDp2b2lkIDAhPT11P3U6ZS5oaWRlU2hvcnRjdXR9KTtkZWZhdWx0OnJldHVybiBlfX0sc1szXT1jLHNbNF09aSk6aT1zWzRdLHNbNV0hPT10KT8obz10LGw9TyhTKHt9LGVzKSx7aXNFcnJvck92ZXJsYXlPcGVuOlwicGFnZXNcIj09PW8scm91dGVyVHlwZTpvfSksc1s1XT10LHNbNl09bCk6bD1zWzZdLHU9KDAsdy51c2VSZWR1Y2VyKShpLGwpLGQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSh1KXx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPShuPW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaChuLnZhbHVlKSxhLmxlbmd0aCE9PXQpO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fSh1LDIpfHx1Nyh1LGQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxlbD1lb1swXSxlYz1lb1sxXTtyZXR1cm4gQ1swXSE9PWVuLmhvc3R8fENbMV0hPT1lbC50aGVtZT8oZj1mdW5jdGlvbigpe3ZhciBlPWVuLmhvc3Q7XCJkYXJrXCI9PT1lbC50aGVtZT8oZS5jbGFzc0xpc3QuYWRkKFwiZGFya1wiKSxlLmNsYXNzTGlzdC5yZW1vdmUoXCJsaWdodFwiKSk6XCJsaWdodFwiPT09ZWwudGhlbWU/KGUuY2xhc3NMaXN0LmFkZChcImxpZ2h0XCIpLGUuY2xhc3NMaXN0LnJlbW92ZShcImRhcmtcIikpOihlLmNsYXNzTGlzdC5yZW1vdmUoXCJkYXJrXCIpLGUuY2xhc3NMaXN0LnJlbW92ZShcImxpZ2h0XCIpKX0sQ1swXT1lbi5ob3N0LENbMV09ZWwudGhlbWUsQ1syXT1mKTpmPUNbMl0sQ1szXSE9PWVufHxDWzRdIT09ZWwudGhlbWU/KHA9W2VuLGVsLnRoZW1lXSxDWzNdPWVuLENbNF09ZWwudGhlbWUsQ1s1XT1wKTpwPUNbNV0sKDAsdy51c2VMYXlvdXRFZmZlY3QpKGYscCksQ1s2XSE9PWVjPyhoPWZ1bmN0aW9uKCl7ZGU9ZWM7dmFyIGU9c2V0VGltZW91dChmdW5jdGlvbigpeyFmdW5jdGlvbihlKXt0cnl7dmFyIHQ9ITAsbj0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9ZHRbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0obz1hLm5leHQoKSkuZG9uZSk7dD0hMCkoMCxvLnZhbHVlKShlKX1jYXRjaChlKXtuPSEwLHI9ZX1maW5hbGx5e3RyeXt0fHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgcn19fWZpbmFsbHl7ZHQubGVuZ3RoPTB9fShlYyl9KTtyZXR1cm4gZnVuY3Rpb24oKXtkZT1udWxsLGNsZWFyVGltZW91dChlKX19LENbNl09ZWMsQ1s3XT1oKTpoPUNbN10sQ1s4XT09PVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpPyhtPVtdLENbOF09bSk6bT1DWzhdLCgwLHcudXNlSW5zZXJ0aW9uRWZmZWN0KShoLG0pLENbOV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8oZz0oMCxBLmpzeCkoZWYse30pLENbOV09Zyk6Zz1DWzldLENbMTBdIT09ZWN8fENbMTFdIT09Snx8Q1sxMl0hPT1lbnx8Q1sxM10hPT1lbD8oeT17ZGlzcGF0Y2g6ZWMsZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6SixzaGFkb3dSb290OmVuLHN0YXRlOmVsfSxDWzEwXT1lYyxDWzExXT1KLENbMTJdPWVuLENbMTNdPWVsLENbMTRdPXkpOnk9Q1sxNF0sQ1sxNV09PT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKT8odj0oMCxBLmpzeCkodTYse30pLENbMTVdPXYpOnY9Q1sxNV0sQ1sxNl0hPT15PyhiPSgwLEEuanN4cykoQS5GcmFnbWVudCx7Y2hpbGRyZW46W2csKDAsQS5qc3gpKGRpLHt2YWx1ZTp5LGNoaWxkcmVuOnZ9KV19KSxDWzE2XT15LENbMTddPWIpOmI9Q1sxN10sYn12YXIgZGk9KDAsdy5jcmVhdGVDb250ZXh0KShudWxsKSxkbD1mdW5jdGlvbigpe3JldHVybigwLHcudXNlQ29udGV4dCkoZGkpfSxkcz0hMSxkYz0hMTtmdW5jdGlvbiBkdSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIGRkKGUsdCl7aWYoZHMpdGhyb3cgRXJyb3IoXCJOZXh0IERldlRvb2xzOiBQYWdlcyBEZXYgT3ZlcmxheSBpcyBhbHJlYWR5IG1vdW50ZWQuIFRoaXMgaXMgYSBidWcgaW4gTmV4dC5qc1wiKTtpZighZGMpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7bi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIixuLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixuLnNldEF0dHJpYnV0ZShcImRhdGEtbmV4dGpzLWRldi1vdmVybGF5XCIsXCJ0cnVlXCIpO3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJuZXh0anMtcG9ydGFsXCIpO24uYXBwZW5kQ2hpbGQociksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChuKTt2YXIgbz0oMCxlYy5jcmVhdGVSb290KShyLHtpZGVudGlmaWVyUHJlZml4OlwibmR0LVwifSksYT1yLmF0dGFjaFNoYWRvdyh7bW9kZTpcIm9wZW5cIn0pOygwLHcuc3RhcnRUcmFuc2l0aW9uKShmdW5jdGlvbigpe28ucmVuZGVyKCgwLEEuanN4KShkYSx7Z2V0T3duZXJTdGFjazplLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOmR1LGlzUmVjb3ZlcmFibGVFcnJvcjp0LHJvdXRlclR5cGU6XCJhcHBcIixzaGFkb3dSb290OmF9KSl9KSxkYz0hMH19ZnVuY3Rpb24gZGYoZSx0LG4pe2lmKGRjKXRocm93IEVycm9yKFwiTmV4dCBEZXZUb29sczogQXBwIERldiBPdmVybGF5IGlzIGFscmVhZHkgbW91bnRlZC4gVGhpcyBpcyBhIGJ1ZyBpbiBOZXh0LmpzXCIpO2lmKCFkcyl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm5leHRqcy1wb3J0YWxcIik7ci5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZSl7dmFyIHQ9ITAsbj0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLGk9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShhPWkubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgbD1hLnZhbHVlO2lmKFwiY2hpbGRMaXN0XCI9PT1sLnR5cGUpe3ZhciBzPSEwLGM9ITEsdT12b2lkIDA7dHJ5e2Zvcih2YXIgZCxmPWwucmVtb3ZlZE5vZGVzW1N5bWJvbC5pdGVyYXRvcl0oKTshKHM9KGQ9Zi5uZXh0KCkpLmRvbmUpO3M9ITApZC52YWx1ZT09PXImJmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocil9Y2F0Y2goZSl7Yz0hMCx1PWV9ZmluYWxseXt0cnl7c3x8bnVsbD09Zi5yZXR1cm58fGYucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IHV9fX19fWNhdGNoKGUpe249ITAsbz1lfWZpbmFsbHl7dHJ5e3R8fG51bGw9PWkucmV0dXJufHxpLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBvfX19KS5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2NoaWxkTGlzdDohMH0pLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocik7dmFyIG89KDAsZWMuY3JlYXRlUm9vdCkocix7aWRlbnRpZmllclByZWZpeDpcIm5kdC1cIn0pLGE9ci5hdHRhY2hTaGFkb3coe21vZGU6XCJvcGVuXCJ9KTsoMCx3LnN0YXJ0VHJhbnNpdGlvbikoZnVuY3Rpb24oKXtvLnJlbmRlcigoMCxBLmpzeCkoZGEse2dldE93bmVyU3RhY2s6ZSxnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlsczp0LGlzUmVjb3ZlcmFibGVFcnJvcjpuLHJvdXRlclR5cGU6XCJwYWdlc1wiLHNoYWRvd1Jvb3Q6YX0pKX0pLGRzPSEwfX19KSgpLGV4cG9ydHMuRGV2T3ZlcmxheUNvbnRleHQ9X193ZWJwYWNrX2V4cG9ydHNfXy5EZXZPdmVybGF5Q29udGV4dCxleHBvcnRzLmRpc3BhdGNoZXI9X193ZWJwYWNrX2V4cG9ydHNfXy5kaXNwYXRjaGVyLGV4cG9ydHMucmVuZGVyQXBwRGV2T3ZlcmxheT1fX3dlYnBhY2tfZXhwb3J0c19fLnJlbmRlckFwcERldk92ZXJsYXksZXhwb3J0cy5yZW5kZXJQYWdlc0Rldk92ZXJsYXk9X193ZWJwYWNrX2V4cG9ydHNfXy5yZW5kZXJQYWdlc0Rldk92ZXJsYXksZXhwb3J0cy51c2VEZXZPdmVybGF5Q29udGV4dD1fX3dlYnBhY2tfZXhwb3J0c19fLnVzZURldk92ZXJsYXlDb250ZXh0LF9fd2VicGFja19leHBvcnRzX18pLTE9PT1bXCJEZXZPdmVybGF5Q29udGV4dFwiLFwiZGlzcGF0Y2hlclwiLFwicmVuZGVyQXBwRGV2T3ZlcmxheVwiLFwicmVuZGVyUGFnZXNEZXZPdmVybGF5XCIsXCJ1c2VEZXZPdmVybGF5Q29udGV4dFwiXS5pbmRleE9mKF9fd2VicGFja19pX18pJiYoZXhwb3J0c1tfX3dlYnBhY2tfaV9fXT1fX3dlYnBhY2tfZXhwb3J0c19fW19fd2VicGFja19pX19dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/next-devtools/index.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/path-to-regexp/index.js":
/*!********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/path-to-regexp/index.js ***!
\********************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var n=e;Object.defineProperty(n,\"__esModule\",{value:true});n.pathToRegexp=n.tokensToRegexp=n.regexpToFunction=n.match=n.tokensToFunction=n.compile=n.parse=void 0;function lexer(e){var n=[];var r=0;while(r<e.length){var t=e[r];if(t===\"*\"||t===\"+\"||t===\"?\"){n.push({type:\"MODIFIER\",index:r,value:e[r++]});continue}if(t===\"\\\\\"){n.push({type:\"ESCAPED_CHAR\",index:r++,value:e[r++]});continue}if(t===\"{\"){n.push({type:\"OPEN\",index:r,value:e[r++]});continue}if(t===\"}\"){n.push({type:\"CLOSE\",index:r,value:e[r++]});continue}if(t===\":\"){var a=\"\";var i=r+1;while(i<e.length){var o=e.charCodeAt(i);if(o>=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122||o===95){a+=e[i++];continue}break}if(!a)throw new TypeError(\"Missing parameter name at \".concat(r));n.push({type:\"NAME\",index:r,value:a});r=i;continue}if(t===\"(\"){var c=1;var f=\"\";var i=r+1;if(e[i]===\"?\"){throw new TypeError('Pattern cannot start with \"?\" at '.concat(i))}while(i<e.length){if(e[i]===\"\\\\\"){f+=e[i++]+e[i++];continue}if(e[i]===\")\"){c--;if(c===0){i++;break}}else if(e[i]===\"(\"){c++;if(e[i+1]!==\"?\"){throw new TypeError(\"Capturing groups are not allowed at \".concat(i))}}f+=e[i++]}if(c)throw new TypeError(\"Unbalanced pattern at \".concat(r));if(!f)throw new TypeError(\"Missing pattern at \".concat(r));n.push({type:\"PATTERN\",index:r,value:f});r=i;continue}n.push({type:\"CHAR\",index:r,value:e[r++]})}n.push({type:\"END\",index:r,value:\"\"});return n}function parse(e,n){if(n===void 0){n={}}var r=lexer(e);var t=n.prefixes,a=t===void 0?\"./\":t,i=n.delimiter,o=i===void 0?\"/#?\":i;var c=[];var f=0;var u=0;var p=\"\";var tryConsume=function(e){if(u<r.length&&r[u].type===e)return r[u++].value};var mustConsume=function(e){var n=tryConsume(e);if(n!==undefined)return n;var t=r[u],a=t.type,i=t.index;throw new TypeError(\"Unexpected \".concat(a,\" at \").concat(i,\", expected \").concat(e))};var consumeText=function(){var e=\"\";var n;while(n=tryConsume(\"CHAR\")||tryConsume(\"ESCAPED_CHAR\")){e+=n}return e};var isSafe=function(e){for(var n=0,r=o;n<r.length;n++){var t=r[n];if(e.indexOf(t)>-1)return true}return false};var safePattern=function(e){var n=c[c.length-1];var r=e||(n&&typeof n===\"string\"?n:\"\");if(n&&!r){throw new TypeError('Must have text between two parameters, missing text after \"'.concat(n.name,'\"'))}if(!r||isSafe(r))return\"[^\".concat(escapeString(o),\"]+?\");return\"(?:(?!\".concat(escapeString(r),\")[^\").concat(escapeString(o),\"])+?\")};while(u<r.length){var v=tryConsume(\"CHAR\");var s=tryConsume(\"NAME\");var d=tryConsume(\"PATTERN\");if(s||d){var g=v||\"\";if(a.indexOf(g)===-1){p+=g;g=\"\"}if(p){c.push(p);p=\"\"}c.push({name:s||f++,prefix:g,suffix:\"\",pattern:d||safePattern(g),modifier:tryConsume(\"MODIFIER\")||\"\"});continue}var x=v||tryConsume(\"ESCAPED_CHAR\");if(x){p+=x;continue}if(p){c.push(p);p=\"\"}var h=tryConsume(\"OPEN\");if(h){var g=consumeText();var l=tryConsume(\"NAME\")||\"\";var m=tryConsume(\"PATTERN\")||\"\";var T=consumeText();mustConsume(\"CLOSE\");c.push({name:l||(m?f++:\"\"),pattern:l&&!m?safePattern(g):m,prefix:g,suffix:T,modifier:tryConsume(\"MODIFIER\")||\"\"});continue}mustConsume(\"END\")}return c}n.parse=parse;function compile(e,n){return tokensToFunction(parse(e,n),n)}n.compile=compile;function tokensToFunction(e,n){if(n===void 0){n={}}var r=flags(n);var t=n.encode,a=t===void 0?function(e){return e}:t,i=n.validate,o=i===void 0?true:i;var c=e.map((function(e){if(typeof e===\"object\"){return new RegExp(\"^(?:\".concat(e.pattern,\")$\"),r)}}));return function(n){var r=\"\";for(var t=0;t<e.length;t++){var i=e[t];if(typeof i===\"string\"){r+=i;continue}var f=n?n[i.name]:undefined;var u=i.modifier===\"?\"||i.modifier===\"*\";var p=i.modifier===\"*\"||i.modifier===\"+\";if(Array.isArray(f)){if(!p){throw new TypeError('Expected \"'.concat(i.name,'\" to not repeat, but got an array'))}if(f.length===0){if(u)continue;throw new TypeError('Expected \"'.concat(i.name,'\" to not be empty'))}for(var v=0;v<f.length;v++){var s=a(f[v],i);if(o&&!c[t].test(s)){throw new TypeError('Expected all \"'.concat(i.name,'\" to match \"').concat(i.pattern,'\", but got \"').concat(s,'\"'))}r+=i.prefix+s+i.suffix}continue}if(typeof f===\"string\"||typeof f===\"number\"){var s=a(String(f),i);if(o&&!c[t].test(s)){throw new TypeError('Expected \"'.concat(i.name,'\" to match \"').concat(i.pattern,'\", but got \"').concat(s,'\"'))}r+=i.prefix+s+i.suffix;continue}if(u)continue;var d=p?\"an array\":\"a string\";throw new TypeError('Expected \"'.concat(i.name,'\" to be ').concat(d))}return r}}n.tokensToFunction=tokensToFunction;function match(e,n){var r=[];var t=pathToRegexp(e,r,n);return regexpToFunction(t,r,n)}n.match=match;function regexpToFunction(e,n,r){if(r===void 0){r={}}var t=r.decode,a=t===void 0?function(e){return e}:t;return function(r){var t=e.exec(r);if(!t)return false;var i=t[0],o=t.index;var c=Object.create(null);var _loop_1=function(e){if(t[e]===undefined)return\"continue\";var r=n[e-1];if(r.modifier===\"*\"||r.modifier===\"+\"){c[r.name]=t[e].split(r.prefix+r.suffix).map((function(e){return a(e,r)}))}else{c[r.name]=a(t[e],r)}};for(var f=1;f<t.length;f++){_loop_1(f)}return{path:i,index:o,params:c}}}n.regexpToFunction=regexpToFunction;function escapeString(e){return e.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g,\"\\\\$1\")}function flags(e){return e&&e.sensitive?\"\":\"i\"}function regexpToRegexp(e,n){if(!n)return e;var r=/\\((?:\\?<(.*?)>)?(?!\\?)/g;var t=0;var a=r.exec(e.source);while(a){n.push({name:a[1]||t++,prefix:\"\",suffix:\"\",modifier:\"\",pattern:\"\"});a=r.exec(e.source)}return e}function arrayToRegexp(e,n,r){var t=e.map((function(e){return pathToRegexp(e,n,r).source}));return new RegExp(\"(?:\".concat(t.join(\"|\"),\")\"),flags(r))}function stringToRegexp(e,n,r){return tokensToRegexp(parse(e,r),n,r)}function tokensToRegexp(e,n,r){if(r===void 0){r={}}var t=r.strict,a=t===void 0?false:t,i=r.start,o=i===void 0?true:i,c=r.end,f=c===void 0?true:c,u=r.encode,p=u===void 0?function(e){return e}:u,v=r.delimiter,s=v===void 0?\"/#?\":v,d=r.endsWith,g=d===void 0?\"\":d;var x=\"[\".concat(escapeString(g),\"]|$\");var h=\"[\".concat(escapeString(s),\"]\");var l=o?\"^\":\"\";for(var m=0,T=e;m<T.length;m++){var E=T[m];if(typeof E===\"string\"){l+=escapeString(p(E))}else{var w=escapeString(p(E.prefix));var y=escapeString(p(E.suffix));if(E.pattern){if(n)n.push(E);if(w||y){if(E.modifier===\"+\"||E.modifier===\"*\"){var R=E.modifier===\"*\"?\"?\":\"\";l+=\"(?:\".concat(w,\"((?:\").concat(E.pattern,\")(?:\").concat(y).concat(w,\"(?:\").concat(E.pattern,\"))*)\").concat(y,\")\").concat(R)}else{l+=\"(?:\".concat(w,\"(\").concat(E.pattern,\")\").concat(y,\")\").concat(E.modifier)}}else{if(E.modifier===\"+\"||E.modifier===\"*\"){throw new TypeError('Can not repeat \"'.concat(E.name,'\" without a prefix and suffix'))}l+=\"(\".concat(E.pattern,\")\").concat(E.modifier)}}else{l+=\"(?:\".concat(w).concat(y,\")\").concat(E.modifier)}}}if(f){if(!a)l+=\"\".concat(h,\"?\");l+=!r.endsWith?\"$\":\"(?=\".concat(x,\")\")}else{var A=e[e.length-1];var _=typeof A===\"string\"?h.indexOf(A[A.length-1])>-1:A===undefined;if(!a){l+=\"(?:\".concat(h,\"(?=\").concat(x,\"))?\")}if(!_){l+=\"(?=\".concat(h,\"|\").concat(x,\")\")}}return new RegExp(l,flags(r))}n.tokensToRegexp=tokensToRegexp;function pathToRegexp(e,n,r){if(e instanceof RegExp)return regexpToRegexp(e,n);if(Array.isArray(e))return arrayToRegexp(e,n,r);return stringToRegexp(e,n,r)}n.pathToRegexp=pathToRegexp})();module.exports=e})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcGF0aC10by1yZWdleHAvaW5kZXguanMiLCJtYXBwaW5ncyI6IjtBQUFBLE1BQU0sYUFBYSxtRUFBbUUsU0FBUyxLQUFLLFNBQVMsTUFBTSxRQUFRLHNDQUFzQyxXQUFXLEVBQUUsdUdBQXVHLGtCQUFrQixTQUFTLFFBQVEsa0JBQWtCLFdBQVcsOEJBQThCLFFBQVEscUNBQXFDLEVBQUUsU0FBUyxhQUFhLFFBQVEsMkNBQTJDLEVBQUUsU0FBUyxTQUFTLEdBQUcsUUFBUSxpQ0FBaUMsRUFBRSxTQUFTLFNBQVMsR0FBRyxRQUFRLGtDQUFrQyxFQUFFLFNBQVMsWUFBWSxTQUFTLFVBQVUsa0JBQWtCLHNCQUFzQixzREFBc0QsVUFBVSxTQUFTLE1BQU0sa0VBQWtFLFFBQVEsNEJBQTRCLEVBQUUsSUFBSSxTQUFTLFlBQVksUUFBUSxTQUFTLFVBQVUsZUFBZSxtRUFBbUUsa0JBQWtCLGdCQUFnQixpQkFBaUIsU0FBUyxlQUFlLElBQUksVUFBVSxJQUFJLE9BQU8sb0JBQW9CLElBQUksaUJBQWlCLHVFQUF1RSxVQUFVLDZEQUE2RCwyREFBMkQsUUFBUSwrQkFBK0IsRUFBRSxJQUFJLFNBQVMsUUFBUSxpQ0FBaUMsRUFBRSxRQUFRLDRCQUE0QixFQUFFLFNBQVMsb0JBQW9CLGVBQWUsS0FBSyxlQUFlLHdFQUF3RSxTQUFTLFFBQVEsUUFBUSxTQUFTLDJCQUEyQixrREFBa0QsNEJBQTRCLG9CQUFvQiwwQkFBMEIsOEJBQThCLHVGQUF1RiwyQkFBMkIsU0FBUyxNQUFNLHdEQUF3RCxLQUFLLFVBQVUsdUJBQXVCLGdCQUFnQixXQUFXLEtBQUssV0FBVywrQkFBK0IsY0FBYyw0QkFBNEIsb0JBQW9CLHVDQUF1QyxVQUFVLHNHQUFzRywwREFBMEQsNkVBQTZFLGtCQUFrQix5QkFBeUIseUJBQXlCLDRCQUE0QixTQUFTLFlBQVksc0JBQXNCLEtBQUssS0FBSyxNQUFNLFVBQVUsS0FBSyxRQUFRLDZGQUE2RixFQUFFLFNBQVMsb0NBQW9DLE1BQU0sS0FBSyxTQUFTLE1BQU0sVUFBVSxLQUFLLHlCQUF5QixNQUFNLG9CQUFvQiw2QkFBNkIsZ0NBQWdDLG9CQUFvQixxQkFBcUIsUUFBUSx3R0FBd0csRUFBRSxTQUFTLG1CQUFtQixTQUFTLGNBQWMsc0JBQXNCLHNDQUFzQyxrQkFBa0IsK0JBQStCLGVBQWUsS0FBSyxlQUFlLHdDQUF3QyxTQUFTLG9DQUFvQyx5QkFBeUIsd0JBQXdCLG9EQUFvRCxHQUFHLG1CQUFtQixTQUFTLFlBQVksV0FBVyxLQUFLLFdBQVcsd0JBQXdCLEtBQUssU0FBUyw0QkFBNEIseUNBQXlDLHlDQUF5QyxxQkFBcUIsT0FBTyxxRkFBcUYsaUJBQWlCLGNBQWMscUVBQXFFLFlBQVksV0FBVyxLQUFLLGdCQUFnQixxQkFBcUIsbUhBQW1ILHVCQUF1QixTQUFTLDZDQUE2QyxxQkFBcUIscUJBQXFCLCtHQUErRyx1QkFBdUIsU0FBUyxjQUFjLDhCQUE4QixzRUFBc0UsVUFBVSxvQ0FBb0Msb0JBQW9CLFNBQVMsMEJBQTBCLCtCQUErQixjQUFjLGlDQUFpQyxlQUFlLEtBQUssd0NBQXdDLFNBQVMsR0FBRyxtQkFBbUIsZ0JBQWdCLG1CQUFtQixxQkFBcUIsMEJBQTBCLHdCQUF3QixxQ0FBcUMsYUFBYSx1Q0FBdUMseURBQXlELGNBQWMsR0FBRyxLQUFLLHNCQUFzQixZQUFZLFdBQVcsS0FBSyxXQUFXLE9BQU8sMEJBQTBCLG9DQUFvQyx5QkFBeUIsK0JBQStCLHNCQUFzQixrQkFBa0IsNkJBQTZCLDZCQUE2QixlQUFlLGdDQUFnQyxRQUFRLHVCQUF1QixTQUFTLFFBQVEsMERBQTBELEVBQUUsbUJBQW1CLFNBQVMsOEJBQThCLHlCQUF5QixrQ0FBa0MsR0FBRywwREFBMEQsK0JBQStCLHNDQUFzQywrQkFBK0IsZUFBZSxLQUFLLGtJQUFrSSxTQUFTLHFFQUFxRSx3Q0FBd0Msc0NBQXNDLGVBQWUsZ0JBQWdCLFdBQVcsS0FBSyxXQUFXLHdCQUF3QixzQkFBc0IsS0FBSyxnQ0FBZ0MsZ0NBQWdDLGNBQWMsZUFBZSxTQUFTLHVDQUF1Qyw4QkFBOEIsOEhBQThILEtBQUssK0VBQStFLEtBQUssdUNBQXVDLHVGQUF1RixpREFBaUQsS0FBSyxzREFBc0QsTUFBTSwwQkFBMEIsdUNBQXVDLEtBQUssb0JBQW9CLG9FQUFvRSxPQUFPLHlDQUF5QyxPQUFPLHNDQUFzQyw4QkFBOEIsZ0NBQWdDLDZCQUE2QixrREFBa0QsZ0RBQWdELDZCQUE2Qiw0QkFBNEIsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNS40X3JlYWN0LWRvbUAxOS4xLjBfcmVhY3RAMTkuMS4wX19yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9wYXRoLXRvLXJlZ2V4cC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoKCk9PntcInVzZSBzdHJpY3RcIjtpZih0eXBlb2YgX19uY2N3cGNrX3JlcXVpcmVfXyE9PVwidW5kZWZpbmVkXCIpX19uY2N3cGNrX3JlcXVpcmVfXy5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIGU9e307KCgpPT57dmFyIG49ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO24ucGF0aFRvUmVnZXhwPW4udG9rZW5zVG9SZWdleHA9bi5yZWdleHBUb0Z1bmN0aW9uPW4ubWF0Y2g9bi50b2tlbnNUb0Z1bmN0aW9uPW4uY29tcGlsZT1uLnBhcnNlPXZvaWQgMDtmdW5jdGlvbiBsZXhlcihlKXt2YXIgbj1bXTt2YXIgcj0wO3doaWxlKHI8ZS5sZW5ndGgpe3ZhciB0PWVbcl07aWYodD09PVwiKlwifHx0PT09XCIrXCJ8fHQ9PT1cIj9cIil7bi5wdXNoKHt0eXBlOlwiTU9ESUZJRVJcIixpbmRleDpyLHZhbHVlOmVbcisrXX0pO2NvbnRpbnVlfWlmKHQ9PT1cIlxcXFxcIil7bi5wdXNoKHt0eXBlOlwiRVNDQVBFRF9DSEFSXCIsaW5kZXg6cisrLHZhbHVlOmVbcisrXX0pO2NvbnRpbnVlfWlmKHQ9PT1cIntcIil7bi5wdXNoKHt0eXBlOlwiT1BFTlwiLGluZGV4OnIsdmFsdWU6ZVtyKytdfSk7Y29udGludWV9aWYodD09PVwifVwiKXtuLnB1c2goe3R5cGU6XCJDTE9TRVwiLGluZGV4OnIsdmFsdWU6ZVtyKytdfSk7Y29udGludWV9aWYodD09PVwiOlwiKXt2YXIgYT1cIlwiO3ZhciBpPXIrMTt3aGlsZShpPGUubGVuZ3RoKXt2YXIgbz1lLmNoYXJDb2RlQXQoaSk7aWYobz49NDgmJm88PTU3fHxvPj02NSYmbzw9OTB8fG8+PTk3JiZvPD0xMjJ8fG89PT05NSl7YSs9ZVtpKytdO2NvbnRpbnVlfWJyZWFrfWlmKCFhKXRocm93IG5ldyBUeXBlRXJyb3IoXCJNaXNzaW5nIHBhcmFtZXRlciBuYW1lIGF0IFwiLmNvbmNhdChyKSk7bi5wdXNoKHt0eXBlOlwiTkFNRVwiLGluZGV4OnIsdmFsdWU6YX0pO3I9aTtjb250aW51ZX1pZih0PT09XCIoXCIpe3ZhciBjPTE7dmFyIGY9XCJcIjt2YXIgaT1yKzE7aWYoZVtpXT09PVwiP1wiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXR0ZXJuIGNhbm5vdCBzdGFydCB3aXRoIFwiP1wiIGF0ICcuY29uY2F0KGkpKX13aGlsZShpPGUubGVuZ3RoKXtpZihlW2ldPT09XCJcXFxcXCIpe2YrPWVbaSsrXStlW2krK107Y29udGludWV9aWYoZVtpXT09PVwiKVwiKXtjLS07aWYoYz09PTApe2krKzticmVha319ZWxzZSBpZihlW2ldPT09XCIoXCIpe2MrKztpZihlW2krMV0hPT1cIj9cIil7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhcHR1cmluZyBncm91cHMgYXJlIG5vdCBhbGxvd2VkIGF0IFwiLmNvbmNhdChpKSl9fWYrPWVbaSsrXX1pZihjKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmJhbGFuY2VkIHBhdHRlcm4gYXQgXCIuY29uY2F0KHIpKTtpZighZil0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWlzc2luZyBwYXR0ZXJuIGF0IFwiLmNvbmNhdChyKSk7bi5wdXNoKHt0eXBlOlwiUEFUVEVSTlwiLGluZGV4OnIsdmFsdWU6Zn0pO3I9aTtjb250aW51ZX1uLnB1c2goe3R5cGU6XCJDSEFSXCIsaW5kZXg6cix2YWx1ZTplW3IrK119KX1uLnB1c2goe3R5cGU6XCJFTkRcIixpbmRleDpyLHZhbHVlOlwiXCJ9KTtyZXR1cm4gbn1mdW5jdGlvbiBwYXJzZShlLG4pe2lmKG49PT12b2lkIDApe249e319dmFyIHI9bGV4ZXIoZSk7dmFyIHQ9bi5wcmVmaXhlcyxhPXQ9PT12b2lkIDA/XCIuL1wiOnQsaT1uLmRlbGltaXRlcixvPWk9PT12b2lkIDA/XCIvIz9cIjppO3ZhciBjPVtdO3ZhciBmPTA7dmFyIHU9MDt2YXIgcD1cIlwiO3ZhciB0cnlDb25zdW1lPWZ1bmN0aW9uKGUpe2lmKHU8ci5sZW5ndGgmJnJbdV0udHlwZT09PWUpcmV0dXJuIHJbdSsrXS52YWx1ZX07dmFyIG11c3RDb25zdW1lPWZ1bmN0aW9uKGUpe3ZhciBuPXRyeUNvbnN1bWUoZSk7aWYobiE9PXVuZGVmaW5lZClyZXR1cm4gbjt2YXIgdD1yW3VdLGE9dC50eXBlLGk9dC5pbmRleDt0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5leHBlY3RlZCBcIi5jb25jYXQoYSxcIiBhdCBcIikuY29uY2F0KGksXCIsIGV4cGVjdGVkIFwiKS5jb25jYXQoZSkpfTt2YXIgY29uc3VtZVRleHQ9ZnVuY3Rpb24oKXt2YXIgZT1cIlwiO3ZhciBuO3doaWxlKG49dHJ5Q29uc3VtZShcIkNIQVJcIil8fHRyeUNvbnN1bWUoXCJFU0NBUEVEX0NIQVJcIikpe2UrPW59cmV0dXJuIGV9O3ZhciBpc1NhZmU9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTAscj1vO248ci5sZW5ndGg7bisrKXt2YXIgdD1yW25dO2lmKGUuaW5kZXhPZih0KT4tMSlyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O3ZhciBzYWZlUGF0dGVybj1mdW5jdGlvbihlKXt2YXIgbj1jW2MubGVuZ3RoLTFdO3ZhciByPWV8fChuJiZ0eXBlb2Ygbj09PVwic3RyaW5nXCI/bjpcIlwiKTtpZihuJiYhcil7dGhyb3cgbmV3IFR5cGVFcnJvcignTXVzdCBoYXZlIHRleHQgYmV0d2VlbiB0d28gcGFyYW1ldGVycywgbWlzc2luZyB0ZXh0IGFmdGVyIFwiJy5jb25jYXQobi5uYW1lLCdcIicpKX1pZighcnx8aXNTYWZlKHIpKXJldHVyblwiW15cIi5jb25jYXQoZXNjYXBlU3RyaW5nKG8pLFwiXSs/XCIpO3JldHVyblwiKD86KD8hXCIuY29uY2F0KGVzY2FwZVN0cmluZyhyKSxcIilbXlwiKS5jb25jYXQoZXNjYXBlU3RyaW5nKG8pLFwiXSkrP1wiKX07d2hpbGUodTxyLmxlbmd0aCl7dmFyIHY9dHJ5Q29uc3VtZShcIkNIQVJcIik7dmFyIHM9dHJ5Q29uc3VtZShcIk5BTUVcIik7dmFyIGQ9dHJ5Q29uc3VtZShcIlBBVFRFUk5cIik7aWYoc3x8ZCl7dmFyIGc9dnx8XCJcIjtpZihhLmluZGV4T2YoZyk9PT0tMSl7cCs9ZztnPVwiXCJ9aWYocCl7Yy5wdXNoKHApO3A9XCJcIn1jLnB1c2goe25hbWU6c3x8ZisrLHByZWZpeDpnLHN1ZmZpeDpcIlwiLHBhdHRlcm46ZHx8c2FmZVBhdHRlcm4oZyksbW9kaWZpZXI6dHJ5Q29uc3VtZShcIk1PRElGSUVSXCIpfHxcIlwifSk7Y29udGludWV9dmFyIHg9dnx8dHJ5Q29uc3VtZShcIkVTQ0FQRURfQ0hBUlwiKTtpZih4KXtwKz14O2NvbnRpbnVlfWlmKHApe2MucHVzaChwKTtwPVwiXCJ9dmFyIGg9dHJ5Q29uc3VtZShcIk9QRU5cIik7aWYoaCl7dmFyIGc9Y29uc3VtZVRleHQoKTt2YXIgbD10cnlDb25zdW1lKFwiTkFNRVwiKXx8XCJcIjt2YXIgbT10cnlDb25zdW1lKFwiUEFUVEVSTlwiKXx8XCJcIjt2YXIgVD1jb25zdW1lVGV4dCgpO211c3RDb25zdW1lKFwiQ0xPU0VcIik7Yy5wdXNoKHtuYW1lOmx8fChtP2YrKzpcIlwiKSxwYXR0ZXJuOmwmJiFtP3NhZmVQYXR0ZXJuKGcpOm0scHJlZml4Omcsc3VmZml4OlQsbW9kaWZpZXI6dHJ5Q29uc3VtZShcIk1PRElGSUVSXCIpfHxcIlwifSk7Y29udGludWV9bXVzdENvbnN1bWUoXCJFTkRcIil9cmV0dXJuIGN9bi5wYXJzZT1wYXJzZTtmdW5jdGlvbiBjb21waWxlKGUsbil7cmV0dXJuIHRva2Vuc1RvRnVuY3Rpb24ocGFyc2UoZSxuKSxuKX1uLmNvbXBpbGU9Y29tcGlsZTtmdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uKGUsbil7aWYobj09PXZvaWQgMCl7bj17fX12YXIgcj1mbGFncyhuKTt2YXIgdD1uLmVuY29kZSxhPXQ9PT12b2lkIDA/ZnVuY3Rpb24oZSl7cmV0dXJuIGV9OnQsaT1uLnZhbGlkYXRlLG89aT09PXZvaWQgMD90cnVlOmk7dmFyIGM9ZS5tYXAoKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlPT09XCJvYmplY3RcIil7cmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIuY29uY2F0KGUucGF0dGVybixcIikkXCIpLHIpfX0pKTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9XCJcIjtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIGk9ZVt0XTtpZih0eXBlb2YgaT09PVwic3RyaW5nXCIpe3IrPWk7Y29udGludWV9dmFyIGY9bj9uW2kubmFtZV06dW5kZWZpbmVkO3ZhciB1PWkubW9kaWZpZXI9PT1cIj9cInx8aS5tb2RpZmllcj09PVwiKlwiO3ZhciBwPWkubW9kaWZpZXI9PT1cIipcInx8aS5tb2RpZmllcj09PVwiK1wiO2lmKEFycmF5LmlzQXJyYXkoZikpe2lmKCFwKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicuY29uY2F0KGkubmFtZSwnXCIgdG8gbm90IHJlcGVhdCwgYnV0IGdvdCBhbiBhcnJheScpKX1pZihmLmxlbmd0aD09PTApe2lmKHUpY29udGludWU7dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInLmNvbmNhdChpLm5hbWUsJ1wiIHRvIG5vdCBiZSBlbXB0eScpKX1mb3IodmFyIHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIHM9YShmW3ZdLGkpO2lmKG8mJiFjW3RdLnRlc3Qocykpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBcIicuY29uY2F0KGkubmFtZSwnXCIgdG8gbWF0Y2ggXCInKS5jb25jYXQoaS5wYXR0ZXJuLCdcIiwgYnV0IGdvdCBcIicpLmNvbmNhdChzLCdcIicpKX1yKz1pLnByZWZpeCtzK2kuc3VmZml4fWNvbnRpbnVlfWlmKHR5cGVvZiBmPT09XCJzdHJpbmdcInx8dHlwZW9mIGY9PT1cIm51bWJlclwiKXt2YXIgcz1hKFN0cmluZyhmKSxpKTtpZihvJiYhY1t0XS50ZXN0KHMpKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicuY29uY2F0KGkubmFtZSwnXCIgdG8gbWF0Y2ggXCInKS5jb25jYXQoaS5wYXR0ZXJuLCdcIiwgYnV0IGdvdCBcIicpLmNvbmNhdChzLCdcIicpKX1yKz1pLnByZWZpeCtzK2kuc3VmZml4O2NvbnRpbnVlfWlmKHUpY29udGludWU7dmFyIGQ9cD9cImFuIGFycmF5XCI6XCJhIHN0cmluZ1wiO3Rocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJy5jb25jYXQoaS5uYW1lLCdcIiB0byBiZSAnKS5jb25jYXQoZCkpfXJldHVybiByfX1uLnRva2Vuc1RvRnVuY3Rpb249dG9rZW5zVG9GdW5jdGlvbjtmdW5jdGlvbiBtYXRjaChlLG4pe3ZhciByPVtdO3ZhciB0PXBhdGhUb1JlZ2V4cChlLHIsbik7cmV0dXJuIHJlZ2V4cFRvRnVuY3Rpb24odCxyLG4pfW4ubWF0Y2g9bWF0Y2g7ZnVuY3Rpb24gcmVnZXhwVG9GdW5jdGlvbihlLG4scil7aWYocj09PXZvaWQgMCl7cj17fX12YXIgdD1yLmRlY29kZSxhPXQ9PT12b2lkIDA/ZnVuY3Rpb24oZSl7cmV0dXJuIGV9OnQ7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciB0PWUuZXhlYyhyKTtpZighdClyZXR1cm4gZmFsc2U7dmFyIGk9dFswXSxvPXQuaW5kZXg7dmFyIGM9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgX2xvb3BfMT1mdW5jdGlvbihlKXtpZih0W2VdPT09dW5kZWZpbmVkKXJldHVyblwiY29udGludWVcIjt2YXIgcj1uW2UtMV07aWYoci5tb2RpZmllcj09PVwiKlwifHxyLm1vZGlmaWVyPT09XCIrXCIpe2Nbci5uYW1lXT10W2VdLnNwbGl0KHIucHJlZml4K3Iuc3VmZml4KS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBhKGUscil9KSl9ZWxzZXtjW3IubmFtZV09YSh0W2VdLHIpfX07Zm9yKHZhciBmPTE7Zjx0Lmxlbmd0aDtmKyspe19sb29wXzEoZil9cmV0dXJue3BhdGg6aSxpbmRleDpvLHBhcmFtczpjfX19bi5yZWdleHBUb0Z1bmN0aW9uPXJlZ2V4cFRvRnVuY3Rpb247ZnVuY3Rpb24gZXNjYXBlU3RyaW5nKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbLisqPz1eIToke30oKVtcXF18L1xcXFxdKS9nLFwiXFxcXCQxXCIpfWZ1bmN0aW9uIGZsYWdzKGUpe3JldHVybiBlJiZlLnNlbnNpdGl2ZT9cIlwiOlwiaVwifWZ1bmN0aW9uIHJlZ2V4cFRvUmVnZXhwKGUsbil7aWYoIW4pcmV0dXJuIGU7dmFyIHI9L1xcKCg/OlxcPzwoLio/KT4pPyg/IVxcPykvZzt2YXIgdD0wO3ZhciBhPXIuZXhlYyhlLnNvdXJjZSk7d2hpbGUoYSl7bi5wdXNoKHtuYW1lOmFbMV18fHQrKyxwcmVmaXg6XCJcIixzdWZmaXg6XCJcIixtb2RpZmllcjpcIlwiLHBhdHRlcm46XCJcIn0pO2E9ci5leGVjKGUuc291cmNlKX1yZXR1cm4gZX1mdW5jdGlvbiBhcnJheVRvUmVnZXhwKGUsbixyKXt2YXIgdD1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhdGhUb1JlZ2V4cChlLG4scikuc291cmNlfSkpO3JldHVybiBuZXcgUmVnRXhwKFwiKD86XCIuY29uY2F0KHQuam9pbihcInxcIiksXCIpXCIpLGZsYWdzKHIpKX1mdW5jdGlvbiBzdHJpbmdUb1JlZ2V4cChlLG4scil7cmV0dXJuIHRva2Vuc1RvUmVnZXhwKHBhcnNlKGUsciksbixyKX1mdW5jdGlvbiB0b2tlbnNUb1JlZ2V4cChlLG4scil7aWYocj09PXZvaWQgMCl7cj17fX12YXIgdD1yLnN0cmljdCxhPXQ9PT12b2lkIDA/ZmFsc2U6dCxpPXIuc3RhcnQsbz1pPT09dm9pZCAwP3RydWU6aSxjPXIuZW5kLGY9Yz09PXZvaWQgMD90cnVlOmMsdT1yLmVuY29kZSxwPXU9PT12b2lkIDA/ZnVuY3Rpb24oZSl7cmV0dXJuIGV9OnUsdj1yLmRlbGltaXRlcixzPXY9PT12b2lkIDA/XCIvIz9cIjp2LGQ9ci5lbmRzV2l0aCxnPWQ9PT12b2lkIDA/XCJcIjpkO3ZhciB4PVwiW1wiLmNvbmNhdChlc2NhcGVTdHJpbmcoZyksXCJdfCRcIik7dmFyIGg9XCJbXCIuY29uY2F0KGVzY2FwZVN0cmluZyhzKSxcIl1cIik7dmFyIGw9bz9cIl5cIjpcIlwiO2Zvcih2YXIgbT0wLFQ9ZTttPFQubGVuZ3RoO20rKyl7dmFyIEU9VFttXTtpZih0eXBlb2YgRT09PVwic3RyaW5nXCIpe2wrPWVzY2FwZVN0cmluZyhwKEUpKX1lbHNle3ZhciB3PWVzY2FwZVN0cmluZyhwKEUucHJlZml4KSk7dmFyIHk9ZXNjYXBlU3RyaW5nKHAoRS5zdWZmaXgpKTtpZihFLnBhdHRlcm4pe2lmKG4pbi5wdXNoKEUpO2lmKHd8fHkpe2lmKEUubW9kaWZpZXI9PT1cIitcInx8RS5tb2RpZmllcj09PVwiKlwiKXt2YXIgUj1FLm1vZGlmaWVyPT09XCIqXCI/XCI/XCI6XCJcIjtsKz1cIig/OlwiLmNvbmNhdCh3LFwiKCg/OlwiKS5jb25jYXQoRS5wYXR0ZXJuLFwiKSg/OlwiKS5jb25jYXQoeSkuY29uY2F0KHcsXCIoPzpcIikuY29uY2F0KEUucGF0dGVybixcIikpKilcIikuY29uY2F0KHksXCIpXCIpLmNvbmNhdChSKX1lbHNle2wrPVwiKD86XCIuY29uY2F0KHcsXCIoXCIpLmNvbmNhdChFLnBhdHRlcm4sXCIpXCIpLmNvbmNhdCh5LFwiKVwiKS5jb25jYXQoRS5tb2RpZmllcil9fWVsc2V7aWYoRS5tb2RpZmllcj09PVwiK1wifHxFLm1vZGlmaWVyPT09XCIqXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ0NhbiBub3QgcmVwZWF0IFwiJy5jb25jYXQoRS5uYW1lLCdcIiB3aXRob3V0IGEgcHJlZml4IGFuZCBzdWZmaXgnKSl9bCs9XCIoXCIuY29uY2F0KEUucGF0dGVybixcIilcIikuY29uY2F0KEUubW9kaWZpZXIpfX1lbHNle2wrPVwiKD86XCIuY29uY2F0KHcpLmNvbmNhdCh5LFwiKVwiKS5jb25jYXQoRS5tb2RpZmllcil9fX1pZihmKXtpZighYSlsKz1cIlwiLmNvbmNhdChoLFwiP1wiKTtsKz0hci5lbmRzV2l0aD9cIiRcIjpcIig/PVwiLmNvbmNhdCh4LFwiKVwiKX1lbHNle3ZhciBBPWVbZS5sZW5ndGgtMV07dmFyIF89dHlwZW9mIEE9PT1cInN0cmluZ1wiP2guaW5kZXhPZihBW0EubGVuZ3RoLTFdKT4tMTpBPT09dW5kZWZpbmVkO2lmKCFhKXtsKz1cIig/OlwiLmNvbmNhdChoLFwiKD89XCIpLmNvbmNhdCh4LFwiKSk/XCIpfWlmKCFfKXtsKz1cIig/PVwiLmNvbmNhdChoLFwifFwiKS5jb25jYXQoeCxcIilcIil9fXJldHVybiBuZXcgUmVnRXhwKGwsZmxhZ3MocikpfW4udG9rZW5zVG9SZWdleHA9dG9rZW5zVG9SZWdleHA7ZnVuY3Rpb24gcGF0aFRvUmVnZXhwKGUsbixyKXtpZihlIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiByZWdleHBUb1JlZ2V4cChlLG4pO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGFycmF5VG9SZWdleHAoZSxuLHIpO3JldHVybiBzdHJpbmdUb1JlZ2V4cChlLG4scil9bi5wYXRoVG9SZWdleHA9cGF0aFRvUmVnZXhwfSkoKTttb2R1bGUuZXhwb3J0cz1lfSkoKTsiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/path-to-regexp/index.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/process/browser.js":
/*!***************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/process/browser.js ***!
\***************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={229:function(e){var t=e.exports={};var r;var n;function defaultSetTimout(){throw new Error(\"setTimeout has not been defined\")}function defaultClearTimeout(){throw new Error(\"clearTimeout has not been defined\")}(function(){try{if(typeof setTimeout===\"function\"){r=setTimeout}else{r=defaultSetTimout}}catch(e){r=defaultSetTimout}try{if(typeof clearTimeout===\"function\"){n=clearTimeout}else{n=defaultClearTimeout}}catch(e){n=defaultClearTimeout}})();function runTimeout(e){if(r===setTimeout){return setTimeout(e,0)}if((r===defaultSetTimout||!r)&&setTimeout){r=setTimeout;return setTimeout(e,0)}try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}function runClearTimeout(e){if(n===clearTimeout){return clearTimeout(e)}if((n===defaultClearTimeout||!n)&&clearTimeout){n=clearTimeout;return clearTimeout(e)}try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}var i=[];var o=false;var u;var a=-1;function cleanUpNextTick(){if(!o||!u){return}o=false;if(u.length){i=u.concat(i)}else{a=-1}if(i.length){drainQueue()}}function drainQueue(){if(o){return}var e=runTimeout(cleanUpNextTick);o=true;var t=i.length;while(t){u=i;i=[];while(++a<t){if(u){u[a].run()}}a=-1;t=i.length}u=null;o=false;runClearTimeout(e)}t.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1){for(var r=1;r<arguments.length;r++){t[r-1]=arguments[r]}}i.push(new Item(e,t));if(i.length===1&&!o){runTimeout(drainQueue)}};function Item(e,t){this.fun=e;this.array=t}Item.prototype.run=function(){this.fun.apply(null,this.array)};t.title=\"browser\";t.browser=true;t.env={};t.argv=[];t.version=\"\";t.versions={};function noop(){}t.on=noop;t.addListener=noop;t.once=noop;t.off=noop;t.removeListener=noop;t.removeAllListeners=noop;t.emit=noop;t.prependListener=noop;t.prependOnceListener=noop;t.listeners=function(e){return[]};t.binding=function(e){throw new Error(\"process.binding is not supported\")};t.cwd=function(){return\"/\"};t.chdir=function(e){throw new Error(\"process.chdir is not supported\")};t.umask=function(){return 0}}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var i=t[r]={exports:{}};var o=true;try{e[r](i,i.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var r=__nccwpck_require__(229);module.exports=r})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcHJvY2Vzcy9icm93c2VyLmpzIiwibWFwcGluZ3MiOiI7QUFBQSxZQUFZLE9BQU8sZ0JBQWdCLG1CQUFtQixNQUFNLE1BQU0sNEJBQTRCLG1EQUFtRCwrQkFBK0IscURBQXFELFlBQVksSUFBSSxtQ0FBbUMsYUFBYSxLQUFLLG9CQUFvQixTQUFTLG1CQUFtQixJQUFJLHFDQUFxQyxlQUFlLEtBQUssdUJBQXVCLFNBQVMsdUJBQXVCLElBQUksdUJBQXVCLG1CQUFtQix1QkFBdUIsMkNBQTJDLGFBQWEsdUJBQXVCLElBQUksY0FBYyxTQUFTLElBQUksd0JBQXdCLFNBQVMsMEJBQTBCLDRCQUE0QixxQkFBcUIsdUJBQXVCLGdEQUFnRCxlQUFlLHVCQUF1QixJQUFJLFlBQVksU0FBUyxJQUFJLHNCQUFzQixTQUFTLHdCQUF3QixTQUFTLFlBQVksTUFBTSxTQUFTLDJCQUEyQixXQUFXLE9BQU8sUUFBUSxhQUFhLGNBQWMsS0FBSyxLQUFLLGFBQWEsY0FBYyxzQkFBc0IsTUFBTSxPQUFPLGtDQUFrQyxPQUFPLGVBQWUsU0FBUyxJQUFJLEtBQUssYUFBYSxNQUFNLFlBQVksS0FBSyxXQUFXLE9BQU8sUUFBUSxtQkFBbUIsdUJBQXVCLG9DQUFvQyx1QkFBdUIsWUFBWSxtQkFBbUIsS0FBSyxxQkFBcUIsc0JBQXNCLHFCQUFxQix5QkFBeUIsbUJBQW1CLFdBQVcsYUFBYSw4QkFBOEIsaUNBQWlDLGtCQUFrQixlQUFlLFNBQVMsVUFBVSxhQUFhLGNBQWMsaUJBQWlCLFVBQVUsbUJBQW1CLFlBQVksV0FBVyxzQkFBc0IsMEJBQTBCLFlBQVksdUJBQXVCLDJCQUEyQix3QkFBd0IsVUFBVSxzQkFBc0IscURBQXFELGlCQUFpQixXQUFXLG9CQUFvQixtREFBbUQsbUJBQW1CLFlBQVksU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksWUFBWSxXQUFXLElBQUksc0NBQXNDLFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLG1FQUFtRSxTQUFTLEtBQUssK0JBQStCLGlCQUFpQiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS41LjRfcmVhY3QtZG9tQDE5LjEuMF9yZWFjdEAxOS4xLjBfX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3Byb2Nlc3MvYnJvd3Nlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXt2YXIgZT17MjI5OmZ1bmN0aW9uKGUpe3ZhciB0PWUuZXhwb3J0cz17fTt2YXIgcjt2YXIgbjtmdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCl7dGhyb3cgbmV3IEVycm9yKFwic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0KCl7dGhyb3cgbmV3IEVycm9yKFwiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfShmdW5jdGlvbigpe3RyeXtpZih0eXBlb2Ygc2V0VGltZW91dD09PVwiZnVuY3Rpb25cIil7cj1zZXRUaW1lb3V0fWVsc2V7cj1kZWZhdWx0U2V0VGltb3V0fX1jYXRjaChlKXtyPWRlZmF1bHRTZXRUaW1vdXR9dHJ5e2lmKHR5cGVvZiBjbGVhclRpbWVvdXQ9PT1cImZ1bmN0aW9uXCIpe249Y2xlYXJUaW1lb3V0fWVsc2V7bj1kZWZhdWx0Q2xlYXJUaW1lb3V0fX1jYXRjaChlKXtuPWRlZmF1bHRDbGVhclRpbWVvdXR9fSkoKTtmdW5jdGlvbiBydW5UaW1lb3V0KGUpe2lmKHI9PT1zZXRUaW1lb3V0KXtyZXR1cm4gc2V0VGltZW91dChlLDApfWlmKChyPT09ZGVmYXVsdFNldFRpbW91dHx8IXIpJiZzZXRUaW1lb3V0KXtyPXNldFRpbWVvdXQ7cmV0dXJuIHNldFRpbWVvdXQoZSwwKX10cnl7cmV0dXJuIHIoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIHIuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIHIuY2FsbCh0aGlzLGUsMCl9fX1mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQoZSl7aWYobj09PWNsZWFyVGltZW91dCl7cmV0dXJuIGNsZWFyVGltZW91dChlKX1pZigobj09PWRlZmF1bHRDbGVhclRpbWVvdXR8fCFuKSYmY2xlYXJUaW1lb3V0KXtuPWNsZWFyVGltZW91dDtyZXR1cm4gY2xlYXJUaW1lb3V0KGUpfXRyeXtyZXR1cm4gbihlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBuLmNhbGwodGhpcyxlKX19fXZhciBpPVtdO3ZhciBvPWZhbHNlO3ZhciB1O3ZhciBhPS0xO2Z1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpe2lmKCFvfHwhdSl7cmV0dXJufW89ZmFsc2U7aWYodS5sZW5ndGgpe2k9dS5jb25jYXQoaSl9ZWxzZXthPS0xfWlmKGkubGVuZ3RoKXtkcmFpblF1ZXVlKCl9fWZ1bmN0aW9uIGRyYWluUXVldWUoKXtpZihvKXtyZXR1cm59dmFyIGU9cnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO289dHJ1ZTt2YXIgdD1pLmxlbmd0aDt3aGlsZSh0KXt1PWk7aT1bXTt3aGlsZSgrK2E8dCl7aWYodSl7dVthXS5ydW4oKX19YT0tMTt0PWkubGVuZ3RofXU9bnVsbDtvPWZhbHNlO3J1bkNsZWFyVGltZW91dChlKX10Lm5leHRUaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl7dFtyLTFdPWFyZ3VtZW50c1tyXX19aS5wdXNoKG5ldyBJdGVtKGUsdCkpO2lmKGkubGVuZ3RoPT09MSYmIW8pe3J1blRpbWVvdXQoZHJhaW5RdWV1ZSl9fTtmdW5jdGlvbiBJdGVtKGUsdCl7dGhpcy5mdW49ZTt0aGlzLmFycmF5PXR9SXRlbS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX07dC50aXRsZT1cImJyb3dzZXJcIjt0LmJyb3dzZXI9dHJ1ZTt0LmVudj17fTt0LmFyZ3Y9W107dC52ZXJzaW9uPVwiXCI7dC52ZXJzaW9ucz17fTtmdW5jdGlvbiBub29wKCl7fXQub249bm9vcDt0LmFkZExpc3RlbmVyPW5vb3A7dC5vbmNlPW5vb3A7dC5vZmY9bm9vcDt0LnJlbW92ZUxpc3RlbmVyPW5vb3A7dC5yZW1vdmVBbGxMaXN0ZW5lcnM9bm9vcDt0LmVtaXQ9bm9vcDt0LnByZXBlbmRMaXN0ZW5lcj1ub29wO3QucHJlcGVuZE9uY2VMaXN0ZW5lcj1ub29wO3QubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybltdfTt0LmJpbmRpbmc9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9O3QuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9O3QuY2hkaXI9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkXCIpfTt0LnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fX07dmFyIHQ9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyhyKXt2YXIgbj10W3JdO2lmKG4hPT11bmRlZmluZWQpe3JldHVybiBuLmV4cG9ydHN9dmFyIGk9dFtyXT17ZXhwb3J0czp7fX07dmFyIG89dHJ1ZTt0cnl7ZVtyXShpLGkuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtvPWZhbHNlfWZpbmFsbHl7aWYobylkZWxldGUgdFtyXX1yZXR1cm4gaS5leHBvcnRzfWlmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgcj1fX25jY3dwY2tfcmVxdWlyZV9fKDIyOSk7bW9kdWxlLmV4cG9ydHM9cn0pKCk7Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/process/browser.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js":
/*!*********************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js ***!
\*********************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/**\n * @license React\n * react-is.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 function typeOf(object) {\n if (\"object\" === typeof object && null !== object) {\n var $$typeof = object.$$typeof;\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n switch (((object = object.type), object)) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n case REACT_VIEW_TRANSITION_TYPE:\n return object;\n default:\n switch (((object = object && object.$$typeof), object)) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n return object;\n case REACT_CONSUMER_TYPE:\n return object;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n }\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n exports.ContextConsumer = REACT_CONSUMER_TYPE;\n exports.ContextProvider = REACT_CONTEXT_TYPE;\n exports.Element = REACT_ELEMENT_TYPE;\n exports.ForwardRef = REACT_FORWARD_REF_TYPE;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Lazy = REACT_LAZY_TYPE;\n exports.Memo = REACT_MEMO_TYPE;\n exports.Portal = REACT_PORTAL_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\n exports.isContextConsumer = function (object) {\n return typeOf(object) === REACT_CONSUMER_TYPE;\n };\n exports.isContextProvider = function (object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n };\n exports.isElement = function (object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n };\n exports.isForwardRef = function (object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n };\n exports.isFragment = function (object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n };\n exports.isLazy = function (object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n };\n exports.isMemo = function (object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n };\n exports.isPortal = function (object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n };\n exports.isProfiler = function (object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n };\n exports.isStrictMode = function (object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n };\n exports.isSuspense = function (object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n };\n exports.isSuspenseList = function (object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n };\n exports.isValidElementType = function (type) {\n return \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE ||\n void 0 !== type.getModuleId))\n ? !0\n : !1;\n };\n exports.typeOf = typeOf;\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTtBQUNiLEtBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx1QkFBdUI7QUFDM0IsSUFBSSx1QkFBdUI7QUFDM0IsSUFBSSxlQUFlO0FBQ25CLElBQUksa0JBQWtCO0FBQ3RCLElBQUksZ0JBQWdCO0FBQ3BCLElBQUksWUFBWTtBQUNoQixJQUFJLFlBQVk7QUFDaEIsSUFBSSxjQUFjO0FBQ2xCLElBQUksZ0JBQWdCO0FBQ3BCLElBQUksa0JBQWtCO0FBQ3RCLElBQUksZ0JBQWdCO0FBQ3BCLElBQUksb0JBQW9CO0FBQ3hCLElBQUkseUJBQXlCO0FBQzdCO0FBQ0E7QUFDQSxJQUFJLHlCQUF5QjtBQUM3QjtBQUNBO0FBQ0EsSUFBSSxpQkFBaUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEI7QUFDQTtBQUNBLElBQUksa0JBQWtCO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLGNBQWM7QUFDbEI7QUFDQTtBQUNBLElBQUksY0FBYztBQUNsQjtBQUNBO0FBQ0EsSUFBSSxnQkFBZ0I7QUFDcEI7QUFDQTtBQUNBLElBQUksa0JBQWtCO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLG9CQUFvQjtBQUN4QjtBQUNBO0FBQ0EsSUFBSSxrQkFBa0I7QUFDdEI7QUFDQTtBQUNBLElBQUksc0JBQXNCO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLDBCQUEwQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksY0FBYztBQUNsQixHQUFHIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2Ygb2JqZWN0ICYmIG51bGwgIT09IG9iamVjdCkge1xuICAgICAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG4gICAgICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICAgIHN3aXRjaCAoKChvYmplY3QgPSBvYmplY3QudHlwZSksIG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9WSUVXX1RSQU5TSVRJT05fVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHN3aXRjaCAoKChvYmplY3QgPSBvYmplY3QgJiYgb2JqZWN0LiQkdHlwZW9mKSwgb2JqZWN0KSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIiksXG4gICAgICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLFxuICAgICAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgICAgIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksXG4gICAgICBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICAgICAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gICAgICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICAgICAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gICAgICBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSxcbiAgICAgIFJFQUNUX1ZJRVdfVFJBTlNJVElPTl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnZpZXdfdHJhbnNpdGlvblwiKSxcbiAgICAgIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKTtcbiAgICBleHBvcnRzLkNvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlNVTUVSX1RZUEU7XG4gICAgZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG4gICAgZXhwb3J0cy5FbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuICAgIGV4cG9ydHMuRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG4gICAgZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG4gICAgZXhwb3J0cy5MYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xuICAgIGV4cG9ydHMuTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbiAgICBleHBvcnRzLlBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xuICAgIGV4cG9ydHMuUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICAgIGV4cG9ydHMuU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG4gICAgZXhwb3J0cy5TdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gICAgZXhwb3J0cy5TdXNwZW5zZUxpc3QgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gICAgZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNFbGVtZW50ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9iamVjdCAmJlxuICAgICAgICBudWxsICE9PSBvYmplY3QgJiZcbiAgICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzRm9yd2FyZFJlZiA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNGcmFnbWVudCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNMYXp5ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzTWVtbyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xuICAgIH07XG4gICAgZXhwb3J0cy5pc1BvcnRhbCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzUHJvZmlsZXIgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzU3RyaWN0TW9kZSA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNTdXNwZW5zZSA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNTdXNwZW5zZUxpc3QgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSB8fFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8XG4gICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8XG4gICAgICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSB8fFxuICAgICAgICAgICAgdm9pZCAwICE9PSB0eXBlLmdldE1vZHVsZUlkKSlcbiAgICAgICAgPyAhMFxuICAgICAgICA6ICExO1xuICAgIH07XG4gICAgZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react-is/index.js":
/*!**************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react-is/index.js ***!
\**************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLGtQQUF5RDtBQUMzRCIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS41LjRfcmVhY3QtZG9tQDE5LjEuMF9yZWFjdEAxOS4xLjBfX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWlzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react-is/index.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/safe-stable-stringify/index.js":
/*!***************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/safe-stable-stringify/index.js ***!
\***************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){\"use strict\";var e={879:function(e,t){const{hasOwnProperty:n}=Object.prototype;const r=configure();r.configure=configure;r.stringify=r;r.default=r;t.stringify=r;t.configure=configure;e.exports=r;const i=/[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/;function strEscape(e){if(e.length<5e3&&!i.test(e)){return`\"${e}\"`}return JSON.stringify(e)}function sort(e,t){if(e.length>200||t){return e.sort(t)}for(let t=1;t<e.length;t++){const n=e[t];let r=t;while(r!==0&&e[r-1]>n){e[r]=e[r-1];r--}e[r]=n}return e}const f=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Object.getPrototypeOf(new Int8Array)),Symbol.toStringTag).get;function isTypedArrayWithEntries(e){return f.call(e)!==undefined&&e.length!==0}function stringifyTypedArray(e,t,n){if(e.length<n){n=e.length}const r=t===\",\"?\"\":\" \";let i=`\"0\":${r}${e[0]}`;for(let f=1;f<n;f++){i+=`${t}\"${f}\":${r}${e[f]}`}return i}function getCircularValueOption(e){if(n.call(e,\"circularValue\")){const t=e.circularValue;if(typeof t===\"string\"){return`\"${t}\"`}if(t==null){return t}if(t===Error||t===TypeError){return{toString(){throw new TypeError(\"Converting circular structure to JSON\")}}}throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')}return'\"[Circular]\"'}function getDeterministicOption(e){let t;if(n.call(e,\"deterministic\")){t=e.deterministic;if(typeof t!==\"boolean\"&&typeof t!==\"function\"){throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')}}return t===undefined?true:t}function getBooleanOption(e,t){let r;if(n.call(e,t)){r=e[t];if(typeof r!==\"boolean\"){throw new TypeError(`The \"${t}\" argument must be of type boolean`)}}return r===undefined?true:r}function getPositiveIntegerOption(e,t){let r;if(n.call(e,t)){r=e[t];if(typeof r!==\"number\"){throw new TypeError(`The \"${t}\" argument must be of type number`)}if(!Number.isInteger(r)){throw new TypeError(`The \"${t}\" argument must be an integer`)}if(r<1){throw new RangeError(`The \"${t}\" argument must be >= 1`)}}return r===undefined?Infinity:r}function getItemCount(e){if(e===1){return\"1 item\"}return`${e} items`}function getUniqueReplacerSet(e){const t=new Set;for(const n of e){if(typeof n===\"string\"||typeof n===\"number\"){t.add(String(n))}}return t}function getStrictOption(e){if(n.call(e,\"strict\")){const t=e.strict;if(typeof t!==\"boolean\"){throw new TypeError('The \"strict\" argument must be of type boolean')}if(t){return e=>{let t=`Object can not safely be stringified. Received type ${typeof e}`;if(typeof e!==\"function\")t+=` (${e.toString()})`;throw new Error(t)}}}}function configure(e){e={...e};const t=getStrictOption(e);if(t){if(e.bigint===undefined){e.bigint=false}if(!(\"circularValue\"in e)){e.circularValue=Error}}const n=getCircularValueOption(e);const r=getBooleanOption(e,\"bigint\");const i=getDeterministicOption(e);const f=typeof i===\"function\"?i:undefined;const u=getPositiveIntegerOption(e,\"maximumDepth\");const o=getPositiveIntegerOption(e,\"maximumBreadth\");function stringifyFnReplacer(e,s,l,c,a,g){let p=s[e];if(typeof p===\"object\"&&p!==null&&typeof p.toJSON===\"function\"){p=p.toJSON(e)}p=c.call(s,e,p);switch(typeof p){case\"string\":return strEscape(p);case\"object\":{if(p===null){return\"null\"}if(l.indexOf(p)!==-1){return n}let e=\"\";let t=\",\";const r=g;if(Array.isArray(p)){if(p.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(p);if(a!==\"\"){g+=a;e+=`\\n${g}`;t=`,\\n${g}`}const n=Math.min(p.length,o);let i=0;for(;i<n-1;i++){const n=stringifyFnReplacer(String(i),p,l,c,a,g);e+=n!==undefined?n:\"null\";e+=t}const f=stringifyFnReplacer(String(i),p,l,c,a,g);e+=f!==undefined?f:\"null\";if(p.length-1>o){const n=p.length-o-1;e+=`${t}\"... ${getItemCount(n)} not stringified\"`}if(a!==\"\"){e+=`\\n${r}`}l.pop();return`[${e}]`}let s=Object.keys(p);const y=s.length;if(y===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}let d=\"\";let h=\"\";if(a!==\"\"){g+=a;t=`,\\n${g}`;d=\" \"}const $=Math.min(y,o);if(i&&!isTypedArrayWithEntries(p)){s=sort(s,f)}l.push(p);for(let n=0;n<$;n++){const r=s[n];const i=stringifyFnReplacer(r,p,l,c,a,g);if(i!==undefined){e+=`${h}${strEscape(r)}:${d}${i}`;h=t}}if(y>o){const n=y-o;e+=`${h}\"...\":${d}\"${getItemCount(n)} not stringified\"`;h=t}if(a!==\"\"&&h.length>1){e=`\\n${g}${e}\\n${r}`}l.pop();return`{${e}}`}case\"number\":return isFinite(p)?String(p):t?t(p):\"null\";case\"boolean\":return p===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(p)}default:return t?t(p):undefined}}function stringifyArrayReplacer(e,i,f,s,l,c){if(typeof i===\"object\"&&i!==null&&typeof i.toJSON===\"function\"){i=i.toJSON(e)}switch(typeof i){case\"string\":return strEscape(i);case\"object\":{if(i===null){return\"null\"}if(f.indexOf(i)!==-1){return n}const e=c;let t=\"\";let r=\",\";if(Array.isArray(i)){if(i.length===0){return\"[]\"}if(u<f.length+1){return'\"[Array]\"'}f.push(i);if(l!==\"\"){c+=l;t+=`\\n${c}`;r=`,\\n${c}`}const n=Math.min(i.length,o);let a=0;for(;a<n-1;a++){const e=stringifyArrayReplacer(String(a),i[a],f,s,l,c);t+=e!==undefined?e:\"null\";t+=r}const g=stringifyArrayReplacer(String(a),i[a],f,s,l,c);t+=g!==undefined?g:\"null\";if(i.length-1>o){const e=i.length-o-1;t+=`${r}\"... ${getItemCount(e)} not stringified\"`}if(l!==\"\"){t+=`\\n${e}`}f.pop();return`[${t}]`}f.push(i);let a=\"\";if(l!==\"\"){c+=l;r=`,\\n${c}`;a=\" \"}let g=\"\";for(const e of s){const n=stringifyArrayReplacer(e,i[e],f,s,l,c);if(n!==undefined){t+=`${g}${strEscape(e)}:${a}${n}`;g=r}}if(l!==\"\"&&g.length>1){t=`\\n${c}${t}\\n${e}`}f.pop();return`{${t}}`}case\"number\":return isFinite(i)?String(i):t?t(i):\"null\";case\"boolean\":return i===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(i)}default:return t?t(i):undefined}}function stringifyIndent(e,s,l,c,a){switch(typeof s){case\"string\":return strEscape(s);case\"object\":{if(s===null){return\"null\"}if(typeof s.toJSON===\"function\"){s=s.toJSON(e);if(typeof s!==\"object\"){return stringifyIndent(e,s,l,c,a)}if(s===null){return\"null\"}}if(l.indexOf(s)!==-1){return n}const t=a;if(Array.isArray(s)){if(s.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(s);a+=c;let e=`\\n${a}`;const n=`,\\n${a}`;const r=Math.min(s.length,o);let i=0;for(;i<r-1;i++){const t=stringifyIndent(String(i),s[i],l,c,a);e+=t!==undefined?t:\"null\";e+=n}const f=stringifyIndent(String(i),s[i],l,c,a);e+=f!==undefined?f:\"null\";if(s.length-1>o){const t=s.length-o-1;e+=`${n}\"... ${getItemCount(t)} not stringified\"`}e+=`\\n${t}`;l.pop();return`[${e}]`}let r=Object.keys(s);const g=r.length;if(g===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}a+=c;const p=`,\\n${a}`;let y=\"\";let d=\"\";let h=Math.min(g,o);if(isTypedArrayWithEntries(s)){y+=stringifyTypedArray(s,p,o);r=r.slice(s.length);h-=s.length;d=p}if(i){r=sort(r,f)}l.push(s);for(let e=0;e<h;e++){const t=r[e];const n=stringifyIndent(t,s[t],l,c,a);if(n!==undefined){y+=`${d}${strEscape(t)}: ${n}`;d=p}}if(g>o){const e=g-o;y+=`${d}\"...\": \"${getItemCount(e)} not stringified\"`;d=p}if(d!==\"\"){y=`\\n${a}${y}\\n${t}`}l.pop();return`{${y}}`}case\"number\":return isFinite(s)?String(s):t?t(s):\"null\";case\"boolean\":return s===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(s)}default:return t?t(s):undefined}}function stringifySimple(e,s,l){switch(typeof s){case\"string\":return strEscape(s);case\"object\":{if(s===null){return\"null\"}if(typeof s.toJSON===\"function\"){s=s.toJSON(e);if(typeof s!==\"object\"){return stringifySimple(e,s,l)}if(s===null){return\"null\"}}if(l.indexOf(s)!==-1){return n}let t=\"\";const r=s.length!==undefined;if(r&&Array.isArray(s)){if(s.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(s);const e=Math.min(s.length,o);let n=0;for(;n<e-1;n++){const e=stringifySimple(String(n),s[n],l);t+=e!==undefined?e:\"null\";t+=\",\"}const r=stringifySimple(String(n),s[n],l);t+=r!==undefined?r:\"null\";if(s.length-1>o){const e=s.length-o-1;t+=`,\"... ${getItemCount(e)} not stringified\"`}l.pop();return`[${t}]`}let c=Object.keys(s);const a=c.length;if(a===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}let g=\"\";let p=Math.min(a,o);if(r&&isTypedArrayWithEntries(s)){t+=stringifyTypedArray(s,\",\",o);c=c.slice(s.length);p-=s.length;g=\",\"}if(i){c=sort(c,f)}l.push(s);for(let e=0;e<p;e++){const n=c[e];const r=stringifySimple(n,s[n],l);if(r!==undefined){t+=`${g}${strEscape(n)}:${r}`;g=\",\"}}if(a>o){const e=a-o;t+=`${g}\"...\":\"${getItemCount(e)} not stringified\"`}l.pop();return`{${t}}`}case\"number\":return isFinite(s)?String(s):t?t(s):\"null\";case\"boolean\":return s===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(s)}default:return t?t(s):undefined}}function stringify(e,t,n){if(arguments.length>1){let r=\"\";if(typeof n===\"number\"){r=\" \".repeat(Math.min(n,10))}else if(typeof n===\"string\"){r=n.slice(0,10)}if(t!=null){if(typeof t===\"function\"){return stringifyFnReplacer(\"\",{\"\":e},[],t,r,\"\")}if(Array.isArray(t)){return stringifyArrayReplacer(\"\",e,[],getUniqueReplacerSet(t),r,\"\")}}if(r.length!==0){return stringifyIndent(\"\",e,[],r,\"\")}}return stringifySimple(\"\",e,[])}return stringify}}};var t={};function __nccwpck_require__(n){var r=t[n];if(r!==undefined){return r.exports}var i=t[n]={exports:{}};var f=true;try{e[n](i,i.exports,__nccwpck_require__);f=false}finally{if(f)delete t[n]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var n=__nccwpck_require__(879);module.exports=n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc2FmZS1zdGFibGUtc3RyaW5naWZ5L2luZGV4LmpzIiwibWFwcGluZ3MiOiI7QUFBQSxZQUFZLGFBQWEsT0FBTyxrQkFBa0IsTUFBTSxpQkFBaUIsa0JBQWtCLG9CQUFvQixzQkFBc0IsY0FBYyxZQUFZLGNBQWMsc0JBQXNCLFlBQVksbURBQW1ELHNCQUFzQiw2QkFBNkIsVUFBVSxFQUFFLEdBQUcseUJBQXlCLG1CQUFtQixvQkFBb0IsaUJBQWlCLFlBQVksV0FBVyxLQUFLLGFBQWEsUUFBUSx1QkFBdUIsWUFBWSxJQUFJLE9BQU8sU0FBUyw0SEFBNEgsb0NBQW9DLDJDQUEyQyxvQ0FBb0MsZUFBZSxXQUFXLHVCQUF1QixhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxJQUFJLEtBQUssTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxtQ0FBbUMsOEJBQThCLHdCQUF3Qix3QkFBd0IsVUFBVSxFQUFFLEdBQUcsWUFBWSxTQUFTLDZCQUE2QixPQUFPLFdBQVcsK0RBQStELDBHQUEwRyxxQkFBcUIsbUNBQW1DLE1BQU0sOEJBQThCLGtCQUFrQixnREFBZ0Qsb0dBQW9HLDRCQUE0QiwrQkFBK0IsTUFBTSxnQkFBZ0IsT0FBTyx5QkFBeUIsNEJBQTRCLEVBQUUsc0NBQXNDLDRCQUE0Qix1Q0FBdUMsTUFBTSxnQkFBZ0IsT0FBTyx3QkFBd0IsNEJBQTRCLEVBQUUsb0NBQW9DLHlCQUF5Qiw0QkFBNEIsRUFBRSxnQ0FBZ0MsUUFBUSw2QkFBNkIsRUFBRSwyQkFBMkIsZ0NBQWdDLHlCQUF5QixVQUFVLGVBQWUsU0FBUyxHQUFHLE9BQU8saUNBQWlDLGdCQUFnQixrQkFBa0IsNkNBQTZDLGtCQUFr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LFlBQVksWUFBWSxXQUFXLElBQUksc0NBQXNDLFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLG1FQUFtRSxTQUFTLEtBQUssK0JBQStCLGlCQUFpQiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS41LjRfcmVhY3QtZG9tQDE5LjEuMF9yZWFjdEAxOS4xLjBfX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3NhZmUtc3RhYmxlLXN0cmluZ2lmeS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgZT17ODc5OmZ1bmN0aW9uKGUsdCl7Y29uc3R7aGFzT3duUHJvcGVydHk6bn09T2JqZWN0LnByb3RvdHlwZTtjb25zdCByPWNvbmZpZ3VyZSgpO3IuY29uZmlndXJlPWNvbmZpZ3VyZTtyLnN0cmluZ2lmeT1yO3IuZGVmYXVsdD1yO3Quc3RyaW5naWZ5PXI7dC5jb25maWd1cmU9Y29uZmlndXJlO2UuZXhwb3J0cz1yO2NvbnN0IGk9L1tcXHUwMDAwLVxcdTAwMWZcXHUwMDIyXFx1MDA1Y1xcdWQ4MDAtXFx1ZGZmZl0vO2Z1bmN0aW9uIHN0ckVzY2FwZShlKXtpZihlLmxlbmd0aDw1ZTMmJiFpLnRlc3QoZSkpe3JldHVybmBcIiR7ZX1cImB9cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIHNvcnQoZSx0KXtpZihlLmxlbmd0aD4yMDB8fHQpe3JldHVybiBlLnNvcnQodCl9Zm9yKGxldCB0PTE7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IG49ZVt0XTtsZXQgcj10O3doaWxlKHIhPT0wJiZlW3ItMV0+bil7ZVtyXT1lW3ItMV07ci0tfWVbcl09bn1yZXR1cm4gZX1jb25zdCBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgSW50OEFycmF5KSksU3ltYm9sLnRvU3RyaW5nVGFnKS5nZXQ7ZnVuY3Rpb24gaXNUeXBlZEFycmF5V2l0aEVudHJpZXMoZSl7cmV0dXJuIGYuY2FsbChlKSE9PXVuZGVmaW5lZCYmZS5sZW5ndGghPT0wfWZ1bmN0aW9uIHN0cmluZ2lmeVR5cGVkQXJyYXkoZSx0LG4pe2lmKGUubGVuZ3RoPG4pe249ZS5sZW5ndGh9Y29uc3Qgcj10PT09XCIsXCI/XCJcIjpcIiBcIjtsZXQgaT1gXCIwXCI6JHtyfSR7ZVswXX1gO2ZvcihsZXQgZj0xO2Y8bjtmKyspe2krPWAke3R9XCIke2Z9XCI6JHtyfSR7ZVtmXX1gfXJldHVybiBpfWZ1bmN0aW9uIGdldENpcmN1bGFyVmFsdWVPcHRpb24oZSl7aWYobi5jYWxsKGUsXCJjaXJjdWxhclZhbHVlXCIpKXtjb25zdCB0PWUuY2lyY3VsYXJWYWx1ZTtpZih0eXBlb2YgdD09PVwic3RyaW5nXCIpe3JldHVybmBcIiR7dH1cImB9aWYodD09bnVsbCl7cmV0dXJuIHR9aWYodD09PUVycm9yfHx0PT09VHlwZUVycm9yKXtyZXR1cm57dG9TdHJpbmcoKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTlwiKX19fXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNpcmN1bGFyVmFsdWVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIHRoZSB2YWx1ZSBudWxsIG9yIHVuZGVmaW5lZCcpfXJldHVybidcIltDaXJjdWxhcl1cIid9ZnVuY3Rpb24gZ2V0RGV0ZXJtaW5pc3RpY09wdGlvbihlKXtsZXQgdDtpZihuLmNhbGwoZSxcImRldGVybWluaXN0aWNcIikpe3Q9ZS5kZXRlcm1pbmlzdGljO2lmKHR5cGVvZiB0IT09XCJib29sZWFuXCImJnR5cGVvZiB0IT09XCJmdW5jdGlvblwiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJkZXRlcm1pbmlzdGljXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgY29tcGFyYXRvciBmdW5jdGlvbicpfX1yZXR1cm4gdD09PXVuZGVmaW5lZD90cnVlOnR9ZnVuY3Rpb24gZ2V0Qm9vbGVhbk9wdGlvbihlLHQpe2xldCByO2lmKG4uY2FsbChlLHQpKXtyPWVbdF07aWYodHlwZW9mIHIhPT1cImJvb2xlYW5cIil7dGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHt0fVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBib29sZWFuYCl9fXJldHVybiByPT09dW5kZWZpbmVkP3RydWU6cn1mdW5jdGlvbiBnZXRQb3NpdGl2ZUludGVnZXJPcHRpb24oZSx0KXtsZXQgcjtpZihuLmNhbGwoZSx0KSl7cj1lW3RdO2lmKHR5cGVvZiByIT09XCJudW1iZXJcIil7dGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHt0fVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXJgKX1pZighTnVtYmVyLmlzSW50ZWdlcihyKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHt0fVwiIGFyZ3VtZW50IG11c3QgYmUgYW4gaW50ZWdlcmApfWlmKHI8MSl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZSBcIiR7dH1cIiBhcmd1bWVudCBtdXN0IGJlID49IDFgKX19cmV0dXJuIHI9PT11bmRlZmluZWQ/SW5maW5pdHk6cn1mdW5jdGlvbiBnZXRJdGVtQ291bnQoZSl7aWYoZT09PTEpe3JldHVyblwiMSBpdGVtXCJ9cmV0dXJuYCR7ZX0gaXRlbXNgfWZ1bmN0aW9uIGdldFVuaXF1ZVJlcGxhY2VyU2V0KGUpe2NvbnN0IHQ9bmV3IFNldDtmb3IoY29uc3QgbiBvZiBlKXtpZih0eXBlb2Ygbj09PVwic3RyaW5nXCJ8fHR5cGVvZiBuPT09XCJudW1iZXJcIil7dC5hZGQoU3RyaW5nKG4pKX19cmV0dXJuIHR9ZnVuY3Rpb24gZ2V0U3RyaWN0T3B0aW9uKGUpe2lmKG4uY2FsbChlLFwic3RyaWN0XCIpKXtjb25zdCB0PWUuc3RyaWN0O2lmKHR5cGVvZiB0IT09XCJib29sZWFuXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInN0cmljdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBib29sZWFuJyl9aWYodCl7cmV0dXJuIGU9PntsZXQgdD1gT2JqZWN0IGNhbiBub3Qgc2FmZWx5IGJlIHN0cmluZ2lmaWVkLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGV9YDtpZih0eXBlb2YgZSE9PVwiZnVuY3Rpb25cIil0Kz1gICgke2UudG9TdHJpbmcoKX0pYDt0aHJvdyBuZXcgRXJyb3IodCl9fX19ZnVuY3Rpb24gY29uZmlndXJlKGUpe2U9ey4uLmV9O2NvbnN0IHQ9Z2V0U3RyaWN0T3B0aW9uKGUpO2lmKHQpe2lmKGUuYmlnaW50PT09dW5kZWZpbmVkKXtlLmJpZ2ludD1mYWxzZX1pZighKFwiY2lyY3VsYXJWYWx1ZVwiaW4gZSkpe2UuY2lyY3VsYXJWYWx1ZT1FcnJvcn19Y29uc3Qgbj1nZXRDaXJjdWxhclZhbHVlT3B0aW9uKGUpO2NvbnN0IHI9Z2V0Qm9vbGVhbk9wdGlvbihlLFwiYmlnaW50XCIpO2NvbnN0IGk9Z2V0RGV0ZXJtaW5pc3RpY09wdGlvbihlKTtjb25zdCBmPXR5cGVvZiBpPT09XCJmdW5jdGlvblwiP2k6dW5kZWZpbmVkO2NvbnN0IHU9Z2V0UG9zaXRpdmVJbnRlZ2VyT3B0aW9uKGUsXCJtYXhpbXVtRGVwdGhcIik7Y29uc3Qgbz1nZXRQb3NpdGl2ZUludGVnZXJPcHRpb24oZSxcIm1heGltdW1CcmVhZHRoXCIpO2Z1bmN0aW9uIHN0cmluZ2lmeUZuUmVwbGFjZXIoZSxzLGwsYyxhLGcpe2xldCBwPXNbZV07aWYodHlwZW9mIHA9PT1cIm9iamVjdFwiJiZwIT09bnVsbCYmdHlwZW9mIHAudG9KU09OPT09XCJmdW5jdGlvblwiKXtwPXAudG9KU09OKGUpfXA9Yy5jYWxsKHMsZSxwKTtzd2l0Y2godHlwZW9mIHApe2Nhc2VcInN0cmluZ1wiOnJldHVybiBzdHJFc2NhcGUocCk7Y2FzZVwib2JqZWN0XCI6e2lmKHA9PT1udWxsKXtyZXR1cm5cIm51bGxcIn1pZihsLmluZGV4T2YocCkhPT0tMSl7cmV0dXJuIG59bGV0IGU9XCJcIjtsZXQgdD1cIixcIjtjb25zdCByPWc7aWYoQXJyYXkuaXNBcnJheShwKSl7aWYocC5sZW5ndGg9PT0wKXtyZXR1cm5cIltdXCJ9aWYodTxsLmxlbmd0aCsxKXtyZXR1cm4nXCJbQXJyYXldXCInfWwucHVzaChwKTtpZihhIT09XCJcIil7Zys9YTtlKz1gXFxuJHtnfWA7dD1gLFxcbiR7Z31gfWNvbnN0IG49TWF0aC5taW4ocC5sZW5ndGgsbyk7bGV0IGk9MDtmb3IoO2k8bi0xO2krKyl7Y29uc3Qgbj1zdHJpbmdpZnlGblJlcGxhY2VyKFN0cmluZyhpKSxwLGwsYyxhLGcpO2UrPW4hPT11bmRlZmluZWQ/bjpcIm51bGxcIjtlKz10fWNvbnN0IGY9c3RyaW5naWZ5Rm5SZXBsYWNlcihTdHJpbmcoaSkscCxsLGMsYSxnKTtlKz1mIT09dW5kZWZpbmVkP2Y6XCJudWxsXCI7aWYocC5sZW5ndGgtMT5vKXtjb25zdCBuPXAubGVuZ3RoLW8tMTtlKz1gJHt0fVwiLi4uICR7Z2V0SXRlbUNvdW50KG4pfSBub3Qgc3RyaW5naWZpZWRcImB9aWYoYSE9PVwiXCIpe2UrPWBcXG4ke3J9YH1sLnBvcCgpO3JldHVybmBbJHtlfV1gfWxldCBzPU9iamVjdC5rZXlzKHApO2NvbnN0IHk9cy5sZW5ndGg7aWYoeT09PTApe3JldHVyblwie31cIn1pZih1PGwubGVuZ3RoKzEpe3JldHVybidcIltPYmplY3RdXCInfWxldCBkPVwiXCI7bGV0IGg9XCJcIjtpZihhIT09XCJcIil7Zys9YTt0PWAsXFxuJHtnfWA7ZD1cIiBcIn1jb25zdCAkPU1hdGgubWluKHksbyk7aWYoaSYmIWlzVHlwZWRBcnJheVdpdGhFbnRyaWVzKHApKXtzPXNvcnQocyxmKX1sLnB1c2gocCk7Zm9yKGxldCBuPTA7bjwkO24rKyl7Y29uc3Qgcj1zW25dO2NvbnN0IGk9c3RyaW5naWZ5Rm5SZXBsYWNlcihyLHAsbCxjLGEsZyk7aWYoaSE9PXVuZGVmaW5lZCl7ZSs9YCR7aH0ke3N0ckVzY2FwZShyKX06JHtkfSR7aX1gO2g9dH19aWYoeT5vKXtjb25zdCBuPXktbztlKz1gJHtofVwiLi4uXCI6JHtkfVwiJHtnZXRJdGVtQ291bnQobil9IG5vdCBzdHJpbmdpZmllZFwiYDtoPXR9aWYoYSE9PVwiXCImJmgubGVuZ3RoPjEpe2U9YFxcbiR7Z30ke2V9XFxuJHtyfWB9bC5wb3AoKTtyZXR1cm5geyR7ZX19YH1jYXNlXCJudW1iZXJcIjpyZXR1cm4gaXNGaW5pdGUocCk/U3RyaW5nKHApOnQ/dChwKTpcIm51bGxcIjtjYXNlXCJib29sZWFuXCI6cmV0dXJuIHA9PT10cnVlP1widHJ1ZVwiOlwiZmFsc2VcIjtjYXNlXCJ1bmRlZmluZWRcIjpyZXR1cm4gdW5kZWZpbmVkO2Nhc2VcImJpZ2ludFwiOmlmKHIpe3JldHVybiBTdHJpbmcocCl9ZGVmYXVsdDpyZXR1cm4gdD90KHApOnVuZGVmaW5lZH19ZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXlSZXBsYWNlcihlLGksZixzLGwsYyl7aWYodHlwZW9mIGk9PT1cIm9iamVjdFwiJiZpIT09bnVsbCYmdHlwZW9mIGkudG9KU09OPT09XCJmdW5jdGlvblwiKXtpPWkudG9KU09OKGUpfXN3aXRjaCh0eXBlb2YgaSl7Y2FzZVwic3RyaW5nXCI6cmV0dXJuIHN0ckVzY2FwZShpKTtjYXNlXCJvYmplY3RcIjp7aWYoaT09PW51bGwpe3JldHVyblwibnVsbFwifWlmKGYuaW5kZXhPZihpKSE9PS0xKXtyZXR1cm4gbn1jb25zdCBlPWM7bGV0IHQ9XCJcIjtsZXQgcj1cIixcIjtpZihBcnJheS5pc0FycmF5KGkpKXtpZihpLmxlbmd0aD09PTApe3JldHVyblwiW11cIn1pZih1PGYubGVuZ3RoKzEpe3JldHVybidcIltBcnJheV1cIid9Zi5wdXNoKGkpO2lmKGwhPT1cIlwiKXtjKz1sO3QrPWBcXG4ke2N9YDtyPWAsXFxuJHtjfWB9Y29uc3Qgbj1NYXRoLm1pbihpLmxlbmd0aCxvKTtsZXQgYT0wO2Zvcig7YTxuLTE7YSsrKXtjb25zdCBlPXN0cmluZ2lmeUFycmF5UmVwbGFjZXIoU3RyaW5nKGEpLGlbYV0sZixzLGwsYyk7dCs9ZSE9PXVuZGVmaW5lZD9lOlwibnVsbFwiO3QrPXJ9Y29uc3QgZz1zdHJpbmdpZnlBcnJheVJlcGxhY2VyKFN0cmluZyhhKSxpW2FdLGYscyxsLGMpO3QrPWchPT11bmRlZmluZWQ/ZzpcIm51bGxcIjtpZihpLmxlbmd0aC0xPm8pe2NvbnN0IGU9aS5sZW5ndGgtby0xO3QrPWAke3J9XCIuLi4gJHtnZXRJdGVtQ291bnQoZSl9IG5vdCBzdHJpbmdpZmllZFwiYH1pZihsIT09XCJcIil7dCs9YFxcbiR7ZX1gfWYucG9wKCk7cmV0dXJuYFske3R9XWB9Zi5wdXNoKGkpO2xldCBhPVwiXCI7aWYobCE9PVwiXCIpe2MrPWw7cj1gLFxcbiR7Y31gO2E9XCIgXCJ9bGV0IGc9XCJcIjtmb3IoY29uc3QgZSBvZiBzKXtjb25zdCBuPXN0cmluZ2lmeUFycmF5UmVwbGFjZXIoZSxpW2VdLGYscyxsLGMpO2lmKG4hPT11bmRlZmluZWQpe3QrPWAke2d9JHtzdHJFc2NhcGUoZSl9OiR7YX0ke259YDtnPXJ9fWlmKGwhPT1cIlwiJiZnLmxlbmd0aD4xKXt0PWBcXG4ke2N9JHt0fVxcbiR7ZX1gfWYucG9wKCk7cmV0dXJuYHske3R9fWB9Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGlzRmluaXRlKGkpP1N0cmluZyhpKTp0P3QoaSk6XCJudWxsXCI7Y2FzZVwiYm9vbGVhblwiOnJldHVybiBpPT09dHJ1ZT9cInRydWVcIjpcImZhbHNlXCI7Y2FzZVwidW5kZWZpbmVkXCI6cmV0dXJuIHVuZGVmaW5lZDtjYXNlXCJiaWdpbnRcIjppZihyKXtyZXR1cm4gU3RyaW5nKGkpfWRlZmF1bHQ6cmV0dXJuIHQ/dChpKTp1bmRlZmluZWR9fWZ1bmN0aW9uIHN0cmluZ2lmeUluZGVudChlLHMsbCxjLGEpe3N3aXRjaCh0eXBlb2Ygcyl7Y2FzZVwic3RyaW5nXCI6cmV0dXJuIHN0ckVzY2FwZShzKTtjYXNlXCJvYmplY3RcIjp7aWYocz09PW51bGwpe3JldHVyblwibnVsbFwifWlmKHR5cGVvZiBzLnRvSlNPTj09PVwiZnVuY3Rpb25cIil7cz1zLnRvSlNPTihlKTtpZih0eXBlb2YgcyE9PVwib2JqZWN0XCIpe3JldHVybiBzdHJpbmdpZnlJbmRlbnQoZSxzLGwsYyxhKX1pZihzPT09bnVsbCl7cmV0dXJuXCJudWxsXCJ9fWlmKGwuaW5kZXhPZihzKSE9PS0xKXtyZXR1cm4gbn1jb25zdCB0PWE7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYocy5sZW5ndGg9PT0wKXtyZXR1cm5cIltdXCJ9aWYodTxsLmxlbmd0aCsxKXtyZXR1cm4nXCJbQXJyYXldXCInfWwucHVzaChzKTthKz1jO2xldCBlPWBcXG4ke2F9YDtjb25zdCBuPWAsXFxuJHthfWA7Y29uc3Qgcj1NYXRoLm1pbihzLmxlbmd0aCxvKTtsZXQgaT0wO2Zvcig7aTxyLTE7aSsrKXtjb25zdCB0PXN0cmluZ2lmeUluZGVudChTdHJpbmcoaSksc1tpXSxsLGMsYSk7ZSs9dCE9PXVuZGVmaW5lZD90OlwibnVsbFwiO2UrPW59Y29uc3QgZj1zdHJpbmdpZnlJbmRlbnQoU3RyaW5nKGkpLHNbaV0sbCxjLGEpO2UrPWYhPT11bmRlZmluZWQ/ZjpcIm51bGxcIjtpZihzLmxlbmd0aC0xPm8pe2NvbnN0IHQ9cy5sZW5ndGgtby0xO2UrPWAke259XCIuLi4gJHtnZXRJdGVtQ291bnQodCl9IG5vdCBzdHJpbmdpZmllZFwiYH1lKz1gXFxuJHt0fWA7bC5wb3AoKTtyZXR1cm5gWyR7ZX1dYH1sZXQgcj1PYmplY3Qua2V5cyhzKTtjb25zdCBnPXIubGVuZ3RoO2lmKGc9PT0wKXtyZXR1cm5cInt9XCJ9aWYodTxsLmxlbmd0aCsxKXtyZXR1cm4nXCJbT2JqZWN0XVwiJ31hKz1jO2NvbnN0IHA9YCxcXG4ke2F9YDtsZXQgeT1cIlwiO2xldCBkPVwiXCI7bGV0IGg9TWF0aC5taW4oZyxvKTtpZihpc1R5cGVkQXJyYXlXaXRoRW50cmllcyhzKSl7eSs9c3RyaW5naWZ5VHlwZWRBcnJheShzLHAsbyk7cj1yLnNsaWNlKHMubGVuZ3RoKTtoLT1zLmxlbmd0aDtkPXB9aWYoaSl7cj1zb3J0KHIsZil9bC5wdXNoKHMpO2ZvcihsZXQgZT0wO2U8aDtlKyspe2NvbnN0IHQ9cltlXTtjb25zdCBuPXN0cmluZ2lmeUluZGVudCh0LHNbdF0sbCxjLGEpO2lmKG4hPT11bmRlZmluZWQpe3krPWAke2R9JHtzdHJFc2NhcGUodCl9OiAke259YDtkPXB9fWlmKGc+byl7Y29uc3QgZT1nLW87eSs9YCR7ZH1cIi4uLlwiOiBcIiR7Z2V0SXRlbUNvdW50KGUpfSBub3Qgc3RyaW5naWZpZWRcImA7ZD1wfWlmKGQhPT1cIlwiKXt5PWBcXG4ke2F9JHt5fVxcbiR7dH1gfWwucG9wKCk7cmV0dXJuYHske3l9fWB9Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGlzRmluaXRlKHMpP1N0cmluZyhzKTp0P3Qocyk6XCJudWxsXCI7Y2FzZVwiYm9vbGVhblwiOnJldHVybiBzPT09dHJ1ZT9cInRydWVcIjpcImZhbHNlXCI7Y2FzZVwidW5kZWZpbmVkXCI6cmV0dXJuIHVuZGVmaW5lZDtjYXNlXCJiaWdpbnRcIjppZihyKXtyZXR1cm4gU3RyaW5nKHMpfWRlZmF1bHQ6cmV0dXJuIHQ/dChzKTp1bmRlZmluZWR9fWZ1bmN0aW9uIHN0cmluZ2lmeVNpbXBsZShlLHMsbCl7c3dpdGNoKHR5cGVvZiBzKXtjYXNlXCJzdHJpbmdcIjpyZXR1cm4gc3RyRXNjYXBlKHMpO2Nhc2VcIm9iamVjdFwiOntpZihzPT09bnVsbCl7cmV0dXJuXCJudWxsXCJ9aWYodHlwZW9mIHMudG9KU09OPT09XCJmdW5jdGlvblwiKXtzPXMudG9KU09OKGUpO2lmKHR5cGVvZiBzIT09XCJvYmplY3RcIil7cmV0dXJuIHN0cmluZ2lmeVNpbXBsZShlLHMsbCl9aWYocz09PW51bGwpe3JldHVyblwibnVsbFwifX1pZihsLmluZGV4T2YocykhPT0tMSl7cmV0dXJuIG59bGV0IHQ9XCJcIjtjb25zdCByPXMubGVuZ3RoIT09dW5kZWZpbmVkO2lmKHImJkFycmF5LmlzQXJyYXkocykpe2lmKHMubGVuZ3RoPT09MCl7cmV0dXJuXCJbXVwifWlmKHU8bC5sZW5ndGgrMSl7cmV0dXJuJ1wiW0FycmF5XVwiJ31sLnB1c2gocyk7Y29uc3QgZT1NYXRoLm1pbihzLmxlbmd0aCxvKTtsZXQgbj0wO2Zvcig7bjxlLTE7bisrKXtjb25zdCBlPXN0cmluZ2lmeVNpbXBsZShTdHJpbmcobiksc1tuXSxsKTt0Kz1lIT09dW5kZWZpbmVkP2U6XCJudWxsXCI7dCs9XCIsXCJ9Y29uc3Qgcj1zdHJpbmdpZnlTaW1wbGUoU3RyaW5nKG4pLHNbbl0sbCk7dCs9ciE9PXVuZGVmaW5lZD9yOlwibnVsbFwiO2lmKHMubGVuZ3RoLTE+byl7Y29uc3QgZT1zLmxlbmd0aC1vLTE7dCs9YCxcIi4uLiAke2dldEl0ZW1Db3VudChlKX0gbm90IHN0cmluZ2lmaWVkXCJgfWwucG9wKCk7cmV0dXJuYFske3R9XWB9bGV0IGM9T2JqZWN0LmtleXMocyk7Y29uc3QgYT1jLmxlbmd0aDtpZihhPT09MCl7cmV0dXJuXCJ7fVwifWlmKHU8bC5sZW5ndGgrMSl7cmV0dXJuJ1wiW09iamVjdF1cIid9bGV0IGc9XCJcIjtsZXQgcD1NYXRoLm1pbihhLG8pO2lmKHImJmlzVHlwZWRBcnJheVdpdGhFbnRyaWVzKHMpKXt0Kz1zdHJpbmdpZnlUeXBlZEFycmF5KHMsXCIsXCIsbyk7Yz1jLnNsaWNlKHMubGVuZ3RoKTtwLT1zLmxlbmd0aDtnPVwiLFwifWlmKGkpe2M9c29ydChjLGYpfWwucHVzaChzKTtmb3IobGV0IGU9MDtlPHA7ZSsrKXtjb25zdCBuPWNbZV07Y29uc3Qgcj1zdHJpbmdpZnlTaW1wbGUobixzW25dLGwpO2lmKHIhPT11bmRlZmluZWQpe3QrPWAke2d9JHtzdHJFc2NhcGUobil9OiR7cn1gO2c9XCIsXCJ9fWlmKGE+byl7Y29uc3QgZT1hLW87dCs9YCR7Z31cIi4uLlwiOlwiJHtnZXRJdGVtQ291bnQoZSl9IG5vdCBzdHJpbmdpZmllZFwiYH1sLnBvcCgpO3JldHVybmB7JHt0fX1gfWNhc2VcIm51bWJlclwiOnJldHVybiBpc0Zpbml0ZShzKT9TdHJpbmcocyk6dD90KHMpOlwibnVsbFwiO2Nhc2VcImJvb2xlYW5cIjpyZXR1cm4gcz09PXRydWU/XCJ0cnVlXCI6XCJmYWxzZVwiO2Nhc2VcInVuZGVmaW5lZFwiOnJldHVybiB1bmRlZmluZWQ7Y2FzZVwiYmlnaW50XCI6aWYocil7cmV0dXJuIFN0cmluZyhzKX1kZWZhdWx0OnJldHVybiB0P3Qocyk6dW5kZWZpbmVkfX1mdW5jdGlvbiBzdHJpbmdpZnkoZSx0LG4pe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7bGV0IHI9XCJcIjtpZih0eXBlb2Ygbj09PVwibnVtYmVyXCIpe3I9XCIgXCIucmVwZWF0KE1hdGgubWluKG4sMTApKX1lbHNlIGlmKHR5cGVvZiBuPT09XCJzdHJpbmdcIil7cj1uLnNsaWNlKDAsMTApfWlmKHQhPW51bGwpe2lmKHR5cGVvZiB0PT09XCJmdW5jdGlvblwiKXtyZXR1cm4gc3RyaW5naWZ5Rm5SZXBsYWNlcihcIlwiLHtcIlwiOmV9LFtdLHQscixcIlwiKX1pZihBcnJheS5pc0FycmF5KHQpKXtyZXR1cm4gc3RyaW5naWZ5QXJyYXlSZXBsYWNlcihcIlwiLGUsW10sZ2V0VW5pcXVlUmVwbGFjZXJTZXQodCkscixcIlwiKX19aWYoci5sZW5ndGghPT0wKXtyZXR1cm4gc3RyaW5naWZ5SW5kZW50KFwiXCIsZSxbXSxyLFwiXCIpfX1yZXR1cm4gc3RyaW5naWZ5U2ltcGxlKFwiXCIsZSxbXSl9cmV0dXJuIHN0cmluZ2lmeX19fTt2YXIgdD17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKG4pe3ZhciByPXRbbl07aWYociE9PXVuZGVmaW5lZCl7cmV0dXJuIHIuZXhwb3J0c312YXIgaT10W25dPXtleHBvcnRzOnt9fTt2YXIgZj10cnVlO3RyeXtlW25dKGksaS5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO2Y9ZmFsc2V9ZmluYWxseXtpZihmKWRlbGV0ZSB0W25dfXJldHVybiBpLmV4cG9ydHN9aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciBuPV9fbmNjd3Bja19yZXF1aXJlX18oODc5KTttb2R1bGUuZXhwb3J0cz1ufSkoKTsiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/safe-stable-stringify/index.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js":
/*!****************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js ***!
\****************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;Object.defineProperty(r,\"__esModule\",{value:true});var n=\"<unknown>\";function parse(e){var r=e.split(\"\\n\");return r.reduce((function(e,r){var n=parseChrome(r)||parseWinjs(r)||parseGecko(r)||parseNode(r)||parseJSC(r);if(n){e.push(n)}return e}),[])}var a=/^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|webpack-internal|rsc|about|turbopack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;var u=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;function parseChrome(e){var r=a.exec(e);if(!r){return null}var l=r[2]&&r[2].indexOf(\"native\")===0;var t=r[2]&&r[2].indexOf(\"eval\")===0;var i=u.exec(r[2]);if(t&&i!=null){r[2]=i[1];r[3]=i[2];r[4]=i[3]}return{file:!l?r[2]:null,methodName:r[1]||n,arguments:l?[r[2]]:[],lineNumber:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}var l=/^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|webpack-internal|rsc|about|turbopack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function parseWinjs(e){var r=l.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}var t=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|webpack-internal|rsc|about|turbopack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;var i=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;function parseGecko(e){var r=t.exec(e);if(!r){return null}var a=r[3]&&r[3].indexOf(\" > eval\")>-1;var u=i.exec(r[3]);if(a&&u!=null){r[3]=u[1];r[4]=u[2];r[5]=null}return{file:r[3],methodName:r[1]||n,arguments:r[2]?r[2].split(\",\"):[],lineNumber:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}var o=/^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;function parseJSC(e){var r=o.exec(e);if(!r){return null}return{file:r[3],methodName:r[1]||n,arguments:[],lineNumber:+r[4],column:r[5]?+r[5]:null}}var s=/^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function parseNode(e){var r=s.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}r.parse=parse})();module.exports=e})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc3RhY2t0cmFjZS1wYXJzZXIvc3RhY2stdHJhY2UtcGFyc2VyLmNqcy5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxhQUFhLG1FQUFtRSxTQUFTLEtBQUssU0FBUyxNQUFNLFFBQVEsc0NBQXNDLFdBQVcsRUFBRSxrQkFBa0Isa0JBQWtCLG9CQUFvQiwrQkFBK0IsOEVBQThFLE1BQU0sVUFBVSxTQUFTLE1BQU0sdUxBQXVMLHNDQUFzQyx3QkFBd0IsZ0JBQWdCLE9BQU8sWUFBWSx1Q0FBdUMscUNBQXFDLG1CQUFtQixlQUFlLFVBQVUsVUFBVSxVQUFVLE9BQU8sOEdBQThHLDJKQUEySix1QkFBdUIsZ0JBQWdCLE9BQU8sWUFBWSxPQUFPLG1GQUFtRiw2S0FBNkssc0RBQXNELHVCQUF1QixnQkFBZ0IsT0FBTyxZQUFZLHVDQUF1QyxtQkFBbUIsZUFBZSxVQUFVLFVBQVUsVUFBVSxPQUFPLGtIQUFrSCxxRUFBcUUscUJBQXFCLGdCQUFnQixPQUFPLFlBQVksT0FBTyxtRkFBbUYsc0dBQXNHLHNCQUFzQixnQkFBZ0IsT0FBTyxZQUFZLE9BQU8sbUZBQW1GLGNBQWMsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNS40X3JlYWN0LWRvbUAxOS4xLjBfcmVhY3RAMTkuMS4wX19yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zdGFja3RyYWNlLXBhcnNlci9zdGFjay10cmFjZS1wYXJzZXIuY2pzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIigoKT0+e1widXNlIHN0cmljdFwiO2lmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgZT17fTsoKCk9Pnt2YXIgcj1lO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dmFyIG49XCI8dW5rbm93bj5cIjtmdW5jdGlvbiBwYXJzZShlKXt2YXIgcj1lLnNwbGl0KFwiXFxuXCIpO3JldHVybiByLnJlZHVjZSgoZnVuY3Rpb24oZSxyKXt2YXIgbj1wYXJzZUNocm9tZShyKXx8cGFyc2VXaW5qcyhyKXx8cGFyc2VHZWNrbyhyKXx8cGFyc2VOb2RlKHIpfHxwYXJzZUpTQyhyKTtpZihuKXtlLnB1c2gobil9cmV0dXJuIGV9KSxbXSl9dmFyIGE9L15cXHMqYXQgKC4qPykgP1xcKCgoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZS1leHRlbnNpb258bmF0aXZlfGV2YWx8d2VicGFja3x3ZWJwYWNrLWludGVybmFsfHJzY3xhYm91dHx0dXJib3BhY2t8PGFub255bW91cz58XFwvfFthLXpdOlxcXFx8XFxcXFxcXFwpLio/KSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xcKT9cXHMqJC9pO3ZhciB1PS9cXCgoXFxTKikoPzo6KFxcZCspKSg/OjooXFxkKykpXFwpLztmdW5jdGlvbiBwYXJzZUNocm9tZShlKXt2YXIgcj1hLmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXZhciBsPXJbMl0mJnJbMl0uaW5kZXhPZihcIm5hdGl2ZVwiKT09PTA7dmFyIHQ9clsyXSYmclsyXS5pbmRleE9mKFwiZXZhbFwiKT09PTA7dmFyIGk9dS5leGVjKHJbMl0pO2lmKHQmJmkhPW51bGwpe3JbMl09aVsxXTtyWzNdPWlbMl07cls0XT1pWzNdfXJldHVybntmaWxlOiFsP3JbMl06bnVsbCxtZXRob2ROYW1lOnJbMV18fG4sYXJndW1lbnRzOmw/W3JbMl1dOltdLGxpbmVOdW1iZXI6clszXT8rclszXTpudWxsLGNvbHVtbjpyWzRdPytyWzRdOm51bGx9fXZhciBsPS9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT8uKykgKT9cXCg/KCg/OmZpbGV8bXMtYXBweHxodHRwcz98d2VicGFja3x3ZWJwYWNrLWludGVybmFsfHJzY3xhYm91dHx0dXJib3BhY2t8YmxvYik6Lio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaTtmdW5jdGlvbiBwYXJzZVdpbmpzKGUpe3ZhciByPWwuZXhlYyhlKTtpZighcil7cmV0dXJuIG51bGx9cmV0dXJue2ZpbGU6clsyXSxtZXRob2ROYW1lOnJbMV18fG4sYXJndW1lbnRzOltdLGxpbmVOdW1iZXI6K3JbM10sY29sdW1uOnJbNF0/K3JbNF06bnVsbH19dmFyIHQ9L15cXHMqKC4qPykoPzpcXCgoLio/KVxcKSk/KD86XnxAKSgoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZXx3ZWJwYWNrfHdlYnBhY2staW50ZXJuYWx8cnNjfGFib3V0fHR1cmJvcGFja3xyZXNvdXJjZXxcXFtuYXRpdmUpLio/fFteQF0qYnVuZGxlKSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xccyokL2k7dmFyIGk9LyhcXFMrKSBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsL2k7ZnVuY3Rpb24gcGFyc2VHZWNrbyhlKXt2YXIgcj10LmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXZhciBhPXJbM10mJnJbM10uaW5kZXhPZihcIiA+IGV2YWxcIik+LTE7dmFyIHU9aS5leGVjKHJbM10pO2lmKGEmJnUhPW51bGwpe3JbM109dVsxXTtyWzRdPXVbMl07cls1XT1udWxsfXJldHVybntmaWxlOnJbM10sbWV0aG9kTmFtZTpyWzFdfHxuLGFyZ3VtZW50czpyWzJdP3JbMl0uc3BsaXQoXCIsXCIpOltdLGxpbmVOdW1iZXI6cls0XT8rcls0XTpudWxsLGNvbHVtbjpyWzVdPytyWzVdOm51bGx9fXZhciBvPS9eXFxzKig/OihbXkBdKikoPzpcXCgoLio/KVxcKSk/QCk/KFxcUy4qPyk6KFxcZCspKD86OihcXGQrKSk/XFxzKiQvaTtmdW5jdGlvbiBwYXJzZUpTQyhlKXt2YXIgcj1vLmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXJldHVybntmaWxlOnJbM10sbWV0aG9kTmFtZTpyWzFdfHxuLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOityWzRdLGNvbHVtbjpyWzVdPytyWzVdOm51bGx9fXZhciBzPS9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT9bXlxcXFwvXSsoPzogXFxbYXMgXFxTK1xcXSk/KSApP1xcKD8oLio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaTtmdW5jdGlvbiBwYXJzZU5vZGUoZSl7dmFyIHI9cy5leGVjKGUpO2lmKCFyKXtyZXR1cm4gbnVsbH1yZXR1cm57ZmlsZTpyWzJdLG1ldGhvZE5hbWU6clsxXXx8bixhcmd1bWVudHM6W10sbGluZU51bWJlcjorclszXSxjb2x1bW46cls0XT8rcls0XTpudWxsfX1yLnBhcnNlPXBhcnNlfSkoKTttb2R1bGUuZXhwb3J0cz1lfSkoKTsiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/strip-ansi/index.js":
/*!****************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/strip-ansi/index.js ***!
\****************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("var __dirname = \"/\";\n\n(()=>{\n \"use strict\";\n var e = {\n 511: (e)=>{\n e.exports = function() {\n let { onlyFirst: e = false } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n const r = [\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\n \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"\n ].join(\"|\");\n return new RegExp(r, e ? undefined : \"g\");\n };\n },\n 532: (e, r, _)=>{\n const t = _(511);\n e.exports = (e)=>typeof e === \"string\" ? e.replace(t(), \"\") : e;\n }\n };\n var r = {};\n function __nccwpck_require__(_) {\n var t = r[_];\n if (t !== undefined) {\n return t.exports;\n }\n var a = r[_] = {\n exports: {}\n };\n var n = true;\n try {\n e[_](a, a.exports, __nccwpck_require__);\n n = false;\n } finally{\n if (n) delete r[_];\n }\n return a.exports;\n }\n if (typeof __nccwpck_require__ !== \"undefined\") __nccwpck_require__.ab = __dirname + \"/\";\n var _ = __nccwpck_require__(532);\n module.exports = _;\n})();\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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOztBQUFDO0lBQUs7SUFBYSxJQUFJQSxJQUFFO1FBQUMsS0FBSUEsQ0FBQUE7WUFBSUEsRUFBRUMsT0FBTyxHQUFDO29CQUFDLEVBQUNDLFdBQVVGLElBQUUsS0FBSyxFQUFDLG9FQUFDLENBQUM7Z0JBQUssTUFBTUcsSUFBRTtvQkFBQztvQkFBK0g7aUJBQTJELENBQUNDLElBQUksQ0FBQztnQkFBSyxPQUFPLElBQUlDLE9BQU9GLEdBQUVILElBQUVNLFlBQVU7WUFBSTtRQUFDO1FBQUUsS0FBSSxDQUFDTixHQUFFRyxHQUFFSTtZQUFLLE1BQU1DLElBQUVELEVBQUU7WUFBS1AsRUFBRUMsT0FBTyxHQUFDRCxDQUFBQSxJQUFHLE9BQU9BLE1BQUksV0FBU0EsRUFBRVMsT0FBTyxDQUFDRCxLQUFJLE1BQUlSO1FBQUM7SUFBQztJQUFFLElBQUlHLElBQUUsQ0FBQztJQUFFLFNBQVNPLG9CQUFvQkgsQ0FBQztRQUFFLElBQUlDLElBQUVMLENBQUMsQ0FBQ0ksRUFBRTtRQUFDLElBQUdDLE1BQUlGLFdBQVU7WUFBQyxPQUFPRSxFQUFFUCxPQUFPO1FBQUE7UUFBQyxJQUFJVSxJQUFFUixDQUFDLENBQUNJLEVBQUUsR0FBQztZQUFDTixTQUFRLENBQUM7UUFBQztRQUFFLElBQUlXLElBQUU7UUFBSyxJQUFHO1lBQUNaLENBQUMsQ0FBQ08sRUFBRSxDQUFDSSxHQUFFQSxFQUFFVixPQUFPLEVBQUNTO1lBQXFCRSxJQUFFO1FBQUssU0FBUTtZQUFDLElBQUdBLEdBQUUsT0FBT1QsQ0FBQyxDQUFDSSxFQUFFO1FBQUE7UUFBQyxPQUFPSSxFQUFFVixPQUFPO0lBQUE7SUFBQyxJQUFHLE9BQU9TLHdCQUFzQixhQUFZQSxvQkFBb0JHLEVBQUUsR0FBQ0MsU0FBU0EsR0FBQztJQUFJLElBQUlQLElBQUVHLG9CQUFvQjtJQUFLSyxPQUFPZCxPQUFPLEdBQUNNO0FBQUMiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNS40X3JlYWN0LWRvbUAxOS4xLjBfcmVhY3RAMTkuMS4wX19yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIigoKT0+e1widXNlIHN0cmljdFwiO3ZhciBlPXs1MTE6ZT0+e2UuZXhwb3J0cz0oe29ubHlGaXJzdDplPWZhbHNlfT17fSk9Pntjb25zdCByPVtcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNylcIixcIig/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpXCJdLmpvaW4oXCJ8XCIpO3JldHVybiBuZXcgUmVnRXhwKHIsZT91bmRlZmluZWQ6XCJnXCIpfX0sNTMyOihlLHIsXyk9Pntjb25zdCB0PV8oNTExKTtlLmV4cG9ydHM9ZT0+dHlwZW9mIGU9PT1cInN0cmluZ1wiP2UucmVwbGFjZSh0KCksXCJcIik6ZX19O3ZhciByPXt9O2Z1bmN0aW9uIF9fbmNjd3Bja19yZXF1aXJlX18oXyl7dmFyIHQ9cltfXTtpZih0IT09dW5kZWZpbmVkKXtyZXR1cm4gdC5leHBvcnRzfXZhciBhPXJbX109e2V4cG9ydHM6e319O3ZhciBuPXRydWU7dHJ5e2VbX10oYSxhLmV4cG9ydHMsX19uY2N3cGNrX3JlcXVpcmVfXyk7bj1mYWxzZX1maW5hbGx5e2lmKG4pZGVsZXRlIHJbX119cmV0dXJuIGEuZXhwb3J0c31pZih0eXBlb2YgX19uY2N3cGNrX3JlcXVpcmVfXyE9PVwidW5kZWZpbmVkXCIpX19uY2N3cGNrX3JlcXVpcmVfXy5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIF89X19uY2N3cGNrX3JlcXVpcmVfXyg1MzIpO21vZHVsZS5leHBvcnRzPV99KSgpOyJdLCJuYW1lcyI6WyJlIiwiZXhwb3J0cyIsIm9ubHlGaXJzdCIsInIiLCJqb2luIiwiUmVnRXhwIiwidW5kZWZpbmVkIiwiXyIsInQiLCJyZXBsYWNlIiwiX19uY2N3cGNrX3JlcXVpcmVfXyIsImEiLCJuIiwiYWIiLCJfX2Rpcm5hbWUiLCJtb2R1bGUiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/strip-ansi/index.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/constants.js":
/*!****************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/constants.js ***!
\****************************************************************************************************************************/
/***/ ((__unused_webpack_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 ACTION_SUFFIX: function() {\n return ACTION_SUFFIX;\n },\n APP_DIR_ALIAS: function() {\n return APP_DIR_ALIAS;\n },\n CACHE_ONE_YEAR: function() {\n return CACHE_ONE_YEAR;\n },\n DOT_NEXT_ALIAS: function() {\n return DOT_NEXT_ALIAS;\n },\n ESLINT_DEFAULT_DIRS: function() {\n return ESLINT_DEFAULT_DIRS;\n },\n GSP_NO_RETURNED_VALUE: function() {\n return GSP_NO_RETURNED_VALUE;\n },\n GSSP_COMPONENT_MEMBER_ERROR: function() {\n return GSSP_COMPONENT_MEMBER_ERROR;\n },\n GSSP_NO_RETURNED_VALUE: function() {\n return GSSP_NO_RETURNED_VALUE;\n },\n HTML_CONTENT_TYPE_HEADER: function() {\n return HTML_CONTENT_TYPE_HEADER;\n },\n INFINITE_CACHE: function() {\n return INFINITE_CACHE;\n },\n INSTRUMENTATION_HOOK_FILENAME: function() {\n return INSTRUMENTATION_HOOK_FILENAME;\n },\n JSON_CONTENT_TYPE_HEADER: function() {\n return JSON_CONTENT_TYPE_HEADER;\n },\n MATCHED_PATH_HEADER: function() {\n return MATCHED_PATH_HEADER;\n },\n MIDDLEWARE_FILENAME: function() {\n return MIDDLEWARE_FILENAME;\n },\n MIDDLEWARE_LOCATION_REGEXP: function() {\n return MIDDLEWARE_LOCATION_REGEXP;\n },\n NEXT_BODY_SUFFIX: function() {\n return NEXT_BODY_SUFFIX;\n },\n NEXT_CACHE_IMPLICIT_TAG_ID: function() {\n return NEXT_CACHE_IMPLICIT_TAG_ID;\n },\n NEXT_CACHE_REVALIDATED_TAGS_HEADER: function() {\n return NEXT_CACHE_REVALIDATED_TAGS_HEADER;\n },\n NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER: function() {\n return NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER;\n },\n NEXT_CACHE_SOFT_TAG_MAX_LENGTH: function() {\n return NEXT_CACHE_SOFT_TAG_MAX_LENGTH;\n },\n NEXT_CACHE_TAGS_HEADER: function() {\n return NEXT_CACHE_TAGS_HEADER;\n },\n NEXT_CACHE_TAG_MAX_ITEMS: function() {\n return NEXT_CACHE_TAG_MAX_ITEMS;\n },\n NEXT_CACHE_TAG_MAX_LENGTH: function() {\n return NEXT_CACHE_TAG_MAX_LENGTH;\n },\n NEXT_DATA_SUFFIX: function() {\n return NEXT_DATA_SUFFIX;\n },\n NEXT_INTERCEPTION_MARKER_PREFIX: function() {\n return NEXT_INTERCEPTION_MARKER_PREFIX;\n },\n NEXT_META_SUFFIX: function() {\n return NEXT_META_SUFFIX;\n },\n NEXT_QUERY_PARAM_PREFIX: function() {\n return NEXT_QUERY_PARAM_PREFIX;\n },\n NEXT_RESUME_HEADER: function() {\n return NEXT_RESUME_HEADER;\n },\n NON_STANDARD_NODE_ENV: function() {\n return NON_STANDARD_NODE_ENV;\n },\n PAGES_DIR_ALIAS: function() {\n return PAGES_DIR_ALIAS;\n },\n PRERENDER_REVALIDATE_HEADER: function() {\n return PRERENDER_REVALIDATE_HEADER;\n },\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER: function() {\n return PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER;\n },\n PUBLIC_DIR_MIDDLEWARE_CONFLICT: function() {\n return PUBLIC_DIR_MIDDLEWARE_CONFLICT;\n },\n ROOT_DIR_ALIAS: function() {\n return ROOT_DIR_ALIAS;\n },\n RSC_ACTION_CLIENT_WRAPPER_ALIAS: function() {\n return RSC_ACTION_CLIENT_WRAPPER_ALIAS;\n },\n RSC_ACTION_ENCRYPTION_ALIAS: function() {\n return RSC_ACTION_ENCRYPTION_ALIAS;\n },\n RSC_ACTION_PROXY_ALIAS: function() {\n return RSC_ACTION_PROXY_ALIAS;\n },\n RSC_ACTION_VALIDATE_ALIAS: function() {\n return RSC_ACTION_VALIDATE_ALIAS;\n },\n RSC_CACHE_WRAPPER_ALIAS: function() {\n return RSC_CACHE_WRAPPER_ALIAS;\n },\n RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS: function() {\n return RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS;\n },\n RSC_MOD_REF_PROXY_ALIAS: function() {\n return RSC_MOD_REF_PROXY_ALIAS;\n },\n RSC_PREFETCH_SUFFIX: function() {\n return RSC_PREFETCH_SUFFIX;\n },\n RSC_SEGMENTS_DIR_SUFFIX: function() {\n return RSC_SEGMENTS_DIR_SUFFIX;\n },\n RSC_SEGMENT_SUFFIX: function() {\n return RSC_SEGMENT_SUFFIX;\n },\n RSC_SUFFIX: function() {\n return RSC_SUFFIX;\n },\n SERVER_PROPS_EXPORT_ERROR: function() {\n return SERVER_PROPS_EXPORT_ERROR;\n },\n SERVER_PROPS_GET_INIT_PROPS_CONFLICT: function() {\n return SERVER_PROPS_GET_INIT_PROPS_CONFLICT;\n },\n SERVER_PROPS_SSG_CONFLICT: function() {\n return SERVER_PROPS_SSG_CONFLICT;\n },\n SERVER_RUNTIME: function() {\n return SERVER_RUNTIME;\n },\n SSG_FALLBACK_EXPORT_ERROR: function() {\n return SSG_FALLBACK_EXPORT_ERROR;\n },\n SSG_GET_INITIAL_PROPS_CONFLICT: function() {\n return SSG_GET_INITIAL_PROPS_CONFLICT;\n },\n STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR: function() {\n return STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR;\n },\n TEXT_PLAIN_CONTENT_TYPE_HEADER: function() {\n return TEXT_PLAIN_CONTENT_TYPE_HEADER;\n },\n UNSTABLE_REVALIDATE_RENAME_ERROR: function() {\n return UNSTABLE_REVALIDATE_RENAME_ERROR;\n },\n WEBPACK_LAYERS: function() {\n return WEBPACK_LAYERS;\n },\n WEBPACK_RESOURCE_QUERIES: function() {\n return WEBPACK_RESOURCE_QUERIES;\n }\n});\nconst TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain';\nconst HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8';\nconst JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8';\nconst NEXT_QUERY_PARAM_PREFIX = 'nxtP';\nconst NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI';\nconst MATCHED_PATH_HEADER = 'x-matched-path';\nconst PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate';\nconst PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = 'x-prerender-revalidate-if-generated';\nconst RSC_PREFETCH_SUFFIX = '.prefetch.rsc';\nconst RSC_SEGMENTS_DIR_SUFFIX = '.segments';\nconst RSC_SEGMENT_SUFFIX = '.segment.rsc';\nconst RSC_SUFFIX = '.rsc';\nconst ACTION_SUFFIX = '.action';\nconst NEXT_DATA_SUFFIX = '.json';\nconst NEXT_META_SUFFIX = '.meta';\nconst NEXT_BODY_SUFFIX = '.body';\nconst NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags';\nconst NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags';\nconst NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER = 'x-next-revalidate-tag-token';\nconst NEXT_RESUME_HEADER = 'next-resume';\nconst NEXT_CACHE_TAG_MAX_ITEMS = 128;\nconst NEXT_CACHE_TAG_MAX_LENGTH = 256;\nconst NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024;\nconst NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_';\nconst CACHE_ONE_YEAR = 31536000;\nconst INFINITE_CACHE = 0xfffffffe;\nconst MIDDLEWARE_FILENAME = 'middleware';\nconst MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`;\nconst INSTRUMENTATION_HOOK_FILENAME = 'instrumentation';\nconst PAGES_DIR_ALIAS = 'private-next-pages';\nconst DOT_NEXT_ALIAS = 'private-dot-next';\nconst ROOT_DIR_ALIAS = 'private-next-root-dir';\nconst APP_DIR_ALIAS = 'private-next-app-dir';\nconst RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy';\nconst RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate';\nconst RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference';\nconst RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper';\nconst RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS = 'private-next-rsc-track-dynamic-import';\nconst RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption';\nconst RSC_ACTION_CLIENT_WRAPPER_ALIAS = 'private-next-rsc-action-client-wrapper';\nconst PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`;\nconst SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`;\nconst SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`;\nconst SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`;\nconst STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`;\nconst SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`;\nconst GSP_NO_RETURNED_VALUE = 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?';\nconst GSSP_NO_RETURNED_VALUE = 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?';\nconst UNSTABLE_REVALIDATE_RENAME_ERROR = 'The `unstable_revalidate` property is available for general use.\\n' + 'Please use `revalidate` instead.';\nconst GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`;\nconst NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`;\nconst SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`;\nconst ESLINT_DEFAULT_DIRS = [\n 'app',\n 'pages',\n 'components',\n 'lib',\n 'src'\n];\nconst SERVER_RUNTIME = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs'\n};\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */ const WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */ shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */ reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */ serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */ actionBrowser: 'action-browser',\n /**\n * The Node.js bundle layer for the API routes.\n */ apiNode: 'api-node',\n /**\n * The Edge Lite bundle layer for the API routes.\n */ apiEdge: 'api-edge',\n /**\n * The layer for the middleware code.\n */ middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */ instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */ edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */ appPagesBrowser: 'app-pages-browser',\n /**\n * The browser client bundle layer for Pages directory.\n */ pagesDirBrowser: 'pages-dir-browser',\n /**\n * The Edge Lite bundle layer for Pages directory.\n */ pagesDirEdge: 'pages-dir-edge',\n /**\n * The Node.js bundle layer for Pages directory.\n */ pagesDirNode: 'pages-dir-node'\n};\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.apiNode,\n WEBPACK_LAYERS_NAMES.apiEdge\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser\n ]\n }\n};\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__'\n};\n\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0F5REw7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSw2Q0FBNkM7QUFDN0Msb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxvQkFBb0I7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNS40X3JlYWN0LWRvbUAxOS4xLjBfcmVhY3RAMTkuMS4wX19yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvY29uc3RhbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQUNUSU9OX1NVRkZJWDogbnVsbCxcbiAgICBBUFBfRElSX0FMSUFTOiBudWxsLFxuICAgIENBQ0hFX09ORV9ZRUFSOiBudWxsLFxuICAgIERPVF9ORVhUX0FMSUFTOiBudWxsLFxuICAgIEVTTElOVF9ERUZBVUxUX0RJUlM6IG51bGwsXG4gICAgR1NQX05PX1JFVFVSTkVEX1ZBTFVFOiBudWxsLFxuICAgIEdTU1BfQ09NUE9ORU5UX01FTUJFUl9FUlJPUjogbnVsbCxcbiAgICBHU1NQX05PX1JFVFVSTkVEX1ZBTFVFOiBudWxsLFxuICAgIEhUTUxfQ09OVEVOVF9UWVBFX0hFQURFUjogbnVsbCxcbiAgICBJTkZJTklURV9DQUNIRTogbnVsbCxcbiAgICBJTlNUUlVNRU5UQVRJT05fSE9PS19GSUxFTkFNRTogbnVsbCxcbiAgICBKU09OX0NPTlRFTlRfVFlQRV9IRUFERVI6IG51bGwsXG4gICAgTUFUQ0hFRF9QQVRIX0hFQURFUjogbnVsbCxcbiAgICBNSURETEVXQVJFX0ZJTEVOQU1FOiBudWxsLFxuICAgIE1JRERMRVdBUkVfTE9DQVRJT05fUkVHRVhQOiBudWxsLFxuICAgIE5FWFRfQk9EWV9TVUZGSVg6IG51bGwsXG4gICAgTkVYVF9DQUNIRV9JTVBMSUNJVF9UQUdfSUQ6IG51bGwsXG4gICAgTkVYVF9DQUNIRV9SRVZBTElEQVRFRF9UQUdTX0hFQURFUjogbnVsbCxcbiAgICBORVhUX0NBQ0hFX1JFVkFMSURBVEVfVEFHX1RPS0VOX0hFQURFUjogbnVsbCxcbiAgICBORVhUX0NBQ0hFX1NPRlRfVEFHX01BWF9MRU5HVEg6IG51bGwsXG4gICAgTkVYVF9DQUNIRV9UQUdTX0hFQURFUjogbnVsbCxcbiAgICBORVhUX0NBQ0hFX1RBR19NQVhfSVRFTVM6IG51bGwsXG4gICAgTkVYVF9DQUNIRV9UQUdfTUFYX0xFTkdUSDogbnVsbCxcbiAgICBORVhUX0RBVEFfU1VGRklYOiBudWxsLFxuICAgIE5FWFRfSU5URVJDRVBUSU9OX01BUktFUl9QUkVGSVg6IG51bGwsXG4gICAgTkVYVF9NRVRBX1NVRkZJWDogbnVsbCxcbiAgICBORVhUX1FVRVJZX1BBUkFNX1BSRUZJWDogbnVsbCxcbiAgICBORVhUX1JFU1VNRV9IRUFERVI6IG51bGwsXG4gICAgTk9OX1NUQU5EQVJEX05PREVfRU5WOiBudWxsLFxuICAgIFBBR0VTX0RJUl9BTElBUzogbnVsbCxcbiAgICBQUkVSRU5ERVJfUkVWQUxJREFURV9IRUFERVI6IG51bGwsXG4gICAgUFJFUkVOREVSX1JFVkFMSURBVEVfT05MWV9HRU5FUkFURURfSEVBREVSOiBudWxsLFxuICAgIFBVQkxJQ19ESVJfTUlERExFV0FSRV9DT05GTElDVDogbnVsbCxcbiAgICBST09UX0RJUl9BTElBUzogbnVsbCxcbiAgICBSU0NfQUNUSU9OX0NMSUVOVF9XUkFQUEVSX0FMSUFTOiBudWxsLFxuICAgIFJTQ19BQ1RJT05fRU5DUllQVElPTl9BTElBUzogbnVsbCxcbiAgICBSU0NfQUNUSU9OX1BST1hZX0FMSUFTOiBudWxsLFxuICAgIFJTQ19BQ1RJT05fVkFMSURBVEVfQUxJQVM6IG51bGwsXG4gICAgUlNDX0NBQ0hFX1dSQVBQRVJfQUxJQVM6IG51bGwsXG4gICAgUlNDX0RZTkFNSUNfSU1QT1JUX1dSQVBQRVJfQUxJQVM6IG51bGwsXG4gICAgUlNDX01PRF9SRUZfUFJPWFlfQUxJQVM6IG51bGwsXG4gICAgUlNDX1BSRUZFVENIX1NVRkZJWDogbnVsbCxcbiAgICBSU0NfU0VHTUVOVFNfRElSX1NVRkZJWDogbnVsbCxcbiAgICBSU0NfU0VHTUVOVF9TVUZGSVg6IG51bGwsXG4gICAgUlNDX1NVRkZJWDogbnVsbCxcbiAgICBTRVJWRVJfUFJPUFNfRVhQT1JUX0VSUk9SOiBudWxsLFxuICAgIFNFUlZFUl9QUk9QU19HRVRfSU5JVF9QUk9QU19DT05GTElDVDogbnVsbCxcbiAgICBTRVJWRVJfUFJPUFNfU1NHX0NPTkZMSUNUOiBudWxsLFxuICAgIFNFUlZFUl9SVU5USU1FOiBudWxsLFxuICAgIFNTR19GQUxMQkFDS19FWFBPUlRfRVJST1I6IG51bGwsXG4gICAgU1NHX0dFVF9JTklUSUFMX1BST1BTX0NPTkZMSUNUOiBudWxsLFxuICAgIFNUQVRJQ19TVEFUVVNfUEFHRV9HRVRfSU5JVElBTF9QUk9QU19FUlJPUjogbnVsbCxcbiAgICBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRV9IRUFERVI6IG51bGwsXG4gICAgVU5TVEFCTEVfUkVWQUxJREFURV9SRU5BTUVfRVJST1I6IG51bGwsXG4gICAgV0VCUEFDS19MQVlFUlM6IG51bGwsXG4gICAgV0VCUEFDS19SRVNPVVJDRV9RVUVSSUVTOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIEFDVElPTl9TVUZGSVg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQUNUSU9OX1NVRkZJWDtcbiAgICB9LFxuICAgIEFQUF9ESVJfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQVBQX0RJUl9BTElBUztcbiAgICB9LFxuICAgIENBQ0hFX09ORV9ZRUFSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENBQ0hFX09ORV9ZRUFSO1xuICAgIH0sXG4gICAgRE9UX05FWFRfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRE9UX05FWFRfQUxJQVM7XG4gICAgfSxcbiAgICBFU0xJTlRfREVGQVVMVF9ESVJTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEVTTElOVF9ERUZBVUxUX0RJUlM7XG4gICAgfSxcbiAgICBHU1BfTk9fUkVUVVJORURfVkFMVUU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gR1NQX05PX1JFVFVSTkVEX1ZBTFVFO1xuICAgIH0sXG4gICAgR1NTUF9DT01QT05FTlRfTUVNQkVSX0VSUk9SOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEdTU1BfQ09NUE9ORU5UX01FTUJFUl9FUlJPUjtcbiAgICB9LFxuICAgIEdTU1BfTk9fUkVUVVJORURfVkFMVUU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gR1NTUF9OT19SRVRVUk5FRF9WQUxVRTtcbiAgICB9LFxuICAgIEhUTUxfQ09OVEVOVF9UWVBFX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBIVE1MX0NPTlRFTlRfVFlQRV9IRUFERVI7XG4gICAgfSxcbiAgICBJTkZJTklURV9DQUNIRTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBJTkZJTklURV9DQUNIRTtcbiAgICB9LFxuICAgIElOU1RSVU1FTlRBVElPTl9IT09LX0ZJTEVOQU1FOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIElOU1RSVU1FTlRBVElPTl9IT09LX0ZJTEVOQU1FO1xuICAgIH0sXG4gICAgSlNPTl9DT05URU5UX1RZUEVfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEpTT05fQ09OVEVOVF9UWVBFX0hFQURFUjtcbiAgICB9LFxuICAgIE1BVENIRURfUEFUSF9IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTUFUQ0hFRF9QQVRIX0hFQURFUjtcbiAgICB9LFxuICAgIE1JRERMRVdBUkVfRklMRU5BTUU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTUlERExFV0FSRV9GSUxFTkFNRTtcbiAgICB9LFxuICAgIE1JRERMRVdBUkVfTE9DQVRJT05fUkVHRVhQOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1JRERMRVdBUkVfTE9DQVRJT05fUkVHRVhQO1xuICAgIH0sXG4gICAgTkVYVF9CT0RZX1NVRkZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0JPRFlfU1VGRklYO1xuICAgIH0sXG4gICAgTkVYVF9DQUNIRV9JTVBMSUNJVF9UQUdfSUQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9DQUNIRV9JTVBMSUNJVF9UQUdfSUQ7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1JFVkFMSURBVEVEX1RBR1NfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfQ0FDSEVfUkVWQUxJREFURURfVEFHU19IRUFERVI7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1JFVkFMSURBVEVfVEFHX1RPS0VOX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0NBQ0hFX1JFVkFMSURBVEVfVEFHX1RPS0VOX0hFQURFUjtcbiAgICB9LFxuICAgIE5FWFRfQ0FDSEVfU09GVF9UQUdfTUFYX0xFTkdUSDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0NBQ0hFX1NPRlRfVEFHX01BWF9MRU5HVEg7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1RBR1NfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfQ0FDSEVfVEFHU19IRUFERVI7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1RBR19NQVhfSVRFTVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9DQUNIRV9UQUdfTUFYX0lURU1TO1xuICAgIH0sXG4gICAgTkVYVF9DQUNIRV9UQUdfTUFYX0xFTkdUSDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0NBQ0hFX1RBR19NQVhfTEVOR1RIO1xuICAgIH0sXG4gICAgTkVYVF9EQVRBX1NVRkZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0RBVEFfU1VGRklYO1xuICAgIH0sXG4gICAgTkVYVF9JTlRFUkNFUFRJT05fTUFSS0VSX1BSRUZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0lOVEVSQ0VQVElPTl9NQVJLRVJfUFJFRklYO1xuICAgIH0sXG4gICAgTkVYVF9NRVRBX1NVRkZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX01FVEFfU1VGRklYO1xuICAgIH0sXG4gICAgTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVg7XG4gICAgfSxcbiAgICBORVhUX1JFU1VNRV9IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9SRVNVTUVfSEVBREVSO1xuICAgIH0sXG4gICAgTk9OX1NUQU5EQVJEX05PREVfRU5WOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5PTl9TVEFOREFSRF9OT0RFX0VOVjtcbiAgICB9LFxuICAgIFBBR0VTX0RJUl9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQQUdFU19ESVJfQUxJQVM7XG4gICAgfSxcbiAgICBQUkVSRU5ERVJfUkVWQUxJREFURV9IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUFJFUkVOREVSX1JFVkFMSURBVEVfSEVBREVSO1xuICAgIH0sXG4gICAgUFJFUkVOREVSX1JFVkFMSURBVEVfT05MWV9HRU5FUkFURURfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBSRVJFTkRFUl9SRVZBTElEQVRFX09OTFlfR0VORVJBVEVEX0hFQURFUjtcbiAgICB9LFxuICAgIFBVQkxJQ19ESVJfTUlERExFV0FSRV9DT05GTElDVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQVUJMSUNfRElSX01JRERMRVdBUkVfQ09ORkxJQ1Q7XG4gICAgfSxcbiAgICBST09UX0RJUl9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBST09UX0RJUl9BTElBUztcbiAgICB9LFxuICAgIFJTQ19BQ1RJT05fQ0xJRU5UX1dSQVBQRVJfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUlNDX0FDVElPTl9DTElFTlRfV1JBUFBFUl9BTElBUztcbiAgICB9LFxuICAgIFJTQ19BQ1RJT05fRU5DUllQVElPTl9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfQUNUSU9OX0VOQ1JZUFRJT05fQUxJQVM7XG4gICAgfSxcbiAgICBSU0NfQUNUSU9OX1BST1hZX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19BQ1RJT05fUFJPWFlfQUxJQVM7XG4gICAgfSxcbiAgICBSU0NfQUNUSU9OX1ZBTElEQVRFX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19BQ1RJT05fVkFMSURBVEVfQUxJQVM7XG4gICAgfSxcbiAgICBSU0NfQ0FDSEVfV1JBUFBFUl9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfQ0FDSEVfV1JBUFBFUl9BTElBUztcbiAgICB9LFxuICAgIFJTQ19EWU5BTUlDX0lNUE9SVF9XUkFQUEVSX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19EWU5BTUlDX0lNUE9SVF9XUkFQUEVSX0FMSUFTO1xuICAgIH0sXG4gICAgUlNDX01PRF9SRUZfUFJPWFlfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUlNDX01PRF9SRUZfUFJPWFlfQUxJQVM7XG4gICAgfSxcbiAgICBSU0NfUFJFRkVUQ0hfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19QUkVGRVRDSF9TVUZGSVg7XG4gICAgfSxcbiAgICBSU0NfU0VHTUVOVFNfRElSX1NVRkZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfU0VHTUVOVFNfRElSX1NVRkZJWDtcbiAgICB9LFxuICAgIFJTQ19TRUdNRU5UX1NVRkZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfU0VHTUVOVF9TVUZGSVg7XG4gICAgfSxcbiAgICBSU0NfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19TVUZGSVg7XG4gICAgfSxcbiAgICBTRVJWRVJfUFJPUFNfRVhQT1JUX0VSUk9SOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNFUlZFUl9QUk9QU19FWFBPUlRfRVJST1I7XG4gICAgfSxcbiAgICBTRVJWRVJfUFJPUFNfR0VUX0lOSVRfUFJPUFNfQ09ORkxJQ1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU0VSVkVSX1BST1BTX0dFVF9JTklUX1BST1BTX0NPTkZMSUNUO1xuICAgIH0sXG4gICAgU0VSVkVSX1BST1BTX1NTR19DT05GTElDVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTRVJWRVJfUFJPUFNfU1NHX0NPTkZMSUNUO1xuICAgIH0sXG4gICAgU0VSVkVSX1JVTlRJTUU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU0VSVkVSX1JVTlRJTUU7XG4gICAgfSxcbiAgICBTU0dfRkFMTEJBQ0tfRVhQT1JUX0VSUk9SOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNTR19GQUxMQkFDS19FWFBPUlRfRVJST1I7XG4gICAgfSxcbiAgICBTU0dfR0VUX0lOSVRJQUxfUFJPUFNfQ09ORkxJQ1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1NHX0dFVF9JTklUSUFMX1BST1BTX0NPTkZMSUNUO1xuICAgIH0sXG4gICAgU1RBVElDX1NUQVRVU19QQUdFX0dFVF9JTklUSUFMX1BST1BTX0VSUk9SOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRJQ19TVEFUVVNfUEFHRV9HRVRfSU5JVElBTF9QUk9QU19FUlJPUjtcbiAgICB9LFxuICAgIFRFWFRfUExBSU5fQ09OVEVOVF9UWVBFX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRV9IRUFERVI7XG4gICAgfSxcbiAgICBVTlNUQUJMRV9SRVZBTElEQVRFX1JFTkFNRV9FUlJPUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBVTlNUQUJMRV9SRVZBTElEQVRFX1JFTkFNRV9FUlJPUjtcbiAgICB9LFxuICAgIFdFQlBBQ0tfTEFZRVJTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFdFQlBBQ0tfTEFZRVJTO1xuICAgIH0sXG4gICAgV0VCUEFDS19SRVNPVVJDRV9RVUVSSUVTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFdFQlBBQ0tfUkVTT1VSQ0VfUVVFUklFUztcbiAgICB9XG59KTtcbmNvbnN0IFRFWFRfUExBSU5fQ09OVEVOVF9UWVBFX0hFQURFUiA9ICd0ZXh0L3BsYWluJztcbmNvbnN0IEhUTUxfQ09OVEVOVF9UWVBFX0hFQURFUiA9ICd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnO1xuY29uc3QgSlNPTl9DT05URU5UX1RZUEVfSEVBREVSID0gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnO1xuY29uc3QgTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVggPSAnbnh0UCc7XG5jb25zdCBORVhUX0lOVEVSQ0VQVElPTl9NQVJLRVJfUFJFRklYID0gJ254dEknO1xuY29uc3QgTUFUQ0hFRF9QQVRIX0hFQURFUiA9ICd4LW1hdGNoZWQtcGF0aCc7XG5jb25zdCBQUkVSRU5ERVJfUkVWQUxJREFURV9IRUFERVIgPSAneC1wcmVyZW5kZXItcmV2YWxpZGF0ZSc7XG5jb25zdCBQUkVSRU5ERVJfUkVWQUxJREFURV9PTkxZX0dFTkVSQVRFRF9IRUFERVIgPSAneC1wcmVyZW5kZXItcmV2YWxpZGF0ZS1pZi1nZW5lcmF0ZWQnO1xuY29uc3QgUlNDX1BSRUZFVENIX1NVRkZJWCA9ICcucHJlZmV0Y2gucnNjJztcbmNvbnN0IFJTQ19TRUdNRU5UU19ESVJfU1VGRklYID0gJy5zZWdtZW50cyc7XG5jb25zdCBSU0NfU0VHTUVOVF9TVUZGSVggPSAnLnNlZ21lbnQucnNjJztcbmNvbnN0IFJTQ19TVUZGSVggPSAnLnJzYyc7XG5jb25zdCBBQ1RJT05fU1VGRklYID0gJy5hY3Rpb24nO1xuY29uc3QgTkVYVF9EQVRBX1NVRkZJWCA9ICcuanNvbic7XG5jb25zdCBORVhUX01FVEFfU1VGRklYID0gJy5tZXRhJztcbmNvbnN0IE5FWFRfQk9EWV9TVUZGSVggPSAnLmJvZHknO1xuY29uc3QgTkVYVF9DQUNIRV9UQUdTX0hFQURFUiA9ICd4LW5leHQtY2FjaGUtdGFncyc7XG5jb25zdCBORVhUX0NBQ0hFX1JFVkFMSURBVEVEX1RBR1NfSEVBREVSID0gJ3gtbmV4dC1yZXZhbGlkYXRlZC10YWdzJztcbmNvbnN0IE5FWFRfQ0FDSEVfUkVWQUxJREFURV9UQUdfVE9LRU5fSEVBREVSID0gJ3gtbmV4dC1yZXZhbGlkYXRlLXRhZy10b2tlbic7XG5jb25zdCBORVhUX1JFU1VNRV9IRUFERVIgPSAnbmV4dC1yZXN1bWUnO1xuY29uc3QgTkVYVF9DQUNIRV9UQUdfTUFYX0lURU1TID0gMTI4O1xuY29uc3QgTkVYVF9DQUNIRV9UQUdfTUFYX0xFTkdUSCA9IDI1NjtcbmNvbnN0IE5FWFRfQ0FDSEVfU09GVF9UQUdfTUFYX0xFTkdUSCA9IDEwMjQ7XG5jb25zdCBORVhUX0NBQ0hFX0lNUExJQ0lUX1RBR19JRCA9ICdfTl9UXyc7XG5jb25zdCBDQUNIRV9PTkVfWUVBUiA9IDMxNTM2MDAwO1xuY29uc3QgSU5GSU5JVEVfQ0FDSEUgPSAweGZmZmZmZmZlO1xuY29uc3QgTUlERExFV0FSRV9GSUxFTkFNRSA9ICdtaWRkbGV3YXJlJztcbmNvbnN0IE1JRERMRVdBUkVfTE9DQVRJT05fUkVHRVhQID0gYCg/OnNyYy8pPyR7TUlERExFV0FSRV9GSUxFTkFNRX1gO1xuY29uc3QgSU5TVFJVTUVOVEFUSU9OX0hPT0tfRklMRU5BTUUgPSAnaW5zdHJ1bWVudGF0aW9uJztcbmNvbnN0IFBBR0VTX0RJUl9BTElBUyA9ICdwcml2YXRlLW5leHQtcGFnZXMnO1xuY29uc3QgRE9UX05FWFRfQUxJQVMgPSAncHJpdmF0ZS1kb3QtbmV4dCc7XG5jb25zdCBST09UX0RJUl9BTElBUyA9ICdwcml2YXRlLW5leHQtcm9vdC1kaXInO1xuY29uc3QgQVBQX0RJUl9BTElBUyA9ICdwcml2YXRlLW5leHQtYXBwLWRpcic7XG5jb25zdCBSU0NfTU9EX1JFRl9QUk9YWV9BTElBUyA9ICdwcml2YXRlLW5leHQtcnNjLW1vZC1yZWYtcHJveHknO1xuY29uc3QgUlNDX0FDVElPTl9WQUxJREFURV9BTElBUyA9ICdwcml2YXRlLW5leHQtcnNjLWFjdGlvbi12YWxpZGF0ZSc7XG5jb25zdCBSU0NfQUNUSU9OX1BST1hZX0FMSUFTID0gJ3ByaXZhdGUtbmV4dC1yc2Mtc2VydmVyLXJlZmVyZW5jZSc7XG5jb25zdCBSU0NfQ0FDSEVfV1JBUFBFUl9BTElBUyA9ICdwcml2YXRlLW5leHQtcnNjLWNhY2hlLXdyYXBwZXInO1xuY29uc3QgUlNDX0RZTkFNSUNfSU1QT1JUX1dSQVBQRVJfQUxJQVMgPSAncHJpdmF0ZS1uZXh0LXJzYy10cmFjay1keW5hbWljLWltcG9ydCc7XG5jb25zdCBSU0NfQUNUSU9OX0VOQ1JZUFRJT05fQUxJQVMgPSAncHJpdmF0ZS1uZXh0LXJzYy1hY3Rpb24tZW5jcnlwdGlvbic7XG5jb25zdCBSU0NfQUNUSU9OX0NMSUVOVF9XUkFQUEVSX0FMSUFTID0gJ3ByaXZhdGUtbmV4dC1yc2MtYWN0aW9uLWNsaWVudC13cmFwcGVyJztcbmNvbnN0IFBVQkxJQ19ESVJfTUlERExFV0FSRV9DT05GTElDVCA9IGBZb3UgY2FuIG5vdCBoYXZlIGEgJ19uZXh0JyBmb2xkZXIgaW5zaWRlIG9mIHlvdXIgcHVibGljIGZvbGRlci4gVGhpcyBjb25mbGljdHMgd2l0aCB0aGUgaW50ZXJuYWwgJy9fbmV4dCcgcm91dGUuIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3B1YmxpYy1uZXh0LWZvbGRlci1jb25mbGljdGA7XG5jb25zdCBTU0dfR0VUX0lOSVRJQUxfUFJPUFNfQ09ORkxJQ1QgPSBgWW91IGNhbiBub3QgdXNlIGdldEluaXRpYWxQcm9wcyB3aXRoIGdldFN0YXRpY1Byb3BzLiBUbyB1c2UgU1NHLCBwbGVhc2UgcmVtb3ZlIHlvdXIgZ2V0SW5pdGlhbFByb3BzYDtcbmNvbnN0IFNFUlZFUl9QUk9QU19HRVRfSU5JVF9QUk9QU19DT05GTElDVCA9IGBZb3UgY2FuIG5vdCB1c2UgZ2V0SW5pdGlhbFByb3BzIHdpdGggZ2V0U2VydmVyU2lkZVByb3BzLiBQbGVhc2UgcmVtb3ZlIGdldEluaXRpYWxQcm9wcy5gO1xuY29uc3QgU0VSVkVSX1BST1BTX1NTR19DT05GTElDVCA9IGBZb3UgY2FuIG5vdCB1c2UgZ2V0U3RhdGljUHJvcHMgb3IgZ2V0U3RhdGljUGF0aHMgd2l0aCBnZXRTZXJ2ZXJTaWRlUHJvcHMuIFRvIHVzZSBTU0csIHBsZWFzZSByZW1vdmUgZ2V0U2VydmVyU2lkZVByb3BzYDtcbmNvbnN0IFNUQVRJQ19TVEFUVVNfUEFHRV9HRVRfSU5JVElBTF9QUk9QU19FUlJPUiA9IGBjYW4gbm90IGhhdmUgZ2V0SW5pdGlhbFByb3BzL2dldFNlcnZlclNpZGVQcm9wcywgaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvNDA0LWdldC1pbml0aWFsLXByb3BzYDtcbmNvbnN0IFNFUlZFUl9QUk9QU19FWFBPUlRfRVJST1IgPSBgcGFnZXMgd2l0aCBcXGBnZXRTZXJ2ZXJTaWRlUHJvcHNcXGAgY2FuIG5vdCBiZSBleHBvcnRlZC4gU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9nc3NwLWV4cG9ydGA7XG5jb25zdCBHU1BfTk9fUkVUVVJORURfVkFMVUUgPSAnWW91ciBgZ2V0U3RhdGljUHJvcHNgIGZ1bmN0aW9uIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdC4gRGlkIHlvdSBmb3JnZXQgdG8gYWRkIGEgYHJldHVybmA/JztcbmNvbnN0IEdTU1BfTk9fUkVUVVJORURfVkFMVUUgPSAnWW91ciBgZ2V0U2VydmVyU2lkZVByb3BzYCBmdW5jdGlvbiBkaWQgbm90IHJldHVybiBhbiBvYmplY3QuIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCBhIGByZXR1cm5gPyc7XG5jb25zdCBVTlNUQUJMRV9SRVZBTElEQVRFX1JFTkFNRV9FUlJPUiA9ICdUaGUgYHVuc3RhYmxlX3JldmFsaWRhdGVgIHByb3BlcnR5IGlzIGF2YWlsYWJsZSBmb3IgZ2VuZXJhbCB1c2UuXFxuJyArICdQbGVhc2UgdXNlIGByZXZhbGlkYXRlYCBpbnN0ZWFkLic7XG5jb25zdCBHU1NQX0NPTVBPTkVOVF9NRU1CRVJfRVJST1IgPSBgY2FuIG5vdCBiZSBhdHRhY2hlZCB0byBhIHBhZ2UncyBjb21wb25lbnQgYW5kIG11c3QgYmUgZXhwb3J0ZWQgZnJvbSB0aGUgcGFnZS4gU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9nc3NwLWNvbXBvbmVudC1tZW1iZXJgO1xuY29uc3QgTk9OX1NUQU5EQVJEX05PREVfRU5WID0gYFlvdSBhcmUgdXNpbmcgYSBub24tc3RhbmRhcmQgXCJOT0RFX0VOVlwiIHZhbHVlIGluIHlvdXIgZW52aXJvbm1lbnQuIFRoaXMgY3JlYXRlcyBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIHByb2plY3QgYW5kIGlzIHN0cm9uZ2x5IGFkdmlzZWQgYWdhaW5zdC4gUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9ub24tc3RhbmRhcmQtbm9kZS1lbnZgO1xuY29uc3QgU1NHX0ZBTExCQUNLX0VYUE9SVF9FUlJPUiA9IGBQYWdlcyB3aXRoIFxcYGZhbGxiYWNrXFxgIGVuYWJsZWQgaW4gXFxgZ2V0U3RhdGljUGF0aHNcXGAgY2FuIG5vdCBiZSBleHBvcnRlZC4gU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9zc2ctZmFsbGJhY2stdHJ1ZS1leHBvcnRgO1xuY29uc3QgRVNMSU5UX0RFRkFVTFRfRElSUyA9IFtcbiAgICAnYXBwJyxcbiAgICAncGFnZXMnLFxuICAgICdjb21wb25lbnRzJyxcbiAgICAnbGliJyxcbiAgICAnc3JjJ1xuXTtcbmNvbnN0IFNFUlZFUl9SVU5USU1FID0ge1xuICAgIGVkZ2U6ICdlZGdlJyxcbiAgICBleHBlcmltZW50YWxFZGdlOiAnZXhwZXJpbWVudGFsLWVkZ2UnLFxuICAgIG5vZGVqczogJ25vZGVqcydcbn07XG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgd2VicGFjayBsYXllcnMuIFRoZXNlIGxheWVycyBhcmUgdGhlIHByaW1pdGl2ZXMgZm9yIHRoZVxuICogd2VicGFjayBjaHVua3MuXG4gKi8gY29uc3QgV0VCUEFDS19MQVlFUlNfTkFNRVMgPSB7XG4gICAgLyoqXG4gICAqIFRoZSBsYXllciBmb3IgdGhlIHNoYXJlZCBjb2RlIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyIGJ1bmRsZXMuXG4gICAqLyBzaGFyZWQ6ICdzaGFyZWQnLFxuICAgIC8qKlxuICAgKiBUaGUgbGF5ZXIgZm9yIHNlcnZlci1vbmx5IHJ1bnRpbWUgYW5kIHBpY2tpbmcgdXAgYHJlYWN0LXNlcnZlcmAgZXhwb3J0IGNvbmRpdGlvbnMuXG4gICAqIEluY2x1ZGluZyBhcHAgcm91dGVyIFJTQyBwYWdlcyBhbmQgYXBwIHJvdXRlciBjdXN0b20gcm91dGVzIGFuZCBtZXRhZGF0YSByb3V0ZXMuXG4gICAqLyByZWFjdFNlcnZlckNvbXBvbmVudHM6ICdyc2MnLFxuICAgIC8qKlxuICAgKiBTZXJ2ZXIgU2lkZSBSZW5kZXJpbmcgbGF5ZXIgZm9yIGFwcCAoc3NyKS5cbiAgICovIHNlcnZlclNpZGVSZW5kZXJpbmc6ICdzc3InLFxuICAgIC8qKlxuICAgKiBUaGUgYnJvd3NlciBjbGllbnQgYnVuZGxlIGxheWVyIGZvciBhY3Rpb25zLlxuICAgKi8gYWN0aW9uQnJvd3NlcjogJ2FjdGlvbi1icm93c2VyJyxcbiAgICAvKipcbiAgICogVGhlIE5vZGUuanMgYnVuZGxlIGxheWVyIGZvciB0aGUgQVBJIHJvdXRlcy5cbiAgICovIGFwaU5vZGU6ICdhcGktbm9kZScsXG4gICAgLyoqXG4gICAqIFRoZSBFZGdlIExpdGUgYnVuZGxlIGxheWVyIGZvciB0aGUgQVBJIHJvdXRlcy5cbiAgICovIGFwaUVkZ2U6ICdhcGktZWRnZScsXG4gICAgLyoqXG4gICAqIFRoZSBsYXllciBmb3IgdGhlIG1pZGRsZXdhcmUgY29kZS5cbiAgICovIG1pZGRsZXdhcmU6ICdtaWRkbGV3YXJlJyxcbiAgICAvKipcbiAgICogVGhlIGxheWVyIGZvciB0aGUgaW5zdHJ1bWVudGF0aW9uIGhvb2tzLlxuICAgKi8gaW5zdHJ1bWVudDogJ2luc3RydW1lbnQnLFxuICAgIC8qKlxuICAgKiBUaGUgbGF5ZXIgZm9yIGFzc2V0cyBvbiB0aGUgZWRnZS5cbiAgICovIGVkZ2VBc3NldDogJ2VkZ2UtYXNzZXQnLFxuICAgIC8qKlxuICAgKiBUaGUgYnJvd3NlciBjbGllbnQgYnVuZGxlIGxheWVyIGZvciBBcHAgZGlyZWN0b3J5LlxuICAgKi8gYXBwUGFnZXNCcm93c2VyOiAnYXBwLXBhZ2VzLWJyb3dzZXInLFxuICAgIC8qKlxuICAgKiBUaGUgYnJvd3NlciBjbGllbnQgYnVuZGxlIGxheWVyIGZvciBQYWdlcyBkaXJlY3RvcnkuXG4gICAqLyBwYWdlc0RpckJyb3dzZXI6ICdwYWdlcy1kaXItYnJvd3NlcicsXG4gICAgLyoqXG4gICAqIFRoZSBFZGdlIExpdGUgYnVuZGxlIGxheWVyIGZvciBQYWdlcyBkaXJlY3RvcnkuXG4gICAqLyBwYWdlc0RpckVkZ2U6ICdwYWdlcy1kaXItZWRnZScsXG4gICAgLyoqXG4gICAqIFRoZSBOb2RlLmpzIGJ1bmRsZSBsYXllciBmb3IgUGFnZXMgZGlyZWN0b3J5LlxuICAgKi8gcGFnZXNEaXJOb2RlOiAncGFnZXMtZGlyLW5vZGUnXG59O1xuY29uc3QgV0VCUEFDS19MQVlFUlMgPSB7XG4gICAgLi4uV0VCUEFDS19MQVlFUlNfTkFNRVMsXG4gICAgR1JPVVA6IHtcbiAgICAgICAgYnVpbHRpblJlYWN0OiBbXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5yZWFjdFNlcnZlckNvbXBvbmVudHMsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hY3Rpb25Ccm93c2VyXG4gICAgICAgIF0sXG4gICAgICAgIHNlcnZlck9ubHk6IFtcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLnJlYWN0U2VydmVyQ29tcG9uZW50cyxcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFjdGlvbkJyb3dzZXIsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5pbnN0cnVtZW50LFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMubWlkZGxld2FyZVxuICAgICAgICBdLFxuICAgICAgICBuZXV0cmFsVGFyZ2V0OiBbXG4gICAgICAgICAgICAvLyBwYWdlcyBhcGlcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFwaU5vZGUsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hcGlFZGdlXG4gICAgICAgIF0sXG4gICAgICAgIGNsaWVudE9ubHk6IFtcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLnNlcnZlclNpZGVSZW5kZXJpbmcsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hcHBQYWdlc0Jyb3dzZXJcbiAgICAgICAgXSxcbiAgICAgICAgYnVuZGxlZDogW1xuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMucmVhY3RTZXJ2ZXJDb21wb25lbnRzLFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMuYWN0aW9uQnJvd3NlcixcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLnNlcnZlclNpZGVSZW5kZXJpbmcsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hcHBQYWdlc0Jyb3dzZXIsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5zaGFyZWQsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5pbnN0cnVtZW50LFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMubWlkZGxld2FyZVxuICAgICAgICBdLFxuICAgICAgICBhcHBQYWdlczogW1xuICAgICAgICAgICAgLy8gYXBwIHJvdXRlciBwYWdlcyBhbmQgbGF5b3V0c1xuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMucmVhY3RTZXJ2ZXJDb21wb25lbnRzLFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMuc2VydmVyU2lkZVJlbmRlcmluZyxcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFwcFBhZ2VzQnJvd3NlcixcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFjdGlvbkJyb3dzZXJcbiAgICAgICAgXVxuICAgIH1cbn07XG5jb25zdCBXRUJQQUNLX1JFU09VUkNFX1FVRVJJRVMgPSB7XG4gICAgZWRnZVNTUkVudHJ5OiAnX19uZXh0X2VkZ2Vfc3NyX2VudHJ5X18nLFxuICAgIG1ldGFkYXRhOiAnX19uZXh0X21ldGFkYXRhX18nLFxuICAgIG1ldGFkYXRhUm91dGU6ICdfX25leHRfbWV0YWRhdGFfcm91dGVfXycsXG4gICAgbWV0YWRhdGFJbWFnZU1ldGE6ICdfX25leHRfbWV0YWRhdGFfaW1hZ2VfbWV0YV9fJ1xufTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/constants.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-api-route.js":
/*!*******************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-api-route.js ***!
\*******************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isAPIRoute\", ({\n enumerable: true,\n get: function() {\n return isAPIRoute;\n }\n}));\nfunction isAPIRoute(value) {\n return value === '/api' || Boolean(value == null ? void 0 : value.startsWith('/api/'));\n}\n\n//# sourceMappingURL=is-api-route.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL2lzLWFwaS1yb3V0ZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLDhDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS41LjRfcmVhY3QtZG9tQDE5LjEuMF9yZWFjdEAxOS4xLjBfX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9pcy1hcGktcm91dGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FQSVJvdXRlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0FQSVJvdXRlO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gaXNBUElSb3V0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJy9hcGknIHx8IEJvb2xlYW4odmFsdWUgPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlLnN0YXJ0c1dpdGgoJy9hcGkvJykpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1hcGktcm91dGUuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-api-route.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-error.js":
/*!***************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-error.js ***!
\***************************************************************************************************************************/
/***/ ((__unused_webpack_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 /**\n * Checks whether the given value is a NextError.\n * This can be used to print a more detailed error message with properties like `code` & `digest`.\n */ default: function() {\n return isError;\n },\n getProperError: function() {\n return getProperError;\n }\n});\nconst _isplainobject = __webpack_require__(/*! ../shared/lib/is-plain-object */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/is-plain-object.js\");\nfunction isError(err) {\n return typeof err === 'object' && err !== null && 'name' in err && 'message' in err;\n}\nfunction safeStringify(obj) {\n const seen = new WeakSet();\n return JSON.stringify(obj, (_key, value)=>{\n // If value is an object and already seen, replace with \"[Circular]\"\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n }\n return value;\n });\n}\nfunction getProperError(err) {\n if (isError(err)) {\n return err;\n }\n if (true) {\n // provide better error for case where `throw undefined`\n // is called in development\n if (typeof err === 'undefined') {\n return Object.defineProperty(new Error('An undefined error was thrown, ' + 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'), \"__NEXT_ERROR_CODE\", {\n value: \"E98\",\n enumerable: false,\n configurable: true\n });\n }\n if (err === null) {\n return Object.defineProperty(new Error('A null error was thrown, ' + 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'), \"__NEXT_ERROR_CODE\", {\n value: \"E336\",\n enumerable: false,\n configurable: true\n });\n }\n }\n return Object.defineProperty(new Error((0, _isplainobject.isPlainObject)(err) ? safeStringify(err) : err + ''), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n}\n\n//# sourceMappingURL=is-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL2lzLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUdMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELHVCQUF1QixtQkFBTyxDQUFDLDRMQUErQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXNDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNS40X3JlYWN0LWRvbUAxOS4xLjBfcmVhY3RAMTkuMS4wX19yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvaXMtZXJyb3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBkZWZhdWx0OiBudWxsLFxuICAgIGdldFByb3BlckVycm9yOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIC8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGEgTmV4dEVycm9yLlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBwcmludCBhIG1vcmUgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZSB3aXRoIHByb3BlcnRpZXMgbGlrZSBgY29kZWAgJiBgZGlnZXN0YC5cbiAqLyBkZWZhdWx0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzRXJyb3I7XG4gICAgfSxcbiAgICBnZXRQcm9wZXJFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRQcm9wZXJFcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pc3BsYWlub2JqZWN0ID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvaXMtcGxhaW4tb2JqZWN0XCIpO1xuZnVuY3Rpb24gaXNFcnJvcihlcnIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGVyciA9PT0gJ29iamVjdCcgJiYgZXJyICE9PSBudWxsICYmICduYW1lJyBpbiBlcnIgJiYgJ21lc3NhZ2UnIGluIGVycjtcbn1cbmZ1bmN0aW9uIHNhZmVTdHJpbmdpZnkob2JqKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgKF9rZXksIHZhbHVlKT0+e1xuICAgICAgICAvLyBJZiB2YWx1ZSBpcyBhbiBvYmplY3QgYW5kIGFscmVhZHkgc2VlbiwgcmVwbGFjZSB3aXRoIFwiW0NpcmN1bGFyXVwiXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZXRQcm9wZXJFcnJvcihlcnIpIHtcbiAgICBpZiAoaXNFcnJvcihlcnIpKSB7XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICAvLyBwcm92aWRlIGJldHRlciBlcnJvciBmb3IgY2FzZSB3aGVyZSBgdGhyb3cgdW5kZWZpbmVkYFxuICAgICAgICAvLyBpcyBjYWxsZWQgaW4gZGV2ZWxvcG1lbnRcbiAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ldyBFcnJvcignQW4gdW5kZWZpbmVkIGVycm9yIHdhcyB0aHJvd24sICcgKyAnc2VlIGhlcmUgZm9yIG1vcmUgaW5mbzogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvdGhyZXctdW5kZWZpbmVkJyksIFwiX19ORVhUX0VSUk9SX0NPREVcIiwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBcIkU5OFwiLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXcgRXJyb3IoJ0EgbnVsbCBlcnJvciB3YXMgdGhyb3duLCAnICsgJ3NlZSBoZXJlIGZvciBtb3JlIGluZm86IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3RocmV3LXVuZGVmaW5lZCcpLCBcIl9fTkVYVF9FUlJPUl9DT0RFXCIsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCJFMzM2XCIsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ldyBFcnJvcigoMCwgX2lzcGxhaW5vYmplY3QuaXNQbGFpbk9iamVjdCkoZXJyKSA/IHNhZmVTdHJpbmdpZnkoZXJyKSA6IGVyciArICcnKSwgXCJfX05FWFRfRVJST1JfQ09ERVwiLCB7XG4gICAgICAgIHZhbHVlOiBcIkUzOTRcIixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1lcnJvci5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-error.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/require-instrumentation-client.js":
/*!*************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/require-instrumentation-client.js ***!
\*************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/**\n * This module imports the client instrumentation hook from the project root.\n *\n * The `private-next-instrumentation-client` module is automatically aliased to\n * the `instrumentation-client.ts` file in the project root by webpack or turbopack.\n */ \nif (true) {\n const measureName = 'Client Instrumentation Hook';\n const startTime = performance.now();\n // eslint-disable-next-line @next/internal/typechecked-require -- Not a module.\n module.exports = __webpack_require__(/*! private-next-instrumentation-client */ \"?32d9\");\n const endTime = performance.now();\n const duration = endTime - startTime;\n // Using 16ms threshold as it represents one frame (1000ms/60fps)\n // This helps identify if the instrumentation hook initialization\n // could potentially cause frame drops during development.\n const THRESHOLD = 16;\n if (duration > THRESHOLD) {\n console.log(`[${measureName}] Slow execution detected: ${duration.toFixed(0)}ms (Note: Code download overhead is not included in this measurement)`);\n }\n} else {}\n\n//# sourceMappingURL=require-instrumentation-client.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL3JlcXVpcmUtaW5zdHJ1bWVudGF0aW9uLWNsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBaUI7QUFDakIsSUFBSSxJQUFzQztBQUMxQztBQUNBO0FBQ0E7QUFDQSxJQUFJLHdGQUErRDtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixZQUFZLDZCQUE2QixvQkFBb0I7QUFDckY7QUFDQSxFQUFFLEtBQUssRUFHTjs7QUFFRCIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS41LjRfcmVhY3QtZG9tQDE5LjEuMF9yZWFjdEAxOS4xLjBfX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9yZXF1aXJlLWluc3RydW1lbnRhdGlvbi1jbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIG1vZHVsZSBpbXBvcnRzIHRoZSBjbGllbnQgaW5zdHJ1bWVudGF0aW9uIGhvb2sgZnJvbSB0aGUgcHJvamVjdCByb290LlxuICpcbiAqIFRoZSBgcHJpdmF0ZS1uZXh0LWluc3RydW1lbnRhdGlvbi1jbGllbnRgIG1vZHVsZSBpcyBhdXRvbWF0aWNhbGx5IGFsaWFzZWQgdG9cbiAqIHRoZSBgaW5zdHJ1bWVudGF0aW9uLWNsaWVudC50c2AgZmlsZSBpbiB0aGUgcHJvamVjdCByb290IGJ5IHdlYnBhY2sgb3IgdHVyYm9wYWNrLlxuICovIFwidXNlIHN0cmljdFwiO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgY29uc3QgbWVhc3VyZU5hbWUgPSAnQ2xpZW50IEluc3RydW1lbnRhdGlvbiBIb29rJztcbiAgICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQG5leHQvaW50ZXJuYWwvdHlwZWNoZWNrZWQtcmVxdWlyZSAtLSBOb3QgYSBtb2R1bGUuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdwcml2YXRlLW5leHQtaW5zdHJ1bWVudGF0aW9uLWNsaWVudCcpO1xuICAgIGNvbnN0IGVuZFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XG4gICAgLy8gVXNpbmcgMTZtcyB0aHJlc2hvbGQgYXMgaXQgcmVwcmVzZW50cyBvbmUgZnJhbWUgKDEwMDBtcy82MGZwcylcbiAgICAvLyBUaGlzIGhlbHBzIGlkZW50aWZ5IGlmIHRoZSBpbnN0cnVtZW50YXRpb24gaG9vayBpbml0aWFsaXphdGlvblxuICAgIC8vIGNvdWxkIHBvdGVudGlhbGx5IGNhdXNlIGZyYW1lIGRyb3BzIGR1cmluZyBkZXZlbG9wbWVudC5cbiAgICBjb25zdCBUSFJFU0hPTEQgPSAxNjtcbiAgICBpZiAoZHVyYXRpb24gPiBUSFJFU0hPTEQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFske21lYXN1cmVOYW1lfV0gU2xvdyBleGVjdXRpb24gZGV0ZWN0ZWQ6ICR7ZHVyYXRpb24udG9GaXhlZCgwKX1tcyAoTm90ZTogQ29kZSBkb3dubG9hZCBvdmVyaGVhZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcyBtZWFzdXJlbWVudClgKTtcbiAgICB9XG59IGVsc2Uge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAbmV4dC9pbnRlcm5hbC90eXBlY2hlY2tlZC1yZXF1aXJlIC0tIE5vdCBhIG1vZHVsZS5cbiAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ3ByaXZhdGUtbmV4dC1pbnN0cnVtZW50YXRpb24tY2xpZW50Jyk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVpcmUtaW5zdHJ1bWVudGF0aW9uLWNsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/require-instrumentation-client.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/route-pattern-normalizer.js":
/*!*******************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/route-pattern-normalizer.js ***!
\*******************************************************************************************************************************************/
/***/ ((__unused_webpack_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 hasAdjacentParameterIssues: function() {\n return hasAdjacentParameterIssues;\n },\n normalizeAdjacentParameters: function() {\n return normalizeAdjacentParameters;\n },\n normalizeTokensForRegexp: function() {\n return normalizeTokensForRegexp;\n },\n stripParameterSeparators: function() {\n return stripParameterSeparators;\n }\n});\n/**\n * Route pattern normalization utilities for path-to-regexp compatibility.\n *\n * path-to-regexp 6.3.0+ introduced stricter validation that rejects certain\n * patterns commonly used in Next.js interception routes. This module provides\n * normalization functions to make Next.js route patterns compatible with the\n * updated library while preserving all functionality.\n */ /**\n * Internal separator used to normalize adjacent parameter patterns.\n * This unique marker is inserted between adjacent parameters and stripped out\n * during parameter extraction to avoid conflicts with real URL content.\n */ const PARAM_SEPARATOR = '_NEXTSEP_';\nfunction hasAdjacentParameterIssues(route) {\n if (typeof route !== 'string') return false;\n // Check for interception route markers followed immediately by parameters\n // Pattern: /(.):param, /(..):param, /(...):param, /(.)(.):param etc.\n // These patterns cause \"Must have text between two parameters\" errors\n if (/\\/\\(\\.{1,3}\\):[^/\\s]+/.test(route)) {\n return true;\n }\n // Check for basic adjacent parameters without separators\n // Pattern: :param1:param2 (but not :param* or other URL patterns)\n if (/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(route)) {\n return true;\n }\n return false;\n}\nfunction normalizeAdjacentParameters(route) {\n let normalized = route;\n // Handle interception route patterns: (.):param -> (.)_NEXTSEP_:param\n normalized = normalized.replace(/(\\([^)]*\\)):([^/\\s]+)/g, `$1${PARAM_SEPARATOR}:$2`);\n // Handle other adjacent parameter patterns: :param1:param2 -> :param1_NEXTSEP_:param2\n normalized = normalized.replace(/:([^:/\\s)]+)(?=:)/g, `:$1${PARAM_SEPARATOR}`);\n return normalized;\n}\nfunction normalizeTokensForRegexp(tokens) {\n return tokens.map((token)=>{\n // Token union type: Token = string | TokenObject\n // Literal path segments are strings, parameters/wildcards are objects\n if (typeof token === 'object' && token !== null && // Not all token objects have 'modifier' property (e.g., simple text tokens)\n 'modifier' in token && // Only repeating modifiers (* or +) cause the validation error\n // Other modifiers like '?' (optional) are fine\n (token.modifier === '*' || token.modifier === '+') && // Token objects can have different shapes depending on route pattern\n 'prefix' in token && 'suffix' in token && // Both prefix and suffix must be empty strings\n // This is what causes the validation error in path-to-regexp\n token.prefix === '' && token.suffix === '') {\n // Add minimal prefix to satisfy path-to-regexp validation\n // We use '/' as it's the most common path delimiter and won't break route matching\n // The prefix gets used in regex generation but doesn't affect parameter extraction\n return {\n ...token,\n prefix: '/'\n };\n }\n return token;\n });\n}\nfunction stripParameterSeparators(params) {\n const cleaned = {};\n for (const [key, value] of Object.entries(params)){\n if (typeof value === 'string') {\n // Remove the separator if it appears at the start of parameter values\n cleaned[key] = value.replace(new RegExp(`^${PARAM_SEPARATOR}`), '');\n } else if (Array.isArray(value)) {\n // Handle array parameters (from repeated route segments)\n cleaned[key] = value.map((item)=>typeof item === 'string' ? item.replace(new RegExp(`^${PARAM_SEPARATOR}`), '') : item);\n } else {\n cleaned[key] = value;\n }\n }\n return cleaned;\n}\n\n//# sourceMappingURL=route-pattern-normalizer.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL3JvdXRlLXBhdHRlcm4tbm9ybWFsaXplci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FLTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixJQUFJO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxnQkFBZ0I7QUFDbkY7QUFDQSxnRUFBZ0UsZ0JBQWdCO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxnQkFBZ0I7QUFDeEUsVUFBVTtBQUNWO0FBQ0Esb0dBQW9HLGdCQUFnQjtBQUNwSCxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS41LjRfcmVhY3QtZG9tQDE5LjEuMF9yZWFjdEAxOS4xLjBfX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9yb3V0ZS1wYXR0ZXJuLW5vcm1hbGl6ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBoYXNBZGphY2VudFBhcmFtZXRlcklzc3VlczogbnVsbCxcbiAgICBub3JtYWxpemVBZGphY2VudFBhcmFtZXRlcnM6IG51bGwsXG4gICAgbm9ybWFsaXplVG9rZW5zRm9yUmVnZXhwOiBudWxsLFxuICAgIHN0cmlwUGFyYW1ldGVyU2VwYXJhdG9yczogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBoYXNBZGphY2VudFBhcmFtZXRlcklzc3VlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBoYXNBZGphY2VudFBhcmFtZXRlcklzc3VlcztcbiAgICB9LFxuICAgIG5vcm1hbGl6ZUFkamFjZW50UGFyYW1ldGVyczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVBZGphY2VudFBhcmFtZXRlcnM7XG4gICAgfSxcbiAgICBub3JtYWxpemVUb2tlbnNGb3JSZWdleHA6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplVG9rZW5zRm9yUmVnZXhwO1xuICAgIH0sXG4gICAgc3RyaXBQYXJhbWV0ZXJTZXBhcmF0b3JzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN0cmlwUGFyYW1ldGVyU2VwYXJhdG9ycztcbiAgICB9XG59KTtcbi8qKlxuICogUm91dGUgcGF0dGVybiBub3JtYWxpemF0aW9uIHV0aWxpdGllcyBmb3IgcGF0aC10by1yZWdleHAgY29tcGF0aWJpbGl0eS5cbiAqXG4gKiBwYXRoLXRvLXJlZ2V4cCA2LjMuMCsgaW50cm9kdWNlZCBzdHJpY3RlciB2YWxpZGF0aW9uIHRoYXQgcmVqZWN0cyBjZXJ0YWluXG4gKiBwYXR0ZXJucyBjb21tb25seSB1c2VkIGluIE5leHQuanMgaW50ZXJjZXB0aW9uIHJvdXRlcy4gVGhpcyBtb2R1bGUgcHJvdmlkZXNcbiAqIG5vcm1hbGl6YXRpb24gZnVuY3Rpb25zIHRvIG1ha2UgTmV4dC5qcyByb3V0ZSBwYXR0ZXJucyBjb21wYXRpYmxlIHdpdGggdGhlXG4gKiB1cGRhdGVkIGxpYnJhcnkgd2hpbGUgcHJlc2VydmluZyBhbGwgZnVuY3Rpb25hbGl0eS5cbiAqLyAvKipcbiAqIEludGVybmFsIHNlcGFyYXRvciB1c2VkIHRvIG5vcm1hbGl6ZSBhZGphY2VudCBwYXJhbWV0ZXIgcGF0dGVybnMuXG4gKiBUaGlzIHVuaXF1ZSBtYXJrZXIgaXMgaW5zZXJ0ZWQgYmV0d2VlbiBhZGphY2VudCBwYXJhbWV0ZXJzIGFuZCBzdHJpcHBlZCBvdXRcbiAqIGR1cmluZyBwYXJhbWV0ZXIgZXh0cmFjdGlvbiB0byBhdm9pZCBjb25mbGljdHMgd2l0aCByZWFsIFVSTCBjb250ZW50LlxuICovIGNvbnN0IFBBUkFNX1NFUEFSQVRPUiA9ICdfTkVYVFNFUF8nO1xuZnVuY3Rpb24gaGFzQWRqYWNlbnRQYXJhbWV0ZXJJc3N1ZXMocm91dGUpIHtcbiAgICBpZiAodHlwZW9mIHJvdXRlICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgIC8vIENoZWNrIGZvciBpbnRlcmNlcHRpb24gcm91dGUgbWFya2VycyBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSBwYXJhbWV0ZXJzXG4gICAgLy8gUGF0dGVybjogLyguKTpwYXJhbSwgLyguLik6cGFyYW0sIC8oLi4uKTpwYXJhbSwgLyguKSguKTpwYXJhbSBldGMuXG4gICAgLy8gVGhlc2UgcGF0dGVybnMgY2F1c2UgXCJNdXN0IGhhdmUgdGV4dCBiZXR3ZWVuIHR3byBwYXJhbWV0ZXJzXCIgZXJyb3JzXG4gICAgaWYgKC9cXC9cXChcXC57MSwzfVxcKTpbXi9cXHNdKy8udGVzdChyb3V0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIENoZWNrIGZvciBiYXNpYyBhZGphY2VudCBwYXJhbWV0ZXJzIHdpdGhvdXQgc2VwYXJhdG9yc1xuICAgIC8vIFBhdHRlcm46IDpwYXJhbTE6cGFyYW0yIChidXQgbm90IDpwYXJhbSogb3Igb3RoZXIgVVJMIHBhdHRlcm5zKVxuICAgIGlmICgvOlthLXpBLVpfXVthLXpBLVowLTlfXSo6W2EtekEtWl9dW2EtekEtWjAtOV9dKi8udGVzdChyb3V0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFkamFjZW50UGFyYW1ldGVycyhyb3V0ZSkge1xuICAgIGxldCBub3JtYWxpemVkID0gcm91dGU7XG4gICAgLy8gSGFuZGxlIGludGVyY2VwdGlvbiByb3V0ZSBwYXR0ZXJuczogKC4pOnBhcmFtIC0+ICguKV9ORVhUU0VQXzpwYXJhbVxuICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnJlcGxhY2UoLyhcXChbXildKlxcKSk6KFteL1xcc10rKS9nLCBgJDEke1BBUkFNX1NFUEFSQVRPUn06JDJgKTtcbiAgICAvLyBIYW5kbGUgb3RoZXIgYWRqYWNlbnQgcGFyYW1ldGVyIHBhdHRlcm5zOiA6cGFyYW0xOnBhcmFtMiAtPiA6cGFyYW0xX05FWFRTRVBfOnBhcmFtMlxuICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnJlcGxhY2UoLzooW146L1xccyldKykoPz06KS9nLCBgOiQxJHtQQVJBTV9TRVBBUkFUT1J9YCk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5mdW5jdGlvbiBub3JtYWxpemVUb2tlbnNGb3JSZWdleHAodG9rZW5zKSB7XG4gICAgcmV0dXJuIHRva2Vucy5tYXAoKHRva2VuKT0+e1xuICAgICAgICAvLyBUb2tlbiB1bmlvbiB0eXBlOiBUb2tlbiA9IHN0cmluZyB8IFRva2VuT2JqZWN0XG4gICAgICAgIC8vIExpdGVyYWwgcGF0aCBzZWdtZW50cyBhcmUgc3RyaW5ncywgcGFyYW1ldGVycy93aWxkY2FyZHMgYXJlIG9iamVjdHNcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ29iamVjdCcgJiYgdG9rZW4gIT09IG51bGwgJiYgLy8gTm90IGFsbCB0b2tlbiBvYmplY3RzIGhhdmUgJ21vZGlmaWVyJyBwcm9wZXJ0eSAoZS5nLiwgc2ltcGxlIHRleHQgdG9rZW5zKVxuICAgICAgICAnbW9kaWZpZXInIGluIHRva2VuICYmIC8vIE9ubHkgcmVwZWF0aW5nIG1vZGlmaWVycyAoKiBvciArKSBjYXVzZSB0aGUgdmFsaWRhdGlvbiBlcnJvclxuICAgICAgICAvLyBPdGhlciBtb2RpZmllcnMgbGlrZSAnPycgKG9wdGlvbmFsKSBhcmUgZmluZVxuICAgICAgICAodG9rZW4ubW9kaWZpZXIgPT09ICcqJyB8fCB0b2tlbi5tb2RpZmllciA9PT0gJysnKSAmJiAvLyBUb2tlbiBvYmplY3RzIGNhbiBoYXZlIGRpZmZlcmVudCBzaGFwZXMgZGVwZW5kaW5nIG9uIHJvdXRlIHBhdHRlcm5cbiAgICAgICAgJ3ByZWZpeCcgaW4gdG9rZW4gJiYgJ3N1ZmZpeCcgaW4gdG9rZW4gJiYgLy8gQm90aCBwcmVmaXggYW5kIHN1ZmZpeCBtdXN0IGJlIGVtcHR5IHN0cmluZ3NcbiAgICAgICAgLy8gVGhpcyBpcyB3aGF0IGNhdXNlcyB0aGUgdmFsaWRhdGlvbiBlcnJvciBpbiBwYXRoLXRvLXJlZ2V4cFxuICAgICAgICB0b2tlbi5wcmVmaXggPT09ICcnICYmIHRva2VuLnN1ZmZpeCA9PT0gJycpIHtcbiAgICAgICAgICAgIC8vIEFkZCBtaW5pbWFsIHByZWZpeCB0byBzYXRpc2Z5IHBhdGgtdG8tcmVnZXhwIHZhbGlkYXRpb25cbiAgICAgICAgICAgIC8vIFdlIHVzZSAnLycgYXMgaXQncyB0aGUgbW9zdCBjb21tb24gcGF0aCBkZWxpbWl0ZXIgYW5kIHdvbid0IGJyZWFrIHJvdXRlIG1hdGNoaW5nXG4gICAgICAgICAgICAvLyBUaGUgcHJlZml4IGdldHMgdXNlZCBpbiByZWdleCBnZW5lcmF0aW9uIGJ1dCBkb2Vzbid0IGFmZmVjdCBwYXJhbWV0ZXIgZXh0cmFjdGlvblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi50b2tlbixcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICcvJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzdHJpcFBhcmFtZXRlclNlcGFyYXRvcnMocGFyYW1zKSB7XG4gICAgY29uc3QgY2xlYW5lZCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFtcykpe1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzZXBhcmF0b3IgaWYgaXQgYXBwZWFycyBhdCB0aGUgc3RhcnQgb2YgcGFyYW1ldGVyIHZhbHVlc1xuICAgICAgICAgICAgY2xlYW5lZFtrZXldID0gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtQQVJBTV9TRVBBUkFUT1J9YCksICcnKTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGFycmF5IHBhcmFtZXRlcnMgKGZyb20gcmVwZWF0ZWQgcm91dGUgc2VnbWVudHMpXG4gICAgICAgICAgICBjbGVhbmVkW2tleV0gPSB2YWx1ZS5tYXAoKGl0ZW0pPT50eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgPyBpdGVtLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7UEFSQU1fU0VQQVJBVE9SfWApLCAnJykgOiBpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsZWFuZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbGVhbmVkO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yb3V0ZS1wYXR0ZXJuLW5vcm1hbGl6ZXIuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/route-pattern-normalizer.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/shared/forward-logs-shared.js":
/*!*******************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/shared/forward-logs-shared.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 UNDEFINED_MARKER: function() {\n return UNDEFINED_MARKER;\n },\n patchConsoleMethod: function() {\n return patchConsoleMethod;\n }\n});\nconst UNDEFINED_MARKER = '__next_tagged_undefined';\nfunction patchConsoleMethod(methodName, wrapper) {\n const descriptor = Object.getOwnPropertyDescriptor(console, methodName);\n if (descriptor && (descriptor.configurable || descriptor.writable) && typeof descriptor.value === 'function') {\n const originalMethod = descriptor.value;\n const originalName = Object.getOwnPropertyDescriptor(originalMethod, 'name');\n const wrapperMethod = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n wrapper(methodName, ...args);\n originalMethod.apply(this, args);\n };\n if (originalName) {\n Object.defineProperty(wrapperMethod, 'name', originalName);\n }\n Object.defineProperty(console, methodName, {\n value: wrapperMethod\n });\n return ()=>{\n Object.defineProperty(console, methodName, {\n value: originalMethod,\n writable: descriptor.writable,\n configurable: descriptor.configurable\n });\n };\n }\n return ()=>{};\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', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=forward-logs-shared.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy9zaGFyZWQvZm9yd2FyZC1sb2dzLXNoYXJlZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FHTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtFQUErRSxhQUFhO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNS40X3JlYWN0LWRvbUAxOS4xLjBfcmVhY3RAMTkuMS4wX19yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3NoYXJlZC9mb3J3YXJkLWxvZ3Mtc2hhcmVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVU5ERUZJTkVEX01BUktFUjogbnVsbCxcbiAgICBwYXRjaENvbnNvbGVNZXRob2Q6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgVU5ERUZJTkVEX01BUktFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBVTkRFRklORURfTUFSS0VSO1xuICAgIH0sXG4gICAgcGF0Y2hDb25zb2xlTWV0aG9kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHBhdGNoQ29uc29sZU1ldGhvZDtcbiAgICB9XG59KTtcbmNvbnN0IFVOREVGSU5FRF9NQVJLRVIgPSAnX19uZXh0X3RhZ2dlZF91bmRlZmluZWQnO1xuZnVuY3Rpb24gcGF0Y2hDb25zb2xlTWV0aG9kKG1ldGhvZE5hbWUsIHdyYXBwZXIpIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25zb2xlLCBtZXRob2ROYW1lKTtcbiAgICBpZiAoZGVzY3JpcHRvciAmJiAoZGVzY3JpcHRvci5jb25maWd1cmFibGUgfHwgZGVzY3JpcHRvci53cml0YWJsZSkgJiYgdHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICBjb25zdCBvcmlnaW5hbE5hbWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9yaWdpbmFsTWV0aG9kLCAnbmFtZScpO1xuICAgICAgICBjb25zdCB3cmFwcGVyTWV0aG9kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyYXBwZXIobWV0aG9kTmFtZSwgLi4uYXJncyk7XG4gICAgICAgICAgICBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdyYXBwZXJNZXRob2QsICduYW1lJywgb3JpZ2luYWxOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc29sZSwgbWV0aG9kTmFtZSwge1xuICAgICAgICAgICAgdmFsdWU6IHdyYXBwZXJNZXRob2RcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnNvbGUsIG1ldGhvZE5hbWUsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogb3JpZ2luYWxNZXRob2QsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IGRlc2NyaXB0b3Iud3JpdGFibGUsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiAoKT0+e307XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcndhcmQtbG9ncy1zaGFyZWQuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/shared/forward-logs-shared.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/shared/react-18-hydration-error.js":
/*!************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/shared/react-18-hydration-error.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 getHydrationWarningType: function() {\n return getHydrationWarningType;\n },\n isHydrationError: function() {\n return isHydrationError;\n },\n isHydrationWarning: function() {\n return isHydrationWarning;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../lib/is-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-error.js\"));\nfunction isHydrationError(error) {\n return (0, _iserror.default)(error) && (error.message === 'Hydration failed because the initial UI does not match what was rendered on the server.' || error.message === 'Text content does not match server-rendered HTML.');\n}\nfunction isHydrationWarning(message) {\n return isHtmlTagsWarning(message) || isTextInTagsMismatchWarning(message) || isTextWarning(message);\n}\n// https://github.com/facebook/react/blob/main/packages/react-dom/src/__tests__/ReactDOMHydrationDiff-test.js used as a reference\nconst htmlTagsWarnings = new Set([\n 'Warning: Expected server HTML to contain a matching <%s> in <%s>.%s',\n 'Warning: Did not expect server HTML to contain a <%s> in <%s>.%s'\n]);\nconst textAndTagsMismatchWarnings = new Set([\n 'Warning: Expected server HTML to contain a matching text node for \"%s\" in <%s>.%s',\n 'Warning: Did not expect server HTML to contain the text node \"%s\" in <%s>.%s'\n]);\nconst textWarnings = new Set([\n 'Warning: Text content did not match. Server: \"%s\" Client: \"%s\"%s'\n]);\nconst getHydrationWarningType = (message)=>{\n if (typeof message !== 'string') {\n // TODO: Doesn't make sense to treat no message as a hydration error message.\n // We should bail out somewhere earlier.\n return 'text';\n }\n const normalizedMessage = message.startsWith('Warning: ') ? message : \"Warning: \" + message;\n if (isHtmlTagsWarning(normalizedMessage)) return 'tag';\n if (isTextInTagsMismatchWarning(normalizedMessage)) return 'text-in-tag';\n return 'text';\n};\nconst isHtmlTagsWarning = (message)=>typeof message === 'string' && htmlTagsWarnings.has(message);\nconst isTextInTagsMismatchWarning = (msg)=>typeof msg === 'string' && textAndTagsMismatchWarnings.has(msg);\nconst isTextWarning = (msg)=>typeof msg === 'string' && textWarnings.has(msg);\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=react-18-hydration-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy9zaGFyZWQvcmVhY3QtMTgtaHlkcmF0aW9uLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUlMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsaUNBQWlDLG1CQUFPLENBQUMsdUtBQXlDO0FBQ2xGLDBEQUEwRCxtQkFBTyxDQUFDLG1LQUFvQjtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy9zaGFyZWQvcmVhY3QtMTgtaHlkcmF0aW9uLWVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZ2V0SHlkcmF0aW9uV2FybmluZ1R5cGU6IG51bGwsXG4gICAgaXNIeWRyYXRpb25FcnJvcjogbnVsbCxcbiAgICBpc0h5ZHJhdGlvbldhcm5pbmc6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZ2V0SHlkcmF0aW9uV2FybmluZ1R5cGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SHlkcmF0aW9uV2FybmluZ1R5cGU7XG4gICAgfSxcbiAgICBpc0h5ZHJhdGlvbkVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzSHlkcmF0aW9uRXJyb3I7XG4gICAgfSxcbiAgICBpc0h5ZHJhdGlvbldhcm5pbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNIeWRyYXRpb25XYXJuaW5nO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9pc2Vycm9yID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vLi4vbGliL2lzLWVycm9yXCIpKTtcbmZ1bmN0aW9uIGlzSHlkcmF0aW9uRXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4gKDAsIF9pc2Vycm9yLmRlZmF1bHQpKGVycm9yKSAmJiAoZXJyb3IubWVzc2FnZSA9PT0gJ0h5ZHJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgaW5pdGlhbCBVSSBkb2VzIG5vdCBtYXRjaCB3aGF0IHdhcyByZW5kZXJlZCBvbiB0aGUgc2VydmVyLicgfHwgZXJyb3IubWVzc2FnZSA9PT0gJ1RleHQgY29udGVudCBkb2VzIG5vdCBtYXRjaCBzZXJ2ZXItcmVuZGVyZWQgSFRNTC4nKTtcbn1cbmZ1bmN0aW9uIGlzSHlkcmF0aW9uV2FybmluZyhtZXNzYWdlKSB7XG4gICAgcmV0dXJuIGlzSHRtbFRhZ3NXYXJuaW5nKG1lc3NhZ2UpIHx8IGlzVGV4dEluVGFnc01pc21hdGNoV2FybmluZyhtZXNzYWdlKSB8fCBpc1RleHRXYXJuaW5nKG1lc3NhZ2UpO1xufVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC1kb20vc3JjL19fdGVzdHNfXy9SZWFjdERPTUh5ZHJhdGlvbkRpZmYtdGVzdC5qcyB1c2VkIGFzIGEgcmVmZXJlbmNlXG5jb25zdCBodG1sVGFnc1dhcm5pbmdzID0gbmV3IFNldChbXG4gICAgJ1dhcm5pbmc6IEV4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyA8JXM+IGluIDwlcz4uJXMnLFxuICAgICdXYXJuaW5nOiBEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgPCVzPiBpbiA8JXM+LiVzJ1xuXSk7XG5jb25zdCB0ZXh0QW5kVGFnc01pc21hdGNoV2FybmluZ3MgPSBuZXcgU2V0KFtcbiAgICAnV2FybmluZzogRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIHRleHQgbm9kZSBmb3IgXCIlc1wiIGluIDwlcz4uJXMnLFxuICAgICdXYXJuaW5nOiBEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIHRoZSB0ZXh0IG5vZGUgXCIlc1wiIGluIDwlcz4uJXMnXG5dKTtcbmNvbnN0IHRleHRXYXJuaW5ncyA9IG5ldyBTZXQoW1xuICAgICdXYXJuaW5nOiBUZXh0IGNvbnRlbnQgZGlkIG5vdCBtYXRjaC4gU2VydmVyOiBcIiVzXCIgQ2xpZW50OiBcIiVzXCIlcydcbl0pO1xuY29uc3QgZ2V0SHlkcmF0aW9uV2FybmluZ1R5cGUgPSAobWVzc2FnZSk9PntcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIFRPRE86IERvZXNuJ3QgbWFrZSBzZW5zZSB0byB0cmVhdCBubyBtZXNzYWdlIGFzIGEgaHlkcmF0aW9uIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgIC8vIFdlIHNob3VsZCBiYWlsIG91dCBzb21ld2hlcmUgZWFybGllci5cbiAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZE1lc3NhZ2UgPSBtZXNzYWdlLnN0YXJ0c1dpdGgoJ1dhcm5pbmc6ICcpID8gbWVzc2FnZSA6IFwiV2FybmluZzogXCIgKyBtZXNzYWdlO1xuICAgIGlmIChpc0h0bWxUYWdzV2FybmluZyhub3JtYWxpemVkTWVzc2FnZSkpIHJldHVybiAndGFnJztcbiAgICBpZiAoaXNUZXh0SW5UYWdzTWlzbWF0Y2hXYXJuaW5nKG5vcm1hbGl6ZWRNZXNzYWdlKSkgcmV0dXJuICd0ZXh0LWluLXRhZyc7XG4gICAgcmV0dXJuICd0ZXh0Jztcbn07XG5jb25zdCBpc0h0bWxUYWdzV2FybmluZyA9IChtZXNzYWdlKT0+dHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIGh0bWxUYWdzV2FybmluZ3MuaGFzKG1lc3NhZ2UpO1xuY29uc3QgaXNUZXh0SW5UYWdzTWlzbWF0Y2hXYXJuaW5nID0gKG1zZyk9PnR5cGVvZiBtc2cgPT09ICdzdHJpbmcnICYmIHRleHRBbmRUYWdzTWlzbWF0Y2hXYXJuaW5ncy5oYXMobXNnKTtcbmNvbnN0IGlzVGV4dFdhcm5pbmcgPSAobXNnKT0+dHlwZW9mIG1zZyA9PT0gJ3N0cmluZycgJiYgdGV4dFdhcm5pbmdzLmhhcyhtc2cpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC0xOC1oeWRyYXRpb24tZXJyb3IuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/shared/react-18-hydration-error.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/shared/react-19-hydration-error.js":
/*!************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/shared/react-19-hydration-error.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 NEXTJS_HYDRATION_ERROR_LINK: function() {\n return NEXTJS_HYDRATION_ERROR_LINK;\n },\n REACT_HYDRATION_ERROR_LINK: function() {\n return REACT_HYDRATION_ERROR_LINK;\n },\n getHydrationErrorStackInfo: function() {\n return getHydrationErrorStackInfo;\n },\n isErrorMessageWithComponentStackDiff: function() {\n return isErrorMessageWithComponentStackDiff;\n },\n isHydrationError: function() {\n return isHydrationError;\n }\n});\nconst REACT_HYDRATION_ERROR_LINK = 'https://react.dev/link/hydration-mismatch';\nconst NEXTJS_HYDRATION_ERROR_LINK = 'https://nextjs.org/docs/messages/react-hydration-error';\n/**\n * Only React 19+ contains component stack diff in the error message\n */ const errorMessagesWithComponentStackDiff = [\n /^In HTML, (.+?) cannot be a child of <(.+?)>\\.(.*)\\nThis will cause a hydration error\\.(.*)/,\n /^In HTML, (.+?) cannot be a descendant of <(.+?)>\\.\\nThis will cause a hydration error\\.(.*)/,\n /^In HTML, text nodes cannot be a child of <(.+?)>\\.\\nThis will cause a hydration error\\./,\n /^In HTML, whitespace text nodes cannot be a child of <(.+?)>\\. Make sure you don't have any extra whitespace between tags on each line of your source code\\.\\nThis will cause a hydration error\\./\n];\nfunction isHydrationError(error) {\n return isErrorMessageWithComponentStackDiff(error.message) || /Hydration failed because the server rendered (text|HTML) didn't match the client\\./.test(error.message) || /A tree hydrated but some attributes of the server rendered HTML didn't match the client properties./.test(error.message);\n}\nfunction isErrorMessageWithComponentStackDiff(msg) {\n return errorMessagesWithComponentStackDiff.some((regex)=>regex.test(msg));\n}\nfunction getHydrationErrorStackInfo(error) {\n const errorMessage = error.message;\n if (isErrorMessageWithComponentStackDiff(errorMessage)) {\n const [message, diffLog = ''] = errorMessage.split('\\n\\n');\n const diff = diffLog.trim();\n return {\n message: diff === '' ? errorMessage.trim() : message.trim(),\n diff,\n notes: null\n };\n }\n const [message, maybeComponentStackDiff] = errorMessage.split(\"\" + REACT_HYDRATION_ERROR_LINK);\n const trimmedMessage = message.trim();\n // React built-in hydration diff starts with a newline\n if (maybeComponentStackDiff !== undefined && maybeComponentStackDiff.length > 1) {\n const diffs = [];\n maybeComponentStackDiff.split('\\n').forEach((line)=>{\n if (line.trim() === '') return;\n if (!line.trim().startsWith('at ')) {\n diffs.push(line);\n }\n });\n const [displayedMessage, ...notes] = trimmedMessage.split('\\n\\n');\n return {\n message: displayedMessage,\n diff: diffs.join('\\n'),\n notes: notes.join('\\n\\n') || null\n };\n } else {\n const [displayedMessage, ...notes] = trimmedMessage.split('\\n\\n');\n return {\n message: displayedMessage,\n diff: null,\n notes: notes.join('\\n\\n')\n };\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', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=react-19-hydration-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy9zaGFyZWQvcmVhY3QtMTktaHlkcmF0aW9uLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQU1MO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy9zaGFyZWQvcmVhY3QtMTktaHlkcmF0aW9uLWVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTkVYVEpTX0hZRFJBVElPTl9FUlJPUl9MSU5LOiBudWxsLFxuICAgIFJFQUNUX0hZRFJBVElPTl9FUlJPUl9MSU5LOiBudWxsLFxuICAgIGdldEh5ZHJhdGlvbkVycm9yU3RhY2tJbmZvOiBudWxsLFxuICAgIGlzRXJyb3JNZXNzYWdlV2l0aENvbXBvbmVudFN0YWNrRGlmZjogbnVsbCxcbiAgICBpc0h5ZHJhdGlvbkVycm9yOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIE5FWFRKU19IWURSQVRJT05fRVJST1JfTElOSzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUSlNfSFlEUkFUSU9OX0VSUk9SX0xJTks7XG4gICAgfSxcbiAgICBSRUFDVF9IWURSQVRJT05fRVJST1JfTElOSzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSRUFDVF9IWURSQVRJT05fRVJST1JfTElOSztcbiAgICB9LFxuICAgIGdldEh5ZHJhdGlvbkVycm9yU3RhY2tJbmZvOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEh5ZHJhdGlvbkVycm9yU3RhY2tJbmZvO1xuICAgIH0sXG4gICAgaXNFcnJvck1lc3NhZ2VXaXRoQ29tcG9uZW50U3RhY2tEaWZmOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzRXJyb3JNZXNzYWdlV2l0aENvbXBvbmVudFN0YWNrRGlmZjtcbiAgICB9LFxuICAgIGlzSHlkcmF0aW9uRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNIeWRyYXRpb25FcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IFJFQUNUX0hZRFJBVElPTl9FUlJPUl9MSU5LID0gJ2h0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaHlkcmF0aW9uLW1pc21hdGNoJztcbmNvbnN0IE5FWFRKU19IWURSQVRJT05fRVJST1JfTElOSyA9ICdodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9yZWFjdC1oeWRyYXRpb24tZXJyb3InO1xuLyoqXG4gKiBPbmx5IFJlYWN0IDE5KyBjb250YWlucyBjb21wb25lbnQgc3RhY2sgZGlmZiBpbiB0aGUgZXJyb3IgbWVzc2FnZVxuICovIGNvbnN0IGVycm9yTWVzc2FnZXNXaXRoQ29tcG9uZW50U3RhY2tEaWZmID0gW1xuICAgIC9eSW4gSFRNTCwgKC4rPykgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCguKz8pPlxcLiguKilcXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3JcXC4oLiopLyxcbiAgICAvXkluIEhUTUwsICguKz8pIGNhbm5vdCBiZSBhIGRlc2NlbmRhbnQgb2YgPCguKz8pPlxcLlxcblRoaXMgd2lsbCBjYXVzZSBhIGh5ZHJhdGlvbiBlcnJvclxcLiguKikvLFxuICAgIC9eSW4gSFRNTCwgdGV4dCBub2RlcyBjYW5ub3QgYmUgYSBjaGlsZCBvZiA8KC4rPyk+XFwuXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yXFwuLyxcbiAgICAvXkluIEhUTUwsIHdoaXRlc3BhY2UgdGV4dCBub2RlcyBjYW5ub3QgYmUgYSBjaGlsZCBvZiA8KC4rPyk+XFwuIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBhbnkgZXh0cmEgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZ3Mgb24gZWFjaCBsaW5lIG9mIHlvdXIgc291cmNlIGNvZGVcXC5cXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3JcXC4vXG5dO1xuZnVuY3Rpb24gaXNIeWRyYXRpb25FcnJvcihlcnJvcikge1xuICAgIHJldHVybiBpc0Vycm9yTWVzc2FnZVdpdGhDb21wb25lbnRTdGFja0RpZmYoZXJyb3IubWVzc2FnZSkgfHwgL0h5ZHJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgc2VydmVyIHJlbmRlcmVkICh0ZXh0fEhUTUwpIGRpZG4ndCBtYXRjaCB0aGUgY2xpZW50XFwuLy50ZXN0KGVycm9yLm1lc3NhZ2UpIHx8IC9BIHRyZWUgaHlkcmF0ZWQgYnV0IHNvbWUgYXR0cmlidXRlcyBvZiB0aGUgc2VydmVyIHJlbmRlcmVkIEhUTUwgZGlkbid0IG1hdGNoIHRoZSBjbGllbnQgcHJvcGVydGllcy4vLnRlc3QoZXJyb3IubWVzc2FnZSk7XG59XG5mdW5jdGlvbiBpc0Vycm9yTWVzc2FnZVdpdGhDb21wb25lbnRTdGFja0RpZmYobXNnKSB7XG4gICAgcmV0dXJuIGVycm9yTWVzc2FnZXNXaXRoQ29tcG9uZW50U3RhY2tEaWZmLnNvbWUoKHJlZ2V4KT0+cmVnZXgudGVzdChtc2cpKTtcbn1cbmZ1bmN0aW9uIGdldEh5ZHJhdGlvbkVycm9yU3RhY2tJbmZvKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICBpZiAoaXNFcnJvck1lc3NhZ2VXaXRoQ29tcG9uZW50U3RhY2tEaWZmKGVycm9yTWVzc2FnZSkpIHtcbiAgICAgICAgY29uc3QgW21lc3NhZ2UsIGRpZmZMb2cgPSAnJ10gPSBlcnJvck1lc3NhZ2Uuc3BsaXQoJ1xcblxcbicpO1xuICAgICAgICBjb25zdCBkaWZmID0gZGlmZkxvZy50cmltKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBkaWZmID09PSAnJyA/IGVycm9yTWVzc2FnZS50cmltKCkgOiBtZXNzYWdlLnRyaW0oKSxcbiAgICAgICAgICAgIGRpZmYsXG4gICAgICAgICAgICBub3RlczogbnVsbFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBbbWVzc2FnZSwgbWF5YmVDb21wb25lbnRTdGFja0RpZmZdID0gZXJyb3JNZXNzYWdlLnNwbGl0KFwiXCIgKyBSRUFDVF9IWURSQVRJT05fRVJST1JfTElOSyk7XG4gICAgY29uc3QgdHJpbW1lZE1lc3NhZ2UgPSBtZXNzYWdlLnRyaW0oKTtcbiAgICAvLyBSZWFjdCBidWlsdC1pbiBoeWRyYXRpb24gZGlmZiBzdGFydHMgd2l0aCBhIG5ld2xpbmVcbiAgICBpZiAobWF5YmVDb21wb25lbnRTdGFja0RpZmYgIT09IHVuZGVmaW5lZCAmJiBtYXliZUNvbXBvbmVudFN0YWNrRGlmZi5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IGRpZmZzID0gW107XG4gICAgICAgIG1heWJlQ29tcG9uZW50U3RhY2tEaWZmLnNwbGl0KCdcXG4nKS5mb3JFYWNoKChsaW5lKT0+e1xuICAgICAgICAgICAgaWYgKGxpbmUudHJpbSgpID09PSAnJykgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdhdCAnKSkge1xuICAgICAgICAgICAgICAgIGRpZmZzLnB1c2gobGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBbZGlzcGxheWVkTWVzc2FnZSwgLi4ubm90ZXNdID0gdHJpbW1lZE1lc3NhZ2Uuc3BsaXQoJ1xcblxcbicpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogZGlzcGxheWVkTWVzc2FnZSxcbiAgICAgICAgICAgIGRpZmY6IGRpZmZzLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgbm90ZXM6IG5vdGVzLmpvaW4oJ1xcblxcbicpIHx8IG51bGxcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbZGlzcGxheWVkTWVzc2FnZSwgLi4ubm90ZXNdID0gdHJpbW1lZE1lc3NhZ2Uuc3BsaXQoJ1xcblxcbicpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogZGlzcGxheWVkTWVzc2FnZSxcbiAgICAgICAgICAgIGRpZmY6IG51bGwsXG4gICAgICAgICAgICBub3Rlczogbm90ZXMuam9pbignXFxuXFxuJylcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlYWN0LTE5LWh5ZHJhdGlvbi1lcnJvci5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/shared/react-19-hydration-error.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js":
/*!****************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.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 coerceError: function() {\n return coerceError;\n },\n decorateDevError: function() {\n return decorateDevError;\n },\n getOwnerStack: function() {\n return getOwnerStack;\n },\n setOwnerStack: function() {\n return setOwnerStack;\n },\n setOwnerStackIfAvailable: function() {\n return setOwnerStackIfAvailable;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../../lib/is-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-error.js\"));\nconst ownerStacks = new WeakMap();\nfunction getOwnerStack(error) {\n return ownerStacks.get(error);\n}\nfunction setOwnerStack(error, stack) {\n ownerStacks.set(error, stack);\n}\nfunction coerceError(value) {\n return (0, _iserror.default)(value) ? value : Object.defineProperty(new Error('' + value), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n}\nfunction setOwnerStackIfAvailable(error) {\n // React 18 and prod does not have `captureOwnerStack`\n if ('captureOwnerStack' in _react.default) {\n setOwnerStack(error, _react.default.captureOwnerStack());\n }\n}\nfunction decorateDevError(thrownValue) {\n const error = coerceError(thrownValue);\n setOwnerStackIfAvailable(error);\n return error;\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', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=stitched-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9zdGl0Y2hlZC1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FNTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxpQ0FBaUMsbUJBQU8sQ0FBQyx1S0FBeUM7QUFDbEYsd0RBQXdELG1CQUFPLENBQUMsZ0dBQU87QUFDdkUsMERBQTBELG1CQUFPLENBQUMseUtBQTBCO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNS40X3JlYWN0LWRvbUAxOS4xLjBfcmVhY3RAMTkuMS4wX19yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL3N0aXRjaGVkLWVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgY29lcmNlRXJyb3I6IG51bGwsXG4gICAgZGVjb3JhdGVEZXZFcnJvcjogbnVsbCxcbiAgICBnZXRPd25lclN0YWNrOiBudWxsLFxuICAgIHNldE93bmVyU3RhY2s6IG51bGwsXG4gICAgc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGNvZXJjZUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNvZXJjZUVycm9yO1xuICAgIH0sXG4gICAgZGVjb3JhdGVEZXZFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkZWNvcmF0ZURldkVycm9yO1xuICAgIH0sXG4gICAgZ2V0T3duZXJTdGFjazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRPd25lclN0YWNrO1xuICAgIH0sXG4gICAgc2V0T3duZXJTdGFjazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzZXRPd25lclN0YWNrO1xuICAgIH0sXG4gICAgc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHNldE93bmVyU3RhY2tJZkF2YWlsYWJsZTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfaXNlcnJvciA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4uLy4uLy4uLy4uL2xpYi9pcy1lcnJvclwiKSk7XG5jb25zdCBvd25lclN0YWNrcyA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBnZXRPd25lclN0YWNrKGVycm9yKSB7XG4gICAgcmV0dXJuIG93bmVyU3RhY2tzLmdldChlcnJvcik7XG59XG5mdW5jdGlvbiBzZXRPd25lclN0YWNrKGVycm9yLCBzdGFjaykge1xuICAgIG93bmVyU3RhY2tzLnNldChlcnJvciwgc3RhY2spO1xufVxuZnVuY3Rpb24gY29lcmNlRXJyb3IodmFsdWUpIHtcbiAgICByZXR1cm4gKDAsIF9pc2Vycm9yLmRlZmF1bHQpKHZhbHVlKSA/IHZhbHVlIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ldyBFcnJvcignJyArIHZhbHVlKSwgXCJfX05FWFRfRVJST1JfQ09ERVwiLCB7XG4gICAgICAgIHZhbHVlOiBcIkUzOTRcIixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlKGVycm9yKSB7XG4gICAgLy8gUmVhY3QgMTggYW5kIHByb2QgZG9lcyBub3QgaGF2ZSBgY2FwdHVyZU93bmVyU3RhY2tgXG4gICAgaWYgKCdjYXB0dXJlT3duZXJTdGFjaycgaW4gX3JlYWN0LmRlZmF1bHQpIHtcbiAgICAgICAgc2V0T3duZXJTdGFjayhlcnJvciwgX3JlYWN0LmRlZmF1bHQuY2FwdHVyZU93bmVyU3RhY2soKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVjb3JhdGVEZXZFcnJvcih0aHJvd25WYWx1ZSkge1xuICAgIGNvbnN0IGVycm9yID0gY29lcmNlRXJyb3IodGhyb3duVmFsdWUpO1xuICAgIHNldE93bmVyU3RhY2tJZkF2YWlsYWJsZShlcnJvcik7XG4gICAgcmV0dXJuIGVycm9yO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGl0Y2hlZC1lcnJvci5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js":
/*!*******************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/forward-logs.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 PROMISE_MARKER: function() {\n return PROMISE_MARKER;\n },\n UNAVAILABLE_MARKER: function() {\n return UNAVAILABLE_MARKER;\n },\n forwardErrorLog: function() {\n return forwardErrorLog;\n },\n forwardUnhandledError: function() {\n return forwardUnhandledError;\n },\n initializeDebugLogForwarding: function() {\n return initializeDebugLogForwarding;\n },\n isTerminalLoggingEnabled: function() {\n return isTerminalLoggingEnabled;\n },\n logQueue: function() {\n return logQueue;\n },\n logStringify: function() {\n return logStringify;\n },\n logUnhandledRejection: function() {\n return logUnhandledRejection;\n },\n preLogSerializationClone: function() {\n return preLogSerializationClone;\n }\n});\nconst _safestablestringify = __webpack_require__(/*! next/dist/compiled/safe-stable-stringify */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/safe-stable-stringify/index.js\");\nconst _stitchederror = __webpack_require__(/*! ./errors/stitched-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\nconst _errorsource = __webpack_require__(/*! ../../../shared/lib/error-source */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/error-source.js\");\nconst _terminalloggingconfig = __webpack_require__(/*! ./terminal-logging-config */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js\");\nconst _forwardlogsshared = __webpack_require__(/*! ../../shared/forward-logs-shared */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/shared/forward-logs-shared.js\");\nconst terminalLoggingConfig = (0, _terminalloggingconfig.getTerminalLoggingConfig)();\nconst PROMISE_MARKER = 'Promise {}';\nconst UNAVAILABLE_MARKER = '[Unable to view]';\nconst maximumDepth = typeof terminalLoggingConfig === 'object' && terminalLoggingConfig.depthLimit ? terminalLoggingConfig.depthLimit : 5;\nconst maximumBreadth = typeof terminalLoggingConfig === 'object' && terminalLoggingConfig.edgeLimit ? terminalLoggingConfig.edgeLimit : 100;\nconst stringify = (0, _safestablestringify.configure)({\n maximumDepth,\n maximumBreadth\n});\nconst isTerminalLoggingEnabled = (0, _terminalloggingconfig.getIsTerminalLoggingEnabled)();\nconst methods = [\n 'log',\n 'info',\n 'warn',\n 'debug',\n 'table',\n 'assert',\n 'dir',\n 'dirxml',\n 'group',\n 'groupCollapsed',\n 'groupEnd',\n 'trace'\n];\nfunction preLogSerializationClone(value, seen) {\n if (seen === void 0) seen = new WeakMap();\n if (value === undefined) return _forwardlogsshared.UNDEFINED_MARKER;\n if (value === null || typeof value !== 'object') return value;\n if (seen.has(value)) return seen.get(value);\n try {\n Object.keys(value);\n } catch (e) {\n return UNAVAILABLE_MARKER;\n }\n try {\n if (typeof value.then === 'function') return PROMISE_MARKER;\n } catch (e) {\n return UNAVAILABLE_MARKER;\n }\n if (Array.isArray(value)) {\n const out = [];\n seen.set(value, out);\n for (const item of value){\n try {\n out.push(preLogSerializationClone(item, seen));\n } catch (e) {\n out.push(UNAVAILABLE_MARKER);\n }\n }\n return out;\n }\n const proto = Object.getPrototypeOf(value);\n if (proto === Object.prototype || proto === null) {\n const out = {};\n seen.set(value, out);\n for (const key of Object.keys(value)){\n try {\n out[key] = preLogSerializationClone(value[key], seen);\n } catch (e) {\n out[key] = UNAVAILABLE_MARKER;\n }\n }\n return out;\n }\n return Object.prototype.toString.call(value);\n}\nconst logStringify = (data)=>{\n try {\n const result = stringify(data);\n return result != null ? result : '\"' + UNAVAILABLE_MARKER + '\"';\n } catch (e) {\n return '\"' + UNAVAILABLE_MARKER + '\"';\n }\n};\nconst afterThisFrame = (cb)=>{\n let timeout;\n const rafId = requestAnimationFrame(()=>{\n timeout = setTimeout(()=>{\n cb();\n });\n });\n return ()=>{\n cancelAnimationFrame(rafId);\n clearTimeout(timeout);\n };\n};\nlet isPatched = false;\nconst serializeEntries = (entries)=>entries.map((clientEntry)=>{\n switch(clientEntry.kind){\n case 'any-logged-error':\n case 'console':\n {\n return {\n ...clientEntry,\n args: clientEntry.args.map(stringifyUserArg)\n };\n }\n case 'formatted-error':\n {\n return clientEntry;\n }\n default:\n {\n return null;\n }\n }\n });\nconst logQueue = {\n entries: [],\n flushScheduled: false,\n cancelFlush: null,\n socket: null,\n sourceType: undefined,\n router: null,\n scheduleLogSend: (entry)=>{\n logQueue.entries.push(entry);\n if (logQueue.flushScheduled) {\n return;\n }\n // safe to deref and use in setTimeout closure since we cancel on new socket\n const socket = logQueue.socket;\n if (!socket) {\n return;\n }\n // we probably dont need this\n logQueue.flushScheduled = true;\n // non blocking log flush, runs at most once per frame\n logQueue.cancelFlush = afterThisFrame(()=>{\n logQueue.flushScheduled = false;\n // just incase\n try {\n const payload = JSON.stringify({\n event: 'browser-logs',\n entries: serializeEntries(logQueue.entries),\n router: logQueue.router,\n // needed for source mapping, we just assign the sourceType from the last error for the whole batch\n sourceType: logQueue.sourceType\n });\n socket.send(payload);\n logQueue.entries = [];\n logQueue.sourceType = undefined;\n } catch (e) {\n // error (make sure u don't infinite loop)\n /* noop */ }\n });\n },\n onSocketReady: (socket)=>{\n if (socket.readyState !== WebSocket.OPEN) {\n // invariant\n return;\n }\n // incase an existing timeout was going to run with a stale socket\n logQueue.cancelFlush == null ? void 0 : logQueue.cancelFlush.call(logQueue);\n logQueue.socket = socket;\n try {\n const payload = JSON.stringify({\n event: 'browser-logs',\n entries: serializeEntries(logQueue.entries),\n router: logQueue.router,\n sourceType: logQueue.sourceType\n });\n socket.send(payload);\n logQueue.entries = [];\n logQueue.sourceType = undefined;\n } catch (e) {\n /** noop just incase */ }\n }\n};\nconst stringifyUserArg = (arg)=>{\n if (arg.kind !== 'arg') {\n return arg;\n }\n return {\n ...arg,\n data: logStringify(arg.data)\n };\n};\nconst createErrorArg = (error)=>{\n const stack = stackWithOwners(error);\n return {\n kind: 'formatted-error-arg',\n prefix: error.message ? error.name + \": \" + error.message : \"\" + error.name,\n stack\n };\n};\nconst createLogEntry = (level, args)=>{\n // do not abstract this, it implicitly relies on which functions call it. forcing the inlined implementation makes you think about callers\n // error capture stack trace maybe\n const stack = stackWithOwners(new Error());\n const stackLines = stack == null ? void 0 : stack.split('\\n');\n const cleanStack = stackLines == null ? void 0 : stackLines.slice(3).join('\\n') // this is probably ignored anyways\n ;\n const entry = {\n kind: 'console',\n consoleMethodStack: cleanStack != null ? cleanStack : null,\n method: level,\n args: args.map((arg)=>{\n if (arg instanceof Error) {\n return createErrorArg(arg);\n }\n return {\n kind: 'arg',\n data: preLogSerializationClone(arg)\n };\n })\n };\n logQueue.scheduleLogSend(entry);\n};\nconst forwardErrorLog = (args)=>{\n const errorObjects = args.filter((arg)=>arg instanceof Error);\n const first = errorObjects.at(0);\n if (first) {\n const source = (0, _errorsource.getErrorSource)(first);\n if (source) {\n logQueue.sourceType = source;\n }\n }\n /**\n * browser shows stack regardless of type of data passed to console.error, so we should do the same\n *\n * do not abstract this, it implicitly relies on which functions call it. forcing the inlined implementation makes you think about callers\n */ const stack = stackWithOwners(new Error());\n const stackLines = stack == null ? void 0 : stack.split('\\n');\n const cleanStack = stackLines == null ? void 0 : stackLines.slice(3).join('\\n');\n const entry = {\n kind: 'any-logged-error',\n method: 'error',\n consoleErrorStack: cleanStack != null ? cleanStack : '',\n args: args.map((arg)=>{\n if (arg instanceof Error) {\n return createErrorArg(arg);\n }\n return {\n kind: 'arg',\n data: preLogSerializationClone(arg)\n };\n })\n };\n logQueue.scheduleLogSend(entry);\n};\nconst createUncaughtErrorEntry = (errorName, errorMessage, fullStack)=>{\n const entry = {\n kind: 'formatted-error',\n prefix: \"Uncaught \" + errorName + \": \" + errorMessage,\n stack: fullStack,\n method: 'error'\n };\n logQueue.scheduleLogSend(entry);\n};\nconst stackWithOwners = (error)=>{\n let ownerStack = '';\n (0, _stitchederror.setOwnerStackIfAvailable)(error);\n ownerStack = (0, _stitchederror.getOwnerStack)(error) || '';\n const stack = (error.stack || '') + ownerStack;\n return stack;\n};\nfunction logUnhandledRejection(reason) {\n if (reason instanceof Error) {\n createUnhandledRejectionErrorEntry(reason, stackWithOwners(reason));\n return;\n }\n createUnhandledRejectionNonErrorEntry(reason);\n}\nconst createUnhandledRejectionErrorEntry = (error, fullStack)=>{\n const source = (0, _errorsource.getErrorSource)(error);\n if (source) {\n logQueue.sourceType = source;\n }\n const entry = {\n kind: 'formatted-error',\n prefix: \" unhandledRejection: \" + error.name + \": \" + error.message,\n stack: fullStack,\n method: 'error'\n };\n logQueue.scheduleLogSend(entry);\n};\nconst createUnhandledRejectionNonErrorEntry = (reason)=>{\n const entry = {\n kind: 'any-logged-error',\n // we can't access the stack since the event is dispatched async and creating an inline error would be meaningless\n consoleErrorStack: '',\n method: 'error',\n args: [\n {\n kind: 'arg',\n data: \" unhandledRejection:\",\n isRejectionMessage: true\n },\n {\n kind: 'arg',\n data: preLogSerializationClone(reason)\n }\n ]\n };\n logQueue.scheduleLogSend(entry);\n};\nconst isHMR = (args)=>{\n const firstArg = args[0];\n if (typeof firstArg !== 'string') {\n return false;\n }\n if (firstArg.startsWith('[Fast Refresh]')) {\n return true;\n }\n if (firstArg.startsWith('[HMR]')) {\n return true;\n }\n return false;\n};\nconst isIgnoredLog = (args)=>{\n if (args.length < 3) {\n return false;\n }\n const [format, styles, label] = args;\n if (typeof format !== 'string' || typeof styles !== 'string' || typeof label !== 'string') {\n return false;\n }\n // kinda hacky, we should define a common format for these strings so we can safely ignore\n return format.startsWith('%c%s%c') && styles.includes('background:');\n};\nfunction forwardUnhandledError(error) {\n createUncaughtErrorEntry(error.name, error.message, stackWithOwners(error));\n}\nconst initializeDebugLogForwarding = (router)=>{\n // probably don't need this\n if (isPatched) {\n return;\n }\n // TODO(rob): why does this break rendering on server, important to know incase the same bug appears in browser\n if (typeof window === 'undefined') {\n return;\n }\n // better to be safe than sorry\n try {\n methods.forEach((method)=>(0, _forwardlogsshared.patchConsoleMethod)(method, function(_) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (isHMR(args)) {\n return;\n }\n if (isIgnoredLog(args)) {\n return;\n }\n createLogEntry(method, args);\n }));\n } catch (e) {}\n logQueue.router = router;\n isPatched = true;\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', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=forward-logs.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2ZvcndhcmQtbG9ncy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FXTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsNkJBQTZCLG1CQUFPLENBQUMsaU5BQTBDO0FBQy9FLHVCQUF1QixtQkFBTyxDQUFDLDZNQUF5QjtBQUN4RCxxQkFBcUIsbUJBQU8sQ0FBQyw0TEFBa0M7QUFDL0QsK0JBQStCLG1CQUFPLENBQUMsaU5BQTJCO0FBQ2xFLDJCQUEyQixtQkFBTyxDQUFDLDZNQUFrQztBQUNyRTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzR0FBc0csYUFBYTtBQUNuSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS41LjRfcmVhY3QtZG9tQDE5LjEuMF9yZWFjdEAxOS4xLjBfX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9mb3J3YXJkLWxvZ3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBQUk9NSVNFX01BUktFUjogbnVsbCxcbiAgICBVTkFWQUlMQUJMRV9NQVJLRVI6IG51bGwsXG4gICAgZm9yd2FyZEVycm9yTG9nOiBudWxsLFxuICAgIGZvcndhcmRVbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBpbml0aWFsaXplRGVidWdMb2dGb3J3YXJkaW5nOiBudWxsLFxuICAgIGlzVGVybWluYWxMb2dnaW5nRW5hYmxlZDogbnVsbCxcbiAgICBsb2dRdWV1ZTogbnVsbCxcbiAgICBsb2dTdHJpbmdpZnk6IG51bGwsXG4gICAgbG9nVW5oYW5kbGVkUmVqZWN0aW9uOiBudWxsLFxuICAgIHByZUxvZ1NlcmlhbGl6YXRpb25DbG9uZTogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBQUk9NSVNFX01BUktFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQUk9NSVNFX01BUktFUjtcbiAgICB9LFxuICAgIFVOQVZBSUxBQkxFX01BUktFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBVTkFWQUlMQUJMRV9NQVJLRVI7XG4gICAgfSxcbiAgICBmb3J3YXJkRXJyb3JMb2c6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZm9yd2FyZEVycm9yTG9nO1xuICAgIH0sXG4gICAgZm9yd2FyZFVuaGFuZGxlZEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZvcndhcmRVbmhhbmRsZWRFcnJvcjtcbiAgICB9LFxuICAgIGluaXRpYWxpemVEZWJ1Z0xvZ0ZvcndhcmRpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZURlYnVnTG9nRm9yd2FyZGluZztcbiAgICB9LFxuICAgIGlzVGVybWluYWxMb2dnaW5nRW5hYmxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQ7XG4gICAgfSxcbiAgICBsb2dRdWV1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBsb2dRdWV1ZTtcbiAgICB9LFxuICAgIGxvZ1N0cmluZ2lmeTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBsb2dTdHJpbmdpZnk7XG4gICAgfSxcbiAgICBsb2dVbmhhbmRsZWRSZWplY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbG9nVW5oYW5kbGVkUmVqZWN0aW9uO1xuICAgIH0sXG4gICAgcHJlTG9nU2VyaWFsaXphdGlvbkNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHByZUxvZ1NlcmlhbGl6YXRpb25DbG9uZTtcbiAgICB9XG59KTtcbmNvbnN0IF9zYWZlc3RhYmxlc3RyaW5naWZ5ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9zYWZlLXN0YWJsZS1zdHJpbmdpZnlcIik7XG5jb25zdCBfc3RpdGNoZWRlcnJvciA9IHJlcXVpcmUoXCIuL2Vycm9ycy9zdGl0Y2hlZC1lcnJvclwiKTtcbmNvbnN0IF9lcnJvcnNvdXJjZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zaGFyZWQvbGliL2Vycm9yLXNvdXJjZVwiKTtcbmNvbnN0IF90ZXJtaW5hbGxvZ2dpbmdjb25maWcgPSByZXF1aXJlKFwiLi90ZXJtaW5hbC1sb2dnaW5nLWNvbmZpZ1wiKTtcbmNvbnN0IF9mb3J3YXJkbG9nc3NoYXJlZCA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvZm9yd2FyZC1sb2dzLXNoYXJlZFwiKTtcbmNvbnN0IHRlcm1pbmFsTG9nZ2luZ0NvbmZpZyA9ICgwLCBfdGVybWluYWxsb2dnaW5nY29uZmlnLmdldFRlcm1pbmFsTG9nZ2luZ0NvbmZpZykoKTtcbmNvbnN0IFBST01JU0VfTUFSS0VSID0gJ1Byb21pc2Uge30nO1xuY29uc3QgVU5BVkFJTEFCTEVfTUFSS0VSID0gJ1tVbmFibGUgdG8gdmlld10nO1xuY29uc3QgbWF4aW11bURlcHRoID0gdHlwZW9mIHRlcm1pbmFsTG9nZ2luZ0NvbmZpZyA9PT0gJ29iamVjdCcgJiYgdGVybWluYWxMb2dnaW5nQ29uZmlnLmRlcHRoTGltaXQgPyB0ZXJtaW5hbExvZ2dpbmdDb25maWcuZGVwdGhMaW1pdCA6IDU7XG5jb25zdCBtYXhpbXVtQnJlYWR0aCA9IHR5cGVvZiB0ZXJtaW5hbExvZ2dpbmdDb25maWcgPT09ICdvYmplY3QnICYmIHRlcm1pbmFsTG9nZ2luZ0NvbmZpZy5lZGdlTGltaXQgPyB0ZXJtaW5hbExvZ2dpbmdDb25maWcuZWRnZUxpbWl0IDogMTAwO1xuY29uc3Qgc3RyaW5naWZ5ID0gKDAsIF9zYWZlc3RhYmxlc3RyaW5naWZ5LmNvbmZpZ3VyZSkoe1xuICAgIG1heGltdW1EZXB0aCxcbiAgICBtYXhpbXVtQnJlYWR0aFxufSk7XG5jb25zdCBpc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQgPSAoMCwgX3Rlcm1pbmFsbG9nZ2luZ2NvbmZpZy5nZXRJc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQpKCk7XG5jb25zdCBtZXRob2RzID0gW1xuICAgICdsb2cnLFxuICAgICdpbmZvJyxcbiAgICAnd2FybicsXG4gICAgJ2RlYnVnJyxcbiAgICAndGFibGUnLFxuICAgICdhc3NlcnQnLFxuICAgICdkaXInLFxuICAgICdkaXJ4bWwnLFxuICAgICdncm91cCcsXG4gICAgJ2dyb3VwQ29sbGFwc2VkJyxcbiAgICAnZ3JvdXBFbmQnLFxuICAgICd0cmFjZSdcbl07XG5mdW5jdGlvbiBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmUodmFsdWUsIHNlZW4pIHtcbiAgICBpZiAoc2VlbiA9PT0gdm9pZCAwKSBzZWVuID0gbmV3IFdlYWtNYXAoKTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIF9mb3J3YXJkbG9nc3NoYXJlZC5VTkRFRklORURfTUFSS0VSO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuIHNlZW4uZ2V0KHZhbHVlKTtcbiAgICB0cnkge1xuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gVU5BVkFJTEFCTEVfTUFSS0VSO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHJldHVybiBQUk9NSVNFX01BUktFUjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBVTkFWQUlMQUJMRV9NQVJLRVI7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBvdXQgPSBbXTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG91dCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSl7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG91dC5wdXNoKHByZUxvZ1NlcmlhbGl6YXRpb25DbG9uZShpdGVtLCBzZWVuKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgb3V0LnB1c2goVU5BVkFJTEFCTEVfTUFSS0VSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gICAgaWYgKHByb3RvID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG91dCA9IHt9O1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgb3V0KTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUpKXtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb3V0W2tleV0gPSBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmUodmFsdWVba2V5XSwgc2Vlbik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgb3V0W2tleV0gPSBVTkFWQUlMQUJMRV9NQVJLRVI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5jb25zdCBsb2dTdHJpbmdpZnkgPSAoZGF0YSk9PntcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQgIT0gbnVsbCA/IHJlc3VsdCA6ICdcIicgKyBVTkFWQUlMQUJMRV9NQVJLRVIgKyAnXCInO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuICdcIicgKyBVTkFWQUlMQUJMRV9NQVJLRVIgKyAnXCInO1xuICAgIH1cbn07XG5jb25zdCBhZnRlclRoaXNGcmFtZSA9IChjYik9PntcbiAgICBsZXQgdGltZW91dDtcbiAgICBjb25zdCByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH07XG59O1xubGV0IGlzUGF0Y2hlZCA9IGZhbHNlO1xuY29uc3Qgc2VyaWFsaXplRW50cmllcyA9IChlbnRyaWVzKT0+ZW50cmllcy5tYXAoKGNsaWVudEVudHJ5KT0+e1xuICAgICAgICBzd2l0Y2goY2xpZW50RW50cnkua2luZCl7XG4gICAgICAgICAgICBjYXNlICdhbnktbG9nZ2VkLWVycm9yJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbnNvbGUnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNsaWVudEVudHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogY2xpZW50RW50cnkuYXJncy5tYXAoc3RyaW5naWZ5VXNlckFyZylcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdmb3JtYXR0ZWQtZXJyb3InOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudEVudHJ5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbmNvbnN0IGxvZ1F1ZXVlID0ge1xuICAgIGVudHJpZXM6IFtdLFxuICAgIGZsdXNoU2NoZWR1bGVkOiBmYWxzZSxcbiAgICBjYW5jZWxGbHVzaDogbnVsbCxcbiAgICBzb2NrZXQ6IG51bGwsXG4gICAgc291cmNlVHlwZTogdW5kZWZpbmVkLFxuICAgIHJvdXRlcjogbnVsbCxcbiAgICBzY2hlZHVsZUxvZ1NlbmQ6IChlbnRyeSk9PntcbiAgICAgICAgbG9nUXVldWUuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgaWYgKGxvZ1F1ZXVlLmZsdXNoU2NoZWR1bGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2FmZSB0byBkZXJlZiBhbmQgdXNlIGluIHNldFRpbWVvdXQgY2xvc3VyZSBzaW5jZSB3ZSBjYW5jZWwgb24gbmV3IHNvY2tldFxuICAgICAgICBjb25zdCBzb2NrZXQgPSBsb2dRdWV1ZS5zb2NrZXQ7XG4gICAgICAgIGlmICghc29ja2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgcHJvYmFibHkgZG9udCBuZWVkIHRoaXNcbiAgICAgICAgbG9nUXVldWUuZmx1c2hTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgICAvLyBub24gYmxvY2tpbmcgbG9nIGZsdXNoLCBydW5zIGF0IG1vc3Qgb25jZSBwZXIgZnJhbWVcbiAgICAgICAgbG9nUXVldWUuY2FuY2VsRmx1c2ggPSBhZnRlclRoaXNGcmFtZSgoKT0+e1xuICAgICAgICAgICAgbG9nUXVldWUuZmx1c2hTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGp1c3QgaW5jYXNlXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnYnJvd3Nlci1sb2dzJyxcbiAgICAgICAgICAgICAgICAgICAgZW50cmllczogc2VyaWFsaXplRW50cmllcyhsb2dRdWV1ZS5lbnRyaWVzKSxcbiAgICAgICAgICAgICAgICAgICAgcm91dGVyOiBsb2dRdWV1ZS5yb3V0ZXIsXG4gICAgICAgICAgICAgICAgICAgIC8vIG5lZWRlZCBmb3Igc291cmNlIG1hcHBpbmcsIHdlIGp1c3QgYXNzaWduIHRoZSBzb3VyY2VUeXBlIGZyb20gdGhlIGxhc3QgZXJyb3IgZm9yIHRoZSB3aG9sZSBiYXRjaFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VUeXBlOiBsb2dRdWV1ZS5zb3VyY2VUeXBlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc29ja2V0LnNlbmQocGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgbG9nUXVldWUuZW50cmllcyA9IFtdO1xuICAgICAgICAgICAgICAgIGxvZ1F1ZXVlLnNvdXJjZVR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBlcnJvciAobWFrZSBzdXJlIHUgZG9uJ3QgaW5maW5pdGUgbG9vcClcbiAgICAgICAgICAgIC8qIG5vb3AgKi8gfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIG9uU29ja2V0UmVhZHk6IChzb2NrZXQpPT57XG4gICAgICAgIGlmIChzb2NrZXQucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgICAgICAgIC8vIGludmFyaWFudFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGluY2FzZSBhbiBleGlzdGluZyB0aW1lb3V0IHdhcyBnb2luZyB0byBydW4gd2l0aCBhIHN0YWxlIHNvY2tldFxuICAgICAgICBsb2dRdWV1ZS5jYW5jZWxGbHVzaCA9PSBudWxsID8gdm9pZCAwIDogbG9nUXVldWUuY2FuY2VsRmx1c2guY2FsbChsb2dRdWV1ZSk7XG4gICAgICAgIGxvZ1F1ZXVlLnNvY2tldCA9IHNvY2tldDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdicm93c2VyLWxvZ3MnLFxuICAgICAgICAgICAgICAgIGVudHJpZXM6IHNlcmlhbGl6ZUVudHJpZXMobG9nUXVldWUuZW50cmllcyksXG4gICAgICAgICAgICAgICAgcm91dGVyOiBsb2dRdWV1ZS5yb3V0ZXIsXG4gICAgICAgICAgICAgICAgc291cmNlVHlwZTogbG9nUXVldWUuc291cmNlVHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzb2NrZXQuc2VuZChwYXlsb2FkKTtcbiAgICAgICAgICAgIGxvZ1F1ZXVlLmVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgIGxvZ1F1ZXVlLnNvdXJjZVR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyoqIG5vb3AganVzdCBpbmNhc2UgKi8gfVxuICAgIH1cbn07XG5jb25zdCBzdHJpbmdpZnlVc2VyQXJnID0gKGFyZyk9PntcbiAgICBpZiAoYXJnLmtpbmQgIT09ICdhcmcnKSB7XG4gICAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFyZyxcbiAgICAgICAgZGF0YTogbG9nU3RyaW5naWZ5KGFyZy5kYXRhKVxuICAgIH07XG59O1xuY29uc3QgY3JlYXRlRXJyb3JBcmcgPSAoZXJyb3IpPT57XG4gICAgY29uc3Qgc3RhY2sgPSBzdGFja1dpdGhPd25lcnMoZXJyb3IpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdmb3JtYXR0ZWQtZXJyb3ItYXJnJyxcbiAgICAgICAgcHJlZml4OiBlcnJvci5tZXNzYWdlID8gZXJyb3IubmFtZSArIFwiOiBcIiArIGVycm9yLm1lc3NhZ2UgOiBcIlwiICsgZXJyb3IubmFtZSxcbiAgICAgICAgc3RhY2tcbiAgICB9O1xufTtcbmNvbnN0IGNyZWF0ZUxvZ0VudHJ5ID0gKGxldmVsLCBhcmdzKT0+e1xuICAgIC8vIGRvIG5vdCBhYnN0cmFjdCB0aGlzLCBpdCBpbXBsaWNpdGx5IHJlbGllcyBvbiB3aGljaCBmdW5jdGlvbnMgY2FsbCBpdC4gZm9yY2luZyB0aGUgaW5saW5lZCBpbXBsZW1lbnRhdGlvbiBtYWtlcyB5b3UgdGhpbmsgYWJvdXQgY2FsbGVyc1xuICAgIC8vIGVycm9yIGNhcHR1cmUgc3RhY2sgdHJhY2UgbWF5YmVcbiAgICBjb25zdCBzdGFjayA9IHN0YWNrV2l0aE93bmVycyhuZXcgRXJyb3IoKSk7XG4gICAgY29uc3Qgc3RhY2tMaW5lcyA9IHN0YWNrID09IG51bGwgPyB2b2lkIDAgOiBzdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgY2xlYW5TdGFjayA9IHN0YWNrTGluZXMgPT0gbnVsbCA/IHZvaWQgMCA6IHN0YWNrTGluZXMuc2xpY2UoMykuam9pbignXFxuJykgLy8gdGhpcyBpcyBwcm9iYWJseSBpZ25vcmVkIGFueXdheXNcbiAgICA7XG4gICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgIGtpbmQ6ICdjb25zb2xlJyxcbiAgICAgICAgY29uc29sZU1ldGhvZFN0YWNrOiBjbGVhblN0YWNrICE9IG51bGwgPyBjbGVhblN0YWNrIDogbnVsbCxcbiAgICAgICAgbWV0aG9kOiBsZXZlbCxcbiAgICAgICAgYXJnczogYXJncy5tYXAoKGFyZyk9PntcbiAgICAgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVFcnJvckFyZyhhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBraW5kOiAnYXJnJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmUoYXJnKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICB9O1xuICAgIGxvZ1F1ZXVlLnNjaGVkdWxlTG9nU2VuZChlbnRyeSk7XG59O1xuY29uc3QgZm9yd2FyZEVycm9yTG9nID0gKGFyZ3MpPT57XG4gICAgY29uc3QgZXJyb3JPYmplY3RzID0gYXJncy5maWx0ZXIoKGFyZyk9PmFyZyBpbnN0YW5jZW9mIEVycm9yKTtcbiAgICBjb25zdCBmaXJzdCA9IGVycm9yT2JqZWN0cy5hdCgwKTtcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0gKDAsIF9lcnJvcnNvdXJjZS5nZXRFcnJvclNvdXJjZSkoZmlyc3QpO1xuICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICBsb2dRdWV1ZS5zb3VyY2VUeXBlID0gc291cmNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgKiBicm93c2VyIHNob3dzIHN0YWNrIHJlZ2FyZGxlc3Mgb2YgdHlwZSBvZiBkYXRhIHBhc3NlZCB0byBjb25zb2xlLmVycm9yLCBzbyB3ZSBzaG91bGQgZG8gdGhlIHNhbWVcbiAgICpcbiAgICogZG8gbm90IGFic3RyYWN0IHRoaXMsIGl0IGltcGxpY2l0bHkgcmVsaWVzIG9uIHdoaWNoIGZ1bmN0aW9ucyBjYWxsIGl0LiBmb3JjaW5nIHRoZSBpbmxpbmVkIGltcGxlbWVudGF0aW9uIG1ha2VzIHlvdSB0aGluayBhYm91dCBjYWxsZXJzXG4gICAqLyBjb25zdCBzdGFjayA9IHN0YWNrV2l0aE93bmVycyhuZXcgRXJyb3IoKSk7XG4gICAgY29uc3Qgc3RhY2tMaW5lcyA9IHN0YWNrID09IG51bGwgPyB2b2lkIDAgOiBzdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgY2xlYW5TdGFjayA9IHN0YWNrTGluZXMgPT0gbnVsbCA/IHZvaWQgMCA6IHN0YWNrTGluZXMuc2xpY2UoMykuam9pbignXFxuJyk7XG4gICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgIGtpbmQ6ICdhbnktbG9nZ2VkLWVycm9yJyxcbiAgICAgICAgbWV0aG9kOiAnZXJyb3InLFxuICAgICAgICBjb25zb2xlRXJyb3JTdGFjazogY2xlYW5TdGFjayAhPSBudWxsID8gY2xlYW5TdGFjayA6ICcnLFxuICAgICAgICBhcmdzOiBhcmdzLm1hcCgoYXJnKT0+e1xuICAgICAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUVycm9yQXJnKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdhcmcnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHByZUxvZ1NlcmlhbGl6YXRpb25DbG9uZShhcmcpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgIH07XG4gICAgbG9nUXVldWUuc2NoZWR1bGVMb2dTZW5kKGVudHJ5KTtcbn07XG5jb25zdCBjcmVhdGVVbmNhdWdodEVycm9yRW50cnkgPSAoZXJyb3JOYW1lLCBlcnJvck1lc3NhZ2UsIGZ1bGxTdGFjayk9PntcbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAga2luZDogJ2Zvcm1hdHRlZC1lcnJvcicsXG4gICAgICAgIHByZWZpeDogXCJVbmNhdWdodCBcIiArIGVycm9yTmFtZSArIFwiOiBcIiArIGVycm9yTWVzc2FnZSxcbiAgICAgICAgc3RhY2s6IGZ1bGxTdGFjayxcbiAgICAgICAgbWV0aG9kOiAnZXJyb3InXG4gICAgfTtcbiAgICBsb2dRdWV1ZS5zY2hlZHVsZUxvZ1NlbmQoZW50cnkpO1xufTtcbmNvbnN0IHN0YWNrV2l0aE93bmVycyA9IChlcnJvcik9PntcbiAgICBsZXQgb3duZXJTdGFjayA9ICcnO1xuICAgICgwLCBfc3RpdGNoZWRlcnJvci5zZXRPd25lclN0YWNrSWZBdmFpbGFibGUpKGVycm9yKTtcbiAgICBvd25lclN0YWNrID0gKDAsIF9zdGl0Y2hlZGVycm9yLmdldE93bmVyU3RhY2spKGVycm9yKSB8fCAnJztcbiAgICBjb25zdCBzdGFjayA9IChlcnJvci5zdGFjayB8fCAnJykgKyBvd25lclN0YWNrO1xuICAgIHJldHVybiBzdGFjaztcbn07XG5mdW5jdGlvbiBsb2dVbmhhbmRsZWRSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGNyZWF0ZVVuaGFuZGxlZFJlamVjdGlvbkVycm9yRW50cnkocmVhc29uLCBzdGFja1dpdGhPd25lcnMocmVhc29uKSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3JlYXRlVW5oYW5kbGVkUmVqZWN0aW9uTm9uRXJyb3JFbnRyeShyZWFzb24pO1xufVxuY29uc3QgY3JlYXRlVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3JFbnRyeSA9IChlcnJvciwgZnVsbFN0YWNrKT0+e1xuICAgIGNvbnN0IHNvdXJjZSA9ICgwLCBfZXJyb3Jzb3VyY2UuZ2V0RXJyb3JTb3VyY2UpKGVycm9yKTtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGxvZ1F1ZXVlLnNvdXJjZVR5cGUgPSBzb3VyY2U7XG4gICAgfVxuICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICBraW5kOiAnZm9ybWF0dGVkLWVycm9yJyxcbiAgICAgICAgcHJlZml4OiBcIuKoryB1bmhhbmRsZWRSZWplY3Rpb246IFwiICsgZXJyb3IubmFtZSArIFwiOiBcIiArIGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBmdWxsU3RhY2ssXG4gICAgICAgIG1ldGhvZDogJ2Vycm9yJ1xuICAgIH07XG4gICAgbG9nUXVldWUuc2NoZWR1bGVMb2dTZW5kKGVudHJ5KTtcbn07XG5jb25zdCBjcmVhdGVVbmhhbmRsZWRSZWplY3Rpb25Ob25FcnJvckVudHJ5ID0gKHJlYXNvbik9PntcbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAga2luZDogJ2FueS1sb2dnZWQtZXJyb3InLFxuICAgICAgICAvLyB3ZSBjYW4ndCBhY2Nlc3MgdGhlIHN0YWNrIHNpbmNlIHRoZSBldmVudCBpcyBkaXNwYXRjaGVkIGFzeW5jIGFuZCBjcmVhdGluZyBhbiBpbmxpbmUgZXJyb3Igd291bGQgYmUgbWVhbmluZ2xlc3NcbiAgICAgICAgY29uc29sZUVycm9yU3RhY2s6ICcnLFxuICAgICAgICBtZXRob2Q6ICdlcnJvcicsXG4gICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBraW5kOiAnYXJnJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBcIuKoryB1bmhhbmRsZWRSZWplY3Rpb246XCIsXG4gICAgICAgICAgICAgICAgaXNSZWplY3Rpb25NZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdhcmcnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHByZUxvZ1NlcmlhbGl6YXRpb25DbG9uZShyZWFzb24pXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9O1xuICAgIGxvZ1F1ZXVlLnNjaGVkdWxlTG9nU2VuZChlbnRyeSk7XG59O1xuY29uc3QgaXNITVIgPSAoYXJncyk9PntcbiAgICBjb25zdCBmaXJzdEFyZyA9IGFyZ3NbMF07XG4gICAgaWYgKHR5cGVvZiBmaXJzdEFyZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlyc3RBcmcuc3RhcnRzV2l0aCgnW0Zhc3QgUmVmcmVzaF0nKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGZpcnN0QXJnLnN0YXJ0c1dpdGgoJ1tITVJdJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5jb25zdCBpc0lnbm9yZWRMb2cgPSAoYXJncyk9PntcbiAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgW2Zvcm1hdCwgc3R5bGVzLCBsYWJlbF0gPSBhcmdzO1xuICAgIGlmICh0eXBlb2YgZm9ybWF0ICE9PSAnc3RyaW5nJyB8fCB0eXBlb2Ygc3R5bGVzICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8ga2luZGEgaGFja3ksIHdlIHNob3VsZCBkZWZpbmUgYSBjb21tb24gZm9ybWF0IGZvciB0aGVzZSBzdHJpbmdzIHNvIHdlIGNhbiBzYWZlbHkgaWdub3JlXG4gICAgcmV0dXJuIGZvcm1hdC5zdGFydHNXaXRoKCclYyVzJWMnKSAmJiBzdHlsZXMuaW5jbHVkZXMoJ2JhY2tncm91bmQ6Jyk7XG59O1xuZnVuY3Rpb24gZm9yd2FyZFVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gICAgY3JlYXRlVW5jYXVnaHRFcnJvckVudHJ5KGVycm9yLm5hbWUsIGVycm9yLm1lc3NhZ2UsIHN0YWNrV2l0aE93bmVycyhlcnJvcikpO1xufVxuY29uc3QgaW5pdGlhbGl6ZURlYnVnTG9nRm9yd2FyZGluZyA9IChyb3V0ZXIpPT57XG4gICAgLy8gcHJvYmFibHkgZG9uJ3QgbmVlZCB0aGlzXG4gICAgaWYgKGlzUGF0Y2hlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRPRE8ocm9iKTogd2h5IGRvZXMgdGhpcyBicmVhayByZW5kZXJpbmcgb24gc2VydmVyLCBpbXBvcnRhbnQgdG8ga25vdyBpbmNhc2UgdGhlIHNhbWUgYnVnIGFwcGVhcnMgaW4gYnJvd3NlclxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnlcbiAgICB0cnkge1xuICAgICAgICBtZXRob2RzLmZvckVhY2goKG1ldGhvZCk9PigwLCBfZm9yd2FyZGxvZ3NzaGFyZWQucGF0Y2hDb25zb2xlTWV0aG9kKShtZXRob2QsIGZ1bmN0aW9uKF8pIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzSE1SKGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzSWdub3JlZExvZyhhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvZ0VudHJ5KG1ldGhvZCwgYXJncyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICBsb2dRdWV1ZS5yb3V0ZXIgPSByb3V0ZXI7XG4gICAgaXNQYXRjaGVkID0gdHJ1ZTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcndhcmQtbG9ncy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js":
/*!******************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.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 getIsTerminalLoggingEnabled: function() {\n return getIsTerminalLoggingEnabled;\n },\n getTerminalLoggingConfig: function() {\n return getTerminalLoggingConfig;\n }\n});\nfunction getTerminalLoggingConfig() {\n try {\n return JSON.parse(\"false\" || 0);\n } catch (e) {\n return false;\n }\n}\nfunction getIsTerminalLoggingEnabled() {\n const config = getTerminalLoggingConfig();\n return Boolean(config);\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', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=terminal-logging-config.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL3Rlcm1pbmFsLWxvZ2dpbmctY29uZmlnLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUdMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSwwQkFBMEIsT0FBaUQsSUFBSSxDQUFPO0FBQ3RGLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS41LjRfcmVhY3QtZG9tQDE5LjEuMF9yZWFjdEAxOS4xLjBfX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC90ZXJtaW5hbC1sb2dnaW5nLWNvbmZpZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGdldElzVGVybWluYWxMb2dnaW5nRW5hYmxlZDogbnVsbCxcbiAgICBnZXRUZXJtaW5hbExvZ2dpbmdDb25maWc6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZ2V0SXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldElzVGVybWluYWxMb2dnaW5nRW5hYmxlZDtcbiAgICB9LFxuICAgIGdldFRlcm1pbmFsTG9nZ2luZ0NvbmZpZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRUZXJtaW5hbExvZ2dpbmdDb25maWc7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBnZXRUZXJtaW5hbExvZ2dpbmdDb25maWcoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocHJvY2Vzcy5lbnYuX19ORVhUX0JST1dTRVJfREVCVUdfSU5GT19JTl9URVJNSU5BTCB8fCAnZmFsc2UnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRJc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQoKSB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0VGVybWluYWxMb2dnaW5nQ29uZmlnKCk7XG4gICAgcmV0dXJuIEJvb2xlYW4oY29uZmlnKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGVybWluYWwtbG9nZ2luZy1jb25maWcuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/hydration-error-state.js":
/*!******************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/hydration-error-state.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 attachHydrationErrorState: function() {\n return attachHydrationErrorState;\n },\n getSquashedHydrationErrorDetails: function() {\n return getSquashedHydrationErrorDetails;\n },\n storeHydrationErrorStateFromConsoleArgs: function() {\n return storeHydrationErrorStateFromConsoleArgs;\n }\n});\nconst _react18hydrationerror = __webpack_require__(/*! ../../shared/react-18-hydration-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/shared/react-18-hydration-error.js\");\nconst _react19hydrationerror = __webpack_require__(/*! ../../shared/react-19-hydration-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/shared/react-19-hydration-error.js\");\n// We only need this for React 18 or hydration console errors in React 19.\n// Once we surface console.error in the dev overlay in pages router, we should only\n// use this for React 18.\nlet hydrationErrorState = {};\nconst squashedHydrationErrorDetails = new WeakMap();\nfunction getSquashedHydrationErrorDetails(error) {\n return squashedHydrationErrorDetails.has(error) ? squashedHydrationErrorDetails.get(error) : null;\n}\nfunction attachHydrationErrorState(error) {\n if (!(0, _react18hydrationerror.isHydrationError)(error) && !(0, _react19hydrationerror.isHydrationError)(error)) {\n return;\n }\n let parsedHydrationErrorState = {};\n // If there's any extra information in the error message to display,\n // append it to the error message details property\n if (hydrationErrorState.warning) {\n // The patched console.error found hydration errors logged by React\n // Append the logged warning to the error message\n parsedHydrationErrorState = {\n // It contains the warning, component stack, server and client tag names\n ...hydrationErrorState\n };\n // Consume the cached hydration diff.\n // This is only required for now when we still squashed the hydration diff log into hydration error.\n // Once the all error is logged to dev overlay in order, this will go away.\n if (hydrationErrorState.reactOutputComponentDiff) {\n parsedHydrationErrorState.reactOutputComponentDiff = hydrationErrorState.reactOutputComponentDiff;\n }\n squashedHydrationErrorDetails.set(error, parsedHydrationErrorState);\n }\n}\nfunction storeHydrationErrorStateFromConsoleArgs() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n let [message, firstContent, secondContent, ...rest] = args;\n if ((0, _react18hydrationerror.isHydrationWarning)(message)) {\n // Some hydration warnings has 4 arguments, some has 3, fallback to the last argument\n // when the 3rd argument is not the component stack but an empty string\n // For some warnings, there's only 1 argument for template.\n // The second argument is the diff or component stack.\n if (args.length === 3) {\n secondContent = '';\n }\n const warning = message.replace(/Warning: /, '').replace('%s', firstContent).replace('%s', secondContent)// remove the last %s from the message\n .replace(/%s/g, '');\n const lastArg = (rest[rest.length - 1] || '').trim();\n hydrationErrorState.reactOutputComponentDiff = generateHydrationDiffReact18(message, firstContent, secondContent, lastArg);\n hydrationErrorState.warning = warning;\n } else if ((0, _react19hydrationerror.isErrorMessageWithComponentStackDiff)(message)) {\n // Some hydration warnings has 4 arguments, some has 3, fallback to the last argument\n // when the 3rd argument is not the component stack but an empty string\n // For some warnings, there's only 1 argument for template.\n // The second argument is the diff or component stack.\n if (args.length === 3) {\n secondContent = '';\n }\n const warning = message.replace('%s', firstContent).replace('%s', secondContent)// remove the last %s from the message\n .replace(/%s/g, '');\n const lastArg = (args[args.length - 1] || '').trim();\n hydrationErrorState.reactOutputComponentDiff = lastArg;\n hydrationErrorState.warning = warning;\n }\n}\n/*\n * Some hydration errors in React 18 does not have the diff in the error message.\n * Instead it has the error stack trace which is component stack that we can leverage.\n * Will parse the diff from the error stack trace\n * e.g.\n * Warning: Expected server HTML to contain a matching <div> in <p>.\n * at div\n * at p\n * at div\n * at div\n * at Page\n * output:\n * <Page>\n * <div>\n * <p>\n * > <div>\n *\n */ function generateHydrationDiffReact18(message, firstContent, secondContent, lastArg) {\n const componentStack = lastArg;\n let firstIndex = -1;\n let secondIndex = -1;\n const hydrationWarningType = (0, _react18hydrationerror.getHydrationWarningType)(message);\n // at div\\n at Foo\\n at Bar (....)\\n -> [div, Foo]\n const components = componentStack.split('\\n')// .reverse()\n .map((line, index)=>{\n // `<space>at <component> (<location>)` -> `at <component> (<location>)`\n line = line.trim();\n // extract `<space>at <component>` to `<<component>>`\n // e.g. ` at Foo` -> `<Foo>`\n const [, component, location] = /at (\\w+)( \\((.*)\\))?/.exec(line) || [];\n // If there's no location then it's user-land stack frame\n if (!location) {\n if (component === firstContent && firstIndex === -1) {\n firstIndex = index;\n } else if (component === secondContent && secondIndex === -1) {\n secondIndex = index;\n }\n }\n return location ? '' : component;\n }).filter(Boolean).reverse();\n let diff = '';\n for(let i = 0; i < components.length; i++){\n const component = components[i];\n const matchFirstContent = hydrationWarningType === 'tag' && i === components.length - firstIndex - 1;\n const matchSecondContent = hydrationWarningType === 'tag' && i === components.length - secondIndex - 1;\n if (matchFirstContent || matchSecondContent) {\n const spaces = ' '.repeat(Math.max(i * 2 - 2, 0) + 2);\n diff += \"> \" + spaces + \"<\" + component + \">\\n\";\n } else {\n const spaces = ' '.repeat(i * 2 + 2);\n diff += spaces + \"<\" + component + \">\\n\";\n }\n }\n if (hydrationWarningType === 'text') {\n const spaces = ' '.repeat(components.length * 2);\n diff += \"+ \" + spaces + '\"' + firstContent + '\"\\n';\n diff += \"- \" + spaces + '\"' + secondContent + '\"\\n';\n } else if (hydrationWarningType === 'text-in-tag') {\n const spaces = ' '.repeat(components.length * 2);\n diff += \"> \" + spaces + \"<\" + secondContent + \">\\n\";\n diff += \"> \" + spaces + '\"' + firstContent + '\"\\n';\n }\n return diff;\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', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=hydration-error-state.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvcGFnZXMvaHlkcmF0aW9uLWVycm9yLXN0YXRlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUlMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsK0JBQStCLG1CQUFPLENBQUMsdU5BQXVDO0FBQzlFLCtCQUErQixtQkFBTyxDQUFDLHVOQUF1QztBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLGFBQWE7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsbUJBQW1CLHVCQUF1QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNS40X3JlYWN0LWRvbUAxOS4xLjBfcmVhY3RAMTkuMS4wX19yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9wYWdlcy9oeWRyYXRpb24tZXJyb3Itc3RhdGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhdHRhY2hIeWRyYXRpb25FcnJvclN0YXRlOiBudWxsLFxuICAgIGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOiBudWxsLFxuICAgIHN0b3JlSHlkcmF0aW9uRXJyb3JTdGF0ZUZyb21Db25zb2xlQXJnczogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBhdHRhY2hIeWRyYXRpb25FcnJvclN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGF0dGFjaEh5ZHJhdGlvbkVycm9yU3RhdGU7XG4gICAgfSxcbiAgICBnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlsczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscztcbiAgICB9LFxuICAgIHN0b3JlSHlkcmF0aW9uRXJyb3JTdGF0ZUZyb21Db25zb2xlQXJnczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdG9yZUh5ZHJhdGlvbkVycm9yU3RhdGVGcm9tQ29uc29sZUFyZ3M7XG4gICAgfVxufSk7XG5jb25zdCBfcmVhY3QxOGh5ZHJhdGlvbmVycm9yID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9yZWFjdC0xOC1oeWRyYXRpb24tZXJyb3JcIik7XG5jb25zdCBfcmVhY3QxOWh5ZHJhdGlvbmVycm9yID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9yZWFjdC0xOS1oeWRyYXRpb24tZXJyb3JcIik7XG4vLyBXZSBvbmx5IG5lZWQgdGhpcyBmb3IgUmVhY3QgMTggb3IgaHlkcmF0aW9uIGNvbnNvbGUgZXJyb3JzIGluIFJlYWN0IDE5LlxuLy8gT25jZSB3ZSBzdXJmYWNlIGNvbnNvbGUuZXJyb3IgaW4gdGhlIGRldiBvdmVybGF5IGluIHBhZ2VzIHJvdXRlciwgd2Ugc2hvdWxkIG9ubHlcbi8vIHVzZSB0aGlzIGZvciBSZWFjdCAxOC5cbmxldCBoeWRyYXRpb25FcnJvclN0YXRlID0ge307XG5jb25zdCBzcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscyA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscyhlcnJvcikge1xuICAgIHJldHVybiBzcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscy5oYXMoZXJyb3IpID8gc3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMuZ2V0KGVycm9yKSA6IG51bGw7XG59XG5mdW5jdGlvbiBhdHRhY2hIeWRyYXRpb25FcnJvclN0YXRlKGVycm9yKSB7XG4gICAgaWYgKCEoMCwgX3JlYWN0MThoeWRyYXRpb25lcnJvci5pc0h5ZHJhdGlvbkVycm9yKShlcnJvcikgJiYgISgwLCBfcmVhY3QxOWh5ZHJhdGlvbmVycm9yLmlzSHlkcmF0aW9uRXJyb3IpKGVycm9yKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBwYXJzZWRIeWRyYXRpb25FcnJvclN0YXRlID0ge307XG4gICAgLy8gSWYgdGhlcmUncyBhbnkgZXh0cmEgaW5mb3JtYXRpb24gaW4gdGhlIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSxcbiAgICAvLyBhcHBlbmQgaXQgdG8gdGhlIGVycm9yIG1lc3NhZ2UgZGV0YWlscyBwcm9wZXJ0eVxuICAgIGlmIChoeWRyYXRpb25FcnJvclN0YXRlLndhcm5pbmcpIHtcbiAgICAgICAgLy8gVGhlIHBhdGNoZWQgY29uc29sZS5lcnJvciBmb3VuZCBoeWRyYXRpb24gZXJyb3JzIGxvZ2dlZCBieSBSZWFjdFxuICAgICAgICAvLyBBcHBlbmQgdGhlIGxvZ2dlZCB3YXJuaW5nIHRvIHRoZSBlcnJvciBtZXNzYWdlXG4gICAgICAgIHBhcnNlZEh5ZHJhdGlvbkVycm9yU3RhdGUgPSB7XG4gICAgICAgICAgICAvLyBJdCBjb250YWlucyB0aGUgd2FybmluZywgY29tcG9uZW50IHN0YWNrLCBzZXJ2ZXIgYW5kIGNsaWVudCB0YWcgbmFtZXNcbiAgICAgICAgICAgIC4uLmh5ZHJhdGlvbkVycm9yU3RhdGVcbiAgICAgICAgfTtcbiAgICAgICAgLy8gQ29uc3VtZSB0aGUgY2FjaGVkIGh5ZHJhdGlvbiBkaWZmLlxuICAgICAgICAvLyBUaGlzIGlzIG9ubHkgcmVxdWlyZWQgZm9yIG5vdyB3aGVuIHdlIHN0aWxsIHNxdWFzaGVkIHRoZSBoeWRyYXRpb24gZGlmZiBsb2cgaW50byBoeWRyYXRpb24gZXJyb3IuXG4gICAgICAgIC8vIE9uY2UgdGhlIGFsbCBlcnJvciBpcyBsb2dnZWQgdG8gZGV2IG92ZXJsYXkgaW4gb3JkZXIsIHRoaXMgd2lsbCBnbyBhd2F5LlxuICAgICAgICBpZiAoaHlkcmF0aW9uRXJyb3JTdGF0ZS5yZWFjdE91dHB1dENvbXBvbmVudERpZmYpIHtcbiAgICAgICAgICAgIHBhcnNlZEh5ZHJhdGlvbkVycm9yU3RhdGUucmVhY3RPdXRwdXRDb21wb25lbnREaWZmID0gaHlkcmF0aW9uRXJyb3JTdGF0ZS5yZWFjdE91dHB1dENvbXBvbmVudERpZmY7XG4gICAgICAgIH1cbiAgICAgICAgc3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMuc2V0KGVycm9yLCBwYXJzZWRIeWRyYXRpb25FcnJvclN0YXRlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzdG9yZUh5ZHJhdGlvbkVycm9yU3RhdGVGcm9tQ29uc29sZUFyZ3MoKSB7XG4gICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBsZXQgW21lc3NhZ2UsIGZpcnN0Q29udGVudCwgc2Vjb25kQ29udGVudCwgLi4ucmVzdF0gPSBhcmdzO1xuICAgIGlmICgoMCwgX3JlYWN0MThoeWRyYXRpb25lcnJvci5pc0h5ZHJhdGlvbldhcm5pbmcpKG1lc3NhZ2UpKSB7XG4gICAgICAgIC8vIFNvbWUgaHlkcmF0aW9uIHdhcm5pbmdzIGhhcyA0IGFyZ3VtZW50cywgc29tZSBoYXMgMywgZmFsbGJhY2sgdG8gdGhlIGxhc3QgYXJndW1lbnRcbiAgICAgICAgLy8gd2hlbiB0aGUgM3JkIGFyZ3VtZW50IGlzIG5vdCB0aGUgY29tcG9uZW50IHN0YWNrIGJ1dCBhbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgLy8gRm9yIHNvbWUgd2FybmluZ3MsIHRoZXJlJ3Mgb25seSAxIGFyZ3VtZW50IGZvciB0ZW1wbGF0ZS5cbiAgICAgICAgLy8gVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgZGlmZiBvciBjb21wb25lbnQgc3RhY2suXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgc2Vjb25kQ29udGVudCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdhcm5pbmcgPSBtZXNzYWdlLnJlcGxhY2UoL1dhcm5pbmc6IC8sICcnKS5yZXBsYWNlKCclcycsIGZpcnN0Q29udGVudCkucmVwbGFjZSgnJXMnLCBzZWNvbmRDb250ZW50KS8vIHJlbW92ZSB0aGUgbGFzdCAlcyBmcm9tIHRoZSBtZXNzYWdlXG4gICAgICAgIC5yZXBsYWNlKC8lcy9nLCAnJyk7XG4gICAgICAgIGNvbnN0IGxhc3RBcmcgPSAocmVzdFtyZXN0Lmxlbmd0aCAtIDFdIHx8ICcnKS50cmltKCk7XG4gICAgICAgIGh5ZHJhdGlvbkVycm9yU3RhdGUucmVhY3RPdXRwdXRDb21wb25lbnREaWZmID0gZ2VuZXJhdGVIeWRyYXRpb25EaWZmUmVhY3QxOChtZXNzYWdlLCBmaXJzdENvbnRlbnQsIHNlY29uZENvbnRlbnQsIGxhc3RBcmcpO1xuICAgICAgICBoeWRyYXRpb25FcnJvclN0YXRlLndhcm5pbmcgPSB3YXJuaW5nO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9yZWFjdDE5aHlkcmF0aW9uZXJyb3IuaXNFcnJvck1lc3NhZ2VXaXRoQ29tcG9uZW50U3RhY2tEaWZmKShtZXNzYWdlKSkge1xuICAgICAgICAvLyBTb21lIGh5ZHJhdGlvbiB3YXJuaW5ncyBoYXMgNCBhcmd1bWVudHMsIHNvbWUgaGFzIDMsIGZhbGxiYWNrIHRvIHRoZSBsYXN0IGFyZ3VtZW50XG4gICAgICAgIC8vIHdoZW4gdGhlIDNyZCBhcmd1bWVudCBpcyBub3QgdGhlIGNvbXBvbmVudCBzdGFjayBidXQgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIC8vIEZvciBzb21lIHdhcm5pbmdzLCB0aGVyZSdzIG9ubHkgMSBhcmd1bWVudCBmb3IgdGVtcGxhdGUuXG4gICAgICAgIC8vIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGRpZmYgb3IgY29tcG9uZW50IHN0YWNrLlxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHNlY29uZENvbnRlbnQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3YXJuaW5nID0gbWVzc2FnZS5yZXBsYWNlKCclcycsIGZpcnN0Q29udGVudCkucmVwbGFjZSgnJXMnLCBzZWNvbmRDb250ZW50KS8vIHJlbW92ZSB0aGUgbGFzdCAlcyBmcm9tIHRoZSBtZXNzYWdlXG4gICAgICAgIC5yZXBsYWNlKC8lcy9nLCAnJyk7XG4gICAgICAgIGNvbnN0IGxhc3RBcmcgPSAoYXJnc1thcmdzLmxlbmd0aCAtIDFdIHx8ICcnKS50cmltKCk7XG4gICAgICAgIGh5ZHJhdGlvbkVycm9yU3RhdGUucmVhY3RPdXRwdXRDb21wb25lbnREaWZmID0gbGFzdEFyZztcbiAgICAgICAgaHlkcmF0aW9uRXJyb3JTdGF0ZS53YXJuaW5nID0gd2FybmluZztcbiAgICB9XG59XG4vKlxuICogU29tZSBoeWRyYXRpb24gZXJyb3JzIGluIFJlYWN0IDE4IGRvZXMgbm90IGhhdmUgdGhlIGRpZmYgaW4gdGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBJbnN0ZWFkIGl0IGhhcyB0aGUgZXJyb3Igc3RhY2sgdHJhY2Ugd2hpY2ggaXMgY29tcG9uZW50IHN0YWNrIHRoYXQgd2UgY2FuIGxldmVyYWdlLlxuICogV2lsbCBwYXJzZSB0aGUgZGlmZiBmcm9tIHRoZSBlcnJvciBzdGFjayB0cmFjZVxuICogIGUuZy5cbiAqICBXYXJuaW5nOiBFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgPGRpdj4gaW4gPHA+LlxuICogICAgYXQgZGl2XG4gKiAgICBhdCBwXG4gKiAgICBhdCBkaXZcbiAqICAgIGF0IGRpdlxuICogICAgYXQgUGFnZVxuICogIG91dHB1dDpcbiAqICAgIDxQYWdlPlxuICogICAgICA8ZGl2PlxuICogICAgICAgIDxwPlxuICogID4gICAgICAgPGRpdj5cbiAqXG4gKi8gZnVuY3Rpb24gZ2VuZXJhdGVIeWRyYXRpb25EaWZmUmVhY3QxOChtZXNzYWdlLCBmaXJzdENvbnRlbnQsIHNlY29uZENvbnRlbnQsIGxhc3RBcmcpIHtcbiAgICBjb25zdCBjb21wb25lbnRTdGFjayA9IGxhc3RBcmc7XG4gICAgbGV0IGZpcnN0SW5kZXggPSAtMTtcbiAgICBsZXQgc2Vjb25kSW5kZXggPSAtMTtcbiAgICBjb25zdCBoeWRyYXRpb25XYXJuaW5nVHlwZSA9ICgwLCBfcmVhY3QxOGh5ZHJhdGlvbmVycm9yLmdldEh5ZHJhdGlvbldhcm5pbmdUeXBlKShtZXNzYWdlKTtcbiAgICAvLyBhdCBkaXZcXG4gYXQgRm9vXFxuIGF0IEJhciAoLi4uLilcXG4gLT4gW2RpdiwgRm9vXVxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb21wb25lbnRTdGFjay5zcGxpdCgnXFxuJykvLyAucmV2ZXJzZSgpXG4gICAgLm1hcCgobGluZSwgaW5kZXgpPT57XG4gICAgICAgIC8vIGA8c3BhY2U+YXQgPGNvbXBvbmVudD4gKDxsb2NhdGlvbj4pYCAtPiBgYXQgPGNvbXBvbmVudD4gKDxsb2NhdGlvbj4pYFxuICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XG4gICAgICAgIC8vIGV4dHJhY3QgYDxzcGFjZT5hdCA8Y29tcG9uZW50PmAgdG8gYDw8Y29tcG9uZW50Pj5gXG4gICAgICAgIC8vIGUuZy4gYCAgYXQgRm9vYCAtPiBgPEZvbz5gXG4gICAgICAgIGNvbnN0IFssIGNvbXBvbmVudCwgbG9jYXRpb25dID0gL2F0IChcXHcrKSggXFwoKC4qKVxcKSk/Ly5leGVjKGxpbmUpIHx8IFtdO1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGxvY2F0aW9uIHRoZW4gaXQncyB1c2VyLWxhbmQgc3RhY2sgZnJhbWVcbiAgICAgICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCA9PT0gZmlyc3RDb250ZW50ICYmIGZpcnN0SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wb25lbnQgPT09IHNlY29uZENvbnRlbnQgJiYgc2Vjb25kSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgc2Vjb25kSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYXRpb24gPyAnJyA6IGNvbXBvbmVudDtcbiAgICB9KS5maWx0ZXIoQm9vbGVhbikucmV2ZXJzZSgpO1xuICAgIGxldCBkaWZmID0gJyc7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoOyBpKyspe1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb21wb25lbnRzW2ldO1xuICAgICAgICBjb25zdCBtYXRjaEZpcnN0Q29udGVudCA9IGh5ZHJhdGlvbldhcm5pbmdUeXBlID09PSAndGFnJyAmJiBpID09PSBjb21wb25lbnRzLmxlbmd0aCAtIGZpcnN0SW5kZXggLSAxO1xuICAgICAgICBjb25zdCBtYXRjaFNlY29uZENvbnRlbnQgPSBoeWRyYXRpb25XYXJuaW5nVHlwZSA9PT0gJ3RhZycgJiYgaSA9PT0gY29tcG9uZW50cy5sZW5ndGggLSBzZWNvbmRJbmRleCAtIDE7XG4gICAgICAgIGlmIChtYXRjaEZpcnN0Q29udGVudCB8fCBtYXRjaFNlY29uZENvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNlcyA9ICcgJy5yZXBlYXQoTWF0aC5tYXgoaSAqIDIgLSAyLCAwKSArIDIpO1xuICAgICAgICAgICAgZGlmZiArPSBcIj4gXCIgKyBzcGFjZXMgKyBcIjxcIiArIGNvbXBvbmVudCArIFwiPlxcblwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3BhY2VzID0gJyAnLnJlcGVhdChpICogMiArIDIpO1xuICAgICAgICAgICAgZGlmZiArPSBzcGFjZXMgKyBcIjxcIiArIGNvbXBvbmVudCArIFwiPlxcblwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChoeWRyYXRpb25XYXJuaW5nVHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIGNvbnN0IHNwYWNlcyA9ICcgJy5yZXBlYXQoY29tcG9uZW50cy5sZW5ndGggKiAyKTtcbiAgICAgICAgZGlmZiArPSBcIisgXCIgKyBzcGFjZXMgKyAnXCInICsgZmlyc3RDb250ZW50ICsgJ1wiXFxuJztcbiAgICAgICAgZGlmZiArPSBcIi0gXCIgKyBzcGFjZXMgKyAnXCInICsgc2Vjb25kQ29udGVudCArICdcIlxcbic7XG4gICAgfSBlbHNlIGlmIChoeWRyYXRpb25XYXJuaW5nVHlwZSA9PT0gJ3RleHQtaW4tdGFnJykge1xuICAgICAgICBjb25zdCBzcGFjZXMgPSAnICcucmVwZWF0KGNvbXBvbmVudHMubGVuZ3RoICogMik7XG4gICAgICAgIGRpZmYgKz0gXCI+IFwiICsgc3BhY2VzICsgXCI8XCIgKyBzZWNvbmRDb250ZW50ICsgXCI+XFxuXCI7XG4gICAgICAgIGRpZmYgKz0gXCI+ICAgXCIgKyBzcGFjZXMgKyAnXCInICsgZmlyc3RDb250ZW50ICsgJ1wiXFxuJztcbiAgICB9XG4gICAgcmV0dXJuIGRpZmY7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh5ZHJhdGlvbi1lcnJvci1zdGF0ZS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/hydration-error-state.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-error-boundary.js":
/*!*****************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-error-boundary.js ***!
\*****************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"PagesDevOverlayErrorBoundary\", ({\n enumerable: true,\n get: function() {\n return PagesDevOverlayErrorBoundary;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nclass PagesDevOverlayErrorBoundary extends _react.default.PureComponent {\n static getDerivedStateFromError(error) {\n return {\n error\n };\n }\n // Explicit type is needed to avoid the generated `.d.ts` having a wide return type that could be specific to the `@types/react` version.\n render() {\n // The component has to be unmounted or else it would continue to error\n return this.state.error ? null : this.props.children;\n }\n constructor(...args){\n super(...args), this.state = {\n error: null\n };\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', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=pages-dev-overlay-error-boundary.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvcGFnZXMvcGFnZXMtZGV2LW92ZXJsYXktZXJyb3ItYm91bmRhcnkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixnRUFBK0Q7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRixpQ0FBaUMsbUJBQU8sQ0FBQyx1S0FBeUM7QUFDbEYsd0RBQXdELG1CQUFPLENBQUMsZ0dBQU87QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS41LjRfcmVhY3QtZG9tQDE5LjEuMF9yZWFjdEAxOS4xLjBfX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL3BhZ2VzL3BhZ2VzLWRldi1vdmVybGF5LWVycm9yLWJvdW5kYXJ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGFnZXNEZXZPdmVybGF5RXJyb3JCb3VuZGFyeVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUGFnZXNEZXZPdmVybGF5RXJyb3JCb3VuZGFyeTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jbGFzcyBQYWdlc0Rldk92ZXJsYXlFcnJvckJvdW5kYXJ5IGV4dGVuZHMgX3JlYWN0LmRlZmF1bHQuUHVyZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gRXhwbGljaXQgdHlwZSBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlIGdlbmVyYXRlZCBgLmQudHNgIGhhdmluZyBhIHdpZGUgcmV0dXJuIHR5cGUgdGhhdCBjb3VsZCBiZSBzcGVjaWZpYyB0byB0aGUgYEB0eXBlcy9yZWFjdGAgdmVyc2lvbi5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIC8vIFRoZSBjb21wb25lbnQgaGFzIHRvIGJlIHVubW91bnRlZCBvciBlbHNlIGl0IHdvdWxkIGNvbnRpbnVlIHRvIGVycm9yXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmVycm9yID8gbnVsbCA6IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKSwgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWdlcy1kZXYtb3ZlcmxheS1lcnJvci1ib3VuZGFyeS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-error-boundary.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.js":
/*!********************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.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 PagesDevOverlayBridge: function() {\n return PagesDevOverlayBridge;\n },\n register: function() {\n return register;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/next-devtools/index.js\");\nconst _hydrationerrorstate = __webpack_require__(/*! ./hydration-error-state */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/hydration-error-state.js\");\nconst _router = __webpack_require__(/*! ../../../client/router */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/router.js\");\nconst _stitchederror = __webpack_require__(/*! ../app/errors/stitched-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\nconst _onrecoverableerror = __webpack_require__(/*! ../../../client/react-client-callbacks/on-recoverable-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js\");\nconst _pagesdevoverlayerrorboundary = __webpack_require__(/*! ./pages-dev-overlay-error-boundary */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-error-boundary.js\");\nconst _forwardlogs = __webpack_require__(/*! ../app/forward-logs */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\");\nconst usePagesDevOverlayBridge = ()=>{\n _react.default.useInsertionEffect(()=>{\n // NDT uses a different React instance so it's not technically a state update\n // scheduled from useInsertionEffect.\n (0, _nextdevtools.renderPagesDevOverlay)(_stitchederror.getOwnerStack, _hydrationerrorstate.getSquashedHydrationErrorDetails, _onrecoverableerror.isRecoverableError);\n }, []);\n _react.default.useEffect(()=>{\n const { handleStaticIndicator } = __webpack_require__(/*! ../../../client/dev/hot-reloader/pages/hot-reloader-pages */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js\");\n _router.Router.events.on('routeChangeComplete', handleStaticIndicator);\n return function() {\n _router.Router.events.off('routeChangeComplete', handleStaticIndicator);\n };\n }, []);\n};\nfunction PagesDevOverlayBridge(param) {\n let { children } = param;\n usePagesDevOverlayBridge();\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_pagesdevoverlayerrorboundary.PagesDevOverlayErrorBoundary, {\n children: children\n });\n}\nlet isRegistered = false;\nfunction handleError(error) {\n if (!error || !(error instanceof Error) || typeof error.stack !== 'string') {\n // A non-error was thrown, we don't have anything to show. :-(\n return;\n }\n (0, _hydrationerrorstate.attachHydrationErrorState)(error);\n // Skip ModuleBuildError and ModuleNotFoundError, as it will be sent through onBuildError callback.\n // This is to avoid same error as different type showing up on client to cause flashing.\n if (error.name !== 'ModuleBuildError' && error.name !== 'ModuleNotFoundError') {\n _nextdevtools.dispatcher.onUnhandledError(error);\n }\n}\nlet origConsoleError = console.error;\nfunction nextJsHandleConsoleError() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n // See https://github.com/facebook/react/blob/d50323eb845c5fde0d720cae888bf35dedd05506/packages/react-reconciler/src/ReactFiberErrorLogger.js#L78\n const maybeError = true ? args[1] : 0;\n (0, _hydrationerrorstate.storeHydrationErrorStateFromConsoleArgs)(...args);\n // TODO: Surfaces non-errors logged via `console.error`.\n handleError(maybeError);\n if (_forwardlogs.isTerminalLoggingEnabled) {\n (0, _forwardlogs.forwardErrorLog)(args);\n }\n origConsoleError.apply(window.console, args);\n}\nfunction onUnhandledError(event) {\n const error = event == null ? void 0 : event.error;\n handleError(error);\n if (error && _forwardlogs.isTerminalLoggingEnabled) {\n (0, _forwardlogs.forwardUnhandledError)(error);\n }\n}\nfunction onUnhandledRejection(ev) {\n const reason = ev == null ? void 0 : ev.reason;\n if (!reason || !(reason instanceof Error) || typeof reason.stack !== 'string') {\n // A non-error was thrown, we don't have anything to show. :-(\n return;\n }\n _nextdevtools.dispatcher.onUnhandledRejection(reason);\n if (_forwardlogs.isTerminalLoggingEnabled) {\n (0, _forwardlogs.logUnhandledRejection)(reason);\n }\n}\nfunction register() {\n if (isRegistered) {\n return;\n }\n isRegistered = true;\n try {\n Error.stackTraceLimit = 50;\n } catch (e) {}\n if (_forwardlogs.isTerminalLoggingEnabled) {\n (0, _forwardlogs.initializeDebugLogForwarding)('pages');\n }\n window.addEventListener('error', onUnhandledError);\n window.addEventListener('unhandledrejection', onUnhandledRejection);\n window.console.error = nextJsHandleConsoleError;\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', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=pages-dev-overlay-setup.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvcGFnZXMvcGFnZXMtZGV2LW92ZXJsYXktc2V0dXAuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBR0w7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsaUNBQWlDLG1CQUFPLENBQUMsdUtBQXlDO0FBQ2xGLG9CQUFvQixtQkFBTyxDQUFDLGtIQUFtQjtBQUMvQyx3REFBd0QsbUJBQU8sQ0FBQyxnR0FBTztBQUN2RSxzQkFBc0IsbUJBQU8sQ0FBQyxpTUFBa0M7QUFDaEUsNkJBQTZCLG1CQUFPLENBQUMsK01BQXlCO0FBQzlELGdCQUFnQixtQkFBTyxDQUFDLHdLQUF3QjtBQUNoRCx1QkFBdUIsbUJBQU8sQ0FBQyxrTkFBOEI7QUFDN0QsNEJBQTRCLG1CQUFPLENBQUMsa1BBQTZEO0FBQ2pHLHNDQUFzQyxtQkFBTyxDQUFDLHFPQUFvQztBQUNsRixxQkFBcUIsbUJBQU8sQ0FBQyxnTUFBcUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGdCQUFnQix3QkFBd0IsRUFBRSxtQkFBTyxDQUFDLDhPQUEyRDtBQUM3RztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsVUFBVSxXQUFXO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxhQUFhO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixLQUFxQyxhQUFhLENBQU87QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvcGFnZXMvcGFnZXMtZGV2LW92ZXJsYXktc2V0dXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBQYWdlc0Rldk92ZXJsYXlCcmlkZ2U6IG51bGwsXG4gICAgcmVnaXN0ZXI6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgUGFnZXNEZXZPdmVybGF5QnJpZGdlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBhZ2VzRGV2T3ZlcmxheUJyaWRnZTtcbiAgICB9LFxuICAgIHJlZ2lzdGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX25leHRkZXZ0b29scyA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1kZXZ0b29sc1wiKTtcbmNvbnN0IF9oeWRyYXRpb25lcnJvcnN0YXRlID0gcmVxdWlyZShcIi4vaHlkcmF0aW9uLWVycm9yLXN0YXRlXCIpO1xuY29uc3QgX3JvdXRlciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvcm91dGVyXCIpO1xuY29uc3QgX3N0aXRjaGVkZXJyb3IgPSByZXF1aXJlKFwiLi4vYXBwL2Vycm9ycy9zdGl0Y2hlZC1lcnJvclwiKTtcbmNvbnN0IF9vbnJlY292ZXJhYmxlZXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L3JlYWN0LWNsaWVudC1jYWxsYmFja3Mvb24tcmVjb3ZlcmFibGUtZXJyb3JcIik7XG5jb25zdCBfcGFnZXNkZXZvdmVybGF5ZXJyb3Jib3VuZGFyeSA9IHJlcXVpcmUoXCIuL3BhZ2VzLWRldi1vdmVybGF5LWVycm9yLWJvdW5kYXJ5XCIpO1xuY29uc3QgX2ZvcndhcmRsb2dzID0gcmVxdWlyZShcIi4uL2FwcC9mb3J3YXJkLWxvZ3NcIik7XG5jb25zdCB1c2VQYWdlc0Rldk92ZXJsYXlCcmlkZ2UgPSAoKT0+e1xuICAgIF9yZWFjdC5kZWZhdWx0LnVzZUluc2VydGlvbkVmZmVjdCgoKT0+e1xuICAgICAgICAvLyBORFQgdXNlcyBhIGRpZmZlcmVudCBSZWFjdCBpbnN0YW5jZSBzbyBpdCdzIG5vdCB0ZWNobmljYWxseSBhIHN0YXRlIHVwZGF0ZVxuICAgICAgICAvLyBzY2hlZHVsZWQgZnJvbSB1c2VJbnNlcnRpb25FZmZlY3QuXG4gICAgICAgICgwLCBfbmV4dGRldnRvb2xzLnJlbmRlclBhZ2VzRGV2T3ZlcmxheSkoX3N0aXRjaGVkZXJyb3IuZ2V0T3duZXJTdGFjaywgX2h5ZHJhdGlvbmVycm9yc3RhdGUuZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMsIF9vbnJlY292ZXJhYmxlZXJyb3IuaXNSZWNvdmVyYWJsZUVycm9yKTtcbiAgICB9LCBbXSk7XG4gICAgX3JlYWN0LmRlZmF1bHQudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGNvbnN0IHsgaGFuZGxlU3RhdGljSW5kaWNhdG9yIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9jbGllbnQvZGV2L2hvdC1yZWxvYWRlci9wYWdlcy9ob3QtcmVsb2FkZXItcGFnZXMnKTtcbiAgICAgICAgX3JvdXRlci5Sb3V0ZXIuZXZlbnRzLm9uKCdyb3V0ZUNoYW5nZUNvbXBsZXRlJywgaGFuZGxlU3RhdGljSW5kaWNhdG9yKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgX3JvdXRlci5Sb3V0ZXIuZXZlbnRzLm9mZigncm91dGVDaGFuZ2VDb21wbGV0ZScsIGhhbmRsZVN0YXRpY0luZGljYXRvcik7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xufTtcbmZ1bmN0aW9uIFBhZ2VzRGV2T3ZlcmxheUJyaWRnZShwYXJhbSkge1xuICAgIGxldCB7IGNoaWxkcmVuIH0gPSBwYXJhbTtcbiAgICB1c2VQYWdlc0Rldk92ZXJsYXlCcmlkZ2UoKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfcGFnZXNkZXZvdmVybGF5ZXJyb3Jib3VuZGFyeS5QYWdlc0Rldk92ZXJsYXlFcnJvckJvdW5kYXJ5LCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pO1xufVxubGV0IGlzUmVnaXN0ZXJlZCA9IGZhbHNlO1xuZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoIWVycm9yIHx8ICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgfHwgdHlwZW9mIGVycm9yLnN0YWNrICE9PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBBIG5vbi1lcnJvciB3YXMgdGhyb3duLCB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIHNob3cuIDotKFxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgICgwLCBfaHlkcmF0aW9uZXJyb3JzdGF0ZS5hdHRhY2hIeWRyYXRpb25FcnJvclN0YXRlKShlcnJvcik7XG4gICAgLy8gU2tpcCBNb2R1bGVCdWlsZEVycm9yIGFuZCBNb2R1bGVOb3RGb3VuZEVycm9yLCBhcyBpdCB3aWxsIGJlIHNlbnQgdGhyb3VnaCBvbkJ1aWxkRXJyb3IgY2FsbGJhY2suXG4gICAgLy8gVGhpcyBpcyB0byBhdm9pZCBzYW1lIGVycm9yIGFzIGRpZmZlcmVudCB0eXBlIHNob3dpbmcgdXAgb24gY2xpZW50IHRvIGNhdXNlIGZsYXNoaW5nLlxuICAgIGlmIChlcnJvci5uYW1lICE9PSAnTW9kdWxlQnVpbGRFcnJvcicgJiYgZXJyb3IubmFtZSAhPT0gJ01vZHVsZU5vdEZvdW5kRXJyb3InKSB7XG4gICAgICAgIF9uZXh0ZGV2dG9vbHMuZGlzcGF0Y2hlci5vblVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5sZXQgb3JpZ0NvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG5mdW5jdGlvbiBuZXh0SnNIYW5kbGVDb25zb2xlRXJyb3IoKSB7XG4gICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvZDUwMzIzZWI4NDVjNWZkZTBkNzIwY2FlODg4YmYzNWRlZGQwNTUwNi9wYWNrYWdlcy9yZWFjdC1yZWNvbmNpbGVyL3NyYy9SZWFjdEZpYmVyRXJyb3JMb2dnZXIuanMjTDc4XG4gICAgY29uc3QgbWF5YmVFcnJvciA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBhcmdzWzFdIDogYXJnc1swXTtcbiAgICAoMCwgX2h5ZHJhdGlvbmVycm9yc3RhdGUuc3RvcmVIeWRyYXRpb25FcnJvclN0YXRlRnJvbUNvbnNvbGVBcmdzKSguLi5hcmdzKTtcbiAgICAvLyBUT0RPOiBTdXJmYWNlcyBub24tZXJyb3JzIGxvZ2dlZCB2aWEgYGNvbnNvbGUuZXJyb3JgLlxuICAgIGhhbmRsZUVycm9yKG1heWJlRXJyb3IpO1xuICAgIGlmIChfZm9yd2FyZGxvZ3MuaXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkKSB7XG4gICAgICAgICgwLCBfZm9yd2FyZGxvZ3MuZm9yd2FyZEVycm9yTG9nKShhcmdzKTtcbiAgICB9XG4gICAgb3JpZ0NvbnNvbGVFcnJvci5hcHBseSh3aW5kb3cuY29uc29sZSwgYXJncyk7XG59XG5mdW5jdGlvbiBvblVuaGFuZGxlZEVycm9yKGV2ZW50KSB7XG4gICAgY29uc3QgZXJyb3IgPSBldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQuZXJyb3I7XG4gICAgaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgIGlmIChlcnJvciAmJiBfZm9yd2FyZGxvZ3MuaXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkKSB7XG4gICAgICAgICgwLCBfZm9yd2FyZGxvZ3MuZm9yd2FyZFVuaGFuZGxlZEVycm9yKShlcnJvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gb25VbmhhbmRsZWRSZWplY3Rpb24oZXYpIHtcbiAgICBjb25zdCByZWFzb24gPSBldiA9PSBudWxsID8gdm9pZCAwIDogZXYucmVhc29uO1xuICAgIGlmICghcmVhc29uIHx8ICEocmVhc29uIGluc3RhbmNlb2YgRXJyb3IpIHx8IHR5cGVvZiByZWFzb24uc3RhY2sgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEEgbm9uLWVycm9yIHdhcyB0aHJvd24sIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2hvdy4gOi0oXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgX25leHRkZXZ0b29scy5kaXNwYXRjaGVyLm9uVW5oYW5kbGVkUmVqZWN0aW9uKHJlYXNvbik7XG4gICAgaWYgKF9mb3J3YXJkbG9ncy5pc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQpIHtcbiAgICAgICAgKDAsIF9mb3J3YXJkbG9ncy5sb2dVbmhhbmRsZWRSZWplY3Rpb24pKHJlYXNvbik7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVnaXN0ZXIoKSB7XG4gICAgaWYgKGlzUmVnaXN0ZXJlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzUmVnaXN0ZXJlZCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gNTA7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICBpZiAoX2ZvcndhcmRsb2dzLmlzVGVybWluYWxMb2dnaW5nRW5hYmxlZCkge1xuICAgICAgICAoMCwgX2ZvcndhcmRsb2dzLmluaXRpYWxpemVEZWJ1Z0xvZ0ZvcndhcmRpbmcpKCdwYWdlcycpO1xuICAgIH1cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvblVuaGFuZGxlZEVycm9yKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJywgb25VbmhhbmRsZWRSZWplY3Rpb24pO1xuICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0gbmV4dEpzSGFuZGxlQ29uc29sZUVycm9yO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWdlcy1kZXYtb3ZlcmxheS1zZXR1cC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/pages/_app.js":
/*!*************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/pages/_app.js ***!
\*************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return App;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils.js\");\n/**\n * `App` component is used for initialize of pages. It allows for overwriting and full control of the `page` initialization.\n * This allows for keeping state between navigation, custom error handling, injecting additional data.\n */ async function appGetInitialProps(param) {\n let { Component, ctx } = param;\n const pageProps = await (0, _utils.loadGetInitialProps)(Component, ctx);\n return {\n pageProps\n };\n}\nclass App extends _react.default.Component {\n render() {\n const { Component, pageProps } = this.props;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Component, {\n ...pageProps\n });\n }\n}\nApp.origGetInitialProps = appGetInitialProps;\nApp.getInitialProps = appGetInitialProps;\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=_app.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvcGFnZXMvX2FwcC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O2VBaUNxQkE7Ozs7OzRFQWpDSDttQ0FXa0I7QUFVcEM7OztDQUdDLEdBQ0QsZUFBZUMsbUJBQW1CLEtBR3JCO0lBSHFCLE1BQ2hDQyxTQUFTLEVBQ1RDLEdBQUcsRUFDUSxHQUhxQjtJQUloQyxNQUFNQyxZQUFZLE1BQU1DLENBQUFBLEdBQUFBLE9BQUFBLG1CQUFBQSxFQUFvQkgsV0FBV0M7SUFDdkQsT0FBTztRQUFFQztJQUFVO0FBQ3JCO0FBRWUsTUFBTUosWUFBc0NNLE9BQUFBLE9BQUssQ0FBQ0osU0FBUztJQU94RUssU0FBUztRQUNQLE1BQU0sRUFBRUwsU0FBUyxFQUFFRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUNJLEtBQUs7UUFFM0MsT0FBTyxXQUFQLEdBQU8scUJBQUNOLFdBQUFBO1lBQVcsR0FBR0UsU0FBUzs7SUFDakM7QUFDRjtBQVpxQkosSUFJWlMsbUJBQUFBLEdBQXNCUjtBQUpWRCxJQUtaVSxlQUFBQSxHQUFrQlQiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9zcmMvcGFnZXMvX2FwcC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcENvbnRleHRUeXBlLFxuICBBcHBJbml0aWFsUHJvcHMsXG4gIEFwcFByb3BzVHlwZSxcbiAgTmV4dFdlYlZpdGFsc01ldHJpYyxcbiAgQXBwVHlwZSxcbn0gZnJvbSAnLi4vc2hhcmVkL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgUm91dGVyIH0gZnJvbSAnLi4vY2xpZW50L3JvdXRlcidcblxuaW1wb3J0IHsgbG9hZEdldEluaXRpYWxQcm9wcyB9IGZyb20gJy4uL3NoYXJlZC9saWIvdXRpbHMnXG5cbmV4cG9ydCB0eXBlIHsgQXBwSW5pdGlhbFByb3BzLCBBcHBUeXBlIH1cblxuZXhwb3J0IHR5cGUgeyBOZXh0V2ViVml0YWxzTWV0cmljIH1cblxuZXhwb3J0IHR5cGUgQXBwQ29udGV4dCA9IEFwcENvbnRleHRUeXBlPFJvdXRlcj5cblxuZXhwb3J0IHR5cGUgQXBwUHJvcHM8UCA9IGFueT4gPSBBcHBQcm9wc1R5cGU8Um91dGVyLCBQPlxuXG4vKipcbiAqIGBBcHBgIGNvbXBvbmVudCBpcyB1c2VkIGZvciBpbml0aWFsaXplIG9mIHBhZ2VzLiBJdCBhbGxvd3MgZm9yIG92ZXJ3cml0aW5nIGFuZCBmdWxsIGNvbnRyb2wgb2YgdGhlIGBwYWdlYCBpbml0aWFsaXphdGlvbi5cbiAqIFRoaXMgYWxsb3dzIGZvciBrZWVwaW5nIHN0YXRlIGJldHdlZW4gbmF2aWdhdGlvbiwgY3VzdG9tIGVycm9yIGhhbmRsaW5nLCBpbmplY3RpbmcgYWRkaXRpb25hbCBkYXRhLlxuICovXG5hc3luYyBmdW5jdGlvbiBhcHBHZXRJbml0aWFsUHJvcHMoe1xuICBDb21wb25lbnQsXG4gIGN0eCxcbn06IEFwcENvbnRleHQpOiBQcm9taXNlPEFwcEluaXRpYWxQcm9wcz4ge1xuICBjb25zdCBwYWdlUHJvcHMgPSBhd2FpdCBsb2FkR2V0SW5pdGlhbFByb3BzKENvbXBvbmVudCwgY3R4KVxuICByZXR1cm4geyBwYWdlUHJvcHMgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHA8UCA9IGFueSwgQ1AgPSB7fSwgUyA9IHt9PiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgUCAmIEFwcFByb3BzPENQPixcbiAgU1xuPiB7XG4gIHN0YXRpYyBvcmlnR2V0SW5pdGlhbFByb3BzID0gYXBwR2V0SW5pdGlhbFByb3BzXG4gIHN0YXRpYyBnZXRJbml0aWFsUHJvcHMgPSBhcHBHZXRJbml0aWFsUHJvcHNcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBDb21wb25lbnQsIHBhZ2VQcm9wcyB9ID0gdGhpcy5wcm9wcyBhcyBBcHBQcm9wczxDUD5cblxuICAgIHJldHVybiA8Q29tcG9uZW50IHsuLi5wYWdlUHJvcHN9IC8+XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJBcHAiLCJhcHBHZXRJbml0aWFsUHJvcHMiLCJDb21wb25lbnQiLCJjdHgiLCJwYWdlUHJvcHMiLCJsb2FkR2V0SW5pdGlhbFByb3BzIiwiUmVhY3QiLCJyZW5kZXIiLCJwcm9wcyIsIm9yaWdHZXRJbml0aWFsUHJvcHMiLCJnZXRJbml0aWFsUHJvcHMiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/pages/_app.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/pages/_error.js":
/*!***************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/pages/_error.js ***!
\***************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return Error;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst _head = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/head */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/head.js\"));\nconst statusCodes = {\n 400: 'Bad Request',\n 404: 'This page could not be found',\n 405: 'Method Not Allowed',\n 500: 'Internal Server Error'\n};\nfunction _getInitialProps(param) {\n let { req, res, err } = param;\n const statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404;\n let hostname;\n if (true) {\n hostname = window.location.hostname;\n } else {}\n return {\n statusCode,\n hostname\n };\n}\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: '100vh',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n },\n desc: {\n lineHeight: '48px'\n },\n h1: {\n display: 'inline-block',\n margin: '0 20px 0 0',\n paddingRight: 23,\n fontSize: 24,\n fontWeight: 500,\n verticalAlign: 'top'\n },\n h2: {\n fontSize: 14,\n fontWeight: 400,\n lineHeight: '28px'\n },\n wrap: {\n display: 'inline-block'\n }\n};\nclass Error extends _react.default.Component {\n render() {\n const { statusCode, withDarkMode = true } = this.props;\n const title = this.props.title || statusCodes[statusCode] || 'An unexpected error has occurred';\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n style: styles.error,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_head.default, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: statusCode ? statusCode + \": \" + title : 'Application error: a client-side exception has occurred'\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n style: styles.desc,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n dangerouslySetInnerHTML: {\n /* CSS minified from\n body { margin: 0; color: #000; background: #fff; }\n .next-error-h1 {\n border-right: 1px solid rgba(0, 0, 0, .3);\n }\n\n ${\n withDarkMode\n ? `@media (prefers-color-scheme: dark) {\n body { color: #fff; background: #000; }\n .next-error-h1 {\n border-right: 1px solid rgba(255, 255, 255, .3);\n }\n }`\n : ''\n }\n */ __html: \"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\" + (withDarkMode ? '@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}' : '')\n }\n }),\n statusCode ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n className: \"next-error-h1\",\n style: styles.h1,\n children: statusCode\n }) : null,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.wrap,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"h2\", {\n style: styles.h2,\n children: [\n this.props.title || statusCode ? title : /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n \"Application error: a client-side exception has occurred\",\n ' ',\n Boolean(this.props.hostname) && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n \"while loading \",\n this.props.hostname\n ]\n }),\n ' ',\n \"(see the browser console for more information)\"\n ]\n }),\n \".\"\n ]\n })\n })\n ]\n })\n ]\n });\n }\n}\nError.displayName = 'ErrorPage';\nError.getInitialProps = _getInitialProps;\nError.origGetInitialProps = _getInitialProps;\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=_error.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvcGFnZXMvX2Vycm9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7ZUFnRnFCQTs7Ozs7NEVBaEZIOzJFQUNEO0FBR2pCLE1BQU1DLGNBQTBDO0lBQzlDLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7QUFDUDtBQVNBLFNBQVNDLGlCQUFpQixLQUlSO0lBSlEsTUFDeEJDLEdBQUcsRUFDSEMsR0FBRyxFQUNIQyxHQUFHLEVBQ2EsR0FKUTtJQUt4QixNQUFNQyxhQUNKRixPQUFPQSxJQUFJRSxVQUFVLEdBQUdGLElBQUlFLFVBQVUsR0FBR0QsTUFBTUEsSUFBSUMsVUFBVSxHQUFJO0lBRW5FLElBQUlDO0lBRUosSUFBSSxJQUE2QixFQUFFO1FBQ2pDQSxXQUFXQyxPQUFPQyxRQUFRLENBQUNGLFFBQVE7SUFDckMsT0FBTyxFQVNOO0lBRUQsT0FBTztRQUFFRDtRQUFZQztJQUFTO0FBQ2hDO0FBRUEsTUFBTVEsU0FBOEM7SUFDbERDLE9BQU87UUFDTCwwRkFBMEY7UUFDMUZDLFlBQ0U7UUFDRkMsUUFBUTtRQUNSQyxXQUFXO1FBQ1hDLFNBQVM7UUFDVEMsZUFBZTtRQUNmQyxZQUFZO1FBQ1pDLGdCQUFnQjtJQUNsQjtJQUNBQyxNQUFNO1FBQ0pDLFlBQVk7SUFDZDtJQUNBQyxJQUFJO1FBQ0ZOLFNBQVM7UUFDVE8sUUFBUTtRQUNSQyxjQUFjO1FBQ2RDLFVBQVU7UUFDVkMsWUFBWTtRQUNaQyxlQUFlO0lBQ2pCO0lBQ0FDLElBQUk7UUFDRkgsVUFBVTtRQUNWQyxZQUFZO1FBQ1pMLFlBQVk7SUFDZDtJQUNBUSxNQUFNO1FBQ0piLFNBQVM7SUFDWDtBQUNGO0FBS2UsTUFBTXBCLGNBQXNCa0MsT0FBQUEsT0FBSyxDQUFDQyxTQUFTO0lBTXhEQyxTQUFTO1FBQ1AsTUFBTSxFQUFFOUIsVUFBVSxFQUFFK0IsZUFBZSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUNDLEtBQUs7UUFDdEQsTUFBTUMsUUFDSixJQUFJLENBQUNELEtBQUssQ0FBQ0MsS0FBSyxJQUNoQnRDLFdBQVcsQ0FBQ0ssV0FBVyxJQUN2QjtRQUVGLHFCQUNFLHNCQUFDa0MsT0FBQUE7WUFBSUMsT0FBTzFCLE9BQU9DLEtBQUs7OzhCQUN0QixxQkFBQzBCLE1BQUFBLE9BQUk7OEJBQ0gsbUNBQUNILFNBQUFBO2tDQUNFakMsYUFDTUEsYUFBVyxPQUFJaUMsUUFDbEI7Ozs4QkFHUixzQkFBQ0MsT0FBQUE7b0JBQUlDLE9BQU8xQixPQUFPUyxJQUFJOztzQ0FDckIscUJBQUNpQixTQUFBQTs0QkFDQ0UseUJBQXlCO2dDQUN2Qjs7Ozs7Ozs7Ozs7Ozs7OztlQWdCQyxHQUNEQyxRQUFTLG1HQUNQUCxDQUFBQSxlQUNJLG9JQUNBLEdBQUM7NEJBRVQ7O3dCQUdEL0IsYUFBQUEsV0FBQUEsR0FDQyxxQkFBQ29CLE1BQUFBOzRCQUFHbUIsV0FBVTs0QkFBZ0JKLE9BQU8xQixPQUFPVyxFQUFFO3NDQUMzQ3BCOzZCQUVEO3NDQUNKLHFCQUFDa0MsT0FBQUE7NEJBQUlDLE9BQU8xQixPQUFPa0IsSUFBSTtzQ0FDckIsb0NBQUNELE1BQUFBO2dDQUFHUyxPQUFPMUIsT0FBT2lCLEVBQUU7O29DQUNqQixJQUFJLENBQUNNLEtBQUssQ0FBQ0MsS0FBSyxJQUFJakMsYUFDbkJpQyxRQUVBLFdBRkFBLEdBRUE7OzRDQUFFOzRDQUN3RDs0Q0FDdkRPLFFBQVEsSUFBSSxDQUFDUixLQUFLLENBQUMvQixRQUFRLEtBQzFCLFdBRDBCLEdBQzFCOztvREFBRTtvREFBZSxJQUFJLENBQUMrQixLQUFLLENBQUMvQixRQUFROzs7NENBQ25DOzRDQUFJOzs7b0NBR1Q7Ozs7Ozs7O0lBT2Q7QUFDRjtBQTNFcUJQLE1BQ1orQyxXQUFBQSxHQUFjO0FBREYvQyxNQUdaZ0QsZUFBQUEsR0FBa0I5QztBQUhORixNQUlaaUQsbUJBQUFBLEdBQXNCL0MiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9zcmMvcGFnZXMvX2Vycm9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgSGVhZCBmcm9tICcuLi9zaGFyZWQvbGliL2hlYWQnXG5pbXBvcnQgdHlwZSB7IE5leHRQYWdlQ29udGV4dCB9IGZyb20gJy4uL3NoYXJlZC9saWIvdXRpbHMnXG5cbmNvbnN0IHN0YXR1c0NvZGVzOiB7IFtjb2RlOiBudW1iZXJdOiBzdHJpbmcgfSA9IHtcbiAgNDAwOiAnQmFkIFJlcXVlc3QnLFxuICA0MDQ6ICdUaGlzIHBhZ2UgY291bGQgbm90IGJlIGZvdW5kJyxcbiAgNDA1OiAnTWV0aG9kIE5vdCBBbGxvd2VkJyxcbiAgNTAwOiAnSW50ZXJuYWwgU2VydmVyIEVycm9yJyxcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JQcm9wcyA9IHtcbiAgc3RhdHVzQ29kZTogbnVtYmVyXG4gIGhvc3RuYW1lPzogc3RyaW5nXG4gIHRpdGxlPzogc3RyaW5nXG4gIHdpdGhEYXJrTW9kZT86IGJvb2xlYW5cbn1cblxuZnVuY3Rpb24gX2dldEluaXRpYWxQcm9wcyh7XG4gIHJlcSxcbiAgcmVzLFxuICBlcnIsXG59OiBOZXh0UGFnZUNvbnRleHQpOiBQcm9taXNlPEVycm9yUHJvcHM+IHwgRXJyb3JQcm9wcyB7XG4gIGNvbnN0IHN0YXR1c0NvZGUgPVxuICAgIHJlcyAmJiByZXMuc3RhdHVzQ29kZSA/IHJlcy5zdGF0dXNDb2RlIDogZXJyID8gZXJyLnN0YXR1c0NvZGUhIDogNDA0XG5cbiAgbGV0IGhvc3RuYW1lXG5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaG9zdG5hbWUgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWVcbiAgfSBlbHNlIGlmIChyZXEpIHtcbiAgICBjb25zdCB7IGdldFJlcXVlc3RNZXRhIH0gPVxuICAgICAgcmVxdWlyZSgnLi4vc2VydmVyL3JlcXVlc3QtbWV0YScpIGFzIHR5cGVvZiBpbXBvcnQoJy4uL3NlcnZlci9yZXF1ZXN0LW1ldGEnKVxuXG4gICAgY29uc3QgaW5pdFVybCA9IGdldFJlcXVlc3RNZXRhKHJlcSwgJ2luaXRVUkwnKVxuICAgIGlmIChpbml0VXJsKSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGluaXRVcmwpXG4gICAgICBob3N0bmFtZSA9IHVybC5ob3N0bmFtZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IHN0YXR1c0NvZGUsIGhvc3RuYW1lIH1cbn1cblxuY29uc3Qgc3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWFjdC5DU1NQcm9wZXJ0aWVzPiA9IHtcbiAgZXJyb3I6IHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL21vZGVybi1ub3JtYWxpemUvYmxvYi9tYWluL21vZGVybi1ub3JtYWxpemUuY3NzI0wzOC1MNTJcbiAgICBmb250RmFtaWx5OlxuICAgICAgJ3N5c3RlbS11aSxcIlNlZ29lIFVJXCIsUm9ib3RvLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmLFwiQXBwbGUgQ29sb3IgRW1vamlcIixcIlNlZ29lIFVJIEVtb2ppXCInLFxuICAgIGhlaWdodDogJzEwMHZoJyxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG4gIGRlc2M6IHtcbiAgICBsaW5lSGVpZ2h0OiAnNDhweCcsXG4gIH0sXG4gIGgxOiB7XG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgbWFyZ2luOiAnMCAyMHB4IDAgMCcsXG4gICAgcGFkZGluZ1JpZ2h0OiAyMyxcbiAgICBmb250U2l6ZTogMjQsXG4gICAgZm9udFdlaWdodDogNTAwLFxuICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICB9LFxuICBoMjoge1xuICAgIGZvbnRTaXplOiAxNCxcbiAgICBmb250V2VpZ2h0OiA0MDAsXG4gICAgbGluZUhlaWdodDogJzI4cHgnLFxuICB9LFxuICB3cmFwOiB7XG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gIH0sXG59XG5cbi8qKlxuICogYEVycm9yYCBjb21wb25lbnQgdXNlZCBmb3IgaGFuZGxpbmcgZXJyb3JzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvcjxQID0ge30+IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFAgJiBFcnJvclByb3BzPiB7XG4gIHN0YXRpYyBkaXNwbGF5TmFtZSA9ICdFcnJvclBhZ2UnXG5cbiAgc3RhdGljIGdldEluaXRpYWxQcm9wcyA9IF9nZXRJbml0aWFsUHJvcHNcbiAgc3RhdGljIG9yaWdHZXRJbml0aWFsUHJvcHMgPSBfZ2V0SW5pdGlhbFByb3BzXG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgd2l0aERhcmtNb2RlID0gdHJ1ZSB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHRpdGxlID1cbiAgICAgIHRoaXMucHJvcHMudGl0bGUgfHxcbiAgICAgIHN0YXR1c0NvZGVzW3N0YXR1c0NvZGVdIHx8XG4gICAgICAnQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJyZWQnXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17c3R5bGVzLmVycm9yfT5cbiAgICAgICAgPEhlYWQ+XG4gICAgICAgICAgPHRpdGxlPlxuICAgICAgICAgICAge3N0YXR1c0NvZGVcbiAgICAgICAgICAgICAgPyBgJHtzdGF0dXNDb2RlfTogJHt0aXRsZX1gXG4gICAgICAgICAgICAgIDogJ0FwcGxpY2F0aW9uIGVycm9yOiBhIGNsaWVudC1zaWRlIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQnfVxuICAgICAgICAgIDwvdGl0bGU+XG4gICAgICAgIDwvSGVhZD5cbiAgICAgICAgPGRpdiBzdHlsZT17c3R5bGVzLmRlc2N9PlxuICAgICAgICAgIDxzdHlsZVxuICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgICAgLyogQ1NTIG1pbmlmaWVkIGZyb21cbiAgICAgICAgICAgICAgICBib2R5IHsgbWFyZ2luOiAwOyBjb2xvcjogIzAwMDsgYmFja2dyb3VuZDogI2ZmZjsgfVxuICAgICAgICAgICAgICAgIC5uZXh0LWVycm9yLWgxIHtcbiAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgLjMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgICB3aXRoRGFya01vZGVcbiAgICAgICAgICAgICAgICAgICAgPyBgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICAgICAgICAgICAgYm9keSB7IGNvbG9yOiAjZmZmOyBiYWNrZ3JvdW5kOiAjMDAwOyB9XG4gICAgICAgICAgICAgICAgICAubmV4dC1lcnJvci1oMSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBfX2h0bWw6IGBib2R5e2NvbG9yOiMwMDA7YmFja2dyb3VuZDojZmZmO21hcmdpbjowfS5uZXh0LWVycm9yLWgxe2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMyl9JHtcbiAgICAgICAgICAgICAgICB3aXRoRGFya01vZGVcbiAgICAgICAgICAgICAgICAgID8gJ0BtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7Ym9keXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzAwMH0ubmV4dC1lcnJvci1oMXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjMpfX0nXG4gICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAge3N0YXR1c0NvZGUgPyAoXG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibmV4dC1lcnJvci1oMVwiIHN0eWxlPXtzdHlsZXMuaDF9PlxuICAgICAgICAgICAgICB7c3RhdHVzQ29kZX1cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPGRpdiBzdHlsZT17c3R5bGVzLndyYXB9PlxuICAgICAgICAgICAgPGgyIHN0eWxlPXtzdHlsZXMuaDJ9PlxuICAgICAgICAgICAgICB7dGhpcy5wcm9wcy50aXRsZSB8fCBzdGF0dXNDb2RlID8gKFxuICAgICAgICAgICAgICAgIHRpdGxlXG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uIGVycm9yOiBhIGNsaWVudC1zaWRlIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWR7JyAnfVxuICAgICAgICAgICAgICAgICAge0Jvb2xlYW4odGhpcy5wcm9wcy5ob3N0bmFtZSkgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8PndoaWxlIGxvYWRpbmcge3RoaXMucHJvcHMuaG9zdG5hbWV9PC8+XG4gICAgICAgICAgICAgICAgICApfXsnICd9XG4gICAgICAgICAgICAgICAgICAoc2VlIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24pXG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIC5cbiAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG59XG4iXSwibmFtZXMiOlsiRXJyb3IiLCJzdGF0dXNDb2RlcyIsIl9nZXRJbml0aWFsUHJvcHMiLCJyZXEiLCJyZXMiLCJlcnIiLCJzdGF0dXNDb2RlIiwiaG9zdG5hbWUiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImdldFJlcXVlc3RNZXRhIiwicmVxdWlyZSIsImluaXRVcmwiLCJ1cmwiLCJVUkwiLCJzdHlsZXMiLCJlcnJvciIsImZvbnRGYW1pbHkiLCJoZWlnaHQiLCJ0ZXh0QWxpZ24iLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsImRlc2MiLCJsaW5lSGVpZ2h0IiwiaDEiLCJtYXJnaW4iLCJwYWRkaW5nUmlnaHQiLCJmb250U2l6ZSIsImZvbnRXZWlnaHQiLCJ2ZXJ0aWNhbEFsaWduIiwiaDIiLCJ3cmFwIiwiUmVhY3QiLCJDb21wb25lbnQiLCJyZW5kZXIiLCJ3aXRoRGFya01vZGUiLCJwcm9wcyIsInRpdGxlIiwiZGl2Iiwic3R5bGUiLCJIZWFkIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJjbGFzc05hbWUiLCJCb29sZWFuIiwiZGlzcGxheU5hbWUiLCJnZXRJbml0aWFsUHJvcHMiLCJvcmlnR2V0SW5pdGlhbFByb3BzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/pages/_error.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/hot-reloader-types.js":
/*!********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/hot-reloader-types.js ***!
\********************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HMR_ACTIONS_SENT_TO_BROWSER\", ({\n enumerable: true,\n get: function() {\n return HMR_ACTIONS_SENT_TO_BROWSER;\n }\n}));\nvar HMR_ACTIONS_SENT_TO_BROWSER = /*#__PURE__*/ function(HMR_ACTIONS_SENT_TO_BROWSER) {\n HMR_ACTIONS_SENT_TO_BROWSER[\"ADDED_PAGE\"] = \"addedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"REMOVED_PAGE\"] = \"removedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"RELOAD_PAGE\"] = \"reloadPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_COMPONENT_CHANGES\"] = \"serverComponentChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"MIDDLEWARE_CHANGES\"] = \"middlewareChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"CLIENT_CHANGES\"] = \"clientChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ONLY_CHANGES\"] = \"serverOnlyChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SYNC\"] = \"sync\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILT\"] = \"built\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILDING\"] = \"building\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"DEV_PAGES_MANIFEST_UPDATE\"] = \"devPagesManifestUpdate\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_MESSAGE\"] = \"turbopack-message\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ERROR\"] = \"serverError\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_CONNECTED\"] = \"turbopack-connected\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"ISR_MANIFEST\"] = \"isrManifest\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"DEV_INDICATOR\"] = \"devIndicator\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"DEVTOOLS_CONFIG\"] = \"devtoolsConfig\";\n return HMR_ACTIONS_SENT_TO_BROWSER;\n}({});\n\n//# sourceMappingURL=hot-reloader-types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRiwrREFBOEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRzs7QUFFSiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS41LjRfcmVhY3QtZG9tQDE5LjEuMF9yZWFjdEAxOS4xLjBfX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVI7XG4gICAgfVxufSk7XG52YXIgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIpIHtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJBRERFRF9QQUdFXCJdID0gXCJhZGRlZFBhZ2VcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJSRU1PVkVEX1BBR0VcIl0gPSBcInJlbW92ZWRQYWdlXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiUkVMT0FEX1BBR0VcIl0gPSBcInJlbG9hZFBhZ2VcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJTRVJWRVJfQ09NUE9ORU5UX0NIQU5HRVNcIl0gPSBcInNlcnZlckNvbXBvbmVudENoYW5nZXNcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJNSURETEVXQVJFX0NIQU5HRVNcIl0gPSBcIm1pZGRsZXdhcmVDaGFuZ2VzXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQ0xJRU5UX0NIQU5HRVNcIl0gPSBcImNsaWVudENoYW5nZXNcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJTRVJWRVJfT05MWV9DSEFOR0VTXCJdID0gXCJzZXJ2ZXJPbmx5Q2hhbmdlc1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlNZTkNcIl0gPSBcInN5bmNcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJCVUlMVFwiXSA9IFwiYnVpbHRcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJCVUlMRElOR1wiXSA9IFwiYnVpbGRpbmdcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFXCJdID0gXCJkZXZQYWdlc01hbmlmZXN0VXBkYXRlXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiVFVSQk9QQUNLX01FU1NBR0VcIl0gPSBcInR1cmJvcGFjay1tZXNzYWdlXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiU0VSVkVSX0VSUk9SXCJdID0gXCJzZXJ2ZXJFcnJvclwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlRVUkJPUEFDS19DT05ORUNURURcIl0gPSBcInR1cmJvcGFjay1jb25uZWN0ZWRcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJJU1JfTUFOSUZFU1RcIl0gPSBcImlzck1hbmlmZXN0XCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiREVWX0lORElDQVRPUlwiXSA9IFwiZGV2SW5kaWNhdG9yXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiREVWVE9PTFNfQ09ORklHXCJdID0gXCJkZXZ0b29sc0NvbmZpZ1wiO1xuICAgIHJldHVybiBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVI7XG59KHt9KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG90LXJlbG9hZGVyLXR5cGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/hot-reloader-types.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/node-stack-frames.js":
/*!*******************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/node-stack-frames.js ***!
\*******************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getServerError\", ({\n enumerable: true,\n get: function() {\n return getServerError;\n }\n}));\nconst _stacktraceparser = __webpack_require__(/*! next/dist/compiled/stacktrace-parser */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\");\nconst _errorsource = __webpack_require__(/*! ../../shared/lib/error-source */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/error-source.js\");\nfunction getFilesystemFrame(frame) {\n const f = {\n ...frame\n };\n if (typeof f.file === 'string') {\n if (// Posix:\n f.file.startsWith('/') || // Win32:\n /^[a-z]:\\\\/i.test(f.file) || // Win32 UNC:\n f.file.startsWith('\\\\\\\\')) {\n f.file = `file://${f.file}`;\n }\n }\n return f;\n}\nfunction getServerError(error, type) {\n if (error.name === 'TurbopackInternalError') {\n // If this is an internal Turbopack error we shouldn't show internal details\n // to the user. These are written to a log file instead.\n const turbopackInternalError = Object.defineProperty(new Error('An unexpected Turbopack error occurred. Please see the output of `next dev` for more details.'), \"__NEXT_ERROR_CODE\", {\n value: \"E167\",\n enumerable: false,\n configurable: true\n });\n (0, _errorsource.decorateServerError)(turbopackInternalError, type);\n return turbopackInternalError;\n }\n let n;\n try {\n throw Object.defineProperty(new Error(error.message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n } catch (e) {\n n = e;\n }\n n.name = error.name;\n try {\n n.stack = `${n.toString()}\\n${(0, _stacktraceparser.parse)(error.stack).map(getFilesystemFrame).map((f)=>{\n let str = ` at ${f.methodName}`;\n if (f.file) {\n let loc = f.file;\n if (f.lineNumber) {\n loc += `:${f.lineNumber}`;\n if (f.column) {\n loc += `:${f.column}`;\n }\n }\n str += ` (${loc})`;\n }\n return str;\n }).join('\\n')}`;\n } catch {\n n.stack = error.stack;\n }\n (0, _errorsource.decorateServerError)(n, type);\n return n;\n}\n\n//# sourceMappingURL=node-stack-frames.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Rldi9ub2RlLXN0YWNrLWZyYW1lcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLGtEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGLDBCQUEwQixtQkFBTyxDQUFDLDBOQUFzQztBQUN4RSxxQkFBcUIsbUJBQU8sQ0FBQyx5TEFBK0I7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLE9BQU87QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsYUFBYSxJQUFJO0FBQ3RDLGdDQUFnQyxhQUFhO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhO0FBQzVDO0FBQ0EsbUNBQW1DLFNBQVM7QUFDNUM7QUFDQTtBQUNBLDRCQUE0QixJQUFJO0FBQ2hDO0FBQ0E7QUFDQSxTQUFTLGFBQWE7QUFDdEIsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNS40X3JlYWN0LWRvbUAxOS4xLjBfcmVhY3RAMTkuMS4wX19yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvZGV2L25vZGUtc3RhY2stZnJhbWVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U2VydmVyRXJyb3JcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFNlcnZlckVycm9yO1xuICAgIH1cbn0pO1xuY29uc3QgX3N0YWNrdHJhY2VwYXJzZXIgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3N0YWNrdHJhY2UtcGFyc2VyXCIpO1xuY29uc3QgX2Vycm9yc291cmNlID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvZXJyb3Itc291cmNlXCIpO1xuZnVuY3Rpb24gZ2V0RmlsZXN5c3RlbUZyYW1lKGZyYW1lKSB7XG4gICAgY29uc3QgZiA9IHtcbiAgICAgICAgLi4uZnJhbWVcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgZi5maWxlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoLy8gUG9zaXg6XG4gICAgICAgIGYuZmlsZS5zdGFydHNXaXRoKCcvJykgfHwgLy8gV2luMzI6XG4gICAgICAgIC9eW2Etel06XFxcXC9pLnRlc3QoZi5maWxlKSB8fCAvLyBXaW4zMiBVTkM6XG4gICAgICAgIGYuZmlsZS5zdGFydHNXaXRoKCdcXFxcXFxcXCcpKSB7XG4gICAgICAgICAgICBmLmZpbGUgPSBgZmlsZTovLyR7Zi5maWxlfWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGY7XG59XG5mdW5jdGlvbiBnZXRTZXJ2ZXJFcnJvcihlcnJvciwgdHlwZSkge1xuICAgIGlmIChlcnJvci5uYW1lID09PSAnVHVyYm9wYWNrSW50ZXJuYWxFcnJvcicpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBpbnRlcm5hbCBUdXJib3BhY2sgZXJyb3Igd2Ugc2hvdWxkbid0IHNob3cgaW50ZXJuYWwgZGV0YWlsc1xuICAgICAgICAvLyB0byB0aGUgdXNlci4gVGhlc2UgYXJlIHdyaXR0ZW4gdG8gYSBsb2cgZmlsZSBpbnN0ZWFkLlxuICAgICAgICBjb25zdCB0dXJib3BhY2tJbnRlcm5hbEVycm9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ldyBFcnJvcignQW4gdW5leHBlY3RlZCBUdXJib3BhY2sgZXJyb3Igb2NjdXJyZWQuIFBsZWFzZSBzZWUgdGhlIG91dHB1dCBvZiBgbmV4dCBkZXZgIGZvciBtb3JlIGRldGFpbHMuJyksIFwiX19ORVhUX0VSUk9SX0NPREVcIiwge1xuICAgICAgICAgICAgdmFsdWU6IFwiRTE2N1wiLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCBfZXJyb3Jzb3VyY2UuZGVjb3JhdGVTZXJ2ZXJFcnJvcikodHVyYm9wYWNrSW50ZXJuYWxFcnJvciwgdHlwZSk7XG4gICAgICAgIHJldHVybiB0dXJib3BhY2tJbnRlcm5hbEVycm9yO1xuICAgIH1cbiAgICBsZXQgbjtcbiAgICB0cnkge1xuICAgICAgICB0aHJvdyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3IEVycm9yKGVycm9yLm1lc3NhZ2UpLCBcIl9fTkVYVF9FUlJPUl9DT0RFXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBcIkUzOTRcIixcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbiA9IGU7XG4gICAgfVxuICAgIG4ubmFtZSA9IGVycm9yLm5hbWU7XG4gICAgdHJ5IHtcbiAgICAgICAgbi5zdGFjayA9IGAke24udG9TdHJpbmcoKX1cXG4keygwLCBfc3RhY2t0cmFjZXBhcnNlci5wYXJzZSkoZXJyb3Iuc3RhY2spLm1hcChnZXRGaWxlc3lzdGVtRnJhbWUpLm1hcCgoZik9PntcbiAgICAgICAgICAgIGxldCBzdHIgPSBgICAgIGF0ICR7Zi5tZXRob2ROYW1lfWA7XG4gICAgICAgICAgICBpZiAoZi5maWxlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxvYyA9IGYuZmlsZTtcbiAgICAgICAgICAgICAgICBpZiAoZi5saW5lTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYyArPSBgOiR7Zi5saW5lTnVtYmVyfWA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmLmNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9jICs9IGA6JHtmLmNvbHVtbn1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0ciArPSBgICgke2xvY30pYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH0pLmpvaW4oJ1xcbicpfWA7XG4gICAgfSBjYXRjaCAge1xuICAgICAgICBuLnN0YWNrID0gZXJyb3Iuc3RhY2s7XG4gICAgfVxuICAgICgwLCBfZXJyb3Jzb3VyY2UuZGVjb3JhdGVTZXJ2ZXJFcnJvcikobiwgdHlwZSk7XG4gICAgcmV0dXJuIG47XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vZGUtc3RhY2stZnJhbWVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/node-stack-frames.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/amp-context.shared-runtime.js":
/*!****************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/amp-context.shared-runtime.js ***!
\****************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"AmpStateContext\", ({\n enumerable: true,\n get: function() {\n return AmpStateContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst AmpStateContext = _react.default.createContext({});\nif (true) {\n AmpStateContext.displayName = 'AmpStateContext';\n} //# sourceMappingURL=amp-context.shared-runtime.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9hbXAtY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O21EQUVhQTs7O2VBQUFBOzs7OzRFQUZLO0FBRVgsTUFBTUEsa0JBQXNDQyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBQyxDQUFDO0FBRXhFLElBQUlDLElBQW9CLEVBQW1CO0lBQ3pDSCxnQkFBZ0JNLFdBQVcsR0FBRztBQUNoQyIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvc3JjL3NoYXJlZC9saWIvYW1wLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgQW1wU3RhdGVDb250ZXh0OiBSZWFjdC5Db250ZXh0PGFueT4gPSBSZWFjdC5jcmVhdGVDb250ZXh0KHt9KVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBBbXBTdGF0ZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnQW1wU3RhdGVDb250ZXh0J1xufVxuIl0sIm5hbWVzIjpbIkFtcFN0YXRlQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/amp-context.shared-runtime.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/amp-mode.js":
/*!**********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/amp-mode.js ***!
\**********************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isInAmpMode\", ({\n enumerable: true,\n get: function() {\n return isInAmpMode;\n }\n}));\nfunction isInAmpMode(param) {\n let { ampFirst = false, hybrid = false, hasQuery = false } = param === void 0 ? {} : param;\n return ampFirst || hybrid && hasQuery;\n} //# sourceMappingURL=amp-mode.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9hbXAtbW9kZS5qcyIsIm1hcHBpbmdzIjoiOzs7OytDQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0EsWUFBWTtJQUFBLE1BQzFCQyxXQUFXLEtBQUssRUFDaEJDLFNBQVMsS0FBSyxFQUNkQyxXQUFXLEtBQUssRUFDakIsR0FKMkIsbUJBSXhCLENBQUMsSUFKdUI7SUFLMUIsT0FBT0YsWUFBYUMsVUFBVUM7QUFDaEMiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL3NyYy9zaGFyZWQvbGliL2FtcC1tb2RlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpc0luQW1wTW9kZSh7XG4gIGFtcEZpcnN0ID0gZmFsc2UsXG4gIGh5YnJpZCA9IGZhbHNlLFxuICBoYXNRdWVyeSA9IGZhbHNlLFxufSA9IHt9KTogYm9vbGVhbiB7XG4gIHJldHVybiBhbXBGaXJzdCB8fCAoaHlicmlkICYmIGhhc1F1ZXJ5KVxufVxuIl0sIm5hbWVzIjpbImlzSW5BbXBNb2RlIiwiYW1wRmlyc3QiLCJoeWJyaWQiLCJoYXNRdWVyeSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/amp-mode.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js":
/*!***********************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.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}));\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 AppRouterContext: function() {\n return AppRouterContext;\n },\n GlobalLayoutRouterContext: function() {\n return GlobalLayoutRouterContext;\n },\n LayoutRouterContext: function() {\n return LayoutRouterContext;\n },\n MissingSlotContext: function() {\n return MissingSlotContext;\n },\n TemplateContext: function() {\n return TemplateContext;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst AppRouterContext = _react.default.createContext(null);\nconst LayoutRouterContext = _react.default.createContext(null);\nconst GlobalLayoutRouterContext = _react.default.createContext(null);\nconst TemplateContext = _react.default.createContext(null);\nif (true) {\n AppRouterContext.displayName = 'AppRouterContext';\n LayoutRouterContext.displayName = 'LayoutRouterContext';\n GlobalLayoutRouterContext.displayName = 'GlobalLayoutRouterContext';\n TemplateContext.displayName = 'TemplateContext';\n}\nconst MissingSlotContext = _react.default.createContext(new Set()); //# sourceMappingURL=app-router-context.shared-runtime.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBaUthQSxnQkFBZ0I7ZUFBaEJBOztJQVVBQyx5QkFBeUI7ZUFBekJBOztJQVBBQyxtQkFBbUI7ZUFBbkJBOztJQXNCQUMsa0JBQWtCO2VBQWxCQTs7SUFUQUMsZUFBZTtlQUFmQTs7Ozs0RUF0S0s7QUFzSlgsTUFBTUosbUJBQW1CSyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FDakQ7QUFFSyxNQUFNSixzQkFBc0JHLE9BQUFBLE9BQUssQ0FBQ0MsYUFBYSxDQUs1QztBQUVILE1BQU1MLDRCQUE0QkksT0FBQUEsT0FBSyxDQUFDQyxhQUFhLENBSXpEO0FBRUksTUFBTUYsa0JBQWtCQyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBa0I7QUFFcEUsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNQLGlCQUFpQlUsV0FBVyxHQUFHO0lBQy9CUixvQkFBb0JRLFdBQVcsR0FBRztJQUNsQ1QsMEJBQTBCUyxXQUFXLEdBQUc7SUFDeENOLGdCQUFnQk0sV0FBVyxHQUFHO0FBQ2hDO0FBRU8sTUFBTVAscUJBQXFCRSxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBYyxJQUFJSyIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvc3JjL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IEZldGNoU2VydmVyUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9mZXRjaC1zZXJ2ZXItcmVzcG9uc2UnXG5pbXBvcnQgdHlwZSB7XG4gIEZvY3VzQW5kU2Nyb2xsUmVmLFxuICBQcmVmZXRjaEtpbmQsXG59IGZyb20gJy4uLy4uL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHR5cGUge1xuICBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgRmxpZ2h0U2VnbWVudFBhdGgsXG59IGZyb20gJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdHlwZSBDaGlsZFNlZ21lbnRNYXAgPSBNYXA8c3RyaW5nLCBDYWNoZU5vZGU+XG5cbi8qKlxuICogQ2FjaGUgbm9kZSB1c2VkIGluIGFwcC1yb3V0ZXIgLyBsYXlvdXQtcm91dGVyLlxuICovXG5leHBvcnQgdHlwZSBDYWNoZU5vZGUgPSBSZWFkeUNhY2hlTm9kZSB8IExhenlDYWNoZU5vZGVcblxuZXhwb3J0IHR5cGUgTG9hZGluZ01vZHVsZURhdGEgPVxuICB8IFtSZWFjdC5KU1guRWxlbWVudCwgUmVhY3QuUmVhY3ROb2RlLCBSZWFjdC5SZWFjdE5vZGVdXG4gIHwgbnVsbFxuXG4vKiogdmlld3BvcnQgbWV0YWRhdGEgbm9kZSAqL1xuZXhwb3J0IHR5cGUgSGVhZERhdGEgPSBSZWFjdC5SZWFjdE5vZGVcblxuZXhwb3J0IHR5cGUgTGF6eUNhY2hlTm9kZSA9IHtcbiAgLyoqXG4gICAqIFdoZW4gcnNjIGlzIG51bGwsIHRoaXMgaXMgYSBsYXppbHktaW5pdGlhbGl6ZWQgY2FjaGUgbm9kZS5cbiAgICpcbiAgICogSWYgdGhlIGFwcCBhdHRlbXB0cyB0byByZW5kZXIgaXQsIGl0IHRyaWdnZXJzIGEgbGF6eSBkYXRhIGZldGNoLFxuICAgKiBwb3N0cG9uZXMgdGhlIHJlbmRlciwgYW5kIHNjaGVkdWxlcyBhbiB1cGRhdGUgdG8gYSBuZXcgdHJlZS5cbiAgICpcbiAgICogVE9ETzogVGhpcyBtZWNoYW5pc20gc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gUFBSIGlzIGVuYWJsZWQsIHRob3VnaCBpdFxuICAgKiBjdXJyZW50bHkgaXMgaW4gc29tZSBjYXNlcyB1bnRpbCB3ZSd2ZSBpbXBsZW1lbnRlZCBwYXJ0aWFsXG4gICAqIHNlZ21lbnQgZmV0Y2hpbmcuXG4gICAqL1xuICByc2M6IG51bGxcblxuICAvKipcbiAgICogQSBwcmVmZXRjaGVkIHZlcnNpb24gb2YgdGhlIHNlZ21lbnQgZGF0YS4gU2VlIGV4cGxhbmF0aW9uIGluIGNvcnJlc3BvbmRpbmdcbiAgICogZmllbGQgb2YgUmVhZHlDYWNoZU5vZGUgKGJlbG93KS5cbiAgICpcbiAgICogU2luY2UgTGF6eUNhY2hlTm9kZSBtb3N0bHkgb25seSBleGlzdHMgaW4gdGhlIG5vbi1QUFIgaW1wbGVtZW50YXRpb24sIHRoaXNcbiAgICogd2lsbCB1c3VhbGx5IGJlIG51bGwsIGJ1dCBpdCBjb3VsZCBoYXZlIGJlZW4gY2xvbmVkIGZyb20gYSBwcmV2aW91c1xuICAgKiBDYWNoZU5vZGUgdGhhdCB3YXMgY3JlYXRlZCBieSB0aGUgUFBSIGltcGxlbWVudGF0aW9uLiBFdmVudHVhbGx5IHdlIHdhbnRcbiAgICogdG8gbWlncmF0ZSBldmVyeXRoaW5nIGF3YXkgZnJvbSBMYXp5Q2FjaGVOb2RlIGVudGlyZWx5LlxuICAgKi9cbiAgcHJlZmV0Y2hSc2M6IFJlYWN0LlJlYWN0Tm9kZVxuXG4gIC8qKlxuICAgKiBBIHBlbmRpbmcgcmVzcG9uc2UgZm9yIHRoZSBsYXp5IGRhdGEgZmV0Y2guIElmIHRoaXMgaXMgbm90IHByZXNlbnRcbiAgICogZHVyaW5nIHJlbmRlciwgaXQgaXMgbGF6aWx5IGNyZWF0ZWQuXG4gICAqL1xuICBsYXp5RGF0YTogUHJvbWlzZTxGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0PiB8IG51bGxcblxuICBwcmVmZXRjaEhlYWQ6IEhlYWREYXRhIHwgbnVsbFxuXG4gIGhlYWQ6IEhlYWREYXRhXG5cbiAgbG9hZGluZzogTG9hZGluZ01vZHVsZURhdGEgfCBQcm9taXNlPExvYWRpbmdNb2R1bGVEYXRhPlxuXG4gIC8qKlxuICAgKiBDaGlsZCBwYXJhbGxlbCByb3V0ZXMuXG4gICAqL1xuICBwYXJhbGxlbFJvdXRlczogTWFwPHN0cmluZywgQ2hpbGRTZWdtZW50TWFwPlxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIG9mIHRoZSBuYXZpZ2F0aW9uIHRoYXQgbGFzdCB1cGRhdGVkIHRoZSBDYWNoZU5vZGUncyBkYXRhLiBJZlxuICAgKiBhIENhY2hlTm9kZSBpcyByZXVzZWQgZnJvbSBhIHByZXZpb3VzIG5hdmlnYXRpb24sIHRoaXMgdmFsdWUgaXMgbm90XG4gICAqIHVwZGF0ZWQuIFVzZWQgdG8gdHJhY2sgdGhlIHN0YWxlbmVzcyBvZiB0aGUgZGF0YS5cbiAgICovXG4gIG5hdmlnYXRlZEF0OiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgUmVhZHlDYWNoZU5vZGUgPSB7XG4gIC8qKlxuICAgKiBXaGVuIHJzYyBpcyBub3QgbnVsbCwgaXQgcmVwcmVzZW50cyB0aGUgUlNDIGRhdGEgZm9yIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHNlZ21lbnQuXG4gICAqXG4gICAqIGBudWxsYCBpcyBhIHZhbGlkIFJlYWN0IE5vZGUgYnV0IGJlY2F1c2Ugc2VnbWVudCBkYXRhIGlzIGFsd2F5cyBhXG4gICAqIDxMYXlvdXRSb3V0ZXI+IGNvbXBvbmVudCwgd2UgY2FuIHVzZSBgbnVsbGAgdG8gcmVwcmVzZW50IGVtcHR5LlxuICAgKlxuICAgKiBUT0RPOiBGb3IgYWRkaXRpb25hbCB0eXBlIHNhZmV0eSwgdXBkYXRlIHRoaXMgdHlwZSB0b1xuICAgKiBFeGNsdWRlPFJlYWN0LlJlYWN0Tm9kZSwgbnVsbD4uIE5lZWQgdG8gdXBkYXRlIGNyZWF0ZUVtcHR5Q2FjaGVOb2RlIHRvXG4gICAqIGFjY2VwdCByc2MgYXMgYW4gYXJndW1lbnQsIG9yIGp1c3QgaW5saW5lIHRoZSBjYWxsZXJzLlxuICAgKi9cbiAgcnNjOiBSZWFjdC5SZWFjdE5vZGVcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIHN0YXRpYyB2ZXJzaW9uIG9mIHRoZSBzZWdtZW50IHRoYXQgY2FuIGJlIHNob3duIGltbWVkaWF0ZWx5LFxuICAgKiBhbmQgbWF5IG9yIG1heSBub3QgY29udGFpbiBkeW5hbWljIGhvbGVzLiBJdCdzIHByZWZldGNoZWQgYmVmb3JlIGFcbiAgICogbmF2aWdhdGlvbiBvY2N1cnMuXG4gICAqXG4gICAqIER1cmluZyByZW5kZXJpbmcsIHdlIHdpbGwgY2hvb3NlIHdoZXRoZXIgdG8gcmVuZGVyIGByc2NgIG9yIGBwcmVmZXRjaFJzY2BcbiAgICogd2l0aCBgdXNlRGVmZXJyZWRWYWx1ZWAuIEFzIHdpdGggdGhlIGByc2NgIGZpZWxkLCBhIHZhbHVlIG9mIGBudWxsYCBtZWFuc1xuICAgKiBubyB2YWx1ZSB3YXMgcHJvdmlkZWQuIEluIHRoaXMgY2FzZSwgdGhlIExheW91dFJvdXRlciB3aWxsIGdvIHN0cmFpZ2h0IHRvXG4gICAqIHJlbmRlcmluZyB0aGUgYHJzY2AgdmFsdWU7IGlmIHRoYXQgb25lIGlzIGFsc28gbWlzc2luZywgaXQgd2lsbCBzdXNwZW5kIGFuZFxuICAgKiB0cmlnZ2VyIGEgbGF6eSBmZXRjaC5cbiAgICovXG4gIHByZWZldGNoUnNjOiBSZWFjdC5SZWFjdE5vZGVcblxuICAvKipcbiAgICogVGhlcmUgc2hvdWxkIG5ldmVyIGJlIGEgbGF6eSBkYXRhIHJlcXVlc3QgaW4gdGhpcyBjYXNlLlxuICAgKi9cbiAgbGF6eURhdGE6IG51bGxcbiAgcHJlZmV0Y2hIZWFkOiBIZWFkRGF0YSB8IG51bGxcblxuICBoZWFkOiBIZWFkRGF0YVxuXG4gIGxvYWRpbmc6IExvYWRpbmdNb2R1bGVEYXRhIHwgUHJvbWlzZTxMb2FkaW5nTW9kdWxlRGF0YT5cblxuICBwYXJhbGxlbFJvdXRlczogTWFwPHN0cmluZywgQ2hpbGRTZWdtZW50TWFwPlxuXG4gIG5hdmlnYXRlZEF0OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOYXZpZ2F0ZU9wdGlvbnMge1xuICBzY3JvbGw/OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlZmV0Y2hPcHRpb25zIHtcbiAga2luZDogUHJlZmV0Y2hLaW5kXG4gIG9uSW52YWxpZGF0ZT86ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBSb3V0ZXJJbnN0YW5jZSB7XG4gIC8qKlxuICAgKiBOYXZpZ2F0ZSB0byB0aGUgcHJldmlvdXMgaGlzdG9yeSBlbnRyeS5cbiAgICovXG4gIGJhY2soKTogdm9pZFxuICAvKipcbiAgICogTmF2aWdhdGUgdG8gdGhlIG5leHQgaGlzdG9yeSBlbnRyeS5cbiAgICovXG4gIGZvcndhcmQoKTogdm9pZFxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgY3VycmVudCBwYWdlLlxuICAgKi9cbiAgcmVmcmVzaCgpOiB2b2lkXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBjdXJyZW50IHBhZ2UuIFVzZSBpbiBkZXZlbG9wbWVudCBvbmx5LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGhtclJlZnJlc2goKTogdm9pZFxuICAvKipcbiAgICogTmF2aWdhdGUgdG8gdGhlIHByb3ZpZGVkIGhyZWYuXG4gICAqIFB1c2hlcyBhIG5ldyBoaXN0b3J5IGVudHJ5LlxuICAgKi9cbiAgcHVzaChocmVmOiBzdHJpbmcsIG9wdGlvbnM/OiBOYXZpZ2F0ZU9wdGlvbnMpOiB2b2lkXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZSB0byB0aGUgcHJvdmlkZWQgaHJlZi5cbiAgICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgaGlzdG9yeSBlbnRyeS5cbiAgICovXG4gIHJlcGxhY2UoaHJlZjogc3RyaW5nLCBvcHRpb25zPzogTmF2aWdhdGVPcHRpb25zKTogdm9pZFxuICAvKipcbiAgICogUHJlZmV0Y2ggdGhlIHByb3ZpZGVkIGhyZWYuXG4gICAqL1xuICBwcmVmZXRjaChocmVmOiBzdHJpbmcsIG9wdGlvbnM/OiBQcmVmZXRjaE9wdGlvbnMpOiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBBcHBSb3V0ZXJDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxBcHBSb3V0ZXJJbnN0YW5jZSB8IG51bGw+KFxuICBudWxsXG4pXG5leHBvcnQgY29uc3QgTGF5b3V0Um91dGVyQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8e1xuICBwYXJlbnRUcmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICBwYXJlbnRDYWNoZU5vZGU6IENhY2hlTm9kZVxuICBwYXJlbnRTZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGggfCBudWxsXG4gIHVybDogc3RyaW5nXG59IHwgbnVsbD4obnVsbClcblxuZXhwb3J0IGNvbnN0IEdsb2JhbExheW91dFJvdXRlckNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PHtcbiAgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgZm9jdXNBbmRTY3JvbGxSZWY6IEZvY3VzQW5kU2Nyb2xsUmVmXG4gIG5leHRVcmw6IHN0cmluZyB8IG51bGxcbn0+KG51bGwgYXMgYW55KVxuXG5leHBvcnQgY29uc3QgVGVtcGxhdGVDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxSZWFjdC5SZWFjdE5vZGU+KG51bGwgYXMgYW55KVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBBcHBSb3V0ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0FwcFJvdXRlckNvbnRleHQnXG4gIExheW91dFJvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSAnTGF5b3V0Um91dGVyQ29udGV4dCdcbiAgR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0J1xuICBUZW1wbGF0ZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnVGVtcGxhdGVDb250ZXh0J1xufVxuXG5leHBvcnQgY29uc3QgTWlzc2luZ1Nsb3RDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKVxuIl0sIm5hbWVzIjpbIkFwcFJvdXRlckNvbnRleHQiLCJHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0IiwiTGF5b3V0Um91dGVyQ29udGV4dCIsIk1pc3NpbmdTbG90Q29udGV4dCIsIlRlbXBsYXRlQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRpc3BsYXlOYW1lIiwiU2V0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/bloom-filter.js":
/*!**************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/bloom-filter.js ***!
\**************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// minimal implementation MurmurHash2 hash function\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"BloomFilter\", ({\n enumerable: true,\n get: function() {\n return BloomFilter;\n }\n}));\nfunction murmurhash2(str) {\n let h = 0;\n for(let i = 0; i < str.length; i++){\n const c = str.charCodeAt(i);\n h = Math.imul(h ^ c, 0x5bd1e995);\n h ^= h >>> 13;\n h = Math.imul(h, 0x5bd1e995);\n }\n return h >>> 0;\n}\n// default to 0.01% error rate as the filter compresses very well\nconst DEFAULT_ERROR_RATE = 0.0001;\nclass BloomFilter {\n static from(items, errorRate) {\n if (errorRate === void 0) errorRate = DEFAULT_ERROR_RATE;\n const filter = new BloomFilter(items.length, errorRate);\n for (const item of items){\n filter.add(item);\n }\n return filter;\n }\n export() {\n const data = {\n numItems: this.numItems,\n errorRate: this.errorRate,\n numBits: this.numBits,\n numHashes: this.numHashes,\n bitArray: this.bitArray\n };\n if (false) {}\n return data;\n }\n import(data) {\n this.numItems = data.numItems;\n this.errorRate = data.errorRate;\n this.numBits = data.numBits;\n this.numHashes = data.numHashes;\n this.bitArray = data.bitArray;\n }\n add(item) {\n const hashValues = this.getHashValues(item);\n hashValues.forEach((hash)=>{\n this.bitArray[hash] = 1;\n });\n }\n contains(item) {\n const hashValues = this.getHashValues(item);\n return hashValues.every((hash)=>this.bitArray[hash]);\n }\n getHashValues(item) {\n const hashValues = [];\n for(let i = 1; i <= this.numHashes; i++){\n const hash = murmurhash2(\"\" + item + i) % this.numBits;\n hashValues.push(hash);\n }\n return hashValues;\n }\n constructor(numItems, errorRate = DEFAULT_ERROR_RATE){\n this.numItems = numItems;\n this.errorRate = errorRate;\n this.numBits = Math.ceil(-(numItems * Math.log(errorRate)) / (Math.log(2) * Math.log(2)));\n this.numHashes = Math.ceil(this.numBits / numItems * Math.log(2));\n this.bitArray = new Array(this.numBits).fill(0);\n }\n} //# sourceMappingURL=bloom-filter.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9ibG9vbS1maWx0ZXIuanMiLCJtYXBwaW5ncyI6IkFBQUEsbURBQW1EOzs7OzsrQ0FldENBOzs7ZUFBQUE7OztBQWRiLFNBQVNDLFlBQVlDLEdBQVc7SUFDOUIsSUFBSUMsSUFBSTtJQUNSLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJRixJQUFJRyxNQUFNLEVBQUVELElBQUs7UUFDbkMsTUFBTUUsSUFBSUosSUFBSUssVUFBVSxDQUFDSDtRQUN6QkQsSUFBSUssS0FBS0MsSUFBSSxDQUFDTixJQUFJRyxHQUFHO1FBQ3JCSCxLQUFLQSxNQUFNO1FBQ1hBLElBQUlLLEtBQUtDLElBQUksQ0FBQ04sR0FBRztJQUNuQjtJQUNBLE9BQU9BLE1BQU07QUFDZjtBQUVBLGlFQUFpRTtBQUNqRSxNQUFNTyxxQkFBcUI7QUFFcEIsTUFBTVY7SUFpQlgsT0FBT1csS0FBS0MsS0FBZSxFQUFFQyxTQUE4QixFQUFFO1FBQWhDQSxJQUFBQSxjQUFBQSxLQUFBQSxHQUFBQSxZQUFZSDtRQUN2QyxNQUFNSSxTQUFTLElBQUlkLFlBQVlZLE1BQU1QLE1BQU0sRUFBRVE7UUFFN0MsS0FBSyxNQUFNRSxRQUFRSCxNQUFPO1lBQ3hCRSxPQUFPRSxHQUFHLENBQUNEO1FBQ2I7UUFDQSxPQUFPRDtJQUNUO0lBRUFHLFNBQVM7UUFDUCxNQUFNQyxPQUFPO1lBQ1hDLFVBQVUsSUFBSSxDQUFDQSxRQUFRO1lBQ3ZCTixXQUFXLElBQUksQ0FBQ0EsU0FBUztZQUN6Qk8sU0FBUyxJQUFJLENBQUNBLE9BQU87WUFDckJDLFdBQVcsSUFBSSxDQUFDQSxTQUFTO1lBQ3pCQyxVQUFVLElBQUksQ0FBQ0EsUUFBUTtRQUN6QjtRQUVBLElBQUlDLEtBQXFDLEVBQUUsRUFhMUM7UUFFRCxPQUFPTDtJQUNUO0lBRUFnQixPQUFPaEIsSUFBeUMsRUFBRTtRQUNoRCxJQUFJLENBQUNDLFFBQVEsR0FBR0QsS0FBS0MsUUFBUTtRQUM3QixJQUFJLENBQUNOLFNBQVMsR0FBR0ssS0FBS0wsU0FBUztRQUMvQixJQUFJLENBQUNPLE9BQU8sR0FBR0YsS0FBS0UsT0FBTztRQUMzQixJQUFJLENBQUNDLFNBQVMsR0FBR0gsS0FBS0csU0FBUztRQUMvQixJQUFJLENBQUNDLFFBQVEsR0FBR0osS0FBS0ksUUFBUTtJQUMvQjtJQUVBTixJQUFJRCxJQUFZLEVBQUU7UUFDaEIsTUFBTW9CLGFBQWEsSUFBSSxDQUFDQyxhQUFhLENBQUNyQjtRQUN0Q29CLFdBQVdFLE9BQU8sQ0FBQyxDQUFDQztZQUNsQixJQUFJLENBQUNoQixRQUFRLENBQUNnQixLQUFLLEdBQUc7UUFDeEI7SUFDRjtJQUVBQyxTQUFTeEIsSUFBWSxFQUFFO1FBQ3JCLE1BQU1vQixhQUFhLElBQUksQ0FBQ0MsYUFBYSxDQUFDckI7UUFDdEMsT0FBT29CLFdBQVdLLEtBQUssQ0FBQyxDQUFDRixPQUFTLElBQUksQ0FBQ2hCLFFBQVEsQ0FBQ2dCLEtBQUs7SUFDdkQ7SUFFQUYsY0FBY3JCLElBQVksRUFBRTtRQUMxQixNQUFNb0IsYUFBYSxFQUFFO1FBQ3JCLElBQUssSUFBSS9CLElBQUksR0FBR0EsS0FBSyxJQUFJLENBQUNpQixTQUFTLEVBQUVqQixJQUFLO1lBQ3hDLE1BQU1rQyxPQUFPckMsWUFBYSxLQUFFYyxPQUFPWCxLQUFPLElBQUksQ0FBQ2dCLE9BQU87WUFDdERlLFdBQVdNLElBQUksQ0FBQ0g7UUFDbEI7UUFDQSxPQUFPSDtJQUNUO0lBekVBTyxZQUFZdkIsUUFBZ0IsRUFBRU4sWUFBb0JILGtCQUFrQixDQUFFO1FBQ3BFLElBQUksQ0FBQ1MsUUFBUSxHQUFHQTtRQUNoQixJQUFJLENBQUNOLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDTyxPQUFPLEdBQUdaLEtBQUttQyxJQUFJLENBQ3RCLENBQUV4QixDQUFBQSxXQUFXWCxLQUFLb0MsR0FBRyxDQUFDL0IsVUFBQUEsQ0FBUyxJQUFNTCxLQUFLb0MsR0FBRyxDQUFDLEtBQUtwQyxLQUFLb0MsR0FBRyxDQUFDLEdBQUM7UUFFL0QsSUFBSSxDQUFDdkIsU0FBUyxHQUFHYixLQUFLbUMsSUFBSSxDQUFFLElBQUksQ0FBQ3ZCLE9BQU8sR0FBR0QsV0FBWVgsS0FBS29DLEdBQUcsQ0FBQztRQUNoRSxJQUFJLENBQUN0QixRQUFRLEdBQUcsSUFBSXVCLE1BQU0sSUFBSSxDQUFDekIsT0FBTyxFQUFFMEIsSUFBSSxDQUFDO0lBQy9DO0FBa0VGIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9ibG9vbS1maWx0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gbWluaW1hbCBpbXBsZW1lbnRhdGlvbiBNdXJtdXJIYXNoMiBoYXNoIGZ1bmN0aW9uXG5mdW5jdGlvbiBtdXJtdXJoYXNoMihzdHI6IHN0cmluZykge1xuICBsZXQgaCA9IDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoID0gTWF0aC5pbXVsKGggXiBjLCAweDViZDFlOTk1KVxuICAgIGggXj0gaCA+Pj4gMTNcbiAgICBoID0gTWF0aC5pbXVsKGgsIDB4NWJkMWU5OTUpXG4gIH1cbiAgcmV0dXJuIGggPj4+IDBcbn1cblxuLy8gZGVmYXVsdCB0byAwLjAxJSBlcnJvciByYXRlIGFzIHRoZSBmaWx0ZXIgY29tcHJlc3NlcyB2ZXJ5IHdlbGxcbmNvbnN0IERFRkFVTFRfRVJST1JfUkFURSA9IDAuMDAwMVxuXG5leHBvcnQgY2xhc3MgQmxvb21GaWx0ZXIge1xuICBudW1JdGVtczogbnVtYmVyXG4gIGVycm9yUmF0ZTogbnVtYmVyXG4gIG51bUJpdHM6IG51bWJlclxuICBudW1IYXNoZXM6IG51bWJlclxuICBiaXRBcnJheTogbnVtYmVyW11cblxuICBjb25zdHJ1Y3RvcihudW1JdGVtczogbnVtYmVyLCBlcnJvclJhdGU6IG51bWJlciA9IERFRkFVTFRfRVJST1JfUkFURSkge1xuICAgIHRoaXMubnVtSXRlbXMgPSBudW1JdGVtc1xuICAgIHRoaXMuZXJyb3JSYXRlID0gZXJyb3JSYXRlXG4gICAgdGhpcy5udW1CaXRzID0gTWF0aC5jZWlsKFxuICAgICAgLShudW1JdGVtcyAqIE1hdGgubG9nKGVycm9yUmF0ZSkpIC8gKE1hdGgubG9nKDIpICogTWF0aC5sb2coMikpXG4gICAgKVxuICAgIHRoaXMubnVtSGFzaGVzID0gTWF0aC5jZWlsKCh0aGlzLm51bUJpdHMgLyBudW1JdGVtcykgKiBNYXRoLmxvZygyKSlcbiAgICB0aGlzLmJpdEFycmF5ID0gbmV3IEFycmF5KHRoaXMubnVtQml0cykuZmlsbCgwKVxuICB9XG5cbiAgc3RhdGljIGZyb20oaXRlbXM6IHN0cmluZ1tdLCBlcnJvclJhdGUgPSBERUZBVUxUX0VSUk9SX1JBVEUpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBuZXcgQmxvb21GaWx0ZXIoaXRlbXMubGVuZ3RoLCBlcnJvclJhdGUpXG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGZpbHRlci5hZGQoaXRlbSlcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlclxuICB9XG5cbiAgZXhwb3J0KCkge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBudW1JdGVtczogdGhpcy5udW1JdGVtcyxcbiAgICAgIGVycm9yUmF0ZTogdGhpcy5lcnJvclJhdGUsXG4gICAgICBudW1CaXRzOiB0aGlzLm51bUJpdHMsXG4gICAgICBudW1IYXNoZXM6IHRoaXMubnVtSGFzaGVzLFxuICAgICAgYml0QXJyYXk6IHRoaXMuYml0QXJyYXksXG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSA9PT0gJ25vZGVqcycpIHtcbiAgICAgIGlmICh0aGlzLmVycm9yUmF0ZSA8IERFRkFVTFRfRVJST1JfUkFURSkge1xuICAgICAgICBjb25zdCBmaWx0ZXJEYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgICAgICAgY29uc3QgZ3ppcFNpemUgPSAoXG4gICAgICAgICAgcmVxdWlyZSgnbmV4dC9kaXN0L2NvbXBpbGVkL2d6aXAtc2l6ZScpIGFzIHR5cGVvZiBpbXBvcnQoJ25leHQvZGlzdC9jb21waWxlZC9nemlwLXNpemUnKVxuICAgICAgICApLnN5bmMoZmlsdGVyRGF0YSlcblxuICAgICAgICBpZiAoZ3ppcFNpemUgPiAxMDI0KSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYENyZWF0aW5nIGZpbHRlciB3aXRoIGVycm9yIHJhdGUgbGVzcyB0aGFuIDAuMSUgKDAuMDAxKSBjYW4gaW5jcmVhc2UgdGhlIHNpemUgZHJhbWF0aWNhbGx5IHByb2NlZWQgd2l0aCBjYXV0aW9uLiBSZWNlaXZlZCBlcnJvciByYXRlICR7dGhpcy5lcnJvclJhdGV9IHJlc3VsdGVkIGluIHNpemUgJHtmaWx0ZXJEYXRhLmxlbmd0aH0gYnl0ZXMsICR7Z3ppcFNpemV9IGJ5dGVzIChnemlwKWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgaW1wb3J0KGRhdGE6IFJldHVyblR5cGU8KHR5cGVvZiB0aGlzKVsnZXhwb3J0J10+KSB7XG4gICAgdGhpcy5udW1JdGVtcyA9IGRhdGEubnVtSXRlbXNcbiAgICB0aGlzLmVycm9yUmF0ZSA9IGRhdGEuZXJyb3JSYXRlXG4gICAgdGhpcy5udW1CaXRzID0gZGF0YS5udW1CaXRzXG4gICAgdGhpcy5udW1IYXNoZXMgPSBkYXRhLm51bUhhc2hlc1xuICAgIHRoaXMuYml0QXJyYXkgPSBkYXRhLmJpdEFycmF5XG4gIH1cblxuICBhZGQoaXRlbTogc3RyaW5nKSB7XG4gICAgY29uc3QgaGFzaFZhbHVlcyA9IHRoaXMuZ2V0SGFzaFZhbHVlcyhpdGVtKVxuICAgIGhhc2hWYWx1ZXMuZm9yRWFjaCgoaGFzaCkgPT4ge1xuICAgICAgdGhpcy5iaXRBcnJheVtoYXNoXSA9IDFcbiAgICB9KVxuICB9XG5cbiAgY29udGFpbnMoaXRlbTogc3RyaW5nKSB7XG4gICAgY29uc3QgaGFzaFZhbHVlcyA9IHRoaXMuZ2V0SGFzaFZhbHVlcyhpdGVtKVxuICAgIHJldHVybiBoYXNoVmFsdWVzLmV2ZXJ5KChoYXNoKSA9PiB0aGlzLmJpdEFycmF5W2hhc2hdKVxuICB9XG5cbiAgZ2V0SGFzaFZhbHVlcyhpdGVtOiBzdHJpbmcpIHtcbiAgICBjb25zdCBoYXNoVmFsdWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLm51bUhhc2hlczsgaSsrKSB7XG4gICAgICBjb25zdCBoYXNoID0gbXVybXVyaGFzaDIoYCR7aXRlbX0ke2l9YCkgJSB0aGlzLm51bUJpdHNcbiAgICAgIGhhc2hWYWx1ZXMucHVzaChoYXNoKVxuICAgIH1cbiAgICByZXR1cm4gaGFzaFZhbHVlc1xuICB9XG59XG4iXSwibmFtZXMiOlsiQmxvb21GaWx0ZXIiLCJtdXJtdXJoYXNoMiIsInN0ciIsImgiLCJpIiwibGVuZ3RoIiwiYyIsImNoYXJDb2RlQXQiLCJNYXRoIiwiaW11bCIsIkRFRkFVTFRfRVJST1JfUkFURSIsImZyb20iLCJpdGVtcyIsImVycm9yUmF0ZSIsImZpbHRlciIsIml0ZW0iLCJhZGQiLCJleHBvcnQiLCJkYXRhIiwibnVtSXRlbXMiLCJudW1CaXRzIiwibnVtSGFzaGVzIiwiYml0QXJyYXkiLCJwcm9jZXNzIiwiZW52IiwiTkVYVF9SVU5USU1FIiwiZmlsdGVyRGF0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnemlwU2l6ZSIsInJlcXVpcmUiLCJzeW5jIiwiY29uc29sZSIsIndhcm4iLCJpbXBvcnQiLCJoYXNoVmFsdWVzIiwiZ2V0SGFzaFZhbHVlcyIsImZvckVhY2giLCJoYXNoIiwiY29udGFpbnMiLCJldmVyeSIsInB1c2giLCJjb25zdHJ1Y3RvciIsImNlaWwiLCJsb2ciLCJBcnJheSIsImZpbGwiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/bloom-filter.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/constants.js":
/*!***********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/constants.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 APP_BUILD_MANIFEST: function() {\n return APP_BUILD_MANIFEST;\n },\n APP_CLIENT_INTERNALS: function() {\n return APP_CLIENT_INTERNALS;\n },\n APP_PATHS_MANIFEST: function() {\n return APP_PATHS_MANIFEST;\n },\n APP_PATH_ROUTES_MANIFEST: function() {\n return APP_PATH_ROUTES_MANIFEST;\n },\n AdapterOutputType: function() {\n return AdapterOutputType;\n },\n BARREL_OPTIMIZATION_PREFIX: function() {\n return BARREL_OPTIMIZATION_PREFIX;\n },\n BLOCKED_PAGES: function() {\n return BLOCKED_PAGES;\n },\n BUILD_ID_FILE: function() {\n return BUILD_ID_FILE;\n },\n BUILD_MANIFEST: function() {\n return BUILD_MANIFEST;\n },\n CLIENT_PUBLIC_FILES_PATH: function() {\n return CLIENT_PUBLIC_FILES_PATH;\n },\n CLIENT_REFERENCE_MANIFEST: function() {\n return CLIENT_REFERENCE_MANIFEST;\n },\n CLIENT_STATIC_FILES_PATH: function() {\n return CLIENT_STATIC_FILES_PATH;\n },\n CLIENT_STATIC_FILES_RUNTIME_AMP: function() {\n return CLIENT_STATIC_FILES_RUNTIME_AMP;\n },\n CLIENT_STATIC_FILES_RUNTIME_MAIN: function() {\n return CLIENT_STATIC_FILES_RUNTIME_MAIN;\n },\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP: function() {\n return CLIENT_STATIC_FILES_RUNTIME_MAIN_APP;\n },\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS: function() {\n return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS;\n },\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL: function() {\n return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL;\n },\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH: function() {\n return CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH;\n },\n CLIENT_STATIC_FILES_RUNTIME_WEBPACK: function() {\n return CLIENT_STATIC_FILES_RUNTIME_WEBPACK;\n },\n COMPILER_INDEXES: function() {\n return COMPILER_INDEXES;\n },\n COMPILER_NAMES: function() {\n return COMPILER_NAMES;\n },\n CONFIG_FILES: function() {\n return CONFIG_FILES;\n },\n DEFAULT_RUNTIME_WEBPACK: function() {\n return DEFAULT_RUNTIME_WEBPACK;\n },\n DEFAULT_SANS_SERIF_FONT: function() {\n return DEFAULT_SANS_SERIF_FONT;\n },\n DEFAULT_SERIF_FONT: function() {\n return DEFAULT_SERIF_FONT;\n },\n DEV_CLIENT_MIDDLEWARE_MANIFEST: function() {\n return DEV_CLIENT_MIDDLEWARE_MANIFEST;\n },\n DEV_CLIENT_PAGES_MANIFEST: function() {\n return DEV_CLIENT_PAGES_MANIFEST;\n },\n DYNAMIC_CSS_MANIFEST: function() {\n return DYNAMIC_CSS_MANIFEST;\n },\n EDGE_RUNTIME_WEBPACK: function() {\n return EDGE_RUNTIME_WEBPACK;\n },\n EDGE_UNSUPPORTED_NODE_APIS: function() {\n return EDGE_UNSUPPORTED_NODE_APIS;\n },\n EXPORT_DETAIL: function() {\n return EXPORT_DETAIL;\n },\n EXPORT_MARKER: function() {\n return EXPORT_MARKER;\n },\n FUNCTIONS_CONFIG_MANIFEST: function() {\n return FUNCTIONS_CONFIG_MANIFEST;\n },\n IMAGES_MANIFEST: function() {\n return IMAGES_MANIFEST;\n },\n INTERCEPTION_ROUTE_REWRITE_MANIFEST: function() {\n return INTERCEPTION_ROUTE_REWRITE_MANIFEST;\n },\n MIDDLEWARE_BUILD_MANIFEST: function() {\n return MIDDLEWARE_BUILD_MANIFEST;\n },\n MIDDLEWARE_MANIFEST: function() {\n return MIDDLEWARE_MANIFEST;\n },\n MIDDLEWARE_REACT_LOADABLE_MANIFEST: function() {\n return MIDDLEWARE_REACT_LOADABLE_MANIFEST;\n },\n MODERN_BROWSERSLIST_TARGET: function() {\n return _modernbrowserslisttarget.default;\n },\n NEXT_BUILTIN_DOCUMENT: function() {\n return NEXT_BUILTIN_DOCUMENT;\n },\n NEXT_FONT_MANIFEST: function() {\n return NEXT_FONT_MANIFEST;\n },\n PAGES_MANIFEST: function() {\n return PAGES_MANIFEST;\n },\n PHASE_DEVELOPMENT_SERVER: function() {\n return PHASE_DEVELOPMENT_SERVER;\n },\n PHASE_EXPORT: function() {\n return PHASE_EXPORT;\n },\n PHASE_INFO: function() {\n return PHASE_INFO;\n },\n PHASE_PRODUCTION_BUILD: function() {\n return PHASE_PRODUCTION_BUILD;\n },\n PHASE_PRODUCTION_SERVER: function() {\n return PHASE_PRODUCTION_SERVER;\n },\n PHASE_TEST: function() {\n return PHASE_TEST;\n },\n PRERENDER_MANIFEST: function() {\n return PRERENDER_MANIFEST;\n },\n REACT_LOADABLE_MANIFEST: function() {\n return REACT_LOADABLE_MANIFEST;\n },\n ROUTES_MANIFEST: function() {\n return ROUTES_MANIFEST;\n },\n RSC_MODULE_TYPES: function() {\n return RSC_MODULE_TYPES;\n },\n SERVER_DIRECTORY: function() {\n return SERVER_DIRECTORY;\n },\n SERVER_FILES_MANIFEST: function() {\n return SERVER_FILES_MANIFEST;\n },\n SERVER_PROPS_ID: function() {\n return SERVER_PROPS_ID;\n },\n SERVER_REFERENCE_MANIFEST: function() {\n return SERVER_REFERENCE_MANIFEST;\n },\n STATIC_PROPS_ID: function() {\n return STATIC_PROPS_ID;\n },\n STATIC_STATUS_PAGES: function() {\n return STATIC_STATUS_PAGES;\n },\n STRING_LITERAL_DROP_BUNDLE: function() {\n return STRING_LITERAL_DROP_BUNDLE;\n },\n SUBRESOURCE_INTEGRITY_MANIFEST: function() {\n return SUBRESOURCE_INTEGRITY_MANIFEST;\n },\n SYSTEM_ENTRYPOINTS: function() {\n return SYSTEM_ENTRYPOINTS;\n },\n TRACE_OUTPUT_VERSION: function() {\n return TRACE_OUTPUT_VERSION;\n },\n TURBOPACK_CLIENT_BUILD_MANIFEST: function() {\n return TURBOPACK_CLIENT_BUILD_MANIFEST;\n },\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST: function() {\n return TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST;\n },\n TURBO_TRACE_DEFAULT_MEMORY_LIMIT: function() {\n return TURBO_TRACE_DEFAULT_MEMORY_LIMIT;\n },\n UNDERSCORE_NOT_FOUND_ROUTE: function() {\n return UNDERSCORE_NOT_FOUND_ROUTE;\n },\n UNDERSCORE_NOT_FOUND_ROUTE_ENTRY: function() {\n return UNDERSCORE_NOT_FOUND_ROUTE_ENTRY;\n },\n WEBPACK_STATS: function() {\n return WEBPACK_STATS;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _modernbrowserslisttarget = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./modern-browserslist-target */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/modern-browserslist-target.js\"));\nconst COMPILER_NAMES = {\n client: 'client',\n server: 'server',\n edgeServer: 'edge-server'\n};\nvar AdapterOutputType = /*#__PURE__*/ function(AdapterOutputType) {\n /**\n * `PAGES` represents all the React pages that are under `pages/`.\n */ AdapterOutputType[\"PAGES\"] = \"PAGES\";\n /**\n * `PAGES_API` represents all the API routes under `pages/api/`.\n */ AdapterOutputType[\"PAGES_API\"] = \"PAGES_API\";\n /**\n * `APP_PAGE` represents all the React pages that are under `app/` with the\n * filename of `page.{j,t}s{,x}`.\n */ AdapterOutputType[\"APP_PAGE\"] = \"APP_PAGE\";\n /**\n * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the\n * filename of `route.{j,t}s{,x}`.\n */ AdapterOutputType[\"APP_ROUTE\"] = \"APP_ROUTE\";\n /**\n * `PRERENDER` represents an ISR enabled route that might\n * have a seeded cache entry or fallback generated during build\n */ AdapterOutputType[\"PRERENDER\"] = \"PRERENDER\";\n /**\n * `STATIC_FILE` represents a static file (ie /_next/static)\n */ AdapterOutputType[\"STATIC_FILE\"] = \"STATIC_FILE\";\n /**\n * `MIDDLEWARE` represents the middleware output if present\n */ AdapterOutputType[\"MIDDLEWARE\"] = \"MIDDLEWARE\";\n return AdapterOutputType;\n}({});\nconst COMPILER_INDEXES = {\n [COMPILER_NAMES.client]: 0,\n [COMPILER_NAMES.server]: 1,\n [COMPILER_NAMES.edgeServer]: 2\n};\nconst UNDERSCORE_NOT_FOUND_ROUTE = '/_not-found';\nconst UNDERSCORE_NOT_FOUND_ROUTE_ENTRY = \"\" + UNDERSCORE_NOT_FOUND_ROUTE + \"/page\";\nconst PHASE_EXPORT = 'phase-export';\nconst PHASE_PRODUCTION_BUILD = 'phase-production-build';\nconst PHASE_PRODUCTION_SERVER = 'phase-production-server';\nconst PHASE_DEVELOPMENT_SERVER = 'phase-development-server';\nconst PHASE_TEST = 'phase-test';\nconst PHASE_INFO = 'phase-info';\nconst PAGES_MANIFEST = 'pages-manifest.json';\nconst WEBPACK_STATS = 'webpack-stats.json';\nconst APP_PATHS_MANIFEST = 'app-paths-manifest.json';\nconst APP_PATH_ROUTES_MANIFEST = 'app-path-routes-manifest.json';\nconst BUILD_MANIFEST = 'build-manifest.json';\nconst APP_BUILD_MANIFEST = 'app-build-manifest.json';\nconst FUNCTIONS_CONFIG_MANIFEST = 'functions-config-manifest.json';\nconst SUBRESOURCE_INTEGRITY_MANIFEST = 'subresource-integrity-manifest';\nconst NEXT_FONT_MANIFEST = 'next-font-manifest';\nconst EXPORT_MARKER = 'export-marker.json';\nconst EXPORT_DETAIL = 'export-detail.json';\nconst PRERENDER_MANIFEST = 'prerender-manifest.json';\nconst ROUTES_MANIFEST = 'routes-manifest.json';\nconst IMAGES_MANIFEST = 'images-manifest.json';\nconst SERVER_FILES_MANIFEST = 'required-server-files.json';\nconst DEV_CLIENT_PAGES_MANIFEST = '_devPagesManifest.json';\nconst MIDDLEWARE_MANIFEST = 'middleware-manifest.json';\nconst TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST = '_clientMiddlewareManifest.json';\nconst TURBOPACK_CLIENT_BUILD_MANIFEST = 'client-build-manifest.json';\nconst DEV_CLIENT_MIDDLEWARE_MANIFEST = '_devMiddlewareManifest.json';\nconst REACT_LOADABLE_MANIFEST = 'react-loadable-manifest.json';\nconst SERVER_DIRECTORY = 'server';\nconst CONFIG_FILES = [\n 'next.config.js',\n 'next.config.mjs',\n 'next.config.ts'\n];\nconst BUILD_ID_FILE = 'BUILD_ID';\nconst BLOCKED_PAGES = [\n '/_document',\n '/_app',\n '/_error'\n];\nconst CLIENT_PUBLIC_FILES_PATH = 'public';\nconst CLIENT_STATIC_FILES_PATH = 'static';\nconst STRING_LITERAL_DROP_BUNDLE = '__NEXT_DROP_CLIENT_FILE__';\nconst NEXT_BUILTIN_DOCUMENT = '__NEXT_BUILTIN_DOCUMENT__';\nconst BARREL_OPTIMIZATION_PREFIX = '__barrel_optimize__';\nconst CLIENT_REFERENCE_MANIFEST = 'client-reference-manifest';\nconst SERVER_REFERENCE_MANIFEST = 'server-reference-manifest';\nconst MIDDLEWARE_BUILD_MANIFEST = 'middleware-build-manifest';\nconst MIDDLEWARE_REACT_LOADABLE_MANIFEST = 'middleware-react-loadable-manifest';\nconst INTERCEPTION_ROUTE_REWRITE_MANIFEST = 'interception-route-rewrite-manifest';\nconst DYNAMIC_CSS_MANIFEST = 'dynamic-css-manifest';\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN = \"main\";\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = \"\" + CLIENT_STATIC_FILES_RUNTIME_MAIN + \"-app\";\nconst APP_CLIENT_INTERNALS = 'app-pages-internals';\nconst CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = \"react-refresh\";\nconst CLIENT_STATIC_FILES_RUNTIME_AMP = \"amp\";\nconst CLIENT_STATIC_FILES_RUNTIME_WEBPACK = \"webpack\";\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS = 'polyfills';\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = Symbol(CLIENT_STATIC_FILES_RUNTIME_POLYFILLS);\n_c = CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL;\nconst DEFAULT_RUNTIME_WEBPACK = 'webpack-runtime';\nconst EDGE_RUNTIME_WEBPACK = 'edge-runtime-webpack';\nconst STATIC_PROPS_ID = '__N_SSG';\nconst SERVER_PROPS_ID = '__N_SSP';\nconst DEFAULT_SERIF_FONT = {\n name: 'Times New Roman',\n xAvgCharWidth: 821,\n azAvgWidth: 854.3953488372093,\n unitsPerEm: 2048\n};\nconst DEFAULT_SANS_SERIF_FONT = {\n name: 'Arial',\n xAvgCharWidth: 904,\n azAvgWidth: 934.5116279069767,\n unitsPerEm: 2048\n};\nconst STATIC_STATUS_PAGES = [\n '/500'\n];\nconst TRACE_OUTPUT_VERSION = 1;\nconst TURBO_TRACE_DEFAULT_MEMORY_LIMIT = 6000;\nconst RSC_MODULE_TYPES = {\n client: 'client',\n server: 'server'\n};\nconst EDGE_UNSUPPORTED_NODE_APIS = [\n 'clearImmediate',\n 'setImmediate',\n 'BroadcastChannel',\n 'ByteLengthQueuingStrategy',\n 'CompressionStream',\n 'CountQueuingStrategy',\n 'DecompressionStream',\n 'DomException',\n 'MessageChannel',\n 'MessageEvent',\n 'MessagePort',\n 'ReadableByteStreamController',\n 'ReadableStreamBYOBRequest',\n 'ReadableStreamDefaultController',\n 'TransformStreamDefaultController',\n 'WritableStreamDefaultController'\n];\nconst SYSTEM_ENTRYPOINTS = new Set([\n CLIENT_STATIC_FILES_RUNTIME_MAIN,\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH,\n CLIENT_STATIC_FILES_RUNTIME_AMP,\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP\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=constants.js.map\nvar _c;\n$RefreshReg$(_c, \"CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL\");\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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9jb25zdGFudHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBMEVhQSxrQkFBa0I7ZUFBbEJBOztJQWtEQUMsb0JBQW9CO2VBQXBCQTs7SUFyREFDLGtCQUFrQjtlQUFsQkE7O0lBQ0FDLHdCQUF3QjtlQUF4QkE7O0lBMUREQyxpQkFBaUI7ZUFBakJBOztJQXlGQ0MsMEJBQTBCO2VBQTFCQTs7SUFMQUMsYUFBYTtlQUFiQTs7SUFEQUMsYUFBYTtlQUFiQTs7SUF4QkFDLGNBQWM7ZUFBZEE7O0lBMEJBQyx3QkFBd0I7ZUFBeEJBOztJQU9BQyx5QkFBeUI7ZUFBekJBOztJQU5BQyx3QkFBd0I7ZUFBeEJBOztJQTRCQUMsK0JBQStCO2VBQS9CQTs7SUFQQUMsZ0NBQWdDO2VBQWhDQTs7SUFDQUMsb0NBQW9DO2VBQXBDQTs7SUFVQUMscUNBQXFDO2VBQXJDQTs7SUFDQUMsNENBQTRDO2VBQTVDQTs7SUFQQUMseUNBQXlDO2VBQXpDQTs7SUFJQUMsbUNBQW1DO2VBQW5DQTs7SUE3RUFDLGdCQUFnQjtlQUFoQkE7O0lBL0NBQyxjQUFjO2VBQWRBOztJQXNGQUMsWUFBWTtlQUFaQTs7SUE0Q0FDLHVCQUF1QjtlQUF2QkE7O0lBVUFDLHVCQUF1QjtlQUF2QkE7O0lBTkFDLGtCQUFrQjtlQUFsQkE7O0lBbkRBQyw4QkFBOEI7ZUFBOUJBOztJQUxBQyx5QkFBeUI7ZUFBekJBOztJQWtDQUMsb0JBQW9CO2VBQXBCQTs7SUFtQkFDLG9CQUFvQjtlQUFwQkE7O0lBNkJBQywwQkFBMEI7ZUFBMUJBOztJQXZGQUMsYUFBYTtlQUFiQTs7SUFEQUMsYUFBYTtlQUFiQTs7SUFIQUMseUJBQXlCO2VBQXpCQTs7SUFPQUMsZUFBZTtlQUFmQTs7SUFp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Qix3QkFBd0I7QUFDOUIsTUFBTWxDLDZCQUE2QjtBQUduQyxNQUFNSyw0QkFBNEI7QUFFbEMsTUFBTTZDLDRCQUE0QjtBQUVsQyxNQUFNcEIsNEJBQTRCO0FBRWxDLE1BQU1FLHFDQUNYO0FBRUssTUFBTUgsc0NBQ1g7QUFFSyxNQUFNUCx1QkFBdUI7QUFHN0IsTUFBTWQsbUNBQW9DO0FBQzFDLE1BQU1DLHVDQUF3QyxLQUFFRCxtQ0FBaUM7QUFFakYsTUFBTVosdUJBQXVCO0FBRTdCLE1BQU1nQiw0Q0FBNkM7QUFFbkQsTUFBTUwsa0NBQW1DO0FBRXpDLE1BQU1NLHNDQUF1QztBQUU3QyxNQUFNSCx3Q0FBd0M7QUFDOUMsTUFBTUMsK0NBQStDdUQsT0FDMUR4RDs7QUFFSyxNQUFNTywwQkFBMEI7QUFDaEMsTUFBTU0sdUJBQXVCO0FBQzdCLE1BQU00QixrQkFBa0I7QUFDeEIsTUFBTUYsa0JBQWtCO0FBQ3hCLE1BQU05QixxQkFBcUI7SUFDaENnRCxNQUFNO0lBQ05DLGVBQWU7SUFDZkMsWUFBWTtJQUNaQyxZQUFZO0FBQ2Q7QUFDTyxNQUFNcEQsMEJBQTBCO0lBQ3JDaUQsTUFBTTtJQUNOQyxlQUFlO0lBQ2ZDLFlBQVk7SUFDWkMsWUFBWTtBQUNkO0FBQ08sTUFBTWxCLHNCQUFzQjtJQUFDO0NBQU87QUFDcEMsTUFBTUksdUJBQXVCO0FBRTdCLE1BQU1HLG1DQUFtQztBQUV6QyxNQUFNYixtQkFBbUI7SUFDOUJpQixRQUFRO0lBQ1JDLFFBQVE7QUFDVjtBQU1PLE1BQU14Qyw2QkFBNkI7SUFDeEM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUVNLE1BQU0rQixxQkFBcUIsSUFBSWdCLElBQVk7SUFDaEQvRDtJQUNBSTtJQUNBTDtJQUNBRTtDQUNEIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9jb25zdGFudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUIGZyb20gJy4vbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXQnXG5cbmV4cG9ydCB7IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUIH1cblxuZXhwb3J0IHR5cGUgVmFsdWVPZjxUPiA9IFJlcXVpcmVkPFQ+W2tleW9mIFRdXG5cbmV4cG9ydCBjb25zdCBDT01QSUxFUl9OQU1FUyA9IHtcbiAgY2xpZW50OiAnY2xpZW50JyxcbiAgc2VydmVyOiAnc2VydmVyJyxcbiAgZWRnZVNlcnZlcjogJ2VkZ2Utc2VydmVyJyxcbn0gYXMgY29uc3RcblxuZXhwb3J0IHR5cGUgQ29tcGlsZXJOYW1lVmFsdWVzID0gVmFsdWVPZjx0eXBlb2YgQ09NUElMRVJfTkFNRVM+XG5cbmV4cG9ydCBlbnVtIEFkYXB0ZXJPdXRwdXRUeXBlIHtcbiAgLyoqXG4gICAqIGBQQUdFU2AgcmVwcmVzZW50cyBhbGwgdGhlIFJlYWN0IHBhZ2VzIHRoYXQgYXJlIHVuZGVyIGBwYWdlcy9gLlxuICAgKi9cbiAgUEFHRVMgPSAnUEFHRVMnLFxuXG4gIC8qKlxuICAgKiBgUEFHRVNfQVBJYCByZXByZXNlbnRzIGFsbCB0aGUgQVBJIHJvdXRlcyB1bmRlciBgcGFnZXMvYXBpL2AuXG4gICAqL1xuICBQQUdFU19BUEkgPSAnUEFHRVNfQVBJJyxcbiAgLyoqXG4gICAqIGBBUFBfUEFHRWAgcmVwcmVzZW50cyBhbGwgdGhlIFJlYWN0IHBhZ2VzIHRoYXQgYXJlIHVuZGVyIGBhcHAvYCB3aXRoIHRoZVxuICAgKiBmaWxlbmFtZSBvZiBgcGFnZS57aix0fXN7LHh9YC5cbiAgICovXG4gIEFQUF9QQUdFID0gJ0FQUF9QQUdFJyxcblxuICAvKipcbiAgICogYEFQUF9ST1VURWAgcmVwcmVzZW50cyBhbGwgdGhlIEFQSSByb3V0ZXMgYW5kIG1ldGFkYXRhIHJvdXRlcyB0aGF0IGFyZSB1bmRlciBgYXBwL2Agd2l0aCB0aGVcbiAgICogZmlsZW5hbWUgb2YgYHJvdXRlLntqLHR9c3sseH1gLlxuICAgKi9cbiAgQVBQX1JPVVRFID0gJ0FQUF9ST1VURScsXG5cbiAgLyoqXG4gICAqIGBQUkVSRU5ERVJgIHJlcHJlc2VudHMgYW4gSVNSIGVuYWJsZWQgcm91dGUgdGhhdCBtaWdodFxuICAgKiBoYXZlIGEgc2VlZGVkIGNhY2hlIGVudHJ5IG9yIGZhbGxiYWNrIGdlbmVyYXRlZCBkdXJpbmcgYnVpbGRcbiAgICovXG4gIFBSRVJFTkRFUiA9ICdQUkVSRU5ERVInLFxuXG4gIC8qKlxuICAgKiBgU1RBVElDX0ZJTEVgIHJlcHJlc2VudHMgYSBzdGF0aWMgZmlsZSAoaWUgL19uZXh0L3N0YXRpYylcbiAgICovXG4gIFNUQVRJQ19GSUxFID0gJ1NUQVRJQ19GSUxFJyxcblxuICAvKipcbiAgICogYE1JRERMRVdBUkVgIHJlcHJlc2VudHMgdGhlIG1pZGRsZXdhcmUgb3V0cHV0IGlmIHByZXNlbnRcbiAgICovXG4gIE1JRERMRVdBUkUgPSAnTUlERExFV0FSRScsXG59XG5cbmV4cG9ydCBjb25zdCBDT01QSUxFUl9JTkRFWEVTOiB7XG4gIFtjb21waWxlcktleSBpbiBDb21waWxlck5hbWVWYWx1ZXNdOiBudW1iZXJcbn0gPSB7XG4gIFtDT01QSUxFUl9OQU1FUy5jbGllbnRdOiAwLFxuICBbQ09NUElMRVJfTkFNRVMuc2VydmVyXTogMSxcbiAgW0NPTVBJTEVSX05BTUVTLmVkZ2VTZXJ2ZXJdOiAyLFxufSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgVU5ERVJTQ09SRV9OT1RfRk9VTkRfUk9VVEUgPSAnL19ub3QtZm91bmQnXG5leHBvcnQgY29uc3QgVU5ERVJTQ09SRV9OT1RfRk9VTkRfUk9VVEVfRU5UUlkgPSBgJHtVTkRFUlNDT1JFX05PVF9GT1VORF9ST1VURX0vcGFnZWBcbmV4cG9ydCBjb25zdCBQSEFTRV9FWFBPUlQgPSAncGhhc2UtZXhwb3J0J1xuZXhwb3J0IGNvbnN0IFBIQVNFX1BST0RVQ1RJT05fQlVJTEQgPSAncGhhc2UtcHJvZHVjdGlvbi1idWlsZCdcbmV4cG9ydCBjb25zdCBQSEFTRV9QUk9EVUNUSU9OX1NFUlZFUiA9ICdwaGFzZS1wcm9kdWN0aW9uLXNlcnZlcidcbmV4cG9ydCBjb25zdCBQSEFTRV9ERVZFTE9QTUVOVF9TRVJWRVIgPSAncGhhc2UtZGV2ZWxvcG1lbnQtc2VydmVyJ1xuZXhwb3J0IGNvbnN0IFBIQVNFX1RFU1QgPSAncGhhc2UtdGVzdCdcbmV4cG9ydCBjb25zdCBQSEFTRV9JTkZPID0gJ3BoYXNlLWluZm8nXG5leHBvcnQgY29uc3QgUEFHRVNfTUFOSUZFU1QgPSAncGFnZXMtbWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBXRUJQQUNLX1NUQVRTID0gJ3dlYnBhY2stc3RhdHMuanNvbidcbmV4cG9ydCBjb25zdCBBUFBfUEFUSFNfTUFOSUZFU1QgPSAnYXBwLXBhdGhzLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgQVBQX1BBVEhfUk9VVEVTX01BTklGRVNUID0gJ2FwcC1wYXRoLXJvdXRlcy1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IEJVSUxEX01BTklGRVNUID0gJ2J1aWxkLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgQVBQX0JVSUxEX01BTklGRVNUID0gJ2FwcC1idWlsZC1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IEZVTkNUSU9OU19DT05GSUdfTUFOSUZFU1QgPSAnZnVuY3Rpb25zLWNvbmZpZy1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IFNVQlJFU09VUkNFX0lOVEVHUklUWV9NQU5JRkVTVCA9ICdzdWJyZXNvdXJjZS1pbnRlZ3JpdHktbWFuaWZlc3QnXG5leHBvcnQgY29uc3QgTkVYVF9GT05UX01BTklGRVNUID0gJ25leHQtZm9udC1tYW5pZmVzdCdcbmV4cG9ydCBjb25zdCBFWFBPUlRfTUFSS0VSID0gJ2V4cG9ydC1tYXJrZXIuanNvbidcbmV4cG9ydCBjb25zdCBFWFBPUlRfREVUQUlMID0gJ2V4cG9ydC1kZXRhaWwuanNvbidcbmV4cG9ydCBjb25zdCBQUkVSRU5ERVJfTUFOSUZFU1QgPSAncHJlcmVuZGVyLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgUk9VVEVTX01BTklGRVNUID0gJ3JvdXRlcy1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IElNQUdFU19NQU5JRkVTVCA9ICdpbWFnZXMtbWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBTRVJWRVJfRklMRVNfTUFOSUZFU1QgPSAncmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb24nXG5leHBvcnQgY29uc3QgREVWX0NMSUVOVF9QQUdFU19NQU5JRkVTVCA9ICdfZGV2UGFnZXNNYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IE1JRERMRVdBUkVfTUFOSUZFU1QgPSAnbWlkZGxld2FyZS1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IFRVUkJPUEFDS19DTElFTlRfTUlERExFV0FSRV9NQU5JRkVTVCA9XG4gICdfY2xpZW50TWlkZGxld2FyZU1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgVFVSQk9QQUNLX0NMSUVOVF9CVUlMRF9NQU5JRkVTVCA9ICdjbGllbnQtYnVpbGQtbWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBERVZfQ0xJRU5UX01JRERMRVdBUkVfTUFOSUZFU1QgPSAnX2Rldk1pZGRsZXdhcmVNYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IFJFQUNUX0xPQURBQkxFX01BTklGRVNUID0gJ3JlYWN0LWxvYWRhYmxlLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgU0VSVkVSX0RJUkVDVE9SWSA9ICdzZXJ2ZXInXG5leHBvcnQgY29uc3QgQ09ORklHX0ZJTEVTID0gW1xuICAnbmV4dC5jb25maWcuanMnLFxuICAnbmV4dC5jb25maWcubWpzJyxcbiAgJ25leHQuY29uZmlnLnRzJyxcbl1cbmV4cG9ydCBjb25zdCBCVUlMRF9JRF9GSUxFID0gJ0JVSUxEX0lEJ1xuZXhwb3J0IGNvbnN0IEJMT0NLRURfUEFHRVMgPSBbJy9fZG9jdW1lbnQnLCAnL19hcHAnLCAnL19lcnJvciddXG5leHBvcnQgY29uc3QgQ0xJRU5UX1BVQkxJQ19GSUxFU19QQVRIID0gJ3B1YmxpYydcbmV4cG9ydCBjb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1BBVEggPSAnc3RhdGljJ1xuZXhwb3J0IGNvbnN0IFNUUklOR19MSVRFUkFMX0RST1BfQlVORExFID0gJ19fTkVYVF9EUk9QX0NMSUVOVF9GSUxFX18nXG5leHBvcnQgY29uc3QgTkVYVF9CVUlMVElOX0RPQ1VNRU5UID0gJ19fTkVYVF9CVUlMVElOX0RPQ1VNRU5UX18nXG5leHBvcnQgY29uc3QgQkFSUkVMX09QVElNSVpBVElPTl9QUkVGSVggPSAnX19iYXJyZWxfb3B0aW1pemVfXydcblxuLy8gc2VydmVyL1tlbnRyeV0vcGFnZV9jbGllbnQtcmVmZXJlbmNlLW1hbmlmZXN0LmpzXG5leHBvcnQgY29uc3QgQ0xJRU5UX1JFRkVSRU5DRV9NQU5JRkVTVCA9ICdjbGllbnQtcmVmZXJlbmNlLW1hbmlmZXN0J1xuLy8gc2VydmVyL3NlcnZlci1yZWZlcmVuY2UtbWFuaWZlc3RcbmV4cG9ydCBjb25zdCBTRVJWRVJfUkVGRVJFTkNFX01BTklGRVNUID0gJ3NlcnZlci1yZWZlcmVuY2UtbWFuaWZlc3QnXG4vLyBzZXJ2ZXIvbWlkZGxld2FyZS1idWlsZC1tYW5pZmVzdC5qc1xuZXhwb3J0IGNvbnN0IE1JRERMRVdBUkVfQlVJTERfTUFOSUZFU1QgPSAnbWlkZGxld2FyZS1idWlsZC1tYW5pZmVzdCdcbi8vIHNlcnZlci9taWRkbGV3YXJlLXJlYWN0LWxvYWRhYmxlLW1hbmlmZXN0LmpzXG5leHBvcnQgY29uc3QgTUlERExFV0FSRV9SRUFDVF9MT0FEQUJMRV9NQU5JRkVTVCA9XG4gICdtaWRkbGV3YXJlLXJlYWN0LWxvYWRhYmxlLW1hbmlmZXN0J1xuLy8gc2VydmVyL2ludGVyY2VwdGlvbi1yb3V0ZS1yZXdyaXRlLW1hbmlmZXN0LmpzXG5leHBvcnQgY29uc3QgSU5URVJDRVBUSU9OX1JPVVRFX1JFV1JJVEVfTUFOSUZFU1QgPVxuICAnaW50ZXJjZXB0aW9uLXJvdXRlLXJld3JpdGUtbWFuaWZlc3QnXG4vLyBzZXJ2ZXIvZHluYW1pYy1jc3MtbWFuaWZlc3QuanNcbmV4cG9ydCBjb25zdCBEWU5BTUlDX0NTU19NQU5JRkVTVCA9ICdkeW5hbWljLWNzcy1tYW5pZmVzdCdcblxuLy8gc3RhdGljL3J1bnRpbWUvbWFpbi5qc1xuZXhwb3J0IGNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOID0gYG1haW5gXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU5fQVBQID0gYCR7Q0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU59LWFwcGBcbi8vIG5leHQgaW50ZXJuYWwgY2xpZW50IGNvbXBvbmVudHMgY2h1bmsgZm9yIGxheW91dHNcbmV4cG9ydCBjb25zdCBBUFBfQ0xJRU5UX0lOVEVSTkFMUyA9ICdhcHAtcGFnZXMtaW50ZXJuYWxzJ1xuLy8gc3RhdGljL3J1bnRpbWUvcmVhY3QtcmVmcmVzaC5qc1xuZXhwb3J0IGNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9SRUFDVF9SRUZSRVNIID0gYHJlYWN0LXJlZnJlc2hgXG4vLyBzdGF0aWMvcnVudGltZS9hbXAuanNcbmV4cG9ydCBjb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QID0gYGFtcGBcbi8vIHN0YXRpYy9ydW50aW1lL3dlYnBhY2suanNcbmV4cG9ydCBjb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfV0VCUEFDSyA9IGB3ZWJwYWNrYFxuLy8gc3RhdGljL3J1bnRpbWUvcG9seWZpbGxzLmpzXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMUyA9ICdwb2x5ZmlsbHMnXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMU19TWU1CT0wgPSBTeW1ib2woXG4gIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFNcbilcbmV4cG9ydCBjb25zdCBERUZBVUxUX1JVTlRJTUVfV0VCUEFDSyA9ICd3ZWJwYWNrLXJ1bnRpbWUnXG5leHBvcnQgY29uc3QgRURHRV9SVU5USU1FX1dFQlBBQ0sgPSAnZWRnZS1ydW50aW1lLXdlYnBhY2snXG5leHBvcnQgY29uc3QgU1RBVElDX1BST1BTX0lEID0gJ19fTl9TU0cnXG5leHBvcnQgY29uc3QgU0VSVkVSX1BST1BTX0lEID0gJ19fTl9TU1AnXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVJJRl9GT05UID0ge1xuICBuYW1lOiAnVGltZXMgTmV3IFJvbWFuJyxcbiAgeEF2Z0NoYXJXaWR0aDogODIxLFxuICBhekF2Z1dpZHRoOiA4NTQuMzk1MzQ4ODM3MjA5MyxcbiAgdW5pdHNQZXJFbTogMjA0OCxcbn1cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NBTlNfU0VSSUZfRk9OVCA9IHtcbiAgbmFtZTogJ0FyaWFsJyxcbiAgeEF2Z0NoYXJXaWR0aDogOTA0LFxuICBhekF2Z1dpZHRoOiA5MzQuNTExNjI3OTA2OTc2NyxcbiAgdW5pdHNQZXJFbTogMjA0OCxcbn1cbmV4cG9ydCBjb25zdCBTVEFUSUNfU1RBVFVTX1BBR0VTID0gWycvNTAwJ11cbmV4cG9ydCBjb25zdCBUUkFDRV9PVVRQVVRfVkVSU0lPTiA9IDFcbi8vIGluIGBNQmBcbmV4cG9ydCBjb25zdCBUVVJCT19UUkFDRV9ERUZBVUxUX01FTU9SWV9MSU1JVCA9IDYwMDBcblxuZXhwb3J0IGNvbnN0IFJTQ19NT0RVTEVfVFlQRVMgPSB7XG4gIGNsaWVudDogJ2NsaWVudCcsXG4gIHNlcnZlcjogJ3NlcnZlcicsXG59IGFzIGNvbnN0XG5cbi8vIGNvbXBhcmluZ1xuLy8gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9lZGdlLXJ1bnRpbWVcbi8vIHdpdGhcbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9kb2NzL2xhdGVzdC9hcGkvZ2xvYmFscy5odG1sXG5leHBvcnQgY29uc3QgRURHRV9VTlNVUFBPUlRFRF9OT0RFX0FQSVMgPSBbXG4gICdjbGVhckltbWVkaWF0ZScsXG4gICdzZXRJbW1lZGlhdGUnLFxuICAnQnJvYWRjYXN0Q2hhbm5lbCcsXG4gICdCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5JyxcbiAgJ0NvbXByZXNzaW9uU3RyZWFtJyxcbiAgJ0NvdW50UXVldWluZ1N0cmF0ZWd5JyxcbiAgJ0RlY29tcHJlc3Npb25TdHJlYW0nLFxuICAnRG9tRXhjZXB0aW9uJyxcbiAgJ01lc3NhZ2VDaGFubmVsJyxcbiAgJ01lc3NhZ2VFdmVudCcsXG4gICdNZXNzYWdlUG9ydCcsXG4gICdSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyJyxcbiAgJ1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QnLFxuICAnUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcicsXG4gICdUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcicsXG4gICdXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyJyxcbl1cblxuZXhwb3J0IGNvbnN0IFNZU1RFTV9FTlRSWVBPSU5UUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOLFxuICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUkVBQ1RfUkVGUkVTSCxcbiAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX0FNUCxcbiAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU5fQVBQLFxuXSlcbiJdLCJuYW1lcyI6WyJBUFBfQlVJTERfTUFOSUZFU1QiLCJBUFBfQ0xJRU5UX0lOVEVSTkFMUyIsIkFQUF9QQVRIU19NQU5JRkVTVCIsIkFQUF9QQVRIX1JPVVRFU19NQU5JRkVTVCIsIkFkYXB0ZXJPdXRwdXRUeXBlIiwiQkFSUkVMX09QVElNSVpBVElPTl9QUkVGSVgiLCJCTE9DS0VEX1BBR0VTIiwiQlVJTERfSURfRklMRSIsIkJVSUxEX01BTklGRVNUIiwiQ0xJRU5UX1BVQkxJQ19GSUxFU19QQVRIIiwiQ0xJRU5UX1JFRkVSRU5DRV9NQU5JRkVTVCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUEFUSCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9BTVAiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTiIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOX0FQUCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFMiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTX1NZTUJPTCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9SRUFDVF9SRUZSRVNIIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1dFQlBBQ0siLCJDT01QSUxFUl9JTkRFWEVTIiwiQ09NUElMRVJfTkFNRVMiLCJDT05GSUdfRklMRVMiLCJERUZBVUxUX1JVTlRJTUVfV0VCUEFDSyIsIkRFRkFVTFRfU0FOU19TRVJJRl9GT05UIiwiREVGQVVMVF9TRVJJRl9GT05UIiwiREVWX0NMSUVOVF9NSURETEVXQVJFX01BTklGRVNUIiwiREVWX0NMSUVOVF9QQUdFU19NQU5JRkVTVCIsIkRZTkFNSUNfQ1NTX01BTklGRVNUIiwiRURHRV9SVU5USU1FX1dFQlBBQ0siLCJFREdFX1VOU1VQUE9SVEVEX05PREVfQVBJUyIsIkVYUE9SVF9ERVRBSUwiLCJFWFBPUlRfTUFSS0VSIiwiRlVOQ1RJT05TX0NPTkZJR19NQU5JRkVTVCIsIklNQUdFU19NQU5JRkVTVCIsIklOVEVSQ0VQVElPTl9ST1VURV9SRVdSSVRFX01BTklGRVNUIiwiTUlERExFV0FSRV9CVUlMRF9NQU5JRkVTVCIsIk1JRERMRVdBUkVfTUFOSUZFU1QiLCJNSURETEVXQVJFX1JFQUNUX0xPQURBQkxFX01BTklGRVNUIiwiTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQiLCJORVhUX0JVSUxUSU5fRE9DVU1FTlQiLCJORVhUX0ZPTlRfTUFOSUZFU1QiLCJQQUdFU19NQU5JRkVTVCIsIlBIQVNFX0RFVkVMT1BNRU5UX1NFUlZFUiIsIlBIQVNFX0VYUE9SVCIsIlBIQVNFX0lORk8iLCJQSEFTRV9QUk9EVUNUSU9OX0JVSUxEIiwiUEhBU0VfUFJPRFVDVElPTl9TRVJWRVIiLCJQSEFTRV9URVNUIiwiUFJFUkVOREVSX01BTklGRVNUIiwiUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1QiLCJST1VURVNfTUFOSUZFU1QiLCJSU0NfTU9EVUxFX1RZUEVTIiwiU0VSVkVSX0RJUkVDVE9SWSIsIlNFUlZFUl9GSUxFU19NQU5JRkVTVCIsIlNFUlZFUl9QUk9QU19JRCIsIlNFUlZFUl9SRUZFUkVOQ0VfTUFOSUZFU1QiLCJTVEFUSUNfUFJPUFNfSUQiLCJTVEFUSUNfU1RBVFVTX1BBR0VTIiwiU1RSSU5HX0xJVEVSQUxfRFJPUF9CVU5ETEUiLCJTVUJSRVNPVVJDRV9JTlRFR1JJVFlfTUFOSUZFU1QiLCJTWVNURU1fRU5UUllQT0lOVFMiLCJUUkFDRV9PVVRQVVRfVkVSU0lPTiIsIlRVUkJPUEFDS19DTElFTlRfQlVJTERfTUFOSUZFU1QiLCJUVVJCT1BBQ0tfQ0xJRU5UX01JRERMRVdBUkVfTUFOSUZFU1QiLCJUVVJCT19UUkFDRV9ERUZBVUxUX01FTU9SWV9MSU1JVCIsIlVOREVSU0NPUkVfTk9UX0ZPVU5EX1JPVVRFIiwiVU5ERVJTQ09SRV9OT1RfRk9VTkRfUk9VVEVfRU5UUlkiLCJXRUJQQUNLX1NUQVRTIiwiY2xpZW50Iiwic2VydmVyIiwiZWRnZVNlcnZlciIsIlN5bWJvbCIsIm5hbWUiLCJ4QXZnQ2hhcldpZHRoIiwiYXpBdmdXaWR0aCIsInVuaXRzUGVyRW0iLCJTZXQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/constants.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/encode-uri-path.js":
/*!*****************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/encode-uri-path.js ***!
\*****************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"encodeURIPath\", ({\n enumerable: true,\n get: function() {\n return encodeURIPath;\n }\n}));\nfunction encodeURIPath(file) {\n return file.split('/').map((p)=>encodeURIComponent(p)).join('/');\n} //# sourceMappingURL=encode-uri-path.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lbmNvZGUtdXJpLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OztpREFBZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLGNBQWNDLElBQVk7SUFDeEMsT0FBT0EsS0FDSkMsS0FBSyxDQUFDLEtBQ05DLEdBQUcsQ0FBQyxDQUFDQyxJQUFNQyxtQkFBbUJELElBQzlCRSxJQUFJLENBQUM7QUFDViIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvc3JjL3NoYXJlZC9saWIvZW5jb2RlLXVyaS1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBlbmNvZGVVUklQYXRoKGZpbGU6IHN0cmluZykge1xuICByZXR1cm4gZmlsZVxuICAgIC5zcGxpdCgnLycpXG4gICAgLm1hcCgocCkgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHApKVxuICAgIC5qb2luKCcvJylcbn1cbiJdLCJuYW1lcyI6WyJlbmNvZGVVUklQYXRoIiwiZmlsZSIsInNwbGl0IiwibWFwIiwicCIsImVuY29kZVVSSUNvbXBvbmVudCIsImpvaW4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/encode-uri-path.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/error-source.js":
/*!**************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/error-source.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 decorateServerError: function() {\n return decorateServerError;\n },\n getErrorSource: function() {\n return getErrorSource;\n }\n});\nconst symbolError = Symbol.for('NextjsError');\nfunction getErrorSource(error) {\n return error[symbolError] || null;\n}\nfunction decorateServerError(error, type) {\n Object.defineProperty(error, symbolError, {\n writable: false,\n enumerable: false,\n configurable: false,\n value: type\n });\n} //# sourceMappingURL=error-source.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lcnJvci1zb3VyY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBUWdCQSxtQkFBbUI7ZUFBbkJBOztJQU5BQyxjQUFjO2VBQWRBOzs7QUFGaEIsTUFBTUMsY0FBY0MsT0FBT0MsR0FBRyxDQUFDO0FBRXhCLFNBQVNILGVBQWVJLEtBQVk7SUFDekMsT0FBUUEsS0FBYSxDQUFDSCxZQUFZLElBQUk7QUFDeEM7QUFJTyxTQUFTRixvQkFBb0JLLEtBQVksRUFBRUMsSUFBcUI7SUFDckVDLE9BQU9DLGNBQWMsQ0FBQ0gsT0FBT0gsYUFBYTtRQUN4Q08sVUFBVTtRQUNWQyxZQUFZO1FBQ1pDLGNBQWM7UUFDZEMsT0FBT047SUFDVDtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9lcnJvci1zb3VyY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3ltYm9sRXJyb3IgPSBTeW1ib2wuZm9yKCdOZXh0anNFcnJvcicpXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvclNvdXJjZShlcnJvcjogRXJyb3IpOiAnc2VydmVyJyB8ICdlZGdlLXNlcnZlcicgfCBudWxsIHtcbiAgcmV0dXJuIChlcnJvciBhcyBhbnkpW3N5bWJvbEVycm9yXSB8fCBudWxsXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yU291cmNlVHlwZSA9ICdlZGdlLXNlcnZlcicgfCAnc2VydmVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGVTZXJ2ZXJFcnJvcihlcnJvcjogRXJyb3IsIHR5cGU6IEVycm9yU291cmNlVHlwZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsIHN5bWJvbEVycm9yLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IHR5cGUsXG4gIH0pXG59XG4iXSwibmFtZXMiOlsiZGVjb3JhdGVTZXJ2ZXJFcnJvciIsImdldEVycm9yU291cmNlIiwic3ltYm9sRXJyb3IiLCJTeW1ib2wiLCJmb3IiLCJlcnJvciIsInR5cGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIndyaXRhYmxlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsInZhbHVlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/error-source.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/escape-regexp.js":
/*!***************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/escape-regexp.js ***!
\***************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// regexp is based on https://github.com/sindresorhus/escape-string-regexp\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"escapeStringRegexp\", ({\n enumerable: true,\n get: function() {\n return escapeStringRegexp;\n }\n}));\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/;\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g;\nfunction escapeStringRegexp(str) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, '\\\\$&');\n }\n return str;\n} //# sourceMappingURL=escape-regexp.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lc2NhcGUtcmVnZXhwLmpzIiwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTs7Ozs7c0RBSTFEQTs7O2VBQUFBOzs7QUFIaEIsTUFBTUMsY0FBYztBQUNwQixNQUFNQyxrQkFBa0I7QUFFakIsU0FBU0YsbUJBQW1CRyxHQUFXO0lBQzVDLCtHQUErRztJQUMvRyxJQUFJRixZQUFZRyxJQUFJLENBQUNELE1BQU07UUFDekIsT0FBT0EsSUFBSUUsT0FBTyxDQUFDSCxpQkFBaUI7SUFDdEM7SUFDQSxPQUFPQztBQUNUIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9lc2NhcGUtcmVnZXhwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHJlZ2V4cCBpcyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2VzY2FwZS1zdHJpbmctcmVnZXhwXG5jb25zdCByZUhhc1JlZ0V4cCA9IC9bfFxcXFx7fSgpW1xcXV4kKyo/Li1dL1xuY29uc3QgcmVSZXBsYWNlUmVnRXhwID0gL1t8XFxcXHt9KClbXFxdXiQrKj8uLV0vZ1xuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlU3RyaW5nUmVnZXhwKHN0cjogc3RyaW5nKSB7XG4gIC8vIHNlZSBhbHNvOiBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzJkYTAyNGMzYjRmOTk0N2E0ODUxNzYzOWRlNzU2MDQ1N2NkNGVjNmMvZXNjYXBlUmVnRXhwLmpzI0wyM1xuICBpZiAocmVIYXNSZWdFeHAudGVzdChzdHIpKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlUmVwbGFjZVJlZ0V4cCwgJ1xcXFwkJicpXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuIl0sIm5hbWVzIjpbImVzY2FwZVN0cmluZ1JlZ2V4cCIsInJlSGFzUmVnRXhwIiwicmVSZXBsYWNlUmVnRXhwIiwic3RyIiwidGVzdCIsInJlcGxhY2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/escape-regexp.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/format-webpack-messages.js":
/*!*************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/format-webpack-messages.js ***!
\*************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/**\nMIT License\n\nCopyright (c) 2015-present, Facebook, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return formatWebpackMessages;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/strip-ansi/index.js\"));\n// This file is based on https://github.com/facebook/create-react-app/blob/7b1a32be6ec9f99a6c9a3c66813f3ac09c4736b9/packages/react-dev-utils/formatWebpackMessages.js\n// It's been edited to remove chalk and CRA-specific logic\nconst friendlySyntaxErrorLabel = 'Syntax error:';\nconst WEBPACK_BREAKING_CHANGE_POLYFILLS = '\\n\\nBREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.';\nfunction isLikelyASyntaxError(message) {\n return (0, _stripansi.default)(message).includes(friendlySyntaxErrorLabel);\n}\nlet hadMissingSassError = false;\n// Cleans up webpack error messages.\nfunction formatMessage(message, verbose, importTraceNote) {\n // TODO: Replace this once webpack 5 is stable\n if (typeof message === 'object' && message.message) {\n const filteredModuleTrace = message.moduleTrace && message.moduleTrace.filter((trace)=>!/next-(middleware|client-pages|route|edge-function)-loader\\.js/.test(trace.originName));\n let body = message.message;\n const breakingChangeIndex = body.indexOf(WEBPACK_BREAKING_CHANGE_POLYFILLS);\n if (breakingChangeIndex >= 0) {\n body = body.slice(0, breakingChangeIndex);\n }\n message = (message.moduleName ? (0, _stripansi.default)(message.moduleName) + '\\n' : '') + (message.file ? (0, _stripansi.default)(message.file) + '\\n' : '') + body + (message.details && verbose ? '\\n' + message.details : '') + (filteredModuleTrace && filteredModuleTrace.length ? (importTraceNote || '\\n\\nImport trace for requested module:') + filteredModuleTrace.map((trace)=>\"\\n\" + trace.moduleName).join('') : '') + (message.stack && verbose ? '\\n' + message.stack : '');\n }\n let lines = message.split('\\n');\n // Strip Webpack-added headers off errors/warnings\n // https://github.com/webpack/webpack/blob/master/lib/ModuleError.js\n lines = lines.filter((line)=>!/Module [A-z ]+\\(from/.test(line));\n // Transform parsing error into syntax error\n // TODO: move this to our ESLint formatter?\n lines = lines.map((line)=>{\n const parsingError = /Line (\\d+):(?:(\\d+):)?\\s*Parsing error: (.+)$/.exec(line);\n if (!parsingError) {\n return line;\n }\n const [, errorLine, errorColumn, errorMessage] = parsingError;\n return friendlySyntaxErrorLabel + \" \" + errorMessage + \" (\" + errorLine + \":\" + errorColumn + \")\";\n });\n message = lines.join('\\n');\n // Smoosh syntax errors (commonly found in CSS)\n message = message.replace(/SyntaxError\\s+\\((\\d+):(\\d+)\\)\\s*(.+?)\\n/g, \"\" + friendlySyntaxErrorLabel + \" $3 ($1:$2)\\n\");\n // Clean up export errors\n message = message.replace(/^.*export '(.+?)' was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$2'.\");\n message = message.replace(/^.*export 'default' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$2' does not contain a default export (imported as '$1').\");\n message = message.replace(/^.*export '(.+?)' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$3' (imported as '$2').\");\n lines = message.split('\\n');\n // Remove leading newline\n if (lines.length > 2 && lines[1].trim() === '') {\n lines.splice(1, 1);\n }\n // Cleans up verbose \"module not found\" messages for files and packages.\n if (lines[1] && lines[1].startsWith('Module not found: ')) {\n lines = [\n lines[0],\n lines[1].replace('Error: ', '').replace('Module not found: Cannot find file:', 'Cannot find file:'),\n ...lines.slice(2)\n ];\n }\n // Add helpful message for users trying to use Sass for the first time\n if (lines[1] && lines[1].match(/Cannot find module.+sass/)) {\n // ./file.module.scss (<<loader info>>) => ./file.module.scss\n const firstLine = lines[0].split('!');\n lines[0] = firstLine[firstLine.length - 1];\n lines[1] = \"To use Next.js' built-in Sass support, you first need to install `sass`.\\n\";\n lines[1] += 'Run `npm i sass` or `yarn add sass` inside your workspace.\\n';\n lines[1] += '\\nLearn more: https://nextjs.org/docs/messages/install-sass';\n // dispose of unhelpful stack trace\n lines = lines.slice(0, 2);\n hadMissingSassError = true;\n } else if (hadMissingSassError && message.match(/(sass-loader|resolve-url-loader: CSS error)/)) {\n // dispose of unhelpful stack trace following missing sass module\n lines = [];\n }\n if (!verbose) {\n message = lines.join('\\n');\n // Internal stacks are generally useless so we strip them... with the\n // exception of stacks containing `webpack:` because they're normally\n // from user code generated by Webpack. For more information see\n // https://github.com/facebook/create-react-app/pull/1050\n message = message.replace(/^\\s*at\\s((?!webpack:).)*:\\d+:\\d+[\\s)]*(\\n|$)/gm, '') // at ... ...:x:y\n ;\n message = message.replace(/^\\s*at\\s<anonymous>(\\n|$)/gm, '') // at <anonymous>\n ;\n message = message.replace(/File was processed with these loaders:\\n(.+[\\\\/](next[\\\\/]dist[\\\\/].+|@next[\\\\/]react-refresh-utils[\\\\/]loader)\\.js\\n)*You may need an additional loader to handle the result of these loaders.\\n/g, '');\n lines = message.split('\\n');\n }\n // Remove duplicated newlines\n lines = lines.filter((line, index, arr)=>index === 0 || line.trim() !== '' || line.trim() !== arr[index - 1].trim());\n // Reassemble the message\n message = lines.join('\\n');\n return message.trim();\n}\nfunction formatWebpackMessages(json, verbose) {\n const formattedErrors = json.errors.map((message)=>{\n const isUnknownNextFontError = message.message.includes('An error occurred in `next/font`.');\n return formatMessage(message, isUnknownNextFontError || verbose);\n });\n const formattedWarnings = json.warnings.map((message)=>{\n return formatMessage(message, verbose);\n });\n // Reorder errors to put the most relevant ones first.\n let reactServerComponentsError = -1;\n for(let i = 0; i < formattedErrors.length; i++){\n const error = formattedErrors[i];\n if (error.includes('ReactServerComponentsError')) {\n reactServerComponentsError = i;\n break;\n }\n }\n // Move the reactServerComponentsError to the top if it exists\n if (reactServerComponentsError !== -1) {\n const error = formattedErrors.splice(reactServerComponentsError, 1);\n formattedErrors.unshift(error[0]);\n }\n const result = {\n ...json,\n errors: formattedErrors,\n warnings: formattedWarnings\n };\n if (!verbose && result.errors.some(isLikelyASyntaxError)) {\n // If there are any syntax errors, show just them.\n result.errors = result.errors.filter(isLikelyASyntaxError);\n result.warnings = [];\n }\n return result;\n} //# sourceMappingURL=format-webpack-messages.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9mb3JtYXQtd2VicGFjay1tZXNzYWdlcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQTs7OzsyQ0FpS0E7OztlQUF3QkE7Ozs7Z0ZBaEtGO0FBQ3RCLHFLQUFxSztBQUNySywwREFBMEQ7QUFFMUQsTUFBTUMsMkJBQTJCO0FBRWpDLE1BQU1DLG9DQUNKO0FBRUYsU0FBU0MscUJBQXFCQyxPQUFlO0lBQzNDLE9BQU9DLENBQUFBLEdBQUFBLFdBQUFBLE9BQUFBLEVBQVVELFNBQVNFLFFBQVEsQ0FBQ0w7QUFDckM7QUFFQSxJQUFJTSxzQkFBc0I7QUFFMUIsb0NBQW9DO0FBQ3BDLFNBQVNDLGNBQ1BKLE9BQVksRUFDWkssT0FBaUIsRUFDakJDLGVBQXlCO0lBRXpCLDhDQUE4QztJQUM5QyxJQUFJLE9BQU9OLFlBQVksWUFBWUEsUUFBUUEsT0FBTyxFQUFFO1FBQ2xELE1BQU1PLHNCQUNKUCxRQUFRUSxXQUFXLElBQ25CUixRQUFRUSxXQUFXLENBQUNDLE1BQU0sQ0FDeEIsQ0FBQ0MsUUFDQyxDQUFDLGdFQUFnRUMsSUFBSSxDQUNuRUQsTUFBTUUsVUFBVTtRQUl4QixJQUFJQyxPQUFPYixRQUFRQSxPQUFPO1FBQzFCLE1BQU1jLHNCQUFzQkQsS0FBS0UsT0FBTyxDQUFDakI7UUFDekMsSUFBSWdCLHVCQUF1QixHQUFHO1lBQzVCRCxPQUFPQSxLQUFLRyxLQUFLLENBQUMsR0FBR0Y7UUFDdkI7UUFFQWQsVUFDR0EsQ0FBQUEsUUFBUWlCLFVBQVUsR0FBR2hCLENBQUFBLEdBQUFBLFdBQUFBLE9BQUFBLEVBQVVELFFBQVFpQixVQUFVLElBQUksT0FBTyxHQUFDLEdBQzdEakIsQ0FBQUEsUUFBUWtC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SUFBSUQsK0JBQStCLENBQUMsR0FBRztRQUNyQyxNQUFNRSxRQUFRUCxnQkFBZ0JQLE1BQU0sQ0FBQ1ksNEJBQTRCO1FBQ2pFTCxnQkFBZ0JRLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDLEVBQUU7SUFDbEM7SUFFQSxNQUFNRSxTQUFTO1FBQ2IsR0FBR1YsSUFBSTtRQUNQRSxRQUFRRDtRQUNSSSxVQUFVRDtJQUNaO0lBQ0EsSUFBSSxDQUFDdkMsV0FBVzZDLE9BQU9SLE1BQU0sQ0FBQ1MsSUFBSSxDQUFDcEQsdUJBQXVCO1FBQ3hELGtEQUFrRDtRQUNsRG1ELE9BQU9SLE1BQU0sR0FBR1EsT0FBT1IsTUFBTSxDQUFDakMsTUFBTSxDQUFDVjtRQUNyQ21ELE9BQU9MLFFBQVEsR0FBRyxFQUFFO0lBQ3RCO0lBQ0EsT0FBT0s7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvc3JjL3NoYXJlZC9saWIvZm9ybWF0LXdlYnBhY2stbWVzc2FnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG5NSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIDIwMTUtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuKi9cbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnbmV4dC9kaXN0L2NvbXBpbGVkL3N0cmlwLWFuc2knXG4vLyBUaGlzIGZpbGUgaXMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2NyZWF0ZS1yZWFjdC1hcHAvYmxvYi83YjFhMzJiZTZlYzlmOTlhNmM5YTNjNjY4MTNmM2FjMDljNDczNmI5L3BhY2thZ2VzL3JlYWN0LWRldi11dGlscy9mb3JtYXRXZWJwYWNrTWVzc2FnZXMuanNcbi8vIEl0J3MgYmVlbiBlZGl0ZWQgdG8gcmVtb3ZlIGNoYWxrIGFuZCBDUkEtc3BlY2lmaWMgbG9naWNcblxuY29uc3QgZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsID0gJ1N5bnRheCBlcnJvcjonXG5cbmNvbnN0IFdFQlBBQ0tfQlJFQUtJTkdfQ0hBTkdFX1BPTFlGSUxMUyA9XG4gICdcXG5cXG5CUkVBS0lORyBDSEFOR0U6IHdlYnBhY2sgPCA1IHVzZWQgdG8gaW5jbHVkZSBwb2x5ZmlsbHMgZm9yIG5vZGUuanMgY29yZSBtb2R1bGVzIGJ5IGRlZmF1bHQuJ1xuXG5mdW5jdGlvbiBpc0xpa2VseUFTeW50YXhFcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmlwQW5zaShtZXNzYWdlKS5pbmNsdWRlcyhmcmllbmRseVN5bnRheEVycm9yTGFiZWwpXG59XG5cbmxldCBoYWRNaXNzaW5nU2Fzc0Vycm9yID0gZmFsc2VcblxuLy8gQ2xlYW5zIHVwIHdlYnBhY2sgZXJyb3IgbWVzc2FnZXMuXG5mdW5jdGlvbiBmb3JtYXRNZXNzYWdlKFxuICBtZXNzYWdlOiBhbnksXG4gIHZlcmJvc2U/OiBib29sZWFuLFxuICBpbXBvcnRUcmFjZU5vdGU/OiBib29sZWFuXG4pIHtcbiAgLy8gVE9ETzogUmVwbGFjZSB0aGlzIG9uY2Ugd2VicGFjayA1IGlzIHN0YWJsZVxuICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdvYmplY3QnICYmIG1lc3NhZ2UubWVzc2FnZSkge1xuICAgIGNvbnN0IGZpbHRlcmVkTW9kdWxlVHJhY2UgPVxuICAgICAgbWVzc2FnZS5tb2R1bGVUcmFjZSAmJlxuICAgICAgbWVzc2FnZS5tb2R1bGVUcmFjZS5maWx0ZXIoXG4gICAgICAgICh0cmFjZTogYW55KSA9PlxuICAgICAgICAgICEvbmV4dC0obWlkZGxld2FyZXxjbGllbnQtcGFnZXN8cm91dGV8ZWRnZS1mdW5jdGlvbiktbG9hZGVyXFwuanMvLnRlc3QoXG4gICAgICAgICAgICB0cmFjZS5vcmlnaW5OYW1lXG4gICAgICAgICAgKVxuICAgICAgKVxuXG4gICAgbGV0IGJvZHkgPSBtZXNzYWdlLm1lc3NhZ2VcbiAgICBjb25zdCBicmVha2luZ0NoYW5nZUluZGV4ID0gYm9keS5pbmRleE9mKFdFQlBBQ0tfQlJFQUtJTkdfQ0hBTkdFX1BPTFlGSUxMUylcbiAgICBpZiAoYnJlYWtpbmdDaGFuZ2VJbmRleCA+PSAwKSB7XG4gICAgICBib2R5ID0gYm9keS5zbGljZSgwLCBicmVha2luZ0NoYW5nZUluZGV4KVxuICAgIH1cblxuICAgIG1lc3NhZ2UgPVxuICAgICAgKG1lc3NhZ2UubW9kdWxlTmFtZSA/IHN0cmlwQW5zaShtZXNzYWdlLm1vZHVsZU5hbWUpICsgJ1xcbicgOiAnJykgK1xuICAgICAgKG1lc3NhZ2UuZmlsZSA/IHN0cmlwQW5zaShtZXNzYWdlLmZpbGUpICsgJ1xcbicgOiAnJykgK1xuICAgICAgYm9keSArXG4gICAgICAobWVzc2FnZS5kZXRhaWxzICYmIHZlcmJvc2UgPyAnXFxuJyArIG1lc3NhZ2UuZGV0YWlscyA6ICcnKSArXG4gICAgICAoZmlsdGVyZWRNb2R1bGVUcmFjZSAmJiBmaWx0ZXJlZE1vZHVsZVRyYWNlLmxlbmd0aFxuICAgICAgICA/IChpbXBvcnRUcmFjZU5vdGUgfHwgJ1xcblxcbkltcG9ydCB0cmFjZSBmb3IgcmVxdWVzdGVkIG1vZHVsZTonKSArXG4gICAgICAgICAgZmlsdGVyZWRNb2R1bGVUcmFjZVxuICAgICAgICAgICAgLm1hcCgodHJhY2U6IGFueSkgPT4gYFxcbiR7dHJhY2UubW9kdWxlTmFtZX1gKVxuICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgIDogJycpICtcbiAgICAgIChtZXNzYWdlLnN0YWNrICYmIHZlcmJvc2UgPyAnXFxuJyArIG1lc3NhZ2Uuc3RhY2sgOiAnJylcbiAgfVxuICBsZXQgbGluZXMgPSBtZXNzYWdlLnNwbGl0KCdcXG4nKVxuXG4gIC8vIFN0cmlwIFdlYnBhY2stYWRkZWQgaGVhZGVycyBvZmYgZXJyb3JzL3dhcm5pbmdzXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2svYmxvYi9tYXN0ZXIvbGliL01vZHVsZUVycm9yLmpzXG4gIGxpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lOiBzdHJpbmcpID0+ICEvTW9kdWxlIFtBLXogXStcXChmcm9tLy50ZXN0KGxpbmUpKVxuXG4gIC8vIFRyYW5zZm9ybSBwYXJzaW5nIGVycm9yIGludG8gc3ludGF4IGVycm9yXG4gIC8vIFRPRE86IG1vdmUgdGhpcyB0byBvdXIgRVNMaW50IGZvcm1hdHRlcj9cbiAgbGluZXMgPSBsaW5lcy5tYXAoKGxpbmU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHBhcnNpbmdFcnJvciA9IC9MaW5lIChcXGQrKTooPzooXFxkKyk6KT9cXHMqUGFyc2luZyBlcnJvcjogKC4rKSQvLmV4ZWMoXG4gICAgICBsaW5lXG4gICAgKVxuICAgIGlmICghcGFyc2luZ0Vycm9yKSB7XG4gICAgICByZXR1cm4gbGluZVxuICAgIH1cbiAgICBjb25zdCBbLCBlcnJvckxpbmUsIGVycm9yQ29sdW1uLCBlcnJvck1lc3NhZ2VdID0gcGFyc2luZ0Vycm9yXG4gICAgcmV0dXJuIGAke2ZyaWVuZGx5U3ludGF4RXJyb3JMYWJlbH0gJHtlcnJvck1lc3NhZ2V9ICgke2Vycm9yTGluZX06JHtlcnJvckNvbHVtbn0pYFxuICB9KVxuXG4gIG1lc3NhZ2UgPSBsaW5lcy5qb2luKCdcXG4nKVxuICAvLyBTbW9vc2ggc3ludGF4IGVycm9ycyAoY29tbW9ubHkgZm91bmQgaW4gQ1NTKVxuICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKFxuICAgIC9TeW50YXhFcnJvclxccytcXCgoXFxkKyk6KFxcZCspXFwpXFxzKiguKz8pXFxuL2csXG4gICAgYCR7ZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsfSAkMyAoJDE6JDIpXFxuYFxuICApXG4gIC8vIENsZWFuIHVwIGV4cG9ydCBlcnJvcnNcbiAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAvXi4qZXhwb3J0ICcoLis/KScgd2FzIG5vdCBmb3VuZCBpbiAnKC4rPyknLiokL2dtLFxuICAgIGBBdHRlbXB0ZWQgaW1wb3J0IGVycm9yOiAnJDEnIGlzIG5vdCBleHBvcnRlZCBmcm9tICckMicuYFxuICApXG4gIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoXG4gICAgL14uKmV4cG9ydCAnZGVmYXVsdCcgXFwoaW1wb3J0ZWQgYXMgJyguKz8pJ1xcKSB3YXMgbm90IGZvdW5kIGluICcoLis/KScuKiQvZ20sXG4gICAgYEF0dGVtcHRlZCBpbXBvcnQgZXJyb3I6ICckMicgZG9lcyBub3QgY29udGFpbiBhIGRlZmF1bHQgZXhwb3J0IChpbXBvcnRlZCBhcyAnJDEnKS5gXG4gIClcbiAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAvXi4qZXhwb3J0ICcoLis/KScgXFwoaW1wb3J0ZWQgYXMgJyguKz8pJ1xcKSB3YXMgbm90IGZvdW5kIGluICcoLis/KScuKiQvZ20sXG4gICAgYEF0dGVtcHRlZCBpbXBvcnQgZXJyb3I6ICckMScgaXMgbm90IGV4cG9ydGVkIGZyb20gJyQzJyAoaW1wb3J0ZWQgYXMgJyQyJykuYFxuICApXG4gIGxpbmVzID0gbWVzc2FnZS5zcGxpdCgnXFxuJylcblxuICAvLyBSZW1vdmUgbGVhZGluZyBuZXdsaW5lXG4gIGlmIChsaW5lcy5sZW5ndGggPiAyICYmIGxpbmVzWzFdLnRyaW0oKSA9PT0gJycpIHtcbiAgICBsaW5lcy5zcGxpY2UoMSwgMSlcbiAgfVxuXG4gIC8vIENsZWFucyB1cCB2ZXJib3NlIFwibW9kdWxlIG5vdCBmb3VuZFwiIG1lc3NhZ2VzIGZvciBmaWxlcyBhbmQgcGFja2FnZXMuXG4gIGlmIChsaW5lc1sxXSAmJiBsaW5lc1sxXS5zdGFydHNXaXRoKCdNb2R1bGUgbm90IGZvdW5kOiAnKSkge1xuICAgIGxpbmVzID0gW1xuICAgICAgbGluZXNbMF0sXG4gICAgICBsaW5lc1sxXVxuICAgICAgICAucmVwbGFjZSgnRXJyb3I6ICcsICcnKVxuICAgICAgICAucmVwbGFjZSgnTW9kdWxlIG5vdCBmb3VuZDogQ2Fubm90IGZpbmQgZmlsZTonLCAnQ2Fubm90IGZpbmQgZmlsZTonKSxcbiAgICAgIC4uLmxpbmVzLnNsaWNlKDIpLFxuICAgIF1cbiAgfVxuXG4gIC8vIEFkZCBoZWxwZnVsIG1lc3NhZ2UgZm9yIHVzZXJzIHRyeWluZyB0byB1c2UgU2FzcyBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgaWYgKGxpbmVzWzFdICYmIGxpbmVzWzFdLm1hdGNoKC9DYW5ub3QgZmluZCBtb2R1bGUuK3Nhc3MvKSkge1xuICAgIC8vIC4vZmlsZS5tb2R1bGUuc2NzcyAoPDxsb2FkZXIgaW5mbz4+KSA9PiAuL2ZpbGUubW9kdWxlLnNjc3NcbiAgICBjb25zdCBmaXJzdExpbmUgPSBsaW5lc1swXS5zcGxpdCgnIScpXG4gICAgbGluZXNbMF0gPSBmaXJzdExpbmVbZmlyc3RMaW5lLmxlbmd0aCAtIDFdXG5cbiAgICBsaW5lc1sxXSA9XG4gICAgICBcIlRvIHVzZSBOZXh0LmpzJyBidWlsdC1pbiBTYXNzIHN1cHBvcnQsIHlvdSBmaXJzdCBuZWVkIHRvIGluc3RhbGwgYHNhc3NgLlxcblwiXG4gICAgbGluZXNbMV0gKz0gJ1J1biBgbnBtIGkgc2Fzc2Agb3IgYHlhcm4gYWRkIHNhc3NgIGluc2lkZSB5b3VyIHdvcmtzcGFjZS5cXG4nXG4gICAgbGluZXNbMV0gKz0gJ1xcbkxlYXJuIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2luc3RhbGwtc2FzcydcblxuICAgIC8vIGRpc3Bvc2Ugb2YgdW5oZWxwZnVsIHN0YWNrIHRyYWNlXG4gICAgbGluZXMgPSBsaW5lcy5zbGljZSgwLCAyKVxuICAgIGhhZE1pc3NpbmdTYXNzRXJyb3IgPSB0cnVlXG4gIH0gZWxzZSBpZiAoXG4gICAgaGFkTWlzc2luZ1Nhc3NFcnJvciAmJlxuICAgIG1lc3NhZ2UubWF0Y2goLyhzYXNzLWxvYWRlcnxyZXNvbHZlLXVybC1sb2FkZXI6IENTUyBlcnJvcikvKVxuICApIHtcbiAgICAvLyBkaXNwb3NlIG9mIHVuaGVscGZ1bCBzdGFjayB0cmFjZSBmb2xsb3dpbmcgbWlzc2luZyBzYXNzIG1vZHVsZVxuICAgIGxpbmVzID0gW11cbiAgfVxuXG4gIGlmICghdmVyYm9zZSkge1xuICAgIG1lc3NhZ2UgPSBsaW5lcy5qb2luKCdcXG4nKVxuICAgIC8vIEludGVybmFsIHN0YWNrcyBhcmUgZ2VuZXJhbGx5IHVzZWxlc3Mgc28gd2Ugc3RyaXAgdGhlbS4uLiB3aXRoIHRoZVxuICAgIC8vIGV4Y2VwdGlvbiBvZiBzdGFja3MgY29udGFpbmluZyBgd2VicGFjazpgIGJlY2F1c2UgdGhleSdyZSBub3JtYWxseVxuICAgIC8vIGZyb20gdXNlciBjb2RlIGdlbmVyYXRlZCBieSBXZWJwYWNrLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWVcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svY3JlYXRlLXJlYWN0LWFwcC9wdWxsLzEwNTBcbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKFxuICAgICAgL15cXHMqYXRcXHMoKD8hd2VicGFjazopLikqOlxcZCs6XFxkK1tcXHMpXSooXFxufCQpL2dtLFxuICAgICAgJydcbiAgICApIC8vIGF0IC4uLiAuLi46eDp5XG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXlxccyphdFxcczxhbm9ueW1vdXM+KFxcbnwkKS9nbSwgJycpIC8vIGF0IDxhbm9ueW1vdXM+XG5cbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKFxuICAgICAgL0ZpbGUgd2FzIHByb2Nlc3NlZCB3aXRoIHRoZXNlIGxvYWRlcnM6XFxuKC4rW1xcXFwvXShuZXh0W1xcXFwvXWRpc3RbXFxcXC9dLit8QG5leHRbXFxcXC9dcmVhY3QtcmVmcmVzaC11dGlsc1tcXFxcL11sb2FkZXIpXFwuanNcXG4pKllvdSBtYXkgbmVlZCBhbiBhZGRpdGlvbmFsIGxvYWRlciB0byBoYW5kbGUgdGhlIHJlc3VsdCBvZiB0aGVzZSBsb2FkZXJzLlxcbi9nLFxuICAgICAgJydcbiAgICApXG5cbiAgICBsaW5lcyA9IG1lc3NhZ2Uuc3BsaXQoJ1xcbicpXG4gIH1cblxuICAvLyBSZW1vdmUgZHVwbGljYXRlZCBuZXdsaW5lc1xuICBsaW5lcyA9IChsaW5lcyBhcyBzdHJpbmdbXSkuZmlsdGVyKFxuICAgIChsaW5lLCBpbmRleCwgYXJyKSA9PlxuICAgICAgaW5kZXggPT09IDAgfHwgbGluZS50cmltKCkgIT09ICcnIHx8IGxpbmUudHJpbSgpICE9PSBhcnJbaW5kZXggLSAxXS50cmltKClcbiAgKVxuXG4gIC8vIFJlYXNzZW1ibGUgdGhlIG1lc3NhZ2VcbiAgbWVzc2FnZSA9IGxpbmVzLmpvaW4oJ1xcbicpXG4gIHJldHVybiBtZXNzYWdlLnRyaW0oKVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRXZWJwYWNrTWVzc2FnZXMoanNvbjogYW55LCB2ZXJib3NlPzogYm9vbGVhbikge1xuICBjb25zdCBmb3JtYXR0ZWRFcnJvcnMgPSBqc29uLmVycm9ycy5tYXAoKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgIGNvbnN0IGlzVW5rbm93bk5leHRGb250RXJyb3IgPSBtZXNzYWdlLm1lc3NhZ2UuaW5jbHVkZXMoXG4gICAgICAnQW4gZXJyb3Igb2NjdXJyZWQgaW4gYG5leHQvZm9udGAuJ1xuICAgIClcbiAgICByZXR1cm4gZm9ybWF0TWVzc2FnZShtZXNzYWdlLCBpc1Vua25vd25OZXh0Rm9udEVycm9yIHx8IHZlcmJvc2UpXG4gIH0pXG4gIGNvbnN0IGZvcm1hdHRlZFdhcm5pbmdzID0ganNvbi53YXJuaW5ncy5tYXAoKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgIHJldHVybiBmb3JtYXRNZXNzYWdlKG1lc3NhZ2UsIHZlcmJvc2UpXG4gIH0pXG5cbiAgLy8gUmVvcmRlciBlcnJvcnMgdG8gcHV0IHRoZSBtb3N0IHJlbGV2YW50IG9uZXMgZmlyc3QuXG4gIGxldCByZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciA9IC0xXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXR0ZWRFcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBlcnJvciA9IGZvcm1hdHRlZEVycm9yc1tpXVxuICAgIGlmIChlcnJvci5pbmNsdWRlcygnUmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3InKSkge1xuICAgICAgcmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgPSBpXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIE1vdmUgdGhlIHJlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yIHRvIHRoZSB0b3AgaWYgaXQgZXhpc3RzXG4gIGlmIChyZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciAhPT0gLTEpIHtcbiAgICBjb25zdCBlcnJvciA9IGZvcm1hdHRlZEVycm9ycy5zcGxpY2UocmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IsIDEpXG4gICAgZm9ybWF0dGVkRXJyb3JzLnVuc2hpZnQoZXJyb3JbMF0pXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgLi4uanNvbixcbiAgICBlcnJvcnM6IGZvcm1hdHRlZEVycm9ycyxcbiAgICB3YXJuaW5nczogZm9ybWF0dGVkV2FybmluZ3MsXG4gIH1cbiAgaWYgKCF2ZXJib3NlICYmIHJlc3VsdC5lcnJvcnMuc29tZShpc0xpa2VseUFTeW50YXhFcnJvcikpIHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHN5bnRheCBlcnJvcnMsIHNob3cganVzdCB0aGVtLlxuICAgIHJlc3VsdC5lcnJvcnMgPSByZXN1bHQuZXJyb3JzLmZpbHRlcihpc0xpa2VseUFTeW50YXhFcnJvcilcbiAgICByZXN1bHQud2FybmluZ3MgPSBbXVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cbiJdLCJuYW1lcyI6WyJmb3JtYXRXZWJwYWNrTWVzc2FnZXMiLCJmcmllbmRseVN5bnRheEVycm9yTGFiZWwiLCJXRUJQQUNLX0JSRUFLSU5HX0NIQU5HRV9QT0xZRklMTFMiLCJpc0xpa2VseUFTeW50YXhFcnJvciIsIm1lc3NhZ2UiLCJzdHJpcEFuc2kiLCJpbmNsdWRlcyIsImhhZE1pc3NpbmdTYXNzRXJyb3IiLCJmb3JtYXRNZXNzYWdlIiwidmVyYm9zZSIsImltcG9ydFRyYWNlTm90ZSIsImZpbHRlcmVkTW9kdWxlVHJhY2UiLCJtb2R1bGVUcmFjZSIsImZpbHRlciIsInRyYWNlIiwidGVzdCIsIm9yaWdpbk5hbWUiLCJib2R5IiwiYnJlYWtpbmdDaGFuZ2VJbmRleCIsImluZGV4T2YiLCJzbGljZSIsIm1vZHVsZU5hbWUiLCJmaWxlIiwiZGV0YWlscyIsImxlbmd0aCIsIm1hcCIsImpvaW4iLCJzdGFjayIsImxpbmVzIiwic3BsaXQiLCJsaW5lIiwicGFyc2luZ0Vycm9yIiwiZXhlYyIsImVycm9yTGluZSIsImVycm9yQ29sdW1uIiwiZXJyb3JNZXNzYWdlIiwicmVwbGFjZSIsInRyaW0iLCJzcGxpY2UiLCJzdGFydHNXaXRoIiwibWF0Y2giLCJmaXJzdExpbmUiLCJpbmRleCIsImFyciIsImpzb24iLCJmb3JtYXR0ZWRFcnJvcnMiLCJlcnJvcnMiLCJpc1Vua25vd25OZXh0Rm9udEVycm9yIiwiZm9ybWF0dGVkV2FybmluZ3MiLCJ3YXJuaW5ncyIsInJlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yIiwiaSIsImVycm9yIiwidW5zaGlmdCIsInJlc3VsdCIsInNvbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/format-webpack-messages.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js":
/*!*************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js ***!
\*************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HeadManagerContext\", ({\n enumerable: true,\n get: function() {\n return HeadManagerContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst HeadManagerContext = _react.default.createContext({});\nif (true) {\n HeadManagerContext.displayName = 'HeadManagerContext';\n} //# sourceMappingURL=head-manager-context.shared-runtime.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O3NEQUVhQTs7O2VBQUFBOzs7OzRFQUZLO0FBRVgsTUFBTUEscUJBVVJDLE9BQUFBLE9BQUssQ0FBQ0MsYUFBYSxDQUFDLENBQUM7QUFFMUIsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNILG1CQUFtQk0sV0FBVyxHQUFHO0FBQ25DIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmV4cG9ydCBjb25zdCBIZWFkTWFuYWdlckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8e1xuICB1cGRhdGVIZWFkPzogKHN0YXRlOiBhbnkpID0+IHZvaWRcbiAgbW91bnRlZEluc3RhbmNlcz86IGFueVxuICB1cGRhdGVTY3JpcHRzPzogKHN0YXRlOiBhbnkpID0+IHZvaWRcbiAgc2NyaXB0cz86IGFueVxuICBnZXRJc1Nzcj86ICgpID0+IGJvb2xlYW5cblxuICAvLyBVc2VkIGluIGFwcCBkaXJlY3RvcnksIHRvIHJlbmRlciBzY3JpcHQgdGFncyBhcyBzZXJ2ZXIgY29tcG9uZW50cy5cbiAgYXBwRGlyPzogYm9vbGVhblxuICBub25jZT86IHN0cmluZ1xufT4gPSBSZWFjdC5jcmVhdGVDb250ZXh0KHt9KVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBIZWFkTWFuYWdlckNvbnRleHQuZGlzcGxheU5hbWUgPSAnSGVhZE1hbmFnZXJDb250ZXh0J1xufVxuIl0sIm5hbWVzIjpbIkhlYWRNYW5hZ2VyQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/head.js":
/*!******************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/head.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}));\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 default: function() {\n return _default;\n },\n defaultHead: function() {\n return defaultHead;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-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 */ \"(pages-dir-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 */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst _sideeffect = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./side-effect */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/side-effect.js\"));\nconst _ampcontextsharedruntime = __webpack_require__(/*! ./amp-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/amp-context.shared-runtime.js\");\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ./head-manager-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _ampmode = __webpack_require__(/*! ./amp-mode */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/amp-mode.js\");\nconst _warnonce = __webpack_require__(/*! ./utils/warn-once */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils/warn-once.js\");\nfunction defaultHead(inAmpMode) {\n if (inAmpMode === void 0) inAmpMode = false;\n const head = [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n charSet: \"utf-8\"\n }, \"charset\")\n ];\n if (!inAmpMode) {\n head.push(/*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"viewport\",\n content: \"width=device-width\"\n }, \"viewport\"));\n }\n return head;\n}\nfunction onlyReactElement(list, child) {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === 'string' || typeof child === 'number') {\n return list;\n }\n // Adds support for React.Fragment\n if (child.type === _react.default.Fragment) {\n return list.concat(_react.default.Children.toArray(child.props.children).reduce((fragmentList, fragmentChild)=>{\n if (typeof fragmentChild === 'string' || typeof fragmentChild === 'number') {\n return fragmentList;\n }\n return fragmentList.concat(fragmentChild);\n }, []));\n }\n return list.concat(child);\n}\nconst METATYPES = [\n 'name',\n 'httpEquiv',\n 'charSet',\n 'itemProp'\n];\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like <title/>\n Also adds support for deduplicated `key` properties\n*/ function unique() {\n const keys = new Set();\n const tags = new Set();\n const metaTypes = new Set();\n const metaCategories = {};\n return (h)=>{\n let isUnique = true;\n let hasKey = false;\n if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {\n hasKey = true;\n const key = h.key.slice(h.key.indexOf('$') + 1);\n if (keys.has(key)) {\n isUnique = false;\n } else {\n keys.add(key);\n }\n }\n // eslint-disable-next-line default-case\n switch(h.type){\n case 'title':\n case 'base':\n if (tags.has(h.type)) {\n isUnique = false;\n } else {\n tags.add(h.type);\n }\n break;\n case 'meta':\n for(let i = 0, len = METATYPES.length; i < len; i++){\n const metatype = METATYPES[i];\n if (!h.props.hasOwnProperty(metatype)) continue;\n if (metatype === 'charSet') {\n if (metaTypes.has(metatype)) {\n isUnique = false;\n } else {\n metaTypes.add(metatype);\n }\n } else {\n const category = h.props[metatype];\n const categories = metaCategories[metatype] || new Set();\n if ((metatype !== 'name' || !hasKey) && categories.has(category)) {\n isUnique = false;\n } else {\n categories.add(category);\n metaCategories[metatype] = categories;\n }\n }\n }\n break;\n }\n return isUnique;\n };\n}\n/**\n *\n * @param headChildrenElements List of children of <Head>\n */ function reduceComponents(headChildrenElements, props) {\n const { inAmpMode } = props;\n return headChildrenElements.reduce(onlyReactElement, []).reverse().concat(defaultHead(inAmpMode).reverse()).filter(unique()).reverse().map((c, i)=>{\n const key = c.key || i;\n if (true) {\n // omit JSON-LD structured data snippets from the warning\n if (c.type === 'script' && c.props['type'] !== 'application/ld+json') {\n const srcMessage = c.props['src'] ? '<script> tag with src=\"' + c.props['src'] + '\"' : \"inline <script>\";\n (0, _warnonce.warnOnce)(\"Do not add <script> tags using next/head (see \" + srcMessage + \"). Use next/script instead. \\nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component\");\n } else if (c.type === 'link' && c.props['rel'] === 'stylesheet') {\n (0, _warnonce.warnOnce)('Do not add stylesheets using next/head (see <link rel=\"stylesheet\"> tag with href=\"' + c.props['href'] + '\"). Use Document instead. \\nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component');\n }\n }\n return /*#__PURE__*/ _react.default.cloneElement(c, {\n key\n });\n });\n}\n/**\n * This component injects elements to `<head>` of your page.\n * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n */ function Head(param) {\n let { children } = param;\n const ampState = (0, _react.useContext)(_ampcontextsharedruntime.AmpStateContext);\n const headManager = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_sideeffect.default, {\n reduceComponentsToState: reduceComponents,\n headManager: headManager,\n inAmpMode: (0, _ampmode.isInAmpMode)(ampState),\n children: children\n });\n}\n_c = Head;\nconst _default = Head;\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=head.js.map\nvar _c;\n$RefreshReg$(_c, \"Head\");\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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9oZWFkLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQWdMQSxPQUFtQjtlQUFuQjs7SUFuS2dCQSxXQUFXO2VBQVhBOzs7Ozs7NkVBWDRCO2lGQUN6QjtxREFDYTs2REFDRztxQ0FDUDtzQ0FDSDtBQU1sQixTQUFTQSxZQUFZQyxTQUFpQjtJQUFqQkEsSUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsWUFBWTtJQUN0QyxNQUFNQyxPQUFPO3NCQUFDLHFCQUFDQyxRQUFBQTtZQUFLQyxTQUFRO1dBQVk7S0FBYTtJQUNyRCxJQUFJLENBQUNILFdBQVc7UUFDZEMsS0FBS0csSUFBSSxlQUNQLHFCQUFDRixRQUFBQTtZQUFLRyxNQUFLO1lBQVdDLFNBQVE7V0FBeUI7SUFFM0Q7SUFDQSxPQUFPTDtBQUNUO0FBRUEsU0FBU00saUJBQ1BDLElBQW9DLEVBQ3BDQyxLQUEyQztJQUUzQyw4RkFBOEY7SUFDOUYsSUFBSSxPQUFPQSxVQUFVLFlBQVksT0FBT0EsVUFBVSxVQUFVO1FBQzFELE9BQU9EO0lBQ1Q7SUFDQSxrQ0FBa0M7SUFDbEMsSUFBSUMsTUFBTUMsSUFBSSxLQUFLQyxPQUFBQSxPQUFLLENBQUNDLFFBQVEsRUFBRTtRQUNqQyxPQUFPSixLQUFLSyxNQUFNLENBQ2hCLE9BQ0FGLE9BQUssQ0FBQ0csUUFBUSxDQUFDQyxPQUFPLENBQUNOLE1BQU1PLEtBQUssQ0FBQ0MsUUFBUSxFQUFFQyxNQUFNLENBQ2pELENBRUVDLGNBQ0FDO1lBRUEsSUFDRSxPQUFPQSxrQkFBa0IsWUFDekIsT0FBT0Esa0JBQWtCLFVBQ3pCO2dCQUNBLE9BQU9EO1lBQ1Q7WUFDQSxPQUFPQSxhQUFhTixNQUFNLENBQUNPO1FBQzdCLEdBQ0EsRUFBRTtJQUdS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QUFPLElBQUlKLEVBQUV0QyxJQUFJLEtBQUssVUFBVXNDLEVBQUVoQyxLQUFLLENBQUMsTUFBTSxLQUFLLGNBQWM7Z0JBQy9EcUMsQ0FBQUEsR0FBQUEsVUFBQUEsUUFBQUEsRUFDRyx3RkFBcUZMLEVBQUVoQyxLQUFLLENBQUMsT0FBTyxHQUFDO1lBRTFHO1FBQ0Y7UUFDQSxxQkFBT0wsT0FBQUEsT0FBSyxDQUFDMkMsWUFBWSxDQUFDTixHQUFHO1lBQUVqQjtRQUFJO0lBQ3JDO0FBQ0o7QUFFQTs7O0NBR0MsR0FDRCxjQUFjLEtBQTJDO0lBQTNDLE1BQUVkLFFBQVEsRUFBaUMsR0FBM0M7SUFDWixNQUFNdUMsV0FBV0MsQ0FBQUEsR0FBQUEsT0FBQUEsVUFBQUEsRUFBV0MseUJBQUFBLGVBQWU7SUFDM0MsTUFBTUMsY0FBY0YsQ0FBQUEsR0FBQUEsT0FBQUEsVUFBQUEsRUFBV0csaUNBQUFBLGtCQUFrQjtJQUNqRCxxQkFDRSxxQkFBQ0MsWUFBQUEsT0FBTTtRQUNMQyx5QkFBeUJuQjtRQUN6QmdCLGFBQWFBO1FBQ2IzRCxXQUFXK0QsQ0FBQUEsR0FBQUEsU0FBQUEsV0FBQUEsRUFBWVA7a0JBRXRCdkM7O0FBR1A7S0FaU3NDO01BY1QsV0FBZUEiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL3NyYy9zaGFyZWQvbGliL2hlYWQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdHlwZSBKU1ggfSBmcm9tICdyZWFjdCdcbmltcG9ydCBFZmZlY3QgZnJvbSAnLi9zaWRlLWVmZmVjdCdcbmltcG9ydCB7IEFtcFN0YXRlQ29udGV4dCB9IGZyb20gJy4vYW1wLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBIZWFkTWFuYWdlckNvbnRleHQgfSBmcm9tICcuL2hlYWQtbWFuYWdlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgaXNJbkFtcE1vZGUgfSBmcm9tICcuL2FtcC1tb2RlJ1xuaW1wb3J0IHsgd2Fybk9uY2UgfSBmcm9tICcuL3V0aWxzL3dhcm4tb25jZSdcblxudHlwZSBXaXRoSW5BbXBNb2RlID0ge1xuICBpbkFtcE1vZGU/OiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0SGVhZChpbkFtcE1vZGUgPSBmYWxzZSk6IEpTWC5FbGVtZW50W10ge1xuICBjb25zdCBoZWFkID0gWzxtZXRhIGNoYXJTZXQ9XCJ1dGYtOFwiIGtleT1cImNoYXJzZXRcIiAvPl1cbiAgaWYgKCFpbkFtcE1vZGUpIHtcbiAgICBoZWFkLnB1c2goXG4gICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoXCIga2V5PVwidmlld3BvcnRcIiAvPlxuICAgIClcbiAgfVxuICByZXR1cm4gaGVhZFxufVxuXG5mdW5jdGlvbiBvbmx5UmVhY3RFbGVtZW50KFxuICBsaXN0OiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gIGNoaWxkOiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudW1iZXIgfCBzdHJpbmdcbik6IEFycmF5PFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+PiB7XG4gIC8vIFJlYWN0IGNoaWxkcmVuIGNhbiBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCIgaW4gdGhpcyBjYXNlIHdlIGlnbm9yZSB0aGVtIGZvciBiYWNrd2FyZHMgY29tcGF0XG4gIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbGlzdFxuICB9XG4gIC8vIEFkZHMgc3VwcG9ydCBmb3IgUmVhY3QuRnJhZ21lbnRcbiAgaWYgKGNoaWxkLnR5cGUgPT09IFJlYWN0LkZyYWdtZW50KSB7XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBAdHlwZXMvcmVhY3QgZG9lcyBub3QgcmVtb3ZlIGZyYWdtZW50cyBidXQgdGhpcyBjb3VsZCBhbHNvIHJldHVybiBSZWFjdFBvcnRhbFtdXG4gICAgICBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkLnByb3BzLmNoaWxkcmVuKS5yZWR1Y2UoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgQHR5cGVzL3JlYWN0IGRvZXMgbm90IHJlbW92ZSBmcmFnbWVudHMgYnV0IHRoaXMgY291bGQgYWxzbyByZXR1cm4gUmVhY3RQb3J0YWxbXVxuICAgICAgICAoXG4gICAgICAgICAgZnJhZ21lbnRMaXN0OiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gICAgICAgICAgZnJhZ21lbnRDaGlsZDogUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVtYmVyIHwgc3RyaW5nXG4gICAgICAgICk6IEFycmF5PFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+PiA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZyYWdtZW50Q2hpbGQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlb2YgZnJhZ21lbnRDaGlsZCA9PT0gJ251bWJlcidcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmcmFnbWVudExpc3RcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZyYWdtZW50TGlzdC5jb25jYXQoZnJhZ21lbnRDaGlsZClcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KGNoaWxkKVxufVxuXG5jb25zdCBNRVRBVFlQRVMgPSBbJ25hbWUnLCAnaHR0cEVxdWl2JywgJ2NoYXJTZXQnLCAnaXRlbVByb3AnXVxuXG4vKlxuIHJldHVybnMgYSBmdW5jdGlvbiBmb3IgZmlsdGVyaW5nIGhlYWQgY2hpbGQgZWxlbWVudHNcbiB3aGljaCBzaG91bGRuJ3QgYmUgZHVwbGljYXRlZCwgbGlrZSA8dGl0bGUvPlxuIEFsc28gYWRkcyBzdXBwb3J0IGZvciBkZWR1cGxpY2F0ZWQgYGtleWAgcHJvcGVydGllc1xuKi9cbmZ1bmN0aW9uIHVuaXF1ZSgpIHtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQoKVxuICBjb25zdCB0YWdzID0gbmV3IFNldCgpXG4gIGNvbnN0IG1ldGFUeXBlcyA9IG5ldyBTZXQoKVxuICBjb25zdCBtZXRhQ2F0ZWdvcmllczogeyBbbWV0YXR5cGU6IHN0cmluZ106IFNldDxzdHJpbmc+IH0gPSB7fVxuXG4gIHJldHVybiAoaDogUmVhY3QuUmVhY3RFbGVtZW50PGFueT4pID0+IHtcbiAgICBsZXQgaXNVbmlxdWUgPSB0cnVlXG4gICAgbGV0IGhhc0tleSA9IGZhbHNlXG5cbiAgICBpZiAoaC5rZXkgJiYgdHlwZW9mIGgua2V5ICE9PSAnbnVtYmVyJyAmJiBoLmtleS5pbmRleE9mKCckJykgPiAwKSB7XG4gICAgICBoYXNLZXkgPSB0cnVlXG4gICAgICBjb25zdCBrZXkgPSBoLmtleS5zbGljZShoLmtleS5pbmRleE9mKCckJykgKyAxKVxuICAgICAgaWYgKGtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgaXNVbmlxdWUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5cy5hZGQoa2V5KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcbiAgICBzd2l0Y2ggKGgudHlwZSkge1xuICAgICAgY2FzZSAndGl0bGUnOlxuICAgICAgY2FzZSAnYmFzZSc6XG4gICAgICAgIGlmICh0YWdzLmhhcyhoLnR5cGUpKSB7XG4gICAgICAgICAgaXNVbmlxdWUgPSBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhZ3MuYWRkKGgudHlwZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbWV0YSc6XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNRVRBVFlQRVMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBtZXRhdHlwZSA9IE1FVEFUWVBFU1tpXVxuICAgICAgICAgIGlmICghaC5wcm9wcy5oYXNPd25Qcm9wZXJ0eShtZXRhdHlwZSkpIGNvbnRpbnVlXG5cbiAgICAgICAgICBpZiAobWV0YXR5cGUgPT09ICdjaGFyU2V0Jykge1xuICAgICAgICAgICAgaWYgKG1ldGFUeXBlcy5oYXMobWV0YXR5cGUpKSB7XG4gICAgICAgICAgICAgIGlzVW5pcXVlID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1ldGFUeXBlcy5hZGQobWV0YXR5cGUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gaC5wcm9wc1ttZXRhdHlwZV1cbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBtZXRhQ2F0ZWdvcmllc1ttZXRhdHlwZV0gfHwgbmV3IFNldCgpXG4gICAgICAgICAgICBpZiAoKG1ldGF0eXBlICE9PSAnbmFtZScgfHwgIWhhc0tleSkgJiYgY2F0ZWdvcmllcy5oYXMoY2F0ZWdvcnkpKSB7XG4gICAgICAgICAgICAgIGlzVW5pcXVlID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KVxuICAgICAgICAgICAgICBtZXRhQ2F0ZWdvcmllc1ttZXRhdHlwZV0gPSBjYXRlZ29yaWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVW5pcXVlXG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGhlYWRDaGlsZHJlbkVsZW1lbnRzIExpc3Qgb2YgY2hpbGRyZW4gb2YgPEhlYWQ+XG4gKi9cbmZ1bmN0aW9uIHJlZHVjZUNvbXBvbmVudHM8VCBleHRlbmRzIHt9ICYgV2l0aEluQW1wTW9kZT4oXG4gIGhlYWRDaGlsZHJlbkVsZW1lbnRzOiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gIHByb3BzOiBUXG4pIHtcbiAgY29uc3QgeyBpbkFtcE1vZGUgfSA9IHByb3BzXG4gIHJldHVybiBoZWFkQ2hpbGRyZW5FbGVtZW50c1xuICAgIC5yZWR1Y2Uob25seVJlYWN0RWxlbWVudCwgW10pXG4gICAgLnJldmVyc2UoKVxuICAgIC5jb25jYXQoZGVmYXVsdEhlYWQoaW5BbXBNb2RlKS5yZXZlcnNlKCkpXG4gICAgLmZpbHRlcih1bmlxdWUoKSlcbiAgICAucmV2ZXJzZSgpXG4gICAgLm1hcCgoYzogUmVhY3QuUmVhY3RFbGVtZW50PGFueT4sIGk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYy5rZXkgfHwgaVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIC8vIG9taXQgSlNPTi1MRCBzdHJ1Y3R1cmVkIGRhdGEgc25pcHBldHMgZnJvbSB0aGUgd2FybmluZ1xuICAgICAgICBpZiAoYy50eXBlID09PSAnc2NyaXB0JyAmJiBjLnByb3BzWyd0eXBlJ10gIT09ICdhcHBsaWNhdGlvbi9sZCtqc29uJykge1xuICAgICAgICAgIGNvbnN0IHNyY01lc3NhZ2UgPSBjLnByb3BzWydzcmMnXVxuICAgICAgICAgICAgPyBgPHNjcmlwdD4gdGFnIHdpdGggc3JjPVwiJHtjLnByb3BzWydzcmMnXX1cImBcbiAgICAgICAgICAgIDogYGlubGluZSA8c2NyaXB0PmBcbiAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgIGBEbyBub3QgYWRkIDxzY3JpcHQ+IHRhZ3MgdXNpbmcgbmV4dC9oZWFkIChzZWUgJHtzcmNNZXNzYWdlfSkuIFVzZSBuZXh0L3NjcmlwdCBpbnN0ZWFkLiBcXG5TZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25vLXNjcmlwdC10YWdzLWluLWhlYWQtY29tcG9uZW50YFxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIGlmIChjLnR5cGUgPT09ICdsaW5rJyAmJiBjLnByb3BzWydyZWwnXSA9PT0gJ3N0eWxlc2hlZXQnKSB7XG4gICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICBgRG8gbm90IGFkZCBzdHlsZXNoZWV0cyB1c2luZyBuZXh0L2hlYWQgKHNlZSA8bGluayByZWw9XCJzdHlsZXNoZWV0XCI+IHRhZyB3aXRoIGhyZWY9XCIke2MucHJvcHNbJ2hyZWYnXX1cIikuIFVzZSBEb2N1bWVudCBpbnN0ZWFkLiBcXG5TZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25vLXN0eWxlc2hlZXRzLWluLWhlYWQtY29tcG9uZW50YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjLCB7IGtleSB9KVxuICAgIH0pXG59XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaW5qZWN0cyBlbGVtZW50cyB0byBgPGhlYWQ+YCBvZiB5b3VyIHBhZ2UuXG4gKiBUbyBhdm9pZCBkdXBsaWNhdGVkIGB0YWdzYCBpbiBgPGhlYWQ+YCB5b3UgY2FuIHVzZSB0aGUgYGtleWAgcHJvcGVydHksIHdoaWNoIHdpbGwgbWFrZSBzdXJlIGV2ZXJ5IHRhZyBpcyBvbmx5IHJlbmRlcmVkIG9uY2UuXG4gKi9cbmZ1bmN0aW9uIEhlYWQoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICBjb25zdCBhbXBTdGF0ZSA9IHVzZUNvbnRleHQoQW1wU3RhdGVDb250ZXh0KVxuICBjb25zdCBoZWFkTWFuYWdlciA9IHVzZUNvbnRleHQoSGVhZE1hbmFnZXJDb250ZXh0KVxuICByZXR1cm4gKFxuICAgIDxFZmZlY3RcbiAgICAgIHJlZHVjZUNvbXBvbmVudHNUb1N0YXRlPXtyZWR1Y2VDb21wb25lbnRzfVxuICAgICAgaGVhZE1hbmFnZXI9e2hlYWRNYW5hZ2VyfVxuICAgICAgaW5BbXBNb2RlPXtpc0luQW1wTW9kZShhbXBTdGF0ZSl9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvRWZmZWN0PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRcbiJdLCJuYW1lcyI6WyJkZWZhdWx0SGVhZCIsImluQW1wTW9kZSIsImhlYWQiLCJtZXRhIiwiY2hhclNldCIsInB1c2giLCJuYW1lIiwiY29udGVudCIsIm9ubHlSZWFjdEVsZW1lbnQiLCJsaXN0IiwiY2hpbGQiLCJ0eXBlIiwiUmVhY3QiLCJGcmFnbWVudCIsImNvbmNhdCIsIkNoaWxkcmVuIiwidG9BcnJheSIsInByb3BzIiwiY2hpbGRyZW4iLCJyZWR1Y2UiLCJmcmFnbWVudExpc3QiLCJmcmFnbWVudENoaWxkIiwiTUVUQVRZUEVTIiwidW5pcXVlIiwia2V5cyIsIlNldCIsInRhZ3MiLCJtZXRhVHlwZXMiLCJtZXRhQ2F0ZWdvcmllcyIsImgiLCJpc1VuaXF1ZSIsImhhc0tleSIsImtleSIsImluZGV4T2YiLCJzbGljZSIsImhhcyIsImFkZCIsImkiLCJsZW4iLCJsZW5ndGgiLCJtZXRhdHlwZSIsImhhc093blByb3BlcnR5IiwiY2F0ZWdvcnkiLCJjYXRlZ29yaWVzIiwicmVkdWNlQ29tcG9uZW50cyIsImhlYWRDaGlsZHJlbkVsZW1lbnRzIiwicmV2ZXJzZSIsImZpbHRlciIsIm1hcCIsImMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJzcmNNZXNzYWdlIiwid2Fybk9uY2UiLCJjbG9uZUVsZW1lbnQiLCJIZWFkIiwiYW1wU3RhdGUiLCJ1c2VDb250ZXh0IiwiQW1wU3RhdGVDb250ZXh0IiwiaGVhZE1hbmFnZXIiLCJIZWFkTWFuYWdlckNvbnRleHQiLCJFZmZlY3QiLCJyZWR1Y2VDb21wb25lbnRzVG9TdGF0ZSIsImlzSW5BbXBNb2RlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/head.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js":
/*!*************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.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}));\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 PathParamsContext: function() {\n return PathParamsContext;\n },\n PathnameContext: function() {\n return PathnameContext;\n },\n SearchParamsContext: function() {\n return SearchParamsContext;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\");\nconst SearchParamsContext = (0, _react.createContext)(null);\nconst PathnameContext = (0, _react.createContext)(null);\nconst PathParamsContext = (0, _react.createContext)(null);\nif (true) {\n SearchParamsContext.displayName = 'SearchParamsContext';\n PathnameContext.displayName = 'PathnameContext';\n PathParamsContext.displayName = 'PathParamsContext';\n} //# sourceMappingURL=hooks-client-context.shared-runtime.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFPYUEsaUJBQWlCO2VBQWpCQTs7SUFEQUMsZUFBZTtlQUFmQTs7SUFEQUMsbUJBQW1CO2VBQW5CQTs7O21DQUhpQjtBQUd2QixNQUFNQSxzQkFBc0JDLENBQUFBLEdBQUFBLE9BQUFBLGFBQUFBLEVBQXNDO0FBQ2xFLE1BQU1GLGtCQUFrQkUsQ0FBQUEsR0FBQUEsT0FBQUEsYUFBQUEsRUFBNkI7QUFDckQsTUFBTUgsb0JBQW9CRyxDQUFBQSxHQUFBQSxPQUFBQSxhQUFBQSxFQUE2QjtBQUU5RCxJQUFJQyxJQUFvQixFQUFtQjtJQUN6Q0Ysb0JBQW9CSyxXQUFXLEdBQUc7SUFDbENOLGdCQUFnQk0sV0FBVyxHQUFHO0lBQzlCUCxrQkFBa0JPLFdBQVcsR0FBRztBQUNsQyIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvc3JjL3NoYXJlZC9saWIvaG9va3MtY2xpZW50LWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUGFyYW1zIH0gZnJvbSAnLi4vLi4vc2VydmVyL3JlcXVlc3QvcGFyYW1zJ1xuXG5leHBvcnQgY29uc3QgU2VhcmNoUGFyYW1zQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8VVJMU2VhcmNoUGFyYW1zIHwgbnVsbD4obnVsbClcbmV4cG9ydCBjb25zdCBQYXRobmFtZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PHN0cmluZyB8IG51bGw+KG51bGwpXG5leHBvcnQgY29uc3QgUGF0aFBhcmFtc0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFBhcmFtcyB8IG51bGw+KG51bGwpXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFNlYXJjaFBhcmFtc0NvbnRleHQuZGlzcGxheU5hbWUgPSAnU2VhcmNoUGFyYW1zQ29udGV4dCdcbiAgUGF0aG5hbWVDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1BhdGhuYW1lQ29udGV4dCdcbiAgUGF0aFBhcmFtc0NvbnRleHQuZGlzcGxheU5hbWUgPSAnUGF0aFBhcmFtc0NvbnRleHQnXG59XG4iXSwibmFtZXMiOlsiUGF0aFBhcmFtc0NvbnRleHQiLCJQYXRobmFtZUNvbnRleHQiLCJTZWFyY2hQYXJhbXNDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js":
/*!****************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js ***!
\****************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizeLocalePath\", ({\n enumerable: true,\n get: function() {\n return normalizeLocalePath;\n }\n}));\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */ const cache = new WeakMap();\nfunction normalizeLocalePath(pathname, locales) {\n // If locales is undefined, return the pathname as is.\n if (!locales) return {\n pathname\n };\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales);\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale)=>locale.toLowerCase());\n cache.set(locales, lowercasedLocales);\n }\n let detectedLocale;\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2);\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return {\n pathname\n };\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase();\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment);\n if (index < 0) return {\n pathname\n };\n // Return the case-sensitive locale.\n detectedLocale = locales[index];\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/';\n return {\n pathname,\n detectedLocale\n };\n} //# sourceMappingURL=normalize-locale-path.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pMThuL25vcm1hbGl6ZS1sb2NhbGUtcGF0aC5qcyIsIm1hcHBpbmdzIjoiOzs7O3VEQXFCZ0JBOzs7ZUFBQUE7OztBQWhCaEI7Ozs7Q0FJQyxHQUNELE1BQU1DLFFBQVEsSUFBSUM7QUFXWCxTQUFTRixvQkFDZEcsUUFBZ0IsRUFDaEJDLE9BQTJCO0lBRTNCLHNEQUFzRDtJQUN0RCxJQUFJLENBQUNBLFNBQVMsT0FBTztRQUFFRDtJQUFTO0lBRWhDLGlFQUFpRTtJQUNqRSxJQUFJRSxvQkFBb0JKLE1BQU1LLEdBQUcsQ0FBQ0Y7SUFDbEMsSUFBSSxDQUFDQyxtQkFBbUI7UUFDdEJBLG9CQUFvQkQsUUFBUUcsR0FBRyxDQUFDLENBQUNDLFNBQVdBLE9BQU9DLFdBQVc7UUFDOURSLE1BQU1TLEdBQUcsQ0FBQ04sU0FBU0M7SUFDckI7SUFFQSxJQUFJTTtJQUVKLG9FQUFvRTtJQUNwRSx5RUFBeUU7SUFDekUsTUFBTUMsV0FBV1QsU0FBU1UsS0FBSyxDQUFDLEtBQUs7SUFFckMsMEVBQTBFO0lBQzFFLFVBQVU7SUFDVixJQUFJLENBQUNELFFBQVEsQ0FBQyxFQUFFLEVBQUUsT0FBTztRQUFFVDtJQUFTO0lBRXBDLDBEQUEwRDtJQUMxRCxNQUFNVyxVQUFVRixRQUFRLENBQUMsRUFBRSxDQUFDSCxXQUFXO0lBRXZDLHlFQUF5RTtJQUN6RSxtQ0FBbUM7SUFDbkMsTUFBTU0sUUFBUVYsa0JBQWtCVyxPQUFPLENBQUNGO0lBQ3hDLElBQUlDLFFBQVEsR0FBRyxPQUFPO1FBQUVaO0lBQVM7SUFFakMsb0NBQW9DO0lBQ3BDUSxpQkFBaUJQLE9BQU8sQ0FBQ1csTUFBTTtJQUUvQixnREFBZ0Q7SUFDaERaLFdBQVdBLFNBQVNjLEtBQUssQ0FBQ04sZUFBZU8sTUFBTSxHQUFHLE1BQU07SUFFeEQsT0FBTztRQUFFZjtRQUFVUTtJQUFlO0FBQ3BDIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi9pMThuL25vcm1hbGl6ZS1sb2NhbGUtcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFBhdGhMb2NhbGUge1xuICBkZXRlY3RlZExvY2FsZT86IHN0cmluZ1xuICBwYXRobmFtZTogc3RyaW5nXG59XG5cbi8qKlxuICogQSBjYWNoZSBvZiBsb3dlcmNhc2VkIGxvY2FsZXMgZm9yIGVhY2ggbGlzdCBvZiBsb2NhbGVzLiBUaGlzIGlzIHN0b3JlZCBhcyBhXG4gKiBXZWFrTWFwIHNvIGlmIHRoZSBsb2NhbGVzIGFyZSBnYXJiYWdlIGNvbGxlY3RlZCwgdGhlIGNhY2hlIGVudHJ5IHdpbGwgYmVcbiAqIHJlbW92ZWQgYXMgd2VsbC5cbiAqL1xuY29uc3QgY2FjaGUgPSBuZXcgV2Vha01hcDxyZWFkb25seSBzdHJpbmdbXSwgcmVhZG9ubHkgc3RyaW5nW10+KClcblxuLyoqXG4gKiBGb3IgYSBwYXRobmFtZSB0aGF0IG1heSBpbmNsdWRlIGEgbG9jYWxlIGZyb20gYSBsaXN0IG9mIGxvY2FsZXMsIGl0XG4gKiByZW1vdmVzIHRoZSBsb2NhbGUgZnJvbSB0aGUgcGF0aG5hbWUgcmV0dXJuaW5nIGl0IGFsb25nc2lkZSB3aXRoIHRoZVxuICogZGV0ZWN0ZWQgbG9jYWxlLlxuICpcbiAqIEBwYXJhbSBwYXRobmFtZSBBIHBhdGhuYW1lIHRoYXQgbWF5IGluY2x1ZGUgYSBsb2NhbGUuXG4gKiBAcGFyYW0gbG9jYWxlcyBBIGxpc3Qgb2YgbG9jYWxlcy5cbiAqIEByZXR1cm5zIFRoZSBkZXRlY3RlZCBsb2NhbGUgYW5kIHBhdGhuYW1lIHdpdGhvdXQgbG9jYWxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVMb2NhbGVQYXRoKFxuICBwYXRobmFtZTogc3RyaW5nLFxuICBsb2NhbGVzPzogcmVhZG9ubHkgc3RyaW5nW11cbik6IFBhdGhMb2NhbGUge1xuICAvLyBJZiBsb2NhbGVzIGlzIHVuZGVmaW5lZCwgcmV0dXJuIHRoZSBwYXRobmFtZSBhcyBpcy5cbiAgaWYgKCFsb2NhbGVzKSByZXR1cm4geyBwYXRobmFtZSB9XG5cbiAgLy8gR2V0IHRoZSBjYWNoZWQgbG93ZXJjYXNlZCBsb2NhbGVzIG9yIGNyZWF0ZSBhIG5ldyBjYWNoZSBlbnRyeS5cbiAgbGV0IGxvd2VyY2FzZWRMb2NhbGVzID0gY2FjaGUuZ2V0KGxvY2FsZXMpXG4gIGlmICghbG93ZXJjYXNlZExvY2FsZXMpIHtcbiAgICBsb3dlcmNhc2VkTG9jYWxlcyA9IGxvY2FsZXMubWFwKChsb2NhbGUpID0+IGxvY2FsZS50b0xvd2VyQ2FzZSgpKVxuICAgIGNhY2hlLnNldChsb2NhbGVzLCBsb3dlcmNhc2VkTG9jYWxlcylcbiAgfVxuXG4gIGxldCBkZXRlY3RlZExvY2FsZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgLy8gVGhlIGZpcnN0IHNlZ21lbnQgd2lsbCBiZSBlbXB0eSwgYmVjYXVzZSBpdCBoYXMgYSBsZWFkaW5nIGAvYC4gSWZcbiAgLy8gdGhlcmUgaXMgbm8gZnVydGhlciBzZWdtZW50LCB0aGVyZSBpcyBubyBsb2NhbGUgKG9yIGl0J3MgdGhlIGRlZmF1bHQpLlxuICBjb25zdCBzZWdtZW50cyA9IHBhdGhuYW1lLnNwbGl0KCcvJywgMilcblxuICAvLyBJZiB0aGVyZSdzIG5vIHNlY29uZCBzZWdtZW50IChpZSwgdGhlIHBhdGhuYW1lIGlzIGp1c3QgYC9gKSwgdGhlcmUncyBub1xuICAvLyBsb2NhbGUuXG4gIGlmICghc2VnbWVudHNbMV0pIHJldHVybiB7IHBhdGhuYW1lIH1cblxuICAvLyBUaGUgc2Vjb25kIHNlZ21lbnQgd2lsbCBjb250YWluIHRoZSBsb2NhbGUgcGFydCBpZiBhbnkuXG4gIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1sxXS50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gU2VlIGlmIHRoZSBzZWdtZW50IG1hdGNoZXMgb25lIG9mIHRoZSBsb2NhbGVzLiBJZiBpdCBkb2Vzbid0LCB0aGVyZSBpc1xuICAvLyBubyBsb2NhbGUgKG9yIGl0J3MgdGhlIGRlZmF1bHQpLlxuICBjb25zdCBpbmRleCA9IGxvd2VyY2FzZWRMb2NhbGVzLmluZGV4T2Yoc2VnbWVudClcbiAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIHsgcGF0aG5hbWUgfVxuXG4gIC8vIFJldHVybiB0aGUgY2FzZS1zZW5zaXRpdmUgbG9jYWxlLlxuICBkZXRlY3RlZExvY2FsZSA9IGxvY2FsZXNbaW5kZXhdXG5cbiAgLy8gUmVtb3ZlIHRoZSBgLyR7bG9jYWxlfWAgcGFydCBvZiB0aGUgcGF0aG5hbWUuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUuc2xpY2UoZGV0ZWN0ZWRMb2NhbGUubGVuZ3RoICsgMSkgfHwgJy8nXG5cbiAgcmV0dXJuIHsgcGF0aG5hbWUsIGRldGVjdGVkTG9jYWxlIH1cbn1cbiJdLCJuYW1lcyI6WyJub3JtYWxpemVMb2NhbGVQYXRoIiwiY2FjaGUiLCJXZWFrTWFwIiwicGF0aG5hbWUiLCJsb2NhbGVzIiwibG93ZXJjYXNlZExvY2FsZXMiLCJnZXQiLCJtYXAiLCJsb2NhbGUiLCJ0b0xvd2VyQ2FzZSIsInNldCIsImRldGVjdGVkTG9jYWxlIiwic2VnbWVudHMiLCJzcGxpdCIsInNlZ21lbnQiLCJpbmRleCIsImluZGV4T2YiLCJzbGljZSIsImxlbmd0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js":
/*!*************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js ***!
\*************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ImageConfigContext\", ({\n enumerable: true,\n get: function() {\n return ImageConfigContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst _imageconfig = __webpack_require__(/*! ./image-config */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/image-config.js\");\nconst ImageConfigContext = _react.default.createContext(_imageconfig.imageConfigDefault);\nif (true) {\n ImageConfigContext.displayName = 'ImageConfigContext';\n} //# sourceMappingURL=image-config-context.shared-runtime.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1jb25maWctY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O3NEQUlhQTs7O2VBQUFBOzs7OzRFQUpLO3lDQUVpQjtBQUU1QixNQUFNQSxxQkFDWEMsT0FBQUEsT0FBSyxDQUFDQyxhQUFhLENBQXNCQyxhQUFBQSxrQkFBa0I7QUFFN0QsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNKLG1CQUFtQk8sV0FBVyxHQUFHO0FBQ25DIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9pbWFnZS1jb25maWctY29udGV4dC5zaGFyZWQtcnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEltYWdlQ29uZmlnQ29tcGxldGUgfSBmcm9tICcuL2ltYWdlLWNvbmZpZydcbmltcG9ydCB7IGltYWdlQ29uZmlnRGVmYXVsdCB9IGZyb20gJy4vaW1hZ2UtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgSW1hZ2VDb25maWdDb250ZXh0ID1cbiAgUmVhY3QuY3JlYXRlQ29udGV4dDxJbWFnZUNvbmZpZ0NvbXBsZXRlPihpbWFnZUNvbmZpZ0RlZmF1bHQpXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEltYWdlQ29uZmlnQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdJbWFnZUNvbmZpZ0NvbnRleHQnXG59XG4iXSwibmFtZXMiOlsiSW1hZ2VDb25maWdDb250ZXh0IiwiUmVhY3QiLCJjcmVhdGVDb250ZXh0IiwiaW1hZ2VDb25maWdEZWZhdWx0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/image-config.js":
/*!**************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/image-config.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 VALID_LOADERS: function() {\n return VALID_LOADERS;\n },\n imageConfigDefault: function() {\n return imageConfigDefault;\n }\n});\nconst VALID_LOADERS = [\n 'default',\n 'imgix',\n 'cloudinary',\n 'akamai',\n 'custom'\n];\nconst imageConfigDefault = {\n deviceSizes: [\n 640,\n 750,\n 828,\n 1080,\n 1200,\n 1920,\n 2048,\n 3840\n ],\n imageSizes: [\n 16,\n 32,\n 48,\n 64,\n 96,\n 128,\n 256,\n 384\n ],\n path: '/_next/image',\n loader: 'default',\n loaderFile: '',\n domains: [],\n disableStaticImages: false,\n minimumCacheTTL: 60,\n formats: [\n 'image/webp'\n ],\n dangerouslyAllowSVG: false,\n contentSecurityPolicy: \"script-src 'none'; frame-src 'none'; sandbox;\",\n contentDispositionType: 'attachment',\n localPatterns: undefined,\n remotePatterns: [],\n qualities: undefined,\n unoptimized: false\n}; //# sourceMappingURL=image-config.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1jb25maWcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQWFBLGFBQWE7ZUFBYkE7O0lBaUlBQyxrQkFBa0I7ZUFBbEJBOzs7QUFqSU4sTUFBTUQsZ0JBQWdCO0lBQzNCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQTJITSxNQUFNQyxxQkFBMEM7SUFDckRDLGFBQWE7UUFBQztRQUFLO1FBQUs7UUFBSztRQUFNO1FBQU07UUFBTTtRQUFNO0tBQUs7SUFDMURDLFlBQVk7UUFBQztRQUFJO1FBQUk7UUFBSTtRQUFJO1FBQUk7UUFBSztRQUFLO0tBQUk7SUFDL0NDLE1BQU07SUFDTkMsUUFBUTtJQUNSQyxZQUFZO0lBQ1pDLFNBQVMsRUFBRTtJQUNYQyxxQkFBcUI7SUFDckJDLGlCQUFpQjtJQUNqQkMsU0FBUztRQUFDO0tBQWE7SUFDdkJDLHFCQUFxQjtJQUNyQkMsdUJBQXdCO0lBQ3hCQyx3QkFBd0I7SUFDeEJDLGVBQWVDO0lBQ2ZDLGdCQUFnQixFQUFFO0lBQ2xCQyxXQUFXRjtJQUNYRyxhQUFhO0FBQ2YiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL3NyYy9zaGFyZWQvbGliL2ltYWdlLWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgVkFMSURfTE9BREVSUyA9IFtcbiAgJ2RlZmF1bHQnLFxuICAnaW1naXgnLFxuICAnY2xvdWRpbmFyeScsXG4gICdha2FtYWknLFxuICAnY3VzdG9tJyxcbl0gYXMgY29uc3RcblxuZXhwb3J0IHR5cGUgTG9hZGVyVmFsdWUgPSAodHlwZW9mIFZBTElEX0xPQURFUlMpW251bWJlcl1cblxuZXhwb3J0IHR5cGUgSW1hZ2VMb2FkZXJQcm9wcyA9IHtcbiAgc3JjOiBzdHJpbmdcbiAgd2lkdGg6IG51bWJlclxuICBxdWFsaXR5PzogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIEltYWdlTG9hZGVyUHJvcHNXaXRoQ29uZmlnID0gSW1hZ2VMb2FkZXJQcm9wcyAmIHtcbiAgY29uZmlnOiBSZWFkb25seTxJbWFnZUNvbmZpZz5cbn1cblxuZXhwb3J0IHR5cGUgTG9jYWxQYXR0ZXJuID0ge1xuICAvKipcbiAgICogQ2FuIGJlIGxpdGVyYWwgb3Igd2lsZGNhcmQuXG4gICAqIFNpbmdsZSBgKmAgbWF0Y2hlcyBhIHNpbmdsZSBwYXRoIHNlZ21lbnQuXG4gICAqIERvdWJsZSBgKipgIG1hdGNoZXMgYW55IG51bWJlciBvZiBwYXRoIHNlZ21lbnRzLlxuICAgKi9cbiAgcGF0aG5hbWU/OiBzdHJpbmdcblxuICAvKipcbiAgICogQ2FuIGJlIGxpdGVyYWwgcXVlcnkgc3RyaW5nIHN1Y2ggYXMgYD92PTFgIG9yXG4gICAqIGVtcHR5IHN0cmluZyBtZWFuaW5nIG5vIHF1ZXJ5IHN0cmluZy5cbiAgICovXG4gIHNlYXJjaD86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBSZW1vdGVQYXR0ZXJuID0ge1xuICAvKipcbiAgICogTXVzdCBiZSBgaHR0cGAgb3IgYGh0dHBzYC5cbiAgICovXG4gIHByb3RvY29sPzogJ2h0dHAnIHwgJ2h0dHBzJ1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgbGl0ZXJhbCBvciB3aWxkY2FyZC5cbiAgICogU2luZ2xlIGAqYCBtYXRjaGVzIGEgc2luZ2xlIHN1YmRvbWFpbi5cbiAgICogRG91YmxlIGAqKmAgbWF0Y2hlcyBhbnkgbnVtYmVyIG9mIHN1YmRvbWFpbnMuXG4gICAqL1xuICBob3N0bmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIENhbiBiZSBsaXRlcmFsIHBvcnQgc3VjaCBhcyBgODA4MGAgb3IgZW1wdHkgc3RyaW5nXG4gICAqIG1lYW5pbmcgbm8gcG9ydC5cbiAgICovXG4gIHBvcnQ/OiBzdHJpbmdcblxuICAvKipcbiAgICogQ2FuIGJlIGxpdGVyYWwgb3Igd2lsZGNhcmQuXG4gICAqIFNpbmdsZSBgKmAgbWF0Y2hlcyBhIHNpbmdsZSBwYXRoIHNlZ21lbnQuXG4gICAqIERvdWJsZSBgKipgIG1hdGNoZXMgYW55IG51bWJlciBvZiBwYXRoIHNlZ21lbnRzLlxuICAgKi9cbiAgcGF0aG5hbWU/OiBzdHJpbmdcblxuICAvKipcbiAgICogQ2FuIGJlIGxpdGVyYWwgcXVlcnkgc3RyaW5nIHN1Y2ggYXMgYD92PTFgIG9yXG4gICAqIGVtcHR5IHN0cmluZyBtZWFuaW5nIG5vIHF1ZXJ5IHN0cmluZy5cbiAgICovXG4gIHNlYXJjaD86IHN0cmluZ1xufVxuXG50eXBlIEltYWdlRm9ybWF0ID0gJ2ltYWdlL2F2aWYnIHwgJ2ltYWdlL3dlYnAnXG5cbi8qKlxuICogSW1hZ2UgY29uZmlndXJhdGlvbnNcbiAqXG4gKiBAc2VlIFtJbWFnZSBjb25maWd1cmF0aW9uIG9wdGlvbnNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNjb25maWd1cmF0aW9uLW9wdGlvbnMpXG4gKi9cbmV4cG9ydCB0eXBlIEltYWdlQ29uZmlnQ29tcGxldGUgPSB7XG4gIC8qKiBAc2VlIFtEZXZpY2Ugc2l6ZXMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI2RldmljZS1zaXplcykgKi9cbiAgZGV2aWNlU2l6ZXM6IG51bWJlcltdXG5cbiAgLyoqIEBzZWUgW0ltYWdlIHNpemluZyBkb2N1bWVudGF0aW9uXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9vcHRpbWl6aW5nL2ltYWdlcyNpbWFnZS1zaXppbmcpICovXG4gIGltYWdlU2l6ZXM6IG51bWJlcltdXG5cbiAgLyoqIEBzZWUgW0ltYWdlIGxvYWRlcnMgY29uZmlndXJhdGlvbl0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2xlZ2FjeS9pbWFnZSNsb2FkZXIpICovXG4gIGxvYWRlcjogTG9hZGVyVmFsdWVcblxuICAvKiogQHNlZSBbSW1hZ2UgbG9hZGVyIGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2NvbXBvbmVudHMvaW1hZ2UjcGF0aCkgKi9cbiAgcGF0aDogc3RyaW5nXG5cbiAgLyoqIEBzZWUgW0ltYWdlIGxvYWRlciBjb25maWd1cmF0aW9uXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjbG9hZGVyLWNvbmZpZ3VyYXRpb24pICovXG4gIGxvYWRlckZpbGU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHJlbW90ZVBhdHRlcm5zYCBpbnN0ZWFkLlxuICAgKi9cbiAgZG9tYWluczogc3RyaW5nW11cblxuICAvKiogQHNlZSBbRGlzYWJsZSBzdGF0aWMgaW1hZ2UgaW1wb3J0IGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNkaXNhYmxlLXN0YXRpYy1pbXBvcnRzKSAqL1xuICBkaXNhYmxlU3RhdGljSW1hZ2VzOiBib29sZWFuXG5cbiAgLyoqIEBzZWUgW0NhY2hlIGJlaGF2aW9yXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjY2FjaGluZy1iZWhhdmlvcikgKi9cbiAgbWluaW11bUNhY2hlVFRMOiBudW1iZXJcblxuICAvKiogQHNlZSBbQWNjZXB0YWJsZSBmb3JtYXRzXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjYWNjZXB0YWJsZS1mb3JtYXRzKSAqL1xuICBmb3JtYXRzOiBJbWFnZUZvcm1hdFtdXG5cbiAgLyoqIEBzZWUgW0Rhbmdlcm91c2x5IEFsbG93IFNWR10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI2Rhbmdlcm91c2x5LWFsbG93LXN2ZykgKi9cbiAgZGFuZ2Vyb3VzbHlBbGxvd1NWRzogYm9vbGVhblxuXG4gIC8qKiBAc2VlIFtDb250ZW50IFNlY3VyaXR5IFBvbGljeV0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI2NvbnRlbnRzZWN1cml0eXBvbGljeSkgKi9cbiAgY29udGVudFNlY3VyaXR5UG9saWN5OiBzdHJpbmdcblxuICAvKiogQHNlZSBbQ29udGVudCBEaXNwb3NpdGlvbiBUeXBlXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjY29udGVudGRpc3Bvc2l0aW9udHlwZSkgKi9cbiAgY29udGVudERpc3Bvc2l0aW9uVHlwZTogJ2lubGluZScgfCAnYXR0YWNobWVudCdcblxuICAvKiogQHNlZSBbUmVtb3RlIFBhdHRlcm5zXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjcmVtb3RlcGF0dGVybnMpICovXG4gIHJlbW90ZVBhdHRlcm5zOiBBcnJheTxVUkwgfCBSZW1vdGVQYXR0ZXJuPlxuXG4gIC8qKiBAc2VlIFtMb2NhbCBQYXR0ZXJuc10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI2xvY2FsUGF0dGVybnMpICovXG4gIGxvY2FsUGF0dGVybnM6IExvY2FsUGF0dGVybltdIHwgdW5kZWZpbmVkXG5cbiAgLyoqIEBzZWUgW1F1YWxpdGllc10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI3F1YWxpdGllcykgKi9cbiAgcXVhbGl0aWVzOiBudW1iZXJbXSB8IHVuZGVmaW5lZFxuXG4gIC8qKiBAc2VlIFtVbm9wdGltaXplZF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI3Vub3B0aW1pemVkKSAqL1xuICB1bm9wdGltaXplZDogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBJbWFnZUNvbmZpZyA9IFBhcnRpYWw8SW1hZ2VDb25maWdDb21wbGV0ZT5cblxuZXhwb3J0IGNvbnN0IGltYWdlQ29uZmlnRGVmYXVsdDogSW1hZ2VDb25maWdDb21wbGV0ZSA9IHtcbiAgZGV2aWNlU2l6ZXM6IFs2NDAsIDc1MCwgODI4LCAxMDgwLCAxMjAwLCAxOTIwLCAyMDQ4LCAzODQwXSxcbiAgaW1hZ2VTaXplczogWzE2LCAzMiwgNDgsIDY0LCA5NiwgMTI4LCAyNTYsIDM4NF0sXG4gIHBhdGg6ICcvX25leHQvaW1hZ2UnLFxuICBsb2FkZXI6ICdkZWZhdWx0JyxcbiAgbG9hZGVyRmlsZTogJycsXG4gIGRvbWFpbnM6IFtdLFxuICBkaXNhYmxlU3RhdGljSW1hZ2VzOiBmYWxzZSxcbiAgbWluaW11bUNhY2hlVFRMOiA2MCxcbiAgZm9ybWF0czogWydpbWFnZS93ZWJwJ10sXG4gIGRhbmdlcm91c2x5QWxsb3dTVkc6IGZhbHNlLFxuICBjb250ZW50U2VjdXJpdHlQb2xpY3k6IGBzY3JpcHQtc3JjICdub25lJzsgZnJhbWUtc3JjICdub25lJzsgc2FuZGJveDtgLFxuICBjb250ZW50RGlzcG9zaXRpb25UeXBlOiAnYXR0YWNobWVudCcsXG4gIGxvY2FsUGF0dGVybnM6IHVuZGVmaW5lZCwgLy8gZGVmYXVsdDogYWxsb3cgYWxsIGxvY2FsIGltYWdlc1xuICByZW1vdGVQYXR0ZXJuczogW10sIC8vIGRlZmF1bHQ6IGFsbG93IG5vIHJlbW90ZSBpbWFnZXNcbiAgcXVhbGl0aWVzOiB1bmRlZmluZWQsIC8vIGRlZmF1bHQ6IGFsbG93IGFsbCBxdWFsaXRpZXNcbiAgdW5vcHRpbWl6ZWQ6IGZhbHNlLFxufVxuIl0sIm5hbWVzIjpbIlZBTElEX0xPQURFUlMiLCJpbWFnZUNvbmZpZ0RlZmF1bHQiLCJkZXZpY2VTaXplcyIsImltYWdlU2l6ZXMiLCJwYXRoIiwibG9hZGVyIiwibG9hZGVyRmlsZSIsImRvbWFpbnMiLCJkaXNhYmxlU3RhdGljSW1hZ2VzIiwibWluaW11bUNhY2hlVFRMIiwiZm9ybWF0cyIsImRhbmdlcm91c2x5QWxsb3dTVkciLCJjb250ZW50U2VjdXJpdHlQb2xpY3kiLCJjb250ZW50RGlzcG9zaXRpb25UeXBlIiwibG9jYWxQYXR0ZXJucyIsInVuZGVmaW5lZCIsInJlbW90ZVBhdHRlcm5zIiwicXVhbGl0aWVzIiwidW5vcHRpbWl6ZWQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/image-config.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/is-plain-object.js":
/*!*****************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/is-plain-object.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 getObjectClassLabel: function() {\n return getObjectClassLabel;\n },\n isPlainObject: function() {\n return isPlainObject;\n }\n});\nfunction getObjectClassLabel(value) {\n return Object.prototype.toString.call(value);\n}\nfunction isPlainObject(value) {\n if (getObjectClassLabel(value) !== '[object Object]') {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n /**\n * this used to be previously:\n *\n * `return prototype === null || prototype === Object.prototype`\n *\n * but Edge Runtime expose Object from vm, being that kind of type-checking wrongly fail.\n *\n * It was changed to the current implementation since it's resilient to serialization.\n */ return prototype === null || prototype.hasOwnProperty('isPrototypeOf');\n} //# sourceMappingURL=is-plain-object.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pcy1wbGFpbi1vYmplY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQWdCQSxtQkFBbUI7ZUFBbkJBOztJQUlBQyxhQUFhO2VBQWJBOzs7QUFKVCxTQUFTRCxvQkFBb0JFLEtBQVU7SUFDNUMsT0FBT0MsT0FBT0MsU0FBUyxDQUFDQyxRQUFRLENBQUNDLElBQUksQ0FBQ0o7QUFDeEM7QUFFTyxTQUFTRCxjQUFjQyxLQUFVO0lBQ3RDLElBQUlGLG9CQUFvQkUsV0FBVyxtQkFBbUI7UUFDcEQsT0FBTztJQUNUO0lBRUEsTUFBTUUsWUFBWUQsT0FBT0ksY0FBYyxDQUFDTDtJQUV4Qzs7Ozs7Ozs7R0FRQyxHQUNELE9BQU9FLGNBQWMsUUFBUUEsVUFBVUksY0FBYyxDQUFDO0FBQ3hEIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9pcy1wbGFpbi1vYmplY3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGdldE9iamVjdENsYXNzTGFiZWwodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKGdldE9iamVjdENsYXNzTGFiZWwodmFsdWUpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxuXG4gIC8qKlxuICAgKiB0aGlzIHVzZWQgdG8gYmUgcHJldmlvdXNseTpcbiAgICpcbiAgICogYHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlYFxuICAgKlxuICAgKiBidXQgRWRnZSBSdW50aW1lIGV4cG9zZSBPYmplY3QgZnJvbSB2bSwgYmVpbmcgdGhhdCBraW5kIG9mIHR5cGUtY2hlY2tpbmcgd3JvbmdseSBmYWlsLlxuICAgKlxuICAgKiBJdCB3YXMgY2hhbmdlZCB0byB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBzaW5jZSBpdCdzIHJlc2lsaWVudCB0byBzZXJpYWxpemF0aW9uLlxuICAgKi9cbiAgcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUuaGFzT3duUHJvcGVydHkoJ2lzUHJvdG90eXBlT2YnKVxufVxuIl0sIm5hbWVzIjpbImdldE9iamVjdENsYXNzTGFiZWwiLCJpc1BsYWluT2JqZWN0IiwidmFsdWUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJnZXRQcm90b3R5cGVPZiIsImhhc093blByb3BlcnR5Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/is-plain-object.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js":
/*!*****************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js ***!
\*****************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// This has to be a shared module which is shared between client component error boundary and dynamic component\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 BailoutToCSRError: function() {\n return BailoutToCSRError;\n },\n isBailoutToCSRError: function() {\n return isBailoutToCSRError;\n }\n});\nconst BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING';\nclass BailoutToCSRError extends Error {\n constructor(reason){\n super(\"Bail out to client-side rendering: \" + reason), this.reason = reason, this.digest = BAILOUT_TO_CSR;\n }\n}\nfunction isBailoutToCSRError(err) {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false;\n }\n return err.digest === BAILOUT_TO_CSR;\n} //# sourceMappingURL=bailout-to-csr.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9sYXp5LWR5bmFtaWMvYmFpbG91dC10by1jc3IuanMiLCJtYXBwaW5ncyI6IkFBQUEsK0dBQStHOzs7Ozs7Ozs7Ozs7O0lBSWxHQSxpQkFBaUI7ZUFBakJBOztJQVNHQyxtQkFBbUI7ZUFBbkJBOzs7QUFaaEIsTUFBTUMsaUJBQWlCO0FBR2hCLE1BQU1GLDBCQUEwQkc7SUFHckNDLFlBQTRCQyxNQUFjLENBQUU7UUFDMUMsS0FBSyxDQUFFLHdDQUFxQ0EsU0FBQUEsSUFBQUEsQ0FEbEJBLE1BQUFBLEdBQUFBLFFBQUFBLElBQUFBLENBRlpDLE1BQUFBLEdBQVNKO0lBSXpCO0FBQ0Y7QUFHTyxTQUFTRCxvQkFBb0JNLEdBQVk7SUFDOUMsSUFBSSxPQUFPQSxRQUFRLFlBQVlBLFFBQVEsUUFBUSxDQUFFLGFBQVlBLEdBQUFBLENBQUUsRUFBSTtRQUNqRSxPQUFPO0lBQ1Q7SUFFQSxPQUFPQSxJQUFJRCxNQUFNLEtBQUtKO0FBQ3hCIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi9sYXp5LWR5bmFtaWMvYmFpbG91dC10by1jc3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBoYXMgdG8gYmUgYSBzaGFyZWQgbW9kdWxlIHdoaWNoIGlzIHNoYXJlZCBiZXR3ZWVuIGNsaWVudCBjb21wb25lbnQgZXJyb3IgYm91bmRhcnkgYW5kIGR5bmFtaWMgY29tcG9uZW50XG5jb25zdCBCQUlMT1VUX1RPX0NTUiA9ICdCQUlMT1VUX1RPX0NMSUVOVF9TSURFX1JFTkRFUklORydcblxuLyoqIEFuIGVycm9yIHRoYXQgc2hvdWxkIGJlIHRocm93biB3aGVuIHdlIHdhbnQgdG8gYmFpbCBvdXQgdG8gY2xpZW50LXNpZGUgcmVuZGVyaW5nLiAqL1xuZXhwb3J0IGNsYXNzIEJhaWxvdXRUb0NTUkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgZGlnZXN0ID0gQkFJTE9VVF9UT19DU1JcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgQmFpbCBvdXQgdG8gY2xpZW50LXNpZGUgcmVuZGVyaW5nOiAke3JlYXNvbn1gKVxuICB9XG59XG5cbi8qKiBDaGVja3MgaWYgYSBwYXNzZWQgYXJndW1lbnQgaXMgYW4gZXJyb3IgdGhhdCBpcyB0aHJvd24gaWYgd2Ugd2FudCB0byBiYWlsIG91dCB0byBjbGllbnQtc2lkZSByZW5kZXJpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCYWlsb3V0VG9DU1JFcnJvcihlcnI6IHVua25vd24pOiBlcnIgaXMgQmFpbG91dFRvQ1NSRXJyb3Ige1xuICBpZiAodHlwZW9mIGVyciAhPT0gJ29iamVjdCcgfHwgZXJyID09PSBudWxsIHx8ICEoJ2RpZ2VzdCcgaW4gZXJyKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGVyci5kaWdlc3QgPT09IEJBSUxPVVRfVE9fQ1NSXG59XG4iXSwibmFtZXMiOlsiQmFpbG91dFRvQ1NSRXJyb3IiLCJpc0JhaWxvdXRUb0NTUkVycm9yIiwiQkFJTE9VVF9UT19DU1IiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwicmVhc29uIiwiZGlnZXN0IiwiZXJyIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/mitt.js":
/*!******************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/mitt.js ***!
\******************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/*\nMIT License\n\nCopyright (c) Jason Miller (https://jasonformat.com/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to 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 of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/ // This file is based on https://github.com/developit/mitt/blob/v1.1.3/src/index.js\n// It's been edited for the needs of this script\n// See the LICENSE at the top of the file\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return mitt;\n }\n}));\nfunction mitt() {\n const all = Object.create(null);\n return {\n on (type, handler) {\n ;\n (all[type] || (all[type] = [])).push(handler);\n },\n off (type, handler) {\n if (all[type]) {\n all[type].splice(all[type].indexOf(handler) >>> 0, 1);\n }\n },\n emit (type) {\n for(var _len = arguments.length, evts = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n evts[_key - 1] = arguments[_key];\n }\n // eslint-disable-next-line array-callback-return\n ;\n (all[type] || []).slice().map((handler)=>{\n handler(...evts);\n });\n }\n };\n} //# sourceMappingURL=mitt.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9taXR0LmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0FBVUEsR0FFQSxtRkFBbUY7QUFDbkYsZ0RBQWdEO0FBQ2hELHlDQUF5Qzs7Ozs7MkNBVXpDOzs7ZUFBd0JBOzs7QUFBVCxTQUFTQTtJQUN0QixNQUFNQyxNQUFrQ0MsT0FBT0MsTUFBTSxDQUFDO0lBRXRELE9BQU87UUFDTEMsSUFBR0MsSUFBWSxFQUFFQyxPQUFnQjs7WUFDN0JMLElBQUcsQ0FBQ0ksS0FBSyxJQUFLSixDQUFBQSxHQUFHLENBQUNJLEtBQUssR0FBRyxHQUFDLENBQUMsQ0FBR0UsSUFBSSxDQUFDRDtRQUN4QztRQUVBRSxLQUFJSCxJQUFZLEVBQUVDLE9BQWdCO1lBQ2hDLElBQUlMLEdBQUcsQ0FBQ0ksS0FBSyxFQUFFO2dCQUNiSixHQUFHLENBQUNJLEtBQUssQ0FBQ0ksTUFBTSxDQUFDUixHQUFHLENBQUNJLEtBQUssQ0FBQ0ssT0FBTyxDQUFDSixhQUFhLEdBQUc7WUFDckQ7UUFDRjtRQUVBSyxNQUFLTixJQUFZO1lBQUUsaUNBQUdPLE9BQUg7Z0JBQUdBLElBQUFBLENBQUgsMkJBQWM7O1lBQy9CLGlEQUFpRDs7YUFDL0NYLEdBQUcsQ0FBQ0ksS0FBSyxJQUFJLElBQUlRLEtBQUssR0FBR0MsR0FBRyxDQUFDLENBQUNSO2dCQUM5QkEsV0FBV007WUFDYjtRQUNGO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvc3JjL3NoYXJlZC9saWIvbWl0dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSBKYXNvbiBNaWxsZXIgKGh0dHBzOi8vamFzb25mb3JtYXQuY29tLylcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cblxuLy8gVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZlbG9waXQvbWl0dC9ibG9iL3YxLjEuMy9zcmMvaW5kZXguanNcbi8vIEl0J3MgYmVlbiBlZGl0ZWQgZm9yIHRoZSBuZWVkcyBvZiB0aGlzIHNjcmlwdFxuLy8gU2VlIHRoZSBMSUNFTlNFIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGVcblxudHlwZSBIYW5kbGVyID0gKC4uLmV2dHM6IGFueVtdKSA9PiB2b2lkXG5cbmV4cG9ydCB0eXBlIE1pdHRFbWl0dGVyPFQ+ID0ge1xuICBvbih0eXBlOiBULCBoYW5kbGVyOiBIYW5kbGVyKTogdm9pZFxuICBvZmYodHlwZTogVCwgaGFuZGxlcjogSGFuZGxlcik6IHZvaWRcbiAgZW1pdCh0eXBlOiBULCAuLi5ldnRzOiBhbnlbXSk6IHZvaWRcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWl0dCgpOiBNaXR0RW1pdHRlcjxzdHJpbmc+IHtcbiAgY29uc3QgYWxsOiB7IFtzOiBzdHJpbmddOiBIYW5kbGVyW10gfSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICByZXR1cm4ge1xuICAgIG9uKHR5cGU6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcikge1xuICAgICAgOyhhbGxbdHlwZV0gfHwgKGFsbFt0eXBlXSA9IFtdKSkucHVzaChoYW5kbGVyKVxuICAgIH0sXG5cbiAgICBvZmYodHlwZTogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyKSB7XG4gICAgICBpZiAoYWxsW3R5cGVdKSB7XG4gICAgICAgIGFsbFt0eXBlXS5zcGxpY2UoYWxsW3R5cGVdLmluZGV4T2YoaGFuZGxlcikgPj4+IDAsIDEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXQodHlwZTogc3RyaW5nLCAuLi5ldnRzOiBhbnlbXSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFycmF5LWNhbGxiYWNrLXJldHVyblxuICAgICAgOyhhbGxbdHlwZV0gfHwgW10pLnNsaWNlKCkubWFwKChoYW5kbGVyOiBIYW5kbGVyKSA9PiB7XG4gICAgICAgIGhhbmRsZXIoLi4uZXZ0cylcbiAgICAgIH0pXG4gICAgfSxcbiAgfVxufVxuIl0sIm5hbWVzIjpbIm1pdHQiLCJhbGwiLCJPYmplY3QiLCJjcmVhdGUiLCJvbiIsInR5cGUiLCJoYW5kbGVyIiwicHVzaCIsIm9mZiIsInNwbGljZSIsImluZGV4T2YiLCJlbWl0IiwiZXZ0cyIsInNsaWNlIiwibWFwIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/mitt.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/modern-browserslist-target.js":
/*!****************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/modern-browserslist-target.js ***!
\****************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// Note: This file is JS because it's used by the taskfile-swc.js file, which is JS.\n// Keep file changes in sync with the corresponding `.d.ts` files.\n/**\n * These are the browser versions that support all of the following:\n * static import: https://caniuse.com/es6-module\n * dynamic import: https://caniuse.com/es6-module-dynamic-import\n * import.meta: https://caniuse.com/mdn-javascript_operators_import_meta\n */ \nconst MODERN_BROWSERSLIST_TARGET = [\n 'chrome 64',\n 'edge 79',\n 'firefox 67',\n 'opera 51',\n 'safari 12'\n];\nmodule.exports = MODERN_BROWSERSLIST_TARGET; //# sourceMappingURL=modern-browserslist-target.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9tb2Rlcm4tYnJvd3NlcnNsaXN0LXRhcmdldC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxvRkFBb0Y7QUFDcEYsa0VBQWtFO0FBQ2xFOzs7OztDQUtDO0FBQ0QsTUFBTUEsNkJBQTZCO0lBQ2pDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUVEQyxPQUFPQyxPQUFPLEdBQUdGIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9tb2Rlcm4tYnJvd3NlcnNsaXN0LXRhcmdldC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBOb3RlOiBUaGlzIGZpbGUgaXMgSlMgYmVjYXVzZSBpdCdzIHVzZWQgYnkgdGhlIHRhc2tmaWxlLXN3Yy5qcyBmaWxlLCB3aGljaCBpcyBKUy5cbi8vIEtlZXAgZmlsZSBjaGFuZ2VzIGluIHN5bmMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBgLmQudHNgIGZpbGVzLlxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIGJyb3dzZXIgdmVyc2lvbnMgdGhhdCBzdXBwb3J0IGFsbCBvZiB0aGUgZm9sbG93aW5nOlxuICogc3RhdGljIGltcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS9lczYtbW9kdWxlXG4gKiBkeW5hbWljIGltcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS9lczYtbW9kdWxlLWR5bmFtaWMtaW1wb3J0XG4gKiBpbXBvcnQubWV0YTogaHR0cHM6Ly9jYW5pdXNlLmNvbS9tZG4tamF2YXNjcmlwdF9vcGVyYXRvcnNfaW1wb3J0X21ldGFcbiAqL1xuY29uc3QgTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQgPSBbXG4gICdjaHJvbWUgNjQnLFxuICAnZWRnZSA3OScsXG4gICdmaXJlZm94IDY3JyxcbiAgJ29wZXJhIDUxJyxcbiAgJ3NhZmFyaSAxMicsXG5dXG5cbm1vZHVsZS5leHBvcnRzID0gTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVRcbiJdLCJuYW1lcyI6WyJNT0RFUk5fQlJPV1NFUlNMSVNUX1RBUkdFVCIsIm1vZHVsZSIsImV4cG9ydHMiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/modern-browserslist-target.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/normalized-asset-prefix.js":
/*!*************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/normalized-asset-prefix.js ***!
\*************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizedAssetPrefix\", ({\n enumerable: true,\n get: function() {\n return normalizedAssetPrefix;\n }\n}));\nfunction normalizedAssetPrefix(assetPrefix) {\n // remove all leading slashes and trailing slashes\n const escapedAssetPrefix = (assetPrefix == null ? void 0 : assetPrefix.replace(/^\\/+|\\/+$/g, '')) || false;\n // if an assetPrefix was '/', we return empty string\n // because it could be an unnecessary trailing slash\n if (!escapedAssetPrefix) {\n return '';\n }\n if (URL.canParse(escapedAssetPrefix)) {\n const url = new URL(escapedAssetPrefix).toString();\n return url.endsWith('/') ? url.slice(0, -1) : url;\n }\n // assuming assetPrefix here is a pathname-style,\n // restore the leading slash\n return \"/\" + escapedAssetPrefix;\n} //# sourceMappingURL=normalized-asset-prefix.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9ub3JtYWxpemVkLWFzc2V0LXByZWZpeC5qcyIsIm1hcHBpbmdzIjoiOzs7O3lEQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0Esc0JBQXNCQyxXQUErQjtJQUNuRSxrREFBa0Q7SUFDbEQsTUFBTUMscUJBQXFCRCxDQUFBQSxlQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxZQUFhRSxPQUFPLENBQUMsY0FBYyxRQUFPO0lBRXJFLG9EQUFvRDtJQUNwRCxvREFBb0Q7SUFDcEQsSUFBSSxDQUFDRCxvQkFBb0I7UUFDdkIsT0FBTztJQUNUO0lBRUEsSUFBSUUsSUFBSUMsUUFBUSxDQUFDSCxxQkFBcUI7UUFDcEMsTUFBTUksTUFBTSxJQUFJRixJQUFJRixvQkFBb0JLLFFBQVE7UUFDaEQsT0FBT0QsSUFBSUUsUUFBUSxDQUFDLE9BQU9GLElBQUlHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBS0g7SUFDaEQ7SUFFQSxpREFBaUQ7SUFDakQsNEJBQTRCO0lBQzVCLE9BQVEsTUFBR0o7QUFDYiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvc3JjL3NoYXJlZC9saWIvbm9ybWFsaXplZC1hc3NldC1wcmVmaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZWRBc3NldFByZWZpeChhc3NldFByZWZpeDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgLy8gcmVtb3ZlIGFsbCBsZWFkaW5nIHNsYXNoZXMgYW5kIHRyYWlsaW5nIHNsYXNoZXNcbiAgY29uc3QgZXNjYXBlZEFzc2V0UHJlZml4ID0gYXNzZXRQcmVmaXg/LnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSB8fCBmYWxzZVxuXG4gIC8vIGlmIGFuIGFzc2V0UHJlZml4IHdhcyAnLycsIHdlIHJldHVybiBlbXB0eSBzdHJpbmdcbiAgLy8gYmVjYXVzZSBpdCBjb3VsZCBiZSBhbiB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaFxuICBpZiAoIWVzY2FwZWRBc3NldFByZWZpeCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKFVSTC5jYW5QYXJzZShlc2NhcGVkQXNzZXRQcmVmaXgpKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChlc2NhcGVkQXNzZXRQcmVmaXgpLnRvU3RyaW5nKClcbiAgICByZXR1cm4gdXJsLmVuZHNXaXRoKCcvJykgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsXG4gIH1cblxuICAvLyBhc3N1bWluZyBhc3NldFByZWZpeCBoZXJlIGlzIGEgcGF0aG5hbWUtc3R5bGUsXG4gIC8vIHJlc3RvcmUgdGhlIGxlYWRpbmcgc2xhc2hcbiAgcmV0dXJuIGAvJHtlc2NhcGVkQXNzZXRQcmVmaXh9YFxufVxuIl0sIm5hbWVzIjpbIm5vcm1hbGl6ZWRBc3NldFByZWZpeCIsImFzc2V0UHJlZml4IiwiZXNjYXBlZEFzc2V0UHJlZml4IiwicmVwbGFjZSIsIlVSTCIsImNhblBhcnNlIiwidXJsIiwidG9TdHJpbmciLCJlbmRzV2l0aCIsInNsaWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/normalized-asset-prefix.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js":
/*!*********************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js ***!
\*********************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"denormalizePagePath\", ({\n enumerable: true,\n get: function() {\n return denormalizePagePath;\n }\n}));\nconst _utils = __webpack_require__(/*! ../router/utils */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _normalizepathsep = __webpack_require__(/*! ./normalize-path-sep */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\");\nfunction denormalizePagePath(page) {\n let _page = (0, _normalizepathsep.normalizePathSep)(page);\n return _page.startsWith('/index/') && !(0, _utils.isDynamicRoute)(_page) ? _page.slice(6) : _page !== '/index' ? _page : '/';\n} //# sourceMappingURL=denormalize-page-path.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9wYWdlLXBhdGgvZGVub3JtYWxpemUtcGFnZS1wYXRoLmpzIiwibWFwcGluZ3MiOiI7Ozs7dURBV2dCQTs7O2VBQUFBOzs7bUNBWGU7OENBQ0U7QUFVMUIsU0FBU0Esb0JBQW9CQyxJQUFZO0lBQzlDLElBQUlDLFFBQVFDLENBQUFBLEdBQUFBLGtCQUFBQSxnQkFBQUEsRUFBaUJGO0lBQzdCLE9BQU9DLE1BQU1FLFVBQVUsQ0FBQyxjQUFjLENBQUNDLENBQUFBLEdBQUFBLE9BQUFBLGNBQUFBLEVBQWVILFNBQ2xEQSxNQUFNSSxLQUFLLENBQUMsS0FDWkosVUFBVSxXQUNSQSxRQUNBO0FBQ1IiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9zaGFyZWQvbGliL3BhZ2UtcGF0aC9kZW5vcm1hbGl6ZS1wYWdlLXBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEeW5hbWljUm91dGUgfSBmcm9tICcuLi9yb3V0ZXIvdXRpbHMnXG5pbXBvcnQgeyBub3JtYWxpemVQYXRoU2VwIH0gZnJvbSAnLi9ub3JtYWxpemUtcGF0aC1zZXAnXG5cbi8qKlxuICogUGVyZm9ybXMgdGhlIG9wcG9zaXRlIHRyYW5zZm9ybWF0aW9uIG9mIGBub3JtYWxpemVQYWdlUGF0aGAuIE5vdGUgdGhhdFxuICogdGhpcyBmdW5jdGlvbiBpcyBub3QgaWRlbXBvdGVudCBlaXRoZXIgaW4gY2FzZXMgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlXG4gKiBsZWFkaW5nIGAvaW5kZXhgIGZvciB0aGUgcGFnZS4gRXhhbXBsZXM6XG4gKiAgLSBgL2luZGV4YCAtPiBgL2BcbiAqICAtIGAvaW5kZXgvZm9vYCAtPiBgL2Zvb2BcbiAqICAtIGAvaW5kZXgvaW5kZXhgIC0+IGAvaW5kZXhgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZW5vcm1hbGl6ZVBhZ2VQYXRoKHBhZ2U6IHN0cmluZykge1xuICBsZXQgX3BhZ2UgPSBub3JtYWxpemVQYXRoU2VwKHBhZ2UpXG4gIHJldHVybiBfcGFnZS5zdGFydHNXaXRoKCcvaW5kZXgvJykgJiYgIWlzRHluYW1pY1JvdXRlKF9wYWdlKVxuICAgID8gX3BhZ2Uuc2xpY2UoNilcbiAgICA6IF9wYWdlICE9PSAnL2luZGV4J1xuICAgICAgPyBfcGFnZVxuICAgICAgOiAnLydcbn1cbiJdLCJuYW1lcyI6WyJkZW5vcm1hbGl6ZVBhZ2VQYXRoIiwicGFnZSIsIl9wYWdlIiwibm9ybWFsaXplUGF0aFNlcCIsInN0YXJ0c1dpdGgiLCJpc0R5bmFtaWNSb3V0ZSIsInNsaWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js":
/*!********************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js ***!
\********************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ensureLeadingSlash\", ({\n enumerable: true,\n get: function() {\n return ensureLeadingSlash;\n }\n}));\nfunction ensureLeadingSlash(path) {\n return path.startsWith('/') ? path : \"/\" + path;\n} //# sourceMappingURL=ensure-leading-slash.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9wYWdlLXBhdGgvZW5zdXJlLWxlYWRpbmctc2xhc2guanMiLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDOzs7O3NEQUNlQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxtQkFBbUJDLElBQVk7SUFDN0MsT0FBT0EsS0FBS0MsVUFBVSxDQUFDLE9BQU9ELE9BQVEsTUFBR0E7QUFDM0MiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9zaGFyZWQvbGliL3BhZ2UtcGF0aC9lbnN1cmUtbGVhZGluZy1zbGFzaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvciBhIGdpdmVuIHBhZ2UgcGF0aCwgdGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlcmUgaXMgYSBsZWFkaW5nIHNsYXNoLlxuICogSWYgdGhlcmUgaXMgbm90IGEgbGVhZGluZyBzbGFzaCwgb25lIGlzIGFkZGVkLCBvdGhlcndpc2UgaXQgaXMgbm9vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUxlYWRpbmdTbGFzaChwYXRoOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aCgnLycpID8gcGF0aCA6IGAvJHtwYXRofWBcbn1cbiJdLCJuYW1lcyI6WyJlbnN1cmVMZWFkaW5nU2xhc2giLCJwYXRoIiwic3RhcnRzV2l0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js":
/*!******************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js ***!
\******************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/**\n * For a given page path, this function ensures that there is no backslash\n * escaping slashes in the path. Example:\n * - `foo\\/bar\\/baz` -> `foo/bar/baz`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathSep\", ({\n enumerable: true,\n get: function() {\n return normalizePathSep;\n }\n}));\nfunction normalizePathSep(path) {\n return path.replace(/\\\\/g, '/');\n} //# sourceMappingURL=normalize-path-sep.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9wYWdlLXBhdGgvbm9ybWFsaXplLXBhdGgtc2VwLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7O0NBSUM7Ozs7b0RBQ2VBOzs7ZUFBQUE7OztBQUFULFNBQVNBLGlCQUFpQkMsSUFBWTtJQUMzQyxPQUFPQSxLQUFLQyxPQUFPLENBQUMsT0FBTztBQUM3QiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL3NoYXJlZC9saWIvcGFnZS1wYXRoL25vcm1hbGl6ZS1wYXRoLXNlcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvciBhIGdpdmVuIHBhZ2UgcGF0aCwgdGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlcmUgaXMgbm8gYmFja3NsYXNoXG4gKiBlc2NhcGluZyBzbGFzaGVzIGluIHRoZSBwYXRoLiBFeGFtcGxlOlxuICogIC0gYGZvb1xcL2JhclxcL2JhemAgLT4gYGZvby9iYXIvYmF6YFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUGF0aFNlcChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJylcbn1cbiJdLCJuYW1lcyI6WyJub3JtYWxpemVQYXRoU2VwIiwicGF0aCIsInJlcGxhY2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router-context.shared-runtime.js":
/*!*******************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router-context.shared-runtime.js ***!
\*******************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RouterContext\", ({\n enumerable: true,\n get: function() {\n return RouterContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst RouterContext = _react.default.createContext(null);\nif (true) {\n RouterContext.displayName = 'RouterContext';\n} //# sourceMappingURL=router-context.shared-runtime.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O2lEQUdhQTs7O2VBQUFBOzs7OzRFQUhLO0FBR1gsTUFBTUEsZ0JBQWdCQyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBb0I7QUFFcEUsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNILGNBQWNNLFdBQVcsR0FBRztBQUM5QiIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvc3JjL3NoYXJlZC9saWIvcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBOZXh0Um91dGVyIH0gZnJvbSAnLi9yb3V0ZXIvcm91dGVyJ1xuXG5leHBvcnQgY29uc3QgUm91dGVyQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8TmV4dFJvdXRlciB8IG51bGw+KG51bGwpXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFJvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSAnUm91dGVyQ29udGV4dCdcbn1cbiJdLCJuYW1lcyI6WyJSb3V0ZXJDb250ZXh0IiwiUmVhY3QiLCJjcmVhdGVDb250ZXh0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router-context.shared-runtime.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/adapters.js":
/*!*****************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/adapters.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 PathnameContextProviderAdapter: function() {\n return PathnameContextProviderAdapter;\n },\n adaptForAppRouterInstance: function() {\n return adaptForAppRouterInstance;\n },\n adaptForPathParams: function() {\n return adaptForPathParams;\n },\n adaptForSearchParams: function() {\n return adaptForSearchParams;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(pages-dir-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 */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"));\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../hooks-client-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _utils = __webpack_require__(/*! ./utils */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _aspathtosearchparams = __webpack_require__(/*! ./utils/as-path-to-search-params */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js\");\nconst _routeregex = __webpack_require__(/*! ./utils/route-regex */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nfunction adaptForAppRouterInstance(pagesRouter) {\n return {\n back () {\n pagesRouter.back();\n },\n forward () {\n pagesRouter.forward();\n },\n refresh () {\n pagesRouter.reload();\n },\n hmrRefresh () {},\n push (href, param) {\n let { scroll } = param === void 0 ? {} : param;\n void pagesRouter.push(href, undefined, {\n scroll\n });\n },\n replace (href, param) {\n let { scroll } = param === void 0 ? {} : param;\n void pagesRouter.replace(href, undefined, {\n scroll\n });\n },\n prefetch (href) {\n void pagesRouter.prefetch(href);\n }\n };\n}\nfunction adaptForSearchParams(router) {\n if (!router.isReady || !router.query) {\n return new URLSearchParams();\n }\n return (0, _aspathtosearchparams.asPathToSearchParams)(router.asPath);\n}\nfunction adaptForPathParams(router) {\n if (!router.isReady || !router.query) {\n return null;\n }\n const pathParams = {};\n const routeRegex = (0, _routeregex.getRouteRegex)(router.pathname);\n const keys = Object.keys(routeRegex.groups);\n for (const key of keys){\n pathParams[key] = router.query[key];\n }\n return pathParams;\n}\nfunction PathnameContextProviderAdapter(param) {\n let { children, router, ...props } = param;\n const ref = (0, _react.useRef)(props.isAutoExport);\n const value = (0, _react.useMemo)(()=>{\n // isAutoExport is only ever `true` on the first render from the server,\n // so reset it to `false` after we read it for the first time as `true`. If\n // we don't use the value, then we don't need it.\n const isAutoExport = ref.current;\n if (isAutoExport) {\n ref.current = false;\n }\n // When the route is a dynamic route, we need to do more processing to\n // determine if we need to stop showing the pathname.\n if ((0, _utils.isDynamicRoute)(router.pathname)) {\n // When the router is rendering the fallback page, it can't possibly know\n // the path, so return `null` here. Read more about fallback pages over\n // at:\n // https://nextjs.org/docs/api-reference/data-fetching/get-static-paths#fallback-pages\n if (router.isFallback) {\n return null;\n }\n // When `isAutoExport` is true, meaning this is a page page has been\n // automatically statically optimized, and the router is not ready, then\n // we can't know the pathname yet. Read more about automatic static\n // optimization at:\n // https://nextjs.org/docs/advanced-features/automatic-static-optimization\n if (isAutoExport && !router.isReady) {\n return null;\n }\n }\n // The `router.asPath` contains the pathname seen by the browser (including\n // any query strings), so it should have that stripped. Read more about the\n // `asPath` option over at:\n // https://nextjs.org/docs/api-reference/next/router#router-object\n let url;\n try {\n url = new URL(router.asPath, 'http://f');\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n return '/';\n }\n return url.pathname;\n }, [\n router.asPath,\n router.isFallback,\n router.isReady,\n router.pathname\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathnameContext.Provider, {\n value: value,\n children: children\n });\n} //# sourceMappingURL=adapters.js.map\n_c = PathnameContextProviderAdapter;\nvar _c;\n$RefreshReg$(_c, \"PathnameContextProviderAdapter\");\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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvYWRhcHRlcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBb0VnQkEsOEJBQThCO2VBQTlCQTs7SUF6REFDLHlCQUF5QjtlQUF6QkE7O0lBMENBQyxrQkFBa0I7ZUFBbEJBOztJQVZBQyxvQkFBb0I7ZUFBcEJBOzs7Ozs2RUF2Q3VCOzZEQUNQO21DQUNEO2tEQUNNO3dDQUNQO0FBR3ZCLFNBQVNGLDBCQUNkRyxXQUF1QjtJQUV2QixPQUFPO1FBQ0xDO1lBQ0VELFlBQVlDLElBQUk7UUFDbEI7UUFDQUM7WUFDRUYsWUFBWUUsT0FBTztRQUNyQjtRQUNBQztZQUNFSCxZQUFZSSxNQUFNO1FBQ3BCO1FBQ0FDLGVBQWM7UUFDZEMsTUFBS0MsSUFBSSxFQUFFO1lBQUEsTUFBRUMsTUFBTSxFQUFFLEdBQVYsbUJBQWEsQ0FBQyxJQUFkO1lBQ1QsS0FBS1IsWUFBWU0sSUFBSSxDQUFDQyxNQUFNRSxXQUFXO2dCQUFFRDtZQUFPO1FBQ2xEO1FBQ0FFLFNBQVFILElBQUksRUFBRTtZQUFBLE1BQUVDLE1BQU0sRUFBRSxHQUFWLG1CQUFhLENBQUMsSUFBZDtZQUNaLEtBQUtSLFlBQVlVLE9BQU8sQ0FBQ0gsTUFBTUUsV0FBVztnQkFBRUQ7WUFBTztRQUNyRDtRQUNBRyxVQUFTSixJQUFJO1lBQ1gsS0FBS1AsWUFBWVcsUUFBUSxDQUFDSjtRQUM1QjtJQUNGO0FBQ0Y7QUFRTyxTQUFTUixxQkFDZGEsTUFBd0Q7SUFFeEQsSUFBSSxDQUFDQSxPQUFPQyxPQUFPLElBQUksQ0FBQ0QsT0FBT0UsS0FBSyxFQUFFO1FBQ3BDLE9BQU8sSUFBSUM7SUFDYjtJQUVBLE9BQU9DLENBQUFBLEdBQUFBLHNCQUFBQSxvQkFBQUEsRUFBcUJKLE9BQU9LLE1BQU07QUFDM0M7QUFFTyxTQUFTbkIsbUJBQ2RjLE1BQXFFO0lBRXJFLElBQUksQ0FBQ0EsT0FBT0MsT0FBTyxJQUFJLENBQUNELE9BQU9FLEtBQUssRUFBRTtRQUNwQyxPQUFPO0lBQ1Q7SUFDQSxNQUFNSSxhQUFxQixDQUFDO0lBQzVCLE1BQU1DLGFBQWFDLENBQUFBLEdBQUFBLFlBQUFBLGFBQWEsRUFBQ1IsT0FBT1MsUUFBUTtJQUNoRCxNQUFNQyxPQUFPQyxPQUFPRCxJQUFJLENBQUNILFdBQVdLLE1BQU07SUFDMUMsS0FBSyxNQUFNQyxPQUFPSCxLQUFNO1FBQ3RCSixVQUFVLENBQUNPLElBQUksR0FBR2IsT0FBT0UsS0FBSyxDQUFDVyxJQUFJO0lBQ3JDO0lBQ0EsT0FBT1A7QUFDVDtBQUVPLHdDQUF3QyxLQU83QztJQVA2QyxNQUM3Q1EsUUFBUSxFQUNSZCxNQUFNLEVBQ04sR0FBR2UsT0FJSCxHQVA2QztJQVE3QyxNQUFNQyxNQUFNQyxDQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxFQUFPRixNQUFNRyxZQUFZO0lBQ3JDLE1BQU1DLFFBQVFDLENBQUFBLEdBQUFBLE9BQUFBLE9BQUFBLEVBQVE7UUFDcEIsd0VBQXdFO1FBQ3hFLDJFQUEyRTtRQUMzRSxpREFBaUQ7UUFDakQsTUFBTUYsZUFBZUYsSUFBSUssT0FBTztRQUNoQyxJQUFJSCxjQUFjO1lBQ2hCRixJQUFJSyxPQUFPLEdBQUc7UUFDaEI7UUFFQSxzRUFBc0U7UUFDdEUscURBQXFEO1FBQ3JELElBQUlDLENBQUFBLEdBQUFBLE9BQUFBLGNBQUFBLEVBQWV0QixPQUFPUyxRQUFRLEdBQUc7WUFDbkMseUVBQXlFO1lBQ3pFLHVFQUF1RTtZQUN2RSxNQUFNO1lBQ04sc0ZBQXNGO1lBQ3RGLElBQUlULE9BQU91QixVQUFVLEVBQUU7Z0JBQ3JCLE9BQU87WUFDVDtZQUVBLG9FQUFvRTtZQUNwRSx3RUFBd0U7WUFDeEUsbUVBQW1FO1lBQ25FLG1CQUFtQjtZQUNuQiwwRUFBMEU7WUFDMUUsSUFBSUwsZ0JBQWdCLENBQUNsQixPQUFPQyxPQUFPLEVBQUU7Z0JBQ25DLE9BQU87WUFDVDtRQUNGO1FBRUEsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSwyQkFBMkI7UUFDM0Isa0VBQWtFO1FBQ2xFLElBQUl1QjtRQUNKLElBQUk7WUFDRkEsTUFBTSxJQUFJQyxJQUFJekIsT0FBT0ssTUFBTSxFQUFFO1FBQy9CLEVBQUUsT0FBT3FCLEdBQUc7WUFDVixrREFBa0Q7WUFDbEQsT0FBTztRQUNUO1FBRUEsT0FBT0YsSUFBSWYsUUFBUTtJQUNyQixHQUFHO1FBQUNULE9BQU9LLE1BQU07UUFBRUwsT0FBT3VCLFVBQVU7UUFBRXZCLE9BQU9DLE9BQU87UUFBRUQsT0FBT1MsUUFBUTtLQUFDO0lBRXRFLHFCQUNFLHFCQUFDa0IsaUNBQUFBLGVBQWUsQ0FBQ0MsUUFBUTtRQUFDVCxPQUFPQTtrQkFDOUJMOztBQUdQO0tBM0RnQjlCIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvYWRhcHRlcnMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXBwUm91dGVySW5zdGFuY2UgfSBmcm9tICcuLi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgdHlwZSB7IFBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9yZXF1ZXN0L3BhcmFtcydcbmltcG9ydCB0eXBlIHsgTmV4dFJvdXRlciB9IGZyb20gJy4vcm91dGVyJ1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBQYXRobmFtZUNvbnRleHQgfSBmcm9tICcuLi9ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IGlzRHluYW1pY1JvdXRlIH0gZnJvbSAnLi91dGlscydcbmltcG9ydCB7IGFzUGF0aFRvU2VhcmNoUGFyYW1zIH0gZnJvbSAnLi91dGlscy9hcy1wYXRoLXRvLXNlYXJjaC1wYXJhbXMnXG5pbXBvcnQgeyBnZXRSb3V0ZVJlZ2V4IH0gZnJvbSAnLi91dGlscy9yb3V0ZS1yZWdleCdcblxuLyoqIEl0IGFkYXB0cyBhIFBhZ2VzIFJvdXRlciAoYE5leHRSb3V0ZXJgKSB0byB0aGUgQXBwIFJvdXRlciBJbnN0YW5jZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGFwdEZvckFwcFJvdXRlckluc3RhbmNlKFxuICBwYWdlc1JvdXRlcjogTmV4dFJvdXRlclxuKTogQXBwUm91dGVySW5zdGFuY2Uge1xuICByZXR1cm4ge1xuICAgIGJhY2soKSB7XG4gICAgICBwYWdlc1JvdXRlci5iYWNrKClcbiAgICB9LFxuICAgIGZvcndhcmQoKSB7XG4gICAgICBwYWdlc1JvdXRlci5mb3J3YXJkKClcbiAgICB9LFxuICAgIHJlZnJlc2goKSB7XG4gICAgICBwYWdlc1JvdXRlci5yZWxvYWQoKVxuICAgIH0sXG4gICAgaG1yUmVmcmVzaCgpIHt9LFxuICAgIHB1c2goaHJlZiwgeyBzY3JvbGwgfSA9IHt9KSB7XG4gICAgICB2b2lkIHBhZ2VzUm91dGVyLnB1c2goaHJlZiwgdW5kZWZpbmVkLCB7IHNjcm9sbCB9KVxuICAgIH0sXG4gICAgcmVwbGFjZShocmVmLCB7IHNjcm9sbCB9ID0ge30pIHtcbiAgICAgIHZvaWQgcGFnZXNSb3V0ZXIucmVwbGFjZShocmVmLCB1bmRlZmluZWQsIHsgc2Nyb2xsIH0pXG4gICAgfSxcbiAgICBwcmVmZXRjaChocmVmKSB7XG4gICAgICB2b2lkIHBhZ2VzUm91dGVyLnByZWZldGNoKGhyZWYpXG4gICAgfSxcbiAgfVxufVxuXG4vKipcbiAqIGFkYXB0Rm9yU2VhcmNoUGFyYW1zIHRyYW5zZm9ybXMgdGhlIFBhcnNlZFVSTFF1ZXJ5IGludG8gVVJMU2VhcmNoUGFyYW1zLlxuICpcbiAqIEBwYXJhbSByb3V0ZXIgdGhlIHJvdXRlciB0aGF0IGNvbnRhaW5zIHRoZSBxdWVyeS5cbiAqIEByZXR1cm5zIHRoZSBzZWFyY2ggcGFyYW1zIGluIHRoZSBVUkxTZWFyY2hQYXJhbXMgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGFwdEZvclNlYXJjaFBhcmFtcyhcbiAgcm91dGVyOiBQaWNrPE5leHRSb3V0ZXIsICdpc1JlYWR5JyB8ICdxdWVyeScgfCAnYXNQYXRoJz5cbik6IFVSTFNlYXJjaFBhcmFtcyB7XG4gIGlmICghcm91dGVyLmlzUmVhZHkgfHwgIXJvdXRlci5xdWVyeSkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgfVxuXG4gIHJldHVybiBhc1BhdGhUb1NlYXJjaFBhcmFtcyhyb3V0ZXIuYXNQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRhcHRGb3JQYXRoUGFyYW1zKFxuICByb3V0ZXI6IFBpY2s8TmV4dFJvdXRlciwgJ2lzUmVhZHknIHwgJ3BhdGhuYW1lJyB8ICdxdWVyeScgfCAnYXNQYXRoJz5cbik6IFBhcmFtcyB8IG51bGwge1xuICBpZiAoIXJvdXRlci5pc1JlYWR5IHx8ICFyb3V0ZXIucXVlcnkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHBhdGhQYXJhbXM6IFBhcmFtcyA9IHt9XG4gIGNvbnN0IHJvdXRlUmVnZXggPSBnZXRSb3V0ZVJlZ2V4KHJvdXRlci5wYXRobmFtZSlcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdXRlUmVnZXguZ3JvdXBzKVxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgcGF0aFBhcmFtc1trZXldID0gcm91dGVyLnF1ZXJ5W2tleV0hXG4gIH1cbiAgcmV0dXJuIHBhdGhQYXJhbXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFBhdGhuYW1lQ29udGV4dFByb3ZpZGVyQWRhcHRlcih7XG4gIGNoaWxkcmVuLFxuICByb3V0ZXIsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Qcm9wc1dpdGhDaGlsZHJlbjx7XG4gIHJvdXRlcjogUGljazxOZXh0Um91dGVyLCAncGF0aG5hbWUnIHwgJ2FzUGF0aCcgfCAnaXNSZWFkeScgfCAnaXNGYWxsYmFjayc+XG4gIGlzQXV0b0V4cG9ydDogYm9vbGVhblxufT4pIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmKHByb3BzLmlzQXV0b0V4cG9ydClcbiAgY29uc3QgdmFsdWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBpc0F1dG9FeHBvcnQgaXMgb25seSBldmVyIGB0cnVlYCBvbiB0aGUgZmlyc3QgcmVuZGVyIGZyb20gdGhlIHNlcnZlcixcbiAgICAvLyBzbyByZXNldCBpdCB0byBgZmFsc2VgIGFmdGVyIHdlIHJlYWQgaXQgZm9yIHRoZSBmaXJzdCB0aW1lIGFzIGB0cnVlYC4gSWZcbiAgICAvLyB3ZSBkb24ndCB1c2UgdGhlIHZhbHVlLCB0aGVuIHdlIGRvbid0IG5lZWQgaXQuXG4gICAgY29uc3QgaXNBdXRvRXhwb3J0ID0gcmVmLmN1cnJlbnRcbiAgICBpZiAoaXNBdXRvRXhwb3J0KSB7XG4gICAgICByZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfVxuXG4gICAgLy8gV2hlbiB0aGUgcm91dGUgaXMgYSBkeW5hbWljIHJvdXRlLCB3ZSBuZWVkIHRvIGRvIG1vcmUgcHJvY2Vzc2luZyB0b1xuICAgIC8vIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIHN0b3Agc2hvd2luZyB0aGUgcGF0aG5hbWUuXG4gICAgaWYgKGlzRHluYW1pY1JvdXRlKHJvdXRlci5wYXRobmFtZSkpIHtcbiAgICAgIC8vIFdoZW4gdGhlIHJvdXRlciBpcyByZW5kZXJpbmcgdGhlIGZhbGxiYWNrIHBhZ2UsIGl0IGNhbid0IHBvc3NpYmx5IGtub3dcbiAgICAgIC8vIHRoZSBwYXRoLCBzbyByZXR1cm4gYG51bGxgIGhlcmUuIFJlYWQgbW9yZSBhYm91dCBmYWxsYmFjayBwYWdlcyBvdmVyXG4gICAgICAvLyBhdDpcbiAgICAgIC8vIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvZGF0YS1mZXRjaGluZy9nZXQtc3RhdGljLXBhdGhzI2ZhbGxiYWNrLXBhZ2VzXG4gICAgICBpZiAocm91dGVyLmlzRmFsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgLy8gV2hlbiBgaXNBdXRvRXhwb3J0YCBpcyB0cnVlLCBtZWFuaW5nIHRoaXMgaXMgYSBwYWdlIHBhZ2UgaGFzIGJlZW5cbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc3RhdGljYWxseSBvcHRpbWl6ZWQsIGFuZCB0aGUgcm91dGVyIGlzIG5vdCByZWFkeSwgdGhlblxuICAgICAgLy8gd2UgY2FuJ3Qga25vdyB0aGUgcGF0aG5hbWUgeWV0LiBSZWFkIG1vcmUgYWJvdXQgYXV0b21hdGljIHN0YXRpY1xuICAgICAgLy8gb3B0aW1pemF0aW9uIGF0OlxuICAgICAgLy8gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYWR2YW5jZWQtZmVhdHVyZXMvYXV0b21hdGljLXN0YXRpYy1vcHRpbWl6YXRpb25cbiAgICAgIGlmIChpc0F1dG9FeHBvcnQgJiYgIXJvdXRlci5pc1JlYWR5KSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIGByb3V0ZXIuYXNQYXRoYCBjb250YWlucyB0aGUgcGF0aG5hbWUgc2VlbiBieSB0aGUgYnJvd3NlciAoaW5jbHVkaW5nXG4gICAgLy8gYW55IHF1ZXJ5IHN0cmluZ3MpLCBzbyBpdCBzaG91bGQgaGF2ZSB0aGF0IHN0cmlwcGVkLiBSZWFkIG1vcmUgYWJvdXQgdGhlXG4gICAgLy8gYGFzUGF0aGAgb3B0aW9uIG92ZXIgYXQ6XG4gICAgLy8gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L3JvdXRlciNyb3V0ZXItb2JqZWN0XG4gICAgbGV0IHVybDogVVJMXG4gICAgdHJ5IHtcbiAgICAgIHVybCA9IG5ldyBVUkwocm91dGVyLmFzUGF0aCwgJ2h0dHA6Ly9mJylcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICAvLyBmYWxsYmFjayB0byAvIGZvciBpbnZhbGlkIGFzUGF0aCB2YWx1ZXMgZS5nLiAvL1xuICAgICAgcmV0dXJuICcvJ1xuICAgIH1cblxuICAgIHJldHVybiB1cmwucGF0aG5hbWVcbiAgfSwgW3JvdXRlci5hc1BhdGgsIHJvdXRlci5pc0ZhbGxiYWNrLCByb3V0ZXIuaXNSZWFkeSwgcm91dGVyLnBhdGhuYW1lXSlcblxuICByZXR1cm4gKFxuICAgIDxQYXRobmFtZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1BhdGhuYW1lQ29udGV4dC5Qcm92aWRlcj5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIlBhdGhuYW1lQ29udGV4dFByb3ZpZGVyQWRhcHRlciIsImFkYXB0Rm9yQXBwUm91dGVySW5zdGFuY2UiLCJhZGFwdEZvclBhdGhQYXJhbXMiLCJhZGFwdEZvclNlYXJjaFBhcmFtcyIsInBhZ2VzUm91dGVyIiwiYmFjayIsImZvcndhcmQiLCJyZWZyZXNoIiwicmVsb2FkIiwiaG1yUmVmcmVzaCIsInB1c2giLCJocmVmIiwic2Nyb2xsIiwidW5kZWZpbmVkIiwicmVwbGFjZSIsInByZWZldGNoIiwicm91dGVyIiwiaXNSZWFkeSIsInF1ZXJ5IiwiVVJMU2VhcmNoUGFyYW1zIiwiYXNQYXRoVG9TZWFyY2hQYXJhbXMiLCJhc1BhdGgiLCJwYXRoUGFyYW1zIiwicm91dGVSZWdleCIsImdldFJvdXRlUmVnZXgiLCJwYXRobmFtZSIsImtleXMiLCJPYmplY3QiLCJncm91cHMiLCJrZXkiLCJjaGlsZHJlbiIsInByb3BzIiwicmVmIiwidXNlUmVmIiwiaXNBdXRvRXhwb3J0IiwidmFsdWUiLCJ1c2VNZW1vIiwiY3VycmVudCIsImlzRHluYW1pY1JvdXRlIiwiaXNGYWxsYmFjayIsInVybCIsIlVSTCIsIl8iLCJQYXRobmFtZUNvbnRleHQiLCJQcm92aWRlciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/adapters.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/router.js":
/*!***************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/router.js ***!
\***************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// tslint:disable:no-console\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 createKey: function() {\n return createKey;\n },\n default: function() {\n return Router;\n },\n matchesMiddleware: function() {\n return matchesMiddleware;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-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 */ \"(pages-dir-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./utils/remove-trailing-slash */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _routeloader = __webpack_require__(/*! ../../../client/route-loader */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/route-loader.js\");\nconst _script = __webpack_require__(/*! ../../../client/script */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/script.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ../../../lib/is-error */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-error.js\"));\nconst _denormalizepagepath = __webpack_require__(/*! ../page-path/denormalize-page-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\");\nconst _normalizelocalepath = __webpack_require__(/*! ../i18n/normalize-locale-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../mitt */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/mitt.js\"));\nconst _utils = __webpack_require__(/*! ../utils */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils.js\");\nconst _isdynamic = __webpack_require__(/*! ./utils/is-dynamic */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _parserelativeurl = __webpack_require__(/*! ./utils/parse-relative-url */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nconst _routematcher = __webpack_require__(/*! ./utils/route-matcher */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./utils/route-regex */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nconst _formaturl = __webpack_require__(/*! ./utils/format-url */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _detectdomainlocale = __webpack_require__(/*! ../../../client/detect-domain-locale */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/detect-domain-locale.js\");\nconst _parsepath = __webpack_require__(/*! ./utils/parse-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst _addlocale = __webpack_require__(/*! ../../../client/add-locale */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/add-locale.js\");\nconst _removelocale = __webpack_require__(/*! ../../../client/remove-locale */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/remove-locale.js\");\nconst _removebasepath = __webpack_require__(/*! ../../../client/remove-base-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/remove-base-path.js\");\nconst _addbasepath = __webpack_require__(/*! ../../../client/add-base-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/add-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../client/has-base-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/has-base-path.js\");\nconst _resolvehref = __webpack_require__(/*! ../../../client/resolve-href */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/resolve-href.js\");\nconst _isapiroute = __webpack_require__(/*! ../../../lib/is-api-route */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/is-api-route.js\");\nconst _getnextpathnameinfo = __webpack_require__(/*! ./utils/get-next-pathname-info */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js\");\nconst _formatnextpathnameinfo = __webpack_require__(/*! ./utils/format-next-pathname-info */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js\");\nconst _comparestates = __webpack_require__(/*! ./utils/compare-states */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/compare-states.js\");\nconst _islocalurl = __webpack_require__(/*! ./utils/is-local-url */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _isbot = __webpack_require__(/*! ./utils/is-bot */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-bot.js\");\nconst _omit = __webpack_require__(/*! ./utils/omit */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _interpolateas = __webpack_require__(/*! ./utils/interpolate-as */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nconst _disablesmoothscroll = __webpack_require__(/*! ./utils/disable-smooth-scroll */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js\");\nconst _constants = __webpack_require__(/*! ../../../lib/constants */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/constants.js\");\nlet resolveRewrites;\nif (false) {}\nfunction buildCancellationError() {\n return Object.assign(Object.defineProperty(new Error('Route Cancelled'), \"__NEXT_ERROR_CODE\", {\n value: \"E315\",\n enumerable: false,\n configurable: true\n }), {\n cancelled: true\n });\n}\nasync function matchesMiddleware(options) {\n const matchers = await Promise.resolve(options.router.pageLoader.getMiddleware());\n if (!matchers) return false;\n const { pathname: asPathname } = (0, _parsepath.parsePath)(options.asPath);\n // remove basePath first since path prefix has to be in the order of `/${basePath}/${locale}`\n const cleanedAs = (0, _hasbasepath.hasBasePath)(asPathname) ? (0, _removebasepath.removeBasePath)(asPathname) : asPathname;\n const asWithBasePathAndLocale = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(cleanedAs, options.locale));\n // Check only path match on client. Matching \"has\" should be done on server\n // where we can access more info such as headers, HttpOnly cookie, etc.\n return matchers.some((m)=>new RegExp(m.regexp).test(asWithBasePathAndLocale));\n}\nfunction stripOrigin(url) {\n const origin = (0, _utils.getLocationOrigin)();\n return url.startsWith(origin) ? url.substring(origin.length) : url;\n}\nfunction prepareUrlAs(router, url, as) {\n // If url and as provided as an object representation,\n // we'll format them into the string version here.\n let [resolvedHref, resolvedAs] = (0, _resolvehref.resolveHref)(router, url, true);\n const origin = (0, _utils.getLocationOrigin)();\n const hrefWasAbsolute = resolvedHref.startsWith(origin);\n const asWasAbsolute = resolvedAs && resolvedAs.startsWith(origin);\n resolvedHref = stripOrigin(resolvedHref);\n resolvedAs = resolvedAs ? stripOrigin(resolvedAs) : resolvedAs;\n const preparedUrl = hrefWasAbsolute ? resolvedHref : (0, _addbasepath.addBasePath)(resolvedHref);\n const preparedAs = as ? stripOrigin((0, _resolvehref.resolveHref)(router, as)) : resolvedAs || resolvedHref;\n return {\n url: preparedUrl,\n as: asWasAbsolute ? preparedAs : (0, _addbasepath.addBasePath)(preparedAs)\n };\n}\nfunction resolveDynamicRoute(pathname, pages) {\n const cleanPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _denormalizepagepath.denormalizePagePath)(pathname));\n if (cleanPathname === '/404' || cleanPathname === '/_error') {\n return pathname;\n }\n // handle resolving href for dynamic routes\n if (!pages.includes(cleanPathname)) {\n // eslint-disable-next-line array-callback-return\n pages.some((page)=>{\n if ((0, _isdynamic.isDynamicRoute)(page) && (0, _routeregex.getRouteRegex)(page).re.test(cleanPathname)) {\n pathname = page;\n return true;\n }\n });\n }\n return (0, _removetrailingslash.removeTrailingSlash)(pathname);\n}\nfunction getMiddlewareData(source, response, options) {\n const nextConfig = {\n basePath: options.router.basePath,\n i18n: {\n locales: options.router.locales\n },\n trailingSlash: Boolean(false)\n };\n const rewriteHeader = response.headers.get('x-nextjs-rewrite');\n let rewriteTarget = rewriteHeader || response.headers.get('x-nextjs-matched-path');\n const matchedPath = response.headers.get(_constants.MATCHED_PATH_HEADER);\n if (matchedPath && !rewriteTarget && !matchedPath.includes('__next_data_catchall') && !matchedPath.includes('/_error') && !matchedPath.includes('/404')) {\n // leverage x-matched-path to detect next.config.js rewrites\n rewriteTarget = matchedPath;\n }\n if (rewriteTarget) {\n if (rewriteTarget.startsWith('/') || false) {\n const parsedRewriteTarget = (0, _parserelativeurl.parseRelativeUrl)(rewriteTarget);\n const pathnameInfo = (0, _getnextpathnameinfo.getNextPathnameInfo)(parsedRewriteTarget.pathname, {\n nextConfig,\n parseData: true\n });\n let fsPathname = (0, _removetrailingslash.removeTrailingSlash)(pathnameInfo.pathname);\n return Promise.all([\n options.router.pageLoader.getPageList(),\n (0, _routeloader.getClientBuildManifest)()\n ]).then((param)=>{\n let [pages, { __rewrites: rewrites }] = param;\n let as = (0, _addlocale.addLocale)(pathnameInfo.pathname, pathnameInfo.locale);\n if ((0, _isdynamic.isDynamicRoute)(as) || !rewriteHeader && pages.includes((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(as), options.router.locales).pathname)) {\n const parsedSource = (0, _getnextpathnameinfo.getNextPathnameInfo)((0, _parserelativeurl.parseRelativeUrl)(source).pathname, {\n nextConfig: false ? 0 : nextConfig,\n parseData: true\n });\n as = (0, _addbasepath.addBasePath)(parsedSource.pathname);\n parsedRewriteTarget.pathname = as;\n }\n if (false) {} else if (!pages.includes(fsPathname)) {\n const resolvedPathname = resolveDynamicRoute(fsPathname, pages);\n if (resolvedPathname !== fsPathname) {\n fsPathname = resolvedPathname;\n }\n }\n const resolvedHref = !pages.includes(fsPathname) ? resolveDynamicRoute((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(parsedRewriteTarget.pathname), options.router.locales).pathname, pages) : fsPathname;\n if ((0, _isdynamic.isDynamicRoute)(resolvedHref)) {\n const matches = (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(resolvedHref))(as);\n Object.assign(parsedRewriteTarget.query, matches || {});\n }\n return {\n type: 'rewrite',\n parsedAs: parsedRewriteTarget,\n resolvedHref\n };\n });\n }\n const src = (0, _parsepath.parsePath)(source);\n const pathname = (0, _formatnextpathnameinfo.formatNextPathnameInfo)({\n ...(0, _getnextpathnameinfo.getNextPathnameInfo)(src.pathname, {\n nextConfig,\n parseData: true\n }),\n defaultLocale: options.router.defaultLocale,\n buildId: ''\n });\n return Promise.resolve({\n type: 'redirect-external',\n destination: \"\" + pathname + src.query + src.hash\n });\n }\n const redirectTarget = response.headers.get('x-nextjs-redirect');\n if (redirectTarget) {\n if (redirectTarget.startsWith('/')) {\n const src = (0, _parsepath.parsePath)(redirectTarget);\n const pathname = (0, _formatnextpathnameinfo.formatNextPathnameInfo)({\n ...(0, _getnextpathnameinfo.getNextPathnameInfo)(src.pathname, {\n nextConfig,\n parseData: true\n }),\n defaultLocale: options.router.defaultLocale,\n buildId: ''\n });\n return Promise.resolve({\n type: 'redirect-internal',\n newAs: \"\" + pathname + src.query + src.hash,\n newUrl: \"\" + pathname + src.query + src.hash\n });\n }\n return Promise.resolve({\n type: 'redirect-external',\n destination: redirectTarget\n });\n }\n return Promise.resolve({\n type: 'next'\n });\n}\nasync function withMiddlewareEffects(options) {\n const matches = await matchesMiddleware(options);\n if (!matches || !options.fetchData) {\n return null;\n }\n const data = await options.fetchData();\n const effect = await getMiddlewareData(data.dataHref, data.response, options);\n return {\n dataHref: data.dataHref,\n json: data.json,\n response: data.response,\n text: data.text,\n cacheKey: data.cacheKey,\n effect\n };\n}\nconst manualScrollRestoration = false && 0;\nconst SSG_DATA_NOT_FOUND = Symbol('SSG_DATA_NOT_FOUND');\nfunction fetchRetry(url, attempts, options) {\n return fetch(url, {\n // Cookies are required to be present for Next.js' SSG \"Preview Mode\".\n // Cookies may also be required for `getServerSideProps`.\n //\n // > `fetch` wont send cookies, unless you set the credentials init\n // > option.\n // https://developer.mozilla.org/docs/Web/API/Fetch_API/Using_Fetch\n //\n // > For maximum browser compatibility when it comes to sending &\n // > receiving cookies, always supply the `credentials: 'same-origin'`\n // > option instead of relying on the default.\n // https://github.com/github/fetch#caveats\n credentials: 'same-origin',\n method: options.method || 'GET',\n headers: Object.assign({}, options.headers, {\n 'x-nextjs-data': '1'\n })\n }).then((response)=>{\n return !response.ok && attempts > 1 && response.status >= 500 ? fetchRetry(url, attempts - 1, options) : response;\n });\n}\nfunction tryToParseAsJSON(text) {\n try {\n return JSON.parse(text);\n } catch (error) {\n return null;\n }\n}\nfunction fetchNextData(param) {\n let { dataHref, inflightCache, isPrefetch, hasMiddleware, isServerRender, parseJSON, persistCache, isBackground, unstable_skipClientCache } = param;\n const { href: cacheKey } = new URL(dataHref, window.location.href);\n const getData = (params)=>{\n var _params_method;\n return fetchRetry(dataHref, isServerRender ? 3 : 1, {\n headers: Object.assign({}, isPrefetch ? {\n purpose: 'prefetch'\n } : {}, isPrefetch && hasMiddleware ? {\n 'x-middleware-prefetch': '1'\n } : {}, false ? 0 : {}),\n method: (_params_method = params == null ? void 0 : params.method) != null ? _params_method : 'GET'\n }).then((response)=>{\n if (response.ok && (params == null ? void 0 : params.method) === 'HEAD') {\n return {\n dataHref,\n response,\n text: '',\n json: {},\n cacheKey\n };\n }\n return response.text().then((text)=>{\n if (!response.ok) {\n /**\n * When the data response is a redirect because of a middleware\n * we do not consider it an error. The headers must bring the\n * mapped location.\n * TODO: Change the status code in the handler.\n */ if (hasMiddleware && [\n 301,\n 302,\n 307,\n 308\n ].includes(response.status)) {\n return {\n dataHref,\n response,\n text,\n json: {},\n cacheKey\n };\n }\n if (response.status === 404) {\n var _tryToParseAsJSON;\n if ((_tryToParseAsJSON = tryToParseAsJSON(text)) == null ? void 0 : _tryToParseAsJSON.notFound) {\n return {\n dataHref,\n json: {\n notFound: SSG_DATA_NOT_FOUND\n },\n response,\n text,\n cacheKey\n };\n }\n }\n const error = Object.defineProperty(new Error(\"Failed to load static props\"), \"__NEXT_ERROR_CODE\", {\n value: \"E124\",\n enumerable: false,\n configurable: true\n });\n /**\n * We should only trigger a server-side transition if this was\n * caused on a client-side transition. Otherwise, we'd get into\n * an infinite loop.\n */ if (!isServerRender) {\n (0, _routeloader.markAssetError)(error);\n }\n throw error;\n }\n return {\n dataHref,\n json: parseJSON ? tryToParseAsJSON(text) : null,\n response,\n text,\n cacheKey\n };\n });\n }).then((data)=>{\n if (!persistCache || \"development\" !== 'production' || 0) {\n delete inflightCache[cacheKey];\n }\n return data;\n }).catch((err)=>{\n if (!unstable_skipClientCache) {\n delete inflightCache[cacheKey];\n }\n if (err.message === 'Failed to fetch' || // firefox\n err.message === 'NetworkError when attempting to fetch resource.' || // safari\n err.message === 'Load failed') {\n (0, _routeloader.markAssetError)(err);\n }\n throw err;\n });\n };\n // when skipping client cache we wait to update\n // inflight cache until successful data response\n // this allows racing click event with fetching newer data\n // without blocking navigation when stale data is available\n if (unstable_skipClientCache && persistCache) {\n return getData({}).then((data)=>{\n if (data.response.headers.get('x-middleware-cache') !== 'no-cache') {\n // only update cache if not marked as no-cache\n inflightCache[cacheKey] = Promise.resolve(data);\n }\n return data;\n });\n }\n if (inflightCache[cacheKey] !== undefined) {\n return inflightCache[cacheKey];\n }\n return inflightCache[cacheKey] = getData(isBackground ? {\n method: 'HEAD'\n } : {});\n}\nfunction createKey() {\n return Math.random().toString(36).slice(2, 10);\n}\nfunction handleHardNavigation(param) {\n let { url, router } = param;\n // ensure we don't trigger a hard navigation to the same\n // URL as this can end up with an infinite refresh\n if (url === (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(router.asPath, router.locale))) {\n throw Object.defineProperty(new Error(\"Invariant: attempted to hard navigate to the same URL \" + url + \" \" + location.href), \"__NEXT_ERROR_CODE\", {\n value: \"E282\",\n enumerable: false,\n configurable: true\n });\n }\n window.location.href = url;\n}\nconst getCancelledHandler = (param)=>{\n let { route, router } = param;\n let cancelled = false;\n const cancel = router.clc = ()=>{\n cancelled = true;\n };\n const handleCancelled = ()=>{\n if (cancelled) {\n const error = Object.defineProperty(new Error('Abort fetching component for route: \"' + route + '\"'), \"__NEXT_ERROR_CODE\", {\n value: \"E483\",\n enumerable: false,\n configurable: true\n });\n error.cancelled = true;\n throw error;\n }\n if (cancel === router.clc) {\n router.clc = null;\n }\n };\n return handleCancelled;\n};\nclass Router {\n reload() {\n window.location.reload();\n }\n /**\n * Go back in history\n */ back() {\n window.history.back();\n }\n /**\n * Go forward in history\n */ forward() {\n window.history.forward();\n }\n /**\n * Performs a `pushState` with arguments\n * @param url of the route\n * @param as masks `url` for the browser\n * @param options object you can define `shallow` and other options\n */ push(url, as, options) {\n if (options === void 0) options = {};\n if (false) {}\n ;\n ({ url, as } = prepareUrlAs(this, url, as));\n return this.change('pushState', url, as, options);\n }\n /**\n * Performs a `replaceState` with arguments\n * @param url of the route\n * @param as masks `url` for the browser\n * @param options object you can define `shallow` and other options\n */ replace(url, as, options) {\n if (options === void 0) options = {};\n ;\n ({ url, as } = prepareUrlAs(this, url, as));\n return this.change('replaceState', url, as, options);\n }\n async _bfl(as, resolvedAs, locale, skipNavigate) {\n if (true) {\n if (!this._bfl_s && !this._bfl_d) {\n const { BloomFilter } = __webpack_require__(/*! ../../lib/bloom-filter */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/bloom-filter.js\");\n let staticFilterData;\n let dynamicFilterData;\n try {\n ;\n ({ __routerFilterStatic: staticFilterData, __routerFilterDynamic: dynamicFilterData } = await (0, _routeloader.getClientBuildManifest)());\n } catch (err) {\n // failed to load build manifest hard navigate\n // to be safe\n console.error(err);\n if (skipNavigate) {\n return true;\n }\n handleHardNavigation({\n url: (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(as, locale || this.locale, this.defaultLocale)),\n router: this\n });\n return new Promise(()=>{});\n }\n const routerFilterSValue = {\"numItems\":4,\"errorRate\":0.0001,\"numBits\":77,\"numHashes\":14,\"bitArray\":[1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1]};\n if (!staticFilterData && routerFilterSValue) {\n staticFilterData = routerFilterSValue ? routerFilterSValue : undefined;\n }\n const routerFilterDValue = {\"numItems\":0,\"errorRate\":0.0001,\"numBits\":0,\"numHashes\":null,\"bitArray\":[]};\n if (!dynamicFilterData && routerFilterDValue) {\n dynamicFilterData = routerFilterDValue ? routerFilterDValue : undefined;\n }\n if (staticFilterData == null ? void 0 : staticFilterData.numHashes) {\n this._bfl_s = new BloomFilter(staticFilterData.numItems, staticFilterData.errorRate);\n this._bfl_s.import(staticFilterData);\n }\n if (dynamicFilterData == null ? void 0 : dynamicFilterData.numHashes) {\n this._bfl_d = new BloomFilter(dynamicFilterData.numItems, dynamicFilterData.errorRate);\n this._bfl_d.import(dynamicFilterData);\n }\n }\n let matchesBflStatic = false;\n let matchesBflDynamic = false;\n const pathsToCheck = [\n {\n as\n },\n {\n as: resolvedAs\n }\n ];\n for (const { as: curAs, allowMatchCurrent } of pathsToCheck){\n if (curAs) {\n const asNoSlash = (0, _removetrailingslash.removeTrailingSlash)(new URL(curAs, 'http://n').pathname);\n const asNoSlashLocale = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(asNoSlash, locale || this.locale));\n if (allowMatchCurrent || asNoSlash !== (0, _removetrailingslash.removeTrailingSlash)(new URL(this.asPath, 'http://n').pathname)) {\n var _this__bfl_s, _this__bfl_s1;\n matchesBflStatic = matchesBflStatic || !!((_this__bfl_s = this._bfl_s) == null ? void 0 : _this__bfl_s.contains(asNoSlash)) || !!((_this__bfl_s1 = this._bfl_s) == null ? void 0 : _this__bfl_s1.contains(asNoSlashLocale));\n for (const normalizedAS of [\n asNoSlash,\n asNoSlashLocale\n ]){\n // if any sub-path of as matches a dynamic filter path\n // it should be hard navigated\n const curAsParts = normalizedAS.split('/');\n for(let i = 0; !matchesBflDynamic && i < curAsParts.length + 1; i++){\n var _this__bfl_d;\n const currentPart = curAsParts.slice(0, i).join('/');\n if (currentPart && ((_this__bfl_d = this._bfl_d) == null ? void 0 : _this__bfl_d.contains(currentPart))) {\n matchesBflDynamic = true;\n break;\n }\n }\n }\n // if the client router filter is matched then we trigger\n // a hard navigation\n if (matchesBflStatic || matchesBflDynamic) {\n if (skipNavigate) {\n return true;\n }\n handleHardNavigation({\n url: (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(as, locale || this.locale, this.defaultLocale)),\n router: this\n });\n return new Promise(()=>{});\n }\n }\n }\n }\n }\n return false;\n }\n async change(method, url, as, options, forcedScroll) {\n var _this_components_pathname;\n if (!(0, _islocalurl.isLocalURL)(url)) {\n handleHardNavigation({\n url,\n router: this\n });\n return false;\n }\n // WARNING: `_h` is an internal option for handing Next.js client-side\n // hydration. Your app should _never_ use this property. It may change at\n // any time without notice.\n const isQueryUpdating = options._h === 1;\n if (!isQueryUpdating && !options.shallow) {\n await this._bfl(as, undefined, options.locale);\n }\n let shouldResolveHref = isQueryUpdating || options._shouldResolveHref || (0, _parsepath.parsePath)(url).pathname === (0, _parsepath.parsePath)(as).pathname;\n const nextState = {\n ...this.state\n };\n // for static pages with query params in the URL we delay\n // marking the router ready until after the query is updated\n // or a navigation has occurred\n const readyStateChange = this.isReady !== true;\n this.isReady = true;\n const isSsr = this.isSsr;\n if (!isQueryUpdating) {\n this.isSsr = false;\n }\n // if a route transition is already in progress before\n // the query updating is triggered ignore query updating\n if (isQueryUpdating && this.clc) {\n return false;\n }\n const prevLocale = nextState.locale;\n if (false) { var _this_locales; }\n // marking route changes as a navigation start entry\n if (_utils.ST) {\n performance.mark('routeChange');\n }\n const { shallow = false, scroll = true } = options;\n const routeProps = {\n shallow\n };\n if (this._inFlightRoute && this.clc) {\n if (!isSsr) {\n Router.events.emit('routeChangeError', buildCancellationError(), this._inFlightRoute, routeProps);\n }\n this.clc();\n this.clc = null;\n }\n as = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)((0, _hasbasepath.hasBasePath)(as) ? (0, _removebasepath.removeBasePath)(as) : as, options.locale, this.defaultLocale));\n const cleanedAs = (0, _removelocale.removeLocale)((0, _hasbasepath.hasBasePath)(as) ? (0, _removebasepath.removeBasePath)(as) : as, nextState.locale);\n this._inFlightRoute = as;\n const localeChange = prevLocale !== nextState.locale;\n // If the url change is only related to a hash change\n // We should not proceed. We should only change the state.\n if (!isQueryUpdating && this.onlyAHashChange(cleanedAs) && !localeChange) {\n nextState.asPath = cleanedAs;\n Router.events.emit('hashChangeStart', as, routeProps);\n // TODO: do we need the resolved href when only a hash change?\n this.changeState(method, url, as, {\n ...options,\n scroll: false\n });\n if (scroll) {\n this.scrollToHash(cleanedAs);\n }\n try {\n await this.set(nextState, this.components[nextState.route], null);\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n Router.events.emit('routeChangeError', err, cleanedAs, routeProps);\n }\n throw err;\n }\n Router.events.emit('hashChangeComplete', as, routeProps);\n return true;\n }\n let parsed = (0, _parserelativeurl.parseRelativeUrl)(url);\n let { pathname, query } = parsed;\n // The build manifest needs to be loaded before auto-static dynamic pages\n // get their query parameters to allow ensuring they can be parsed properly\n // when rewritten to\n let pages, rewrites;\n try {\n ;\n [pages, { __rewrites: rewrites }] = await Promise.all([\n this.pageLoader.getPageList(),\n (0, _routeloader.getClientBuildManifest)(),\n this.pageLoader.getMiddleware()\n ]);\n } catch (err) {\n // If we fail to resolve the page list or client-build manifest, we must\n // do a server-side transition:\n handleHardNavigation({\n url: as,\n router: this\n });\n return false;\n }\n // If asked to change the current URL we should reload the current page\n // (not location.reload() but reload getInitialProps and other Next.js stuffs)\n // We also need to set the method = replaceState always\n // as this should not go into the history (That's how browsers work)\n // We should compare the new asPath to the current asPath, not the url\n if (!this.urlIsNew(cleanedAs) && !localeChange) {\n method = 'replaceState';\n }\n // we need to resolve the as value using rewrites for dynamic SSG\n // pages to allow building the data URL correctly\n let resolvedAs = as;\n // url and as should always be prefixed with basePath by this\n // point by either next/link or router.push/replace so strip the\n // basePath from the pathname to match the pages dir 1-to-1\n pathname = pathname ? (0, _removetrailingslash.removeTrailingSlash)((0, _removebasepath.removeBasePath)(pathname)) : pathname;\n let route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n const parsedAsPathname = as.startsWith('/') && (0, _parserelativeurl.parseRelativeUrl)(as).pathname;\n // if we detected the path as app route during prefetching\n // trigger hard navigation\n if ((_this_components_pathname = this.components[pathname]) == null ? void 0 : _this_components_pathname.__appRouter) {\n handleHardNavigation({\n url: as,\n router: this\n });\n return new Promise(()=>{});\n }\n const isMiddlewareRewrite = !!(parsedAsPathname && route !== parsedAsPathname && (!(0, _isdynamic.isDynamicRoute)(route) || !(0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(route))(parsedAsPathname)));\n // we don't attempt resolve asPath when we need to execute\n // middleware as the resolving will occur server-side\n const isMiddlewareMatch = !options.shallow && await matchesMiddleware({\n asPath: as,\n locale: nextState.locale,\n router: this\n });\n if (isQueryUpdating && isMiddlewareMatch) {\n shouldResolveHref = false;\n }\n if (shouldResolveHref && pathname !== '/_error') {\n ;\n options._shouldResolveHref = true;\n if (false) {} else {\n parsed.pathname = resolveDynamicRoute(pathname, pages);\n if (parsed.pathname !== pathname) {\n pathname = parsed.pathname;\n parsed.pathname = (0, _addbasepath.addBasePath)(pathname);\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n }\n }\n if (!(0, _islocalurl.isLocalURL)(as)) {\n if (true) {\n throw Object.defineProperty(new Error('Invalid href: \"' + url + '\" and as: \"' + as + '\", received relative href and external as' + \"\\nSee more info: https://nextjs.org/docs/messages/invalid-relative-url-external-as\"), \"__NEXT_ERROR_CODE\", {\n value: \"E380\",\n enumerable: false,\n configurable: true\n });\n }\n handleHardNavigation({\n url: as,\n router: this\n });\n return false;\n }\n resolvedAs = (0, _removelocale.removeLocale)((0, _removebasepath.removeBasePath)(resolvedAs), nextState.locale);\n route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n let routeMatch = false;\n if ((0, _isdynamic.isDynamicRoute)(route)) {\n const parsedAs = (0, _parserelativeurl.parseRelativeUrl)(resolvedAs);\n const asPathname = parsedAs.pathname;\n const routeRegex = (0, _routeregex.getRouteRegex)(route);\n routeMatch = (0, _routematcher.getRouteMatcher)(routeRegex)(asPathname);\n const shouldInterpolate = route === asPathname;\n const interpolatedAs = shouldInterpolate ? (0, _interpolateas.interpolateAs)(route, asPathname, query) : {};\n if (!routeMatch || shouldInterpolate && !interpolatedAs.result) {\n const missingParams = Object.keys(routeRegex.groups).filter((param)=>!query[param] && !routeRegex.groups[param].optional);\n if (missingParams.length > 0 && !isMiddlewareMatch) {\n if (true) {\n console.warn(\"\" + (shouldInterpolate ? \"Interpolating href\" : \"Mismatching `as` and `href`\") + \" failed to manually provide \" + (\"the params: \" + missingParams.join(', ') + \" in the `href`'s `query`\"));\n }\n throw Object.defineProperty(new Error((shouldInterpolate ? \"The provided `href` (\" + url + \") value is missing query values (\" + missingParams.join(', ') + \") to be interpolated properly. \" : \"The provided `as` value (\" + asPathname + \") is incompatible with the `href` value (\" + route + \"). \") + (\"Read more: https://nextjs.org/docs/messages/\" + (shouldInterpolate ? 'href-interpolation-failed' : 'incompatible-href-as'))), \"__NEXT_ERROR_CODE\", {\n value: \"E344\",\n enumerable: false,\n configurable: true\n });\n }\n } else if (shouldInterpolate) {\n as = (0, _formaturl.formatWithValidation)(Object.assign({}, parsedAs, {\n pathname: interpolatedAs.result,\n query: (0, _omit.omit)(query, interpolatedAs.params)\n }));\n } else {\n // Merge params into `query`, overwriting any specified in search\n Object.assign(query, routeMatch);\n }\n }\n if (!isQueryUpdating) {\n Router.events.emit('routeChangeStart', as, routeProps);\n }\n const isErrorRoute = this.pathname === '/404' || this.pathname === '/_error';\n try {\n var _self___NEXT_DATA___props_pageProps, _self___NEXT_DATA___props, _routeInfo_props;\n let routeInfo = await this.getRouteInfo({\n route,\n pathname,\n query,\n as,\n resolvedAs,\n routeProps,\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n hasMiddleware: isMiddlewareMatch,\n unstable_skipClientCache: options.unstable_skipClientCache,\n isQueryUpdating: isQueryUpdating && !this.isFallback,\n isMiddlewareRewrite\n });\n if (!isQueryUpdating && !options.shallow) {\n await this._bfl(as, 'resolvedAs' in routeInfo ? routeInfo.resolvedAs : undefined, nextState.locale);\n }\n if ('route' in routeInfo && isMiddlewareMatch) {\n pathname = routeInfo.route || route;\n route = pathname;\n if (!routeProps.shallow) {\n query = Object.assign({}, routeInfo.query || {}, query);\n }\n const cleanedParsedPathname = (0, _hasbasepath.hasBasePath)(parsed.pathname) ? (0, _removebasepath.removeBasePath)(parsed.pathname) : parsed.pathname;\n if (routeMatch && pathname !== cleanedParsedPathname) {\n Object.keys(routeMatch).forEach((key)=>{\n if (routeMatch && query[key] === routeMatch[key]) {\n delete query[key];\n }\n });\n }\n if ((0, _isdynamic.isDynamicRoute)(pathname)) {\n const prefixedAs = !routeProps.shallow && routeInfo.resolvedAs ? routeInfo.resolvedAs : (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(new URL(as, location.href).pathname, nextState.locale), true);\n let rewriteAs = prefixedAs;\n if ((0, _hasbasepath.hasBasePath)(rewriteAs)) {\n rewriteAs = (0, _removebasepath.removeBasePath)(rewriteAs);\n }\n if (false) {}\n const routeRegex = (0, _routeregex.getRouteRegex)(pathname);\n const curRouteMatch = (0, _routematcher.getRouteMatcher)(routeRegex)(new URL(rewriteAs, location.href).pathname);\n if (curRouteMatch) {\n Object.assign(query, curRouteMatch);\n }\n }\n }\n // If the routeInfo brings a redirect we simply apply it.\n if ('type' in routeInfo) {\n if (routeInfo.type === 'redirect-internal') {\n return this.change(method, routeInfo.newUrl, routeInfo.newAs, options);\n } else {\n handleHardNavigation({\n url: routeInfo.destination,\n router: this\n });\n return new Promise(()=>{});\n }\n }\n const component = routeInfo.Component;\n if (component && component.unstable_scriptLoader) {\n const scripts = [].concat(component.unstable_scriptLoader());\n scripts.forEach((script)=>{\n (0, _script.handleClientScriptLoad)(script.props);\n });\n }\n // handle redirect on client-transition\n if ((routeInfo.__N_SSG || routeInfo.__N_SSP) && routeInfo.props) {\n if (routeInfo.props.pageProps && routeInfo.props.pageProps.__N_REDIRECT) {\n // Use the destination from redirect without adding locale\n options.locale = false;\n const destination = routeInfo.props.pageProps.__N_REDIRECT;\n // check if destination is internal (resolves to a page) and attempt\n // client-navigation if it is falling back to hard navigation if\n // it's not\n if (destination.startsWith('/') && routeInfo.props.pageProps.__N_REDIRECT_BASE_PATH !== false) {\n const parsedHref = (0, _parserelativeurl.parseRelativeUrl)(destination);\n parsedHref.pathname = resolveDynamicRoute(parsedHref.pathname, pages);\n const { url: newUrl, as: newAs } = prepareUrlAs(this, destination, destination);\n return this.change(method, newUrl, newAs, options);\n }\n handleHardNavigation({\n url: destination,\n router: this\n });\n return new Promise(()=>{});\n }\n nextState.isPreview = !!routeInfo.props.__N_PREVIEW;\n // handle SSG data 404\n if (routeInfo.props.notFound === SSG_DATA_NOT_FOUND) {\n let notFoundRoute;\n try {\n await this.fetchComponent('/404');\n notFoundRoute = '/404';\n } catch (_) {\n notFoundRoute = '/_error';\n }\n routeInfo = await this.getRouteInfo({\n route: notFoundRoute,\n pathname: notFoundRoute,\n query,\n as,\n resolvedAs,\n routeProps: {\n shallow: false\n },\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n isNotFound: true\n });\n if ('type' in routeInfo) {\n throw Object.defineProperty(new Error(\"Unexpected middleware effect on /404\"), \"__NEXT_ERROR_CODE\", {\n value: \"E158\",\n enumerable: false,\n configurable: true\n });\n }\n }\n }\n if (isQueryUpdating && this.pathname === '/_error' && ((_self___NEXT_DATA___props = self.__NEXT_DATA__.props) == null ? void 0 : (_self___NEXT_DATA___props_pageProps = _self___NEXT_DATA___props.pageProps) == null ? void 0 : _self___NEXT_DATA___props_pageProps.statusCode) === 500 && ((_routeInfo_props = routeInfo.props) == null ? void 0 : _routeInfo_props.pageProps)) {\n // ensure statusCode is still correct for static 500 page\n // when updating query information\n routeInfo.props.pageProps.statusCode = 500;\n }\n var _routeInfo_route;\n // shallow routing is only allowed for same page URL changes.\n const isValidShallowRoute = options.shallow && nextState.route === ((_routeInfo_route = routeInfo.route) != null ? _routeInfo_route : route);\n var _options_scroll;\n const shouldScroll = (_options_scroll = options.scroll) != null ? _options_scroll : !isQueryUpdating && !isValidShallowRoute;\n const resetScroll = shouldScroll ? {\n x: 0,\n y: 0\n } : null;\n const upcomingScrollState = forcedScroll != null ? forcedScroll : resetScroll;\n // the new state that the router gonna set\n const upcomingRouterState = {\n ...nextState,\n route,\n pathname,\n query,\n asPath: cleanedAs,\n isFallback: false\n };\n // When the page being rendered is the 404 page, we should only update the\n // query parameters. Route changes here might add the basePath when it\n // wasn't originally present. This is also why this block is before the\n // below `changeState` call which updates the browser's history (changing\n // the URL).\n if (isQueryUpdating && isErrorRoute) {\n var _self___NEXT_DATA___props_pageProps1, _self___NEXT_DATA___props1, _routeInfo_props1;\n routeInfo = await this.getRouteInfo({\n route: this.pathname,\n pathname: this.pathname,\n query,\n as,\n resolvedAs,\n routeProps: {\n shallow: false\n },\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n isQueryUpdating: isQueryUpdating && !this.isFallback\n });\n if ('type' in routeInfo) {\n throw Object.defineProperty(new Error(\"Unexpected middleware effect on \" + this.pathname), \"__NEXT_ERROR_CODE\", {\n value: \"E225\",\n enumerable: false,\n configurable: true\n });\n }\n if (this.pathname === '/_error' && ((_self___NEXT_DATA___props1 = self.__NEXT_DATA__.props) == null ? void 0 : (_self___NEXT_DATA___props_pageProps1 = _self___NEXT_DATA___props1.pageProps) == null ? void 0 : _self___NEXT_DATA___props_pageProps1.statusCode) === 500 && ((_routeInfo_props1 = routeInfo.props) == null ? void 0 : _routeInfo_props1.pageProps)) {\n // ensure statusCode is still correct for static 500 page\n // when updating query information\n routeInfo.props.pageProps.statusCode = 500;\n }\n try {\n await this.set(upcomingRouterState, routeInfo, upcomingScrollState);\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n Router.events.emit('routeChangeError', err, cleanedAs, routeProps);\n }\n throw err;\n }\n return true;\n }\n Router.events.emit('beforeHistoryChange', as, routeProps);\n this.changeState(method, url, as, options);\n // for query updates we can skip it if the state is unchanged and we don't\n // need to scroll\n // https://github.com/vercel/next.js/issues/37139\n const canSkipUpdating = isQueryUpdating && !upcomingScrollState && !readyStateChange && !localeChange && (0, _comparestates.compareRouterStates)(upcomingRouterState, this.state);\n if (!canSkipUpdating) {\n try {\n await this.set(upcomingRouterState, routeInfo, upcomingScrollState);\n } catch (e) {\n if (e.cancelled) routeInfo.error = routeInfo.error || e;\n else throw e;\n }\n if (routeInfo.error) {\n if (!isQueryUpdating) {\n Router.events.emit('routeChangeError', routeInfo.error, cleanedAs, routeProps);\n }\n throw routeInfo.error;\n }\n if (false) {}\n if (!isQueryUpdating) {\n Router.events.emit('routeChangeComplete', as, routeProps);\n }\n // A hash mark # is the optional last part of a URL\n const hashRegex = /#.+$/;\n if (shouldScroll && hashRegex.test(as)) {\n this.scrollToHash(as);\n }\n }\n return true;\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n return false;\n }\n throw err;\n }\n }\n changeState(method, url, as, options) {\n if (options === void 0) options = {};\n if (true) {\n if (typeof window.history === 'undefined') {\n console.error(\"Warning: window.history is not available.\");\n return;\n }\n if (typeof window.history[method] === 'undefined') {\n console.error(\"Warning: window.history.\" + method + \" is not available\");\n return;\n }\n }\n if (method !== 'pushState' || (0, _utils.getURL)() !== as) {\n this._shallow = options.shallow;\n window.history[method]({\n url,\n as,\n options,\n __N: true,\n key: this._key = method !== 'pushState' ? this._key : createKey()\n }, // Passing the empty string here should be safe against future changes to the method.\n // https://developer.mozilla.org/docs/Web/API/History/replaceState\n '', as);\n }\n }\n async handleRouteInfoError(err, pathname, query, as, routeProps, loadErrorFail) {\n if (err.cancelled) {\n // bubble up cancellation errors\n throw err;\n }\n if ((0, _routeloader.isAssetError)(err) || loadErrorFail) {\n Router.events.emit('routeChangeError', err, as, routeProps);\n // If we can't load the page it could be one of following reasons\n // 1. Page doesn't exists\n // 2. Page does exist in a different zone\n // 3. Internal error while loading the page\n // So, doing a hard reload is the proper way to deal with this.\n handleHardNavigation({\n url: as,\n router: this\n });\n // Changing the URL doesn't block executing the current code path.\n // So let's throw a cancellation error stop the routing logic.\n throw buildCancellationError();\n }\n console.error(err);\n try {\n let props;\n const { page: Component, styleSheets } = await this.fetchComponent('/_error');\n const routeInfo = {\n props,\n Component,\n styleSheets,\n err,\n error: err\n };\n if (!routeInfo.props) {\n try {\n routeInfo.props = await this.getInitialProps(Component, {\n err,\n pathname,\n query\n });\n } catch (gipErr) {\n console.error('Error in error page `getInitialProps`: ', gipErr);\n routeInfo.props = {};\n }\n }\n return routeInfo;\n } catch (routeInfoErr) {\n return this.handleRouteInfoError((0, _iserror.default)(routeInfoErr) ? routeInfoErr : Object.defineProperty(new Error(routeInfoErr + ''), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n }), pathname, query, as, routeProps, true);\n }\n }\n async getRouteInfo(param) {\n let { route: requestedRoute, pathname, query, as, resolvedAs, routeProps, locale, hasMiddleware, isPreview, unstable_skipClientCache, isQueryUpdating, isMiddlewareRewrite, isNotFound } = param;\n /**\n * This `route` binding can change if there's a rewrite\n * so we keep a reference to the original requested route\n * so we can store the cache for it and avoid re-requesting every time\n * for shallow routing purposes.\n */ let route = requestedRoute;\n try {\n var _data_effect, _data_effect1, _data_effect2, _data_response;\n let existingInfo = this.components[route];\n if (routeProps.shallow && existingInfo && this.route === route) {\n return existingInfo;\n }\n const handleCancelled = getCancelledHandler({\n route,\n router: this\n });\n if (hasMiddleware) {\n existingInfo = undefined;\n }\n let cachedRouteInfo = existingInfo && !('initial' in existingInfo) && \"development\" !== 'development' ? 0 : undefined;\n const isBackground = isQueryUpdating;\n const fetchNextDataParams = {\n dataHref: this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname,\n query\n }),\n skipInterpolation: true,\n asPath: isNotFound ? '/404' : resolvedAs,\n locale\n }),\n hasMiddleware: true,\n isServerRender: this.isSsr,\n parseJSON: true,\n inflightCache: isBackground ? this.sbc : this.sdc,\n persistCache: !isPreview,\n isPrefetch: false,\n unstable_skipClientCache,\n isBackground\n };\n let data = isQueryUpdating && !isMiddlewareRewrite ? null : await withMiddlewareEffects({\n fetchData: ()=>fetchNextData(fetchNextDataParams),\n asPath: isNotFound ? '/404' : resolvedAs,\n locale: locale,\n router: this\n }).catch((err)=>{\n // we don't hard error during query updating\n // as it's un-necessary and doesn't need to be fatal\n // unless it is a fallback route and the props can't\n // be loaded\n if (isQueryUpdating) {\n return null;\n }\n throw err;\n });\n // when rendering error routes we don't apply middleware\n // effects\n if (data && (pathname === '/_error' || pathname === '/404')) {\n data.effect = undefined;\n }\n if (isQueryUpdating) {\n if (!data) {\n data = {\n json: self.__NEXT_DATA__.props\n };\n } else {\n data.json = self.__NEXT_DATA__.props;\n }\n }\n handleCancelled();\n if ((data == null ? void 0 : (_data_effect = data.effect) == null ? void 0 : _data_effect.type) === 'redirect-internal' || (data == null ? void 0 : (_data_effect1 = data.effect) == null ? void 0 : _data_effect1.type) === 'redirect-external') {\n return data.effect;\n }\n if ((data == null ? void 0 : (_data_effect2 = data.effect) == null ? void 0 : _data_effect2.type) === 'rewrite') {\n const resolvedRoute = (0, _removetrailingslash.removeTrailingSlash)(data.effect.resolvedHref);\n const pages = await this.pageLoader.getPageList();\n // during query updating the page must match although during\n // client-transition a redirect that doesn't match a page\n // can be returned and this should trigger a hard navigation\n // which is valid for incremental migration\n if (!isQueryUpdating || pages.includes(resolvedRoute)) {\n route = resolvedRoute;\n pathname = data.effect.resolvedHref;\n query = {\n ...query,\n ...data.effect.parsedAs.query\n };\n resolvedAs = (0, _removebasepath.removeBasePath)((0, _normalizelocalepath.normalizeLocalePath)(data.effect.parsedAs.pathname, this.locales).pathname);\n // Check again the cache with the new destination.\n existingInfo = this.components[route];\n if (routeProps.shallow && existingInfo && this.route === route && !hasMiddleware) {\n // If we have a match with the current route due to rewrite,\n // we can copy the existing information to the rewritten one.\n // Then, we return the information along with the matched route.\n return {\n ...existingInfo,\n route\n };\n }\n }\n }\n if ((0, _isapiroute.isAPIRoute)(route)) {\n handleHardNavigation({\n url: as,\n router: this\n });\n return new Promise(()=>{});\n }\n const routeInfo = cachedRouteInfo || await this.fetchComponent(route).then((res)=>({\n Component: res.page,\n styleSheets: res.styleSheets,\n __N_SSG: res.mod.__N_SSG,\n __N_SSP: res.mod.__N_SSP\n }));\n if (true) {\n const { isValidElementType } = __webpack_require__(/*! next/dist/compiled/react-is */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react-is/index.js\");\n if (!isValidElementType(routeInfo.Component)) {\n throw Object.defineProperty(new Error('The default export is not a React Component in page: \"' + pathname + '\"'), \"__NEXT_ERROR_CODE\", {\n value: \"E286\",\n enumerable: false,\n configurable: true\n });\n }\n }\n const wasBailedPrefetch = data == null ? void 0 : (_data_response = data.response) == null ? void 0 : _data_response.headers.get('x-middleware-skip');\n const shouldFetchData = routeInfo.__N_SSG || routeInfo.__N_SSP;\n // For non-SSG prefetches that bailed before sending data\n // we clear the cache to fetch full response\n if (wasBailedPrefetch && (data == null ? void 0 : data.dataHref)) {\n delete this.sdc[data.dataHref];\n }\n const { props, cacheKey } = await this._getData(async ()=>{\n if (shouldFetchData) {\n if ((data == null ? void 0 : data.json) && !wasBailedPrefetch) {\n return {\n cacheKey: data.cacheKey,\n props: data.json\n };\n }\n const dataHref = (data == null ? void 0 : data.dataHref) ? data.dataHref : this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname,\n query\n }),\n asPath: resolvedAs,\n locale\n });\n const fetched = await fetchNextData({\n dataHref,\n isServerRender: this.isSsr,\n parseJSON: true,\n inflightCache: wasBailedPrefetch ? {} : this.sdc,\n persistCache: !isPreview,\n isPrefetch: false,\n unstable_skipClientCache\n });\n return {\n cacheKey: fetched.cacheKey,\n props: fetched.json || {}\n };\n }\n return {\n headers: {},\n props: await this.getInitialProps(routeInfo.Component, {\n pathname,\n query,\n asPath: as,\n locale,\n locales: this.locales,\n defaultLocale: this.defaultLocale\n })\n };\n });\n // Only bust the data cache for SSP routes although\n // middleware can skip cache per request with\n // x-middleware-cache: no-cache as well\n if (routeInfo.__N_SSP && fetchNextDataParams.dataHref && cacheKey) {\n delete this.sdc[cacheKey];\n }\n // we kick off a HEAD request in the background\n // when a non-prefetch request is made to signal revalidation\n if (!this.isPreview && routeInfo.__N_SSG && \"development\" !== 'development' && 0) {}\n props.pageProps = Object.assign({}, props.pageProps);\n routeInfo.props = props;\n routeInfo.route = route;\n routeInfo.query = query;\n routeInfo.resolvedAs = resolvedAs;\n this.components[route] = routeInfo;\n return routeInfo;\n } catch (err) {\n return this.handleRouteInfoError((0, _iserror.getProperError)(err), pathname, query, as, routeProps);\n }\n }\n set(state, data, resetScroll) {\n this.state = state;\n return this.sub(data, this.components['/_app'].Component, resetScroll);\n }\n /**\n * Callback to execute before replacing router state\n * @param cb callback to be executed\n */ beforePopState(cb) {\n this._bps = cb;\n }\n onlyAHashChange(as) {\n if (!this.asPath) return false;\n const [oldUrlNoHash, oldHash] = this.asPath.split('#', 2);\n const [newUrlNoHash, newHash] = as.split('#', 2);\n // Makes sure we scroll to the provided hash if the url/hash are the same\n if (newHash && oldUrlNoHash === newUrlNoHash && oldHash === newHash) {\n return true;\n }\n // If the urls are change, there's more than a hash change\n if (oldUrlNoHash !== newUrlNoHash) {\n return false;\n }\n // If the hash has changed, then it's a hash only change.\n // This check is necessary to handle both the enter and\n // leave hash === '' cases. The identity case falls through\n // and is treated as a next reload.\n return oldHash !== newHash;\n }\n scrollToHash(as) {\n const [, hash = ''] = as.split('#', 2);\n (0, _disablesmoothscroll.disableSmoothScrollDuringRouteTransition)(()=>{\n // Scroll to top if the hash is just `#` with no value or `#top`\n // To mirror browsers\n if (hash === '' || hash === 'top') {\n window.scrollTo(0, 0);\n return;\n }\n // Decode hash to make non-latin anchor works.\n const rawHash = decodeURIComponent(hash);\n // First we check if the element by id is found\n const idEl = document.getElementById(rawHash);\n if (idEl) {\n idEl.scrollIntoView();\n return;\n }\n // If there's no element with the id, we check the `name` property\n // To mirror browsers\n const nameEl = document.getElementsByName(rawHash)[0];\n if (nameEl) {\n nameEl.scrollIntoView();\n }\n }, {\n onlyHashChange: this.onlyAHashChange(as)\n });\n }\n urlIsNew(asPath) {\n return this.asPath !== asPath;\n }\n /**\n * Prefetch page code, you may wait for the data during page rendering.\n * This feature only works in production!\n * @param url the href of prefetched page\n * @param asPath the as path of the prefetched page\n */ async prefetch(url, asPath, options) {\n if (asPath === void 0) asPath = url;\n if (options === void 0) options = {};\n // Prefetch is not supported in development mode because it would trigger on-demand-entries\n if (true) {\n return;\n }\n if ( true && (0, _isbot.isBot)(window.navigator.userAgent)) {\n // No prefetches for bots that render the link since they are typically navigating\n // links via the equivalent of a hard navigation and hence never utilize these\n // prefetches.\n return;\n }\n let parsed = (0, _parserelativeurl.parseRelativeUrl)(url);\n const urlPathname = parsed.pathname;\n let { pathname, query } = parsed;\n const originalPathname = pathname;\n if (false) {}\n const pages = await this.pageLoader.getPageList();\n let resolvedAs = asPath;\n const locale = typeof options.locale !== 'undefined' ? options.locale || undefined : this.locale;\n const isMiddlewareMatch = await matchesMiddleware({\n asPath: asPath,\n locale: locale,\n router: this\n });\n if (false) {}\n parsed.pathname = resolveDynamicRoute(parsed.pathname, pages);\n if ((0, _isdynamic.isDynamicRoute)(parsed.pathname)) {\n pathname = parsed.pathname;\n parsed.pathname = pathname;\n Object.assign(query, (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(parsed.pathname))((0, _parsepath.parsePath)(asPath).pathname) || {});\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n const data = false ? 0 : await withMiddlewareEffects({\n fetchData: ()=>fetchNextData({\n dataHref: this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname: originalPathname,\n query\n }),\n skipInterpolation: true,\n asPath: resolvedAs,\n locale\n }),\n hasMiddleware: true,\n isServerRender: false,\n parseJSON: true,\n inflightCache: this.sdc,\n persistCache: !this.isPreview,\n isPrefetch: true\n }),\n asPath: asPath,\n locale: locale,\n router: this\n });\n /**\n * If there was a rewrite we apply the effects of the rewrite on the\n * current parameters for the prefetch.\n */ if ((data == null ? void 0 : data.effect.type) === 'rewrite') {\n parsed.pathname = data.effect.resolvedHref;\n pathname = data.effect.resolvedHref;\n query = {\n ...query,\n ...data.effect.parsedAs.query\n };\n resolvedAs = data.effect.parsedAs.pathname;\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n /**\n * If there is a redirect to an external destination then we don't have\n * to prefetch content as it will be unused.\n */ if ((data == null ? void 0 : data.effect.type) === 'redirect-external') {\n return;\n }\n const route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n if (await this._bfl(asPath, resolvedAs, options.locale, true)) {\n this.components[urlPathname] = {\n __appRouter: true\n };\n }\n await Promise.all([\n this.pageLoader._isSsg(route).then((isSsg)=>{\n return isSsg ? fetchNextData({\n dataHref: (data == null ? void 0 : data.json) ? data == null ? void 0 : data.dataHref : this.pageLoader.getDataHref({\n href: url,\n asPath: resolvedAs,\n locale: locale\n }),\n isServerRender: false,\n parseJSON: true,\n inflightCache: this.sdc,\n persistCache: !this.isPreview,\n isPrefetch: true,\n unstable_skipClientCache: options.unstable_skipClientCache || options.priority && !!true\n }).then(()=>false).catch(()=>false) : false;\n }),\n this.pageLoader[options.priority ? 'loadPage' : 'prefetch'](route)\n ]);\n }\n async fetchComponent(route) {\n const handleCancelled = getCancelledHandler({\n route,\n router: this\n });\n try {\n const componentResult = await this.pageLoader.loadPage(route);\n handleCancelled();\n return componentResult;\n } catch (err) {\n handleCancelled();\n throw err;\n }\n }\n _getData(fn) {\n let cancelled = false;\n const cancel = ()=>{\n cancelled = true;\n };\n this.clc = cancel;\n return fn().then((data)=>{\n if (cancel === this.clc) {\n this.clc = null;\n }\n if (cancelled) {\n const err = Object.defineProperty(new Error('Loading initial props cancelled'), \"__NEXT_ERROR_CODE\", {\n value: \"E405\",\n enumerable: false,\n configurable: true\n });\n err.cancelled = true;\n throw err;\n }\n return data;\n });\n }\n getInitialProps(Component, ctx) {\n const { Component: App } = this.components['/_app'];\n const AppTree = this._wrapApp(App);\n ctx.AppTree = AppTree;\n return (0, _utils.loadGetInitialProps)(App, {\n AppTree,\n Component,\n router: this,\n ctx\n });\n }\n get route() {\n return this.state.route;\n }\n get pathname() {\n return this.state.pathname;\n }\n get query() {\n return this.state.query;\n }\n get asPath() {\n return this.state.asPath;\n }\n get locale() {\n return this.state.locale;\n }\n get isFallback() {\n return this.state.isFallback;\n }\n get isPreview() {\n return this.state.isPreview;\n }\n constructor(pathname, query, as, { initialProps, pageLoader, App, wrapApp, Component, err, subscription, isFallback, locale, locales, defaultLocale, domainLocales, isPreview }){\n // Server Data Cache (full data requests)\n this.sdc = {};\n // Server Background Cache (HEAD requests)\n this.sbc = {};\n this.isFirstPopStateEvent = true;\n this._key = createKey();\n this.onPopState = (e)=>{\n const { isFirstPopStateEvent } = this;\n this.isFirstPopStateEvent = false;\n const state = e.state;\n if (!state) {\n // We get state as undefined for two reasons.\n // 1. With older safari (< 8) and older chrome (< 34)\n // 2. When the URL changed with #\n //\n // In the both cases, we don't need to proceed and change the route.\n // (as it's already changed)\n // But we can simply replace the state with the new changes.\n // Actually, for (1) we don't need to nothing. But it's hard to detect that event.\n // So, doing the following for (1) does no harm.\n const { pathname, query } = this;\n this.changeState('replaceState', (0, _formaturl.formatWithValidation)({\n pathname: (0, _addbasepath.addBasePath)(pathname),\n query\n }), (0, _utils.getURL)());\n return;\n }\n // __NA is used to identify if the history entry can be handled by the app-router.\n if (state.__NA) {\n window.location.reload();\n return;\n }\n if (!state.__N) {\n return;\n }\n // Safari fires popstateevent when reopening the browser.\n if (isFirstPopStateEvent && this.locale === state.options.locale && state.as === this.asPath) {\n return;\n }\n let forcedScroll;\n const { url, as, options, key } = state;\n if (false) {}\n this._key = key;\n const { pathname } = (0, _parserelativeurl.parseRelativeUrl)(url);\n // Make sure we don't re-render on initial load,\n // can be caused by navigating back from an external site\n if (this.isSsr && as === (0, _addbasepath.addBasePath)(this.asPath) && pathname === (0, _addbasepath.addBasePath)(this.pathname)) {\n return;\n }\n // If the downstream application returns falsy, return.\n // They will then be responsible for handling the event.\n if (this._bps && !this._bps(state)) {\n return;\n }\n this.change('replaceState', url, as, Object.assign({}, options, {\n shallow: options.shallow && this._shallow,\n locale: options.locale || this.defaultLocale,\n // @ts-ignore internal value not exposed on types\n _h: 0\n }), forcedScroll);\n };\n // represents the current component key\n const route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n // set up the component cache (by route keys)\n this.components = {};\n // We should not keep the cache, if there's an error\n // Otherwise, this cause issues when when going back and\n // come again to the errored page.\n if (pathname !== '/_error') {\n this.components[route] = {\n Component,\n initial: true,\n props: initialProps,\n err,\n __N_SSG: initialProps && initialProps.__N_SSG,\n __N_SSP: initialProps && initialProps.__N_SSP\n };\n }\n this.components['/_app'] = {\n Component: App,\n styleSheets: []\n };\n // Backwards compat for Router.router.events\n // TODO: Should be remove the following major version as it was never documented\n this.events = Router.events;\n this.pageLoader = pageLoader;\n // if auto prerendered and dynamic route wait to update asPath\n // until after mount to prevent hydration mismatch\n const autoExportDynamic = (0, _isdynamic.isDynamicRoute)(pathname) && self.__NEXT_DATA__.autoExport;\n this.basePath = false || '';\n this.sub = subscription;\n this.clc = null;\n this._wrapApp = wrapApp;\n // make sure to ignore extra popState in safari on navigating\n // back from external site\n this.isSsr = true;\n this.isLocaleDomain = false;\n this.isReady = !!(self.__NEXT_DATA__.gssp || self.__NEXT_DATA__.gip || self.__NEXT_DATA__.isExperimentalCompile || self.__NEXT_DATA__.appGip && !self.__NEXT_DATA__.gsp || !autoExportDynamic && !self.location.search && !false);\n if (false) {}\n this.state = {\n route,\n pathname,\n query,\n asPath: autoExportDynamic ? pathname : as,\n isPreview: !!isPreview,\n locale: false ? 0 : undefined,\n isFallback\n };\n this._initialMatchesMiddlewarePromise = Promise.resolve(false);\n if (true) {\n // make sure \"as\" doesn't start with double slashes or else it can\n // throw an error as it's considered invalid\n if (!as.startsWith('//')) {\n // in order for `e.state` to work on the `onpopstate` event\n // we have to register the initial route upon initialization\n const options = {\n locale\n };\n const asPath = (0, _utils.getURL)();\n this._initialMatchesMiddlewarePromise = matchesMiddleware({\n router: this,\n locale,\n asPath\n }).then((matches)=>{\n // if middleware matches we leave resolving to the change function\n // as the server needs to resolve for correct priority\n ;\n options._shouldResolveHref = as !== pathname;\n this.changeState('replaceState', matches ? asPath : (0, _formaturl.formatWithValidation)({\n pathname: (0, _addbasepath.addBasePath)(pathname),\n query\n }), asPath, options);\n return matches;\n });\n }\n window.addEventListener('popstate', this.onPopState);\n // enable custom scroll restoration handling when available\n // otherwise fallback to browser's default handling\n if (false) {}\n }\n }\n}\nRouter.events = (0, _mitt.default)(); //# sourceMappingURL=router.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvcm91dGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLDRCQUE0Qjs7Ozs7Ozs7Ozs7OztJQThtQlpBLFNBQVM7ZUFBVEE7OztlQWlES0M7O0lBOWpCQ0MsaUJBQWlCO2VBQWpCQTs7Ozs7aURBdkZjO3lDQUs3QjtvQ0FDZ0M7K0VBQ0M7aURBQ0o7aURBQ0E7MkVBQ25CO21DQUNrRDt1Q0FDcEM7OENBQ0U7MENBQ0Q7d0NBQ0Y7dUNBQ087Z0RBQ0Y7dUNBQ1Q7dUNBQ0E7MENBQ0c7NENBQ0U7eUNBQ0g7eUNBQ0E7eUNBQ0E7d0NBQ0Q7aURBQ1M7b0RBQ0c7MkNBQ0g7d0NBQ1Q7bUNBQ0w7a0NBQ0Q7MkNBQ1M7aURBQzJCO3VDQUVyQjtBQUVwQyxJQUFJQztBQUNKLElBQUlDLEtBQStCLEVBQUUsRUFJcEM7QUFnQ0QsU0FBU0s7SUFDUCxPQUFPQyxPQUFPQyxNQUFNLENBQUMscUJBQTRCLENBQTVCLElBQUlDLE1BQU0sb0JBQVY7ZUFBQTtvQkFBQTtzQkFBQTtJQUEyQixJQUFHO1FBQ2pEQyxXQUFXO0lBQ2I7QUFDRjtBQVNPLGVBQWVYLGtCQUNwQlksT0FBa0M7SUFFbEMsTUFBTUMsV0FBVyxNQUFNQyxRQUFRQyxPQUFPLENBQ3BDSCxRQUFRSSxNQUFNLENBQUNDLFVBQVUsQ0FBQ0MsYUFBYTtJQUV6QyxJQUFJLENBQUNMLFVBQVUsT0FBTztJQUV0QixNQUFNLEVBQUVNLFVBQVVDLFVBQVUsRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxXQUFBQSxTQUFBQSxFQUFVVCxRQUFRVSxNQUFNO0lBQ3pELDZGQUE2RjtJQUM3RixNQUFNQyxZQUFZQyxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZSixjQUMxQkssQ0FBQUEsR0FBQUEs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QU87Z0JBQzVDLE1BQU1QLFNBQVNrVCxDQUFBQSxHQUFBQSxPQUFBQSxNQUFBQTtnQkFFZixJQUFJLENBQUNtRixnQ0FBZ0MsR0FBRzNaLGtCQUFrQjtvQkFDeERnQixRQUFRLElBQUk7b0JBQ1phO29CQUNBUDtnQkFDRixHQUFHaUUsSUFBSSxDQUFDLENBQUNZO29CQUNQLGtFQUFrRTtvQkFDbEUsc0RBQXNEOztvQkFDcER2RixRQUFnQnFOLGtCQUFrQixHQUFHdEwsT0FBT3hCO29CQUU5QyxJQUFJLENBQUM2TyxXQUFXLENBQ2QsZ0JBQ0E3SixVQUNJN0UsU0FDQXFOLENBQUFBLEdBQUFBLFdBQUFBLG9CQUFvQixFQUFDO3dCQUNuQnhOLFVBQVVRLENBQUFBLEdBQUFBLGFBQUFBLFdBQUFBLEVBQVlSO3dCQUN0QjJFO29CQUNGLElBQ0p4RSxRQUNBVjtvQkFFRixPQUFPdUY7Z0JBQ1Q7WUFDRjtZQUVBc0IsT0FBT21TLGdCQUFnQixDQUFDLFlBQVksSUFBSSxDQUFDZCxVQUFVO1lBRW5ELDJEQUEyRDtZQUMzRCxtREFBbUQ7WUFDbkQsSUFBSTVZLEtBQXFDLEVBQUUsRUFJMUM7UUFDSDtJQUNGO0FBeXJERjtBQWo0RHFCSCxPQTZDWjRQLE1BQUFBLEdBQW1DbUssQ0FBQUEsR0FBQUEsTUFBQUEsT0FBSSIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL3NoYXJlZC9saWIvcm91dGVyL3JvdXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRG9tYWluTG9jYWxlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2NvbmZpZydcbmltcG9ydCB0eXBlIHsgTWl0dEVtaXR0ZXIgfSBmcm9tICcuLi9taXR0J1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRVcmxRdWVyeSB9IGZyb20gJ3F1ZXJ5c3RyaW5nJ1xuaW1wb3J0IHR5cGUgeyBSb3V0ZXJFdmVudCB9IGZyb20gJy4uLy4uLy4uL2NsaWVudC9yb3V0ZXInXG5pbXBvcnQgdHlwZSB7IFN0eWxlU2hlZXRUdXBsZSB9IGZyb20gJy4uLy4uLy4uL2NsaWVudC9wYWdlLWxvYWRlcidcbmltcG9ydCB0eXBlIHsgVXJsT2JqZWN0IH0gZnJvbSAndXJsJ1xuaW1wb3J0IHR5cGUgUGFnZUxvYWRlciBmcm9tICcuLi8uLi8uLi9jbGllbnQvcGFnZS1sb2FkZXInXG5pbXBvcnQgdHlwZSB7IEFwcENvbnRleHRUeXBlLCBOZXh0UGFnZUNvbnRleHQsIE5FWFRfREFUQSB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHsgcmVtb3ZlVHJhaWxpbmdTbGFzaCB9IGZyb20gJy4vdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoJ1xuaW1wb3J0IHtcbiAgZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCxcbiAgaXNBc3NldEVycm9yLFxuICBtYXJrQXNzZXRFcnJvcixcbn0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L3JvdXRlLWxvYWRlcidcbmltcG9ydCB7IGhhbmRsZUNsaWVudFNjcmlwdExvYWQgfSBmcm9tICcuLi8uLi8uLi9jbGllbnQvc2NyaXB0J1xuaW1wb3J0IGlzRXJyb3IsIHsgZ2V0UHJvcGVyRXJyb3IgfSBmcm9tICcuLi8uLi8uLi9saWIvaXMtZXJyb3InXG5pbXBvcnQgeyBkZW5vcm1hbGl6ZVBhZ2VQYXRoIH0gZnJvbSAnLi4vcGFnZS1wYXRoL2Rlbm9ybWFsaXplLXBhZ2UtcGF0aCdcbmltcG9ydCB7IG5vcm1hbGl6ZUxvY2FsZVBhdGggfSBmcm9tICcuLi9pMThuL25vcm1hbGl6ZS1sb2NhbGUtcGF0aCdcbmltcG9ydCBtaXR0IGZyb20gJy4uL21pdHQnXG5pbXBvcnQgeyBnZXRMb2NhdGlvbk9yaWdpbiwgZ2V0VVJMLCBsb2FkR2V0SW5pdGlhbFByb3BzLCBTVCB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHsgaXNEeW5hbWljUm91dGUgfSBmcm9tICcuL3V0aWxzL2lzLWR5bmFtaWMnXG5pbXBvcnQgeyBwYXJzZVJlbGF0aXZlVXJsIH0gZnJvbSAnLi91dGlscy9wYXJzZS1yZWxhdGl2ZS11cmwnXG5pbXBvcnQgeyBnZXRSb3V0ZU1hdGNoZXIgfSBmcm9tICcuL3V0aWxzL3JvdXRlLW1hdGNoZXInXG5pbXBvcnQgeyBnZXRSb3V0ZVJlZ2V4IH0gZnJvbSAnLi91dGlscy9yb3V0ZS1yZWdleCdcbmltcG9ydCB7IGZvcm1hdFdpdGhWYWxpZGF0aW9uIH0gZnJvbSAnLi91dGlscy9mb3JtYXQtdXJsJ1xuaW1wb3J0IHsgZGV0ZWN0RG9tYWluTG9jYWxlIH0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L2RldGVjdC1kb21haW4tbG9jYWxlJ1xuaW1wb3J0IHsgcGFyc2VQYXRoIH0gZnJvbSAnLi91dGlscy9wYXJzZS1wYXRoJ1xuaW1wb3J0IHsgYWRkTG9jYWxlIH0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L2FkZC1sb2NhbGUnXG5pbXBvcnQgeyByZW1vdmVMb2NhbGUgfSBmcm9tICcuLi8uLi8uLi9jbGllbnQvcmVtb3ZlLWxvY2FsZSdcbmltcG9ydCB7IHJlbW92ZUJhc2VQYXRoIH0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L3JlbW92ZS1iYXNlLXBhdGgnXG5pbXBvcnQgeyBhZGRCYXNlUGF0aCB9IGZyb20gJy4uLy4uLy4uL2NsaWVudC9hZGQtYmFzZS1wYXRoJ1xuaW1wb3J0IHsgaGFzQmFzZVBhdGggfSBmcm9tICcuLi8uLi8uLi9jbGllbnQvaGFzLWJhc2UtcGF0aCdcbmltcG9ydCB7IHJlc29sdmVIcmVmIH0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L3Jlc29sdmUtaHJlZidcbmltcG9ydCB7IGlzQVBJUm91dGUgfSBmcm9tICcuLi8uLi8uLi9saWIvaXMtYXBpLXJvdXRlJ1xuaW1wb3J0IHsgZ2V0TmV4dFBhdGhuYW1lSW5mbyB9IGZyb20gJy4vdXRpbHMvZ2V0LW5leHQtcGF0aG5hbWUtaW5mbydcbmltcG9ydCB7IGZvcm1hdE5leHRQYXRobmFtZUluZm8gfSBmcm9tICcuL3V0aWxzL2Zvcm1hdC1uZXh0LXBhdGhuYW1lLWluZm8nXG5pbXBvcnQgeyBjb21wYXJlUm91dGVyU3RhdGVzIH0gZnJvbSAnLi91dGlscy9jb21wYXJlLXN0YXRlcydcbmltcG9ydCB7IGlzTG9jYWxVUkwgfSBmcm9tICcuL3V0aWxzL2lzLWxvY2FsLXVybCdcbmltcG9ydCB7IGlzQm90IH0gZnJvbSAnLi91dGlscy9pcy1ib3QnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSAnLi91dGlscy9vbWl0J1xuaW1wb3J0IHsgaW50ZXJwb2xhdGVBcyB9IGZyb20gJy4vdXRpbHMvaW50ZXJwb2xhdGUtYXMnXG5pbXBvcnQgeyBkaXNhYmxlU21vb3RoU2Nyb2xsRHVyaW5nUm91dGVUcmFuc2l0aW9uIH0gZnJvbSAnLi91dGlscy9kaXNhYmxlLXNtb290aC1zY3JvbGwnXG5pbXBvcnQgdHlwZSB7IFBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9yZXF1ZXN0L3BhcmFtcydcbmltcG9ydCB7IE1BVENIRURfUEFUSF9IRUFERVIgfSBmcm9tICcuLi8uLi8uLi9saWIvY29uc3RhbnRzJ1xuXG5sZXQgcmVzb2x2ZVJld3JpdGVzOiB0eXBlb2YgaW1wb3J0KCcuL3V0aWxzL3Jlc29sdmUtcmV3cml0ZXMnKS5kZWZhdWx0XG5pZiAocHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUykge1xuICByZXNvbHZlUmV3cml0ZXMgPSAoXG4gICAgcmVxdWlyZSgnLi91dGlscy9yZXNvbHZlLXJld3JpdGVzJykgYXMgdHlwZW9mIGltcG9ydCgnLi91dGlscy9yZXNvbHZlLXJld3JpdGVzJylcbiAgKS5kZWZhdWx0XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgLyogcHJvZCAqL1xuICAgIF9fTkVYVF9EQVRBX186IE5FWFRfREFUQVxuICB9XG59XG5cbmludGVyZmFjZSBSb3V0ZVByb3BlcnRpZXMge1xuICBzaGFsbG93OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBUcmFuc2l0aW9uT3B0aW9ucyB7XG4gIHNoYWxsb3c/OiBib29sZWFuXG4gIGxvY2FsZT86IHN0cmluZyB8IGZhbHNlXG4gIHNjcm9sbD86IGJvb2xlYW5cbiAgdW5zdGFibGVfc2tpcENsaWVudENhY2hlPzogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgTmV4dEhpc3RvcnlTdGF0ZSB7XG4gIHVybDogc3RyaW5nXG4gIGFzOiBzdHJpbmdcbiAgb3B0aW9uczogVHJhbnNpdGlvbk9wdGlvbnNcbn1cblxuZXhwb3J0IHR5cGUgSGlzdG9yeVN0YXRlID1cbiAgfCBudWxsXG4gIHwgeyBfX05BOiB0cnVlOyBfX04/OiBmYWxzZSB9XG4gIHwgeyBfX046IGZhbHNlOyBfX05BPzogZmFsc2UgfVxuICB8ICh7IF9fTkE/OiBmYWxzZTsgX19OOiB0cnVlOyBrZXk6IHN0cmluZyB9ICYgTmV4dEhpc3RvcnlTdGF0ZSlcblxuZnVuY3Rpb24gYnVpbGRDYW5jZWxsYXRpb25FcnJvcigpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdSb3V0ZSBDYW5jZWxsZWQnKSwge1xuICAgIGNhbmNlbGxlZDogdHJ1ZSxcbiAgfSlcbn1cblxuaW50ZXJmYWNlIE1pZGRsZXdhcmVFZmZlY3RQYXJhbXM8VCBleHRlbmRzIEZldGNoRGF0YU91dHB1dD4ge1xuICBmZXRjaERhdGE/OiAoKSA9PiBQcm9taXNlPFQ+XG4gIGxvY2FsZT86IHN0cmluZ1xuICBhc1BhdGg6IHN0cmluZ1xuICByb3V0ZXI6IFJvdXRlclxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWF0Y2hlc01pZGRsZXdhcmU8VCBleHRlbmRzIEZldGNoRGF0YU91dHB1dD4oXG4gIG9wdGlvbnM6IE1pZGRsZXdhcmVFZmZlY3RQYXJhbXM8VD5cbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBtYXRjaGVycyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShcbiAgICBvcHRpb25zLnJvdXRlci5wYWdlTG9hZGVyLmdldE1pZGRsZXdhcmUoKVxuICApXG4gIGlmICghbWF0Y2hlcnMpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHsgcGF0aG5hbWU6IGFzUGF0aG5hbWUgfSA9IHBhcnNlUGF0aChvcHRpb25zLmFzUGF0aClcbiAgLy8gcmVtb3ZlIGJhc2VQYXRoIGZpcnN0IHNpbmNlIHBhdGggcHJlZml4IGhhcyB0byBiZSBpbiB0aGUgb3JkZXIgb2YgYC8ke2Jhc2VQYXRofS8ke2xvY2FsZX1gXG4gIGNvbnN0IGNsZWFuZWRBcyA9IGhhc0Jhc2VQYXRoKGFzUGF0aG5hbWUpXG4gICAgPyByZW1vdmVCYXNlUGF0aChhc1BhdGhuYW1lKVxuICAgIDogYXNQYXRobmFtZVxuICBjb25zdCBhc1dpdGhCYXNlUGF0aEFuZExvY2FsZSA9IGFkZEJhc2VQYXRoKFxuICAgIGFkZExvY2FsZShjbGVhbmVkQXMsIG9wdGlvbnMubG9jYWxlKVxuICApXG5cbiAgLy8gQ2hlY2sgb25seSBwYXRoIG1hdGNoIG9uIGNsaWVudC4gTWF0Y2hpbmcgXCJoYXNcIiBzaG91bGQgYmUgZG9uZSBvbiBzZXJ2ZXJcbiAgLy8gd2hlcmUgd2UgY2FuIGFjY2VzcyBtb3JlIGluZm8gc3VjaCBhcyBoZWFkZXJzLCBIdHRwT25seSBjb29raWUsIGV0Yy5cbiAgcmV0dXJuIG1hdGNoZXJzLnNvbWUoKG0pID0+XG4gICAgbmV3IFJlZ0V4cChtLnJlZ2V4cCkudGVzdChhc1dpdGhCYXNlUGF0aEFuZExvY2FsZSlcbiAgKVxufVxuXG5mdW5jdGlvbiBzdHJpcE9yaWdpbih1cmw6IHN0cmluZykge1xuICBjb25zdCBvcmlnaW4gPSBnZXRMb2NhdGlvbk9yaWdpbigpXG5cbiAgcmV0dXJuIHVybC5zdGFydHNXaXRoKG9yaWdpbikgPyB1cmwuc3Vic3RyaW5nKG9yaWdpbi5sZW5ndGgpIDogdXJsXG59XG5cbmZ1bmN0aW9uIHByZXBhcmVVcmxBcyhyb3V0ZXI6IE5leHRSb3V0ZXIsIHVybDogVXJsLCBhcz86IFVybCkge1xuICAvLyBJZiB1cmwgYW5kIGFzIHByb3ZpZGVkIGFzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbixcbiAgLy8gd2UnbGwgZm9ybWF0IHRoZW0gaW50byB0aGUgc3RyaW5nIHZlcnNpb24gaGVyZS5cbiAgbGV0IFtyZXNvbHZlZEhyZWYsIHJlc29sdmVkQXNdID0gcmVzb2x2ZUhyZWYocm91dGVyLCB1cmwsIHRydWUpXG4gIGNvbnN0IG9yaWdpbiA9IGdldExvY2F0aW9uT3JpZ2luKClcbiAgY29uc3QgaHJlZldhc0Fic29sdXRlID0gcmVzb2x2ZWRIcmVmLnN0YXJ0c1dpdGgob3JpZ2luKVxuICBjb25zdCBhc1dhc0Fic29sdXRlID0gcmVzb2x2ZWRBcyAmJiByZXNvbHZlZEFzLnN0YXJ0c1dpdGgob3JpZ2luKVxuXG4gIHJlc29sdmVkSHJlZiA9IHN0cmlwT3JpZ2luKHJlc29sdmVkSHJlZilcbiAgcmVzb2x2ZWRBcyA9IHJlc29sdmVkQXMgPyBzdHJpcE9yaWdpbihyZXNvbHZlZEFzKSA6IHJlc29sdmVkQXNcblxuICBjb25zdCBwcmVwYXJlZFVybCA9IGhyZWZXYXNBYnNvbHV0ZSA/IHJlc29sdmVkSHJlZiA6IGFkZEJhc2VQYXRoKHJlc29sdmVkSHJlZilcbiAgY29uc3QgcHJlcGFyZWRBcyA9IGFzXG4gICAgPyBzdHJpcE9yaWdpbihyZXNvbHZlSHJlZihyb3V0ZXIsIGFzKSlcbiAgICA6IHJlc29sdmVkQXMgfHwgcmVzb2x2ZWRIcmVmXG5cbiAgcmV0dXJuIHtcbiAgICB1cmw6IHByZXBhcmVkVXJsLFxuICAgIGFzOiBhc1dhc0Fic29sdXRlID8gcHJlcGFyZWRBcyA6IGFkZEJhc2VQYXRoKHByZXBhcmVkQXMpLFxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEeW5hbWljUm91dGUocGF0aG5hbWU6IHN0cmluZywgcGFnZXM6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IGNsZWFuUGF0aG5hbWUgPSByZW1vdmVUcmFpbGluZ1NsYXNoKGRlbm9ybWFsaXplUGFnZVBhdGgocGF0aG5hbWUpKVxuICBpZiAoY2xlYW5QYXRobmFtZSA9PT0gJy80MDQnIHx8IGNsZWFuUGF0aG5hbWUgPT09ICcvX2Vycm9yJykge1xuICAgIHJldHVybiBwYXRobmFtZVxuICB9XG5cbiAgLy8gaGFuZGxlIHJlc29sdmluZyBocmVmIGZvciBkeW5hbWljIHJvdXRlc1xuICBpZiAoIXBhZ2VzLmluY2x1ZGVzKGNsZWFuUGF0aG5hbWUpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFycmF5LWNhbGxiYWNrLXJldHVyblxuICAgIHBhZ2VzLnNvbWUoKHBhZ2UpID0+IHtcbiAgICAgIGlmIChpc0R5bmFtaWNSb3V0ZShwYWdlKSAmJiBnZXRSb3V0ZVJlZ2V4KHBhZ2UpLnJlLnRlc3QoY2xlYW5QYXRobmFtZSkpIHtcbiAgICAgICAgcGF0aG5hbWUgPSBwYWdlXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICByZXR1cm4gcmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZSlcbn1cblxuZnVuY3Rpb24gZ2V0TWlkZGxld2FyZURhdGE8VCBleHRlbmRzIEZldGNoRGF0YU91dHB1dD4oXG4gIHNvdXJjZTogc3RyaW5nLFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4gIG9wdGlvbnM6IE1pZGRsZXdhcmVFZmZlY3RQYXJhbXM8VD5cbikge1xuICBjb25zdCBuZXh0Q29uZmlnID0ge1xuICAgIGJhc2VQYXRoOiBvcHRpb25zLnJvdXRlci5iYXNlUGF0aCxcbiAgICBpMThuOiB7IGxvY2FsZXM6IG9wdGlvbnMucm91dGVyLmxvY2FsZXMgfSxcbiAgICB0cmFpbGluZ1NsYXNoOiBCb29sZWFuKHByb2Nlc3MuZW52Ll9fTkVYVF9UUkFJTElOR19TTEFTSCksXG4gIH1cbiAgY29uc3QgcmV3cml0ZUhlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LW5leHRqcy1yZXdyaXRlJylcblxuICBsZXQgcmV3cml0ZVRhcmdldCA9XG4gICAgcmV3cml0ZUhlYWRlciB8fCByZXNwb25zZS5oZWFkZXJzLmdldCgneC1uZXh0anMtbWF0Y2hlZC1wYXRoJylcblxuICBjb25zdCBtYXRjaGVkUGF0aCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KE1BVENIRURfUEFUSF9IRUFERVIpXG5cbiAgaWYgKFxuICAgIG1hdGNoZWRQYXRoICYmXG4gICAgIXJld3JpdGVUYXJnZXQgJiZcbiAgICAhbWF0Y2hlZFBhdGguaW5jbHVkZXMoJ19fbmV4dF9kYXRhX2NhdGNoYWxsJykgJiZcbiAgICAhbWF0Y2hlZFBhdGguaW5jbHVkZXMoJy9fZXJyb3InKSAmJlxuICAgICFtYXRjaGVkUGF0aC5pbmNsdWRlcygnLzQwNCcpXG4gICkge1xuICAgIC8vIGxldmVyYWdlIHgtbWF0Y2hlZC1wYXRoIHRvIGRldGVjdCBuZXh0LmNvbmZpZy5qcyByZXdyaXRlc1xuICAgIHJld3JpdGVUYXJnZXQgPSBtYXRjaGVkUGF0aFxuICB9XG5cbiAgaWYgKHJld3JpdGVUYXJnZXQpIHtcbiAgICBpZiAoXG4gICAgICByZXdyaXRlVGFyZ2V0LnN0YXJ0c1dpdGgoJy8nKSB8fFxuICAgICAgcHJvY2Vzcy5lbnYuX19ORVhUX0VYVEVSTkFMX01JRERMRVdBUkVfUkVXUklURV9SRVNPTFZFXG4gICAgKSB7XG4gICAgICBjb25zdCBwYXJzZWRSZXdyaXRlVGFyZ2V0ID0gcGFyc2VSZWxhdGl2ZVVybChyZXdyaXRlVGFyZ2V0KVxuICAgICAgY29uc3QgcGF0aG5hbWVJbmZvID0gZ2V0TmV4dFBhdGhuYW1lSW5mbyhwYXJzZWRSZXdyaXRlVGFyZ2V0LnBhdGhuYW1lLCB7XG4gICAgICAgIG5leHRDb25maWcsXG4gICAgICAgIHBhcnNlRGF0YTogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICAgIGxldCBmc1BhdGhuYW1lID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZUluZm8ucGF0aG5hbWUpXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICBvcHRpb25zLnJvdXRlci5wYWdlTG9hZGVyLmdldFBhZ2VMaXN0KCksXG4gICAgICAgIGdldENsaWVudEJ1aWxkTWFuaWZlc3QoKSxcbiAgICAgIF0pLnRoZW4oKFtwYWdlcywgeyBfX3Jld3JpdGVzOiByZXdyaXRlcyB9XTogYW55KSA9PiB7XG4gICAgICAgIGxldCBhcyA9IGFkZExvY2FsZShwYXRobmFtZUluZm8ucGF0aG5hbWUsIHBhdGhuYW1lSW5mby5sb2NhbGUpXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGlzRHluYW1pY1JvdXRlKGFzKSB8fFxuICAgICAgICAgICghcmV3cml0ZUhlYWRlciAmJlxuICAgICAgICAgICAgcGFnZXMuaW5jbHVkZXMoXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZUxvY2FsZVBhdGgocmVtb3ZlQmFzZVBhdGgoYXMpLCBvcHRpb25zLnJvdXRlci5sb2NhbGVzKVxuICAgICAgICAgICAgICAgIC5wYXRobmFtZVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkU291cmNlID0gZ2V0TmV4dFBhdGhuYW1lSW5mbyhcbiAgICAgICAgICAgIHBhcnNlUmVsYXRpdmVVcmwoc291cmNlKS5wYXRobmFtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmV4dENvbmZpZzogcHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFU1xuICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgOiBuZXh0Q29uZmlnLFxuICAgICAgICAgICAgICBwYXJzZURhdGE6IHRydWUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuXG4gICAgICAgICAgYXMgPSBhZGRCYXNlUGF0aChwYXJzZWRTb3VyY2UucGF0aG5hbWUpXG4gICAgICAgICAgcGFyc2VkUmV3cml0ZVRhcmdldC5wYXRobmFtZSA9IGFzXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVSZXdyaXRlcyhcbiAgICAgICAgICAgIGFzLFxuICAgICAgICAgICAgcGFnZXMsXG4gICAgICAgICAgICByZXdyaXRlcyxcbiAgICAgICAgICAgIHBhcnNlZFJld3JpdGVUYXJnZXQucXVlcnksXG4gICAgICAgICAgICAocGF0aDogc3RyaW5nKSA9PiByZXNvbHZlRHluYW1pY1JvdXRlKHBhdGgsIHBhZ2VzKSxcbiAgICAgICAgICAgIG9wdGlvbnMucm91dGVyLmxvY2FsZXNcbiAgICAgICAgICApXG5cbiAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoZWRQYWdlKSB7XG4gICAgICAgICAgICBwYXJzZWRSZXdyaXRlVGFyZ2V0LnBhdGhuYW1lID0gcmVzdWx0LnBhcnNlZEFzLnBhdGhuYW1lXG4gICAgICAgICAgICBhcyA9IHBhcnNlZFJld3JpdGVUYXJnZXQucGF0aG5hbWVcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocGFyc2VkUmV3cml0ZVRhcmdldC5xdWVyeSwgcmVzdWx0LnBhcnNlZEFzLnF1ZXJ5KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghcGFnZXMuaW5jbHVkZXMoZnNQYXRobmFtZSkpIHtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZFBhdGhuYW1lID0gcmVzb2x2ZUR5bmFtaWNSb3V0ZShmc1BhdGhuYW1lLCBwYWdlcylcblxuICAgICAgICAgIGlmIChyZXNvbHZlZFBhdGhuYW1lICE9PSBmc1BhdGhuYW1lKSB7XG4gICAgICAgICAgICBmc1BhdGhuYW1lID0gcmVzb2x2ZWRQYXRobmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkSHJlZiA9ICFwYWdlcy5pbmNsdWRlcyhmc1BhdGhuYW1lKVxuICAgICAgICAgID8gcmVzb2x2ZUR5bmFtaWNSb3V0ZShcbiAgICAgICAgICAgICAgbm9ybWFsaXplTG9jYWxlUGF0aChcbiAgICAgICAgICAgICAgICByZW1vdmVCYXNlUGF0aChwYXJzZWRSZXdyaXRlVGFyZ2V0LnBhdGhuYW1lKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLnJvdXRlci5sb2NhbGVzXG4gICAgICAgICAgICAgICkucGF0aG5hbWUsXG4gICAgICAgICAgICAgIHBhZ2VzXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBmc1BhdGhuYW1lXG5cbiAgICAgICAgaWYgKGlzRHluYW1pY1JvdXRlKHJlc29sdmVkSHJlZikpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaGVzID0gZ2V0Um91dGVNYXRjaGVyKGdldFJvdXRlUmVnZXgocmVzb2x2ZWRIcmVmKSkoYXMpXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJzZWRSZXdyaXRlVGFyZ2V0LnF1ZXJ5LCBtYXRjaGVzIHx8IHt9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAncmV3cml0ZScgYXMgY29uc3QsXG4gICAgICAgICAgcGFyc2VkQXM6IHBhcnNlZFJld3JpdGVUYXJnZXQsXG4gICAgICAgICAgcmVzb2x2ZWRIcmVmLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBzcmMgPSBwYXJzZVBhdGgoc291cmNlKVxuICAgIGNvbnN0IHBhdGhuYW1lID0gZm9ybWF0TmV4dFBhdGhuYW1lSW5mbyh7XG4gICAgICAuLi5nZXROZXh0UGF0aG5hbWVJbmZvKHNyYy5wYXRobmFtZSwgeyBuZXh0Q29uZmlnLCBwYXJzZURhdGE6IHRydWUgfSksXG4gICAgICBkZWZhdWx0TG9jYWxlOiBvcHRpb25zLnJvdXRlci5kZWZhdWx0TG9jYWxlLFxuICAgICAgYnVpbGRJZDogJycsXG4gICAgfSlcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgdHlwZTogJ3JlZGlyZWN0LWV4dGVybmFsJyBhcyBjb25zdCxcbiAgICAgIGRlc3RpbmF0aW9uOiBgJHtwYXRobmFtZX0ke3NyYy5xdWVyeX0ke3NyYy5oYXNofWAsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHJlZGlyZWN0VGFyZ2V0ID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtbmV4dGpzLXJlZGlyZWN0JylcblxuICBpZiAocmVkaXJlY3RUYXJnZXQpIHtcbiAgICBpZiAocmVkaXJlY3RUYXJnZXQuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBjb25zdCBzcmMgPSBwYXJzZVBhdGgocmVkaXJlY3RUYXJnZXQpXG4gICAgICBjb25zdCBwYXRobmFtZSA9IGZvcm1hdE5leHRQYXRobmFtZUluZm8oe1xuICAgICAgICAuLi5nZXROZXh0UGF0aG5hbWVJbmZvKHNyYy5wYXRobmFtZSwgeyBuZXh0Q29uZmlnLCBwYXJzZURhdGE6IHRydWUgfSksXG4gICAgICAgIGRlZmF1bHRMb2NhbGU6IG9wdGlvbnMucm91dGVyLmRlZmF1bHRMb2NhbGUsXG4gICAgICAgIGJ1aWxkSWQ6ICcnLFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgIHR5cGU6ICdyZWRpcmVjdC1pbnRlcm5hbCcgYXMgY29uc3QsXG4gICAgICAgIG5ld0FzOiBgJHtwYXRobmFtZX0ke3NyYy5xdWVyeX0ke3NyYy5oYXNofWAsXG4gICAgICAgIG5ld1VybDogYCR7cGF0aG5hbWV9JHtzcmMucXVlcnl9JHtzcmMuaGFzaH1gLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHR5cGU6ICdyZWRpcmVjdC1leHRlcm5hbCcgYXMgY29uc3QsXG4gICAgICBkZXN0aW5hdGlvbjogcmVkaXJlY3RUYXJnZXQsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyB0eXBlOiAnbmV4dCcgYXMgY29uc3QgfSlcbn1cblxuaW50ZXJmYWNlIFdpdGhNaWRkbGV3YXJlRWZmZWN0c091dHB1dCBleHRlbmRzIEZldGNoRGF0YU91dHB1dCB7XG4gIGVmZmVjdDogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBnZXRNaWRkbGV3YXJlRGF0YT4+XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdpdGhNaWRkbGV3YXJlRWZmZWN0czxUIGV4dGVuZHMgRmV0Y2hEYXRhT3V0cHV0PihcbiAgb3B0aW9uczogTWlkZGxld2FyZUVmZmVjdFBhcmFtczxUPlxuKTogUHJvbWlzZTxXaXRoTWlkZGxld2FyZUVmZmVjdHNPdXRwdXQgfCBudWxsPiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBhd2FpdCBtYXRjaGVzTWlkZGxld2FyZShvcHRpb25zKVxuICBpZiAoIW1hdGNoZXMgfHwgIW9wdGlvbnMuZmV0Y2hEYXRhKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBvcHRpb25zLmZldGNoRGF0YSgpXG5cbiAgY29uc3QgZWZmZWN0ID0gYXdhaXQgZ2V0TWlkZGxld2FyZURhdGEoZGF0YS5kYXRhSHJlZiwgZGF0YS5yZXNwb25zZSwgb3B0aW9ucylcblxuICByZXR1cm4ge1xuICAgIGRhdGFIcmVmOiBkYXRhLmRhdGFIcmVmLFxuICAgIGpzb246IGRhdGEuanNvbixcbiAgICByZXNwb25zZTogZGF0YS5yZXNwb25zZSxcbiAgICB0ZXh0OiBkYXRhLnRleHQsXG4gICAgY2FjaGVLZXk6IGRhdGEuY2FjaGVLZXksXG4gICAgZWZmZWN0LFxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFVybCA9IFVybE9iamVjdCB8IHN0cmluZ1xuXG5leHBvcnQgdHlwZSBCYXNlUm91dGVyID0ge1xuICByb3V0ZTogc3RyaW5nXG4gIHBhdGhuYW1lOiBzdHJpbmdcbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gIGFzUGF0aDogc3RyaW5nXG4gIGJhc2VQYXRoOiBzdHJpbmdcbiAgbG9jYWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGxvY2FsZXM/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICBkZWZhdWx0TG9jYWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGRvbWFpbkxvY2FsZXM/OiByZWFkb25seSBEb21haW5Mb2NhbGVbXSB8IHVuZGVmaW5lZFxuICBpc0xvY2FsZURvbWFpbjogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBOZXh0Um91dGVyID0gQmFzZVJvdXRlciAmXG4gIFBpY2s8XG4gICAgUm91dGVyLFxuICAgIHwgJ3B1c2gnXG4gICAgfCAncmVwbGFjZSdcbiAgICB8ICdyZWxvYWQnXG4gICAgfCAnYmFjaydcbiAgICB8ICdmb3J3YXJkJ1xuICAgIHwgJ3ByZWZldGNoJ1xuICAgIHwgJ2JlZm9yZVBvcFN0YXRlJ1xuICAgIHwgJ2V2ZW50cydcbiAgICB8ICdpc0ZhbGxiYWNrJ1xuICAgIHwgJ2lzUmVhZHknXG4gICAgfCAnaXNQcmV2aWV3J1xuICA+XG5cbmV4cG9ydCB0eXBlIFByZWZldGNoT3B0aW9ucyA9IHtcbiAgcHJpb3JpdHk/OiBib29sZWFuXG4gIGxvY2FsZT86IHN0cmluZyB8IGZhbHNlXG4gIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgUHJpdmF0ZVJvdXRlSW5mbyA9XG4gIHwgKE9taXQ8Q29tcGxldGVQcml2YXRlUm91dGVJbmZvLCAnc3R5bGVTaGVldHMnPiAmIHsgaW5pdGlhbDogdHJ1ZSB9KVxuICB8IENvbXBsZXRlUHJpdmF0ZVJvdXRlSW5mb1xuXG5leHBvcnQgdHlwZSBDb21wbGV0ZVByaXZhdGVSb3V0ZUluZm8gPSB7XG4gIENvbXBvbmVudDogQ29tcG9uZW50VHlwZVxuICBzdHlsZVNoZWV0czogU3R5bGVTaGVldFR1cGxlW11cbiAgX19OX1NTRz86IGJvb2xlYW5cbiAgX19OX1NTUD86IGJvb2xlYW5cbiAgcHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gIGVycj86IEVycm9yXG4gIGVycm9yPzogYW55XG4gIHJvdXRlPzogc3RyaW5nXG4gIHJlc29sdmVkQXM/OiBzdHJpbmdcbiAgcXVlcnk/OiBQYXJzZWRVcmxRdWVyeVxufVxuXG5leHBvcnQgdHlwZSBBcHBQcm9wcyA9IFBpY2s8Q29tcGxldGVQcml2YXRlUm91dGVJbmZvLCAnQ29tcG9uZW50JyB8ICdlcnInPiAmIHtcbiAgcm91dGVyOiBSb3V0ZXJcbn0gJiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG5leHBvcnQgdHlwZSBBcHBDb21wb25lbnQgPSBDb21wb25lbnRUeXBlPEFwcFByb3BzPlxuXG50eXBlIFN1YnNjcmlwdGlvbiA9IChcbiAgZGF0YTogUHJpdmF0ZVJvdXRlSW5mbyxcbiAgQXBwOiBBcHBDb21wb25lbnQsXG4gIHJlc2V0U2Nyb2xsOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsXG4pID0+IFByb21pc2U8dm9pZD5cblxudHlwZSBCZWZvcmVQb3BTdGF0ZUNhbGxiYWNrID0gKHN0YXRlOiBOZXh0SGlzdG9yeVN0YXRlKSA9PiBib29sZWFuXG5cbnR5cGUgQ29tcG9uZW50TG9hZENhbmNlbCA9ICgoKSA9PiB2b2lkKSB8IG51bGxcblxudHlwZSBIaXN0b3J5TWV0aG9kID0gJ3JlcGxhY2VTdGF0ZScgfCAncHVzaFN0YXRlJ1xuXG5jb25zdCBtYW51YWxTY3JvbGxSZXN0b3JhdGlvbiA9XG4gIHByb2Nlc3MuZW52Ll9fTkVYVF9TQ1JPTExfUkVTVE9SQVRJT04gJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgJ3Njcm9sbFJlc3RvcmF0aW9uJyBpbiB3aW5kb3cuaGlzdG9yeSAmJlxuICAhIShmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB2ID0gJ19fbmV4dCdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZXF1ZW5jZXNcbiAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHYsIHYpLCBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHYpLCB0cnVlXG4gICAgfSBjYXRjaCAobikge31cbiAgfSkoKVxuXG5jb25zdCBTU0dfREFUQV9OT1RfRk9VTkQgPSBTeW1ib2woJ1NTR19EQVRBX05PVF9GT1VORCcpXG5cbmZ1bmN0aW9uIGZldGNoUmV0cnkoXG4gIHVybDogc3RyaW5nLFxuICBhdHRlbXB0czogbnVtYmVyLFxuICBvcHRpb25zOiBQaWNrPFJlcXVlc3RJbml0LCAnbWV0aG9kJyB8ICdoZWFkZXJzJz5cbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgcmV0dXJuIGZldGNoKHVybCwge1xuICAgIC8vIENvb2tpZXMgYXJlIHJlcXVpcmVkIHRvIGJlIHByZXNlbnQgZm9yIE5leHQuanMnIFNTRyBcIlByZXZpZXcgTW9kZVwiLlxuICAgIC8vIENvb2tpZXMgbWF5IGFsc28gYmUgcmVxdWlyZWQgZm9yIGBnZXRTZXJ2ZXJTaWRlUHJvcHNgLlxuICAgIC8vXG4gICAgLy8gPiBgZmV0Y2hgIHdvbuKAmXQgc2VuZCBjb29raWVzLCB1bmxlc3MgeW91IHNldCB0aGUgY3JlZGVudGlhbHMgaW5pdFxuICAgIC8vID4gb3B0aW9uLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2hcbiAgICAvL1xuICAgIC8vID4gRm9yIG1heGltdW0gYnJvd3NlciBjb21wYXRpYmlsaXR5IHdoZW4gaXQgY29tZXMgdG8gc2VuZGluZyAmXG4gICAgLy8gPiByZWNlaXZpbmcgY29va2llcywgYWx3YXlzIHN1cHBseSB0aGUgYGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nYFxuICAgIC8vID4gb3B0aW9uIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgZGVmYXVsdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoI2NhdmVhdHNcbiAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICBtZXRob2Q6IG9wdGlvbnMubWV0aG9kIHx8ICdHRVQnLFxuICAgIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuaGVhZGVycywge1xuICAgICAgJ3gtbmV4dGpzLWRhdGEnOiAnMScsXG4gICAgfSksXG4gIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgcmV0dXJuICFyZXNwb25zZS5vayAmJiBhdHRlbXB0cyA+IDEgJiYgcmVzcG9uc2Uuc3RhdHVzID49IDUwMFxuICAgICAgPyBmZXRjaFJldHJ5KHVybCwgYXR0ZW1wdHMgLSAxLCBvcHRpb25zKVxuICAgICAgOiByZXNwb25zZVxuICB9KVxufVxuXG5pbnRlcmZhY2UgRmV0Y2hEYXRhT3V0cHV0IHtcbiAgZGF0YUhyZWY6IHN0cmluZ1xuICBqc29uOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbFxuICByZXNwb25zZTogUmVzcG9uc2VcbiAgdGV4dDogc3RyaW5nXG4gIGNhY2hlS2V5OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIEZldGNoTmV4dERhdGFQYXJhbXMge1xuICBkYXRhSHJlZjogc3RyaW5nXG4gIGlzU2VydmVyUmVuZGVyOiBib29sZWFuXG4gIHBhcnNlSlNPTjogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBoYXNNaWRkbGV3YXJlPzogYm9vbGVhblxuICBpbmZsaWdodENhY2hlOiBOZXh0RGF0YUNhY2hlXG4gIHBlcnNpc3RDYWNoZTogYm9vbGVhblxuICBpc1ByZWZldGNoOiBib29sZWFuXG4gIGlzQmFja2dyb3VuZD86IGJvb2xlYW5cbiAgdW5zdGFibGVfc2tpcENsaWVudENhY2hlPzogYm9vbGVhblxufVxuXG5mdW5jdGlvbiB0cnlUb1BhcnNlQXNKU09OKHRleHQ6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBmZXRjaE5leHREYXRhKHtcbiAgZGF0YUhyZWYsXG4gIGluZmxpZ2h0Q2FjaGUsXG4gIGlzUHJlZmV0Y2gsXG4gIGhhc01pZGRsZXdhcmUsXG4gIGlzU2VydmVyUmVuZGVyLFxuICBwYXJzZUpTT04sXG4gIHBlcnNpc3RDYWNoZSxcbiAgaXNCYWNrZ3JvdW5kLFxuICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUsXG59OiBGZXRjaE5leHREYXRhUGFyYW1zKTogUHJvbWlzZTxGZXRjaERhdGFPdXRwdXQ+IHtcbiAgY29uc3QgeyBocmVmOiBjYWNoZUtleSB9ID0gbmV3IFVSTChkYXRhSHJlZiwgd2luZG93LmxvY2F0aW9uLmhyZWYpXG4gIGNvbnN0IGdldERhdGEgPSAocGFyYW1zPzogeyBtZXRob2Q/OiAnSEVBRCcgfCAnR0VUJyB9KSA9PlxuICAgIGZldGNoUmV0cnkoZGF0YUhyZWYsIGlzU2VydmVyUmVuZGVyID8gMyA6IDEsIHtcbiAgICAgIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9IGFzIEhlYWRlcnNJbml0LFxuICAgICAgICBpc1ByZWZldGNoID8geyBwdXJwb3NlOiAncHJlZmV0Y2gnIH0gOiB7fSxcbiAgICAgICAgaXNQcmVmZXRjaCAmJiBoYXNNaWRkbGV3YXJlID8geyAneC1taWRkbGV3YXJlLXByZWZldGNoJzogJzEnIH0gOiB7fSxcbiAgICAgICAgcHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEXG4gICAgICAgICAgPyB7ICd4LWRlcGxveW1lbnQtaWQnOiBwcm9jZXNzLmVudi5ORVhUX0RFUExPWU1FTlRfSUQgfVxuICAgICAgICAgIDoge31cbiAgICAgICksXG4gICAgICBtZXRob2Q6IHBhcmFtcz8ubWV0aG9kID8/ICdHRVQnLFxuICAgIH0pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLm9rICYmIHBhcmFtcz8ubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAgICAgICByZXR1cm4geyBkYXRhSHJlZiwgcmVzcG9uc2UsIHRleHQ6ICcnLCBqc29uOiB7fSwgY2FjaGVLZXkgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS50aGVuKCh0ZXh0KSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGVuIHRoZSBkYXRhIHJlc3BvbnNlIGlzIGEgcmVkaXJlY3QgYmVjYXVzZSBvZiBhIG1pZGRsZXdhcmVcbiAgICAgICAgICAgICAqIHdlIGRvIG5vdCBjb25zaWRlciBpdCBhbiBlcnJvci4gVGhlIGhlYWRlcnMgbXVzdCBicmluZyB0aGVcbiAgICAgICAgICAgICAqIG1hcHBlZCBsb2NhdGlvbi5cbiAgICAgICAgICAgICAqIFRPRE86IENoYW5nZSB0aGUgc3RhdHVzIGNvZGUgaW4gdGhlIGhhbmRsZXIuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaGFzTWlkZGxld2FyZSAmJlxuICAgICAgICAgICAgICBbMzAxLCAzMDIsIDMwNywgMzA4XS5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YUhyZWYsIHJlc3BvbnNlLCB0ZXh0LCBqc29uOiB7fSwgY2FjaGVLZXkgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgaWYgKHRyeVRvUGFyc2VBc0pTT04odGV4dCk/Lm5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGRhdGFIcmVmLFxuICAgICAgICAgICAgICAgICAganNvbjogeyBub3RGb3VuZDogU1NHX0RBVEFfTk9UX0ZPVU5EIH0sXG4gICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICBjYWNoZUtleSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHN0YXRpYyBwcm9wc2ApXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2Ugc2hvdWxkIG9ubHkgdHJpZ2dlciBhIHNlcnZlci1zaWRlIHRyYW5zaXRpb24gaWYgdGhpcyB3YXNcbiAgICAgICAgICAgICAqIGNhdXNlZCBvbiBhIGNsaWVudC1zaWRlIHRyYW5zaXRpb24uIE90aGVyd2lzZSwgd2UnZCBnZXQgaW50b1xuICAgICAgICAgICAgICogYW4gaW5maW5pdGUgbG9vcC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCFpc1NlcnZlclJlbmRlcikge1xuICAgICAgICAgICAgICBtYXJrQXNzZXRFcnJvcihlcnJvcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YUhyZWYsXG4gICAgICAgICAgICBqc29uOiBwYXJzZUpTT04gPyB0cnlUb1BhcnNlQXNKU09OKHRleHQpIDogbnVsbCxcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIGNhY2hlS2V5LFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXBlcnNpc3RDYWNoZSB8fFxuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgfHxcbiAgICAgICAgICBkYXRhLnJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LW1pZGRsZXdhcmUtY2FjaGUnKSA9PT0gJ25vLWNhY2hlJ1xuICAgICAgICApIHtcbiAgICAgICAgICBkZWxldGUgaW5mbGlnaHRDYWNoZVtjYWNoZUtleV1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGlmICghdW5zdGFibGVfc2tpcENsaWVudENhY2hlKSB7XG4gICAgICAgICAgZGVsZXRlIGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIGNocm9tZVxuICAgICAgICAgIGVyci5tZXNzYWdlID09PSAnRmFpbGVkIHRvIGZldGNoJyB8fFxuICAgICAgICAgIC8vIGZpcmVmb3hcbiAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gJ05ldHdvcmtFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2UuJyB8fFxuICAgICAgICAgIC8vIHNhZmFyaVxuICAgICAgICAgIGVyci5tZXNzYWdlID09PSAnTG9hZCBmYWlsZWQnXG4gICAgICAgICkge1xuICAgICAgICAgIG1hcmtBc3NldEVycm9yKGVycilcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH0pXG5cbiAgLy8gd2hlbiBza2lwcGluZyBjbGllbnQgY2FjaGUgd2Ugd2FpdCB0byB1cGRhdGVcbiAgLy8gaW5mbGlnaHQgY2FjaGUgdW50aWwgc3VjY2Vzc2Z1bCBkYXRhIHJlc3BvbnNlXG4gIC8vIHRoaXMgYWxsb3dzIHJhY2luZyBjbGljayBldmVudCB3aXRoIGZldGNoaW5nIG5ld2VyIGRhdGFcbiAgLy8gd2l0aG91dCBibG9ja2luZyBuYXZpZ2F0aW9uIHdoZW4gc3RhbGUgZGF0YSBpcyBhdmFpbGFibGVcbiAgaWYgKHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSAmJiBwZXJzaXN0Q2FjaGUpIHtcbiAgICByZXR1cm4gZ2V0RGF0YSh7fSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgaWYgKGRhdGEucmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtbWlkZGxld2FyZS1jYWNoZScpICE9PSAnbm8tY2FjaGUnKSB7XG4gICAgICAgIC8vIG9ubHkgdXBkYXRlIGNhY2hlIGlmIG5vdCBtYXJrZWQgYXMgbm8tY2FjaGVcbiAgICAgICAgaW5mbGlnaHRDYWNoZVtjYWNoZUtleV0gPSBQcm9taXNlLnJlc29sdmUoZGF0YSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9KVxuICB9XG5cbiAgaWYgKGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gaW5mbGlnaHRDYWNoZVtjYWNoZUtleV1cbiAgfVxuICByZXR1cm4gKGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldID0gZ2V0RGF0YShcbiAgICBpc0JhY2tncm91bmQgPyB7IG1ldGhvZDogJ0hFQUQnIH0gOiB7fVxuICApKVxufVxuXG5pbnRlcmZhY2UgTmV4dERhdGFDYWNoZSB7XG4gIFthc1BhdGg6IHN0cmluZ106IFByb21pc2U8RmV0Y2hEYXRhT3V0cHV0PlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlS2V5KCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgdXJsLFxuICByb3V0ZXIsXG59OiB7XG4gIHVybDogc3RyaW5nXG4gIHJvdXRlcjogUm91dGVyXG59KSB7XG4gIC8vIGVuc3VyZSB3ZSBkb24ndCB0cmlnZ2VyIGEgaGFyZCBuYXZpZ2F0aW9uIHRvIHRoZSBzYW1lXG4gIC8vIFVSTCBhcyB0aGlzIGNhbiBlbmQgdXAgd2l0aCBhbiBpbmZpbml0ZSByZWZyZXNoXG4gIGlmICh1cmwgPT09IGFkZEJhc2VQYXRoKGFkZExvY2FsZShyb3V0ZXIuYXNQYXRoLCByb3V0ZXIubG9jYWxlKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YXJpYW50OiBhdHRlbXB0ZWQgdG8gaGFyZCBuYXZpZ2F0ZSB0byB0aGUgc2FtZSBVUkwgJHt1cmx9ICR7bG9jYXRpb24uaHJlZn1gXG4gICAgKVxuICB9XG4gIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsXG59XG5cbmNvbnN0IGdldENhbmNlbGxlZEhhbmRsZXIgPSAoe1xuICByb3V0ZSxcbiAgcm91dGVyLFxufToge1xuICByb3V0ZTogc3RyaW5nXG4gIHJvdXRlcjogUm91dGVyXG59KSA9PiB7XG4gIGxldCBjYW5jZWxsZWQgPSBmYWxzZVxuICBjb25zdCBjYW5jZWwgPSAocm91dGVyLmNsYyA9ICgpID0+IHtcbiAgICBjYW5jZWxsZWQgPSB0cnVlXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsbGVkID0gKCkgPT4ge1xuICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoXG4gICAgICAgIGBBYm9ydCBmZXRjaGluZyBjb21wb25lbnQgZm9yIHJvdXRlOiBcIiR7cm91dGV9XCJgXG4gICAgICApXG4gICAgICBlcnJvci5jYW5jZWxsZWQgPSB0cnVlXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIGlmIChjYW5jZWwgPT09IHJvdXRlci5jbGMpIHtcbiAgICAgIHJvdXRlci5jbGMgPSBudWxsXG4gICAgfVxuICB9XG4gIHJldHVybiBoYW5kbGVDYW5jZWxsZWRcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGVyIGltcGxlbWVudHMgQmFzZVJvdXRlciB7XG4gIGJhc2VQYXRoOiBzdHJpbmdcblxuICAvKipcbiAgICogTWFwIG9mIGFsbCBjb21wb25lbnRzIGxvYWRlZCBpbiBgUm91dGVyYFxuICAgKi9cbiAgY29tcG9uZW50czogeyBbcGF0aG5hbWU6IHN0cmluZ106IFByaXZhdGVSb3V0ZUluZm8gfVxuICAvLyBTZXJ2ZXIgRGF0YSBDYWNoZSAoZnVsbCBkYXRhIHJlcXVlc3RzKVxuICBzZGM6IE5leHREYXRhQ2FjaGUgPSB7fVxuICAvLyBTZXJ2ZXIgQmFja2dyb3VuZCBDYWNoZSAoSEVBRCByZXF1ZXN0cylcbiAgc2JjOiBOZXh0RGF0YUNhY2hlID0ge31cblxuICBzdWI6IFN1YnNjcmlwdGlvblxuICBjbGM6IENvbXBvbmVudExvYWRDYW5jZWxcbiAgcGFnZUxvYWRlcjogUGFnZUxvYWRlclxuICBfYnBzOiBCZWZvcmVQb3BTdGF0ZUNhbGxiYWNrIHwgdW5kZWZpbmVkXG4gIGV2ZW50czogTWl0dEVtaXR0ZXI8Um91dGVyRXZlbnQ+XG4gIF93cmFwQXBwOiAoQXBwOiBBcHBDb21wb25lbnQpID0+IGFueVxuICBpc1NzcjogYm9vbGVhblxuICBfaW5GbGlnaHRSb3V0ZT86IHN0cmluZyB8IHVuZGVmaW5lZFxuICBfc2hhbGxvdz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgbG9jYWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4gIGRlZmF1bHRMb2NhbGU/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgZG9tYWluTG9jYWxlcz86IHJlYWRvbmx5IERvbWFpbkxvY2FsZVtdIHwgdW5kZWZpbmVkXG4gIGlzUmVhZHk6IGJvb2xlYW5cbiAgaXNMb2NhbGVEb21haW46IGJvb2xlYW5cbiAgaXNGaXJzdFBvcFN0YXRlRXZlbnQgPSB0cnVlXG4gIF9pbml0aWFsTWF0Y2hlc01pZGRsZXdhcmVQcm9taXNlOiBQcm9taXNlPGJvb2xlYW4+XG4gIC8vIHN0YXRpYyBlbnRyaWVzIGZpbHRlclxuICBfYmZsX3M/OiBpbXBvcnQoJy4uLy4uL2xpYi9ibG9vbS1maWx0ZXInKS5CbG9vbUZpbHRlclxuICAvLyBkeW5hbWljIGVudGlyZXMgZmlsdGVyXG4gIF9iZmxfZD86IGltcG9ydCgnLi4vLi4vbGliL2Jsb29tLWZpbHRlcicpLkJsb29tRmlsdGVyXG5cbiAgcHJpdmF0ZSBzdGF0ZTogUmVhZG9ubHk8e1xuICAgIHJvdXRlOiBzdHJpbmdcbiAgICBwYXRobmFtZTogc3RyaW5nXG4gICAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gICAgYXNQYXRoOiBzdHJpbmdcbiAgICBsb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGlzRmFsbGJhY2s6IGJvb2xlYW5cbiAgICBpc1ByZXZpZXc6IGJvb2xlYW5cbiAgfT5cblxuICBwcml2YXRlIF9rZXk6IHN0cmluZyA9IGNyZWF0ZUtleSgpXG5cbiAgc3RhdGljIGV2ZW50czogTWl0dEVtaXR0ZXI8Um91dGVyRXZlbnQ+ID0gbWl0dCgpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGF0aG5hbWU6IHN0cmluZyxcbiAgICBxdWVyeTogUGFyc2VkVXJsUXVlcnksXG4gICAgYXM6IHN0cmluZyxcbiAgICB7XG4gICAgICBpbml0aWFsUHJvcHMsXG4gICAgICBwYWdlTG9hZGVyLFxuICAgICAgQXBwLFxuICAgICAgd3JhcEFwcCxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGVycixcbiAgICAgIHN1YnNjcmlwdGlvbixcbiAgICAgIGlzRmFsbGJhY2ssXG4gICAgICBsb2NhbGUsXG4gICAgICBsb2NhbGVzLFxuICAgICAgZGVmYXVsdExvY2FsZSxcbiAgICAgIGRvbWFpbkxvY2FsZXMsXG4gICAgICBpc1ByZXZpZXcsXG4gICAgfToge1xuICAgICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb25cbiAgICAgIGluaXRpYWxQcm9wczogYW55XG4gICAgICBwYWdlTG9hZGVyOiBhbnlcbiAgICAgIENvbXBvbmVudDogQ29tcG9uZW50VHlwZVxuICAgICAgQXBwOiBBcHBDb21wb25lbnRcbiAgICAgIHdyYXBBcHA6IChXcmFwQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpID0+IGFueVxuICAgICAgZXJyPzogRXJyb3JcbiAgICAgIGlzRmFsbGJhY2s6IGJvb2xlYW5cbiAgICAgIGxvY2FsZT86IHN0cmluZ1xuICAgICAgbG9jYWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdXG4gICAgICBkZWZhdWx0TG9jYWxlPzogc3RyaW5nXG4gICAgICBkb21haW5Mb2NhbGVzPzogcmVhZG9ubHkgRG9tYWluTG9jYWxlW11cbiAgICAgIGlzUHJldmlldz86IGJvb2xlYW5cbiAgICB9XG4gICkge1xuICAgIC8vIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgY29tcG9uZW50IGtleVxuICAgIGNvbnN0IHJvdXRlID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZSlcblxuICAgIC8vIHNldCB1cCB0aGUgY29tcG9uZW50IGNhY2hlIChieSByb3V0ZSBrZXlzKVxuICAgIHRoaXMuY29tcG9uZW50cyA9IHt9XG4gICAgLy8gV2Ugc2hvdWxkIG5vdCBrZWVwIHRoZSBjYWNoZSwgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgIC8vIE90aGVyd2lzZSwgdGhpcyBjYXVzZSBpc3N1ZXMgd2hlbiB3aGVuIGdvaW5nIGJhY2sgYW5kXG4gICAgLy8gY29tZSBhZ2FpbiB0byB0aGUgZXJyb3JlZCBwYWdlLlxuICAgIGlmIChwYXRobmFtZSAhPT0gJy9fZXJyb3InKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudHNbcm91dGVdID0ge1xuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIGluaXRpYWw6IHRydWUsXG4gICAgICAgIHByb3BzOiBpbml0aWFsUHJvcHMsXG4gICAgICAgIGVycixcbiAgICAgICAgX19OX1NTRzogaW5pdGlhbFByb3BzICYmIGluaXRpYWxQcm9wcy5fX05fU1NHLFxuICAgICAgICBfX05fU1NQOiBpbml0aWFsUHJvcHMgJiYgaW5pdGlhbFByb3BzLl9fTl9TU1AsXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRzWycvX2FwcCddID0ge1xuICAgICAgQ29tcG9uZW50OiBBcHAgYXMgQ29tcG9uZW50VHlwZSxcbiAgICAgIHN0eWxlU2hlZXRzOiBbXG4gICAgICAgIC8qIC9fYXBwIGRvZXMgbm90IG5lZWQgaXRzIHN0eWxlc2hlZXRzIG1hbmFnZWQgKi9cbiAgICAgIF0sXG4gICAgfVxuXG4gICAgLy8gQmFja3dhcmRzIGNvbXBhdCBmb3IgUm91dGVyLnJvdXRlci5ldmVudHNcbiAgICAvLyBUT0RPOiBTaG91bGQgYmUgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbWFqb3IgdmVyc2lvbiBhcyBpdCB3YXMgbmV2ZXIgZG9jdW1lbnRlZFxuICAgIHRoaXMuZXZlbnRzID0gUm91dGVyLmV2ZW50c1xuXG4gICAgdGhpcy5wYWdlTG9hZGVyID0gcGFnZUxvYWRlclxuICAgIC8vIGlmIGF1dG8gcHJlcmVuZGVyZWQgYW5kIGR5bmFtaWMgcm91dGUgd2FpdCB0byB1cGRhdGUgYXNQYXRoXG4gICAgLy8gdW50aWwgYWZ0ZXIgbW91bnQgdG8gcHJldmVudCBoeWRyYXRpb24gbWlzbWF0Y2hcbiAgICBjb25zdCBhdXRvRXhwb3J0RHluYW1pYyA9XG4gICAgICBpc0R5bmFtaWNSb3V0ZShwYXRobmFtZSkgJiYgc2VsZi5fX05FWFRfREFUQV9fLmF1dG9FeHBvcnRcblxuICAgIHRoaXMuYmFzZVBhdGggPSBwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIIHx8ICcnXG4gICAgdGhpcy5zdWIgPSBzdWJzY3JpcHRpb25cbiAgICB0aGlzLmNsYyA9IG51bGxcbiAgICB0aGlzLl93cmFwQXBwID0gd3JhcEFwcFxuICAgIC8vIG1ha2Ugc3VyZSB0byBpZ25vcmUgZXh0cmEgcG9wU3RhdGUgaW4gc2FmYXJpIG9uIG5hdmlnYXRpbmdcbiAgICAvLyBiYWNrIGZyb20gZXh0ZXJuYWwgc2l0ZVxuICAgIHRoaXMuaXNTc3IgPSB0cnVlXG4gICAgdGhpcy5pc0xvY2FsZURvbWFpbiA9IGZhbHNlXG4gICAgdGhpcy5pc1JlYWR5ID0gISEoXG4gICAgICBzZWxmLl9fTkVYVF9EQVRBX18uZ3NzcCB8fFxuICAgICAgc2VsZi5fX05FWFRfREFUQV9fLmdpcCB8fFxuICAgICAgc2VsZi5fX05FWFRfREFUQV9fLmlzRXhwZXJpbWVudGFsQ29tcGlsZSB8fFxuICAgICAgKHNlbGYuX19ORVhUX0RBVEFfXy5hcHBHaXAgJiYgIXNlbGYuX19ORVhUX0RBVEFfXy5nc3ApIHx8XG4gICAgICAoIWF1dG9FeHBvcnREeW5hbWljICYmXG4gICAgICAgICFzZWxmLmxvY2F0aW9uLnNlYXJjaCAmJlxuICAgICAgICAhcHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUylcbiAgICApXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgdGhpcy5sb2NhbGVzID0gbG9jYWxlc1xuICAgICAgdGhpcy5kZWZhdWx0TG9jYWxlID0gZGVmYXVsdExvY2FsZVxuICAgICAgdGhpcy5kb21haW5Mb2NhbGVzID0gZG9tYWluTG9jYWxlc1xuICAgICAgdGhpcy5pc0xvY2FsZURvbWFpbiA9ICEhZGV0ZWN0RG9tYWluTG9jYWxlKFxuICAgICAgICBkb21haW5Mb2NhbGVzLFxuICAgICAgICBzZWxmLmxvY2F0aW9uLmhvc3RuYW1lXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHJvdXRlLFxuICAgICAgcGF0aG5hbWUsXG4gICAgICBxdWVyeSxcbiAgICAgIGFzUGF0aDogYXV0b0V4cG9ydER5bmFtaWMgPyBwYXRobmFtZSA6IGFzLFxuICAgICAgaXNQcmV2aWV3OiAhIWlzUHJldmlldyxcbiAgICAgIGxvY2FsZTogcHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCA/IGxvY2FsZSA6IHVuZGVmaW5lZCxcbiAgICAgIGlzRmFsbGJhY2ssXG4gICAgfVxuXG4gICAgdGhpcy5faW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShmYWxzZSlcblxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gbWFrZSBzdXJlIFwiYXNcIiBkb2Vzbid0IHN0YXJ0IHdpdGggZG91YmxlIHNsYXNoZXMgb3IgZWxzZSBpdCBjYW5cbiAgICAgIC8vIHRocm93IGFuIGVycm9yIGFzIGl0J3MgY29uc2lkZXJlZCBpbnZhbGlkXG4gICAgICBpZiAoIWFzLnN0YXJ0c1dpdGgoJy8vJykpIHtcbiAgICAgICAgLy8gaW4gb3JkZXIgZm9yIGBlLnN0YXRlYCB0byB3b3JrIG9uIHRoZSBgb25wb3BzdGF0ZWAgZXZlbnRcbiAgICAgICAgLy8gd2UgaGF2ZSB0byByZWdpc3RlciB0aGUgaW5pdGlhbCByb3V0ZSB1cG9uIGluaXRpYWxpemF0aW9uXG4gICAgICAgIGNvbnN0IG9wdGlvbnM6IFRyYW5zaXRpb25PcHRpb25zID0geyBsb2NhbGUgfVxuICAgICAgICBjb25zdCBhc1BhdGggPSBnZXRVUkwoKVxuXG4gICAgICAgIHRoaXMuX2luaXRpYWxNYXRjaGVzTWlkZGxld2FyZVByb21pc2UgPSBtYXRjaGVzTWlkZGxld2FyZSh7XG4gICAgICAgICAgcm91dGVyOiB0aGlzLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBhc1BhdGgsXG4gICAgICAgIH0pLnRoZW4oKG1hdGNoZXMpID0+IHtcbiAgICAgICAgICAvLyBpZiBtaWRkbGV3YXJlIG1hdGNoZXMgd2UgbGVhdmUgcmVzb2x2aW5nIHRvIHRoZSBjaGFuZ2UgZnVuY3Rpb25cbiAgICAgICAgICAvLyBhcyB0aGUgc2VydmVyIG5lZWRzIHRvIHJlc29sdmUgZm9yIGNvcnJlY3QgcHJpb3JpdHlcbiAgICAgICAgICA7KG9wdGlvbnMgYXMgYW55KS5fc2hvdWxkUmVzb2x2ZUhyZWYgPSBhcyAhPT0gcGF0aG5hbWVcblxuICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoXG4gICAgICAgICAgICAncmVwbGFjZVN0YXRlJyxcbiAgICAgICAgICAgIG1hdGNoZXNcbiAgICAgICAgICAgICAgPyBhc1BhdGhcbiAgICAgICAgICAgICAgOiBmb3JtYXRXaXRoVmFsaWRhdGlvbih7XG4gICAgICAgICAgICAgICAgICBwYXRobmFtZTogYWRkQmFzZVBhdGgocGF0aG5hbWUpLFxuICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBhc1BhdGgsXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBtYXRjaGVzXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHRoaXMub25Qb3BTdGF0ZSlcblxuICAgICAgLy8gZW5hYmxlIGN1c3RvbSBzY3JvbGwgcmVzdG9yYXRpb24gaGFuZGxpbmcgd2hlbiBhdmFpbGFibGVcbiAgICAgIC8vIG90aGVyd2lzZSBmYWxsYmFjayB0byBicm93c2VyJ3MgZGVmYXVsdCBoYW5kbGluZ1xuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9TQ1JPTExfUkVTVE9SQVRJT04pIHtcbiAgICAgICAgaWYgKG1hbnVhbFNjcm9sbFJlc3RvcmF0aW9uKSB7XG4gICAgICAgICAgd2luZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSAnbWFudWFsJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Qb3BTdGF0ZSA9IChlOiBQb3BTdGF0ZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3QgeyBpc0ZpcnN0UG9wU3RhdGVFdmVudCB9ID0gdGhpc1xuICAgIHRoaXMuaXNGaXJzdFBvcFN0YXRlRXZlbnQgPSBmYWxzZVxuXG4gICAgY29uc3Qgc3RhdGUgPSBlLnN0YXRlIGFzIEhpc3RvcnlTdGF0ZVxuXG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgLy8gV2UgZ2V0IHN0YXRlIGFzIHVuZGVmaW5lZCBmb3IgdHdvIHJlYXNvbnMuXG4gICAgICAvLyAgMS4gV2l0aCBvbGRlciBzYWZhcmkgKDwgOCkgYW5kIG9sZGVyIGNocm9tZSAoPCAzNClcbiAgICAgIC8vICAyLiBXaGVuIHRoZSBVUkwgY2hhbmdlZCB3aXRoICNcbiAgICAgIC8vXG4gICAgICAvLyBJbiB0aGUgYm90aCBjYXNlcywgd2UgZG9uJ3QgbmVlZCB0byBwcm9jZWVkIGFuZCBjaGFuZ2UgdGhlIHJvdXRlLlxuICAgICAgLy8gKGFzIGl0J3MgYWxyZWFkeSBjaGFuZ2VkKVxuICAgICAgLy8gQnV0IHdlIGNhbiBzaW1wbHkgcmVwbGFjZSB0aGUgc3RhdGUgd2l0aCB0aGUgbmV3IGNoYW5nZXMuXG4gICAgICAvLyBBY3R1YWxseSwgZm9yICgxKSB3ZSBkb24ndCBuZWVkIHRvIG5vdGhpbmcuIEJ1dCBpdCdzIGhhcmQgdG8gZGV0ZWN0IHRoYXQgZXZlbnQuXG4gICAgICAvLyBTbywgZG9pbmcgdGhlIGZvbGxvd2luZyBmb3IgKDEpIGRvZXMgbm8gaGFybS5cbiAgICAgIGNvbnN0IHsgcGF0aG5hbWUsIHF1ZXJ5IH0gPSB0aGlzXG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFxuICAgICAgICAncmVwbGFjZVN0YXRlJyxcbiAgICAgICAgZm9ybWF0V2l0aFZhbGlkYXRpb24oeyBwYXRobmFtZTogYWRkQmFzZVBhdGgocGF0aG5hbWUpLCBxdWVyeSB9KSxcbiAgICAgICAgZ2V0VVJMKClcbiAgICAgIClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIF9fTkEgaXMgdXNlZCB0byBpZGVudGlmeSBpZiB0aGUgaGlzdG9yeSBlbnRyeSBjYW4gYmUgaGFuZGxlZCBieSB0aGUgYXBwLXJvdXRlci5cbiAgICBpZiAoc3RhdGUuX19OQSkge1xuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXN0YXRlLl9fTikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIGZpcmVzIHBvcHN0YXRlZXZlbnQgd2hlbiByZW9wZW5pbmcgdGhlIGJyb3dzZXIuXG4gICAgaWYgKFxuICAgICAgaXNGaXJzdFBvcFN0YXRlRXZlbnQgJiZcbiAgICAgIHRoaXMubG9jYWxlID09PSBzdGF0ZS5vcHRpb25zLmxvY2FsZSAmJlxuICAgICAgc3RhdGUuYXMgPT09IHRoaXMuYXNQYXRoXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgZm9yY2VkU2Nyb2xsOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCB1bmRlZmluZWRcbiAgICBjb25zdCB7IHVybCwgYXMsIG9wdGlvbnMsIGtleSB9ID0gc3RhdGVcbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1NDUk9MTF9SRVNUT1JBVElPTikge1xuICAgICAgaWYgKG1hbnVhbFNjcm9sbFJlc3RvcmF0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLl9rZXkgIT09IGtleSkge1xuICAgICAgICAgIC8vIFNuYXBzaG90IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uOlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgICAnX19uZXh0X3Njcm9sbF8nICsgdGhpcy5fa2V5LFxuICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IHg6IHNlbGYucGFnZVhPZmZzZXQsIHk6IHNlbGYucGFnZVlPZmZzZXQgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgICAvLyBSZXN0b3JlIG9sZCBzY3JvbGwgcG9zaXRpb246XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdfX25leHRfc2Nyb2xsXycgKyBrZXkpXG4gICAgICAgICAgICBmb3JjZWRTY3JvbGwgPSBKU09OLnBhcnNlKHYhKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgZm9yY2VkU2Nyb2xsID0geyB4OiAwLCB5OiAwIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fa2V5ID0ga2V5XG5cbiAgICBjb25zdCB7IHBhdGhuYW1lIH0gPSBwYXJzZVJlbGF0aXZlVXJsKHVybClcblxuICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCByZS1yZW5kZXIgb24gaW5pdGlhbCBsb2FkLFxuICAgIC8vIGNhbiBiZSBjYXVzZWQgYnkgbmF2aWdhdGluZyBiYWNrIGZyb20gYW4gZXh0ZXJuYWwgc2l0ZVxuICAgIGlmIChcbiAgICAgIHRoaXMuaXNTc3IgJiZcbiAgICAgIGFzID09PSBhZGRCYXNlUGF0aCh0aGlzLmFzUGF0aCkgJiZcbiAgICAgIHBhdGhuYW1lID09PSBhZGRCYXNlUGF0aCh0aGlzLnBhdGhuYW1lKVxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGRvd25zdHJlYW0gYXBwbGljYXRpb24gcmV0dXJucyBmYWxzeSwgcmV0dXJuLlxuICAgIC8vIFRoZXkgd2lsbCB0aGVuIGJlIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgZXZlbnQuXG4gICAgaWYgKHRoaXMuX2JwcyAmJiAhdGhpcy5fYnBzKHN0YXRlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2UoXG4gICAgICAncmVwbGFjZVN0YXRlJyxcbiAgICAgIHVybCxcbiAgICAgIGFzLFxuICAgICAgT2JqZWN0LmFzc2lnbjx7fSwgVHJhbnNpdGlvbk9wdGlvbnMsIFRyYW5zaXRpb25PcHRpb25zPih7fSwgb3B0aW9ucywge1xuICAgICAgICBzaGFsbG93OiBvcHRpb25zLnNoYWxsb3cgJiYgdGhpcy5fc2hhbGxvdyxcbiAgICAgICAgbG9jYWxlOiBvcHRpb25zLmxvY2FsZSB8fCB0aGlzLmRlZmF1bHRMb2NhbGUsXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgdmFsdWUgbm90IGV4cG9zZWQgb24gdHlwZXNcbiAgICAgICAgX2g6IDAsXG4gICAgICB9KSxcbiAgICAgIGZvcmNlZFNjcm9sbFxuICAgIClcbiAgfVxuXG4gIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyBiYWNrIGluIGhpc3RvcnlcbiAgICovXG4gIGJhY2soKSB7XG4gICAgd2luZG93Lmhpc3RvcnkuYmFjaygpXG4gIH1cblxuICAvKipcbiAgICogR28gZm9yd2FyZCBpbiBoaXN0b3J5XG4gICAqL1xuICBmb3J3YXJkKCkge1xuICAgIHdpbmRvdy5oaXN0b3J5LmZvcndhcmQoKVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGEgYHB1c2hTdGF0ZWAgd2l0aCBhcmd1bWVudHNcbiAgICogQHBhcmFtIHVybCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIGFzIG1hc2tzIGB1cmxgIGZvciB0aGUgYnJvd3NlclxuICAgKiBAcGFyYW0gb3B0aW9ucyBvYmplY3QgeW91IGNhbiBkZWZpbmUgYHNoYWxsb3dgIGFuZCBvdGhlciBvcHRpb25zXG4gICAqL1xuICBwdXNoKHVybDogVXJsLCBhcz86IFVybCwgb3B0aW9uczogVHJhbnNpdGlvbk9wdGlvbnMgPSB7fSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfU0NST0xMX1JFU1RPUkFUSU9OKSB7XG4gICAgICAvLyBUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSB3aGVuIHdlIHVwZGF0ZSBoaXN0b3J5IGJlZm9yZSByb3V0ZSBjaGFuZ2VcbiAgICAgIC8vIGlzIGNvbXBsZXRlLCBhcyB0aGUgcG9wc3RhdGUgZXZlbnQgc2hvdWxkIGhhbmRsZSB0aGlzIGNhcHR1cmUuXG4gICAgICBpZiAobWFudWFsU2Nyb2xsUmVzdG9yYXRpb24pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBTbmFwc2hvdCBzY3JvbGwgcG9zaXRpb24gcmlnaHQgYmVmb3JlIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZTpcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgJ19fbmV4dF9zY3JvbGxfJyArIHRoaXMuX2tleSxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHsgeDogc2VsZi5wYWdlWE9mZnNldCwgeTogc2VsZi5wYWdlWU9mZnNldCB9KVxuICAgICAgICAgIClcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgIH1cbiAgICA7KHsgdXJsLCBhcyB9ID0gcHJlcGFyZVVybEFzKHRoaXMsIHVybCwgYXMpKVxuICAgIHJldHVybiB0aGlzLmNoYW5nZSgncHVzaFN0YXRlJywgdXJsLCBhcywgb3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBhIGByZXBsYWNlU3RhdGVgIHdpdGggYXJndW1lbnRzXG4gICAqIEBwYXJhbSB1cmwgb2YgdGhlIHJvdXRlXG4gICAqIEBwYXJhbSBhcyBtYXNrcyBgdXJsYCBmb3IgdGhlIGJyb3dzZXJcbiAgICogQHBhcmFtIG9wdGlvbnMgb2JqZWN0IHlvdSBjYW4gZGVmaW5lIGBzaGFsbG93YCBhbmQgb3RoZXIgb3B0aW9uc1xuICAgKi9cbiAgcmVwbGFjZSh1cmw6IFVybCwgYXM/OiBVcmwsIG9wdGlvbnM6IFRyYW5zaXRpb25PcHRpb25zID0ge30pIHtcbiAgICA7KHsgdXJsLCBhcyB9ID0gcHJlcGFyZVVybEFzKHRoaXMsIHVybCwgYXMpKVxuICAgIHJldHVybiB0aGlzLmNoYW5nZSgncmVwbGFjZVN0YXRlJywgdXJsLCBhcywgb3B0aW9ucylcbiAgfVxuXG4gIGFzeW5jIF9iZmwoXG4gICAgYXM6IHN0cmluZyxcbiAgICByZXNvbHZlZEFzPzogc3RyaW5nLFxuICAgIGxvY2FsZT86IHN0cmluZyB8IGZhbHNlLFxuICAgIHNraXBOYXZpZ2F0ZT86IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfUk9VVEVSX0ZJTFRFUl9FTkFCTEVEKSB7XG4gICAgICBpZiAoIXRoaXMuX2JmbF9zICYmICF0aGlzLl9iZmxfZCkge1xuICAgICAgICBjb25zdCB7IEJsb29tRmlsdGVyIH0gPVxuICAgICAgICAgIHJlcXVpcmUoJy4uLy4uL2xpYi9ibG9vbS1maWx0ZXInKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi8uLi9saWIvYmxvb20tZmlsdGVyJylcblxuICAgICAgICB0eXBlIEZpbHRlciA9IFJldHVyblR5cGU8XG4gICAgICAgICAgaW1wb3J0KCcuLi8uLi9saWIvYmxvb20tZmlsdGVyJykuQmxvb21GaWx0ZXJbJ2V4cG9ydCddXG4gICAgICAgID5cbiAgICAgICAgbGV0IHN0YXRpY0ZpbHRlckRhdGE6IEZpbHRlciB8IHVuZGVmaW5lZFxuICAgICAgICBsZXQgZHluYW1pY0ZpbHRlckRhdGE6IEZpbHRlciB8IHVuZGVmaW5lZFxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgOyh7XG4gICAgICAgICAgICBfX3JvdXRlckZpbHRlclN0YXRpYzogc3RhdGljRmlsdGVyRGF0YSxcbiAgICAgICAgICAgIF9fcm91dGVyRmlsdGVyRHluYW1pYzogZHluYW1pY0ZpbHRlckRhdGEsXG4gICAgICAgICAgfSA9IChhd2FpdCBnZXRDbGllbnRCdWlsZE1hbmlmZXN0KCkpIGFzIGFueSBhcyB7XG4gICAgICAgICAgICBfX3JvdXRlckZpbHRlclN0YXRpYz86IEZpbHRlclxuICAgICAgICAgICAgX19yb3V0ZXJGaWx0ZXJEeW5hbWljPzogRmlsdGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gZmFpbGVkIHRvIGxvYWQgYnVpbGQgbWFuaWZlc3QgaGFyZCBuYXZpZ2F0ZVxuICAgICAgICAgIC8vIHRvIGJlIHNhZmVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgICBpZiAoc2tpcE5hdmlnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICB1cmw6IGFkZEJhc2VQYXRoKFxuICAgICAgICAgICAgICBhZGRMb2NhbGUoYXMsIGxvY2FsZSB8fCB0aGlzLmxvY2FsZSwgdGhpcy5kZWZhdWx0TG9jYWxlKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHJvdXRlcjogdGhpcyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoKSA9PiB7fSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvdXRlckZpbHRlclNWYWx1ZTogRmlsdGVyIHwgZmFsc2UgPSBwcm9jZXNzLmVudlxuICAgICAgICAgIC5fX05FWFRfQ0xJRU5UX1JPVVRFUl9TX0ZJTFRFUiBhcyBhbnlcblxuICAgICAgICBpZiAoIXN0YXRpY0ZpbHRlckRhdGEgJiYgcm91dGVyRmlsdGVyU1ZhbHVlKSB7XG4gICAgICAgICAgc3RhdGljRmlsdGVyRGF0YSA9IHJvdXRlckZpbHRlclNWYWx1ZSA/IHJvdXRlckZpbHRlclNWYWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm91dGVyRmlsdGVyRFZhbHVlOiBGaWx0ZXIgfCBmYWxzZSA9IHByb2Nlc3MuZW52XG4gICAgICAgICAgLl9fTkVYVF9DTElFTlRfUk9VVEVSX0RfRklMVEVSIGFzIGFueVxuXG4gICAgICAgIGlmICghZHluYW1pY0ZpbHRlckRhdGEgJiYgcm91dGVyRmlsdGVyRFZhbHVlKSB7XG4gICAgICAgICAgZHluYW1pY0ZpbHRlckRhdGEgPSByb3V0ZXJGaWx0ZXJEVmFsdWVcbiAgICAgICAgICAgID8gcm91dGVyRmlsdGVyRFZhbHVlXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRpY0ZpbHRlckRhdGE/Lm51bUhhc2hlcykge1xuICAgICAgICAgIHRoaXMuX2JmbF9zID0gbmV3IEJsb29tRmlsdGVyKFxuICAgICAgICAgICAgc3RhdGljRmlsdGVyRGF0YS5udW1JdGVtcyxcbiAgICAgICAgICAgIHN0YXRpY0ZpbHRlckRhdGEuZXJyb3JSYXRlXG4gICAgICAgICAgKVxuICAgICAgICAgIHRoaXMuX2JmbF9zLmltcG9ydChzdGF0aWNGaWx0ZXJEYXRhKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGR5bmFtaWNGaWx0ZXJEYXRhPy5udW1IYXNoZXMpIHtcbiAgICAgICAgICB0aGlzLl9iZmxfZCA9IG5ldyBCbG9vbUZpbHRlcihcbiAgICAgICAgICAgIGR5bmFtaWNGaWx0ZXJEYXRhLm51bUl0ZW1zLFxuICAgICAgICAgICAgZHluYW1pY0ZpbHRlckRhdGEuZXJyb3JSYXRlXG4gICAgICAgICAgKVxuICAgICAgICAgIHRoaXMuX2JmbF9kLmltcG9ydChkeW5hbWljRmlsdGVyRGF0YSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbWF0Y2hlc0JmbFN0YXRpYyA9IGZhbHNlXG4gICAgICBsZXQgbWF0Y2hlc0JmbER5bmFtaWMgPSBmYWxzZVxuICAgICAgY29uc3QgcGF0aHNUb0NoZWNrOiBBcnJheTx7IGFzPzogc3RyaW5nOyBhbGxvd01hdGNoQ3VycmVudD86IGJvb2xlYW4gfT4gPVxuICAgICAgICBbeyBhcyB9LCB7IGFzOiByZXNvbHZlZEFzIH1dXG5cbiAgICAgIGZvciAoY29uc3QgeyBhczogY3VyQXMsIGFsbG93TWF0Y2hDdXJyZW50IH0gb2YgcGF0aHNUb0NoZWNrKSB7XG4gICAgICAgIGlmIChjdXJBcykge1xuICAgICAgICAgIGNvbnN0IGFzTm9TbGFzaCA9IHJlbW92ZVRyYWlsaW5nU2xhc2goXG4gICAgICAgICAgICBuZXcgVVJMKGN1ckFzLCAnaHR0cDovL24nKS5wYXRobmFtZVxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBhc05vU2xhc2hMb2NhbGUgPSBhZGRCYXNlUGF0aChcbiAgICAgICAgICAgIGFkZExvY2FsZShhc05vU2xhc2gsIGxvY2FsZSB8fCB0aGlzLmxvY2FsZSlcbiAgICAgICAgICApXG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhbGxvd01hdGNoQ3VycmVudCB8fFxuICAgICAgICAgICAgYXNOb1NsYXNoICE9PVxuICAgICAgICAgICAgICByZW1vdmVUcmFpbGluZ1NsYXNoKG5ldyBVUkwodGhpcy5hc1BhdGgsICdodHRwOi8vbicpLnBhdGhuYW1lKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbWF0Y2hlc0JmbFN0YXRpYyA9XG4gICAgICAgICAgICAgIG1hdGNoZXNCZmxTdGF0aWMgfHxcbiAgICAgICAgICAgICAgISF0aGlzLl9iZmxfcz8uY29udGFpbnMoYXNOb1NsYXNoKSB8fFxuICAgICAgICAgICAgICAhIXRoaXMuX2JmbF9zPy5jb250YWlucyhhc05vU2xhc2hMb2NhbGUpXG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsaXplZEFTIG9mIFthc05vU2xhc2gsIGFzTm9TbGFzaExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgLy8gaWYgYW55IHN1Yi1wYXRoIG9mIGFzIG1hdGNoZXMgYSBkeW5hbWljIGZpbHRlciBwYXRoXG4gICAgICAgICAgICAgIC8vIGl0IHNob3VsZCBiZSBoYXJkIG5hdmlnYXRlZFxuICAgICAgICAgICAgICBjb25zdCBjdXJBc1BhcnRzID0gbm9ybWFsaXplZEFTLnNwbGl0KCcvJylcbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgIW1hdGNoZXNCZmxEeW5hbWljICYmIGkgPCBjdXJBc1BhcnRzLmxlbmd0aCArIDE7XG4gICAgICAgICAgICAgICAgaSsrXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYXJ0ID0gY3VyQXNQYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJylcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhcnQgJiYgdGhpcy5fYmZsX2Q/LmNvbnRhaW5zKGN1cnJlbnRQYXJ0KSkge1xuICAgICAgICAgICAgICAgICAgbWF0Y2hlc0JmbER5bmFtaWMgPSB0cnVlXG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgY2xpZW50IHJvdXRlciBmaWx0ZXIgaXMgbWF0Y2hlZCB0aGVuIHdlIHRyaWdnZXJcbiAgICAgICAgICAgIC8vIGEgaGFyZCBuYXZpZ2F0aW9uXG4gICAgICAgICAgICBpZiAobWF0Y2hlc0JmbFN0YXRpYyB8fCBtYXRjaGVzQmZsRHluYW1pYykge1xuICAgICAgICAgICAgICBpZiAoc2tpcE5hdmlnYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICAgICAgdXJsOiBhZGRCYXNlUGF0aChcbiAgICAgICAgICAgICAgICAgIGFkZExvY2FsZShhcywgbG9jYWxlIHx8IHRoaXMubG9jYWxlLCB0aGlzLmRlZmF1bHRMb2NhbGUpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXMsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoKSA9PiB7fSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoYW5nZShcbiAgICBtZXRob2Q6IEhpc3RvcnlNZXRob2QsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYXM6IHN0cmluZyxcbiAgICBvcHRpb25zOiBUcmFuc2l0aW9uT3B0aW9ucyxcbiAgICBmb3JjZWRTY3JvbGw/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFpc0xvY2FsVVJMKHVybCkpIHtcbiAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHsgdXJsLCByb3V0ZXI6IHRoaXMgfSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICAvLyBXQVJOSU5HOiBgX2hgIGlzIGFuIGludGVybmFsIG9wdGlvbiBmb3IgaGFuZGluZyBOZXh0LmpzIGNsaWVudC1zaWRlXG4gICAgLy8gaHlkcmF0aW9uLiBZb3VyIGFwcCBzaG91bGQgX25ldmVyXyB1c2UgdGhpcyBwcm9wZXJ0eS4gSXQgbWF5IGNoYW5nZSBhdFxuICAgIC8vIGFueSB0aW1lIHdpdGhvdXQgbm90aWNlLlxuICAgIGNvbnN0IGlzUXVlcnlVcGRhdGluZyA9IChvcHRpb25zIGFzIGFueSkuX2ggPT09IDFcblxuICAgIGlmICghaXNRdWVyeVVwZGF0aW5nICYmICFvcHRpb25zLnNoYWxsb3cpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2JmbChhcywgdW5kZWZpbmVkLCBvcHRpb25zLmxvY2FsZSlcbiAgICB9XG5cbiAgICBsZXQgc2hvdWxkUmVzb2x2ZUhyZWYgPVxuICAgICAgaXNRdWVyeVVwZGF0aW5nIHx8XG4gICAgICAob3B0aW9ucyBhcyBhbnkpLl9zaG91bGRSZXNvbHZlSHJlZiB8fFxuICAgICAgcGFyc2VQYXRoKHVybCkucGF0aG5hbWUgPT09IHBhcnNlUGF0aChhcykucGF0aG5hbWVcblxuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgfVxuXG4gICAgLy8gZm9yIHN0YXRpYyBwYWdlcyB3aXRoIHF1ZXJ5IHBhcmFtcyBpbiB0aGUgVVJMIHdlIGRlbGF5XG4gICAgLy8gbWFya2luZyB0aGUgcm91dGVyIHJlYWR5IHVudGlsIGFmdGVyIHRoZSBxdWVyeSBpcyB1cGRhdGVkXG4gICAgLy8gb3IgYSBuYXZpZ2F0aW9uIGhhcyBvY2N1cnJlZFxuICAgIGNvbnN0IHJlYWR5U3RhdGVDaGFuZ2UgPSB0aGlzLmlzUmVhZHkgIT09IHRydWVcbiAgICB0aGlzLmlzUmVhZHkgPSB0cnVlXG4gICAgY29uc3QgaXNTc3IgPSB0aGlzLmlzU3NyXG5cbiAgICBpZiAoIWlzUXVlcnlVcGRhdGluZykge1xuICAgICAgdGhpcy5pc1NzciA9IGZhbHNlXG4gICAgfVxuXG4gICAgLy8gaWYgYSByb3V0ZSB0cmFuc2l0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgYmVmb3JlXG4gICAgLy8gdGhlIHF1ZXJ5IHVwZGF0aW5nIGlzIHRyaWdnZXJlZCBpZ25vcmUgcXVlcnkgdXBkYXRpbmdcbiAgICBpZiAoaXNRdWVyeVVwZGF0aW5nICYmIHRoaXMuY2xjKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2TG9jYWxlID0gbmV4dFN0YXRlLmxvY2FsZVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgIG5leHRTdGF0ZS5sb2NhbGUgPVxuICAgICAgICBvcHRpb25zLmxvY2FsZSA9PT0gZmFsc2VcbiAgICAgICAgICA/IHRoaXMuZGVmYXVsdExvY2FsZVxuICAgICAgICAgIDogb3B0aW9ucy5sb2NhbGUgfHwgbmV4dFN0YXRlLmxvY2FsZVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBvcHRpb25zLmxvY2FsZSA9IG5leHRTdGF0ZS5sb2NhbGVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkQXMgPSBwYXJzZVJlbGF0aXZlVXJsKFxuICAgICAgICBoYXNCYXNlUGF0aChhcykgPyByZW1vdmVCYXNlUGF0aChhcykgOiBhc1xuICAgICAgKVxuICAgICAgY29uc3QgbG9jYWxlUGF0aFJlc3VsdCA9IG5vcm1hbGl6ZUxvY2FsZVBhdGgoXG4gICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lLFxuICAgICAgICB0aGlzLmxvY2FsZXNcbiAgICAgIClcblxuICAgICAgaWYgKGxvY2FsZVBhdGhSZXN1bHQuZGV0ZWN0ZWRMb2NhbGUpIHtcbiAgICAgICAgbmV4dFN0YXRlLmxvY2FsZSA9IGxvY2FsZVBhdGhSZXN1bHQuZGV0ZWN0ZWRMb2NhbGVcbiAgICAgICAgcGFyc2VkQXMucGF0aG5hbWUgPSBhZGRCYXNlUGF0aChwYXJzZWRBcy5wYXRobmFtZSlcbiAgICAgICAgYXMgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWRBcylcbiAgICAgICAgdXJsID0gYWRkQmFzZVBhdGgoXG4gICAgICAgICAgbm9ybWFsaXplTG9jYWxlUGF0aChcbiAgICAgICAgICAgIGhhc0Jhc2VQYXRoKHVybCkgPyByZW1vdmVCYXNlUGF0aCh1cmwpIDogdXJsLFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVzXG4gICAgICAgICAgKS5wYXRobmFtZVxuICAgICAgICApXG4gICAgICB9XG4gICAgICBsZXQgZGlkTmF2aWdhdGUgPSBmYWxzZVxuXG4gICAgICAvLyB3ZSBuZWVkIHRvIHdyYXAgdGhpcyBpbiB0aGUgZW52IGNoZWNrIGFnYWluIHNpbmNlIHJlZ2VuZXJhdG9yIHJ1bnRpbWVcbiAgICAgIC8vIG1vdmVzIHRoaXMgb24gaXRzIG93biBkdWUgdG8gdGhlIHJldHVyblxuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgICAgLy8gaWYgdGhlIGxvY2FsZSBpc24ndCBjb25maWd1cmVkIGhhcmQgbmF2aWdhdGUgdG8gc2hvdyA0MDQgcGFnZVxuICAgICAgICBpZiAoIXRoaXMubG9jYWxlcz8uaW5jbHVkZXMobmV4dFN0YXRlLmxvY2FsZSEpKSB7XG4gICAgICAgICAgcGFyc2VkQXMucGF0aG5hbWUgPSBhZGRMb2NhbGUocGFyc2VkQXMucGF0aG5hbWUsIG5leHRTdGF0ZS5sb2NhbGUpXG4gICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICAgICAgdXJsOiBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWRBcyksXG4gICAgICAgICAgICByb3V0ZXI6IHRoaXMsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAvLyB0aGlzIHdhcyBwcmV2aW91c2x5IGEgcmV0dXJuIGJ1dCB3YXMgcmVtb3ZlZCBpbiBmYXZvclxuICAgICAgICAgIC8vIG9mIGJldHRlciBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2l0aCByZWdlbmVyYXRvciBydW50aW1lXG4gICAgICAgICAgZGlkTmF2aWdhdGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGV0ZWN0ZWREb21haW4gPSBkZXRlY3REb21haW5Mb2NhbGUoXG4gICAgICAgIHRoaXMuZG9tYWluTG9jYWxlcyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBuZXh0U3RhdGUubG9jYWxlXG4gICAgICApXG5cbiAgICAgIC8vIHdlIG5lZWQgdG8gd3JhcCB0aGlzIGluIHRoZSBlbnYgY2hlY2sgYWdhaW4gc2luY2UgcmVnZW5lcmF0b3IgcnVudGltZVxuICAgICAgLy8gbW92ZXMgdGhpcyBvbiBpdHMgb3duIGR1ZSB0byB0aGUgcmV0dXJuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgbmF2aWdhdGluZyB0byBhIGRvbWFpbiBsb2NhbGUgZW5zdXJlIHdlIHJlZGlyZWN0IHRvIHRoZVxuICAgICAgICAvLyBjb3JyZWN0IGRvbWFpblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWRpZE5hdmlnYXRlICYmXG4gICAgICAgICAgZGV0ZWN0ZWREb21haW4gJiZcbiAgICAgICAgICB0aGlzLmlzTG9jYWxlRG9tYWluICYmXG4gICAgICAgICAgc2VsZi5sb2NhdGlvbi5ob3N0bmFtZSAhPT0gZGV0ZWN0ZWREb21haW4uZG9tYWluXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGFzTm9CYXNlUGF0aCA9IHJlbW92ZUJhc2VQYXRoKGFzKVxuICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgIHVybDogYGh0dHAke2RldGVjdGVkRG9tYWluLmh0dHAgPyAnJyA6ICdzJ306Ly8ke1xuICAgICAgICAgICAgICBkZXRlY3RlZERvbWFpbi5kb21haW5cbiAgICAgICAgICAgIH0ke2FkZEJhc2VQYXRoKFxuICAgICAgICAgICAgICBgJHtcbiAgICAgICAgICAgICAgICBuZXh0U3RhdGUubG9jYWxlID09PSBkZXRlY3RlZERvbWFpbi5kZWZhdWx0TG9jYWxlXG4gICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICA6IGAvJHtuZXh0U3RhdGUubG9jYWxlfWBcbiAgICAgICAgICAgICAgfSR7YXNOb0Jhc2VQYXRoID09PSAnLycgPyAnJyA6IGFzTm9CYXNlUGF0aH1gIHx8ICcvJ1xuICAgICAgICAgICAgKX1gLFxuICAgICAgICAgICAgcm91dGVyOiB0aGlzLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gdGhpcyB3YXMgcHJldmlvdXNseSBhIHJldHVybiBidXQgd2FzIHJlbW92ZWQgaW4gZmF2b3JcbiAgICAgICAgICAvLyBvZiBiZXR0ZXIgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdpdGggcmVnZW5lcmF0b3IgcnVudGltZVxuICAgICAgICAgIGRpZE5hdmlnYXRlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkaWROYXZpZ2F0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFya2luZyByb3V0ZSBjaGFuZ2VzIGFzIGEgbmF2aWdhdGlvbiBzdGFydCBlbnRyeVxuICAgIGlmIChTVCkge1xuICAgICAgcGVyZm9ybWFuY2UubWFyaygncm91dGVDaGFuZ2UnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhbGxvdyA9IGZhbHNlLCBzY3JvbGwgPSB0cnVlIH0gPSBvcHRpb25zXG4gICAgY29uc3Qgcm91dGVQcm9wcyA9IHsgc2hhbGxvdyB9XG5cbiAgICBpZiAodGhpcy5faW5GbGlnaHRSb3V0ZSAmJiB0aGlzLmNsYykge1xuICAgICAgaWYgKCFpc1Nzcikge1xuICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoXG4gICAgICAgICAgJ3JvdXRlQ2hhbmdlRXJyb3InLFxuICAgICAgICAgIGJ1aWxkQ2FuY2VsbGF0aW9uRXJyb3IoKSxcbiAgICAgICAgICB0aGlzLl9pbkZsaWdodFJvdXRlLFxuICAgICAgICAgIHJvdXRlUHJvcHNcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgdGhpcy5jbGMoKVxuICAgICAgdGhpcy5jbGMgPSBudWxsXG4gICAgfVxuXG4gICAgYXMgPSBhZGRCYXNlUGF0aChcbiAgICAgIGFkZExvY2FsZShcbiAgICAgICAgaGFzQmFzZVBhdGgoYXMpID8gcmVtb3ZlQmFzZVBhdGgoYXMpIDogYXMsXG4gICAgICAgIG9wdGlvbnMubG9jYWxlLFxuICAgICAgICB0aGlzLmRlZmF1bHRMb2NhbGVcbiAgICAgIClcbiAgICApXG4gICAgY29uc3QgY2xlYW5lZEFzID0gcmVtb3ZlTG9jYWxlKFxuICAgICAgaGFzQmFzZVBhdGgoYXMpID8gcmVtb3ZlQmFzZVBhdGgoYXMpIDogYXMsXG4gICAgICBuZXh0U3RhdGUubG9jYWxlXG4gICAgKVxuICAgIHRoaXMuX2luRmxpZ2h0Um91dGUgPSBhc1xuXG4gICAgY29uc3QgbG9jYWxlQ2hhbmdlID0gcHJldkxvY2FsZSAhPT0gbmV4dFN0YXRlLmxvY2FsZVxuXG4gICAgLy8gSWYgdGhlIHVybCBjaGFuZ2UgaXMgb25seSByZWxhdGVkIHRvIGEgaGFzaCBjaGFuZ2VcbiAgICAvLyBXZSBzaG91bGQgbm90IHByb2NlZWQuIFdlIHNob3VsZCBvbmx5IGNoYW5nZSB0aGUgc3RhdGUuXG5cbiAgICBpZiAoIWlzUXVlcnlVcGRhdGluZyAmJiB0aGlzLm9ubHlBSGFzaENoYW5nZShjbGVhbmVkQXMpICYmICFsb2NhbGVDaGFuZ2UpIHtcbiAgICAgIG5leHRTdGF0ZS5hc1BhdGggPSBjbGVhbmVkQXNcbiAgICAgIFJvdXRlci5ldmVudHMuZW1pdCgnaGFzaENoYW5nZVN0YXJ0JywgYXMsIHJvdXRlUHJvcHMpXG4gICAgICAvLyBUT0RPOiBkbyB3ZSBuZWVkIHRoZSByZXNvbHZlZCBocmVmIHdoZW4gb25seSBhIGhhc2ggY2hhbmdlP1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShtZXRob2QsIHVybCwgYXMsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2Nyb2xsOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9IYXNoKGNsZWFuZWRBcylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0KG5leHRTdGF0ZSwgdGhpcy5jb21wb25lbnRzW25leHRTdGF0ZS5yb3V0ZV0sIG51bGwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRXJyb3IoZXJyKSAmJiBlcnIuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KCdyb3V0ZUNoYW5nZUVycm9yJywgZXJyLCBjbGVhbmVkQXMsIHJvdXRlUHJvcHMpXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9XG5cbiAgICAgIFJvdXRlci5ldmVudHMuZW1pdCgnaGFzaENoYW5nZUNvbXBsZXRlJywgYXMsIHJvdXRlUHJvcHMpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGxldCBwYXJzZWQgPSBwYXJzZVJlbGF0aXZlVXJsKHVybClcbiAgICBsZXQgeyBwYXRobmFtZSwgcXVlcnkgfSA9IHBhcnNlZFxuXG4gICAgLy8gVGhlIGJ1aWxkIG1hbmlmZXN0IG5lZWRzIHRvIGJlIGxvYWRlZCBiZWZvcmUgYXV0by1zdGF0aWMgZHluYW1pYyBwYWdlc1xuICAgIC8vIGdldCB0aGVpciBxdWVyeSBwYXJhbWV0ZXJzIHRvIGFsbG93IGVuc3VyaW5nIHRoZXkgY2FuIGJlIHBhcnNlZCBwcm9wZXJseVxuICAgIC8vIHdoZW4gcmV3cml0dGVuIHRvXG4gICAgbGV0IHBhZ2VzOiBzdHJpbmdbXSwgcmV3cml0ZXM6IGFueVxuICAgIHRyeSB7XG4gICAgICA7W3BhZ2VzLCB7IF9fcmV3cml0ZXM6IHJld3JpdGVzIH1dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB0aGlzLnBhZ2VMb2FkZXIuZ2V0UGFnZUxpc3QoKSxcbiAgICAgICAgZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCgpLFxuICAgICAgICB0aGlzLnBhZ2VMb2FkZXIuZ2V0TWlkZGxld2FyZSgpLFxuICAgICAgXSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElmIHdlIGZhaWwgdG8gcmVzb2x2ZSB0aGUgcGFnZSBsaXN0IG9yIGNsaWVudC1idWlsZCBtYW5pZmVzdCwgd2UgbXVzdFxuICAgICAgLy8gZG8gYSBzZXJ2ZXItc2lkZSB0cmFuc2l0aW9uOlxuICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oeyB1cmw6IGFzLCByb3V0ZXI6IHRoaXMgfSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIElmIGFza2VkIHRvIGNoYW5nZSB0aGUgY3VycmVudCBVUkwgd2Ugc2hvdWxkIHJlbG9hZCB0aGUgY3VycmVudCBwYWdlXG4gICAgLy8gKG5vdCBsb2NhdGlvbi5yZWxvYWQoKSBidXQgcmVsb2FkIGdldEluaXRpYWxQcm9wcyBhbmQgb3RoZXIgTmV4dC5qcyBzdHVmZnMpXG4gICAgLy8gV2UgYWxzbyBuZWVkIHRvIHNldCB0aGUgbWV0aG9kID0gcmVwbGFjZVN0YXRlIGFsd2F5c1xuICAgIC8vIGFzIHRoaXMgc2hvdWxkIG5vdCBnbyBpbnRvIHRoZSBoaXN0b3J5IChUaGF0J3MgaG93IGJyb3dzZXJzIHdvcmspXG4gICAgLy8gV2Ugc2hvdWxkIGNvbXBhcmUgdGhlIG5ldyBhc1BhdGggdG8gdGhlIGN1cnJlbnQgYXNQYXRoLCBub3QgdGhlIHVybFxuICAgIGlmICghdGhpcy51cmxJc05ldyhjbGVhbmVkQXMpICYmICFsb2NhbGVDaGFuZ2UpIHtcbiAgICAgIG1ldGhvZCA9ICdyZXBsYWNlU3RhdGUnXG4gICAgfVxuXG4gICAgLy8gd2UgbmVlZCB0byByZXNvbHZlIHRoZSBhcyB2YWx1ZSB1c2luZyByZXdyaXRlcyBmb3IgZHluYW1pYyBTU0dcbiAgICAvLyBwYWdlcyB0byBhbGxvdyBidWlsZGluZyB0aGUgZGF0YSBVUkwgY29ycmVjdGx5XG4gICAgbGV0IHJlc29sdmVkQXMgPSBhc1xuXG4gICAgLy8gdXJsIGFuZCBhcyBzaG91bGQgYWx3YXlzIGJlIHByZWZpeGVkIHdpdGggYmFzZVBhdGggYnkgdGhpc1xuICAgIC8vIHBvaW50IGJ5IGVpdGhlciBuZXh0L2xpbmsgb3Igcm91dGVyLnB1c2gvcmVwbGFjZSBzbyBzdHJpcCB0aGVcbiAgICAvLyBiYXNlUGF0aCBmcm9tIHRoZSBwYXRobmFtZSB0byBtYXRjaCB0aGUgcGFnZXMgZGlyIDEtdG8tMVxuICAgIHBhdGhuYW1lID0gcGF0aG5hbWVcbiAgICAgID8gcmVtb3ZlVHJhaWxpbmdTbGFzaChyZW1vdmVCYXNlUGF0aChwYXRobmFtZSkpXG4gICAgICA6IHBhdGhuYW1lXG5cbiAgICBsZXQgcm91dGUgPSByZW1vdmVUcmFpbGluZ1NsYXNoKHBhdGhuYW1lKVxuICAgIGNvbnN0IHBhcnNlZEFzUGF0aG5hbWUgPSBhcy5zdGFydHNXaXRoKCcvJykgJiYgcGFyc2VSZWxhdGl2ZVVybChhcykucGF0aG5hbWVcblxuICAgIC8vIGlmIHdlIGRldGVjdGVkIHRoZSBwYXRoIGFzIGFwcCByb3V0ZSBkdXJpbmcgcHJlZmV0Y2hpbmdcbiAgICAvLyB0cmlnZ2VyIGhhcmQgbmF2aWdhdGlvblxuICAgIGlmICgodGhpcy5jb21wb25lbnRzW3BhdGhuYW1lXSBhcyBhbnkpPy5fX2FwcFJvdXRlcikge1xuICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oeyB1cmw6IGFzLCByb3V0ZXI6IHRoaXMgfSlcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoKSA9PiB7fSlcbiAgICB9XG5cbiAgICBjb25zdCBpc01pZGRsZXdhcmVSZXdyaXRlID0gISEoXG4gICAgICBwYXJzZWRBc1BhdGhuYW1lICYmXG4gICAgICByb3V0ZSAhPT0gcGFyc2VkQXNQYXRobmFtZSAmJlxuICAgICAgKCFpc0R5bmFtaWNSb3V0ZShyb3V0ZSkgfHxcbiAgICAgICAgIWdldFJvdXRlTWF0Y2hlcihnZXRSb3V0ZVJlZ2V4KHJvdXRlKSkocGFyc2VkQXNQYXRobmFtZSkpXG4gICAgKVxuXG4gICAgLy8gd2UgZG9uJ3QgYXR0ZW1wdCByZXNvbHZlIGFzUGF0aCB3aGVuIHdlIG5lZWQgdG8gZXhlY3V0ZVxuICAgIC8vIG1pZGRsZXdhcmUgYXMgdGhlIHJlc29sdmluZyB3aWxsIG9jY3VyIHNlcnZlci1zaWRlXG4gICAgY29uc3QgaXNNaWRkbGV3YXJlTWF0Y2ggPVxuICAgICAgIW9wdGlvbnMuc2hhbGxvdyAmJlxuICAgICAgKGF3YWl0IG1hdGNoZXNNaWRkbGV3YXJlKHtcbiAgICAgICAgYXNQYXRoOiBhcyxcbiAgICAgICAgbG9jYWxlOiBuZXh0U3RhdGUubG9jYWxlLFxuICAgICAgICByb3V0ZXI6IHRoaXMsXG4gICAgICB9KSlcblxuICAgIGlmIChpc1F1ZXJ5VXBkYXRpbmcgJiYgaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgIHNob3VsZFJlc29sdmVIcmVmID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkUmVzb2x2ZUhyZWYgJiYgcGF0aG5hbWUgIT09ICcvX2Vycm9yJykge1xuICAgICAgOyhvcHRpb25zIGFzIGFueSkuX3Nob3VsZFJlc29sdmVIcmVmID0gdHJ1ZVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUyAmJiBhcy5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgY29uc3QgcmV3cml0ZXNSZXN1bHQgPSByZXNvbHZlUmV3cml0ZXMoXG4gICAgICAgICAgYWRkQmFzZVBhdGgoYWRkTG9jYWxlKGNsZWFuZWRBcywgbmV4dFN0YXRlLmxvY2FsZSksIHRydWUpLFxuICAgICAgICAgIHBhZ2VzLFxuICAgICAgICAgIHJld3JpdGVzLFxuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIChwOiBzdHJpbmcpID0+IHJlc29sdmVEeW5hbWljUm91dGUocCwgcGFnZXMpLFxuICAgICAgICAgIHRoaXMubG9jYWxlc1xuICAgICAgICApXG5cbiAgICAgICAgaWYgKHJld3JpdGVzUmVzdWx0LmV4dGVybmFsRGVzdCkge1xuICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHsgdXJsOiBhcywgcm91dGVyOiB0aGlzIH0pXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgcmVzb2x2ZWRBcyA9IHJld3JpdGVzUmVzdWx0LmFzUGF0aFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJld3JpdGVzUmVzdWx0Lm1hdGNoZWRQYWdlICYmIHJld3JpdGVzUmVzdWx0LnJlc29sdmVkSHJlZikge1xuICAgICAgICAgIC8vIGlmIHRoaXMgZGlyZWN0bHkgbWF0Y2hlcyBhIHBhZ2Ugd2UgbmVlZCB0byB1cGRhdGUgdGhlIGhyZWYgdG9cbiAgICAgICAgICAvLyBhbGxvdyB0aGUgY29ycmVjdCBwYWdlIGNodW5rIHRvIGJlIGxvYWRlZFxuICAgICAgICAgIHBhdGhuYW1lID0gcmV3cml0ZXNSZXN1bHQucmVzb2x2ZWRIcmVmXG4gICAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gYWRkQmFzZVBhdGgocGF0aG5hbWUpXG5cbiAgICAgICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWQucGF0aG5hbWUgPSByZXNvbHZlRHluYW1pY1JvdXRlKHBhdGhuYW1lLCBwYWdlcylcblxuICAgICAgICBpZiAocGFyc2VkLnBhdGhuYW1lICE9PSBwYXRobmFtZSkge1xuICAgICAgICAgIHBhdGhuYW1lID0gcGFyc2VkLnBhdGhuYW1lXG4gICAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gYWRkQmFzZVBhdGgocGF0aG5hbWUpXG5cbiAgICAgICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc0xvY2FsVVJMKGFzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGhyZWY6IFwiJHt1cmx9XCIgYW5kIGFzOiBcIiR7YXN9XCIsIHJlY2VpdmVkIHJlbGF0aXZlIGhyZWYgYW5kIGV4dGVybmFsIGFzYCArXG4gICAgICAgICAgICBgXFxuU2VlIG1vcmUgaW5mbzogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvaW52YWxpZC1yZWxhdGl2ZS11cmwtZXh0ZXJuYWwtYXNgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHsgdXJsOiBhcywgcm91dGVyOiB0aGlzIH0pXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXNvbHZlZEFzID0gcmVtb3ZlTG9jYWxlKHJlbW92ZUJhc2VQYXRoKHJlc29sdmVkQXMpLCBuZXh0U3RhdGUubG9jYWxlKVxuXG4gICAgcm91dGUgPSByZW1vdmVUcmFpbGluZ1NsYXNoKHBhdGhuYW1lKVxuICAgIGxldCByb3V0ZU1hdGNoOiBQYXJhbXMgfCBmYWxzZSA9IGZhbHNlXG5cbiAgICBpZiAoaXNEeW5hbWljUm91dGUocm91dGUpKSB7XG4gICAgICBjb25zdCBwYXJzZWRBcyA9IHBhcnNlUmVsYXRpdmVVcmwocmVzb2x2ZWRBcylcbiAgICAgIGNvbnN0IGFzUGF0aG5hbWUgPSBwYXJzZWRBcy5wYXRobmFtZVxuXG4gICAgICBjb25zdCByb3V0ZVJlZ2V4ID0gZ2V0Um91dGVSZWdleChyb3V0ZSlcbiAgICAgIHJvdXRlTWF0Y2ggPSBnZXRSb3V0ZU1hdGNoZXIocm91dGVSZWdleCkoYXNQYXRobmFtZSlcbiAgICAgIGNvbnN0IHNob3VsZEludGVycG9sYXRlID0gcm91dGUgPT09IGFzUGF0aG5hbWVcbiAgICAgIGNvbnN0IGludGVycG9sYXRlZEFzID0gc2hvdWxkSW50ZXJwb2xhdGVcbiAgICAgICAgPyBpbnRlcnBvbGF0ZUFzKHJvdXRlLCBhc1BhdGhuYW1lLCBxdWVyeSlcbiAgICAgICAgOiAoe30gYXMgeyByZXN1bHQ6IHVuZGVmaW5lZDsgcGFyYW1zOiB1bmRlZmluZWQgfSlcblxuICAgICAgaWYgKCFyb3V0ZU1hdGNoIHx8IChzaG91bGRJbnRlcnBvbGF0ZSAmJiAhaW50ZXJwb2xhdGVkQXMucmVzdWx0KSkge1xuICAgICAgICBjb25zdCBtaXNzaW5nUGFyYW1zID0gT2JqZWN0LmtleXMocm91dGVSZWdleC5ncm91cHMpLmZpbHRlcihcbiAgICAgICAgICAocGFyYW0pID0+ICFxdWVyeVtwYXJhbV0gJiYgIXJvdXRlUmVnZXguZ3JvdXBzW3BhcmFtXS5vcHRpb25hbFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKG1pc3NpbmdQYXJhbXMubGVuZ3RoID4gMCAmJiAhaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBgJHtcbiAgICAgICAgICAgICAgICBzaG91bGRJbnRlcnBvbGF0ZVxuICAgICAgICAgICAgICAgICAgPyBgSW50ZXJwb2xhdGluZyBocmVmYFxuICAgICAgICAgICAgICAgICAgOiBgTWlzbWF0Y2hpbmcgXFxgYXNcXGAgYW5kIFxcYGhyZWZcXGBgXG4gICAgICAgICAgICAgIH0gZmFpbGVkIHRvIG1hbnVhbGx5IHByb3ZpZGUgYCArXG4gICAgICAgICAgICAgICAgYHRoZSBwYXJhbXM6ICR7bWlzc2luZ1BhcmFtcy5qb2luKFxuICAgICAgICAgICAgICAgICAgJywgJ1xuICAgICAgICAgICAgICAgICl9IGluIHRoZSBcXGBocmVmXFxgJ3MgXFxgcXVlcnlcXGBgXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgKHNob3VsZEludGVycG9sYXRlXG4gICAgICAgICAgICAgID8gYFRoZSBwcm92aWRlZCBcXGBocmVmXFxgICgke3VybH0pIHZhbHVlIGlzIG1pc3NpbmcgcXVlcnkgdmFsdWVzICgke21pc3NpbmdQYXJhbXMuam9pbihcbiAgICAgICAgICAgICAgICAgICcsICdcbiAgICAgICAgICAgICAgICApfSkgdG8gYmUgaW50ZXJwb2xhdGVkIHByb3Blcmx5LiBgXG4gICAgICAgICAgICAgIDogYFRoZSBwcm92aWRlZCBcXGBhc1xcYCB2YWx1ZSAoJHthc1BhdGhuYW1lfSkgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIFxcYGhyZWZcXGAgdmFsdWUgKCR7cm91dGV9KS4gYCkgK1xuICAgICAgICAgICAgICBgUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy8ke1xuICAgICAgICAgICAgICAgIHNob3VsZEludGVycG9sYXRlXG4gICAgICAgICAgICAgICAgICA/ICdocmVmLWludGVycG9sYXRpb24tZmFpbGVkJ1xuICAgICAgICAgICAgICAgICAgOiAnaW5jb21wYXRpYmxlLWhyZWYtYXMnXG4gICAgICAgICAgICAgIH1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNob3VsZEludGVycG9sYXRlKSB7XG4gICAgICAgIGFzID0gZm9ybWF0V2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcGFyc2VkQXMsIHtcbiAgICAgICAgICAgIHBhdGhuYW1lOiBpbnRlcnBvbGF0ZWRBcy5yZXN1bHQsXG4gICAgICAgICAgICBxdWVyeTogb21pdChxdWVyeSwgaW50ZXJwb2xhdGVkQXMucGFyYW1zISksXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWVyZ2UgcGFyYW1zIGludG8gYHF1ZXJ5YCwgb3ZlcndyaXRpbmcgYW55IHNwZWNpZmllZCBpbiBzZWFyY2hcbiAgICAgICAgT2JqZWN0LmFzc2lnbihxdWVyeSwgcm91dGVNYXRjaClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzUXVlcnlVcGRhdGluZykge1xuICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KCdyb3V0ZUNoYW5nZVN0YXJ0JywgYXMsIHJvdXRlUHJvcHMpXG4gICAgfVxuXG4gICAgY29uc3QgaXNFcnJvclJvdXRlID0gdGhpcy5wYXRobmFtZSA9PT0gJy80MDQnIHx8IHRoaXMucGF0aG5hbWUgPT09ICcvX2Vycm9yJ1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByb3V0ZUluZm8gPSBhd2FpdCB0aGlzLmdldFJvdXRlSW5mbyh7XG4gICAgICAgIHJvdXRlLFxuICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGFzLFxuICAgICAgICByZXNvbHZlZEFzLFxuICAgICAgICByb3V0ZVByb3BzLFxuICAgICAgICBsb2NhbGU6IG5leHRTdGF0ZS5sb2NhbGUsXG4gICAgICAgIGlzUHJldmlldzogbmV4dFN0YXRlLmlzUHJldmlldyxcbiAgICAgICAgaGFzTWlkZGxld2FyZTogaXNNaWRkbGV3YXJlTWF0Y2gsXG4gICAgICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZTogb3B0aW9ucy51bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUsXG4gICAgICAgIGlzUXVlcnlVcGRhdGluZzogaXNRdWVyeVVwZGF0aW5nICYmICF0aGlzLmlzRmFsbGJhY2ssXG4gICAgICAgIGlzTWlkZGxld2FyZVJld3JpdGUsXG4gICAgICB9KVxuXG4gICAgICBpZiAoIWlzUXVlcnlVcGRhdGluZyAmJiAhb3B0aW9ucy5zaGFsbG93KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2JmbChcbiAgICAgICAgICBhcyxcbiAgICAgICAgICAncmVzb2x2ZWRBcycgaW4gcm91dGVJbmZvID8gcm91dGVJbmZvLnJlc29sdmVkQXMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbmV4dFN0YXRlLmxvY2FsZVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmICgncm91dGUnIGluIHJvdXRlSW5mbyAmJiBpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICBwYXRobmFtZSA9IHJvdXRlSW5mby5yb3V0ZSB8fCByb3V0ZVxuICAgICAgICByb3V0ZSA9IHBhdGhuYW1lXG5cbiAgICAgICAgaWYgKCFyb3V0ZVByb3BzLnNoYWxsb3cpIHtcbiAgICAgICAgICBxdWVyeSA9IE9iamVjdC5hc3NpZ24oe30sIHJvdXRlSW5mby5xdWVyeSB8fCB7fSwgcXVlcnkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGVhbmVkUGFyc2VkUGF0aG5hbWUgPSBoYXNCYXNlUGF0aChwYXJzZWQucGF0aG5hbWUpXG4gICAgICAgICAgPyByZW1vdmVCYXNlUGF0aChwYXJzZWQucGF0aG5hbWUpXG4gICAgICAgICAgOiBwYXJzZWQucGF0aG5hbWVcblxuICAgICAgICBpZiAocm91dGVNYXRjaCAmJiBwYXRobmFtZSAhPT0gY2xlYW5lZFBhcnNlZFBhdGhuYW1lKSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMocm91dGVNYXRjaCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAocm91dGVNYXRjaCAmJiBxdWVyeVtrZXldID09PSByb3V0ZU1hdGNoW2tleV0pIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHF1ZXJ5W2tleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRHluYW1pY1JvdXRlKHBhdGhuYW1lKSkge1xuICAgICAgICAgIGNvbnN0IHByZWZpeGVkQXMgPVxuICAgICAgICAgICAgIXJvdXRlUHJvcHMuc2hhbGxvdyAmJiByb3V0ZUluZm8ucmVzb2x2ZWRBc1xuICAgICAgICAgICAgICA/IHJvdXRlSW5mby5yZXNvbHZlZEFzXG4gICAgICAgICAgICAgIDogYWRkQmFzZVBhdGgoXG4gICAgICAgICAgICAgICAgICBhZGRMb2NhbGUoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBVUkwoYXMsIGxvY2F0aW9uLmhyZWYpLnBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUubG9jYWxlXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgIGxldCByZXdyaXRlQXMgPSBwcmVmaXhlZEFzXG5cbiAgICAgICAgICBpZiAoaGFzQmFzZVBhdGgocmV3cml0ZUFzKSkge1xuICAgICAgICAgICAgcmV3cml0ZUFzID0gcmVtb3ZlQmFzZVBhdGgocmV3cml0ZUFzKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbGVSZXN1bHQgPSBub3JtYWxpemVMb2NhbGVQYXRoKHJld3JpdGVBcywgdGhpcy5sb2NhbGVzKVxuICAgICAgICAgICAgbmV4dFN0YXRlLmxvY2FsZSA9IGxvY2FsZVJlc3VsdC5kZXRlY3RlZExvY2FsZSB8fCBuZXh0U3RhdGUubG9jYWxlXG4gICAgICAgICAgICByZXdyaXRlQXMgPSBsb2NhbGVSZXN1bHQucGF0aG5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgcm91dGVSZWdleCA9IGdldFJvdXRlUmVnZXgocGF0aG5hbWUpXG4gICAgICAgICAgY29uc3QgY3VyUm91dGVNYXRjaCA9IGdldFJvdXRlTWF0Y2hlcihyb3V0ZVJlZ2V4KShcbiAgICAgICAgICAgIG5ldyBVUkwocmV3cml0ZUFzLCBsb2NhdGlvbi5ocmVmKS5wYXRobmFtZVxuICAgICAgICAgIClcblxuICAgICAgICAgIGlmIChjdXJSb3V0ZU1hdGNoKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHF1ZXJ5LCBjdXJSb3V0ZU1hdGNoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgcm91dGVJbmZvIGJyaW5ncyBhIHJlZGlyZWN0IHdlIHNpbXBseSBhcHBseSBpdC5cbiAgICAgIGlmICgndHlwZScgaW4gcm91dGVJbmZvKSB7XG4gICAgICAgIGlmIChyb3V0ZUluZm8udHlwZSA9PT0gJ3JlZGlyZWN0LWludGVybmFsJykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNoYW5nZShtZXRob2QsIHJvdXRlSW5mby5uZXdVcmwsIHJvdXRlSW5mby5uZXdBcywgb3B0aW9ucylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7IHVybDogcm91dGVJbmZvLmRlc3RpbmF0aW9uLCByb3V0ZXI6IHRoaXMgfSlcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tcG9uZW50OiBhbnkgPSByb3V0ZUluZm8uQ29tcG9uZW50XG4gICAgICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudC51bnN0YWJsZV9zY3JpcHRMb2FkZXIpIHtcbiAgICAgICAgY29uc3Qgc2NyaXB0cyA9IFtdLmNvbmNhdChjb21wb25lbnQudW5zdGFibGVfc2NyaXB0TG9hZGVyKCkpXG5cbiAgICAgICAgc2NyaXB0cy5mb3JFYWNoKChzY3JpcHQ6IGFueSkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsaWVudFNjcmlwdExvYWQoc2NyaXB0LnByb3BzKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBoYW5kbGUgcmVkaXJlY3Qgb24gY2xpZW50LXRyYW5zaXRpb25cbiAgICAgIGlmICgocm91dGVJbmZvLl9fTl9TU0cgfHwgcm91dGVJbmZvLl9fTl9TU1ApICYmIHJvdXRlSW5mby5wcm9wcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcm91dGVJbmZvLnByb3BzLnBhZ2VQcm9wcyAmJlxuICAgICAgICAgIHJvdXRlSW5mby5wcm9wcy5wYWdlUHJvcHMuX19OX1JFRElSRUNUXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFVzZSB0aGUgZGVzdGluYXRpb24gZnJvbSByZWRpcmVjdCB3aXRob3V0IGFkZGluZyBsb2NhbGVcbiAgICAgICAgICBvcHRpb25zLmxvY2FsZSA9IGZhbHNlXG5cbiAgICAgICAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHJvdXRlSW5mby5wcm9wcy5wYWdlUHJvcHMuX19OX1JFRElSRUNUXG5cbiAgICAgICAgICAvLyBjaGVjayBpZiBkZXN0aW5hdGlvbiBpcyBpbnRlcm5hbCAocmVzb2x2ZXMgdG8gYSBwYWdlKSBhbmQgYXR0ZW1wdFxuICAgICAgICAgIC8vIGNsaWVudC1uYXZpZ2F0aW9uIGlmIGl0IGlzIGZhbGxpbmcgYmFjayB0byBoYXJkIG5hdmlnYXRpb24gaWZcbiAgICAgICAgICAvLyBpdCdzIG5vdFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLnN0YXJ0c1dpdGgoJy8nKSAmJlxuICAgICAgICAgICAgcm91dGVJbmZvLnByb3BzLnBhZ2VQcm9wcy5fX05fUkVESVJFQ1RfQkFTRV9QQVRIICE9PSBmYWxzZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkSHJlZiA9IHBhcnNlUmVsYXRpdmVVcmwoZGVzdGluYXRpb24pXG4gICAgICAgICAgICBwYXJzZWRIcmVmLnBhdGhuYW1lID0gcmVzb2x2ZUR5bmFtaWNSb3V0ZShcbiAgICAgICAgICAgICAgcGFyc2VkSHJlZi5wYXRobmFtZSxcbiAgICAgICAgICAgICAgcGFnZXNcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY29uc3QgeyB1cmw6IG5ld1VybCwgYXM6IG5ld0FzIH0gPSBwcmVwYXJlVXJsQXMoXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICBkZXN0aW5hdGlvblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hhbmdlKG1ldGhvZCwgbmV3VXJsLCBuZXdBcywgb3B0aW9ucylcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oeyB1cmw6IGRlc3RpbmF0aW9uLCByb3V0ZXI6IHRoaXMgfSlcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pXG4gICAgICAgIH1cblxuICAgICAgICBuZXh0U3RhdGUuaXNQcmV2aWV3ID0gISFyb3V0ZUluZm8ucHJvcHMuX19OX1BSRVZJRVdcblxuICAgICAgICAvLyBoYW5kbGUgU1NHIGRhdGEgNDA0XG4gICAgICAgIGlmIChyb3V0ZUluZm8ucHJvcHMubm90Rm91bmQgPT09IFNTR19EQVRBX05PVF9GT1VORCkge1xuICAgICAgICAgIGxldCBub3RGb3VuZFJvdXRlXG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaENvbXBvbmVudCgnLzQwNCcpXG4gICAgICAgICAgICBub3RGb3VuZFJvdXRlID0gJy80MDQnXG4gICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgbm90Rm91bmRSb3V0ZSA9ICcvX2Vycm9yJ1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJvdXRlSW5mbyA9IGF3YWl0IHRoaXMuZ2V0Um91dGVJbmZvKHtcbiAgICAgICAgICAgIHJvdXRlOiBub3RGb3VuZFJvdXRlLFxuICAgICAgICAgICAgcGF0aG5hbWU6IG5vdEZvdW5kUm91dGUsXG4gICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgIGFzLFxuICAgICAgICAgICAgcmVzb2x2ZWRBcyxcbiAgICAgICAgICAgIHJvdXRlUHJvcHM6IHsgc2hhbGxvdzogZmFsc2UgfSxcbiAgICAgICAgICAgIGxvY2FsZTogbmV4dFN0YXRlLmxvY2FsZSxcbiAgICAgICAgICAgIGlzUHJldmlldzogbmV4dFN0YXRlLmlzUHJldmlldyxcbiAgICAgICAgICAgIGlzTm90Rm91bmQ6IHRydWUsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmICgndHlwZScgaW4gcm91dGVJbmZvKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgbWlkZGxld2FyZSBlZmZlY3Qgb24gLzQwNGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgaXNRdWVyeVVwZGF0aW5nICYmXG4gICAgICAgIHRoaXMucGF0aG5hbWUgPT09ICcvX2Vycm9yJyAmJlxuICAgICAgICBzZWxmLl9fTkVYVF9EQVRBX18ucHJvcHM/LnBhZ2VQcm9wcz8uc3RhdHVzQ29kZSA9PT0gNTAwICYmXG4gICAgICAgIHJvdXRlSW5mby5wcm9wcz8ucGFnZVByb3BzXG4gICAgICApIHtcbiAgICAgICAgLy8gZW5zdXJlIHN0YXR1c0NvZGUgaXMgc3RpbGwgY29ycmVjdCBmb3Igc3RhdGljIDUwMCBwYWdlXG4gICAgICAgIC8vIHdoZW4gdXBkYXRpbmcgcXVlcnkgaW5mb3JtYXRpb25cbiAgICAgICAgcm91dGVJbmZvLnByb3BzLnBhZ2VQcm9wcy5zdGF0dXNDb2RlID0gNTAwXG4gICAgICB9XG5cbiAgICAgIC8vIHNoYWxsb3cgcm91dGluZyBpcyBvbmx5IGFsbG93ZWQgZm9yIHNhbWUgcGFnZSBVUkwgY2hhbmdlcy5cbiAgICAgIGNvbnN0IGlzVmFsaWRTaGFsbG93Um91dGUgPVxuICAgICAgICBvcHRpb25zLnNoYWxsb3cgJiYgbmV4dFN0YXRlLnJvdXRlID09PSAocm91dGVJbmZvLnJvdXRlID8/IHJvdXRlKVxuXG4gICAgICBjb25zdCBzaG91bGRTY3JvbGwgPVxuICAgICAgICBvcHRpb25zLnNjcm9sbCA/PyAoIWlzUXVlcnlVcGRhdGluZyAmJiAhaXNWYWxpZFNoYWxsb3dSb3V0ZSlcbiAgICAgIGNvbnN0IHJlc2V0U2Nyb2xsID0gc2hvdWxkU2Nyb2xsID8geyB4OiAwLCB5OiAwIH0gOiBudWxsXG4gICAgICBjb25zdCB1cGNvbWluZ1Njcm9sbFN0YXRlID0gZm9yY2VkU2Nyb2xsID8/IHJlc2V0U2Nyb2xsXG5cbiAgICAgIC8vIHRoZSBuZXcgc3RhdGUgdGhhdCB0aGUgcm91dGVyIGdvbm5hIHNldFxuICAgICAgY29uc3QgdXBjb21pbmdSb3V0ZXJTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBhc1BhdGg6IGNsZWFuZWRBcyxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9XG5cbiAgICAgIC8vIFdoZW4gdGhlIHBhZ2UgYmVpbmcgcmVuZGVyZWQgaXMgdGhlIDQwNCBwYWdlLCB3ZSBzaG91bGQgb25seSB1cGRhdGUgdGhlXG4gICAgICAvLyBxdWVyeSBwYXJhbWV0ZXJzLiBSb3V0ZSBjaGFuZ2VzIGhlcmUgbWlnaHQgYWRkIHRoZSBiYXNlUGF0aCB3aGVuIGl0XG4gICAgICAvLyB3YXNuJ3Qgb3JpZ2luYWxseSBwcmVzZW50LiBUaGlzIGlzIGFsc28gd2h5IHRoaXMgYmxvY2sgaXMgYmVmb3JlIHRoZVxuICAgICAgLy8gYmVsb3cgYGNoYW5nZVN0YXRlYCBjYWxsIHdoaWNoIHVwZGF0ZXMgdGhlIGJyb3dzZXIncyBoaXN0b3J5IChjaGFuZ2luZ1xuICAgICAgLy8gdGhlIFVSTCkuXG4gICAgICBpZiAoaXNRdWVyeVVwZGF0aW5nICYmIGlzRXJyb3JSb3V0ZSkge1xuICAgICAgICByb3V0ZUluZm8gPSBhd2FpdCB0aGlzLmdldFJvdXRlSW5mbyh7XG4gICAgICAgICAgcm91dGU6IHRoaXMucGF0aG5hbWUsXG4gICAgICAgICAgcGF0aG5hbWU6IHRoaXMucGF0aG5hbWUsXG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgYXMsXG4gICAgICAgICAgcmVzb2x2ZWRBcyxcbiAgICAgICAgICByb3V0ZVByb3BzOiB7IHNoYWxsb3c6IGZhbHNlIH0sXG4gICAgICAgICAgbG9jYWxlOiBuZXh0U3RhdGUubG9jYWxlLFxuICAgICAgICAgIGlzUHJldmlldzogbmV4dFN0YXRlLmlzUHJldmlldyxcbiAgICAgICAgICBpc1F1ZXJ5VXBkYXRpbmc6IGlzUXVlcnlVcGRhdGluZyAmJiAhdGhpcy5pc0ZhbGxiYWNrLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICgndHlwZScgaW4gcm91dGVJbmZvKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIG1pZGRsZXdhcmUgZWZmZWN0IG9uICR7dGhpcy5wYXRobmFtZX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMucGF0aG5hbWUgPT09ICcvX2Vycm9yJyAmJlxuICAgICAgICAgIHNlbGYuX19ORVhUX0RBVEFfXy5wcm9wcz8ucGFnZVByb3BzPy5zdGF0dXNDb2RlID09PSA1MDAgJiZcbiAgICAgICAgICByb3V0ZUluZm8ucHJvcHM/LnBhZ2VQcm9wc1xuICAgICAgICApIHtcbiAgICAgICAgICAvLyBlbnN1cmUgc3RhdHVzQ29kZSBpcyBzdGlsbCBjb3JyZWN0IGZvciBzdGF0aWMgNTAwIHBhZ2VcbiAgICAgICAgICAvLyB3aGVuIHVwZGF0aW5nIHF1ZXJ5IGluZm9ybWF0aW9uXG4gICAgICAgICAgcm91dGVJbmZvLnByb3BzLnBhZ2VQcm9wcy5zdGF0dXNDb2RlID0gNTAwXG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2V0KHVwY29taW5nUm91dGVyU3RhdGUsIHJvdXRlSW5mbywgdXBjb21pbmdTY3JvbGxTdGF0ZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKGlzRXJyb3IoZXJyKSAmJiBlcnIuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoJ3JvdXRlQ2hhbmdlRXJyb3InLCBlcnIsIGNsZWFuZWRBcywgcm91dGVQcm9wcylcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoJ2JlZm9yZUhpc3RvcnlDaGFuZ2UnLCBhcywgcm91dGVQcm9wcylcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUobWV0aG9kLCB1cmwsIGFzLCBvcHRpb25zKVxuXG4gICAgICAvLyBmb3IgcXVlcnkgdXBkYXRlcyB3ZSBjYW4gc2tpcCBpdCBpZiB0aGUgc3RhdGUgaXMgdW5jaGFuZ2VkIGFuZCB3ZSBkb24ndFxuICAgICAgLy8gbmVlZCB0byBzY3JvbGxcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9pc3N1ZXMvMzcxMzlcbiAgICAgIGNvbnN0IGNhblNraXBVcGRhdGluZyA9XG4gICAgICAgIGlzUXVlcnlVcGRhdGluZyAmJlxuICAgICAgICAhdXBjb21pbmdTY3JvbGxTdGF0ZSAmJlxuICAgICAgICAhcmVhZHlTdGF0ZUNoYW5nZSAmJlxuICAgICAgICAhbG9jYWxlQ2hhbmdlICYmXG4gICAgICAgIGNvbXBhcmVSb3V0ZXJTdGF0ZXModXBjb21pbmdSb3V0ZXJTdGF0ZSwgdGhpcy5zdGF0ZSlcblxuICAgICAgaWYgKCFjYW5Ta2lwVXBkYXRpbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNldCh1cGNvbWluZ1JvdXRlclN0YXRlLCByb3V0ZUluZm8sIHVwY29taW5nU2Nyb2xsU3RhdGUpXG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIGlmIChlLmNhbmNlbGxlZCkgcm91dGVJbmZvLmVycm9yID0gcm91dGVJbmZvLmVycm9yIHx8IGVcbiAgICAgICAgICBlbHNlIHRocm93IGVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3V0ZUluZm8uZXJyb3IpIHtcbiAgICAgICAgICBpZiAoIWlzUXVlcnlVcGRhdGluZykge1xuICAgICAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KFxuICAgICAgICAgICAgICAncm91dGVDaGFuZ2VFcnJvcicsXG4gICAgICAgICAgICAgIHJvdXRlSW5mby5lcnJvcixcbiAgICAgICAgICAgICAgY2xlYW5lZEFzLFxuICAgICAgICAgICAgICByb3V0ZVByb3BzXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgcm91dGVJbmZvLmVycm9yXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICAgIGlmIChuZXh0U3RhdGUubG9jYWxlKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZyA9IG5leHRTdGF0ZS5sb2NhbGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzUXVlcnlVcGRhdGluZykge1xuICAgICAgICAgIFJvdXRlci5ldmVudHMuZW1pdCgncm91dGVDaGFuZ2VDb21wbGV0ZScsIGFzLCByb3V0ZVByb3BzKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQSBoYXNoIG1hcmsgIyBpcyB0aGUgb3B0aW9uYWwgbGFzdCBwYXJ0IG9mIGEgVVJMXG4gICAgICAgIGNvbnN0IGhhc2hSZWdleCA9IC8jLiskL1xuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsICYmIGhhc2hSZWdleC50ZXN0KGFzKSkge1xuICAgICAgICAgIHRoaXMuc2Nyb2xsVG9IYXNoKGFzKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoaXNFcnJvcihlcnIpICYmIGVyci5jYW5jZWxsZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTdGF0ZShcbiAgICBtZXRob2Q6IEhpc3RvcnlNZXRob2QsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYXM6IHN0cmluZyxcbiAgICBvcHRpb25zOiBUcmFuc2l0aW9uT3B0aW9ucyA9IHt9XG4gICk6IHZvaWQge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5oaXN0b3J5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBXYXJuaW5nOiB3aW5kb3cuaGlzdG9yeSBpcyBub3QgYXZhaWxhYmxlLmApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5oaXN0b3J5W21ldGhvZF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFdhcm5pbmc6IHdpbmRvdy5oaXN0b3J5LiR7bWV0aG9kfSBpcyBub3QgYXZhaWxhYmxlYClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCAhPT0gJ3B1c2hTdGF0ZScgfHwgZ2V0VVJMKCkgIT09IGFzKSB7XG4gICAgICB0aGlzLl9zaGFsbG93ID0gb3B0aW9ucy5zaGFsbG93XG4gICAgICB3aW5kb3cuaGlzdG9yeVttZXRob2RdKFxuICAgICAgICB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGFzLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgX19OOiB0cnVlLFxuICAgICAgICAgIGtleTogKHRoaXMuX2tleSA9IG1ldGhvZCAhPT0gJ3B1c2hTdGF0ZScgPyB0aGlzLl9rZXkgOiBjcmVhdGVLZXkoKSksXG4gICAgICAgIH0gYXMgSGlzdG9yeVN0YXRlLFxuICAgICAgICAvLyBNb3N0IGJyb3dzZXJzIGN1cnJlbnRseSBpZ25vcmVzIHRoaXMgcGFyYW1ldGVyLCBhbHRob3VnaCB0aGV5IG1heSB1c2UgaXQgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgLy8gUGFzc2luZyB0aGUgZW1wdHkgc3RyaW5nIGhlcmUgc2hvdWxkIGJlIHNhZmUgYWdhaW5zdCBmdXR1cmUgY2hhbmdlcyB0byB0aGUgbWV0aG9kLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvSGlzdG9yeS9yZXBsYWNlU3RhdGVcbiAgICAgICAgJycsXG4gICAgICAgIGFzXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlUm91dGVJbmZvRXJyb3IoXG4gICAgZXJyOiBFcnJvciAmIHsgY29kZT86IGFueTsgY2FuY2VsbGVkPzogYm9vbGVhbiB9LFxuICAgIHBhdGhuYW1lOiBzdHJpbmcsXG4gICAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5LFxuICAgIGFzOiBzdHJpbmcsXG4gICAgcm91dGVQcm9wczogUm91dGVQcm9wZXJ0aWVzLFxuICAgIGxvYWRFcnJvckZhaWw/OiBib29sZWFuXG4gICk6IFByb21pc2U8Q29tcGxldGVQcml2YXRlUm91dGVJbmZvPiB7XG4gICAgaWYgKGVyci5jYW5jZWxsZWQpIHtcbiAgICAgIC8vIGJ1YmJsZSB1cCBjYW5jZWxsYXRpb24gZXJyb3JzXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoaXNBc3NldEVycm9yKGVycikgfHwgbG9hZEVycm9yRmFpbCkge1xuICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KCdyb3V0ZUNoYW5nZUVycm9yJywgZXJyLCBhcywgcm91dGVQcm9wcylcblxuICAgICAgLy8gSWYgd2UgY2FuJ3QgbG9hZCB0aGUgcGFnZSBpdCBjb3VsZCBiZSBvbmUgb2YgZm9sbG93aW5nIHJlYXNvbnNcbiAgICAgIC8vICAxLiBQYWdlIGRvZXNuJ3QgZXhpc3RzXG4gICAgICAvLyAgMi4gUGFnZSBkb2VzIGV4aXN0IGluIGEgZGlmZmVyZW50IHpvbmVcbiAgICAgIC8vICAzLiBJbnRlcm5hbCBlcnJvciB3aGlsZSBsb2FkaW5nIHRoZSBwYWdlXG5cbiAgICAgIC8vIFNvLCBkb2luZyBhIGhhcmQgcmVsb2FkIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGRlYWwgd2l0aCB0aGlzLlxuICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICB1cmw6IGFzLFxuICAgICAgICByb3V0ZXI6IHRoaXMsXG4gICAgICB9KVxuXG4gICAgICAvLyBDaGFuZ2luZyB0aGUgVVJMIGRvZXNuJ3QgYmxvY2sgZXhlY3V0aW5nIHRoZSBjdXJyZW50IGNvZGUgcGF0aC5cbiAgICAgIC8vIFNvIGxldCdzIHRocm93IGEgY2FuY2VsbGF0aW9uIGVycm9yIHN0b3AgdGhlIHJvdXRpbmcgbG9naWMuXG4gICAgICB0aHJvdyBidWlsZENhbmNlbGxhdGlvbkVycm9yKClcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGVycilcblxuICAgIHRyeSB7XG4gICAgICBsZXQgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHsgcGFnZTogQ29tcG9uZW50LCBzdHlsZVNoZWV0cyB9ID1cbiAgICAgICAgYXdhaXQgdGhpcy5mZXRjaENvbXBvbmVudCgnL19lcnJvcicpXG5cbiAgICAgIGNvbnN0IHJvdXRlSW5mbzogQ29tcGxldGVQcml2YXRlUm91dGVJbmZvID0ge1xuICAgICAgICBwcm9wcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBzdHlsZVNoZWV0cyxcbiAgICAgICAgZXJyLFxuICAgICAgICBlcnJvcjogZXJyLFxuICAgICAgfVxuXG4gICAgICBpZiAoIXJvdXRlSW5mby5wcm9wcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJvdXRlSW5mby5wcm9wcyA9IGF3YWl0IHRoaXMuZ2V0SW5pdGlhbFByb3BzKENvbXBvbmVudCwge1xuICAgICAgICAgICAgZXJyLFxuICAgICAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgfSBjYXRjaCAoZ2lwRXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZXJyb3IgcGFnZSBgZ2V0SW5pdGlhbFByb3BzYDogJywgZ2lwRXJyKVxuICAgICAgICAgIHJvdXRlSW5mby5wcm9wcyA9IHt9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlSW5mb1xuICAgIH0gY2F0Y2ggKHJvdXRlSW5mb0Vycikge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUm91dGVJbmZvRXJyb3IoXG4gICAgICAgIGlzRXJyb3Iocm91dGVJbmZvRXJyKSA/IHJvdXRlSW5mb0VyciA6IG5ldyBFcnJvcihyb3V0ZUluZm9FcnIgKyAnJyksXG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgYXMsXG4gICAgICAgIHJvdXRlUHJvcHMsXG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRSb3V0ZUluZm8oe1xuICAgIHJvdXRlOiByZXF1ZXN0ZWRSb3V0ZSxcbiAgICBwYXRobmFtZSxcbiAgICBxdWVyeSxcbiAgICBhcyxcbiAgICByZXNvbHZlZEFzLFxuICAgIHJvdXRlUHJvcHMsXG4gICAgbG9jYWxlLFxuICAgIGhhc01pZGRsZXdhcmUsXG4gICAgaXNQcmV2aWV3LFxuICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSxcbiAgICBpc1F1ZXJ5VXBkYXRpbmcsXG4gICAgaXNNaWRkbGV3YXJlUmV3cml0ZSxcbiAgICBpc05vdEZvdW5kLFxuICB9OiB7XG4gICAgcm91dGU6IHN0cmluZ1xuICAgIHBhdGhuYW1lOiBzdHJpbmdcbiAgICBxdWVyeTogUGFyc2VkVXJsUXVlcnlcbiAgICBhczogc3RyaW5nXG4gICAgcmVzb2x2ZWRBczogc3RyaW5nXG4gICAgaGFzTWlkZGxld2FyZT86IGJvb2xlYW5cbiAgICByb3V0ZVByb3BzOiBSb3V0ZVByb3BlcnRpZXNcbiAgICBsb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGlzUHJldmlldzogYm9vbGVhblxuICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZT86IGJvb2xlYW5cbiAgICBpc1F1ZXJ5VXBkYXRpbmc/OiBib29sZWFuXG4gICAgaXNNaWRkbGV3YXJlUmV3cml0ZT86IGJvb2xlYW5cbiAgICBpc05vdEZvdW5kPzogYm9vbGVhblxuICB9KSB7XG4gICAgLyoqXG4gICAgICogVGhpcyBgcm91dGVgIGJpbmRpbmcgY2FuIGNoYW5nZSBpZiB0aGVyZSdzIGEgcmV3cml0ZVxuICAgICAqIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCByb3V0ZVxuICAgICAqIHNvIHdlIGNhbiBzdG9yZSB0aGUgY2FjaGUgZm9yIGl0IGFuZCBhdm9pZCByZS1yZXF1ZXN0aW5nIGV2ZXJ5IHRpbWVcbiAgICAgKiBmb3Igc2hhbGxvdyByb3V0aW5nIHB1cnBvc2VzLlxuICAgICAqL1xuICAgIGxldCByb3V0ZSA9IHJlcXVlc3RlZFJvdXRlXG5cbiAgICB0cnkge1xuICAgICAgbGV0IGV4aXN0aW5nSW5mbzogUHJpdmF0ZVJvdXRlSW5mbyB8IHVuZGVmaW5lZCA9IHRoaXMuY29tcG9uZW50c1tyb3V0ZV1cbiAgICAgIGlmIChyb3V0ZVByb3BzLnNoYWxsb3cgJiYgZXhpc3RpbmdJbmZvICYmIHRoaXMucm91dGUgPT09IHJvdXRlKSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ0luZm9cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlQ2FuY2VsbGVkID0gZ2V0Q2FuY2VsbGVkSGFuZGxlcih7IHJvdXRlLCByb3V0ZXI6IHRoaXMgfSlcblxuICAgICAgaWYgKGhhc01pZGRsZXdhcmUpIHtcbiAgICAgICAgZXhpc3RpbmdJbmZvID0gdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIGxldCBjYWNoZWRSb3V0ZUluZm8gPVxuICAgICAgICBleGlzdGluZ0luZm8gJiZcbiAgICAgICAgISgnaW5pdGlhbCcgaW4gZXhpc3RpbmdJbmZvKSAmJlxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ2RldmVsb3BtZW50J1xuICAgICAgICAgID8gZXhpc3RpbmdJbmZvXG4gICAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgY29uc3QgaXNCYWNrZ3JvdW5kID0gaXNRdWVyeVVwZGF0aW5nXG4gICAgICBjb25zdCBmZXRjaE5leHREYXRhUGFyYW1zOiBGZXRjaE5leHREYXRhUGFyYW1zID0ge1xuICAgICAgICBkYXRhSHJlZjogdGhpcy5wYWdlTG9hZGVyLmdldERhdGFIcmVmKHtcbiAgICAgICAgICBocmVmOiBmb3JtYXRXaXRoVmFsaWRhdGlvbih7IHBhdGhuYW1lLCBxdWVyeSB9KSxcbiAgICAgICAgICBza2lwSW50ZXJwb2xhdGlvbjogdHJ1ZSxcbiAgICAgICAgICBhc1BhdGg6IGlzTm90Rm91bmQgPyAnLzQwNCcgOiByZXNvbHZlZEFzLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgfSksXG4gICAgICAgIGhhc01pZGRsZXdhcmU6IHRydWUsXG4gICAgICAgIGlzU2VydmVyUmVuZGVyOiB0aGlzLmlzU3NyLFxuICAgICAgICBwYXJzZUpTT046IHRydWUsXG4gICAgICAgIGluZmxpZ2h0Q2FjaGU6IGlzQmFja2dyb3VuZCA/IHRoaXMuc2JjIDogdGhpcy5zZGMsXG4gICAgICAgIHBlcnNpc3RDYWNoZTogIWlzUHJldmlldyxcbiAgICAgICAgaXNQcmVmZXRjaDogZmFsc2UsXG4gICAgICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSxcbiAgICAgICAgaXNCYWNrZ3JvdW5kLFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YTpcbiAgICAgICAgfCBXaXRoTWlkZGxld2FyZUVmZmVjdHNPdXRwdXRcbiAgICAgICAgfCAoUGljazxXaXRoTWlkZGxld2FyZUVmZmVjdHNPdXRwdXQsICdqc29uJz4gJlxuICAgICAgICAgICAgT21pdDxQYXJ0aWFsPFdpdGhNaWRkbGV3YXJlRWZmZWN0c091dHB1dD4sICdqc29uJz4pXG4gICAgICAgIHwgbnVsbCA9XG4gICAgICAgIGlzUXVlcnlVcGRhdGluZyAmJiAhaXNNaWRkbGV3YXJlUmV3cml0ZVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogYXdhaXQgd2l0aE1pZGRsZXdhcmVFZmZlY3RzKHtcbiAgICAgICAgICAgICAgZmV0Y2hEYXRhOiAoKSA9PiBmZXRjaE5leHREYXRhKGZldGNoTmV4dERhdGFQYXJhbXMpLFxuICAgICAgICAgICAgICBhc1BhdGg6IGlzTm90Rm91bmQgPyAnLzQwNCcgOiByZXNvbHZlZEFzLFxuICAgICAgICAgICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgICAgICAgICAgcm91dGVyOiB0aGlzLFxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXJkIGVycm9yIGR1cmluZyBxdWVyeSB1cGRhdGluZ1xuICAgICAgICAgICAgICAvLyBhcyBpdCdzIHVuLW5lY2Vzc2FyeSBhbmQgZG9lc24ndCBuZWVkIHRvIGJlIGZhdGFsXG4gICAgICAgICAgICAgIC8vIHVubGVzcyBpdCBpcyBhIGZhbGxiYWNrIHJvdXRlIGFuZCB0aGUgcHJvcHMgY2FuJ3RcbiAgICAgICAgICAgICAgLy8gYmUgbG9hZGVkXG4gICAgICAgICAgICAgIGlmIChpc1F1ZXJ5VXBkYXRpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRocm93IGVyclxuICAgICAgICAgICAgfSlcblxuICAgICAgLy8gd2hlbiByZW5kZXJpbmcgZXJyb3Igcm91dGVzIHdlIGRvbid0IGFwcGx5IG1pZGRsZXdhcmVcbiAgICAgIC8vIGVmZmVjdHNcbiAgICAgIGlmIChkYXRhICYmIChwYXRobmFtZSA9PT0gJy9fZXJyb3InIHx8IHBhdGhuYW1lID09PSAnLzQwNCcpKSB7XG4gICAgICAgIGRhdGEuZWZmZWN0ID0gdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1F1ZXJ5VXBkYXRpbmcpIHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IHsganNvbjogc2VsZi5fX05FWFRfREFUQV9fLnByb3BzIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhLmpzb24gPSBzZWxmLl9fTkVYVF9EQVRBX18ucHJvcHNcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBoYW5kbGVDYW5jZWxsZWQoKVxuXG4gICAgICBpZiAoXG4gICAgICAgIGRhdGE/LmVmZmVjdD8udHlwZSA9PT0gJ3JlZGlyZWN0LWludGVybmFsJyB8fFxuICAgICAgICBkYXRhPy5lZmZlY3Q/LnR5cGUgPT09ICdyZWRpcmVjdC1leHRlcm5hbCdcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZGF0YS5lZmZlY3RcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGE/LmVmZmVjdD8udHlwZSA9PT0gJ3Jld3JpdGUnKSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUm91dGUgPSByZW1vdmVUcmFpbGluZ1NsYXNoKGRhdGEuZWZmZWN0LnJlc29sdmVkSHJlZilcbiAgICAgICAgY29uc3QgcGFnZXMgPSBhd2FpdCB0aGlzLnBhZ2VMb2FkZXIuZ2V0UGFnZUxpc3QoKVxuXG4gICAgICAgIC8vIGR1cmluZyBxdWVyeSB1cGRhdGluZyB0aGUgcGFnZSBtdXN0IG1hdGNoIGFsdGhvdWdoIGR1cmluZ1xuICAgICAgICAvLyBjbGllbnQtdHJhbnNpdGlvbiBhIHJlZGlyZWN0IHRoYXQgZG9lc24ndCBtYXRjaCBhIHBhZ2VcbiAgICAgICAgLy8gY2FuIGJlIHJldHVybmVkIGFuZCB0aGlzIHNob3VsZCB0cmlnZ2VyIGEgaGFyZCBuYXZpZ2F0aW9uXG4gICAgICAgIC8vIHdoaWNoIGlzIHZhbGlkIGZvciBpbmNyZW1lbnRhbCBtaWdyYXRpb25cbiAgICAgICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcgfHwgcGFnZXMuaW5jbHVkZXMocmVzb2x2ZWRSb3V0ZSkpIHtcbiAgICAgICAgICByb3V0ZSA9IHJlc29sdmVkUm91dGVcbiAgICAgICAgICBwYXRobmFtZSA9IGRhdGEuZWZmZWN0LnJlc29sdmVkSHJlZlxuICAgICAgICAgIHF1ZXJ5ID0geyAuLi5xdWVyeSwgLi4uZGF0YS5lZmZlY3QucGFyc2VkQXMucXVlcnkgfVxuICAgICAgICAgIHJlc29sdmVkQXMgPSByZW1vdmVCYXNlUGF0aChcbiAgICAgICAgICAgIG5vcm1hbGl6ZUxvY2FsZVBhdGgoZGF0YS5lZmZlY3QucGFyc2VkQXMucGF0aG5hbWUsIHRoaXMubG9jYWxlcylcbiAgICAgICAgICAgICAgLnBhdGhuYW1lXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgLy8gQ2hlY2sgYWdhaW4gdGhlIGNhY2hlIHdpdGggdGhlIG5ldyBkZXN0aW5hdGlvbi5cbiAgICAgICAgICBleGlzdGluZ0luZm8gPSB0aGlzLmNvbXBvbmVudHNbcm91dGVdXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcm91dGVQcm9wcy5zaGFsbG93ICYmXG4gICAgICAgICAgICBleGlzdGluZ0luZm8gJiZcbiAgICAgICAgICAgIHRoaXMucm91dGUgPT09IHJvdXRlICYmXG4gICAgICAgICAgICAhaGFzTWlkZGxld2FyZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIG1hdGNoIHdpdGggdGhlIGN1cnJlbnQgcm91dGUgZHVlIHRvIHJld3JpdGUsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gY29weSB0aGUgZXhpc3RpbmcgaW5mb3JtYXRpb24gdG8gdGhlIHJld3JpdHRlbiBvbmUuXG4gICAgICAgICAgICAvLyBUaGVuLCB3ZSByZXR1cm4gdGhlIGluZm9ybWF0aW9uIGFsb25nIHdpdGggdGhlIG1hdGNoZWQgcm91dGUuXG4gICAgICAgICAgICByZXR1cm4geyAuLi5leGlzdGluZ0luZm8sIHJvdXRlIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQVBJUm91dGUocm91dGUpKSB7XG4gICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHsgdXJsOiBhcywgcm91dGVyOiB0aGlzIH0pXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxuZXZlcj4oKCkgPT4ge30pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvdXRlSW5mbyA9XG4gICAgICAgIGNhY2hlZFJvdXRlSW5mbyB8fFxuICAgICAgICAoYXdhaXQgdGhpcy5mZXRjaENvbXBvbmVudChyb3V0ZSkudGhlbjxDb21wbGV0ZVByaXZhdGVSb3V0ZUluZm8+KFxuICAgICAgICAgIChyZXMpID0+ICh7XG4gICAgICAgICAgICBDb21wb25lbnQ6IHJlcy5wYWdlLFxuICAgICAgICAgICAgc3R5bGVTaGVldHM6IHJlcy5zdHlsZVNoZWV0cyxcbiAgICAgICAgICAgIF9fTl9TU0c6IHJlcy5tb2QuX19OX1NTRyxcbiAgICAgICAgICAgIF9fTl9TU1A6IHJlcy5tb2QuX19OX1NTUCxcbiAgICAgICAgICB9KVxuICAgICAgICApKVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zdCB7IGlzVmFsaWRFbGVtZW50VHlwZSB9ID1cbiAgICAgICAgICByZXF1aXJlKCduZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXMnKSBhcyB0eXBlb2YgaW1wb3J0KCduZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXMnKVxuICAgICAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZShyb3V0ZUluZm8uQ29tcG9uZW50KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaGUgZGVmYXVsdCBleHBvcnQgaXMgbm90IGEgUmVhY3QgQ29tcG9uZW50IGluIHBhZ2U6IFwiJHtwYXRobmFtZX1cImBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHdhc0JhaWxlZFByZWZldGNoID0gZGF0YT8ucmVzcG9uc2U/LmhlYWRlcnMuZ2V0KCd4LW1pZGRsZXdhcmUtc2tpcCcpXG5cbiAgICAgIGNvbnN0IHNob3VsZEZldGNoRGF0YSA9IHJvdXRlSW5mby5fX05fU1NHIHx8IHJvdXRlSW5mby5fX05fU1NQXG5cbiAgICAgIC8vIEZvciBub24tU1NHIHByZWZldGNoZXMgdGhhdCBiYWlsZWQgYmVmb3JlIHNlbmRpbmcgZGF0YVxuICAgICAgLy8gd2UgY2xlYXIgdGhlIGNhY2hlIHRvIGZldGNoIGZ1bGwgcmVzcG9uc2VcbiAgICAgIGlmICh3YXNCYWlsZWRQcmVmZXRjaCAmJiBkYXRhPy5kYXRhSHJlZikge1xuICAgICAgICBkZWxldGUgdGhpcy5zZGNbZGF0YS5kYXRhSHJlZl1cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBwcm9wcywgY2FjaGVLZXkgfSA9IGF3YWl0IHRoaXMuX2dldERhdGEoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkRmV0Y2hEYXRhKSB7XG4gICAgICAgICAgaWYgKGRhdGE/Lmpzb24gJiYgIXdhc0JhaWxlZFByZWZldGNoKSB7XG4gICAgICAgICAgICByZXR1cm4geyBjYWNoZUtleTogZGF0YS5jYWNoZUtleSwgcHJvcHM6IGRhdGEuanNvbiB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGF0YUhyZWYgPSBkYXRhPy5kYXRhSHJlZlxuICAgICAgICAgICAgPyBkYXRhLmRhdGFIcmVmXG4gICAgICAgICAgICA6IHRoaXMucGFnZUxvYWRlci5nZXREYXRhSHJlZih7XG4gICAgICAgICAgICAgICAgaHJlZjogZm9ybWF0V2l0aFZhbGlkYXRpb24oeyBwYXRobmFtZSwgcXVlcnkgfSksXG4gICAgICAgICAgICAgICAgYXNQYXRoOiByZXNvbHZlZEFzLFxuICAgICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBmZXRjaE5leHREYXRhKHtcbiAgICAgICAgICAgIGRhdGFIcmVmLFxuICAgICAgICAgICAgaXNTZXJ2ZXJSZW5kZXI6IHRoaXMuaXNTc3IsXG4gICAgICAgICAgICBwYXJzZUpTT046IHRydWUsXG4gICAgICAgICAgICBpbmZsaWdodENhY2hlOiB3YXNCYWlsZWRQcmVmZXRjaCA/IHt9IDogdGhpcy5zZGMsXG4gICAgICAgICAgICBwZXJzaXN0Q2FjaGU6ICFpc1ByZXZpZXcsXG4gICAgICAgICAgICBpc1ByZWZldGNoOiBmYWxzZSxcbiAgICAgICAgICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNhY2hlS2V5OiBmZXRjaGVkLmNhY2hlS2V5LFxuICAgICAgICAgICAgcHJvcHM6IGZldGNoZWQuanNvbiB8fCB7fSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgIHByb3BzOiBhd2FpdCB0aGlzLmdldEluaXRpYWxQcm9wcyhcbiAgICAgICAgICAgIHJvdXRlSW5mby5Db21wb25lbnQsXG4gICAgICAgICAgICAvLyB3ZSBwcm92aWRlIEFwcFRyZWUgbGF0ZXIgc28gdGhpcyBuZWVkcyB0byBiZSBgYW55YFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgIGFzUGF0aDogYXMsXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgbG9jYWxlczogdGhpcy5sb2NhbGVzLFxuICAgICAgICAgICAgICBkZWZhdWx0TG9jYWxlOiB0aGlzLmRlZmF1bHRMb2NhbGUsXG4gICAgICAgICAgICB9IGFzIGFueVxuICAgICAgICAgICksXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIE9ubHkgYnVzdCB0aGUgZGF0YSBjYWNoZSBmb3IgU1NQIHJvdXRlcyBhbHRob3VnaFxuICAgICAgLy8gbWlkZGxld2FyZSBjYW4gc2tpcCBjYWNoZSBwZXIgcmVxdWVzdCB3aXRoXG4gICAgICAvLyB4LW1pZGRsZXdhcmUtY2FjaGU6IG5vLWNhY2hlIGFzIHdlbGxcbiAgICAgIGlmIChyb3V0ZUluZm8uX19OX1NTUCAmJiBmZXRjaE5leHREYXRhUGFyYW1zLmRhdGFIcmVmICYmIGNhY2hlS2V5KSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNkY1tjYWNoZUtleV1cbiAgICAgIH1cblxuICAgICAgLy8gd2Uga2ljayBvZmYgYSBIRUFEIHJlcXVlc3QgaW4gdGhlIGJhY2tncm91bmRcbiAgICAgIC8vIHdoZW4gYSBub24tcHJlZmV0Y2ggcmVxdWVzdCBpcyBtYWRlIHRvIHNpZ25hbCByZXZhbGlkYXRpb25cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuaXNQcmV2aWV3ICYmXG4gICAgICAgIHJvdXRlSW5mby5fX05fU1NHICYmXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAnZGV2ZWxvcG1lbnQnICYmXG4gICAgICAgICFpc1F1ZXJ5VXBkYXRpbmdcbiAgICAgICkge1xuICAgICAgICBmZXRjaE5leHREYXRhKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGZldGNoTmV4dERhdGFQYXJhbXMsIHtcbiAgICAgICAgICAgIGlzQmFja2dyb3VuZDogdHJ1ZSxcbiAgICAgICAgICAgIHBlcnNpc3RDYWNoZTogZmFsc2UsXG4gICAgICAgICAgICBpbmZsaWdodENhY2hlOiB0aGlzLnNiYyxcbiAgICAgICAgICB9KVxuICAgICAgICApLmNhdGNoKCgpID0+IHt9KVxuICAgICAgfVxuXG4gICAgICBwcm9wcy5wYWdlUHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9wcy5wYWdlUHJvcHMpXG4gICAgICByb3V0ZUluZm8ucHJvcHMgPSBwcm9wc1xuICAgICAgcm91dGVJbmZvLnJvdXRlID0gcm91dGVcbiAgICAgIHJvdXRlSW5mby5xdWVyeSA9IHF1ZXJ5XG4gICAgICByb3V0ZUluZm8ucmVzb2x2ZWRBcyA9IHJlc29sdmVkQXNcbiAgICAgIHRoaXMuY29tcG9uZW50c1tyb3V0ZV0gPSByb3V0ZUluZm9cblxuICAgICAgcmV0dXJuIHJvdXRlSW5mb1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUm91dGVJbmZvRXJyb3IoXG4gICAgICAgIGdldFByb3BlckVycm9yKGVyciksXG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgYXMsXG4gICAgICAgIHJvdXRlUHJvcHNcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldChcbiAgICBzdGF0ZTogdHlwZW9mIHRoaXMuc3RhdGUsXG4gICAgZGF0YTogUHJpdmF0ZVJvdXRlSW5mbyxcbiAgICByZXNldFNjcm9sbDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGVcblxuICAgIHJldHVybiB0aGlzLnN1YihcbiAgICAgIGRhdGEsXG4gICAgICB0aGlzLmNvbXBvbmVudHNbJy9fYXBwJ10uQ29tcG9uZW50IGFzIEFwcENvbXBvbmVudCxcbiAgICAgIHJlc2V0U2Nyb2xsXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGV4ZWN1dGUgYmVmb3JlIHJlcGxhY2luZyByb3V0ZXIgc3RhdGVcbiAgICogQHBhcmFtIGNiIGNhbGxiYWNrIHRvIGJlIGV4ZWN1dGVkXG4gICAqL1xuICBiZWZvcmVQb3BTdGF0ZShjYjogQmVmb3JlUG9wU3RhdGVDYWxsYmFjaykge1xuICAgIHRoaXMuX2JwcyA9IGNiXG4gIH1cblxuICBvbmx5QUhhc2hDaGFuZ2UoYXM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5hc1BhdGgpIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IFtvbGRVcmxOb0hhc2gsIG9sZEhhc2hdID0gdGhpcy5hc1BhdGguc3BsaXQoJyMnLCAyKVxuICAgIGNvbnN0IFtuZXdVcmxOb0hhc2gsIG5ld0hhc2hdID0gYXMuc3BsaXQoJyMnLCAyKVxuXG4gICAgLy8gTWFrZXMgc3VyZSB3ZSBzY3JvbGwgdG8gdGhlIHByb3ZpZGVkIGhhc2ggaWYgdGhlIHVybC9oYXNoIGFyZSB0aGUgc2FtZVxuICAgIGlmIChuZXdIYXNoICYmIG9sZFVybE5vSGFzaCA9PT0gbmV3VXJsTm9IYXNoICYmIG9sZEhhc2ggPT09IG5ld0hhc2gpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHVybHMgYXJlIGNoYW5nZSwgdGhlcmUncyBtb3JlIHRoYW4gYSBoYXNoIGNoYW5nZVxuICAgIGlmIChvbGRVcmxOb0hhc2ggIT09IG5ld1VybE5vSGFzaCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGhhc2ggaGFzIGNoYW5nZWQsIHRoZW4gaXQncyBhIGhhc2ggb25seSBjaGFuZ2UuXG4gICAgLy8gVGhpcyBjaGVjayBpcyBuZWNlc3NhcnkgdG8gaGFuZGxlIGJvdGggdGhlIGVudGVyIGFuZFxuICAgIC8vIGxlYXZlIGhhc2ggPT09ICcnIGNhc2VzLiBUaGUgaWRlbnRpdHkgY2FzZSBmYWxscyB0aHJvdWdoXG4gICAgLy8gYW5kIGlzIHRyZWF0ZWQgYXMgYSBuZXh0IHJlbG9hZC5cbiAgICByZXR1cm4gb2xkSGFzaCAhPT0gbmV3SGFzaFxuICB9XG5cbiAgc2Nyb2xsVG9IYXNoKGFzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBbLCBoYXNoID0gJyddID0gYXMuc3BsaXQoJyMnLCAyKVxuXG4gICAgZGlzYWJsZVNtb290aFNjcm9sbER1cmluZ1JvdXRlVHJhbnNpdGlvbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gU2Nyb2xsIHRvIHRvcCBpZiB0aGUgaGFzaCBpcyBqdXN0IGAjYCB3aXRoIG5vIHZhbHVlIG9yIGAjdG9wYFxuICAgICAgICAvLyBUbyBtaXJyb3IgYnJvd3NlcnNcbiAgICAgICAgaWYgKGhhc2ggPT09ICcnIHx8IGhhc2ggPT09ICd0b3AnKSB7XG4gICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWNvZGUgaGFzaCB0byBtYWtlIG5vbi1sYXRpbiBhbmNob3Igd29ya3MuXG4gICAgICAgIGNvbnN0IHJhd0hhc2ggPSBkZWNvZGVVUklDb21wb25lbnQoaGFzaClcbiAgICAgICAgLy8gRmlyc3Qgd2UgY2hlY2sgaWYgdGhlIGVsZW1lbnQgYnkgaWQgaXMgZm91bmRcbiAgICAgICAgY29uc3QgaWRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJhd0hhc2gpXG4gICAgICAgIGlmIChpZEVsKSB7XG4gICAgICAgICAgaWRFbC5zY3JvbGxJbnRvVmlldygpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBlbGVtZW50IHdpdGggdGhlIGlkLCB3ZSBjaGVjayB0aGUgYG5hbWVgIHByb3BlcnR5XG4gICAgICAgIC8vIFRvIG1pcnJvciBicm93c2Vyc1xuICAgICAgICBjb25zdCBuYW1lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShyYXdIYXNoKVswXVxuICAgICAgICBpZiAobmFtZUVsKSB7XG4gICAgICAgICAgbmFtZUVsLnNjcm9sbEludG9WaWV3KClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb25seUhhc2hDaGFuZ2U6IHRoaXMub25seUFIYXNoQ2hhbmdlKGFzKSxcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICB1cmxJc05ldyhhc1BhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFzUGF0aCAhPT0gYXNQYXRoXG4gIH1cblxuICAvKipcbiAgICogUHJlZmV0Y2ggcGFnZSBjb2RlLCB5b3UgbWF5IHdhaXQgZm9yIHRoZSBkYXRhIGR1cmluZyBwYWdlIHJlbmRlcmluZy5cbiAgICogVGhpcyBmZWF0dXJlIG9ubHkgd29ya3MgaW4gcHJvZHVjdGlvbiFcbiAgICogQHBhcmFtIHVybCB0aGUgaHJlZiBvZiBwcmVmZXRjaGVkIHBhZ2VcbiAgICogQHBhcmFtIGFzUGF0aCB0aGUgYXMgcGF0aCBvZiB0aGUgcHJlZmV0Y2hlZCBwYWdlXG4gICAqL1xuICBhc3luYyBwcmVmZXRjaChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBhc1BhdGg6IHN0cmluZyA9IHVybCxcbiAgICBvcHRpb25zOiBQcmVmZXRjaE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBQcmVmZXRjaCBpcyBub3Qgc3VwcG9ydGVkIGluIGRldmVsb3BtZW50IG1vZGUgYmVjYXVzZSBpdCB3b3VsZCB0cmlnZ2VyIG9uLWRlbWFuZC1lbnRyaWVzXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiBpc0JvdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcbiAgICAgIC8vIE5vIHByZWZldGNoZXMgZm9yIGJvdHMgdGhhdCByZW5kZXIgdGhlIGxpbmsgc2luY2UgdGhleSBhcmUgdHlwaWNhbGx5IG5hdmlnYXRpbmdcbiAgICAgIC8vIGxpbmtzIHZpYSB0aGUgZXF1aXZhbGVudCBvZiBhIGhhcmQgbmF2aWdhdGlvbiBhbmQgaGVuY2UgbmV2ZXIgdXRpbGl6ZSB0aGVzZVxuICAgICAgLy8gcHJlZmV0Y2hlcy5cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsZXQgcGFyc2VkID0gcGFyc2VSZWxhdGl2ZVVybCh1cmwpXG4gICAgY29uc3QgdXJsUGF0aG5hbWUgPSBwYXJzZWQucGF0aG5hbWVcblxuICAgIGxldCB7IHBhdGhuYW1lLCBxdWVyeSB9ID0gcGFyc2VkXG4gICAgY29uc3Qgb3JpZ2luYWxQYXRobmFtZSA9IHBhdGhuYW1lXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgaWYgKG9wdGlvbnMubG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICBwYXRobmFtZSA9IG5vcm1hbGl6ZUxvY2FsZVBhdGghKHBhdGhuYW1lLCB0aGlzLmxvY2FsZXMpLnBhdGhuYW1lXG4gICAgICAgIHBhcnNlZC5wYXRobmFtZSA9IHBhdGhuYW1lXG4gICAgICAgIHVybCA9IGZvcm1hdFdpdGhWYWxpZGF0aW9uKHBhcnNlZClcblxuICAgICAgICBsZXQgcGFyc2VkQXMgPSBwYXJzZVJlbGF0aXZlVXJsKGFzUGF0aClcbiAgICAgICAgY29uc3QgbG9jYWxlUGF0aFJlc3VsdCA9IG5vcm1hbGl6ZUxvY2FsZVBhdGghKFxuICAgICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lLFxuICAgICAgICAgIHRoaXMubG9jYWxlc1xuICAgICAgICApXG4gICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lID0gbG9jYWxlUGF0aFJlc3VsdC5wYXRobmFtZVxuICAgICAgICBvcHRpb25zLmxvY2FsZSA9IGxvY2FsZVBhdGhSZXN1bHQuZGV0ZWN0ZWRMb2NhbGUgfHwgdGhpcy5kZWZhdWx0TG9jYWxlXG4gICAgICAgIGFzUGF0aCA9IGZvcm1hdFdpdGhWYWxpZGF0aW9uKHBhcnNlZEFzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VzID0gYXdhaXQgdGhpcy5wYWdlTG9hZGVyLmdldFBhZ2VMaXN0KClcbiAgICBsZXQgcmVzb2x2ZWRBcyA9IGFzUGF0aFxuXG4gICAgY29uc3QgbG9jYWxlID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLmxvY2FsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBvcHRpb25zLmxvY2FsZSB8fCB1bmRlZmluZWRcbiAgICAgICAgOiB0aGlzLmxvY2FsZVxuXG4gICAgY29uc3QgaXNNaWRkbGV3YXJlTWF0Y2ggPSBhd2FpdCBtYXRjaGVzTWlkZGxld2FyZSh7XG4gICAgICBhc1BhdGg6IGFzUGF0aCxcbiAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgcm91dGVyOiB0aGlzLFxuICAgIH0pXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUyAmJiBhc1BhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBsZXQgcmV3cml0ZXM6IGFueVxuICAgICAgOyh7IF9fcmV3cml0ZXM6IHJld3JpdGVzIH0gPSBhd2FpdCBnZXRDbGllbnRCdWlsZE1hbmlmZXN0KCkpXG5cbiAgICAgIGNvbnN0IHJld3JpdGVzUmVzdWx0ID0gcmVzb2x2ZVJld3JpdGVzKFxuICAgICAgICBhZGRCYXNlUGF0aChhZGRMb2NhbGUoYXNQYXRoLCB0aGlzLmxvY2FsZSksIHRydWUpLFxuICAgICAgICBwYWdlcyxcbiAgICAgICAgcmV3cml0ZXMsXG4gICAgICAgIHBhcnNlZC5xdWVyeSxcbiAgICAgICAgKHA6IHN0cmluZykgPT4gcmVzb2x2ZUR5bmFtaWNSb3V0ZShwLCBwYWdlcyksXG4gICAgICAgIHRoaXMubG9jYWxlc1xuICAgICAgKVxuXG4gICAgICBpZiAocmV3cml0ZXNSZXN1bHQuZXh0ZXJuYWxEZXN0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgIHJlc29sdmVkQXMgPSByZW1vdmVMb2NhbGUoXG4gICAgICAgICAgcmVtb3ZlQmFzZVBhdGgocmV3cml0ZXNSZXN1bHQuYXNQYXRoKSxcbiAgICAgICAgICB0aGlzLmxvY2FsZVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXdyaXRlc1Jlc3VsdC5tYXRjaGVkUGFnZSAmJiByZXdyaXRlc1Jlc3VsdC5yZXNvbHZlZEhyZWYpIHtcbiAgICAgICAgLy8gaWYgdGhpcyBkaXJlY3RseSBtYXRjaGVzIGEgcGFnZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgaHJlZiB0b1xuICAgICAgICAvLyBhbGxvdyB0aGUgY29ycmVjdCBwYWdlIGNodW5rIHRvIGJlIGxvYWRlZFxuICAgICAgICBwYXRobmFtZSA9IHJld3JpdGVzUmVzdWx0LnJlc29sdmVkSHJlZlxuICAgICAgICBwYXJzZWQucGF0aG5hbWUgPSBwYXRobmFtZVxuXG4gICAgICAgIGlmICghaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VkLnBhdGhuYW1lID0gcmVzb2x2ZUR5bmFtaWNSb3V0ZShwYXJzZWQucGF0aG5hbWUsIHBhZ2VzKVxuXG4gICAgaWYgKGlzRHluYW1pY1JvdXRlKHBhcnNlZC5wYXRobmFtZSkpIHtcbiAgICAgIHBhdGhuYW1lID0gcGFyc2VkLnBhdGhuYW1lXG4gICAgICBwYXJzZWQucGF0aG5hbWUgPSBwYXRobmFtZVxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGdldFJvdXRlTWF0Y2hlcihnZXRSb3V0ZVJlZ2V4KHBhcnNlZC5wYXRobmFtZSkpKFxuICAgICAgICAgIHBhcnNlUGF0aChhc1BhdGgpLnBhdGhuYW1lXG4gICAgICAgICkgfHwge31cbiAgICAgIClcblxuICAgICAgaWYgKCFpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9XG4gICAgICBwcm9jZXNzLmVudi5fX05FWFRfTUlERExFV0FSRV9QUkVGRVRDSCA9PT0gJ3N0cmljdCdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogYXdhaXQgd2l0aE1pZGRsZXdhcmVFZmZlY3RzKHtcbiAgICAgICAgICAgIGZldGNoRGF0YTogKCkgPT5cbiAgICAgICAgICAgICAgZmV0Y2hOZXh0RGF0YSh7XG4gICAgICAgICAgICAgICAgZGF0YUhyZWY6IHRoaXMucGFnZUxvYWRlci5nZXREYXRhSHJlZih7XG4gICAgICAgICAgICAgICAgICBocmVmOiBmb3JtYXRXaXRoVmFsaWRhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lOiBvcmlnaW5hbFBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgc2tpcEludGVycG9sYXRpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICBhc1BhdGg6IHJlc29sdmVkQXMsXG4gICAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaGFzTWlkZGxld2FyZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1NlcnZlclJlbmRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgcGFyc2VKU09OOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluZmxpZ2h0Q2FjaGU6IHRoaXMuc2RjLFxuICAgICAgICAgICAgICAgIHBlcnNpc3RDYWNoZTogIXRoaXMuaXNQcmV2aWV3LFxuICAgICAgICAgICAgICAgIGlzUHJlZmV0Y2g6IHRydWUsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgYXNQYXRoOiBhc1BhdGgsXG4gICAgICAgICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgICAgICAgIHJvdXRlcjogdGhpcyxcbiAgICAgICAgICB9KVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlcmUgd2FzIGEgcmV3cml0ZSB3ZSBhcHBseSB0aGUgZWZmZWN0cyBvZiB0aGUgcmV3cml0ZSBvbiB0aGVcbiAgICAgKiBjdXJyZW50IHBhcmFtZXRlcnMgZm9yIHRoZSBwcmVmZXRjaC5cbiAgICAgKi9cbiAgICBpZiAoZGF0YT8uZWZmZWN0LnR5cGUgPT09ICdyZXdyaXRlJykge1xuICAgICAgcGFyc2VkLnBhdGhuYW1lID0gZGF0YS5lZmZlY3QucmVzb2x2ZWRIcmVmXG4gICAgICBwYXRobmFtZSA9IGRhdGEuZWZmZWN0LnJlc29sdmVkSHJlZlxuICAgICAgcXVlcnkgPSB7IC4uLnF1ZXJ5LCAuLi5kYXRhLmVmZmVjdC5wYXJzZWRBcy5xdWVyeSB9XG4gICAgICByZXNvbHZlZEFzID0gZGF0YS5lZmZlY3QucGFyc2VkQXMucGF0aG5hbWVcbiAgICAgIHVybCA9IGZvcm1hdFdpdGhWYWxpZGF0aW9uKHBhcnNlZClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGVyZSBpcyBhIHJlZGlyZWN0IHRvIGFuIGV4dGVybmFsIGRlc3RpbmF0aW9uIHRoZW4gd2UgZG9uJ3QgaGF2ZVxuICAgICAqIHRvIHByZWZldGNoIGNvbnRlbnQgYXMgaXQgd2lsbCBiZSB1bnVzZWQuXG4gICAgICovXG4gICAgaWYgKGRhdGE/LmVmZmVjdC50eXBlID09PSAncmVkaXJlY3QtZXh0ZXJuYWwnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZSA9IHJlbW92ZVRyYWlsaW5nU2xhc2gocGF0aG5hbWUpXG5cbiAgICBpZiAoYXdhaXQgdGhpcy5fYmZsKGFzUGF0aCwgcmVzb2x2ZWRBcywgb3B0aW9ucy5sb2NhbGUsIHRydWUpKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudHNbdXJsUGF0aG5hbWVdID0geyBfX2FwcFJvdXRlcjogdHJ1ZSB9IGFzIGFueVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMucGFnZUxvYWRlci5faXNTc2cocm91dGUpLnRoZW4oKGlzU3NnKSA9PiB7XG4gICAgICAgIHJldHVybiBpc1NzZ1xuICAgICAgICAgID8gZmV0Y2hOZXh0RGF0YSh7XG4gICAgICAgICAgICAgIGRhdGFIcmVmOiBkYXRhPy5qc29uXG4gICAgICAgICAgICAgICAgPyBkYXRhPy5kYXRhSHJlZlxuICAgICAgICAgICAgICAgIDogdGhpcy5wYWdlTG9hZGVyLmdldERhdGFIcmVmKHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogdXJsLFxuICAgICAgICAgICAgICAgICAgICBhc1BhdGg6IHJlc29sdmVkQXMsXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGlzU2VydmVyUmVuZGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgcGFyc2VKU09OOiB0cnVlLFxuICAgICAgICAgICAgICBpbmZsaWdodENhY2hlOiB0aGlzLnNkYyxcbiAgICAgICAgICAgICAgcGVyc2lzdENhY2hlOiAhdGhpcy5pc1ByZXZpZXcsXG4gICAgICAgICAgICAgIGlzUHJlZmV0Y2g6IHRydWUsXG4gICAgICAgICAgICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZTpcbiAgICAgICAgICAgICAgICBvcHRpb25zLnVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSB8fFxuICAgICAgICAgICAgICAgIChvcHRpb25zLnByaW9yaXR5ICYmXG4gICAgICAgICAgICAgICAgICAhIXByb2Nlc3MuZW52Ll9fTkVYVF9PUFRJTUlTVElDX0NMSUVOVF9DQUNIRSksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKVxuICAgICAgICAgIDogZmFsc2VcbiAgICAgIH0pLFxuICAgICAgdGhpcy5wYWdlTG9hZGVyW29wdGlvbnMucHJpb3JpdHkgPyAnbG9hZFBhZ2UnIDogJ3ByZWZldGNoJ10ocm91dGUpLFxuICAgIF0pXG4gIH1cblxuICBhc3luYyBmZXRjaENvbXBvbmVudChyb3V0ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaGFuZGxlQ2FuY2VsbGVkID0gZ2V0Q2FuY2VsbGVkSGFuZGxlcih7IHJvdXRlLCByb3V0ZXI6IHRoaXMgfSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb21wb25lbnRSZXN1bHQgPSBhd2FpdCB0aGlzLnBhZ2VMb2FkZXIubG9hZFBhZ2Uocm91dGUpXG4gICAgICBoYW5kbGVDYW5jZWxsZWQoKVxuXG4gICAgICByZXR1cm4gY29tcG9uZW50UmVzdWx0XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoYW5kbGVDYW5jZWxsZWQoKVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgX2dldERhdGE8VD4oZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2VcbiAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlXG4gICAgfVxuICAgIHRoaXMuY2xjID0gY2FuY2VsXG4gICAgcmV0dXJuIGZuKCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgaWYgKGNhbmNlbCA9PT0gdGhpcy5jbGMpIHtcbiAgICAgICAgdGhpcy5jbGMgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgY29uc3QgZXJyOiBhbnkgPSBuZXcgRXJyb3IoJ0xvYWRpbmcgaW5pdGlhbCBwcm9wcyBjYW5jZWxsZWQnKVxuICAgICAgICBlcnIuY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9KVxuICB9XG5cbiAgZ2V0SW5pdGlhbFByb3BzKFxuICAgIENvbXBvbmVudDogQ29tcG9uZW50VHlwZSxcbiAgICBjdHg6IE5leHRQYWdlQ29udGV4dFxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBjb25zdCB7IENvbXBvbmVudDogQXBwIH0gPSB0aGlzLmNvbXBvbmVudHNbJy9fYXBwJ11cbiAgICBjb25zdCBBcHBUcmVlID0gdGhpcy5fd3JhcEFwcChBcHAgYXMgQXBwQ29tcG9uZW50KVxuICAgIGN0eC5BcHBUcmVlID0gQXBwVHJlZVxuICAgIHJldHVybiBsb2FkR2V0SW5pdGlhbFByb3BzPEFwcENvbnRleHRUeXBlPFJvdXRlcj4+KEFwcCwge1xuICAgICAgQXBwVHJlZSxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIHJvdXRlcjogdGhpcyxcbiAgICAgIGN0eCxcbiAgICB9KVxuICB9XG5cbiAgZ2V0IHJvdXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUucm91dGVcbiAgfVxuXG4gIGdldCBwYXRobmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnBhdGhuYW1lXG4gIH1cblxuICBnZXQgcXVlcnkoKTogUGFyc2VkVXJsUXVlcnkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnF1ZXJ5XG4gIH1cblxuICBnZXQgYXNQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuYXNQYXRoXG4gIH1cblxuICBnZXQgbG9jYWxlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUubG9jYWxlXG4gIH1cblxuICBnZXQgaXNGYWxsYmFjaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ZhbGxiYWNrXG4gIH1cblxuICBnZXQgaXNQcmV2aWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzUHJldmlld1xuICB9XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlS2V5IiwiUm91dGVyIiwibWF0Y2hlc01pZGRsZXdhcmUiLCJyZXNvbHZlUmV3cml0ZXMiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0hBU19SRVdSSVRFUyIsInJlcXVpcmUiLCJkZWZhdWx0IiwiYnVpbGRDYW5jZWxsYXRpb25FcnJvciIsIk9iamVjdCIsImFzc2lnbiIsIkVycm9yIiwiY2FuY2VsbGVkIiwib3B0aW9ucyIsIm1hdGNoZXJzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyb3V0ZXIiLCJwYWdlTG9hZGVyIiwiZ2V0TWlkZGxld2FyZSIsInBhdGhuYW1lIiwiYXNQYXRobmFtZSIsInBhcnNlUGF0aCIsImFzUGF0aCIsImNsZWFuZWRBcyIsImhhc0Jhc2VQYXRoIiwicmVtb3ZlQmFzZVBhdGgiLCJhc1dpdGhCYXNlUGF0aEFuZExvY2FsZSIsImFkZEJhc2VQYXRoIiwiYWRkTG9jYWxlIiwibG9jYWxlIiwic29tZSIsIm0iLCJSZWdFeHAiLCJyZWdleHAiLCJ0ZXN0Iiwic3RyaXBPcmlnaW4iLCJ1cmwiLCJvcmlnaW4iLCJnZXRMb2NhdGlvbk9yaWdpbiIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJwcmVwYXJlVXJsQXMiLCJhcyIsInJlc29sdmVkSHJlZiIsInJlc29sdmVkQXMiLCJyZXNvbHZlSHJlZiIsImhyZWZXYXNBYnNvbHV0ZSIsImFzV2FzQWJzb2x1dGUiLCJwcmVwYXJlZFVybCIsInByZXBhcmVkQXMiLCJyZXNvbHZlRHluYW1pY1JvdXRlIiwicGFnZXMiLCJjbGVhblBhdGhuYW1lIiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsImRlbm9ybWFsaXplUGFnZVBhdGgiLCJpbmNsdWRlcyIsInBhZ2UiLCJpc0R5bmFtaWNSb3V0ZSIsImdldFJvdXRlUmVnZXgiLCJyZSIsImdldE1pZGRsZXdhcmVEYXRhIiwic291cmNlIiwicmVzcG9uc2UiLCJuZXh0Q29uZmlnIiwiYmFzZVBhdGgiLCJpMThuIiwibG9jYWxlcyIsInRyYWlsaW5nU2xhc2giLCJCb29sZWFuIiwiX19ORVhUX1RSQUlMSU5HX1NMQVNIIiwicmV3cml0ZUhlYWRlciIsImhlYWRlcnMiLCJnZXQiLCJyZXdyaXRlVGFyZ2V0IiwibWF0Y2hlZFBhdGgiLCJNQVRDSEVEX1BBVEhfSEVBREVSIiwiX19ORVhUX0VYVEVSTkFMX01JRERMRVdBUkVfUkVXUklURV9SRVNPTFZFIiwicGFyc2VkUmV3cml0ZVRhcmdldCIsInBhcnNlUmVsYXRpdmVVcmwiLCJwYXRobmFtZUluZm8iLCJnZXROZXh0UGF0aG5hbWVJbmZvIiwicGFyc2VEYXRhIiwiZnNQYXRobmFtZSIsImFsbCIsImdldFBhZ2VMaXN0IiwiZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCIsInRoZW4iLCJfX3Jld3JpdGVzIiwicmV3cml0ZXMiLCJub3JtYWxpemVMb2NhbGVQYXRoIiwicGFyc2VkU291cmNlIiwidW5kZWZpbmVkIiwicmVzdWx0IiwicXVlcnkiLCJwYXRoIiwibWF0Y2hlZFBhZ2UiLCJwYXJzZWRBcyIsInJlc29sdmVkUGF0aG5hbWUiLCJtYXRjaGVzIiwiZ2V0Um91dGVNYXRjaGVyIiwidHlwZSIsInNyYyIsImZvcm1hdE5leHRQYXRobmFtZUluZm8iLCJkZWZhdWx0TG9jYWxlIiwiYnVpbGRJZCIsImRlc3RpbmF0aW9uIiwiaGFzaCIsInJlZGlyZWN0VGFyZ2V0IiwibmV3QXMiLCJuZXdVcmwiLCJ3aXRoTWlkZGxld2FyZUVmZmVjdHMiLCJmZXRjaERhdGEiLCJkYXRhIiwiZWZmZWN0IiwiZGF0YUhyZWYiLCJqc29uIiwidGV4dCIsImNhY2hlS2V5IiwibWFudWFsU2Nyb2xsUmVzdG9yYXRpb24iLCJfX05FWFRfU0NST0xMX1JFU1RPUkFUSU9OIiwid2luZG93IiwiaGlzdG9yeSIsInYiLCJzZXNzaW9uU3RvcmFnZSIsInNldEl0ZW0iLCJyZW1vdmVJdGVtIiwibiIsIlNTR19EQVRBX05PVF9GT1VORCIsIlN5bWJvbCIsImZldGNoUmV0cnkiLCJhdHRlbXB0cyIsImZldGNoIiwiY3JlZGVudGlhbHMiLCJtZXRob2QiLCJvayIsInN0YXR1cyIsInRyeVRvUGFyc2VBc0pTT04iLCJKU09OIiwicGFyc2UiLCJlcnJvciIsImZldGNoTmV4dERhdGEiLCJpbmZsaWdodENhY2hlIiwiaXNQcmVmZXRjaCIsImhhc01pZGRsZXdhcmUiLCJpc1NlcnZlclJlbmRlciIsInBhcnNlSlNPTiIsInBlcnNpc3RDYWNoZSIsImlzQmFja2dyb3VuZCIsInVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSIsImhyZWYiLCJVUkwiLCJsb2NhdGlvbiIsImdldERhdGEiLCJwYXJhbXMiLCJwdXJwb3NlIiwiTkVYVF9ERVBMT1lNRU5UX0lEIiwibm90Rm91bmQiLCJtYXJrQXNzZXRFcnJvciIsIk5PREVfRU5WIiwiY2F0Y2giLCJlcnIiLCJtZXNzYWdlIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic2xpY2UiLCJoYW5kbGVIYXJkTmF2aWdhdGlvbiIsImdldENhbmNlbGxlZEhhbmRsZXIiLCJyb3V0ZSIsImNhbmNlbCIsImNsYyIsImhhbmRsZUNhbmNlbGxlZCIsInJlbG9hZCIsImJhY2siLCJmb3J3YXJkIiwicHVzaCIsIl9rZXkiLCJzdHJpbmdpZnkiLCJ4Iiwic2VsZiIsInBhZ2VYT2Zmc2V0IiwieSIsInBhZ2VZT2Zmc2V0IiwiY2hhbmdlIiwicmVwbGFjZSIsIl9iZmwiLCJza2lwTmF2aWdhdGUiLCJfX05FWFRfQ0xJRU5UX1JPVVRFUl9GSUxURVJfRU5BQkxFRCIsIl9iZmxfcyIsIl9iZmxfZCIsIkJsb29tRmlsdGVyIiwic3RhdGljRmlsdGVyRGF0YSIsImR5bmFtaWNGaWx0ZXJEYXRhIiwiX19yb3V0ZXJGaWx0ZXJTdGF0aWMiLCJfX3JvdXRlckZpbHRlckR5bmFtaWMiLCJjb25zb2xlIiwicm91dGVyRmlsdGVyU1ZhbHVlIiwiX19ORVhUX0NMSUVOVF9ST1VURVJfU19GSUxURVIiLCJyb3V0ZXJGaWx0ZXJEVmFsdWUiLCJfX05FWFRfQ0xJRU5UX1JPVVRFUl9EX0ZJTFRFUiIsIm51bUhhc2hlcyIsIm51bUl0ZW1zIiwiZXJyb3JSYXRlIiwiaW1wb3J0IiwibWF0Y2hlc0JmbFN0YXRpYyIsIm1hdGNoZXNCZmxEeW5hbWljIiwicGF0aHNUb0NoZWNrIiwiY3VyQXMiLCJhbGxvd01hdGNoQ3VycmVudCIsImFzTm9TbGFzaCIsImFzTm9TbGFzaExvY2FsZSIsImNvbnRhaW5zIiwibm9ybWFsaXplZEFTIiwiY3VyQXNQYXJ0cyIsInNwbGl0IiwiaSIsImN1cnJlbnRQYXJ0Iiwiam9pbiIsImZvcmNlZFNjcm9sbCIsImlzTG9jYWxVUkwiLCJpc1F1ZXJ5VXBkYXRpbmciLCJfaCIsInNoYWxsb3ciLCJzaG91bGRSZXNvbHZlSHJlZiIsIl9zaG91bGRSZXNvbHZlSHJlZiIsIm5leHRTdGF0ZSIsInN0YXRlIiwicmVhZHlTdGF0ZUNoYW5nZSIsImlzUmVhZHkiLCJpc1NzciIsInByZXZMb2NhbGUiLCJfX05FWFRfSTE4Tl9TVVBQT1JUIiwibG9jYWxlUGF0aFJlc3VsdCIsImRldGVjdGVkTG9jYWxlIiwiZm9ybWF0V2l0aFZhbGlkYXRpb24iLCJkaWROYXZpZ2F0ZSIsImRldGVjdGVkRG9tYWluIiwiZGV0ZWN0RG9tYWluTG9jYWxlIiwiZG9tYWluTG9jYWxlcyIsImlzTG9jYWxlRG9tYWluIiwiaG9zdG5hbWUiLCJkb21haW4iLCJhc05vQmFzZVBhdGgiLCJodHRwIiwiU1QiLCJwZXJmb3JtYW5jZSIsIm1hcmsiLCJzY3JvbGwiLCJyb3V0ZVByb3BzIiwiX2luRmxpZ2h0Um91dGUiLCJldmVudHMiLCJlbWl0IiwicmVtb3ZlTG9jYWxlIiwibG9jYWxlQ2hhbmdlIiwib25seUFIYXNoQ2hhbmdlIiwiY2hhbmdlU3RhdGUiLCJzY3JvbGxUb0hhc2giLCJzZXQiLCJjb21wb25lbnRzIiwiaXNFcnJvciIsInBhcnNlZCIsInVybElzTmV3IiwicGFyc2VkQXNQYXRobmFtZSIsIl9fYXBwUm91dGVyIiwiaXNNaWRkbGV3YXJlUmV3cml0ZSIsImlzTWlkZGxld2FyZU1hdGNoIiwicmV3cml0ZXNSZXN1bHQiLCJwIiwiZXh0ZXJuYWxEZXN0Iiwicm91dGVNYXRjaCIsInJvdXRlUmVnZXgiLCJzaG91bGRJbnRlcnBvbGF0ZSIsImludGVycG9sYXRlZEFzIiwiaW50ZXJwb2xhdGVBcyIsIm1pc3NpbmdQYXJhbXMiLCJrZXlzIiwiZ3JvdXBzIiwiZmlsdGVyIiwicGFyYW0iLCJvcHRpb25hbCIsIndhcm4iLCJvbWl0IiwiaXNFcnJvclJvdXRlIiwicm91dGVJbmZvIiwiZ2V0Um91dGVJbmZvIiwiaXNQcmV2aWV3IiwiaXNGYWxsYmFjayIsImNsZWFuZWRQYXJzZWRQYXRobmFtZSIsImZvckVhY2giLCJrZXkiLCJwcmVmaXhlZEFzIiwicmV3cml0ZUFzIiwibG9jYWxlUmVzdWx0IiwiY3VyUm91dGVNYXRjaCIsImNvbXBvbmVudCIsIkNvbXBvbmVudCIsInVuc3RhYmxlX3NjcmlwdExvYWRlciIsInNjcmlwdHMiLCJjb25jYXQiLCJzY3JpcHQiLCJoYW5kbGVDbGllbnRTY3JpcHRMb2FkIiwicHJvcHMiLCJfX05fU1NHIiwiX19OX1NTUCIsInBhZ2VQcm9wcyIsIl9fTl9SRURJUkVDVCIsIl9fTl9SRURJUkVDVF9CQVNFX1BBVEgiLCJwYXJzZWRIcmVmIiwiX19OX1BSRVZJRVciLCJub3RGb3VuZFJvdXRlIiwiZmV0Y2hDb21wb25lbnQiLCJfIiwiaXNOb3RGb3VuZCIsIl9fTkVYVF9EQVRBX18iLCJzdGF0dXNDb2RlIiwiaXNWYWxpZFNoYWxsb3dSb3V0ZSIsInNob3VsZFNjcm9sbCIsInJlc2V0U2Nyb2xsIiwidXBjb21pbmdTY3JvbGxTdGF0ZSIsInVwY29taW5nUm91dGVyU3RhdGUiLCJjYW5Ta2lwVXBkYXRpbmciLCJjb21wYXJlUm91dGVyU3RhdGVzIiwiZSIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwibGFuZyIsImhhc2hSZWdleCIsImdldFVSTCIsIl9zaGFsbG93IiwiX19OIiwiaGFuZGxlUm91dGVJbmZvRXJyb3IiLCJsb2FkRXJyb3JGYWlsIiwiaXNBc3NldEVycm9yIiwic3R5bGVTaGVldHMiLCJnZXRJbml0aWFsUHJvcHMiLCJnaXBFcnIiLCJyb3V0ZUluZm9FcnIiLCJyZXF1ZXN0ZWRSb3V0ZSIsImV4aXN0aW5nSW5mbyIsImNhY2hlZFJvdXRlSW5mbyIsImZldGNoTmV4dERhdGFQYXJhbXMiLCJnZXREYXRhSHJlZiIsInNraXBJbnRlcnBvbGF0aW9uIiwic2JjIiwic2RjIiwicmVzb2x2ZWRSb3V0ZSIsImlzQVBJUm91dGUiLCJyZXMiLCJtb2QiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJ3YXNCYWlsZWRQcmVmZXRjaCIsInNob3VsZEZldGNoRGF0YSIsIl9nZXREYXRhIiwiZmV0Y2hlZCIsImdldFByb3BlckVycm9yIiwic3ViIiwiYmVmb3JlUG9wU3RhdGUiLCJjYiIsIl9icHMiLCJvbGRVcmxOb0hhc2giLCJvbGRIYXNoIiwibmV3VXJsTm9IYXNoIiwibmV3SGFzaCIsImRpc2FibGVTbW9vdGhTY3JvbGxEdXJpbmdSb3V0ZVRyYW5zaXRpb24iLCJzY3JvbGxUbyIsInJhd0hhc2giLCJkZWNvZGVVUklDb21wb25lbnQiLCJpZEVsIiwiZ2V0RWxlbWVudEJ5SWQiLCJzY3JvbGxJbnRvVmlldyIsIm5hbWVFbCIsImdldEVsZW1lbnRzQnlOYW1lIiwib25seUhhc2hDaGFuZ2UiLCJwcmVmZXRjaCIsImlzQm90IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidXJsUGF0aG5hbWUiLCJvcmlnaW5hbFBhdGhuYW1lIiwiX19ORVhUX01JRERMRVdBUkVfUFJFRkVUQ0giLCJfaXNTc2ciLCJpc1NzZyIsInByaW9yaXR5IiwiX19ORVhUX09QVElNSVNUSUNfQ0xJRU5UX0NBQ0hFIiwiY29tcG9uZW50UmVzdWx0IiwibG9hZFBhZ2UiLCJmbiIsImN0eCIsIkFwcCIsIkFwcFRyZWUiLCJfd3JhcEFwcCIsImxvYWRHZXRJbml0aWFsUHJvcHMiLCJjb25zdHJ1Y3RvciIsImluaXRpYWxQcm9wcyIsIndyYXBBcHAiLCJzdWJzY3JpcHRpb24iLCJpc0ZpcnN0UG9wU3RhdGVFdmVudCIsIm9uUG9wU3RhdGUiLCJfX05BIiwiZ2V0SXRlbSIsImluaXRpYWwiLCJhdXRvRXhwb3J0RHluYW1pYyIsImF1dG9FeHBvcnQiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwiZ3NzcCIsImdpcCIsImlzRXhwZXJpbWVudGFsQ29tcGlsZSIsImFwcEdpcCIsImdzcCIsInNlYXJjaCIsIl9pbml0aWFsTWF0Y2hlc01pZGRsZXdhcmVQcm9taXNlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNjcm9sbFJlc3RvcmF0aW9uIiwibWl0dCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/router.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-locale.js":
/*!*************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-locale.js ***!
\*************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n enumerable: true,\n get: function() {\n return addLocale;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ./add-path-prefix */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction addLocale(path, locale, defaultLocale, ignorePrefix) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path;\n const lower = path.toLowerCase();\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if ((0, _pathhasprefix.pathHasPrefix)(lower, '/api')) return path;\n if ((0, _pathhasprefix.pathHasPrefix)(lower, \"/\" + locale.toLowerCase())) return path;\n }\n // Add the locale prefix to the path.\n return (0, _addpathprefix.addPathPrefix)(path, \"/\" + locale);\n} //# sourceMappingURL=add-locale.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLWxvY2FsZS5qcyIsIm1hcHBpbmdzIjoiOzs7OzZDQVFnQkE7OztlQUFBQTs7OzJDQVJjOzJDQUNBO0FBT3ZCLFNBQVNBLFVBQ2RDLElBQVksRUFDWkMsTUFBdUIsRUFDdkJDLGFBQXNCLEVBQ3RCQyxZQUFzQjtJQUV0Qiw0RUFBNEU7SUFDNUUsc0JBQXNCO0lBQ3RCLElBQUksQ0FBQ0YsVUFBVUEsV0FBV0MsZUFBZSxPQUFPRjtJQUVoRCxNQUFNSSxRQUFRSixLQUFLSyxXQUFXO0lBRTlCLDJFQUEyRTtJQUMzRSxpQ0FBaUM7SUFDakMsSUFBSSxDQUFDRixjQUFjO1FBQ2pCLElBQUlHLENBQUFBLEdBQUFBLGVBQUFBLGFBQWEsRUFBQ0YsT0FBTyxTQUFTLE9BQU9KO1FBQ3pDLElBQUlNLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNGLE9BQVEsTUFBR0gsT0FBT0ksV0FBVyxLQUFPLE9BQU9MO0lBQy9EO0lBRUEscUNBQXFDO0lBQ3JDLE9BQU9PLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNQLE1BQU8sTUFBR0M7QUFDakMiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLWxvY2FsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZGRQYXRoUHJlZml4IH0gZnJvbSAnLi9hZGQtcGF0aC1wcmVmaXgnXG5pbXBvcnQgeyBwYXRoSGFzUHJlZml4IH0gZnJvbSAnLi9wYXRoLWhhcy1wcmVmaXgnXG5cbi8qKlxuICogRm9yIGEgZ2l2ZW4gcGF0aCBhbmQgYSBsb2NhbGUsIGlmIHRoZSBsb2NhbGUgaXMgZ2l2ZW4sIGl0IHdpbGwgcHJlZml4IHRoZVxuICogbG9jYWxlLiBUaGUgcGF0aCBzaG91bGRuJ3QgYmUgYW4gQVBJIHBhdGguIElmIGEgZGVmYXVsdCBsb2NhbGUgaXMgZ2l2ZW4gdGhlXG4gKiBwcmVmaXggd2lsbCBiZSBvbWl0dGVkIGlmIHRoZSBsb2NhbGUgaXMgYWxyZWFkeSB0aGUgZGVmYXVsdCBsb2NhbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRMb2NhbGUoXG4gIHBhdGg6IHN0cmluZyxcbiAgbG9jYWxlPzogc3RyaW5nIHwgZmFsc2UsXG4gIGRlZmF1bHRMb2NhbGU/OiBzdHJpbmcsXG4gIGlnbm9yZVByZWZpeD86IGJvb2xlYW5cbikge1xuICAvLyBJZiBubyBsb2NhbGUgd2FzIGdpdmVuIG9yIHRoZSBsb2NhbGUgaXMgdGhlIGRlZmF1bHQgbG9jYWxlLCB3ZSBkb24ndCBuZWVkXG4gIC8vIHRvIHByZWZpeCB0aGUgcGF0aC5cbiAgaWYgKCFsb2NhbGUgfHwgbG9jYWxlID09PSBkZWZhdWx0TG9jYWxlKSByZXR1cm4gcGF0aFxuXG4gIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gSWYgdGhlIHBhdGggaXMgYW4gQVBJIHBhdGggb3IgdGhlIHBhdGggYWxyZWFkeSBoYXMgdGhlIGxvY2FsZSBwcmVmaXgsIHdlXG4gIC8vIGRvbid0IG5lZWQgdG8gcHJlZml4IHRoZSBwYXRoLlxuICBpZiAoIWlnbm9yZVByZWZpeCkge1xuICAgIGlmIChwYXRoSGFzUHJlZml4KGxvd2VyLCAnL2FwaScpKSByZXR1cm4gcGF0aFxuICAgIGlmIChwYXRoSGFzUHJlZml4KGxvd2VyLCBgLyR7bG9jYWxlLnRvTG93ZXJDYXNlKCl9YCkpIHJldHVybiBwYXRoXG4gIH1cblxuICAvLyBBZGQgdGhlIGxvY2FsZSBwcmVmaXggdG8gdGhlIHBhdGguXG4gIHJldHVybiBhZGRQYXRoUHJlZml4KHBhdGgsIGAvJHtsb2NhbGV9YClcbn1cbiJdLCJuYW1lcyI6WyJhZGRMb2NhbGUiLCJwYXRoIiwibG9jYWxlIiwiZGVmYXVsdExvY2FsZSIsImlnbm9yZVByZWZpeCIsImxvd2VyIiwidG9Mb3dlckNhc2UiLCJwYXRoSGFzUHJlZml4IiwiYWRkUGF0aFByZWZpeCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-locale.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js":
/*!******************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js ***!
\******************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addPathPrefix\", ({\n enumerable: true,\n get: function() {\n return addPathPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathPrefix(path, prefix) {\n if (!path.startsWith('/') || !prefix) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n return \"\" + prefix + pathname + query + hash;\n} //# sourceMappingURL=add-path-prefix.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLXBhdGgtcHJlZml4LmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBTWdCQTs7O2VBQUFBOzs7dUNBTlU7QUFNbkIsU0FBU0EsY0FBY0MsSUFBWSxFQUFFQyxNQUFlO0lBQ3pELElBQUksQ0FBQ0QsS0FBS0UsVUFBVSxDQUFDLFFBQVEsQ0FBQ0QsUUFBUTtRQUNwQyxPQUFPRDtJQUNUO0lBRUEsTUFBTSxFQUFFRyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQVVOO0lBQzVDLE9BQVEsS0FBRUMsU0FBU0UsV0FBV0MsUUFBUUM7QUFDeEMiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLXBhdGgtcHJlZml4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlUGF0aCB9IGZyb20gJy4vcGFyc2UtcGF0aCdcblxuLyoqXG4gKiBBZGRzIHRoZSBwcm92aWRlZCBwcmVmaXggdG8gdGhlIGdpdmVuIHBhdGguIEl0IGZpcnN0IGVuc3VyZXMgdGhhdCB0aGUgcGF0aFxuICogaXMgaW5kZWVkIHN0YXJ0aW5nIHdpdGggYSBzbGFzaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFBhdGhQcmVmaXgocGF0aDogc3RyaW5nLCBwcmVmaXg/OiBzdHJpbmcpIHtcbiAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSB8fCAhcHJlZml4KSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIGNvbnN0IHsgcGF0aG5hbWUsIHF1ZXJ5LCBoYXNoIH0gPSBwYXJzZVBhdGgocGF0aClcbiAgcmV0dXJuIGAke3ByZWZpeH0ke3BhdGhuYW1lfSR7cXVlcnl9JHtoYXNofWBcbn1cbiJdLCJuYW1lcyI6WyJhZGRQYXRoUHJlZml4IiwicGF0aCIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJwYXRobmFtZSIsInF1ZXJ5IiwiaGFzaCIsInBhcnNlUGF0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js":
/*!******************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js ***!
\******************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addPathSuffix\", ({\n enumerable: true,\n get: function() {\n return addPathSuffix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathSuffix(path, suffix) {\n if (!path.startsWith('/') || !suffix) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n return \"\" + pathname + suffix + query + hash;\n} //# sourceMappingURL=add-path-suffix.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLXBhdGgtc3VmZml4LmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBT2dCQTs7O2VBQUFBOzs7dUNBUFU7QUFPbkIsU0FBU0EsY0FBY0MsSUFBWSxFQUFFQyxNQUFlO0lBQ3pELElBQUksQ0FBQ0QsS0FBS0UsVUFBVSxDQUFDLFFBQVEsQ0FBQ0QsUUFBUTtRQUNwQyxPQUFPRDtJQUNUO0lBRUEsTUFBTSxFQUFFRyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQVVOO0lBQzVDLE9BQVEsS0FBRUcsV0FBV0YsU0FBU0csUUFBUUM7QUFDeEMiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLXBhdGgtc3VmZml4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlUGF0aCB9IGZyb20gJy4vcGFyc2UtcGF0aCdcblxuLyoqXG4gKiBTaW1pbGFybHkgdG8gYGFkZFBhdGhQcmVmaXhgLCB0aGlzIGZ1bmN0aW9uIGFkZHMgYSBzdWZmaXggYXQgdGhlIGVuZCBvbiB0aGVcbiAqIHByb3ZpZGVkIHBhdGguIEl0IGFsc28gd29ya3Mgb25seSBmb3IgcGF0aHMgZW5zdXJpbmcgdGhlIGFyZ3VtZW50IHN0YXJ0c1xuICogd2l0aCBhIHNsYXNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkUGF0aFN1ZmZpeChwYXRoOiBzdHJpbmcsIHN1ZmZpeD86IHN0cmluZykge1xuICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpIHx8ICFzdWZmaXgpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgeyBwYXRobmFtZSwgcXVlcnksIGhhc2ggfSA9IHBhcnNlUGF0aChwYXRoKVxuICByZXR1cm4gYCR7cGF0aG5hbWV9JHtzdWZmaXh9JHtxdWVyeX0ke2hhc2h9YFxufVxuIl0sIm5hbWVzIjpbImFkZFBhdGhTdWZmaXgiLCJwYXRoIiwic3VmZml4Iiwic3RhcnRzV2l0aCIsInBhdGhuYW1lIiwicXVlcnkiLCJoYXNoIiwicGFyc2VQYXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/app-paths.js":
/*!************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/app-paths.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 normalizeAppPath: function() {\n return normalizeAppPath;\n },\n normalizeRscURL: function() {\n return normalizeRscURL;\n }\n});\nconst _ensureleadingslash = __webpack_require__(/*! ../../page-path/ensure-leading-slash */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\");\nconst _segment = __webpack_require__(/*! ../../segment */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/segment.js\");\nfunction normalizeAppPath(route) {\n return (0, _ensureleadingslash.ensureLeadingSlash)(route.split('/').reduce((pathname, segment, index, segments)=>{\n // Empty segments are ignored.\n if (!segment) {\n return pathname;\n }\n // Groups are ignored.\n if ((0, _segment.isGroupSegment)(segment)) {\n return pathname;\n }\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname;\n }\n // The last segment (if it's a leaf) should be ignored.\n if ((segment === 'page' || segment === 'route') && index === segments.length - 1) {\n return pathname;\n }\n return pathname + \"/\" + segment;\n }, ''));\n}\nfunction normalizeRscURL(url) {\n return url.replace(/\\.rsc($|\\?)/, '$1');\n} //# sourceMappingURL=app-paths.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYXBwLXBhdGhzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQXNCZ0JBLGdCQUFnQjtlQUFoQkE7O0lBbUNBQyxlQUFlO2VBQWZBOzs7Z0RBekRtQjtxQ0FDSjtBQXFCeEIsU0FBU0QsaUJBQWlCRSxLQUFhO0lBQzVDLE9BQU9DLENBQUFBLEdBQUFBLG9CQUFBQSxrQkFBQUEsRUFDTEQsTUFBTUUsS0FBSyxDQUFDLEtBQUtDLE1BQU0sQ0FBQyxDQUFDQyxVQUFVQyxTQUFTQyxPQUFPQztRQUNqRCw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDRixTQUFTO1lBQ1osT0FBT0Q7UUFDVDtRQUVBLHNCQUFzQjtRQUN0QixJQUFJSSxDQUFBQSxHQUFBQSxTQUFBQSxjQUFBQSxFQUFlSCxVQUFVO1lBQzNCLE9BQU9EO1FBQ1Q7UUFFQSxpQ0FBaUM7UUFDakMsSUFBSUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLO1lBQ3RCLE9BQU9EO1FBQ1Q7UUFFQSx1REFBdUQ7UUFDdkQsSUFDR0MsQ0FBQUEsWUFBWSxVQUFVQSxZQUFZLFFBQU0sSUFDekNDLFVBQVVDLFNBQVNFLE1BQU0sR0FBRyxHQUM1QjtZQUNBLE9BQU9MO1FBQ1Q7UUFFQSxPQUFVQSxXQUFTLE1BQUdDO0lBQ3hCLEdBQUc7QUFFUDtBQU1PLFNBQVNOLGdCQUFnQlcsR0FBVztJQUN6QyxPQUFPQSxJQUFJQyxPQUFPLENBQ2hCLGVBQ0E7QUFHSiIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hcHAtcGF0aHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5zdXJlTGVhZGluZ1NsYXNoIH0gZnJvbSAnLi4vLi4vcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoJ1xuaW1wb3J0IHsgaXNHcm91cFNlZ21lbnQgfSBmcm9tICcuLi8uLi9zZWdtZW50J1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW4gYXBwIHJvdXRlIHNvIGl0IHJlcHJlc2VudHMgdGhlIGFjdHVhbCByZXF1ZXN0IHBhdGguIEVzc2VudGlhbGx5XG4gKiBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtYXRpb25zOlxuICpcbiAqIC0gYC8oZGFzaGJvYXJkKS91c2VyL1tpZF0vcGFnZWAgdG8gYC91c2VyL1tpZF1gXG4gKiAtIGAvKGRhc2hib2FyZCkvYWNjb3VudC9wYWdlYCB0byBgL2FjY291bnRgXG4gKiAtIGAvdXNlci9baWRdL3BhZ2VgIHRvIGAvdXNlci9baWRdYFxuICogLSBgL2FjY291bnQvcGFnZWAgdG8gYC9hY2NvdW50YFxuICogLSBgL3BhZ2VgIHRvIGAvYFxuICogLSBgLyhkYXNoYm9hcmQpL3VzZXIvW2lkXS9yb3V0ZWAgdG8gYC91c2VyL1tpZF1gXG4gKiAtIGAvKGRhc2hib2FyZCkvYWNjb3VudC9yb3V0ZWAgdG8gYC9hY2NvdW50YFxuICogLSBgL3VzZXIvW2lkXS9yb3V0ZWAgdG8gYC91c2VyL1tpZF1gXG4gKiAtIGAvYWNjb3VudC9yb3V0ZWAgdG8gYC9hY2NvdW50YFxuICogLSBgL3JvdXRlYCB0byBgL2BcbiAqIC0gYC9gIHRvIGAvYFxuICpcbiAqIEBwYXJhbSByb3V0ZSB0aGUgYXBwIHJvdXRlIHRvIG5vcm1hbGl6ZVxuICogQHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgcGF0aG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUFwcFBhdGgocm91dGU6IHN0cmluZykge1xuICByZXR1cm4gZW5zdXJlTGVhZGluZ1NsYXNoKFxuICAgIHJvdXRlLnNwbGl0KCcvJykucmVkdWNlKChwYXRobmFtZSwgc2VnbWVudCwgaW5kZXgsIHNlZ21lbnRzKSA9PiB7XG4gICAgICAvLyBFbXB0eSBzZWdtZW50cyBhcmUgaWdub3JlZC5cbiAgICAgIGlmICghc2VnbWVudCkge1xuICAgICAgICByZXR1cm4gcGF0aG5hbWVcbiAgICAgIH1cblxuICAgICAgLy8gR3JvdXBzIGFyZSBpZ25vcmVkLlxuICAgICAgaWYgKGlzR3JvdXBTZWdtZW50KHNlZ21lbnQpKSB7XG4gICAgICAgIHJldHVybiBwYXRobmFtZVxuICAgICAgfVxuXG4gICAgICAvLyBQYXJhbGxlbCBzZWdtZW50cyBhcmUgaWdub3JlZC5cbiAgICAgIGlmIChzZWdtZW50WzBdID09PSAnQCcpIHtcbiAgICAgICAgcmV0dXJuIHBhdGhuYW1lXG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBsYXN0IHNlZ21lbnQgKGlmIGl0J3MgYSBsZWFmKSBzaG91bGQgYmUgaWdub3JlZC5cbiAgICAgIGlmIChcbiAgICAgICAgKHNlZ21lbnQgPT09ICdwYWdlJyB8fCBzZWdtZW50ID09PSAncm91dGUnKSAmJlxuICAgICAgICBpbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoIC0gMVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBwYXRobmFtZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7cGF0aG5hbWV9LyR7c2VnbWVudH1gXG4gICAgfSwgJycpXG4gIClcbn1cblxuLyoqXG4gKiBTdHJpcHMgdGhlIGAucnNjYCBleHRlbnNpb24gaWYgaXQncyBpbiB0aGUgcGF0aG5hbWUuXG4gKiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgb24gZnVsbCB1cmxzIGl0IGNoZWNrcyBgP2AgZm9yIHNlYXJjaFBhcmFtcyBoYW5kbGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVJzY1VSTCh1cmw6IHN0cmluZykge1xuICByZXR1cm4gdXJsLnJlcGxhY2UoXG4gICAgL1xcLnJzYygkfFxcPykvLFxuICAgIC8vICQxIGVuc3VyZXMgYD9gIGlzIHByZXNlcnZlZFxuICAgICckMSdcbiAgKVxufVxuIl0sIm5hbWVzIjpbIm5vcm1hbGl6ZUFwcFBhdGgiLCJub3JtYWxpemVSc2NVUkwiLCJyb3V0ZSIsImVuc3VyZUxlYWRpbmdTbGFzaCIsInNwbGl0IiwicmVkdWNlIiwicGF0aG5hbWUiLCJzZWdtZW50IiwiaW5kZXgiLCJzZWdtZW50cyIsImlzR3JvdXBTZWdtZW50IiwibGVuZ3RoIiwidXJsIiwicmVwbGFjZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/app-paths.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js":
/*!***************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js ***!
\***************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// Convert router.asPath to a URLSearchParams object\n// example: /dynamic/[slug]?foo=bar -> { foo: 'bar' }\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"asPathToSearchParams\", ({\n enumerable: true,\n get: function() {\n return asPathToSearchParams;\n }\n}));\nfunction asPathToSearchParams(asPath) {\n return new URL(asPath, 'http://n').searchParams;\n} //# sourceMappingURL=as-path-to-search-params.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYXMtcGF0aC10by1zZWFyY2gtcGFyYW1zLmpzIiwibWFwcGluZ3MiOiJBQUFBLG9EQUFvRDtBQUNwRCxxREFBcUQ7Ozs7O3dEQUNyQ0E7OztlQUFBQTs7O0FBQVQsU0FBU0EscUJBQXFCQyxNQUFjO0lBQ2pELE9BQU8sSUFBSUMsSUFBSUQsUUFBUSxZQUFZRSxZQUFZO0FBQ2pEIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FzLXBhdGgtdG8tc2VhcmNoLXBhcmFtcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb252ZXJ0IHJvdXRlci5hc1BhdGggdG8gYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4vLyBleGFtcGxlOiAvZHluYW1pYy9bc2x1Z10/Zm9vPWJhciAtPiB7IGZvbzogJ2JhcicgfVxuZXhwb3J0IGZ1bmN0aW9uIGFzUGF0aFRvU2VhcmNoUGFyYW1zKGFzUGF0aDogc3RyaW5nKTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgcmV0dXJuIG5ldyBVUkwoYXNQYXRoLCAnaHR0cDovL24nKS5zZWFyY2hQYXJhbXNcbn1cbiJdLCJuYW1lcyI6WyJhc1BhdGhUb1NlYXJjaFBhcmFtcyIsImFzUGF0aCIsIlVSTCIsInNlYXJjaFBhcmFtcyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/compare-states.js":
/*!*****************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/compare-states.js ***!
\*****************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"compareRouterStates\", ({\n enumerable: true,\n get: function() {\n return compareRouterStates;\n }\n}));\nfunction compareRouterStates(a, b) {\n const stateKeys = Object.keys(a);\n if (stateKeys.length !== Object.keys(b).length) return false;\n for(let i = stateKeys.length; i--;){\n const key = stateKeys[i];\n if (key === 'query') {\n const queryKeys = Object.keys(a.query);\n if (queryKeys.length !== Object.keys(b.query).length) {\n return false;\n }\n for(let j = queryKeys.length; j--;){\n const queryKey = queryKeys[j];\n if (!b.query.hasOwnProperty(queryKey) || a.query[queryKey] !== b.query[queryKey]) {\n return false;\n }\n }\n } else if (!b.hasOwnProperty(key) || a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n} //# sourceMappingURL=compare-states.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvY29tcGFyZS1zdGF0ZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozt1REFFZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLG9CQUFvQkMsQ0FBa0IsRUFBRUMsQ0FBa0I7SUFDeEUsTUFBTUMsWUFBWUMsT0FBT0MsSUFBSSxDQUFDSjtJQUM5QixJQUFJRSxVQUFVRyxNQUFNLEtBQUtGLE9BQU9DLElBQUksQ0FBQ0gsR0FBR0ksTUFBTSxFQUFFLE9BQU87SUFFdkQsSUFBSyxJQUFJQyxJQUFJSixVQUFVRyxNQUFNLEVBQUVDLEtBQU87UUFDcEMsTUFBTUMsTUFBTUwsU0FBUyxDQUFDSSxFQUFFO1FBQ3hCLElBQUlDLFFBQVEsU0FBUztZQUNuQixNQUFNQyxZQUFZTCxPQUFPQyxJQUFJLENBQUNKLEVBQUVTLEtBQUs7WUFDckMsSUFBSUQsVUFBVUgsTUFBTSxLQUFLRixPQUFPQyxJQUFJLENBQUNILEVBQUVRLEtBQUssRUFBRUosTUFBTSxFQUFFO2dCQUNwRCxPQUFPO1lBQ1Q7WUFDQSxJQUFLLElBQUlLLElBQUlGLFVBQVVILE1BQU0sRUFBRUssS0FBTztnQkFDcEMsTUFBTUMsV0FBV0gsU0FBUyxDQUFDRSxFQUFFO2dCQUM3QixJQUNFLENBQUNULEVBQUVRLEtBQUssQ0FBQ0csY0FBYyxDQUFDRCxhQUN4QlgsRUFBRVMsS0FBSyxDQUFDRSxTQUFTLEtBQUtWLEVBQUVRLEtBQUssQ0FBQ0UsU0FBUyxFQUN2QztvQkFDQSxPQUFPO2dCQUNUO1lBQ0Y7UUFDRixPQUFPLElBQ0wsQ0FBQ1YsRUFBRVcsY0FBYyxDQUFDTCxRQUNsQlAsQ0FBQyxDQUFDTyxJQUE2QixLQUFLTixDQUFDLENBQUNNLElBQTZCLEVBQ25FO1lBQ0EsT0FBTztRQUNUO0lBQ0Y7SUFFQSxPQUFPO0FBQ1QiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvY29tcGFyZS1zdGF0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIFJvdXRlciB9IGZyb20gJy4uL3JvdXRlcidcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVSb3V0ZXJTdGF0ZXMoYTogUm91dGVyWydzdGF0ZSddLCBiOiBSb3V0ZXJbJ3N0YXRlJ10pIHtcbiAgY29uc3Qgc3RhdGVLZXlzID0gT2JqZWN0LmtleXMoYSlcbiAgaWYgKHN0YXRlS2V5cy5sZW5ndGggIT09IE9iamVjdC5rZXlzKGIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG5cbiAgZm9yIChsZXQgaSA9IHN0YXRlS2V5cy5sZW5ndGg7IGktLTsgKSB7XG4gICAgY29uc3Qga2V5ID0gc3RhdGVLZXlzW2ldXG4gICAgaWYgKGtleSA9PT0gJ3F1ZXJ5Jykge1xuICAgICAgY29uc3QgcXVlcnlLZXlzID0gT2JqZWN0LmtleXMoYS5xdWVyeSlcbiAgICAgIGlmIChxdWVyeUtleXMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqID0gcXVlcnlLZXlzLmxlbmd0aDsgai0tOyApIHtcbiAgICAgICAgY29uc3QgcXVlcnlLZXkgPSBxdWVyeUtleXNbal1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFiLnF1ZXJ5Lmhhc093blByb3BlcnR5KHF1ZXJ5S2V5KSB8fFxuICAgICAgICAgIGEucXVlcnlbcXVlcnlLZXldICE9PSBiLnF1ZXJ5W3F1ZXJ5S2V5XVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhYi5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8XG4gICAgICBhW2tleSBhcyBrZXlvZiBSb3V0ZXJbJ3N0YXRlJ11dICE9PSBiW2tleSBhcyBrZXlvZiBSb3V0ZXJbJ3N0YXRlJ11dXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuIl0sIm5hbWVzIjpbImNvbXBhcmVSb3V0ZXJTdGF0ZXMiLCJhIiwiYiIsInN0YXRlS2V5cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJpIiwia2V5IiwicXVlcnlLZXlzIiwicXVlcnkiLCJqIiwicXVlcnlLZXkiLCJoYXNPd25Qcm9wZXJ0eSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/compare-states.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js":
/*!************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.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 */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils/warn-once.js\");\nfunction disableSmoothScrollDuringRouteTransition(fn, options) {\n if (options === void 0) 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 // Since this is a breaking change, this is temporarily flagged\n // and will be false by default.\n // In the next major (v16), this will be automatically enabled\n if (false) {} else {\n // Old behavior: always manipulate styles, but warn about upcoming change\n // Warn if smooth scrolling is detected but no data attribute is present\n if ( true && !hasDataAttribute && getComputedStyle(htmlElement).scrollBehavior === 'smooth') {\n (0, _warnonce.warnOnce)('Detected `scroll-behavior: smooth` on the `<html>` element. In a future version, ' + 'Next.js will no longer automatically disable smooth scrolling during route transitions. ' + 'To prepare for this change, add `data-scroll-behavior=\"smooth\"` to your <html> element. ' + 'Learn more: https://nextjs.org/docs/messages/missing-data-scroll-behavior');\n }\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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZGlzYWJsZS1zbW9vdGgtc2Nyb2xsLmpzIiwibWFwcGluZ3MiOiI7Ozs7NEVBTWdCQTs7O2VBQUFBOzs7c0NBTlM7QUFNbEIsU0FBU0EseUNBQ2RDLEVBQWMsRUFDZEMsT0FBcUU7SUFBckVBLElBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLFVBQW1FLENBQUM7SUFFcEUseUVBQXlFO0lBQ3pFLDZGQUE2RjtJQUM3RixJQUFJQSxRQUFRQyxjQUFjLEVBQUU7UUFDMUJGO1FBQ0E7SUFDRjtJQUVBLE1BQU1HLGNBQWNDLFNBQVNDLGVBQWU7SUFDNUMsTUFBTUMsbUJBQW1CSCxZQUFZSSxPQUFPLENBQUNDLGNBQWMsS0FBSztJQUVoRSwrREFBK0Q7SUFDL0QsZ0NBQWdDO0lBQ2hDLDhEQUE4RDtJQUM5RCxJQUFJQyxLQUF5QyxFQUFFLEVBTTlDLE1BQU07UUFDTCx5RUFBeUU7UUFFekUsd0VBQXdFO1FBQ3hFLElBQ0VBLEtBQW9CLElBQ3BCLENBQUNILG9CQUNETyxpQkFBaUJWLGFBQWFLLGNBQWMsS0FBSyxVQUNqRDtZQUNBTSxDQUFBQSxHQUFBQSxVQUFBQSxRQUFBQSxFQUNFLHNGQUNFLDZGQUNBLDZGQUNBO1FBRU47SUFDRjtJQUVBLHNEQUFzRDtJQUN0RCxNQUFNQyxXQUFXWixZQUFZYSxLQUFLLENBQUNSLGNBQWM7SUFDakRMLFlBQVlhLEtBQUssQ0FBQ1IsY0FBYyxHQUFHO0lBQ25DLElBQUksQ0FBQ1AsUUFBUWdCLGVBQWUsRUFBRTtRQUM1Qiw4RUFBOEU7UUFDOUUsNERBQTREO1FBQzVELHlGQUF5RjtRQUN6RmQsWUFBWWUsY0FBYztJQUM1QjtJQUNBbEI7SUFDQUcsWUFBWWEsS0FBSyxDQUFDUixjQUFjLEdBQUdPO0FBQ3JDIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Rpc2FibGUtc21vb3RoLXNjcm9sbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB3YXJuT25jZSB9IGZyb20gJy4uLy4uL3V0aWxzL3dhcm4tb25jZSdcblxuLyoqXG4gKiBSdW4gZnVuY3Rpb24gd2l0aCBgc2Nyb2xsLWJlaGF2aW9yOiBhdXRvYCBhcHBsaWVkIHRvIGA8aHRtbC8+YC5cbiAqIFRoaXMgY3NzIGNoYW5nZSB3aWxsIGJlIHJldmVydGVkIGFmdGVyIHRoZSBmdW5jdGlvbiBmaW5pc2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVTbW9vdGhTY3JvbGxEdXJpbmdSb3V0ZVRyYW5zaXRpb24oXG4gIGZuOiAoKSA9PiB2b2lkLFxuICBvcHRpb25zOiB7IGRvbnRGb3JjZUxheW91dD86IGJvb2xlYW47IG9ubHlIYXNoQ2hhbmdlPzogYm9vbGVhbiB9ID0ge31cbikge1xuICAvLyBpZiBvbmx5IHRoZSBoYXNoIGlzIGNoYW5nZWQsIHdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBzbW9vdGggc2Nyb2xsaW5nXG4gIC8vIHdlIG9ubHkgY2FyZSB0byBwcmV2ZW50IHNtb290aCBzY3JvbGxpbmcgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgbmV3IHBhZ2UgdG8gYXZvaWQgamFycmluZyBVWFxuICBpZiAob3B0aW9ucy5vbmx5SGFzaENoYW5nZSkge1xuICAgIGZuKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gIGNvbnN0IGhhc0RhdGFBdHRyaWJ1dGUgPSBodG1sRWxlbWVudC5kYXRhc2V0LnNjcm9sbEJlaGF2aW9yID09PSAnc21vb3RoJ1xuXG4gIC8vIFNpbmNlIHRoaXMgaXMgYSBicmVha2luZyBjaGFuZ2UsIHRoaXMgaXMgdGVtcG9yYXJpbHkgZmxhZ2dlZFxuICAvLyBhbmQgd2lsbCBiZSBmYWxzZSBieSBkZWZhdWx0LlxuICAvLyBJbiB0aGUgbmV4dCBtYWpvciAodjE2KSwgdGhpcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZW5hYmxlZFxuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX09QVElNSVpFX1JPVVRFUl9TQ1JPTEwpIHtcbiAgICBpZiAoIWhhc0RhdGFBdHRyaWJ1dGUpIHtcbiAgICAgIC8vIE5vIHNtb290aCBzY3JvbGxpbmcgY29uZmlndXJlZCwgcnVuIGRpcmVjdGx5IHdpdGhvdXQgc3R5bGUgbWFuaXB1bGF0aW9uXG4gICAgICBmbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gT2xkIGJlaGF2aW9yOiBhbHdheXMgbWFuaXB1bGF0ZSBzdHlsZXMsIGJ1dCB3YXJuIGFib3V0IHVwY29taW5nIGNoYW5nZVxuXG4gICAgLy8gV2FybiBpZiBzbW9vdGggc2Nyb2xsaW5nIGlzIGRldGVjdGVkIGJ1dCBubyBkYXRhIGF0dHJpYnV0ZSBpcyBwcmVzZW50XG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgJiZcbiAgICAgICFoYXNEYXRhQXR0cmlidXRlICYmXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGh0bWxFbGVtZW50KS5zY3JvbGxCZWhhdmlvciA9PT0gJ3Ntb290aCdcbiAgICApIHtcbiAgICAgIHdhcm5PbmNlKFxuICAgICAgICAnRGV0ZWN0ZWQgYHNjcm9sbC1iZWhhdmlvcjogc21vb3RoYCBvbiB0aGUgYDxodG1sPmAgZWxlbWVudC4gSW4gYSBmdXR1cmUgdmVyc2lvbiwgJyArXG4gICAgICAgICAgJ05leHQuanMgd2lsbCBubyBsb25nZXIgYXV0b21hdGljYWxseSBkaXNhYmxlIHNtb290aCBzY3JvbGxpbmcgZHVyaW5nIHJvdXRlIHRyYW5zaXRpb25zLiAnICtcbiAgICAgICAgICAnVG8gcHJlcGFyZSBmb3IgdGhpcyBjaGFuZ2UsIGFkZCBgZGF0YS1zY3JvbGwtYmVoYXZpb3I9XCJzbW9vdGhcImAgdG8geW91ciA8aHRtbD4gZWxlbWVudC4gJyArXG4gICAgICAgICAgJ0xlYXJuIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL21pc3NpbmctZGF0YS1zY3JvbGwtYmVoYXZpb3InXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLy8gUHJvY2VlZCB3aXRoIHRlbXBvcmFyaWx5IGRpc2FibGluZyBzbW9vdGggc2Nyb2xsaW5nXG4gIGNvbnN0IGV4aXN0aW5nID0gaHRtbEVsZW1lbnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3JcbiAgaHRtbEVsZW1lbnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSAnYXV0bydcbiAgaWYgKCFvcHRpb25zLmRvbnRGb3JjZUxheW91dCkge1xuICAgIC8vIEluIENocm9tZS1iYXNlZCBicm93c2VycyB3ZSBuZWVkIHRvIGZvcmNlIHJlZmxvdyBiZWZvcmUgY2FsbGluZyBgc2Nyb2xsVG9gLlxuICAgIC8vIE90aGVyd2lzZSBpdCB3aWxsIG5vdCBwaWNrdXAgdGhlIGNoYW5nZSBpbiBzY3JvbGxCZWhhdmlvclxuICAgIC8vIE1vcmUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL25leHQuanMvaXNzdWVzLzQwNzE5I2lzc3VlY29tbWVudC0xMzM2MjQ4MDQyXG4gICAgaHRtbEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKVxuICB9XG4gIGZuKClcbiAgaHRtbEVsZW1lbnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBleGlzdGluZ1xufVxuIl0sIm5hbWVzIjpbImRpc2FibGVTbW9vdGhTY3JvbGxEdXJpbmdSb3V0ZVRyYW5zaXRpb24iLCJmbiIsIm9wdGlvbnMiLCJvbmx5SGFzaENoYW5nZSIsImh0bWxFbGVtZW50IiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJoYXNEYXRhQXR0cmlidXRlIiwiZGF0YXNldCIsInNjcm9sbEJlaGF2aW9yIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9PUFRJTUlaRV9ST1VURVJfU0NST0xMIiwiTk9ERV9FTlYiLCJnZXRDb21wdXRlZFN0eWxlIiwid2Fybk9uY2UiLCJleGlzdGluZyIsInN0eWxlIiwiZG9udEZvcmNlTGF5b3V0IiwiZ2V0Q2xpZW50UmVjdHMiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js":
/*!****************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js ***!
\****************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"formatNextPathnameInfo\", ({\n enumerable: true,\n get: function() {\n return formatNextPathnameInfo;\n }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _addpathprefix = __webpack_require__(/*! ./add-path-prefix */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _addpathsuffix = __webpack_require__(/*! ./add-path-suffix */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js\");\nconst _addlocale = __webpack_require__(/*! ./add-locale */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/add-locale.js\");\nfunction formatNextPathnameInfo(info) {\n let pathname = (0, _addlocale.addLocale)(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix);\n if (info.buildId || !info.trailingSlash) {\n pathname = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n }\n if (info.buildId) {\n pathname = (0, _addpathsuffix.addPathSuffix)((0, _addpathprefix.addPathPrefix)(pathname, \"/_next/data/\" + info.buildId), info.pathname === '/' ? 'index.json' : '.json');\n }\n pathname = (0, _addpathprefix.addPathPrefix)(pathname, info.basePath);\n return !info.buildId && info.trailingSlash ? !pathname.endsWith('/') ? (0, _addpathsuffix.addPathSuffix)(pathname, '/') : pathname : (0, _removetrailingslash.removeTrailingSlash)(pathname);\n} //# sourceMappingURL=format-next-pathname-info.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LW5leHQtcGF0aG5hbWUtaW5mby5qcyIsIm1hcHBpbmdzIjoiOzs7OzBEQVdnQkE7OztlQUFBQTs7O2lEQVZvQjsyQ0FDTjsyQ0FDQTt1Q0FDSjtBQU9uQixTQUFTQSx1QkFBdUJDLElBQWtCO0lBQ3ZELElBQUlDLFdBQVdDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQ2JGLEtBQUtDLFFBQVEsRUFDYkQsS0FBS0csTUFBTSxFQUNYSCxLQUFLSSxPQUFPLEdBQUdDLFlBQVlMLEtBQUtNLGFBQWEsRUFDN0NOLEtBQUtPLFlBQVk7SUFHbkIsSUFBSVAsS0FBS0ksT0FBTyxJQUFJLENBQUNKLEtBQUtRLGFBQWEsRUFBRTtRQUN2Q1AsV0FBV1EsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQlI7SUFDakM7SUFFQSxJQUFJRCxLQUFLSSxPQUFPLEVBQUU7UUFDaEJILFdBQVdTLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQ1RDLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNWLFVBQVcsaUJBQWNELEtBQUtJLE9BQU8sR0FDbkRKLEtBQUtDLFFBQVEsS0FBSyxNQUFNLGVBQWU7SUFFM0M7SUFFQUEsV0FBV1UsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY1YsVUFBVUQsS0FBS1ksUUFBUTtJQUNoRCxPQUFPLENBQUNaLEtBQUtJLE9BQU8sSUFBSUosS0FBS1EsYUFBYSxHQUN0QyxDQUFDUCxTQUFTWSxRQUFRLENBQUMsT0FDakJILENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNULFVBQVUsT0FDeEJBLFdBQ0ZRLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0JSO0FBQzFCIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC1uZXh0LXBhdGhuYW1lLWluZm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOZXh0UGF0aG5hbWVJbmZvIH0gZnJvbSAnLi9nZXQtbmV4dC1wYXRobmFtZS1pbmZvJ1xuaW1wb3J0IHsgcmVtb3ZlVHJhaWxpbmdTbGFzaCB9IGZyb20gJy4vcmVtb3ZlLXRyYWlsaW5nLXNsYXNoJ1xuaW1wb3J0IHsgYWRkUGF0aFByZWZpeCB9IGZyb20gJy4vYWRkLXBhdGgtcHJlZml4J1xuaW1wb3J0IHsgYWRkUGF0aFN1ZmZpeCB9IGZyb20gJy4vYWRkLXBhdGgtc3VmZml4J1xuaW1wb3J0IHsgYWRkTG9jYWxlIH0gZnJvbSAnLi9hZGQtbG9jYWxlJ1xuXG5pbnRlcmZhY2UgRXh0ZW5kZWRJbmZvIGV4dGVuZHMgTmV4dFBhdGhuYW1lSW5mbyB7XG4gIGRlZmF1bHRMb2NhbGU/OiBzdHJpbmdcbiAgaWdub3JlUHJlZml4PzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TmV4dFBhdGhuYW1lSW5mbyhpbmZvOiBFeHRlbmRlZEluZm8pIHtcbiAgbGV0IHBhdGhuYW1lID0gYWRkTG9jYWxlKFxuICAgIGluZm8ucGF0aG5hbWUsXG4gICAgaW5mby5sb2NhbGUsXG4gICAgaW5mby5idWlsZElkID8gdW5kZWZpbmVkIDogaW5mby5kZWZhdWx0TG9jYWxlLFxuICAgIGluZm8uaWdub3JlUHJlZml4XG4gIClcblxuICBpZiAoaW5mby5idWlsZElkIHx8ICFpbmZvLnRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRobmFtZSA9IHJlbW92ZVRyYWlsaW5nU2xhc2gocGF0aG5hbWUpXG4gIH1cblxuICBpZiAoaW5mby5idWlsZElkKSB7XG4gICAgcGF0aG5hbWUgPSBhZGRQYXRoU3VmZml4KFxuICAgICAgYWRkUGF0aFByZWZpeChwYXRobmFtZSwgYC9fbmV4dC9kYXRhLyR7aW5mby5idWlsZElkfWApLFxuICAgICAgaW5mby5wYXRobmFtZSA9PT0gJy8nID8gJ2luZGV4Lmpzb24nIDogJy5qc29uJ1xuICAgIClcbiAgfVxuXG4gIHBhdGhuYW1lID0gYWRkUGF0aFByZWZpeChwYXRobmFtZSwgaW5mby5iYXNlUGF0aClcbiAgcmV0dXJuICFpbmZvLmJ1aWxkSWQgJiYgaW5mby50cmFpbGluZ1NsYXNoXG4gICAgPyAhcGF0aG5hbWUuZW5kc1dpdGgoJy8nKVxuICAgICAgPyBhZGRQYXRoU3VmZml4KHBhdGhuYW1lLCAnLycpXG4gICAgICA6IHBhdGhuYW1lXG4gICAgOiByZW1vdmVUcmFpbGluZ1NsYXNoKHBhdGhuYW1lKVxufVxuIl0sIm5hbWVzIjpbImZvcm1hdE5leHRQYXRobmFtZUluZm8iLCJpbmZvIiwicGF0aG5hbWUiLCJhZGRMb2NhbGUiLCJsb2NhbGUiLCJidWlsZElkIiwidW5kZWZpbmVkIiwiZGVmYXVsdExvY2FsZSIsImlnbm9yZVByZWZpeCIsInRyYWlsaW5nU2xhc2giLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwiYWRkUGF0aFN1ZmZpeCIsImFkZFBhdGhQcmVmaXgiLCJiYXNlUGF0aCIsImVuZHNXaXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/format-url.js":
/*!*************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.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 */ \"(pages-dir-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 */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybC5qcyIsIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUM7QUFDdkMsc0RBQXNEO0FBQ3RELEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsZ0VBQWdFO0FBQ2hFLHNFQUFzRTtBQUN0RSxzRUFBc0U7QUFDdEUsNEVBQTRFO0FBQzVFLHFFQUFxRTtBQUNyRSx3QkFBd0I7QUFDeEIsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSw2REFBNkQ7QUFDN0QsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUsNEVBQTRFO0FBQzVFLHlDQUF5Qzs7Ozs7Ozs7Ozs7OztJQVF6QkEsU0FBUztlQUFUQTs7SUE2REFDLG9CQUFvQjtlQUFwQkE7O0lBZkhDLGFBQWE7ZUFBYkE7Ozs7bUZBbERnQjtBQUU3QixNQUFNQyxtQkFBbUI7QUFFbEIsU0FBU0gsVUFBVUksTUFBaUI7SUFDekMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLFFBQVEsRUFBRSxHQUFHRjtJQUN6QixJQUFJRyxXQUFXSCxPQUFPRyxRQUFRLElBQUk7SUFDbEMsSUFBSUMsV0FBV0osT0FBT0ksUUFBUSxJQUFJO0lBQ2xDLElBQUlDLE9BQU9MLE9BQU9LLElBQUksSUFBSTtJQUMxQixJQUFJQyxRQUFRTixPQUFPTSxLQUFLLElBQUk7SUFDNUIsSUFBSUMsT0FBdUI7SUFFM0JOLE9BQU9BLE9BQU9PLG1CQUFtQlAsTUFBTVEsT0FBTyxDQUFDLFFBQVEsT0FBTyxNQUFNO0lBRXBFLElBQUlULFdBQVcsRUFBRTtRQUNmTyxPQUFPTixPQUFPRCxPQUFPTyxJQUFJO0lBQzNCLE9BQU8sSUFBSUwsVUFBVTtRQUNuQkssT0FBT04sT0FBUSxFQUFDQyxTQUFTUSxPQUFPLENBQUMsT0FBUSxNQUFHUixXQUFTLE1BQUtBLFFBQUFBLENBQU87UUFDakUsSUFBSUYsT0FBT1csSUFBSSxFQUFFO1lBQ2ZKLFFBQVEsTUFBTVAsT0FBT1csSUFBSTtRQUMzQjtJQUNGO0lBRUEsSUFBSUwsU0FBUyxPQUFPQSxVQUFVLFVBQVU7UUFDdENBLFFBQVFNLE9BQU9DLGFBQVlDLHNCQUFzQixDQUFDUjtJQUNwRDtJQUVBLElBQUlTLFNBQVNmLE9BQU9lLE1BQU0sSUFBS1QsU0FBVSxNQUFHQSxTQUFZO0lBRXhELElBQUlILFlBQVksQ0FBQ0EsU0FBU2EsUUFBUSxDQUFDLE1BQU1iLFlBQVk7SUFFckQsSUFDRUgsT0FBT2lCLE9BQU8sSUFDWixFQUFDZCxZQUFZSixpQkFBaUJtQixJQUFJLENBQUNmLFNBQUFBLENBQVEsSUFBTUksU0FBUyxPQUM1RDtRQUNBQSxPQUFPLE9BQVFBLENBQUFBLFFBQVEsR0FBQztRQUN4QixJQUFJSCxZQUFZQSxRQUFRLENBQUMsRUFBRSxLQUFLLEtBQUtBLFdBQVcsTUFBTUE7SUFDeEQsT0FBTyxJQUFJLENBQUNHLE1BQU07UUFDaEJBLE9BQU87SUFDVDtJQUVBLElBQUlGLFFBQVFBLElBQUksQ0FBQyxFQUFFLEtBQUssS0FBS0EsT0FBTyxNQUFNQTtJQUMxQyxJQUFJVSxVQUFVQSxNQUFNLENBQUMsRUFBRSxLQUFLLEtBQUtBLFNBQVMsTUFBTUE7SUFFaERYLFdBQVdBLFNBQVNLLE9BQU8sQ0FBQyxTQUFTRDtJQUNyQ08sU0FBU0EsT0FBT04sT0FBTyxDQUFDLEtBQUs7SUFFN0IsT0FBUSxLQUFFTixXQUFXSSxPQUFPSCxXQUFXVyxTQUFTVjtBQUNsRDtBQUVPLE1BQU1QLGdCQUFnQjtJQUMzQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUVNLFNBQVNELHFCQUFxQnNCLEdBQWM7SUFDakQsSUFBSUMsSUFBb0IsRUFBb0I7UUFDMUMsSUFBSUQsUUFBUSxRQUFRLE9BQU9BLFFBQVEsVUFBVTtZQUMzQ0ksT0FBT0MsSUFBSSxDQUFDTCxLQUFLTSxPQUFPLENBQUMsQ0FBQ0M7Z0JBQ3hCLElBQUksQ0FBQzVCLGNBQWM2QixRQUFRLENBQUNELE1BQU07b0JBQ2hDRSxRQUFRQyxJQUFJLENBQ1QsdURBQW9ESDtnQkFFekQ7WUFDRjtRQUNGO0lBQ0Y7SUFFQSxPQUFPOUIsVUFBVXVCO0FBQ25CIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gRm9ybWF0IGZ1bmN0aW9uIG1vZGlmaWVkIGZyb20gbm9kZWpzXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHR5cGUgeyBVcmxPYmplY3QgfSBmcm9tICd1cmwnXG5pbXBvcnQgdHlwZSB7IFBhcnNlZFVybFF1ZXJ5IH0gZnJvbSAncXVlcnlzdHJpbmcnXG5pbXBvcnQgKiBhcyBxdWVyeXN0cmluZyBmcm9tICcuL3F1ZXJ5c3RyaW5nJ1xuXG5jb25zdCBzbGFzaGVkUHJvdG9jb2xzID0gL2h0dHBzP3xmdHB8Z29waGVyfGZpbGUvXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRVcmwodXJsT2JqOiBVcmxPYmplY3QpIHtcbiAgbGV0IHsgYXV0aCwgaG9zdG5hbWUgfSA9IHVybE9ialxuICBsZXQgcHJvdG9jb2wgPSB1cmxPYmoucHJvdG9jb2wgfHwgJydcbiAgbGV0IHBhdGhuYW1lID0gdXJsT2JqLnBhdGhuYW1lIHx8ICcnXG4gIGxldCBoYXNoID0gdXJsT2JqLmhhc2ggfHwgJydcbiAgbGV0IHF1ZXJ5ID0gdXJsT2JqLnF1ZXJ5IHx8ICcnXG4gIGxldCBob3N0OiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlXG5cbiAgYXV0aCA9IGF1dGggPyBlbmNvZGVVUklDb21wb25lbnQoYXV0aCkucmVwbGFjZSgvJTNBL2ksICc6JykgKyAnQCcgOiAnJ1xuXG4gIGlmICh1cmxPYmouaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdXJsT2JqLmhvc3RcbiAgfSBlbHNlIGlmIChob3N0bmFtZSkge1xuICAgIGhvc3QgPSBhdXRoICsgKH5ob3N0bmFtZS5pbmRleE9mKCc6JykgPyBgWyR7aG9zdG5hbWV9XWAgOiBob3N0bmFtZSlcbiAgICBpZiAodXJsT2JqLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdXJsT2JqLnBvcnRcbiAgICB9XG4gIH1cblxuICBpZiAocXVlcnkgJiYgdHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0Jykge1xuICAgIHF1ZXJ5ID0gU3RyaW5nKHF1ZXJ5c3RyaW5nLnVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMocXVlcnkgYXMgUGFyc2VkVXJsUXVlcnkpKVxuICB9XG5cbiAgbGV0IHNlYXJjaCA9IHVybE9iai5zZWFyY2ggfHwgKHF1ZXJ5ICYmIGA/JHtxdWVyeX1gKSB8fCAnJ1xuXG4gIGlmIChwcm90b2NvbCAmJiAhcHJvdG9jb2wuZW5kc1dpdGgoJzonKSkgcHJvdG9jb2wgKz0gJzonXG5cbiAgaWYgKFxuICAgIHVybE9iai5zbGFzaGVzIHx8XG4gICAgKCghcHJvdG9jb2wgfHwgc2xhc2hlZFByb3RvY29scy50ZXN0KHByb3RvY29sKSkgJiYgaG9zdCAhPT0gZmFsc2UpXG4gICkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpXG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lWzBdICE9PSAnLycpIHBhdGhuYW1lID0gJy8nICsgcGF0aG5hbWVcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJ1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaFswXSAhPT0gJyMnKSBoYXNoID0gJyMnICsgaGFzaFxuICBpZiAoc2VhcmNoICYmIHNlYXJjaFswXSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2hcblxuICBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1s/I10vZywgZW5jb2RlVVJJQ29tcG9uZW50KVxuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKVxuXG4gIHJldHVybiBgJHtwcm90b2NvbH0ke2hvc3R9JHtwYXRobmFtZX0ke3NlYXJjaH0ke2hhc2h9YFxufVxuXG5leHBvcnQgY29uc3QgdXJsT2JqZWN0S2V5cyA9IFtcbiAgJ2F1dGgnLFxuICAnaGFzaCcsXG4gICdob3N0JyxcbiAgJ2hvc3RuYW1lJyxcbiAgJ2hyZWYnLFxuICAncGF0aCcsXG4gICdwYXRobmFtZScsXG4gICdwb3J0JyxcbiAgJ3Byb3RvY29sJyxcbiAgJ3F1ZXJ5JyxcbiAgJ3NlYXJjaCcsXG4gICdzbGFzaGVzJyxcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFdpdGhWYWxpZGF0aW9uKHVybDogVXJsT2JqZWN0KTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgaWYgKHVybCAhPT0gbnVsbCAmJiB0eXBlb2YgdXJsID09PSAnb2JqZWN0Jykge1xuICAgICAgT2JqZWN0LmtleXModXJsKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKCF1cmxPYmplY3RLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgVW5rbm93biBrZXkgcGFzc2VkIHZpYSB1cmxPYmplY3QgaW50byB1cmwuZm9ybWF0OiAke2tleX1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtYXRVcmwodXJsKVxufVxuIl0sIm5hbWVzIjpbImZvcm1hdFVybCIsImZvcm1hdFdpdGhWYWxpZGF0aW9uIiwidXJsT2JqZWN0S2V5cyIsInNsYXNoZWRQcm90b2NvbHMiLCJ1cmxPYmoiLCJhdXRoIiwiaG9zdG5hbWUiLCJwcm90b2NvbCIsInBhdGhuYW1lIiwiaGFzaCIsInF1ZXJ5IiwiaG9zdCIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlcGxhY2UiLCJpbmRleE9mIiwicG9ydCIsIlN0cmluZyIsInF1ZXJ5c3RyaW5nIiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsInNlYXJjaCIsImVuZHNXaXRoIiwic2xhc2hlcyIsInRlc3QiLCJ1cmwiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImluY2x1ZGVzIiwiY29uc29sZSIsIndhcm4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/format-url.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js":
/*!****************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js ***!
\****************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// Translates a logical route into its pages asset path (relative from a common prefix)\n// \"asset path\" being its javascript file, data file, prerendered html,...\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return getAssetPathFromRoute;\n }\n}));\nfunction getAssetPathFromRoute(route, ext) {\n if (ext === void 0) ext = '';\n const path = route === '/' ? '/index' : /^\\/index(\\/|$)/.test(route) ? \"/index\" + route : route;\n return path + ext;\n} //# sourceMappingURL=get-asset-path-from-route.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZ2V0LWFzc2V0LXBhdGgtZnJvbS1yb3V0ZS5qcyIsIm1hcHBpbmdzIjoiQUFBQSx1RkFBdUY7QUFDdkYsMEVBQTBFOzs7OzsyQ0FDMUU7OztlQUF3QkE7OztBQUFULFNBQVNBLHNCQUN0QkMsS0FBYSxFQUNiQyxHQUFnQjtJQUFoQkEsSUFBQUEsUUFBQUEsS0FBQUEsR0FBQUEsTUFBYztJQUVkLE1BQU1DLE9BQ0pGLFVBQVUsTUFDTixXQUNBLGlCQUFpQkcsSUFBSSxDQUFDSCxTQUNuQixXQUFRQSxRQUNUQTtJQUNSLE9BQU9FLE9BQU9EO0FBQ2hCIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2dldC1hc3NldC1wYXRoLWZyb20tcm91dGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVHJhbnNsYXRlcyBhIGxvZ2ljYWwgcm91dGUgaW50byBpdHMgcGFnZXMgYXNzZXQgcGF0aCAocmVsYXRpdmUgZnJvbSBhIGNvbW1vbiBwcmVmaXgpXG4vLyBcImFzc2V0IHBhdGhcIiBiZWluZyBpdHMgamF2YXNjcmlwdCBmaWxlLCBkYXRhIGZpbGUsIHByZXJlbmRlcmVkIGh0bWwsLi4uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBc3NldFBhdGhGcm9tUm91dGUoXG4gIHJvdXRlOiBzdHJpbmcsXG4gIGV4dDogc3RyaW5nID0gJydcbik6IHN0cmluZyB7XG4gIGNvbnN0IHBhdGggPVxuICAgIHJvdXRlID09PSAnLydcbiAgICAgID8gJy9pbmRleCdcbiAgICAgIDogL15cXC9pbmRleChcXC98JCkvLnRlc3Qocm91dGUpXG4gICAgICAgID8gYC9pbmRleCR7cm91dGV9YFxuICAgICAgICA6IHJvdXRlXG4gIHJldHVybiBwYXRoICsgZXh0XG59XG4iXSwibmFtZXMiOlsiZ2V0QXNzZXRQYXRoRnJvbVJvdXRlIiwicm91dGUiLCJleHQiLCJwYXRoIiwidGVzdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js":
/*!********************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.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 PARAMETER_PATTERN: function() {\n return PARAMETER_PATTERN;\n },\n getDynamicParam: function() {\n return getDynamicParam;\n },\n parseMatchedParameter: function() {\n return parseMatchedParameter;\n },\n parseParameter: function() {\n return parseParameter;\n }\n});\nfunction getDynamicParam(params, segmentKey, dynamicParamType, pagePath, fallbackRouteParams) {\n let value = params[segmentKey];\n if (fallbackRouteParams && fallbackRouteParams.has(segmentKey)) {\n value = fallbackRouteParams.get(segmentKey);\n } else if (Array.isArray(value)) {\n value = value.map((i)=>encodeURIComponent(i));\n } else if (typeof value === 'string') {\n value = encodeURIComponent(value);\n }\n if (!value) {\n const isCatchall = dynamicParamType === 'c';\n const isOptionalCatchall = dynamicParamType === 'oc';\n if (isCatchall || isOptionalCatchall) {\n // handle the case where an optional catchall does not have a value,\n // e.g. `/dashboard/[[...slug]]` when requesting `/dashboard`\n if (isOptionalCatchall) {\n return {\n param: segmentKey,\n value: null,\n type: dynamicParamType,\n treeSegment: [\n segmentKey,\n '',\n dynamicParamType\n ]\n };\n }\n // handle the case where a catchall or optional catchall does not have a value,\n // e.g. `/foo/bar/hello` and `@slot/[...catchall]` or `@slot/[[...catchall]]` is matched\n value = pagePath.split('/') // remove the first empty string\n .slice(1) // replace any dynamic params with the actual values\n .flatMap((pathSegment)=>{\n const param = parseParameter(pathSegment);\n var _params_param_key;\n // if the segment matches a param, return the param value\n // otherwise, it's a static segment, so just return that\n return (_params_param_key = params[param.key]) != null ? _params_param_key : param.key;\n });\n return {\n param: segmentKey,\n value,\n type: dynamicParamType,\n // This value always has to be a string.\n treeSegment: [\n segmentKey,\n value.join('/'),\n dynamicParamType\n ]\n };\n }\n }\n return {\n param: segmentKey,\n // The value that is passed to user code.\n value: value,\n // The value that is rendered in the router tree.\n treeSegment: [\n segmentKey,\n Array.isArray(value) ? value.join('/') : value,\n dynamicParamType\n ],\n type: dynamicParamType\n };\n}\nconst PARAMETER_PATTERN = /^([^[]*)\\[((?:\\[[^\\]]*\\])|[^\\]]+)\\](.*)$/;\nfunction parseParameter(param) {\n const match = param.match(PARAMETER_PATTERN);\n if (!match) {\n return parseMatchedParameter(param);\n }\n return parseMatchedParameter(match[2]);\n}\nfunction parseMatchedParameter(param) {\n const optional = param.startsWith('[') && param.endsWith(']');\n if (optional) {\n param = param.slice(1, -1);\n }\n const repeat = param.startsWith('...');\n if (repeat) {\n param = param.slice(3);\n }\n return {\n key: param,\n repeat,\n optional\n };\n} //# sourceMappingURL=get-dynamic-param.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZ2V0LWR5bmFtaWMtcGFyYW0uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBK0ZhQSxpQkFBaUI7ZUFBakJBOztJQWhGR0MsZUFBZTtlQUFmQTs7SUFtSEFDLHFCQUFxQjtlQUFyQkE7O0lBckJBQyxjQUFjO2VBQWRBOzs7QUE5RlQsU0FBU0YsZ0JBQ2RHLE1BQThCLEVBQzlCQyxVQUFrQixFQUNsQkMsZ0JBQXdDLEVBQ3hDQyxRQUFnQixFQUNoQkMsbUJBQStDO0lBRS9DLElBQUlDLFFBQVFMLE1BQU0sQ0FBQ0MsV0FBVztJQUU5QixJQUFJRyx1QkFBdUJBLG9CQUFvQkUsR0FBRyxDQUFDTCxhQUFhO1FBQzlESSxRQUFRRCxvQkFBb0JHLEdBQUcsQ0FBQ047SUFDbEMsT0FBTyxJQUFJTyxNQUFNQyxPQUFPLENBQUNKLFFBQVE7UUFDL0JBLFFBQVFBLE1BQU1LLEdBQUcsQ0FBQyxDQUFDQyxJQUFNQyxtQkFBbUJEO0lBQzlDLE9BQU8sSUFBSSxPQUFPTixVQUFVLFVBQVU7UUFDcENBLFFBQVFPLG1CQUFtQlA7SUFDN0I7SUFFQSxJQUFJLENBQUNBLE9BQU87UUFDVixNQUFNUSxhQUFhWCxxQkFBcUI7UUFDeEMsTUFBTVkscUJBQXFCWixxQkFBcUI7UUFFaEQsSUFBSVcsY0FBY0Msb0JBQW9CO1lBQ3BDLG9FQUFvRTtZQUNwRSw2REFBNkQ7WUFDN0QsSUFBSUEsb0JBQW9CO2dCQUN0QixPQUFPO29CQUNMQyxPQUFPZDtvQkFDUEksT0FBTztvQkFDUFcsTUFBTWQ7b0JBQ05lLGFBQWE7d0JBQUNoQjt3QkFBWTt3QkFBSUM7cUJBQWlCO2dCQUNqRDtZQUNGO1lBRUEsK0VBQStFO1lBQy9FLHdGQUF3RjtZQUN4RkcsUUFBUUYsU0FDTGUsS0FBSyxDQUFDLEtBQ1AsZ0NBQWdDO2FBQy9CQyxLQUFLLENBQUMsR0FDUCxvREFBb0Q7YUFDbkRDLE9BQU8sQ0FBQyxDQUFDQztnQkFDUixNQUFNTixRQUFRaEIsZUFBZXNCO29CQUd0QnJCO2dCQUZQLHlEQUF5RDtnQkFDekQsd0RBQXdEO2dCQUN4RCxPQUFPQSxDQUFBQSxvQkFBQUEsTUFBTSxDQUFDZSxNQUFNTyxJQUFHLEtBQUMsT0FBakJ0QixvQkFBcUJlLE1BQU1PLEdBQUc7WUFDdkM7WUFFRixPQUFPO2dCQUNMUCxPQUFPZDtnQkFDUEk7Z0JBQ0FXLE1BQU1kO2dCQUNOLHdDQUF3QztnQkFDeENlLGFBQWE7b0JBQUNoQjtvQkFBWUksTUFBTWtCLElBQUksQ0FBQztvQkFBTXJCO2lCQUFpQjtZQUM5RDtRQUNGO0lBQ0Y7SUFFQSxPQUFPO1FBQ0xhLE9BQU9kO1FBQ1AseUNBQXlDO1FBQ3pDSSxPQUFPQTtRQUNQLGlEQUFpRDtRQUNqRFksYUFBYTtZQUNYaEI7WUFDQU8sTUFBTUMsT0FBTyxDQUFDSixTQUFTQSxNQUFNa0IsSUFBSSxDQUFDLE9BQU9sQjtZQUN6Q0g7U0FDRDtRQUNEYyxNQUFNZDtJQUNSO0FBQ0Y7QUFXTyxNQUFNTixvQkFBb0I7QUFjMUIsU0FBU0csZUFBZWdCLEtBQWE7SUFDMUMsTUFBTVMsUUFBUVQsTUFBTVMsS0FBSyxDQUFDNUI7SUFFMUIsSUFBSSxDQUFDNEIsT0FBTztRQUNWLE9BQU8xQixzQkFBc0JpQjtJQUMvQjtJQUVBLE9BQU9qQixzQkFBc0IwQixLQUFLLENBQUMsRUFBRTtBQUN2QztBQWFPLFNBQVMxQixzQkFBc0JpQixLQUFhO0lBQ2pELE1BQU1VLFdBQVdWLE1BQU1XLFVBQVUsQ0FBQyxRQUFRWCxNQUFNWSxRQUFRLENBQUM7SUFDekQsSUFBSUYsVUFBVTtRQUNaVixRQUFRQSxNQUFNSSxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzFCO0lBQ0EsTUFBTVMsU0FBU2IsTUFBTVcsVUFBVSxDQUFDO0lBQ2hDLElBQUlFLFFBQVE7UUFDVmIsUUFBUUEsTUFBTUksS0FBSyxDQUFDO0lBQ3RCO0lBQ0EsT0FBTztRQUFFRyxLQUFLUDtRQUFPYTtRQUFRSDtJQUFTO0FBQ3hDIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2dldC1keW5hbWljLXBhcmFtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRHluYW1pY1BhcmFtIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvYXBwLXJlbmRlcidcbmltcG9ydCB0eXBlIHsgRHluYW1pY1BhcmFtVHlwZXNTaG9ydCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBGYWxsYmFja1JvdXRlUGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL3JlcXVlc3QvZmFsbGJhY2stcGFyYW1zJ1xuXG4vKipcbiAqXG4gKiBTaGFyZWQgbG9naWMgb24gY2xpZW50IGFuZCBzZXJ2ZXIgZm9yIGNyZWF0aW5nIGEgZHluYW1pYyBwYXJhbSB2YWx1ZS5cbiAqXG4gKiBUaGlzIGNvZGUgbmVlZHMgdG8gYmUgc2hhcmVkIHdpdGggdGhlIGNsaWVudCBzbyBpdCBjYW4gZXh0cmFjdCBkeW5hbWljIHJvdXRlXG4gKiBwYXJhbXMgZnJvbSB0aGUgVVJMIHdpdGhvdXQgYSBzZXJ2ZXIgcmVxdWVzdC5cbiAqXG4gKiBCZWNhdXNlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBtb2R1bGUgaXMgc2VudCB0byB0aGUgY2xpZW50LCB3ZSBzaG91bGQgYWltIHRvXG4gKiBrZWVwIHRoaXMgY29kZSBhcyBzaW1wbGUgYXMgcG9zc2libGUuIFRoZSBzcGVjaWFsIGNhc2UgaGFuZGxpbmcgZm9yIGNhdGNoYWxsXG4gKiBhbmQgb3B0aW9uYWwgaXMsIGFsYXMsIHVuZm9ydHVuYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHluYW1pY1BhcmFtKFxuICBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gIHNlZ21lbnRLZXk6IHN0cmluZyxcbiAgZHluYW1pY1BhcmFtVHlwZTogRHluYW1pY1BhcmFtVHlwZXNTaG9ydCxcbiAgcGFnZVBhdGg6IHN0cmluZyxcbiAgZmFsbGJhY2tSb3V0ZVBhcmFtczogRmFsbGJhY2tSb3V0ZVBhcmFtcyB8IG51bGxcbik6IER5bmFtaWNQYXJhbSB7XG4gIGxldCB2YWx1ZSA9IHBhcmFtc1tzZWdtZW50S2V5XVxuXG4gIGlmIChmYWxsYmFja1JvdXRlUGFyYW1zICYmIGZhbGxiYWNrUm91dGVQYXJhbXMuaGFzKHNlZ21lbnRLZXkpKSB7XG4gICAgdmFsdWUgPSBmYWxsYmFja1JvdXRlUGFyYW1zLmdldChzZWdtZW50S2V5KVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5tYXAoKGkpID0+IGVuY29kZVVSSUNvbXBvbmVudChpKSlcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXG4gIH1cblxuICBpZiAoIXZhbHVlKSB7XG4gICAgY29uc3QgaXNDYXRjaGFsbCA9IGR5bmFtaWNQYXJhbVR5cGUgPT09ICdjJ1xuICAgIGNvbnN0IGlzT3B0aW9uYWxDYXRjaGFsbCA9IGR5bmFtaWNQYXJhbVR5cGUgPT09ICdvYydcblxuICAgIGlmIChpc0NhdGNoYWxsIHx8IGlzT3B0aW9uYWxDYXRjaGFsbCkge1xuICAgICAgLy8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIG9wdGlvbmFsIGNhdGNoYWxsIGRvZXMgbm90IGhhdmUgYSB2YWx1ZSxcbiAgICAgIC8vIGUuZy4gYC9kYXNoYm9hcmQvW1suLi5zbHVnXV1gIHdoZW4gcmVxdWVzdGluZyBgL2Rhc2hib2FyZGBcbiAgICAgIGlmIChpc09wdGlvbmFsQ2F0Y2hhbGwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwYXJhbTogc2VnbWVudEtleSxcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICB0eXBlOiBkeW5hbWljUGFyYW1UeXBlLFxuICAgICAgICAgIHRyZWVTZWdtZW50OiBbc2VnbWVudEtleSwgJycsIGR5bmFtaWNQYXJhbVR5cGVdLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIGNhdGNoYWxsIG9yIG9wdGlvbmFsIGNhdGNoYWxsIGRvZXMgbm90IGhhdmUgYSB2YWx1ZSxcbiAgICAgIC8vIGUuZy4gYC9mb28vYmFyL2hlbGxvYCBhbmQgYEBzbG90L1suLi5jYXRjaGFsbF1gIG9yIGBAc2xvdC9bWy4uLmNhdGNoYWxsXV1gIGlzIG1hdGNoZWRcbiAgICAgIHZhbHVlID0gcGFnZVBhdGhcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBmaXJzdCBlbXB0eSBzdHJpbmdcbiAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgIC8vIHJlcGxhY2UgYW55IGR5bmFtaWMgcGFyYW1zIHdpdGggdGhlIGFjdHVhbCB2YWx1ZXNcbiAgICAgICAgLmZsYXRNYXAoKHBhdGhTZWdtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyYW0gPSBwYXJzZVBhcmFtZXRlcihwYXRoU2VnbWVudClcbiAgICAgICAgICAvLyBpZiB0aGUgc2VnbWVudCBtYXRjaGVzIGEgcGFyYW0sIHJldHVybiB0aGUgcGFyYW0gdmFsdWVcbiAgICAgICAgICAvLyBvdGhlcndpc2UsIGl0J3MgYSBzdGF0aWMgc2VnbWVudCwgc28ganVzdCByZXR1cm4gdGhhdFxuICAgICAgICAgIHJldHVybiBwYXJhbXNbcGFyYW0ua2V5XSA/PyBwYXJhbS5rZXlcbiAgICAgICAgfSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFyYW06IHNlZ21lbnRLZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0eXBlOiBkeW5hbWljUGFyYW1UeXBlLFxuICAgICAgICAvLyBUaGlzIHZhbHVlIGFsd2F5cyBoYXMgdG8gYmUgYSBzdHJpbmcuXG4gICAgICAgIHRyZWVTZWdtZW50OiBbc2VnbWVudEtleSwgdmFsdWUuam9pbignLycpLCBkeW5hbWljUGFyYW1UeXBlXSxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhcmFtOiBzZWdtZW50S2V5LFxuICAgIC8vIFRoZSB2YWx1ZSB0aGF0IGlzIHBhc3NlZCB0byB1c2VyIGNvZGUuXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIC8vIFRoZSB2YWx1ZSB0aGF0IGlzIHJlbmRlcmVkIGluIHRoZSByb3V0ZXIgdHJlZS5cbiAgICB0cmVlU2VnbWVudDogW1xuICAgICAgc2VnbWVudEtleSxcbiAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLycpIDogdmFsdWUsXG4gICAgICBkeW5hbWljUGFyYW1UeXBlLFxuICAgIF0sXG4gICAgdHlwZTogZHluYW1pY1BhcmFtVHlwZSxcbiAgfVxufVxuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHVzZWQgdG8gbWF0Y2ggcm91dGUgcGFyYW1ldGVycy5cbiAqIE1hdGNoZXMgYm90aCBzaW5nbGUgcGFyYW1ldGVycyBhbmQgcGFyYW1ldGVyIGdyb3Vwcy5cbiAqIEV4YW1wbGVzOlxuICogICAtIGBbWy4uLnNsdWddXWAgbWF0Y2hlcyBwYXJhbWV0ZXIgZ3JvdXAgd2l0aCBrZXkgJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlXG4gKiAgIC0gYFsuLi5zbHVnXWAgbWF0Y2hlcyBwYXJhbWV0ZXIgZ3JvdXAgd2l0aCBrZXkgJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZVxuICogICAtIGBbW2Zvb11dYCBtYXRjaGVzIHBhcmFtZXRlciB3aXRoIGtleSAnZm9vJywgcmVwZWF0OiBmYWxzZSwgb3B0aW9uYWw6IHRydWVcbiAqICAgLSBgW2Jhcl1gIG1hdGNoZXMgcGFyYW1ldGVyIHdpdGgga2V5ICdiYXInLCByZXBlYXQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IFBBUkFNRVRFUl9QQVRURVJOID0gL14oW15bXSopXFxbKCg/OlxcW1teXFxdXSpcXF0pfFteXFxdXSspXFxdKC4qKSQvXG5cbi8qKlxuICogUGFyc2VzIGEgZ2l2ZW4gcGFyYW1ldGVyIGZyb20gYSByb3V0ZSB0byBhIGRhdGEgc3RydWN0dXJlIHRoYXQgY2FuIGJlIHVzZWRcbiAqIHRvIGdlbmVyYXRlIHRoZSBwYXJhbWV0cml6ZWQgcm91dGUuXG4gKiBFeGFtcGxlczpcbiAqICAgLSBgW1suLi5zbHVnXV1gIC0+IGB7IGtleTogJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH1gXG4gKiAgIC0gYFsuLi5zbHVnXWAgLT4gYHsga2V5OiAnc2x1ZycsIHJlcGVhdDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlIH1gXG4gKiAgIC0gYFtbZm9vXV1gIC0+IGB7IGtleTogJ2ZvbycsIHJlcGVhdDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlIH1gXG4gKiAgIC0gYFtiYXJdYCAtPiBgeyBrZXk6ICdiYXInLCByZXBlYXQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UgfWBcbiAqICAgLSBgZml6emAgLT4gYHsga2V5OiAnZml6eicsIHJlcGVhdDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSB9YFxuICogQHBhcmFtIHBhcmFtIC0gVGhlIHBhcmFtZXRlciB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcGFyYW1ldGVyIGFzIGEgZGF0YSBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmFtZXRlcihwYXJhbTogc3RyaW5nKSB7XG4gIGNvbnN0IG1hdGNoID0gcGFyYW0ubWF0Y2goUEFSQU1FVEVSX1BBVFRFUk4pXG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBwYXJzZU1hdGNoZWRQYXJhbWV0ZXIocGFyYW0pXG4gIH1cblxuICByZXR1cm4gcGFyc2VNYXRjaGVkUGFyYW1ldGVyKG1hdGNoWzJdKVxufVxuXG4vKipcbiAqIFBhcnNlcyBhIG1hdGNoZWQgcGFyYW1ldGVyIGZyb20gdGhlIFBBUkFNRVRFUl9QQVRURVJOIHJlZ2V4IHRvIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUgdXNlZFxuICogdG8gZ2VuZXJhdGUgdGhlIHBhcmFtZXRyaXplZCByb3V0ZS5cbiAqIEV4YW1wbGVzOlxuICogICAtIGBbLi4uc2x1Z11gIC0+IGB7IGtleTogJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH1gXG4gKiAgIC0gYC4uLnNsdWdgIC0+IGB7IGtleTogJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSB9YFxuICogICAtIGBbZm9vXWAgLT4gYHsga2V5OiAnZm9vJywgcmVwZWF0OiBmYWxzZSwgb3B0aW9uYWw6IHRydWUgfWBcbiAqICAgLSBgYmFyYCAtPiBgeyBrZXk6ICdiYXInLCByZXBlYXQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UgfWBcbiAqIEBwYXJhbSBwYXJhbSAtIFRoZSBtYXRjaGVkIHBhcmFtZXRlciB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcGFyYW1ldGVyIGFzIGEgZGF0YSBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1hdGNoZWRQYXJhbWV0ZXIocGFyYW06IHN0cmluZykge1xuICBjb25zdCBvcHRpb25hbCA9IHBhcmFtLnN0YXJ0c1dpdGgoJ1snKSAmJiBwYXJhbS5lbmRzV2l0aCgnXScpXG4gIGlmIChvcHRpb25hbCkge1xuICAgIHBhcmFtID0gcGFyYW0uc2xpY2UoMSwgLTEpXG4gIH1cbiAgY29uc3QgcmVwZWF0ID0gcGFyYW0uc3RhcnRzV2l0aCgnLi4uJylcbiAgaWYgKHJlcGVhdCkge1xuICAgIHBhcmFtID0gcGFyYW0uc2xpY2UoMylcbiAgfVxuICByZXR1cm4geyBrZXk6IHBhcmFtLCByZXBlYXQsIG9wdGlvbmFsIH1cbn1cbiJdLCJuYW1lcyI6WyJQQVJBTUVURVJfUEFUVEVSTiIsImdldER5bmFtaWNQYXJhbSIsInBhcnNlTWF0Y2hlZFBhcmFtZXRlciIsInBhcnNlUGFyYW1ldGVyIiwicGFyYW1zIiwic2VnbWVudEtleSIsImR5bmFtaWNQYXJhbVR5cGUiLCJwYWdlUGF0aCIsImZhbGxiYWNrUm91dGVQYXJhbXMiLCJ2YWx1ZSIsImhhcyIsImdldCIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJpc0NhdGNoYWxsIiwiaXNPcHRpb25hbENhdGNoYWxsIiwicGFyYW0iLCJ0eXBlIiwidHJlZVNlZ21lbnQiLCJzcGxpdCIsInNsaWNlIiwiZmxhdE1hcCIsInBhdGhTZWdtZW50Iiwia2V5Iiwiam9pbiIsIm1hdGNoIiwib3B0aW9uYWwiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJyZXBlYXQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js":
/*!*************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js ***!
\*************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getNextPathnameInfo\", ({\n enumerable: true,\n get: function() {\n return getNextPathnameInfo;\n }\n}));\nconst _normalizelocalepath = __webpack_require__(/*! ../../i18n/normalize-locale-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _removepathprefix = __webpack_require__(/*! ./remove-path-prefix */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js\");\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction getNextPathnameInfo(pathname, options) {\n var _options_nextConfig;\n const { basePath, i18n, trailingSlash } = (_options_nextConfig = options.nextConfig) != null ? _options_nextConfig : {};\n const info = {\n pathname,\n trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash\n };\n if (basePath && (0, _pathhasprefix.pathHasPrefix)(info.pathname, basePath)) {\n info.pathname = (0, _removepathprefix.removePathPrefix)(info.pathname, basePath);\n info.basePath = basePath;\n }\n let pathnameNoDataPrefix = info.pathname;\n if (info.pathname.startsWith('/_next/data/') && info.pathname.endsWith('.json')) {\n const paths = info.pathname.replace(/^\\/_next\\/data\\//, '').replace(/\\.json$/, '').split('/');\n const buildId = paths[0];\n info.buildId = buildId;\n pathnameNoDataPrefix = paths[1] !== 'index' ? \"/\" + paths.slice(1).join('/') : '/';\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix;\n }\n }\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (0, _normalizelocalepath.normalizeLocalePath)(info.pathname, i18n.locales);\n info.locale = result.detectedLocale;\n var _result_pathname;\n info.pathname = (_result_pathname = result.pathname) != null ? _result_pathname : info.pathname;\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (0, _normalizelocalepath.normalizeLocalePath)(pathnameNoDataPrefix, i18n.locales);\n if (result.detectedLocale) {\n info.locale = result.detectedLocale;\n }\n }\n }\n return info;\n} //# sourceMappingURL=get-next-pathname-info.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZ2V0LW5leHQtcGF0aG5hbWUtaW5mby5qcyIsIm1hcHBpbmdzIjoiOzs7O3VEQW9EZ0JBOzs7ZUFBQUE7OztpREFwRG9COzhDQUNIOzJDQUNIO0FBa0R2QixTQUFTQSxvQkFDZEMsUUFBZ0IsRUFDaEJDLE9BQWdCO1FBRTBCQTtJQUExQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFQyxhQUFhLEVBQUUsR0FBR0gsQ0FBQUEsc0JBQUFBLFFBQVFJLFVBQUFBLEtBQVUsT0FBbEJKLHNCQUFzQixDQUFDO0lBQ2pFLE1BQU1LLE9BQXlCO1FBQzdCTjtRQUNBSSxlQUFlSixhQUFhLE1BQU1BLFNBQVNPLFFBQVEsQ0FBQyxPQUFPSDtJQUM3RDtJQUVBLElBQUlGLFlBQVlNLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNGLEtBQUtOLFFBQVEsRUFBRUUsV0FBVztRQUN0REksS0FBS04sUUFBUSxHQUFHUyxDQUFBQSxHQUFBQSxrQkFBQUEsZ0JBQUFBLEVBQWlCSCxLQUFLTixRQUFRLEVBQUVFO1FBQ2hESSxLQUFLSixRQUFRLEdBQUdBO0lBQ2xCO0lBQ0EsSUFBSVEsdUJBQXVCSixLQUFLTixRQUFRO0lBRXhDLElBQ0VNLEtBQUtOLFFBQVEsQ0FBQ1csVUFBVSxDQUFDLG1CQUN6QkwsS0FBS04sUUFBUSxDQUFDTyxRQUFRLENBQUMsVUFDdkI7UUFDQSxNQUFNSyxRQUFRTixLQUFLTixRQUFRLENBQ3hCYSxPQUFPLENBQUMsb0JBQW9CLElBQzVCQSxPQUFPLENBQUMsV0FBVyxJQUNuQkMsS0FBSyxDQUFDO1FBRVQsTUFBTUMsVUFBVUgsS0FBSyxDQUFDLEVBQUU7UUFDeEJOLEtBQUtTLE9BQU8sR0FBR0E7UUFDZkwsdUJBQ0VFLEtBQUssQ0FBQyxFQUFFLEtBQUssVUFBVyxNQUFHQSxNQUFNSSxLQUFLLENBQUMsR0FBR0MsSUFBSSxDQUFDLE9BQVM7UUFFMUQsc0RBQXNEO1FBQ3RELGtEQUFrRDtRQUNsRCxJQUFJaEIsUUFBUWlCLFNBQVMsS0FBSyxNQUFNO1lBQzlCWixLQUFLTixRQUFRLEdBQUdVO1FBQ2xCO0lBQ0Y7SUFFQSw0RUFBNEU7SUFDNUUseUJBQXlCO0lBQ3pCLElBQUlQLE1BQU07UUFDUixJQUFJZ0IsU0FBU2xCLFFBQVFtQixZQUFZLEdBQzdCbkIsUUFBUW1CLFlBQVksQ0FBQ0MsT0FBTyxDQUFDZixLQUFLTixRQUFRLElBQzFDc0IsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQmhCLEtBQUtOLFFBQVEsRUFBRUcsS0FBS29CLE9BQU87UUFFbkRqQixLQUFLa0IsTUFBTSxHQUFHTCxPQUFPTSxjQUFjO1lBQ25CTjtRQUFoQmIsS0FBS04sUUFBUSxHQUFHbUIsQ0FBQUEsbUJBQUFBLE9BQU9uQixRQUFBQSxLQUFRLE9BQWZtQixtQkFBbUJiLEtBQUtOLFFBQVE7UUFFaEQsSUFBSSxDQUFDbUIsT0FBT00sY0FBYyxJQUFJbkIsS0FBS1MsT0FBTyxFQUFFO1lBQzFDSSxTQUFTbEIsUUFBUW1CLFlBQVksR0FDekJuQixRQUFRbUIsWUFBWSxDQUFDQyxPQUFPLENBQUNYLHdCQUM3QlksQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQlosc0JBQXNCUCxLQUFLb0IsT0FBTztZQUUxRCxJQUFJSixPQUFPTSxjQUFjLEVBQUU7Z0JBQ3pCbkIsS0FBS2tCLE1BQU0sR0FBR0wsT0FBT00sY0FBYztZQUNyQztRQUNGO0lBQ0Y7SUFDQSxPQUFPbkI7QUFDVCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9nZXQtbmV4dC1wYXRobmFtZS1pbmZvLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vcm1hbGl6ZUxvY2FsZVBhdGggfSBmcm9tICcuLi8uLi9pMThuL25vcm1hbGl6ZS1sb2NhbGUtcGF0aCdcbmltcG9ydCB7IHJlbW92ZVBhdGhQcmVmaXggfSBmcm9tICcuL3JlbW92ZS1wYXRoLXByZWZpeCdcbmltcG9ydCB7IHBhdGhIYXNQcmVmaXggfSBmcm9tICcuL3BhdGgtaGFzLXByZWZpeCdcbmltcG9ydCB0eXBlIHsgSTE4TlByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL2xpYi9pMThuLXByb3ZpZGVyJ1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRQYXRobmFtZUluZm8ge1xuICAvKipcbiAgICogVGhlIGJhc2UgcGF0aCBpbiBjYXNlIHRoZSBwYXRobmFtZSBpbmNsdWRlZCBpdC5cbiAgICovXG4gIGJhc2VQYXRoPzogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgYnVpbGRJZCBmb3Igd2hlbiB0aGUgcGFyc2VkIFVSTCBpcyBhIGRhdGEgVVJMLiBQYXJzaW5nIGl0IGNhbiBiZVxuICAgKiBkaXNhYmxlZCB3aXRoIHRoZSBgcGFyc2VEYXRhYCBvcHRpb24uXG4gICAqL1xuICBidWlsZElkPzogc3RyaW5nXG4gIC8qKlxuICAgKiBJZiB0aGVyZSB3YXMgYSBsb2NhbGUgaW4gdGhlIHBhdGhuYW1lLCB0aGlzIHdpbGwgaG9sZCBpdHMgdmFsdWUuXG4gICAqL1xuICBsb2NhbGU/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBwcm9jZXNzZWQgcGF0aG5hbWUgd2l0aG91dCBhIGJhc2UgcGF0aCwgbG9jYWxlLCBvciBkYXRhIFVSTCBlbGVtZW50c1xuICAgKiB3aGVuIHBhcnNpbmcgaXQgaXMgZW5hYmxlZC5cbiAgICovXG4gIHBhdGhuYW1lOiBzdHJpbmdcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiB0ZWxsaW5nIGlmIHRoZSBwYXRobmFtZSBoYWQgYSB0cmFpbGluZ1NsYXNoLiBUaGlzIGNhbiBiZSBvbmx5XG4gICAqIHRydWUgaWYgdHJhaWxpbmdTbGFzaCBpcyBlbmFibGVkLlxuICAgKi9cbiAgdHJhaWxpbmdTbGFzaD86IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICAvKipcbiAgICogV2hlbiBwYXNzZWQgdG8gdHJ1ZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gcGFyc2UgTmV4dGpzIGRhdGEgVVJMcy5cbiAgICovXG4gIHBhcnNlRGF0YT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIEEgcGFydGlhbCBvZiB0aGUgTmV4dC5qcyBjb25maWd1cmF0aW9uIHRvIHBhcnNlIHRoZSBVUkwuXG4gICAqL1xuICBuZXh0Q29uZmlnPzoge1xuICAgIGJhc2VQYXRoPzogc3RyaW5nXG4gICAgaTE4bj86IHsgbG9jYWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdIH0gfCBudWxsXG4gICAgdHJhaWxpbmdTbGFzaD86IGJvb2xlYW5cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgdGhpcyBub3JtYWxpemVyIHdpbGwgYmUgdXNlZCB0byBkZXRlY3QgdGhlIGxvY2FsZSBpbnN0ZWFkIG9mXG4gICAqIHRoZSBkZWZhdWx0IGxvY2FsZSBkZXRlY3Rpb24uXG4gICAqL1xuICBpMThuUHJvdmlkZXI/OiBJMThOUHJvdmlkZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRQYXRobmFtZUluZm8oXG4gIHBhdGhuYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM6IE9wdGlvbnNcbik6IE5leHRQYXRobmFtZUluZm8ge1xuICBjb25zdCB7IGJhc2VQYXRoLCBpMThuLCB0cmFpbGluZ1NsYXNoIH0gPSBvcHRpb25zLm5leHRDb25maWcgPz8ge31cbiAgY29uc3QgaW5mbzogTmV4dFBhdGhuYW1lSW5mbyA9IHtcbiAgICBwYXRobmFtZSxcbiAgICB0cmFpbGluZ1NsYXNoOiBwYXRobmFtZSAhPT0gJy8nID8gcGF0aG5hbWUuZW5kc1dpdGgoJy8nKSA6IHRyYWlsaW5nU2xhc2gsXG4gIH1cblxuICBpZiAoYmFzZVBhdGggJiYgcGF0aEhhc1ByZWZpeChpbmZvLnBhdGhuYW1lLCBiYXNlUGF0aCkpIHtcbiAgICBpbmZvLnBhdGhuYW1lID0gcmVtb3ZlUGF0aFByZWZpeChpbmZvLnBhdGhuYW1lLCBiYXNlUGF0aClcbiAgICBpbmZvLmJhc2VQYXRoID0gYmFzZVBhdGhcbiAgfVxuICBsZXQgcGF0aG5hbWVOb0RhdGFQcmVmaXggPSBpbmZvLnBhdGhuYW1lXG5cbiAgaWYgKFxuICAgIGluZm8ucGF0aG5hbWUuc3RhcnRzV2l0aCgnL19uZXh0L2RhdGEvJykgJiZcbiAgICBpbmZvLnBhdGhuYW1lLmVuZHNXaXRoKCcuanNvbicpXG4gICkge1xuICAgIGNvbnN0IHBhdGhzID0gaW5mby5wYXRobmFtZVxuICAgICAgLnJlcGxhY2UoL15cXC9fbmV4dFxcL2RhdGFcXC8vLCAnJylcbiAgICAgIC5yZXBsYWNlKC9cXC5qc29uJC8sICcnKVxuICAgICAgLnNwbGl0KCcvJylcblxuICAgIGNvbnN0IGJ1aWxkSWQgPSBwYXRoc1swXVxuICAgIGluZm8uYnVpbGRJZCA9IGJ1aWxkSWRcbiAgICBwYXRobmFtZU5vRGF0YVByZWZpeCA9XG4gICAgICBwYXRoc1sxXSAhPT0gJ2luZGV4JyA/IGAvJHtwYXRocy5zbGljZSgxKS5qb2luKCcvJyl9YCA6ICcvJ1xuXG4gICAgLy8gdXBkYXRlIHBhdGhuYW1lIHdpdGggbm9ybWFsaXplZCBpZiBlbmFibGVkIGFsdGhvdWdoXG4gICAgLy8gd2UgdXNlIG5vcm1hbGl6ZWQgdG8gcG9wdWxhdGUgbG9jYWxlIGluZm8gc3RpbGxcbiAgICBpZiAob3B0aW9ucy5wYXJzZURhdGEgPT09IHRydWUpIHtcbiAgICAgIGluZm8ucGF0aG5hbWUgPSBwYXRobmFtZU5vRGF0YVByZWZpeFxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHByb3ZpZGVkLCB1c2UgdGhlIGxvY2FsZSByb3V0ZSBub3JtYWxpemVyIHRvIGRldGVjdCB0aGUgbG9jYWxlIGluc3RlYWRcbiAgLy8gb2YgdGhlIGZ1bmN0aW9uIGJlbG93LlxuICBpZiAoaTE4bikge1xuICAgIGxldCByZXN1bHQgPSBvcHRpb25zLmkxOG5Qcm92aWRlclxuICAgICAgPyBvcHRpb25zLmkxOG5Qcm92aWRlci5hbmFseXplKGluZm8ucGF0aG5hbWUpXG4gICAgICA6IG5vcm1hbGl6ZUxvY2FsZVBhdGgoaW5mby5wYXRobmFtZSwgaTE4bi5sb2NhbGVzKVxuXG4gICAgaW5mby5sb2NhbGUgPSByZXN1bHQuZGV0ZWN0ZWRMb2NhbGVcbiAgICBpbmZvLnBhdGhuYW1lID0gcmVzdWx0LnBhdGhuYW1lID8/IGluZm8ucGF0aG5hbWVcblxuICAgIGlmICghcmVzdWx0LmRldGVjdGVkTG9jYWxlICYmIGluZm8uYnVpbGRJZCkge1xuICAgICAgcmVzdWx0ID0gb3B0aW9ucy5pMThuUHJvdmlkZXJcbiAgICAgICAgPyBvcHRpb25zLmkxOG5Qcm92aWRlci5hbmFseXplKHBhdGhuYW1lTm9EYXRhUHJlZml4KVxuICAgICAgICA6IG5vcm1hbGl6ZUxvY2FsZVBhdGgocGF0aG5hbWVOb0RhdGFQcmVmaXgsIGkxOG4ubG9jYWxlcylcblxuICAgICAgaWYgKHJlc3VsdC5kZXRlY3RlZExvY2FsZSkge1xuICAgICAgICBpbmZvLmxvY2FsZSA9IHJlc3VsdC5kZXRlY3RlZExvY2FsZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gaW5mb1xufVxuIl0sIm5hbWVzIjpbImdldE5leHRQYXRobmFtZUluZm8iLCJwYXRobmFtZSIsIm9wdGlvbnMiLCJiYXNlUGF0aCIsImkxOG4iLCJ0cmFpbGluZ1NsYXNoIiwibmV4dENvbmZpZyIsImluZm8iLCJlbmRzV2l0aCIsInBhdGhIYXNQcmVmaXgiLCJyZW1vdmVQYXRoUHJlZml4IiwicGF0aG5hbWVOb0RhdGFQcmVmaXgiLCJzdGFydHNXaXRoIiwicGF0aHMiLCJyZXBsYWNlIiwic3BsaXQiLCJidWlsZElkIiwic2xpY2UiLCJqb2luIiwicGFyc2VEYXRhIiwicmVzdWx0IiwiaTE4blByb3ZpZGVyIiwiYW5hbHl6ZSIsIm5vcm1hbGl6ZUxvY2FsZVBhdGgiLCJsb2NhbGVzIiwibG9jYWxlIiwiZGV0ZWN0ZWRMb2NhbGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/html-bots.js":
/*!************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/html-bots.js ***!
\************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("// This regex contains the bots that we need to do a blocking render for and can't safely stream the response\n// due to how they parse the DOM. For example, they might explicitly check for metadata in the `head` tag, so we can't stream metadata tags after the `head` was sent.\n// Note: The pattern [\\w-]+-Google captures all Google crawlers with \"-Google\" suffix (e.g., Mediapartners-Google, AdsBot-Google, Storebot-Google)\n// as well as crawlers starting with \"Google-\" (e.g., Google-PageRenderer, Google-InspectionTool)\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HTML_LIMITED_BOT_UA_RE\", ({\n enumerable: true,\n get: function() {\n return HTML_LIMITED_BOT_UA_RE;\n }\n}));\nconst HTML_LIMITED_BOT_UA_RE = /[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight/i; //# sourceMappingURL=html-bots.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaHRtbC1ib3RzLmpzIiwibWFwcGluZ3MiOiJBQUFBLDZHQUE2RztBQUM3RyxzS0FBc0s7QUFDdEssa0pBQWtKO0FBQ2xKLGlHQUFpRzs7Ozs7MERBQ3BGQTs7O2VBQUFBOzs7QUFBTixNQUFNQSx5QkFDWCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9odG1sLWJvdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyByZWdleCBjb250YWlucyB0aGUgYm90cyB0aGF0IHdlIG5lZWQgdG8gZG8gYSBibG9ja2luZyByZW5kZXIgZm9yIGFuZCBjYW4ndCBzYWZlbHkgc3RyZWFtIHRoZSByZXNwb25zZVxuLy8gZHVlIHRvIGhvdyB0aGV5IHBhcnNlIHRoZSBET00uIEZvciBleGFtcGxlLCB0aGV5IG1pZ2h0IGV4cGxpY2l0bHkgY2hlY2sgZm9yIG1ldGFkYXRhIGluIHRoZSBgaGVhZGAgdGFnLCBzbyB3ZSBjYW4ndCBzdHJlYW0gbWV0YWRhdGEgdGFncyBhZnRlciB0aGUgYGhlYWRgIHdhcyBzZW50LlxuLy8gTm90ZTogVGhlIHBhdHRlcm4gW1xcdy1dKy1Hb29nbGUgY2FwdHVyZXMgYWxsIEdvb2dsZSBjcmF3bGVycyB3aXRoIFwiLUdvb2dsZVwiIHN1ZmZpeCAoZS5nLiwgTWVkaWFwYXJ0bmVycy1Hb29nbGUsIEFkc0JvdC1Hb29nbGUsIFN0b3JlYm90LUdvb2dsZSlcbi8vIGFzIHdlbGwgYXMgY3Jhd2xlcnMgc3RhcnRpbmcgd2l0aCBcIkdvb2dsZS1cIiAoZS5nLiwgR29vZ2xlLVBhZ2VSZW5kZXJlciwgR29vZ2xlLUluc3BlY3Rpb25Ub29sKVxuZXhwb3J0IGNvbnN0IEhUTUxfTElNSVRFRF9CT1RfVUFfUkUgPVxuICAvW1xcdy1dKy1Hb29nbGV8R29vZ2xlLVtcXHctXSt8Q2hyb21lLUxpZ2h0aG91c2V8U2x1cnB8RHVja0R1Y2tCb3R8YmFpZHVzcGlkZXJ8eWFuZGV4fHNvZ291fGJpdGx5Ym90fHR1bWJscnx2a1NoYXJlfHF1b3JhIGxpbmsgcHJldmlld3xyZWRkaXRib3R8aWFfYXJjaGl2ZXJ8QmluZ2JvdHxCaW5nUHJldmlld3xhcHBsZWJvdHxmYWNlYm9va2V4dGVybmFsaGl0fGZhY2Vib29rY2F0YWxvZ3xUd2l0dGVyYm90fExpbmtlZEluQm90fFNsYWNrYm90fERpc2NvcmRib3R8V2hhdHNBcHB8U2t5cGVVcmlQcmV2aWV3fFlldGl8Z29vZ2xld2VibGlnaHQvaVxuIl0sIm5hbWVzIjpbIkhUTUxfTElNSVRFRF9CT1RfVUFfUkUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/html-bots.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/index.js":
/*!********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/index.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 getSortedRouteObjects: function() {\n return _sortedroutes.getSortedRouteObjects;\n },\n getSortedRoutes: function() {\n return _sortedroutes.getSortedRoutes;\n },\n isDynamicRoute: function() {\n return _isdynamic.isDynamicRoute;\n }\n});\nconst _sortedroutes = __webpack_require__(/*! ./sorted-routes */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\");\nconst _isdynamic = __webpack_require__(/*! ./is-dynamic */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\"); //# sourceMappingURL=index.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQTBCQSxxQkFBcUI7ZUFBckJBLGNBQUFBLHFCQUFxQjs7SUFBdENDLGVBQWU7ZUFBZkEsY0FBQUEsZUFBZTs7SUFDZkMsY0FBYztlQUFkQSxXQUFBQSxjQUFjOzs7MENBRGdDO3VDQUN4QiIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBnZXRTb3J0ZWRSb3V0ZXMsIGdldFNvcnRlZFJvdXRlT2JqZWN0cyB9IGZyb20gJy4vc29ydGVkLXJvdXRlcydcbmV4cG9ydCB7IGlzRHluYW1pY1JvdXRlIH0gZnJvbSAnLi9pcy1keW5hbWljJ1xuIl0sIm5hbWVzIjpbImdldFNvcnRlZFJvdXRlT2JqZWN0cyIsImdldFNvcnRlZFJvdXRlcyIsImlzRHluYW1pY1JvdXRlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/index.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/interception-routes.js":
/*!**********************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/interception-routes.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 INTERCEPTION_ROUTE_MARKERS: function() {\n return INTERCEPTION_ROUTE_MARKERS;\n },\n extractInterceptionRouteInformation: function() {\n return extractInterceptionRouteInformation;\n },\n isInterceptionRouteAppPath: function() {\n return isInterceptionRouteAppPath;\n }\n});\nconst _apppaths = __webpack_require__(/*! ./app-paths */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/app-paths.js\");\nconst INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)'\n];\nfunction isInterceptionRouteAppPath(path) {\n // TODO-APP: add more serious validation\n return path.split('/').find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined;\n}\nfunction extractInterceptionRouteInformation(path) {\n let interceptingRoute, marker, interceptedRoute;\n for (const segment of path.split('/')){\n marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n if (marker) {\n ;\n [interceptingRoute, interceptedRoute] = path.split(marker, 2);\n break;\n }\n }\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw Object.defineProperty(new Error(\"Invalid interception route: \" + path + \". Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>\"), \"__NEXT_ERROR_CODE\", {\n value: \"E269\",\n enumerable: false,\n configurable: true\n });\n }\n interceptingRoute = (0, _apppaths.normalizeAppPath)(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n ;\n switch(marker){\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = \"/\" + interceptedRoute;\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute;\n }\n break;\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw Object.defineProperty(new Error(\"Invalid interception route: \" + path + \". Cannot use (..) marker at the root level, use (.) instead.\"), \"__NEXT_ERROR_CODE\", {\n value: \"E207\",\n enumerable: false,\n configurable: true\n });\n }\n interceptedRoute = interceptingRoute.split('/').slice(0, -1).concat(interceptedRoute).join('/');\n break;\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute;\n break;\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n const splitInterceptingRoute = interceptingRoute.split('/');\n if (splitInterceptingRoute.length <= 2) {\n throw Object.defineProperty(new Error(\"Invalid interception route: \" + path + \". Cannot use (..)(..) marker at the root level or one level up.\"), \"__NEXT_ERROR_CODE\", {\n value: \"E486\",\n enumerable: false,\n configurable: true\n });\n }\n interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join('/');\n break;\n default:\n throw Object.defineProperty(new Error('Invariant: unexpected marker'), \"__NEXT_ERROR_CODE\", {\n value: \"E112\",\n enumerable: false,\n configurable: true\n });\n }\n return {\n interceptingRoute,\n interceptedRoute\n };\n} //# sourceMappingURL=interception-routes.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJjZXB0aW9uLXJvdXRlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFHYUEsMEJBQTBCO2VBQTFCQTs7SUFrQkdDLG1DQUFtQztlQUFuQ0E7O0lBWEFDLDBCQUEwQjtlQUExQkE7OztzQ0FWaUI7QUFHMUIsTUFBTUYsNkJBQTZCO0lBQ3hDO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFTSxTQUFTRSwyQkFBMkJDLElBQVk7SUFDckQsd0NBQXdDO0lBQ3hDLE9BQ0VBLEtBQ0dDLEtBQUssQ0FBQyxLQUNOQyxJQUFJLENBQUMsQ0FBQ0MsVUFDTE4sMkJBQTJCSyxJQUFJLENBQUMsQ0FBQ0UsSUFBTUQsUUFBUUUsVUFBVSxDQUFDRCxTQUN0REU7QUFFWjtBQUVPLFNBQVNSLG9DQUFvQ0UsSUFBWTtJQUM5RCxJQUFJTyxtQkFDRkMsUUFDQUM7SUFFRixLQUFLLE1BQU1OLFdBQVdILEtBQUtDLEtBQUssQ0FBQyxLQUFNO1FBQ3JDTyxTQUFTWCwyQkFBMkJLLElBQUksQ0FBQyxDQUFDRSxJQUFNRCxRQUFRRSxVQUFVLENBQUNEO1FBQ25FLElBQUlJLFFBQVE7O1lBQ1QsQ0FBQ0QsbUJBQW1CRSxpQkFBaUIsR0FBR1QsS0FBS0MsS0FBSyxDQUFDTyxRQUFRO1lBQzVEO1FBQ0Y7SUFDRjtJQUVBLElBQUksQ0FBQ0QscUJBQXFCLENBQUNDLFVBQVUsQ0FBQ0Msa0JBQWtCO1FBQ3RELE1BQU0scUJBRUwsQ0FGSyxJQUFJQyxNQUNQLGlDQUE4QlYsT0FBSyxzRkFEaEM7bUJBQUE7d0JBQUE7MEJBQUE7UUFFTjtJQUNGO0lBRUFPLG9CQUFvQkksQ0FBQUEsR0FBQUEsVUFBQUEsZ0JBQUFBLEVBQWlCSixtQkFBbUIsaURBQWlEOztJQUV6RyxPQUFRQztRQUNOLEtBQUs7WUFDSCxvSUFBb0k7WUFDcEksSUFBSUQsc0JBQXNCLEtBQUs7Z0JBQzdCRSxtQkFBb0IsTUFBR0E7WUFDekIsT0FBTztnQkFDTEEsbUJBQW1CRixvQkFBb0IsTUFBTUU7WUFDL0M7WUFDQTtRQUNGLEtBQUs7WUFDSCx1SEFBdUg7WUFDdkgsSUFBSUYsc0JBQXNCLEtBQUs7Z0JBQzdCLE1BQU0scUJBRUwsQ0FGSyxJQUFJRyxNQUNQLGlDQUE4QlYsT0FBSyxpRUFEaEM7MkJBQUE7Z0NBQUE7a0NBQUE7Z0JBRU47WUFDRjtZQUNBUyxtQkFBbUJGLGtCQUNoQk4sS0FBSyxDQUFDLEtBQ05XLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FDVkMsTUFBTSxDQUFDSixrQkFDUEssSUFBSSxDQUFDO1lBQ1I7UUFDRixLQUFLO1lBQ0gsa0lBQWtJO1lBQ2xJTCxtQkFBbUIsTUFBTUE7WUFDekI7UUFDRixLQUFLO1lBQ0gsaUlBQWlJO1lBRWpJLE1BQU1NLHlCQUF5QlIsa0JBQWtCTixLQUFLLENBQUM7WUFDdkQsSUFBSWMsdUJBQXVCQyxNQUFNLElBQUksR0FBRztnQkFDdEMsTUFBTSxxQkFFTCxDQUZLLElBQUlOLE1BQ1AsaUNBQThCVixPQUFLLG9FQURoQzsyQkFBQTtnQ0FBQTtrQ0FBQTtnQkFFTjtZQUNGO1lBRUFTLG1CQUFtQk0sdUJBQ2hCSCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQ1ZDLE1BQU0sQ0FBQ0osa0JBQ1BLLElBQUksQ0FBQztZQUNSO1FBQ0Y7WUFDRSxNQUFNLHFCQUF5QyxDQUF6QyxJQUFJSixNQUFNLGlDQUFWO3VCQUFBOzRCQUFBOzhCQUFBO1lBQXdDO0lBQ2xEO0lBRUEsT0FBTztRQUFFSDtRQUFtQkU7SUFBaUI7QUFDL0MiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJjZXB0aW9uLXJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub3JtYWxpemVBcHBQYXRoIH0gZnJvbSAnLi9hcHAtcGF0aHMnXG5cbi8vIG9yZGVyIG1hdHRlcnMgaGVyZSwgdGhlIGZpcnN0IG1hdGNoIHdpbGwgYmUgdXNlZFxuZXhwb3J0IGNvbnN0IElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTID0gW1xuICAnKC4uKSguLiknLFxuICAnKC4pJyxcbiAgJyguLiknLFxuICAnKC4uLiknLFxuXSBhcyBjb25zdFxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIFRPRE8tQVBQOiBhZGQgbW9yZSBzZXJpb3VzIHZhbGlkYXRpb25cbiAgcmV0dXJuIChcbiAgICBwYXRoXG4gICAgICAuc3BsaXQoJy8nKVxuICAgICAgLmZpbmQoKHNlZ21lbnQpID0+XG4gICAgICAgIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLmZpbmQoKG0pID0+IHNlZ21lbnQuc3RhcnRzV2l0aChtKSlcbiAgICAgICkgIT09IHVuZGVmaW5lZFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbihwYXRoOiBzdHJpbmcpIHtcbiAgbGV0IGludGVyY2VwdGluZ1JvdXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgbWFya2VyOiAodHlwZW9mIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTKVtudW1iZXJdIHwgdW5kZWZpbmVkLFxuICAgIGludGVyY2VwdGVkUm91dGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBwYXRoLnNwbGl0KCcvJykpIHtcbiAgICBtYXJrZXIgPSBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUy5maW5kKChtKSA9PiBzZWdtZW50LnN0YXJ0c1dpdGgobSkpXG4gICAgaWYgKG1hcmtlcikge1xuICAgICAgO1tpbnRlcmNlcHRpbmdSb3V0ZSwgaW50ZXJjZXB0ZWRSb3V0ZV0gPSBwYXRoLnNwbGl0KG1hcmtlciwgMilcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKCFpbnRlcmNlcHRpbmdSb3V0ZSB8fCAhbWFya2VyIHx8ICFpbnRlcmNlcHRlZFJvdXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgaW50ZXJjZXB0aW9uIHJvdXRlOiAke3BhdGh9LiBNdXN0IGJlIGluIHRoZSBmb3JtYXQgLzxpbnRlcmNlcHRpbmcgcm91dGU+LyguLnwuLi58Li4pKC4uKS88aW50ZXJjZXB0ZWQgcm91dGU+YFxuICAgIClcbiAgfVxuXG4gIGludGVyY2VwdGluZ1JvdXRlID0gbm9ybWFsaXplQXBwUGF0aChpbnRlcmNlcHRpbmdSb3V0ZSkgLy8gbm9ybWFsaXplIHRoZSBwYXRoLCBlLmcuIC8oYmxvZykvZmVlZCAtPiAvZmVlZFxuXG4gIHN3aXRjaCAobWFya2VyKSB7XG4gICAgY2FzZSAnKC4pJzpcbiAgICAgIC8vICguKSBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgbWF0Y2ggd2l0aCBzaWJsaW5nIHJvdXRlcywgc28gd2UganVzdCBuZWVkIHRvIGFwcGVuZCB0aGUgaW50ZXJjZXB0ZWQgcm91dGUgdG8gdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgaWYgKGludGVyY2VwdGluZ1JvdXRlID09PSAnLycpIHtcbiAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IGAvJHtpbnRlcmNlcHRlZFJvdXRlfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVyY2VwdGVkUm91dGUgPSBpbnRlcmNlcHRpbmdSb3V0ZSArICcvJyArIGludGVyY2VwdGVkUm91dGVcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnKC4uKSc6XG4gICAgICAvLyAoLi4pIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBtYXRjaCBhdCBvbmUgbGV2ZWwgdXAsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgaWYgKGludGVyY2VwdGluZ1JvdXRlID09PSAnLycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gQ2Fubm90IHVzZSAoLi4pIG1hcmtlciBhdCB0aGUgcm9vdCBsZXZlbCwgdXNlICguKSBpbnN0ZWFkLmBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlXG4gICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgIC5zbGljZSgwLCAtMSlcbiAgICAgICAgLmNvbmNhdChpbnRlcmNlcHRlZFJvdXRlKVxuICAgICAgICAuam9pbignLycpXG4gICAgICBicmVha1xuICAgIGNhc2UgJyguLi4pJzpcbiAgICAgIC8vICguLi4pIHdpbGwgbWF0Y2ggdGhlIHJvdXRlIHNlZ21lbnQgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LCBzbyB3ZSBuZWVkIHRvIHVzZSB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gcHJlcGVuZCB0aGUgaW50ZXJjZXB0ZWQgcm91dGVcbiAgICAgIGludGVyY2VwdGVkUm91dGUgPSAnLycgKyBpbnRlcmNlcHRlZFJvdXRlXG4gICAgICBicmVha1xuICAgIGNhc2UgJyguLikoLi4pJzpcbiAgICAgIC8vICguLikoLi4pIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBtYXRjaCBhdCB0d28gbGV2ZWxzIHVwLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCB0d28gc2VnbWVudHMgb2YgdGhlIGludGVyY2VwdGluZyByb3V0ZVxuXG4gICAgICBjb25zdCBzcGxpdEludGVyY2VwdGluZ1JvdXRlID0gaW50ZXJjZXB0aW5nUm91dGUuc3BsaXQoJy8nKVxuICAgICAgaWYgKHNwbGl0SW50ZXJjZXB0aW5nUm91dGUubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gQ2Fubm90IHVzZSAoLi4pKC4uKSBtYXJrZXIgYXQgdGhlIHJvb3QgbGV2ZWwgb3Igb25lIGxldmVsIHVwLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpbnRlcmNlcHRlZFJvdXRlID0gc3BsaXRJbnRlcmNlcHRpbmdSb3V0ZVxuICAgICAgICAuc2xpY2UoMCwgLTIpXG4gICAgICAgIC5jb25jYXQoaW50ZXJjZXB0ZWRSb3V0ZSlcbiAgICAgICAgLmpvaW4oJy8nKVxuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhcmlhbnQ6IHVuZXhwZWN0ZWQgbWFya2VyJylcbiAgfVxuXG4gIHJldHVybiB7IGludGVyY2VwdGluZ1JvdXRlLCBpbnRlcmNlcHRlZFJvdXRlIH1cbn1cbiJdLCJuYW1lcyI6WyJJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUyIsImV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uIiwiaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgiLCJwYXRoIiwic3BsaXQiLCJmaW5kIiwic2VnbWVudCIsIm0iLCJzdGFydHNXaXRoIiwidW5kZWZpbmVkIiwiaW50ZXJjZXB0aW5nUm91dGUiLCJtYXJrZXIiLCJpbnRlcmNlcHRlZFJvdXRlIiwiRXJyb3IiLCJub3JtYWxpemVBcHBQYXRoIiwic2xpY2UiLCJjb25jYXQiLCJqb2luIiwic3BsaXRJbnRlcmNlcHRpbmdSb3V0ZSIsImxlbmd0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/interception-routes.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js":
/*!*****************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js ***!
\*****************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"interpolateAs\", ({\n enumerable: true,\n get: function() {\n return interpolateAs;\n }\n}));\nconst _routematcher = __webpack_require__(/*! ./route-matcher */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./route-regex */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nfunction interpolateAs(route, asPathname, query) {\n let interpolatedRoute = '';\n const dynamicRegex = (0, _routeregex.getRouteRegex)(route);\n const dynamicGroups = dynamicRegex.groups;\n const dynamicMatches = (asPathname !== route ? (0, _routematcher.getRouteMatcher)(dynamicRegex)(asPathname) : '') || // Fall back to reading the values from the href\n // TODO: should this take priority; also need to change in the router.\n query;\n interpolatedRoute = route;\n const params = Object.keys(dynamicGroups);\n if (!params.every((param)=>{\n let value = dynamicMatches[param] || '';\n const { repeat, optional } = dynamicGroups[param];\n // support single-level catch-all\n // TODO: more robust handling for user-error (passing `/`)\n let replaced = \"[\" + (repeat ? '...' : '') + param + \"]\";\n if (optional) {\n replaced = (!value ? '/' : '') + \"[\" + replaced + \"]\";\n }\n if (repeat && !Array.isArray(value)) value = [\n value\n ];\n return (optional || param in dynamicMatches) && // Interpolate group into data URL if present\n (interpolatedRoute = interpolatedRoute.replace(replaced, repeat ? value.map(// path delimiter escaped since they are being inserted\n // into the URL and we expect URL encoded segments\n // when parsing dynamic route params\n (segment)=>encodeURIComponent(segment)).join('/') : encodeURIComponent(value)) || '/');\n })) {\n interpolatedRoute = '' // did not satisfy all requirements\n ;\n // n.b. We ignore this error because we handle warning for this case in\n // development in the `<Link>` component directly.\n }\n return {\n params,\n result: interpolatedRoute\n };\n} //# sourceMappingURL=interpolate-as.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJwb2xhdGUtYXMuanMiLCJtYXBwaW5ncyI6Ijs7OztpREFLZ0JBOzs7ZUFBQUE7OzswQ0FIZ0I7d0NBQ0Y7QUFFdkIsU0FBU0EsY0FDZEMsS0FBYSxFQUNiQyxVQUFrQixFQUNsQkMsS0FBcUI7SUFFckIsSUFBSUMsb0JBQW9CO0lBRXhCLE1BQU1DLGVBQWVDLENBQUFBLEdBQUFBLFlBQUFBLGFBQUFBLEVBQWNMO0lBQ25DLE1BQU1NLGdCQUFnQkYsYUFBYUcsTUFBTTtJQUN6QyxNQUFNQyxpQkFFSixDQUFDUCxlQUFlRCxRQUFRUyxDQUFBQSxHQUFBQSxjQUFBQSxVQUQ0QixLQUM1QkEsRUFBZ0JMLGNBQWNILGNBQWMsR0FBQyxJQUNyRSxnREFBZ0Q7SUFDaEQsc0VBQXNFO0lBQ3RFQztJQUVGQyxvQkFBb0JIO0lBQ3BCLE1BQU1VLFNBQVNDLE9BQU9DLElBQUksQ0FBQ047SUFFM0IsSUFDRSxDQUFDSSxPQUFPRyxLQUFLLENBQUMsQ0FBQ0M7UUFDYixJQUFJQyxRQUFRUCxjQUFjLENBQUNNLE1BQU0sSUFBSTtRQUNyQyxNQUFNLEVBQUVFLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdYLGFBQWEsQ0FBQ1EsTUFBTTtRQUVqRCxpQ0FBaUM7UUFDakMsMERBQTBEO1FBQzFELElBQUlJLFdBQVksTUFBR0YsQ0FBQUEsU0FBUyxRQUFRLEdBQUMsR0FBSUYsUUFBTTtRQUMvQyxJQUFJRyxVQUFVO1lBQ1pDLFdBQWMsRUFBQ0gsUUFBUSxNQUFNLEdBQUMsR0FBRSxNQUFHRyxXQUFTO1FBQzlDO1FBQ0EsSUFBSUYsVUFBVSxDQUFDRyxNQUFNQyxPQUFPLENBQUNMLFFBQVFBLFFBQVE7WUFBQ0E7U0FBTTtRQUVwRCxPQUNHRSxDQUFBQSxZQUFZSCxTQUFTTixjQUFBQSxDQUFhLElBQ25DLDZDQUE2QztTQUM1Q0wsb0JBQ0NBLGtCQUFtQmtCLE9BQU8sQ0FDeEJILFVBQ0FGLFNBQ0tELE1BQ0VPLEdBQUcsQ0FDRix1REFBdUQ7UUFFdkQsa0RBQWtEO1FBQ2xELG9DQUFvQztRQUNwQyxDQUFDQyxVQUFZQyxtQkFBbUJELFVBRWpDRSxJQUFJLENBQUMsT0FDUkQsbUJBQW1CVCxXQUNwQixJQUFFO0lBRWIsSUFDQTtRQUNBWixvQkFBb0IsR0FBRyxtQ0FBbUM7O0lBRTFELHVFQUF1RTtJQUN2RSxrREFBa0Q7SUFDcEQ7SUFDQSxPQUFPO1FBQ0xPO1FBQ0FnQixRQUFRdkI7SUFDVjtBQUNGIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2ludGVycG9sYXRlLWFzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcblxuaW1wb3J0IHsgZ2V0Um91dGVNYXRjaGVyIH0gZnJvbSAnLi9yb3V0ZS1tYXRjaGVyJ1xuaW1wb3J0IHsgZ2V0Um91dGVSZWdleCB9IGZyb20gJy4vcm91dGUtcmVnZXgnXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnBvbGF0ZUFzKFxuICByb3V0ZTogc3RyaW5nLFxuICBhc1BhdGhuYW1lOiBzdHJpbmcsXG4gIHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeVxuKSB7XG4gIGxldCBpbnRlcnBvbGF0ZWRSb3V0ZSA9ICcnXG5cbiAgY29uc3QgZHluYW1pY1JlZ2V4ID0gZ2V0Um91dGVSZWdleChyb3V0ZSlcbiAgY29uc3QgZHluYW1pY0dyb3VwcyA9IGR5bmFtaWNSZWdleC5ncm91cHNcbiAgY29uc3QgZHluYW1pY01hdGNoZXMgPVxuICAgIC8vIFRyeSB0byBtYXRjaCB0aGUgZHluYW1pYyByb3V0ZSBhZ2FpbnN0IHRoZSBhc1BhdGhcbiAgICAoYXNQYXRobmFtZSAhPT0gcm91dGUgPyBnZXRSb3V0ZU1hdGNoZXIoZHluYW1pY1JlZ2V4KShhc1BhdGhuYW1lKSA6ICcnKSB8fFxuICAgIC8vIEZhbGwgYmFjayB0byByZWFkaW5nIHRoZSB2YWx1ZXMgZnJvbSB0aGUgaHJlZlxuICAgIC8vIFRPRE86IHNob3VsZCB0aGlzIHRha2UgcHJpb3JpdHk7IGFsc28gbmVlZCB0byBjaGFuZ2UgaW4gdGhlIHJvdXRlci5cbiAgICBxdWVyeVxuXG4gIGludGVycG9sYXRlZFJvdXRlID0gcm91dGVcbiAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmtleXMoZHluYW1pY0dyb3VwcylcblxuICBpZiAoXG4gICAgIXBhcmFtcy5ldmVyeSgocGFyYW0pID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGR5bmFtaWNNYXRjaGVzW3BhcmFtXSB8fCAnJ1xuICAgICAgY29uc3QgeyByZXBlYXQsIG9wdGlvbmFsIH0gPSBkeW5hbWljR3JvdXBzW3BhcmFtXVxuXG4gICAgICAvLyBzdXBwb3J0IHNpbmdsZS1sZXZlbCBjYXRjaC1hbGxcbiAgICAgIC8vIFRPRE86IG1vcmUgcm9idXN0IGhhbmRsaW5nIGZvciB1c2VyLWVycm9yIChwYXNzaW5nIGAvYClcbiAgICAgIGxldCByZXBsYWNlZCA9IGBbJHtyZXBlYXQgPyAnLi4uJyA6ICcnfSR7cGFyYW19XWBcbiAgICAgIGlmIChvcHRpb25hbCkge1xuICAgICAgICByZXBsYWNlZCA9IGAkeyF2YWx1ZSA/ICcvJyA6ICcnfVske3JlcGxhY2VkfV1gXG4gICAgICB9XG4gICAgICBpZiAocmVwZWF0ICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUgPSBbdmFsdWVdXG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIChvcHRpb25hbCB8fCBwYXJhbSBpbiBkeW5hbWljTWF0Y2hlcykgJiZcbiAgICAgICAgLy8gSW50ZXJwb2xhdGUgZ3JvdXAgaW50byBkYXRhIFVSTCBpZiBwcmVzZW50XG4gICAgICAgIChpbnRlcnBvbGF0ZWRSb3V0ZSA9XG4gICAgICAgICAgaW50ZXJwb2xhdGVkUm91dGUhLnJlcGxhY2UoXG4gICAgICAgICAgICByZXBsYWNlZCxcbiAgICAgICAgICAgIHJlcGVhdFxuICAgICAgICAgICAgICA/ICh2YWx1ZSBhcyBzdHJpbmdbXSlcbiAgICAgICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZXNlIHZhbHVlcyBzaG91bGQgYmUgZnVsbHkgZW5jb2RlZCBpbnN0ZWFkIG9mIGp1c3RcbiAgICAgICAgICAgICAgICAgICAgLy8gcGF0aCBkZWxpbWl0ZXIgZXNjYXBlZCBzaW5jZSB0aGV5IGFyZSBiZWluZyBpbnNlcnRlZFxuICAgICAgICAgICAgICAgICAgICAvLyBpbnRvIHRoZSBVUkwgYW5kIHdlIGV4cGVjdCBVUkwgZW5jb2RlZCBzZWdtZW50c1xuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHBhcnNpbmcgZHluYW1pYyByb3V0ZSBwYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQpID0+IGVuY29kZVVSSUNvbXBvbmVudChzZWdtZW50KVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLmpvaW4oJy8nKVxuICAgICAgICAgICAgICA6IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSBhcyBzdHJpbmcpXG4gICAgICAgICAgKSB8fCAnLycpXG4gICAgICApXG4gICAgfSlcbiAgKSB7XG4gICAgaW50ZXJwb2xhdGVkUm91dGUgPSAnJyAvLyBkaWQgbm90IHNhdGlzZnkgYWxsIHJlcXVpcmVtZW50c1xuXG4gICAgLy8gbi5iLiBXZSBpZ25vcmUgdGhpcyBlcnJvciBiZWNhdXNlIHdlIGhhbmRsZSB3YXJuaW5nIGZvciB0aGlzIGNhc2UgaW5cbiAgICAvLyBkZXZlbG9wbWVudCBpbiB0aGUgYDxMaW5rPmAgY29tcG9uZW50IGRpcmVjdGx5LlxuICB9XG4gIHJldHVybiB7XG4gICAgcGFyYW1zLFxuICAgIHJlc3VsdDogaW50ZXJwb2xhdGVkUm91dGUsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJpbnRlcnBvbGF0ZUFzIiwicm91dGUiLCJhc1BhdGhuYW1lIiwicXVlcnkiLCJpbnRlcnBvbGF0ZWRSb3V0ZSIsImR5bmFtaWNSZWdleCIsImdldFJvdXRlUmVnZXgiLCJkeW5hbWljR3JvdXBzIiwiZ3JvdXBzIiwiZHluYW1pY01hdGNoZXMiLCJnZXRSb3V0ZU1hdGNoZXIiLCJwYXJhbXMiLCJPYmplY3QiLCJrZXlzIiwiZXZlcnkiLCJwYXJhbSIsInZhbHVlIiwicmVwZWF0Iiwib3B0aW9uYWwiLCJyZXBsYWNlZCIsIkFycmF5IiwiaXNBcnJheSIsInJlcGxhY2UiLCJtYXAiLCJzZWdtZW50IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsInJlc3VsdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-bot.js":
/*!*********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-bot.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 HTML_LIMITED_BOT_UA_RE: function() {\n return _htmlbots.HTML_LIMITED_BOT_UA_RE;\n },\n HTML_LIMITED_BOT_UA_RE_STRING: function() {\n return HTML_LIMITED_BOT_UA_RE_STRING;\n },\n getBotType: function() {\n return getBotType;\n },\n isBot: function() {\n return isBot;\n }\n});\nconst _htmlbots = __webpack_require__(/*! ./html-bots */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/html-bots.js\");\n// Bot crawler that will spin up a headless browser and execute JS.\n// Only the main Googlebot search crawler executes JavaScript, not other Google crawlers.\n// x-ref: https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers\n// This regex specifically matches \"Googlebot\" but NOT \"Mediapartners-Google\", \"AdsBot-Google\", etc.\nconst HEADLESS_BROWSER_BOT_UA_RE = /Googlebot(?!-)|Googlebot$/i;\nconst HTML_LIMITED_BOT_UA_RE_STRING = _htmlbots.HTML_LIMITED_BOT_UA_RE.source;\nfunction isDomBotUA(userAgent) {\n return HEADLESS_BROWSER_BOT_UA_RE.test(userAgent);\n}\nfunction isHtmlLimitedBotUA(userAgent) {\n return _htmlbots.HTML_LIMITED_BOT_UA_RE.test(userAgent);\n}\nfunction isBot(userAgent) {\n return isDomBotUA(userAgent) || isHtmlLimitedBotUA(userAgent);\n}\nfunction getBotType(userAgent) {\n if (isDomBotUA(userAgent)) {\n return 'dom';\n }\n if (isHtmlLimitedBotUA(userAgent)) {\n return 'html';\n }\n return undefined;\n} //# sourceMappingURL=is-bot.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtYm90LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQVVTQSxzQkFBc0I7ZUFBdEJBLFVBQUFBLHNCQUFzQjs7SUFGbEJDLDZCQUE2QjtlQUE3QkE7O0lBZ0JHQyxVQUFVO2VBQVZBOztJQUpBQyxLQUFLO2VBQUxBOzs7c0NBcEJ1QjtBQUV2QyxtRUFBbUU7QUFDbkUseUZBQXlGO0FBQ3pGLDRGQUE0RjtBQUM1RixvR0FBb0c7QUFDcEcsTUFBTUMsNkJBQTZCO0FBRTVCLE1BQU1ILGdDQUFnQ0QsVUFBQUEsc0JBQXNCLENBQUNLLE1BQU07QUFJMUUsU0FBU0MsV0FBV0MsU0FBaUI7SUFDbkMsT0FBT0gsMkJBQTJCSSxJQUFJLENBQUNEO0FBQ3pDO0FBRUEsU0FBU0UsbUJBQW1CRixTQUFpQjtJQUMzQyxPQUFPUCxVQUFBQSxzQkFBc0IsQ0FBQ1EsSUFBSSxDQUFDRDtBQUNyQztBQUVPLFNBQVNKLE1BQU1JLFNBQWlCO0lBQ3JDLE9BQU9ELFdBQVdDLGNBQWNFLG1CQUFtQkY7QUFDckQ7QUFFTyxTQUFTTCxXQUFXSyxTQUFpQjtJQUMxQyxJQUFJRCxXQUFXQyxZQUFZO1FBQ3pCLE9BQU87SUFDVDtJQUNBLElBQUlFLG1CQUFtQkYsWUFBWTtRQUNqQyxPQUFPO0lBQ1Q7SUFDQSxPQUFPRztBQUNUIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWJvdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIVE1MX0xJTUlURURfQk9UX1VBX1JFIH0gZnJvbSAnLi9odG1sLWJvdHMnXG5cbi8vIEJvdCBjcmF3bGVyIHRoYXQgd2lsbCBzcGluIHVwIGEgaGVhZGxlc3MgYnJvd3NlciBhbmQgZXhlY3V0ZSBKUy5cbi8vIE9ubHkgdGhlIG1haW4gR29vZ2xlYm90IHNlYXJjaCBjcmF3bGVyIGV4ZWN1dGVzIEphdmFTY3JpcHQsIG5vdCBvdGhlciBHb29nbGUgY3Jhd2xlcnMuXG4vLyB4LXJlZjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vc2VhcmNoL2RvY3MvY3Jhd2xpbmctaW5kZXhpbmcvZ29vZ2xlLWNvbW1vbi1jcmF3bGVyc1xuLy8gVGhpcyByZWdleCBzcGVjaWZpY2FsbHkgbWF0Y2hlcyBcIkdvb2dsZWJvdFwiIGJ1dCBOT1QgXCJNZWRpYXBhcnRuZXJzLUdvb2dsZVwiLCBcIkFkc0JvdC1Hb29nbGVcIiwgZXRjLlxuY29uc3QgSEVBRExFU1NfQlJPV1NFUl9CT1RfVUFfUkUgPSAvR29vZ2xlYm90KD8hLSl8R29vZ2xlYm90JC9pXG5cbmV4cG9ydCBjb25zdCBIVE1MX0xJTUlURURfQk9UX1VBX1JFX1NUUklORyA9IEhUTUxfTElNSVRFRF9CT1RfVUFfUkUuc291cmNlXG5cbmV4cG9ydCB7IEhUTUxfTElNSVRFRF9CT1RfVUFfUkUgfVxuXG5mdW5jdGlvbiBpc0RvbUJvdFVBKHVzZXJBZ2VudDogc3RyaW5nKSB7XG4gIHJldHVybiBIRUFETEVTU19CUk9XU0VSX0JPVF9VQV9SRS50ZXN0KHVzZXJBZ2VudClcbn1cblxuZnVuY3Rpb24gaXNIdG1sTGltaXRlZEJvdFVBKHVzZXJBZ2VudDogc3RyaW5nKSB7XG4gIHJldHVybiBIVE1MX0xJTUlURURfQk9UX1VBX1JFLnRlc3QodXNlckFnZW50KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb3QodXNlckFnZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzRG9tQm90VUEodXNlckFnZW50KSB8fCBpc0h0bWxMaW1pdGVkQm90VUEodXNlckFnZW50KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm90VHlwZSh1c2VyQWdlbnQ6IHN0cmluZyk6ICdkb20nIHwgJ2h0bWwnIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGlzRG9tQm90VUEodXNlckFnZW50KSkge1xuICAgIHJldHVybiAnZG9tJ1xuICB9XG4gIGlmIChpc0h0bWxMaW1pdGVkQm90VUEodXNlckFnZW50KSkge1xuICAgIHJldHVybiAnaHRtbCdcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG4iXSwibmFtZXMiOlsiSFRNTF9MSU1JVEVEX0JPVF9VQV9SRSIsIkhUTUxfTElNSVRFRF9CT1RfVUFfUkVfU1RSSU5HIiwiZ2V0Qm90VHlwZSIsImlzQm90IiwiSEVBRExFU1NfQlJPV1NFUl9CT1RfVUFfUkUiLCJzb3VyY2UiLCJpc0RvbUJvdFVBIiwidXNlckFnZW50IiwidGVzdCIsImlzSHRtbExpbWl0ZWRCb3RVQSIsInVuZGVmaW5lZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-bot.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js":
/*!*************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js ***!
\*************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isDynamicRoute\", ({\n enumerable: true,\n get: function() {\n return isDynamicRoute;\n }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ./interception-routes */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/interception-routes.js\");\n// Identify /.*[param].*/ in route string\nconst TEST_ROUTE = /\\/[^/]*\\[[^/]+\\][^/]*(?=\\/|$)/;\n// Identify /[param]/ in route string\nconst TEST_STRICT_ROUTE = /\\/\\[[^/]+\\](?=\\/|$)/;\nfunction isDynamicRoute(route, strict) {\n if (strict === void 0) strict = true;\n if ((0, _interceptionroutes.isInterceptionRouteAppPath)(route)) {\n route = (0, _interceptionroutes.extractInterceptionRouteInformation)(route).interceptedRoute;\n }\n if (strict) {\n return TEST_STRICT_ROUTE.test(route);\n }\n return TEST_ROUTE.test(route);\n} //# sourceMappingURL=is-dynamic.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYy5qcyIsIm1hcHBpbmdzIjoiOzs7O2tEQWtCZ0JBOzs7ZUFBQUE7OztnREFmVDtBQUVQLHlDQUF5QztBQUN6QyxNQUFNQyxhQUFhO0FBRW5CLHFDQUFxQztBQUNyQyxNQUFNQyxvQkFBb0I7QUFTbkIsU0FBU0YsZUFBZUcsS0FBYSxFQUFFQyxNQUFzQjtJQUF0QkEsSUFBQUEsV0FBQUEsS0FBQUEsR0FBQUEsU0FBa0I7SUFDOUQsSUFBSUMsQ0FBQUEsR0FBQUEsb0JBQUFBLDBCQUFBQSxFQUEyQkYsUUFBUTtRQUNyQ0EsUUFBUUcsQ0FBQUEsR0FBQUEsb0JBQUFBLG1DQUFBQSxFQUFvQ0gsT0FBT0ksZ0JBQWdCO0lBQ3JFO0lBRUEsSUFBSUgsUUFBUTtRQUNWLE9BQU9GLGtCQUFrQk0sSUFBSSxDQUFDTDtJQUNoQztJQUVBLE9BQU9GLFdBQVdPLElBQUksQ0FBQ0w7QUFDekIiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbixcbiAgaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgsXG59IGZyb20gJy4vaW50ZXJjZXB0aW9uLXJvdXRlcydcblxuLy8gSWRlbnRpZnkgLy4qW3BhcmFtXS4qLyBpbiByb3V0ZSBzdHJpbmdcbmNvbnN0IFRFU1RfUk9VVEUgPSAvXFwvW14vXSpcXFtbXi9dK1xcXVteL10qKD89XFwvfCQpL1xuXG4vLyBJZGVudGlmeSAvW3BhcmFtXS8gaW4gcm91dGUgc3RyaW5nXG5jb25zdCBURVNUX1NUUklDVF9ST1VURSA9IC9cXC9cXFtbXi9dK1xcXSg/PVxcL3wkKS9cblxuLyoqXG4gKiBDaGVjayBpZiBhIHJvdXRlIGlzIGR5bmFtaWMuXG4gKlxuICogQHBhcmFtIHJvdXRlIC0gVGhlIHJvdXRlIHRvIGNoZWNrLlxuICogQHBhcmFtIHN0cmljdCAtIFdoZXRoZXIgdG8gdXNlIHN0cmljdCBtb2RlIHdoaWNoIHByb2hpYml0cyBzZWdtZW50cyB3aXRoIHByZWZpeGVzL3N1ZmZpeGVzIChkZWZhdWx0OiB0cnVlKS5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJvdXRlIGlzIGR5bmFtaWMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0R5bmFtaWNSb3V0ZShyb3V0ZTogc3RyaW5nLCBzdHJpY3Q6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XG4gIGlmIChpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aChyb3V0ZSkpIHtcbiAgICByb3V0ZSA9IGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uKHJvdXRlKS5pbnRlcmNlcHRlZFJvdXRlXG4gIH1cblxuICBpZiAoc3RyaWN0KSB7XG4gICAgcmV0dXJuIFRFU1RfU1RSSUNUX1JPVVRFLnRlc3Qocm91dGUpXG4gIH1cblxuICByZXR1cm4gVEVTVF9ST1VURS50ZXN0KHJvdXRlKVxufVxuIl0sIm5hbWVzIjpbImlzRHluYW1pY1JvdXRlIiwiVEVTVF9ST1VURSIsIlRFU1RfU1RSSUNUX1JPVVRFIiwicm91dGUiLCJzdHJpY3QiLCJpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aCIsImV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uIiwiaW50ZXJjZXB0ZWRSb3V0ZSIsInRlc3QiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-local-url.js":
/*!***************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.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 */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../../client/has-base-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsLmpzIiwibWFwcGluZ3MiOiI7Ozs7OENBTWdCQTs7O2VBQUFBOzs7bUNBTmlDO3lDQUNyQjtBQUtyQixTQUFTQSxXQUFXQyxHQUFXO0lBQ3BDLGdFQUFnRTtJQUNoRSxJQUFJLENBQUNDLENBQUFBLEdBQUFBLE9BQUFBLGFBQUFBLEVBQWNELE1BQU0sT0FBTztJQUNoQyxJQUFJO1FBQ0YsNERBQTREO1FBQzVELE1BQU1FLGlCQUFpQkMsQ0FBQUEsR0FBQUEsT0FBQUEsaUJBQUFBO1FBQ3ZCLE1BQU1DLFdBQVcsSUFBSUMsSUFBSUwsS0FBS0U7UUFDOUIsT0FBT0UsU0FBU0UsTUFBTSxLQUFLSixrQkFBa0JLLENBQUFBLEdBQUFBLGFBQUFBLFdBQUFBLEVBQVlILFNBQVNJLFFBQVE7SUFDNUUsRUFBRSxPQUFPQyxHQUFHO1FBQ1YsT0FBTztJQUNUO0FBQ0YiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQWJzb2x1dGVVcmwsIGdldExvY2F0aW9uT3JpZ2luIH0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBoYXNCYXNlUGF0aCB9IGZyb20gJy4uLy4uLy4uLy4uL2NsaWVudC9oYXMtYmFzZS1wYXRoJ1xuXG4vKipcbiAqIERldGVjdHMgd2hldGhlciBhIGdpdmVuIHVybCBpcyByb3V0YWJsZSBieSB0aGUgTmV4dC5qcyByb3V0ZXIgKGJyb3dzZXIgb25seSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvY2FsVVJMKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIHByZXZlbnQgYSBoeWRyYXRpb24gbWlzbWF0Y2ggb24gaHJlZiBmb3IgdXJsIHdpdGggYW5jaG9yIHJlZnNcbiAgaWYgKCFpc0Fic29sdXRlVXJsKHVybCkpIHJldHVybiB0cnVlXG4gIHRyeSB7XG4gICAgLy8gYWJzb2x1dGUgdXJscyBjYW4gYmUgbG9jYWwgaWYgdGhleSBhcmUgb24gdGhlIHNhbWUgb3JpZ2luXG4gICAgY29uc3QgbG9jYXRpb25PcmlnaW4gPSBnZXRMb2NhdGlvbk9yaWdpbigpXG4gICAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgVVJMKHVybCwgbG9jYXRpb25PcmlnaW4pXG4gICAgcmV0dXJuIHJlc29sdmVkLm9yaWdpbiA9PT0gbG9jYXRpb25PcmlnaW4gJiYgaGFzQmFzZVBhdGgocmVzb2x2ZWQucGF0aG5hbWUpXG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIl0sIm5hbWVzIjpbImlzTG9jYWxVUkwiLCJ1cmwiLCJpc0Fic29sdXRlVXJsIiwibG9jYXRpb25PcmlnaW4iLCJnZXRMb2NhdGlvbk9yaWdpbiIsInJlc29sdmVkIiwiVVJMIiwib3JpZ2luIiwiaGFzQmFzZVBhdGgiLCJwYXRobmFtZSIsIl8iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/is-local-url.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/omit.js":
/*!*******************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/omit.js ***!
\*******************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"omit\", ({\n enumerable: true,\n get: function() {\n return omit;\n }\n}));\nfunction omit(object, keys) {\n const omitted = {};\n Object.keys(object).forEach((key)=>{\n if (!keys.includes(key)) {\n omitted[key] = object[key];\n }\n });\n return omitted;\n} //# sourceMappingURL=omit.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvb21pdC5qcyIsIm1hcHBpbmdzIjoiOzs7O3dDQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0EsS0FDZEMsTUFBUyxFQUNUQyxJQUFTO0lBRVQsTUFBTUMsVUFBc0MsQ0FBQztJQUM3Q0MsT0FBT0YsSUFBSSxDQUFDRCxRQUFRSSxPQUFPLENBQUMsQ0FBQ0M7UUFDM0IsSUFBSSxDQUFDSixLQUFLSyxRQUFRLENBQUNELE1BQVc7WUFDNUJILE9BQU8sQ0FBQ0csSUFBSSxHQUFHTCxNQUFNLENBQUNLLElBQUk7UUFDNUI7SUFDRjtJQUNBLE9BQU9IO0FBQ1QiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvb21pdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gb21pdDxUIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0sIEsgZXh0ZW5kcyBrZXlvZiBUPihcbiAgb2JqZWN0OiBULFxuICBrZXlzOiBLW11cbik6IE9taXQ8VCwgSz4ge1xuICBjb25zdCBvbWl0dGVkOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHt9XG4gIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKCFrZXlzLmluY2x1ZGVzKGtleSBhcyBLKSkge1xuICAgICAgb21pdHRlZFtrZXldID0gb2JqZWN0W2tleV1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBvbWl0dGVkIGFzIE9taXQ8VCwgSz5cbn1cbiJdLCJuYW1lcyI6WyJvbWl0Iiwib2JqZWN0Iiwia2V5cyIsIm9taXR0ZWQiLCJPYmplY3QiLCJmb3JFYWNoIiwia2V5IiwiaW5jbHVkZXMiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/omit.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js":
/*!*************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js ***!
\*************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parsePath\", ({\n enumerable: true,\n get: function() {\n return parsePath;\n }\n}));\nfunction parsePath(path) {\n const hashIndex = path.indexOf('#');\n const queryIndex = path.indexOf('?');\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex);\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : ''\n };\n }\n return {\n pathname: path,\n query: '',\n hash: ''\n };\n} //# sourceMappingURL=parse-path.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcGF0aC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7OztDQUlDOzs7OzZDQUNlQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxVQUFVQyxJQUFZO0lBQ3BDLE1BQU1DLFlBQVlELEtBQUtFLE9BQU8sQ0FBQztJQUMvQixNQUFNQyxhQUFhSCxLQUFLRSxPQUFPLENBQUM7SUFDaEMsTUFBTUUsV0FBV0QsYUFBYSxDQUFDLEtBQU1GLENBQUFBLFlBQVksS0FBS0UsYUFBYUYsU0FBQUEsQ0FBUTtJQUUzRSxJQUFJRyxZQUFZSCxZQUFZLENBQUMsR0FBRztRQUM5QixPQUFPO1lBQ0xJLFVBQVVMLEtBQUtNLFNBQVMsQ0FBQyxHQUFHRixXQUFXRCxhQUFhRjtZQUNwRE0sT0FBT0gsV0FDSEosS0FBS00sU0FBUyxDQUFDSCxZQUFZRixZQUFZLENBQUMsSUFBSUEsWUFBWU8sYUFDeEQ7WUFDSkMsTUFBTVIsWUFBWSxDQUFDLElBQUlELEtBQUtVLEtBQUssQ0FBQ1QsYUFBYTtRQUNqRDtJQUNGO0lBRUEsT0FBTztRQUFFSSxVQUFVTDtRQUFNTyxPQUFPO1FBQUlFLE1BQU07SUFBRztBQUMvQyIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2l2ZW4gYSBwYXRoIHRoaXMgZnVuY3Rpb24gd2lsbCBmaW5kIHRoZSBwYXRobmFtZSwgcXVlcnkgYW5kIGhhc2ggYW5kIHJldHVyblxuICogdGhlbS4gVGhpcyBpcyB1c2VmdWwgdG8gcGFyc2UgZnVsbCBwYXRocyBvbiB0aGUgY2xpZW50IHNpZGUuXG4gKiBAcGFyYW0gcGF0aCBBIHBhdGggdG8gcGFyc2UgZS5nLiAvZm9vL2Jhcj9pZD0xI2hhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgaGFzaEluZGV4ID0gcGF0aC5pbmRleE9mKCcjJylcbiAgY29uc3QgcXVlcnlJbmRleCA9IHBhdGguaW5kZXhPZignPycpXG4gIGNvbnN0IGhhc1F1ZXJ5ID0gcXVlcnlJbmRleCA+IC0xICYmIChoYXNoSW5kZXggPCAwIHx8IHF1ZXJ5SW5kZXggPCBoYXNoSW5kZXgpXG5cbiAgaWYgKGhhc1F1ZXJ5IHx8IGhhc2hJbmRleCA+IC0xKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhuYW1lOiBwYXRoLnN1YnN0cmluZygwLCBoYXNRdWVyeSA/IHF1ZXJ5SW5kZXggOiBoYXNoSW5kZXgpLFxuICAgICAgcXVlcnk6IGhhc1F1ZXJ5XG4gICAgICAgID8gcGF0aC5zdWJzdHJpbmcocXVlcnlJbmRleCwgaGFzaEluZGV4ID4gLTEgPyBoYXNoSW5kZXggOiB1bmRlZmluZWQpXG4gICAgICAgIDogJycsXG4gICAgICBoYXNoOiBoYXNoSW5kZXggPiAtMSA/IHBhdGguc2xpY2UoaGFzaEluZGV4KSA6ICcnLFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IHBhdGhuYW1lOiBwYXRoLCBxdWVyeTogJycsIGhhc2g6ICcnIH1cbn1cbiJdLCJuYW1lcyI6WyJwYXJzZVBhdGgiLCJwYXRoIiwiaGFzaEluZGV4IiwiaW5kZXhPZiIsInF1ZXJ5SW5kZXgiLCJoYXNRdWVyeSIsInBhdGhuYW1lIiwic3Vic3RyaW5nIiwicXVlcnkiLCJ1bmRlZmluZWQiLCJoYXNoIiwic2xpY2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js":
/*!*********************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js ***!
\*********************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parseRelativeUrl\", ({\n enumerable: true,\n get: function() {\n return parseRelativeUrl;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils.js\");\nconst _querystring = __webpack_require__(/*! ./querystring */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nfunction parseRelativeUrl(url, base, parseQuery) {\n if (parseQuery === void 0) parseQuery = true;\n const globalBase = new URL( false ? 0 : (0, _utils.getLocationOrigin)());\n const resolvedBase = base ? new URL(base, globalBase) : url.startsWith('.') ? new URL( false ? 0 : window.location.href) : globalBase;\n const { pathname, searchParams, search, hash, href, origin } = new URL(url, resolvedBase);\n if (origin !== globalBase.origin) {\n throw Object.defineProperty(new Error(\"invariant: invalid relative URL, router received \" + url), \"__NEXT_ERROR_CODE\", {\n value: \"E159\",\n enumerable: false,\n configurable: true\n });\n }\n return {\n pathname,\n query: parseQuery ? (0, _querystring.searchParamsToUrlQuery)(searchParams) : undefined,\n search,\n hash,\n href: href.slice(origin.length),\n // We don't know for relative URLs at this point since we set a custom, internal\n // base that isn't surfaced to users.\n slashes: undefined\n };\n} //# sourceMappingURL=parse-relative-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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcmVsYXRpdmUtdXJsLmpzIiwibWFwcGluZ3MiOiI7Ozs7b0RBNkJnQkE7OztlQUFBQTs7O21DQTVCa0I7eUNBQ0s7QUEyQmhDLFNBQVNBLGlCQUNkQyxHQUFXLEVBQ1hDLElBQWEsRUFDYkMsVUFBaUI7SUFBakJBLElBQUFBLGVBQUFBLEtBQUFBLEdBQUFBLGFBQWE7SUFFYixNQUFNQyxhQUFhLElBQUlDLElBQ3JCLE1BQTZCLEdBQUcsQ0FBVSxHQUFHRSxDQUFBQSxHQUFBQSxPQUFBQSxpQkFBQUE7SUFHL0MsTUFBTUMsZUFBZU4sT0FDakIsSUFBSUcsSUFBSUgsTUFBTUUsY0FDZEgsSUFBSVEsVUFBVSxDQUFDLE9BQ2IsSUFBSUosSUFDRixNQUE2QixHQUFHLENBQVUsR0FBR0MsT0FBT0ksUUFBUSxDQUFDQyxJQUFJLElBRW5FUDtJQUVOLE1BQU0sRUFBRVEsUUFBUSxFQUFFQyxZQUFZLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFSixJQUFJLEVBQUVLLE1BQU0sRUFBRSxHQUFHLElBQUlYLElBQ2pFSixLQUNBTztJQUdGLElBQUlRLFdBQVdaLFdBQVdZLE1BQU0sRUFBRTtRQUNoQyxNQUFNLHFCQUFvRSxDQUFwRSxJQUFJQyxNQUFPLHNEQUFtRGhCLE1BQTlEO21CQUFBO3dCQUFBOzBCQUFBO1FBQW1FO0lBQzNFO0lBRUEsT0FBTztRQUNMVztRQUNBTSxPQUFPZixhQUFhZ0IsQ0FBQUEsR0FBQUEsYUFBQUEsc0JBQUFBLEVBQXVCTixnQkFBZ0JPO1FBQzNETjtRQUNBQztRQUNBSixNQUFNQSxLQUFLVSxLQUFLLENBQUNMLE9BQU9NLE1BQU07UUFDOUIsZ0ZBQWdGO1FBQ2hGLHFDQUFxQztRQUNyQ0MsU0FBU0g7SUFDWDtBQUNGIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXJlbGF0aXZlLXVybC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhcnNlZFVybFF1ZXJ5IH0gZnJvbSAncXVlcnlzdHJpbmcnXG5pbXBvcnQgeyBnZXRMb2NhdGlvbk9yaWdpbiB9IGZyb20gJy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgc2VhcmNoUGFyYW1zVG9VcmxRdWVyeSB9IGZyb20gJy4vcXVlcnlzdHJpbmcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUmVsYXRpdmVVcmwge1xuICBoYXNoOiBzdHJpbmdcbiAgaHJlZjogc3RyaW5nXG4gIHBhdGhuYW1lOiBzdHJpbmdcbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gIHNlYXJjaDogc3RyaW5nXG4gIHNsYXNoZXM6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFBhcnNlcyBwYXRoLXJlbGF0aXZlIHVybHMgKGUuZy4gYC9oZWxsby93b3JsZD9mb289YmFyYCkuIElmIHVybCBpc24ndCBwYXRoLXJlbGF0aXZlXG4gKiAoZS5nLiBgLi9oZWxsb2ApIHRoZW4gYXQgbGVhc3QgYmFzZSBtdXN0IGJlLlxuICogQWJzb2x1dGUgdXJscyBhcmUgcmVqZWN0ZWQgd2l0aCBvbmUgZXhjZXB0aW9uLCBpbiB0aGUgYnJvd3NlciwgYWJzb2x1dGUgdXJscyB0aGF0IGFyZSBvblxuICogdGhlIGN1cnJlbnQgb3JpZ2luIHdpbGwgYmUgcGFyc2VkIGFzIHJlbGF0aXZlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlbGF0aXZlVXJsKFxuICB1cmw6IHN0cmluZyxcbiAgYmFzZT86IHN0cmluZyxcbiAgcGFyc2VRdWVyeT86IHRydWVcbik6IFBhcnNlZFJlbGF0aXZlVXJsXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZVVybChcbiAgdXJsOiBzdHJpbmcsXG4gIGJhc2U6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcGFyc2VRdWVyeTogZmFsc2Vcbik6IE9taXQ8UGFyc2VkUmVsYXRpdmVVcmwsICdxdWVyeSc+XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZVVybChcbiAgdXJsOiBzdHJpbmcsXG4gIGJhc2U/OiBzdHJpbmcsXG4gIHBhcnNlUXVlcnkgPSB0cnVlXG4pOiBQYXJzZWRSZWxhdGl2ZVVybCB8IE9taXQ8UGFyc2VkUmVsYXRpdmVVcmwsICdxdWVyeSc+IHtcbiAgY29uc3QgZ2xvYmFsQmFzZSA9IG5ldyBVUkwoXG4gICAgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyAnaHR0cDovL24nIDogZ2V0TG9jYXRpb25PcmlnaW4oKVxuICApXG5cbiAgY29uc3QgcmVzb2x2ZWRCYXNlID0gYmFzZVxuICAgID8gbmV3IFVSTChiYXNlLCBnbG9iYWxCYXNlKVxuICAgIDogdXJsLnN0YXJ0c1dpdGgoJy4nKVxuICAgICAgPyBuZXcgVVJMKFxuICAgICAgICAgIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gJ2h0dHA6Ly9uJyA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgICAgIClcbiAgICAgIDogZ2xvYmFsQmFzZVxuXG4gIGNvbnN0IHsgcGF0aG5hbWUsIHNlYXJjaFBhcmFtcywgc2VhcmNoLCBoYXNoLCBocmVmLCBvcmlnaW4gfSA9IG5ldyBVUkwoXG4gICAgdXJsLFxuICAgIHJlc29sdmVkQmFzZVxuICApXG5cbiAgaWYgKG9yaWdpbiAhPT0gZ2xvYmFsQmFzZS5vcmlnaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFyaWFudDogaW52YWxpZCByZWxhdGl2ZSBVUkwsIHJvdXRlciByZWNlaXZlZCAke3VybH1gKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZSxcbiAgICBxdWVyeTogcGFyc2VRdWVyeSA/IHNlYXJjaFBhcmFtc1RvVXJsUXVlcnkoc2VhcmNoUGFyYW1zKSA6IHVuZGVmaW5lZCxcbiAgICBzZWFyY2gsXG4gICAgaGFzaCxcbiAgICBocmVmOiBocmVmLnNsaWNlKG9yaWdpbi5sZW5ndGgpLFxuICAgIC8vIFdlIGRvbid0IGtub3cgZm9yIHJlbGF0aXZlIFVSTHMgYXQgdGhpcyBwb2ludCBzaW5jZSB3ZSBzZXQgYSBjdXN0b20sIGludGVybmFsXG4gICAgLy8gYmFzZSB0aGF0IGlzbid0IHN1cmZhY2VkIHRvIHVzZXJzLlxuICAgIHNsYXNoZXM6IHVuZGVmaW5lZCxcbiAgfVxufVxuIl0sIm5hbWVzIjpbInBhcnNlUmVsYXRpdmVVcmwiLCJ1cmwiLCJiYXNlIiwicGFyc2VRdWVyeSIsImdsb2JhbEJhc2UiLCJVUkwiLCJ3aW5kb3ciLCJnZXRMb2NhdGlvbk9yaWdpbiIsInJlc29sdmVkQmFzZSIsInN0YXJ0c1dpdGgiLCJsb2NhdGlvbiIsImhyZWYiLCJwYXRobmFtZSIsInNlYXJjaFBhcmFtcyIsInNlYXJjaCIsImhhc2giLCJvcmlnaW4iLCJFcnJvciIsInF1ZXJ5Iiwic2VhcmNoUGFyYW1zVG9VcmxRdWVyeSIsInVuZGVmaW5lZCIsInNsaWNlIiwibGVuZ3RoIiwic2xhc2hlcyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js":
/*!******************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js ***!
\******************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"pathHasPrefix\", ({\n enumerable: true,\n get: function() {\n return pathHasPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction pathHasPrefix(path, prefix) {\n if (typeof path !== 'string') {\n return false;\n }\n const { pathname } = (0, _parsepath.parsePath)(path);\n return pathname === prefix || pathname.startsWith(prefix + '/');\n} //# sourceMappingURL=path-has-prefix.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGF0aC1oYXMtcHJlZml4LmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBU2dCQTs7O2VBQUFBOzs7dUNBVFU7QUFTbkIsU0FBU0EsY0FBY0MsSUFBWSxFQUFFQyxNQUFjO0lBQ3hELElBQUksT0FBT0QsU0FBUyxVQUFVO1FBQzVCLE9BQU87SUFDVDtJQUVBLE1BQU0sRUFBRUUsUUFBUSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQVVIO0lBQy9CLE9BQU9FLGFBQWFELFVBQVVDLFNBQVNFLFVBQVUsQ0FBQ0gsU0FBUztBQUM3RCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXRoLWhhcy1wcmVmaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2VQYXRoIH0gZnJvbSAnLi9wYXJzZS1wYXRoJ1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIHBhdGggc3RhcnRzIHdpdGggYSBnaXZlbiBwcmVmaXguIEl0IGVuc3VyZXMgaXQgbWF0Y2hlc1xuICogZXhhY3RseSB3aXRob3V0IGNvbnRhaW5pbmcgZXh0cmEgY2hhcnMuIGUuZy4gcHJlZml4IC9kb2NzIHNob3VsZCByZXBsYWNlXG4gKiBmb3IgL2RvY3MsIC9kb2NzLywgL2RvY3MvYSBidXQgbm90IC9kb2Nzc3NcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHBhcmFtIHByZWZpeCBUaGUgcHJlZml4IHRvIGNoZWNrIGFnYWluc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRoSGFzUHJlZml4KHBhdGg6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgeyBwYXRobmFtZSB9ID0gcGFyc2VQYXRoKHBhdGgpXG4gIHJldHVybiBwYXRobmFtZSA9PT0gcHJlZml4IHx8IHBhdGhuYW1lLnN0YXJ0c1dpdGgocHJlZml4ICsgJy8nKVxufVxuIl0sIm5hbWVzIjpbInBhdGhIYXNQcmVmaXgiLCJwYXRoIiwicHJlZml4IiwicGF0aG5hbWUiLCJwYXJzZVBhdGgiLCJzdGFydHNXaXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/querystring.js":
/*!**************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.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) {\n for(var _len = arguments.length, searchParamsList = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n searchParamsList[_key - 1] = arguments[_key];\n }\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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBZ0RnQkEsTUFBTTtlQUFOQTs7SUE5Q0FDLHNCQUFzQjtlQUF0QkE7O0lBZ0NBQyxzQkFBc0I7ZUFBdEJBOzs7QUFoQ1QsU0FBU0QsdUJBQ2RFLFlBQTZCO0lBRTdCLE1BQU1DLFFBQXdCLENBQUM7SUFDL0IsS0FBSyxNQUFNLENBQUNDLEtBQUtDLE1BQU0sSUFBSUgsYUFBYUksT0FBTyxHQUFJO1FBQ2pELE1BQU1DLFdBQVdKLEtBQUssQ0FBQ0MsSUFBSTtRQUMzQixJQUFJLE9BQU9HLGFBQWEsYUFBYTtZQUNuQ0osS0FBSyxDQUFDQyxJQUFJLEdBQUdDO1FBQ2YsT0FBTyxJQUFJRyxNQUFNQyxPQUFPLENBQUNGLFdBQVc7WUFDbENBLFNBQVNHLElBQUksQ0FBQ0w7UUFDaEIsT0FBTztZQUNMRixLQUFLLENBQUNDLElBQUksR0FBRztnQkFBQ0c7Z0JBQVVGO2FBQU07UUFDaEM7SUFDRjtJQUNBLE9BQU9GO0FBQ1Q7QUFFQSxTQUFTUSx1QkFBdUJDLEtBQWM7SUFDNUMsSUFBSSxPQUFPQSxVQUFVLFVBQVU7UUFDN0IsT0FBT0E7SUFDVDtJQUVBLElBQ0csT0FBT0EsVUFBVSxZQUFZLENBQUNDLE1BQU1ELFVBQ3JDLE9BQU9BLFVBQVUsV0FDakI7UUFDQSxPQUFPRSxPQUFPRjtJQUNoQixPQUFPO1FBQ0wsT0FBTztJQUNUO0FBQ0Y7QUFFTyxTQUFTWCx1QkFBdUJFLEtBQXFCO0lBQzFELE1BQU1ELGVBQWUsSUFBSWE7SUFDekIsS0FBSyxNQUFNLENBQUNYLEtBQUtDLE1BQU0sSUFBSVcsT0FBT1YsT0FBTyxDQUFDSCxPQUFRO1FBQ2hELElBQUlLLE1BQU1DLE9BQU8sQ0FBQ0osUUFBUTtZQUN4QixLQUFLLE1BQU1ZLFFBQVFaLE1BQU87Z0JBQ3hCSCxhQUFhZ0IsTUFBTSxDQUFDZCxLQUFLTyx1QkFBdUJNO1lBQ2xEO1FBQ0YsT0FBTztZQUNMZixhQUFhaUIsR0FBRyxDQUFDZixLQUFLTyx1QkFBdUJOO1FBQy9DO0lBQ0Y7SUFDQSxPQUFPSDtBQUNUO0FBRU8sU0FBU0gsT0FDZHFCLE1BQXVCO0lBQ3ZCLGlDQUFHQyxtQkFBSDtRQUFHQSxnQkFBQUEsQ0FBSCwyQkFBc0M7O0lBRXRDLEtBQUssTUFBTW5CLGdCQUFnQm1CLGlCQUFrQjtRQUMzQyxLQUFLLE1BQU1qQixPQUFPRixhQUFhb0IsSUFBSSxHQUFJO1lBQ3JDRixPQUFPRyxNQUFNLENBQUNuQjtRQUNoQjtRQUVBLEtBQUssTUFBTSxDQUFDQSxLQUFLQyxNQUFNLElBQUlILGFBQWFJLE9BQU8sR0FBSTtZQUNqRGMsT0FBT0YsTUFBTSxDQUFDZCxLQUFLQztRQUNyQjtJQUNGO0lBRUEsT0FBT2U7QUFDVCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9xdWVyeXN0cmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhcnNlZFVybFF1ZXJ5IH0gZnJvbSAncXVlcnlzdHJpbmcnXG5cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5KFxuICBzZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtc1xuKTogUGFyc2VkVXJsUXVlcnkge1xuICBjb25zdCBxdWVyeTogUGFyc2VkVXJsUXVlcnkgPSB7fVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzZWFyY2hQYXJhbXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBxdWVyeVtrZXldXG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHF1ZXJ5W2tleV0gPSB2YWx1ZVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIHtcbiAgICAgIGV4aXN0aW5nLnB1c2godmFsdWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5W2tleV0gPSBbZXhpc3RpbmcsIHZhbHVlXVxuICAgIH1cbiAgfVxuICByZXR1cm4gcXVlcnlcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5VXJsUXVlcnlQYXJhbShwYXJhbTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhcmFtXG4gIH1cblxuICBpZiAoXG4gICAgKHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHBhcmFtKSkgfHxcbiAgICB0eXBlb2YgcGFyYW0gPT09ICdib29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxRdWVyeVRvU2VhcmNoUGFyYW1zKHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeSk6IFVSTFNlYXJjaFBhcmFtcyB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhxdWVyeSkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgc3RyaW5naWZ5VXJsUXVlcnlQYXJhbShpdGVtKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VhcmNoUGFyYW1zLnNldChrZXksIHN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0odmFsdWUpKVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2VhcmNoUGFyYW1zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24oXG4gIHRhcmdldDogVVJMU2VhcmNoUGFyYW1zLFxuICAuLi5zZWFyY2hQYXJhbXNMaXN0OiBVUkxTZWFyY2hQYXJhbXNbXVxuKTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgZm9yIChjb25zdCBzZWFyY2hQYXJhbXMgb2Ygc2VhcmNoUGFyYW1zTGlzdCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHNlYXJjaFBhcmFtcy5rZXlzKCkpIHtcbiAgICAgIHRhcmdldC5kZWxldGUoa2V5KVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHNlYXJjaFBhcmFtcy5lbnRyaWVzKCkpIHtcbiAgICAgIHRhcmdldC5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0XG59XG4iXSwibmFtZXMiOlsiYXNzaWduIiwic2VhcmNoUGFyYW1zVG9VcmxRdWVyeSIsInVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMiLCJzZWFyY2hQYXJhbXMiLCJxdWVyeSIsImtleSIsInZhbHVlIiwiZW50cmllcyIsImV4aXN0aW5nIiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsInN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0iLCJwYXJhbSIsImlzTmFOIiwiU3RyaW5nIiwiVVJMU2VhcmNoUGFyYW1zIiwiT2JqZWN0IiwiaXRlbSIsImFwcGVuZCIsInNldCIsInRhcmdldCIsInNlYXJjaFBhcmFtc0xpc3QiLCJrZXlzIiwiZGVsZXRlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/querystring.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js":
/*!*********************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js ***!
\*********************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removePathPrefix\", ({\n enumerable: true,\n get: function() {\n return removePathPrefix;\n }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction removePathPrefix(path, prefix) {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!(0, _pathhasprefix.pathHasPrefix)(path, prefix)) {\n return path;\n }\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length);\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith('/')) {\n return withoutPrefix;\n }\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return \"/\" + withoutPrefix;\n} //# sourceMappingURL=remove-path-prefix.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXBhdGgtcHJlZml4LmpzIiwibWFwcGluZ3MiOiI7Ozs7b0RBVWdCQTs7O2VBQUFBOzs7MkNBVmM7QUFVdkIsU0FBU0EsaUJBQWlCQyxJQUFZLEVBQUVDLE1BQWM7SUFDM0QseUVBQXlFO0lBQ3pFLDBFQUEwRTtJQUMxRSxrQkFBa0I7SUFDbEIsRUFBRTtJQUNGLG9CQUFvQjtJQUNwQixFQUFFO0lBQ0Ysa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsdUJBQXVCO0lBQ3ZCLHdCQUF3QjtJQUN4Qix5QkFBeUI7SUFDekIsSUFBSSxDQUFDQyxDQUFBQSxHQUFBQSxlQUFBQSxhQUFBQSxFQUFjRixNQUFNQyxTQUFTO1FBQ2hDLE9BQU9EO0lBQ1Q7SUFFQSwrQ0FBK0M7SUFDL0MsTUFBTUcsZ0JBQWdCSCxLQUFLSSxLQUFLLENBQUNILE9BQU9JLE1BQU07SUFFOUMsMkVBQTJFO0lBQzNFLElBQUlGLGNBQWNHLFVBQVUsQ0FBQyxNQUFNO1FBQ2pDLE9BQU9IO0lBQ1Q7SUFFQSw0RUFBNEU7SUFDNUUsbURBQW1EO0lBQ25ELE9BQVEsTUFBR0E7QUFDYiIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yZW1vdmUtcGF0aC1wcmVmaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGF0aEhhc1ByZWZpeCB9IGZyb20gJy4vcGF0aC1oYXMtcHJlZml4J1xuXG4vKipcbiAqIEdpdmVuIGEgcGF0aCBhbmQgYSBwcmVmaXggaXQgd2lsbCByZW1vdmUgdGhlIHByZWZpeCB3aGVuIGl0IGV4aXN0cyBpbiB0aGVcbiAqIGdpdmVuIHBhdGguIEl0IGVuc3VyZXMgaXQgbWF0Y2hlcyBleGFjdGx5IHdpdGhvdXQgY29udGFpbmluZyBleHRyYSBjaGFyc1xuICogYW5kIGlmIHRoZSBwcmVmaXggaXMgbm90IHRoZXJlIGl0IHdpbGwgYmUgbm9vcC5cbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byByZW1vdmUgdGhlIHByZWZpeCBmcm9tLlxuICogQHBhcmFtIHByZWZpeCBUaGUgcHJlZml4IHRvIGJlIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQYXRoUHJlZml4KHBhdGg6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBJZiB0aGUgcGF0aCBkb2Vzbid0IHN0YXJ0IHdpdGggdGhlIHByZWZpeCB3ZSBjYW4gcmV0dXJuIGl0IGFzIGlzLiBUaGlzXG4gIC8vIHByb3RlY3RzIHVzIGZyb20gc2l0dWF0aW9ucyB3aGVyZSB0aGUgcHJlZml4IGlzIGEgc3Vic3RyaW5nIG9mIHRoZSBwYXRoXG4gIC8vIHByZWZpeCBzdWNoIGFzOlxuICAvL1xuICAvLyBGb3IgcHJlZml4OiAvYmxvZ1xuICAvL1xuICAvLyAgIC9ibG9nIC0+IHRydWVcbiAgLy8gICAvYmxvZy8gLT4gdHJ1ZVxuICAvLyAgIC9ibG9nLzEgLT4gdHJ1ZVxuICAvLyAgIC9ibG9nZ2luZyAtPiBmYWxzZVxuICAvLyAgIC9ibG9nZ2luZy8gLT4gZmFsc2VcbiAgLy8gICAvYmxvZ2dpbmcvMSAtPiBmYWxzZVxuICBpZiAoIXBhdGhIYXNQcmVmaXgocGF0aCwgcHJlZml4KSkge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIHByZWZpeCBmcm9tIHRoZSBwYXRoIHZpYSBzbGljaW5nLlxuICBjb25zdCB3aXRob3V0UHJlZml4ID0gcGF0aC5zbGljZShwcmVmaXgubGVuZ3RoKVxuXG4gIC8vIElmIHRoZSBwYXRoIHdpdGhvdXQgdGhlIHByZWZpeCBzdGFydHMgd2l0aCBhIGAvYCB3ZSBjYW4gcmV0dXJuIGl0IGFzIGlzLlxuICBpZiAod2l0aG91dFByZWZpeC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gd2l0aG91dFByZWZpeFxuICB9XG5cbiAgLy8gSWYgdGhlIHBhdGggd2l0aG91dCB0aGUgcHJlZml4IGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIGAvYCB3ZSBuZWVkIHRvIGFkZCBpdFxuICAvLyBiYWNrIHRvIHRoZSBwYXRoIHRvIG1ha2Ugc3VyZSBpdCdzIGEgdmFsaWQgcGF0aC5cbiAgcmV0dXJuIGAvJHt3aXRob3V0UHJlZml4fWBcbn1cbiJdLCJuYW1lcyI6WyJyZW1vdmVQYXRoUHJlZml4IiwicGF0aCIsInByZWZpeCIsInBhdGhIYXNQcmVmaXgiLCJ3aXRob3V0UHJlZml4Iiwic2xpY2UiLCJsZW5ndGgiLCJzdGFydHNXaXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js":
/*!************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js ***!
\************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return removeTrailingSlash;\n }\n}));\nfunction removeTrailingSlash(route) {\n return route.replace(/\\/$/, '') || '/';\n} //# sourceMappingURL=remove-trailing-slash.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Q0FNQzs7Ozt1REFDZUE7OztlQUFBQTs7O0FBQVQsU0FBU0Esb0JBQW9CQyxLQUFhO0lBQy9DLE9BQU9BLE1BQU1DLE9BQU8sQ0FBQyxPQUFPLE9BQU87QUFDckMiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVtb3ZlcyB0aGUgdHJhaWxpbmcgc2xhc2ggZm9yIGEgZ2l2ZW4gcm91dGUgb3IgcGFnZSBwYXRoLiBQcmVzZXJ2ZXMgdGhlXG4gKiByb290IHBhZ2UuIEV4YW1wbGVzOlxuICogICAtIGAvZm9vL2Jhci9gIC0+IGAvZm9vL2JhcmBcbiAqICAgLSBgL2Zvby9iYXJgIC0+IGAvZm9vL2JhcmBcbiAqICAgLSBgL2AgLT4gYC9gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVUcmFpbGluZ1NsYXNoKHJvdXRlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHJvdXRlLnJlcGxhY2UoL1xcLyQvLCAnJykgfHwgJy8nXG59XG4iXSwibmFtZXMiOlsicmVtb3ZlVHJhaWxpbmdTbGFzaCIsInJvdXRlIiwicmVwbGFjZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-match-utils.js":
/*!********************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-match-utils.js ***!
\********************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/**\n * Client-safe utilities for route matching that don't import server-side\n * utilities to avoid bundling issues with Turbopack\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 safeCompile: function() {\n return safeCompile;\n },\n safePathToRegexp: function() {\n return safePathToRegexp;\n },\n safeRegexpToFunction: function() {\n return safeRegexpToFunction;\n },\n safeRouteMatcher: function() {\n return safeRouteMatcher;\n }\n});\nconst _pathtoregexp = __webpack_require__(/*! next/dist/compiled/path-to-regexp */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/path-to-regexp/index.js\");\nconst _routepatternnormalizer = __webpack_require__(/*! ../../../../lib/route-pattern-normalizer */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/route-pattern-normalizer.js\");\nfunction safePathToRegexp(route, keys, options) {\n if (typeof route !== 'string') {\n return (0, _pathtoregexp.pathToRegexp)(route, keys, options);\n }\n // Check if normalization is needed and cache the result\n const needsNormalization = (0, _routepatternnormalizer.hasAdjacentParameterIssues)(route);\n const routeToUse = needsNormalization ? (0, _routepatternnormalizer.normalizeAdjacentParameters)(route) : route;\n try {\n return (0, _pathtoregexp.pathToRegexp)(routeToUse, keys, options);\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = (0, _routepatternnormalizer.normalizeAdjacentParameters)(route);\n return (0, _pathtoregexp.pathToRegexp)(normalizedRoute, keys, options);\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error;\n }\n }\n throw error;\n }\n}\nfunction safeCompile(route, options) {\n // Check if normalization is needed and cache the result\n const needsNormalization = (0, _routepatternnormalizer.hasAdjacentParameterIssues)(route);\n const routeToUse = needsNormalization ? (0, _routepatternnormalizer.normalizeAdjacentParameters)(route) : route;\n try {\n return (0, _pathtoregexp.compile)(routeToUse, options);\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = (0, _routepatternnormalizer.normalizeAdjacentParameters)(route);\n return (0, _pathtoregexp.compile)(normalizedRoute, options);\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error;\n }\n }\n throw error;\n }\n}\nfunction safeRegexpToFunction(regexp, keys) {\n const originalMatcher = (0, _pathtoregexp.regexpToFunction)(regexp, keys || []);\n return (pathname)=>{\n const result = originalMatcher(pathname);\n if (!result) return false;\n // Clean parameters before returning\n return {\n ...result,\n params: (0, _routepatternnormalizer.stripParameterSeparators)(result.params)\n };\n };\n}\nfunction safeRouteMatcher(matcherFn) {\n return (pathname)=>{\n const result = matcherFn(pathname);\n if (!result) return false;\n // Clean parameters before returning\n return (0, _routepatternnormalizer.stripParameterSeparators)(result);\n };\n} //# sourceMappingURL=route-match-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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtbWF0Y2gtdXRpbHMuanMiLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDOzs7Ozs7Ozs7Ozs7SUEyRGVBLFdBQVc7ZUFBWEE7O0lBcENBQyxnQkFBZ0I7ZUFBaEJBOztJQWtFQUMsb0JBQW9CO2VBQXBCQTs7SUFxQkFDLGdCQUFnQjtlQUFoQkE7OzswQ0FsR1Q7b0RBS0E7QUFNQSxTQUFTRixpQkFDZEcsS0FBK0MsRUFDL0NDLElBQVksRUFDWkMsT0FBOEM7SUFFOUMsSUFBSSxPQUFPRixVQUFVLFVBQVU7UUFDN0IsT0FBT0csQ0FBQUEsR0FBQUEsY0FBQUEsWUFBQUEsRUFBYUgsT0FBT0MsTUFBTUM7SUFDbkM7SUFFQSx3REFBd0Q7SUFDeEQsTUFBTUUscUJBQXFCQyxDQUFBQSxHQUFBQSx3QkFBQUEsMEJBQUFBLEVBQTJCTDtJQUN0RCxNQUFNTSxhQUFhRixxQkFDZkcsQ0FBQUEsR0FBQUEsd0JBQUFBLDJCQUFBQSxFQUE0QlAsU0FDNUJBO0lBRUosSUFBSTtRQUNGLE9BQU9HLENBQUFBLEdBQUFBLGNBQUFBLFlBQUFBLEVBQWFHLFlBQVlMLE1BQU1DO0lBQ3hDLEVBQUUsT0FBT00sT0FBTztRQUNkLDBEQUEwRDtRQUMxRCxJQUFJLENBQUNKLG9CQUFvQjtZQUN2QixJQUFJO2dCQUNGLE1BQU1LLGtCQUFrQkYsQ0FBQUEsR0FBQUEsd0JBQUFBLDJCQUFBQSxFQUE0QlA7Z0JBQ3BELE9BQU9HLENBQUFBLEdBQUFBLGNBQUFBLFlBQVksRUFBQ00saUJBQWlCUixNQUFNQztZQUM3QyxFQUFFLE9BQU9RLFlBQVk7Z0JBQ25CLG9EQUFvRDtnQkFDcEQsTUFBTUY7WUFDUjtRQUNGO1FBQ0EsTUFBTUE7SUFDUjtBQUNGO0FBTU8sU0FBU1osWUFDZEksS0FBYSxFQUNiRSxPQUFnRDtJQUVoRCx3REFBd0Q7SUFDeEQsTUFBTUUscUJBQXFCQyxDQUFBQSxHQUFBQSx3QkFBQUEsMEJBQUFBLEVBQTJCTDtJQUN0RCxNQUFNTSxhQUFhRixxQkFDZkcsQ0FBQUEsR0FBQUEsd0JBQUFBLDJCQUFBQSxFQUE0QlAsU0FDNUJBO0lBRUosSUFBSTtRQUNGLE9BQU9XLENBQUFBLEdBQUFBLGNBQUFBLE9BQUFBLEVBQVFMLFlBQVlKO0lBQzdCLEVBQUUsT0FBT00sT0FBTztRQUNkLDBEQUEwRDtRQUMxRCxJQUFJLENBQUNKLG9CQUFvQjtZQUN2QixJQUFJO2dCQUNGLE1BQU1LLGtCQUFrQkYsQ0FBQUEsR0FBQUEsd0JBQUFBLDJCQUFBQSxFQUE0QlA7Z0JBQ3BELE9BQU9XLENBQUFBLEdBQUFBLGNBQUFBLE9BQUFBLEVBQVFGLGlCQUFpQlA7WUFDbEMsRUFBRSxPQUFPUSxZQUFZO2dCQUNuQixvREFBb0Q7Z0JBQ3BELE1BQU1GO1lBQ1I7UUFDRjtRQUNBLE1BQU1BO0lBQ1I7QUFDRjtBQUtPLFNBQVNWLHFCQUVkYyxNQUFjLEVBQUVYLElBQVk7SUFDNUIsTUFBTVksa0JBQWtCQyxDQUFBQSxHQUFBQSxjQUFBQSxnQkFBQUEsRUFBb0JGLFFBQVFYLFFBQVEsRUFBRTtJQUU5RCxPQUFPLENBQUNjO1FBQ04sTUFBTUMsU0FBU0gsZ0JBQWdCRTtRQUMvQixJQUFJLENBQUNDLFFBQVEsT0FBTztRQUVwQixvQ0FBb0M7UUFDcEMsT0FBTztZQUNMLEdBQUdBLE1BQU07WUFDVEMsUUFBUUMsQ0FBQUEsR0FBQUEsd0JBQUFBLHdCQUFBQSxFQUF5QkYsT0FBT0MsTUFBTTtRQUNoRDtJQUNGO0FBQ0Y7QUFNTyxTQUFTbEIsaUJBQ2RvQixTQUEwQztJQUUxQyxPQUFPLENBQUNKO1FBQ04sTUFBTUMsU0FBU0csVUFBVUo7UUFDekIsSUFBSSxDQUFDQyxRQUFRLE9BQU87UUFFcEIsb0NBQW9DO1FBQ3BDLE9BQU9FLENBQUFBLEdBQUFBLHdCQUFBQSx3QkFBQUEsRUFBeUJGO0lBQ2xDO0FBQ0YiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtbWF0Y2gtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDbGllbnQtc2FmZSB1dGlsaXRpZXMgZm9yIHJvdXRlIG1hdGNoaW5nIHRoYXQgZG9uJ3QgaW1wb3J0IHNlcnZlci1zaWRlXG4gKiB1dGlsaXRpZXMgdG8gYXZvaWQgYnVuZGxpbmcgaXNzdWVzIHdpdGggVHVyYm9wYWNrXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBLZXksXG4gIFRva2Vuc1RvUmVnZXhwT3B0aW9ucyxcbiAgUGFyc2VPcHRpb25zLFxuICBUb2tlbnNUb0Z1bmN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnbmV4dC9kaXN0L2NvbXBpbGVkL3BhdGgtdG8tcmVnZXhwJ1xuaW1wb3J0IHtcbiAgcGF0aFRvUmVnZXhwLFxuICBjb21waWxlLFxuICByZWdleHBUb0Z1bmN0aW9uLFxufSBmcm9tICduZXh0L2Rpc3QvY29tcGlsZWQvcGF0aC10by1yZWdleHAnXG5pbXBvcnQge1xuICBoYXNBZGphY2VudFBhcmFtZXRlcklzc3VlcyxcbiAgbm9ybWFsaXplQWRqYWNlbnRQYXJhbWV0ZXJzLFxuICBzdHJpcFBhcmFtZXRlclNlcGFyYXRvcnMsXG59IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9yb3V0ZS1wYXR0ZXJuLW5vcm1hbGl6ZXInXG5cbi8qKlxuICogQ2xpZW50LXNhZmUgd3JhcHBlciBhcm91bmQgcGF0aFRvUmVnZXhwIHRoYXQgaGFuZGxlcyBwYXRoLXRvLXJlZ2V4cCA2LjMuMCsgdmFsaWRhdGlvbiBlcnJvcnMuXG4gKiBUaGlzIGluY2x1ZGVzIGJvdGggXCJDYW4gbm90IHJlcGVhdCB3aXRob3V0IHByZWZpeC9zdWZmaXhcIiBhbmQgXCJNdXN0IGhhdmUgdGV4dCBiZXR3ZWVuIHBhcmFtZXRlcnNcIiBlcnJvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYWZlUGF0aFRvUmVnZXhwKFxuICByb3V0ZTogc3RyaW5nIHwgUmVnRXhwIHwgQXJyYXk8c3RyaW5nIHwgUmVnRXhwPixcbiAga2V5cz86IEtleVtdLFxuICBvcHRpb25zPzogVG9rZW5zVG9SZWdleHBPcHRpb25zICYgUGFyc2VPcHRpb25zXG4pOiBSZWdFeHAge1xuICBpZiAodHlwZW9mIHJvdXRlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXRoVG9SZWdleHAocm91dGUsIGtleXMsIG9wdGlvbnMpXG4gIH1cblxuICAvLyBDaGVjayBpZiBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCBhbmQgY2FjaGUgdGhlIHJlc3VsdFxuICBjb25zdCBuZWVkc05vcm1hbGl6YXRpb24gPSBoYXNBZGphY2VudFBhcmFtZXRlcklzc3Vlcyhyb3V0ZSlcbiAgY29uc3Qgcm91dGVUb1VzZSA9IG5lZWRzTm9ybWFsaXphdGlvblxuICAgID8gbm9ybWFsaXplQWRqYWNlbnRQYXJhbWV0ZXJzKHJvdXRlKVxuICAgIDogcm91dGVcblxuICB0cnkge1xuICAgIHJldHVybiBwYXRoVG9SZWdleHAocm91dGVUb1VzZSwga2V5cywgb3B0aW9ucylcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBPbmx5IHRyeSBub3JtYWxpemF0aW9uIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBub3JtYWxpemVkXG4gICAgaWYgKCFuZWVkc05vcm1hbGl6YXRpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSb3V0ZSA9IG5vcm1hbGl6ZUFkamFjZW50UGFyYW1ldGVycyhyb3V0ZSlcbiAgICAgICAgcmV0dXJuIHBhdGhUb1JlZ2V4cChub3JtYWxpemVkUm91dGUsIGtleXMsIG9wdGlvbnMpXG4gICAgICB9IGNhdGNoIChyZXRyeUVycm9yKSB7XG4gICAgICAgIC8vIElmIHRoYXQgZG9lc24ndCB3b3JrLCBmYWxsIGJhY2sgdG8gb3JpZ2luYWwgZXJyb3JcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG4vKipcbiAqIENsaWVudC1zYWZlIHdyYXBwZXIgYXJvdW5kIGNvbXBpbGUgdGhhdCBoYW5kbGVzIHBhdGgtdG8tcmVnZXhwIDYuMy4wKyB2YWxpZGF0aW9uIGVycm9ycy5cbiAqIE5vIHNlcnZlci1zaWRlIGVycm9yIHJlcG9ydGluZyB0byBhdm9pZCBidW5kbGluZyBpc3N1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYWZlQ29tcGlsZShcbiAgcm91dGU6IHN0cmluZyxcbiAgb3B0aW9ucz86IFRva2Vuc1RvRnVuY3Rpb25PcHRpb25zICYgUGFyc2VPcHRpb25zXG4pIHtcbiAgLy8gQ2hlY2sgaWYgbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQgYW5kIGNhY2hlIHRoZSByZXN1bHRcbiAgY29uc3QgbmVlZHNOb3JtYWxpemF0aW9uID0gaGFzQWRqYWNlbnRQYXJhbWV0ZXJJc3N1ZXMocm91dGUpXG4gIGNvbnN0IHJvdXRlVG9Vc2UgPSBuZWVkc05vcm1hbGl6YXRpb25cbiAgICA/IG5vcm1hbGl6ZUFkamFjZW50UGFyYW1ldGVycyhyb3V0ZSlcbiAgICA6IHJvdXRlXG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gY29tcGlsZShyb3V0ZVRvVXNlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIE9ubHkgdHJ5IG5vcm1hbGl6YXRpb24gaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IG5vcm1hbGl6ZWRcbiAgICBpZiAoIW5lZWRzTm9ybWFsaXphdGlvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJvdXRlID0gbm9ybWFsaXplQWRqYWNlbnRQYXJhbWV0ZXJzKHJvdXRlKVxuICAgICAgICByZXR1cm4gY29tcGlsZShub3JtYWxpemVkUm91dGUsIG9wdGlvbnMpXG4gICAgICB9IGNhdGNoIChyZXRyeUVycm9yKSB7XG4gICAgICAgIC8vIElmIHRoYXQgZG9lc24ndCB3b3JrLCBmYWxsIGJhY2sgdG8gb3JpZ2luYWwgZXJyb3JcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG4vKipcbiAqIENsaWVudC1zYWZlIHdyYXBwZXIgYXJvdW5kIHJlZ2V4cFRvRnVuY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IGNsZWFucyBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FmZVJlZ2V4cFRvRnVuY3Rpb248XG4gIFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pixcbj4ocmVnZXhwOiBSZWdFeHAsIGtleXM/OiBLZXlbXSk6IChwYXRobmFtZTogc3RyaW5nKSA9PiB7IHBhcmFtczogVCB9IHwgZmFsc2Uge1xuICBjb25zdCBvcmlnaW5hbE1hdGNoZXIgPSByZWdleHBUb0Z1bmN0aW9uPFQ+KHJlZ2V4cCwga2V5cyB8fCBbXSlcblxuICByZXR1cm4gKHBhdGhuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBvcmlnaW5hbE1hdGNoZXIocGF0aG5hbWUpXG4gICAgaWYgKCFyZXN1bHQpIHJldHVybiBmYWxzZVxuXG4gICAgLy8gQ2xlYW4gcGFyYW1ldGVycyBiZWZvcmUgcmV0dXJuaW5nXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3VsdCxcbiAgICAgIHBhcmFtczogc3RyaXBQYXJhbWV0ZXJTZXBhcmF0b3JzKHJlc3VsdC5wYXJhbXMgYXMgYW55KSBhcyBULFxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNhZmUgd3JhcHBlciBmb3Igcm91dGUgbWF0Y2hlciBmdW5jdGlvbnMgdGhhdCBhdXRvbWF0aWNhbGx5IGNsZWFucyBwYXJhbWV0ZXJzLlxuICogVGhpcyBpcyBjbGllbnQtc2FmZSBhbmQgZG9lc24ndCBpbXBvcnQgcGF0aC10by1yZWdleHAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYWZlUm91dGVNYXRjaGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihcbiAgbWF0Y2hlckZuOiAocGF0aG5hbWU6IHN0cmluZykgPT4gZmFsc2UgfCBUXG4pOiAocGF0aG5hbWU6IHN0cmluZykgPT4gZmFsc2UgfCBUIHtcbiAgcmV0dXJuIChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbWF0Y2hlckZuKHBhdGhuYW1lKVxuICAgIGlmICghcmVzdWx0KSByZXR1cm4gZmFsc2VcblxuICAgIC8vIENsZWFuIHBhcmFtZXRlcnMgYmVmb3JlIHJldHVybmluZ1xuICAgIHJldHVybiBzdHJpcFBhcmFtZXRlclNlcGFyYXRvcnMocmVzdWx0KSBhcyBUXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJzYWZlQ29tcGlsZSIsInNhZmVQYXRoVG9SZWdleHAiLCJzYWZlUmVnZXhwVG9GdW5jdGlvbiIsInNhZmVSb3V0ZU1hdGNoZXIiLCJyb3V0ZSIsImtleXMiLCJvcHRpb25zIiwicGF0aFRvUmVnZXhwIiwibmVlZHNOb3JtYWxpemF0aW9uIiwiaGFzQWRqYWNlbnRQYXJhbWV0ZXJJc3N1ZXMiLCJyb3V0ZVRvVXNlIiwibm9ybWFsaXplQWRqYWNlbnRQYXJhbWV0ZXJzIiwiZXJyb3IiLCJub3JtYWxpemVkUm91dGUiLCJyZXRyeUVycm9yIiwiY29tcGlsZSIsInJlZ2V4cCIsIm9yaWdpbmFsTWF0Y2hlciIsInJlZ2V4cFRvRnVuY3Rpb24iLCJwYXRobmFtZSIsInJlc3VsdCIsInBhcmFtcyIsInN0cmlwUGFyYW1ldGVyU2VwYXJhdG9ycyIsIm1hdGNoZXJGbiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-match-utils.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-matcher.js":
/*!****************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-matcher.js ***!
\****************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getRouteMatcher\", ({\n enumerable: true,\n get: function() {\n return getRouteMatcher;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils.js\");\nconst _routematchutils = __webpack_require__(/*! ./route-match-utils */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-match-utils.js\");\nfunction getRouteMatcher(param) {\n let { re, groups } = param;\n const rawMatcher = (pathname)=>{\n const routeMatch = re.exec(pathname);\n if (!routeMatch) return false;\n const decode = (param)=>{\n try {\n return decodeURIComponent(param);\n } catch (e) {\n throw Object.defineProperty(new _utils.DecodeError('failed to decode param'), \"__NEXT_ERROR_CODE\", {\n value: \"E528\",\n enumerable: false,\n configurable: true\n });\n }\n };\n const params = {};\n for (const [key, group] of Object.entries(groups)){\n const match = routeMatch[group.pos];\n if (match !== undefined) {\n if (group.repeat) {\n params[key] = match.split('/').map((entry)=>decode(entry));\n } else {\n params[key] = decode(match);\n }\n }\n }\n return params;\n };\n // Wrap with safe matcher to handle parameter cleaning\n return (0, _routematchutils.safeRouteMatcher)(rawMatcher);\n} //# sourceMappingURL=route-matcher.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtbWF0Y2hlci5qcyIsIm1hcHBpbmdzIjoiOzs7O21EQWdCZ0JBOzs7ZUFBQUE7OzttQ0FmWTs2Q0FFSztBQWExQixTQUFTQSxnQkFBZ0IsS0FHVjtJQUhVLE1BQzlCQyxFQUFFLEVBQ0ZDLE1BQU0sRUFDYyxHQUhVO0lBSTlCLE1BQU1DLGFBQWEsQ0FBQ0M7UUFDbEIsTUFBTUMsYUFBYUosR0FBR0ssSUFBSSxDQUFDRjtRQUMzQixJQUFJLENBQUNDLFlBQVksT0FBTztRQUV4QixNQUFNRSxTQUFTLENBQUNDO1lBQ2QsSUFBSTtnQkFDRixPQUFPQyxtQkFBbUJEO1lBQzVCLEVBQUUsVUFBTTtnQkFDTixNQUFNLHFCQUF5QyxDQUF6QyxJQUFJRSxPQUFBQSxXQUFXLENBQUMsMkJBQWhCOzJCQUFBO2dDQUFBO2tDQUFBO2dCQUF3QztZQUNoRDtRQUNGO1FBRUEsTUFBTUMsU0FBaUIsQ0FBQztRQUN4QixLQUFLLE1BQU0sQ0FBQ0MsS0FBS0MsTUFBTSxJQUFJQyxPQUFPQyxPQUFPLENBQUNiLFFBQVM7WUFDakQsTUFBTWMsUUFBUVgsVUFBVSxDQUFDUSxNQUFNSSxHQUFHLENBQUM7WUFDbkMsSUFBSUQsVUFBVUUsV0FBVztnQkFDdkIsSUFBSUwsTUFBTU0sTUFBTSxFQUFFO29CQUNoQlIsTUFBTSxDQUFDQyxJQUFJLEdBQUdJLE1BQU1JLEtBQUssQ0FBQyxLQUFLQyxHQUFHLENBQUMsQ0FBQ0MsUUFBVWYsT0FBT2U7Z0JBQ3ZELE9BQU87b0JBQ0xYLE1BQU0sQ0FBQ0MsSUFBSSxHQUFHTCxPQUFPUztnQkFDdkI7WUFDRjtRQUNGO1FBRUEsT0FBT0w7SUFDVDtJQUVBLHNEQUFzRDtJQUN0RCxPQUFPWSxDQUFBQSxHQUFBQSxpQkFBQUEsZ0JBQUFBLEVBQWlCcEI7QUFDMUIiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtbWF0Y2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEdyb3VwIH0gZnJvbSAnLi9yb3V0ZS1yZWdleCdcbmltcG9ydCB7IERlY29kZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFBhcmFtcyB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZlci9yZXF1ZXN0L3BhcmFtcydcbmltcG9ydCB7IHNhZmVSb3V0ZU1hdGNoZXIgfSBmcm9tICcuL3JvdXRlLW1hdGNoLXV0aWxzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlTWF0Y2hGbiB7XG4gIChwYXRobmFtZTogc3RyaW5nKTogZmFsc2UgfCBQYXJhbXNcbn1cblxudHlwZSBSb3V0ZU1hdGNoZXJPcHRpb25zID0ge1xuICAvLyBXZSBvbmx5IHVzZSB0aGUgZXhlYyBtZXRob2Qgb2YgdGhlIFJlZ0V4cCBvYmplY3QuIFRoaXMgaGVscHMgdXMgYXZvaWQgdXNpbmdcbiAgLy8gdHlwZSBhc3NlcnRpb25zIHRoYXQgdGhlIHBhc3NlZCBpbiBwcm9wZXJ0aWVzIGFyZSBvZiB0aGUgY29ycmVjdCB0eXBlLlxuICByZTogUGljazxSZWdFeHAsICdleGVjJz5cbiAgZ3JvdXBzOiBSZWNvcmQ8c3RyaW5nLCBHcm91cD5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdXRlTWF0Y2hlcih7XG4gIHJlLFxuICBncm91cHMsXG59OiBSb3V0ZU1hdGNoZXJPcHRpb25zKTogUm91dGVNYXRjaEZuIHtcbiAgY29uc3QgcmF3TWF0Y2hlciA9IChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgcm91dGVNYXRjaCA9IHJlLmV4ZWMocGF0aG5hbWUpXG4gICAgaWYgKCFyb3V0ZU1hdGNoKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGRlY29kZSA9IChwYXJhbTogc3RyaW5nKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBEZWNvZGVFcnJvcignZmFpbGVkIHRvIGRlY29kZSBwYXJhbScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBQYXJhbXMgPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwcykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gcm91dGVNYXRjaFtncm91cC5wb3NdXG4gICAgICBpZiAobWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoZ3JvdXAucmVwZWF0KSB7XG4gICAgICAgICAgcGFyYW1zW2tleV0gPSBtYXRjaC5zcGxpdCgnLycpLm1hcCgoZW50cnkpID0+IGRlY29kZShlbnRyeSkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyYW1zW2tleV0gPSBkZWNvZGUobWF0Y2gpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zXG4gIH1cblxuICAvLyBXcmFwIHdpdGggc2FmZSBtYXRjaGVyIHRvIGhhbmRsZSBwYXJhbWV0ZXIgY2xlYW5pbmdcbiAgcmV0dXJuIHNhZmVSb3V0ZU1hdGNoZXIocmF3TWF0Y2hlcilcbn1cbiJdLCJuYW1lcyI6WyJnZXRSb3V0ZU1hdGNoZXIiLCJyZSIsImdyb3VwcyIsInJhd01hdGNoZXIiLCJwYXRobmFtZSIsInJvdXRlTWF0Y2giLCJleGVjIiwiZGVjb2RlIiwicGFyYW0iLCJkZWNvZGVVUklDb21wb25lbnQiLCJEZWNvZGVFcnJvciIsInBhcmFtcyIsImtleSIsImdyb3VwIiwiT2JqZWN0IiwiZW50cmllcyIsIm1hdGNoIiwicG9zIiwidW5kZWZpbmVkIiwicmVwZWF0Iiwic3BsaXQiLCJtYXAiLCJlbnRyeSIsInNhZmVSb3V0ZU1hdGNoZXIiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-matcher.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-regex.js":
/*!**************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-regex.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 getNamedMiddlewareRegex: function() {\n return getNamedMiddlewareRegex;\n },\n getNamedRouteRegex: function() {\n return getNamedRouteRegex;\n },\n getRouteRegex: function() {\n return getRouteRegex;\n }\n});\nconst _constants = __webpack_require__(/*! ../../../../lib/constants */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/constants.js\");\nconst _interceptionroutes = __webpack_require__(/*! ./interception-routes */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/interception-routes.js\");\nconst _escaperegexp = __webpack_require__(/*! ../../escape-regexp */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/escape-regexp.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _getdynamicparam = __webpack_require__(/*! ./get-dynamic-param */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js\");\nfunction getParametrizedRoute(route, includeSuffix, includePrefix) {\n const groups = {};\n let groupIndex = 1;\n const segments = [];\n for (const segment of (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split('/')){\n const markerMatch = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n const paramMatches = segment.match(_getdynamicparam.PARAMETER_PATTERN) // Check for parameters\n ;\n if (markerMatch && paramMatches && paramMatches[2]) {\n const { key, optional, repeat } = (0, _getdynamicparam.parseMatchedParameter)(paramMatches[2]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(markerMatch) + \"([^/]+?)\");\n } else if (paramMatches && paramMatches[2]) {\n const { key, repeat, optional } = (0, _getdynamicparam.parseMatchedParameter)(paramMatches[2]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n if (includePrefix && paramMatches[1]) {\n segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(paramMatches[1]));\n }\n let s = repeat ? optional ? '(?:/(.+?))?' : '/(.+?)' : '/([^/]+?)';\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1);\n }\n segments.push(s);\n } else {\n segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(segment));\n }\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push((0, _escaperegexp.escapeStringRegexp)(paramMatches[3]));\n }\n }\n return {\n parameterizedRoute: segments.join(''),\n groups\n };\n}\nfunction getRouteRegex(normalizedRoute, param) {\n let { includeSuffix = false, includePrefix = false, excludeOptionalTrailingSlash = false } = param === void 0 ? {} : param;\n const { parameterizedRoute, groups } = getParametrizedRoute(normalizedRoute, includeSuffix, includePrefix);\n let re = parameterizedRoute;\n if (!excludeOptionalTrailingSlash) {\n re += '(?:/)?';\n }\n return {\n re: new RegExp(\"^\" + re + \"$\"),\n groups: groups\n };\n}\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */ function buildGetSafeRouteKey() {\n let i = 0;\n return ()=>{\n let routeKey = '';\n let j = ++i;\n while(j > 0){\n routeKey += String.fromCharCode(97 + (j - 1) % 26);\n j = Math.floor((j - 1) / 26);\n }\n return routeKey;\n };\n}\nfunction getSafeKeyFromSegment(param) {\n let { interceptionMarker, getSafeRouteKey, segment, routeKeys, keyPrefix, backreferenceDuplicateKeys } = param;\n const { key, optional, repeat } = (0, _getdynamicparam.parseMatchedParameter)(segment);\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, '');\n if (keyPrefix) {\n cleanedKey = \"\" + keyPrefix + cleanedKey;\n }\n let invalidKey = false;\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true;\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true;\n }\n if (invalidKey) {\n cleanedKey = getSafeRouteKey();\n }\n const duplicateKey = cleanedKey in routeKeys;\n if (keyPrefix) {\n routeKeys[cleanedKey] = \"\" + keyPrefix + key;\n } else {\n routeKeys[cleanedKey] = key;\n }\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker ? (0, _escaperegexp.escapeStringRegexp)(interceptionMarker) : '';\n let pattern;\n if (duplicateKey && backreferenceDuplicateKeys) {\n // Use a backreference to the key to ensure that the key is the same value\n // in each of the placeholders.\n pattern = \"\\\\k<\" + cleanedKey + \">\";\n } else if (repeat) {\n pattern = \"(?<\" + cleanedKey + \">.+?)\";\n } else {\n pattern = \"(?<\" + cleanedKey + \">[^/]+?)\";\n }\n return optional ? \"(?:/\" + interceptionPrefix + pattern + \")?\" : \"/\" + interceptionPrefix + pattern;\n}\nfunction getNamedParametrizedRoute(route, prefixRouteKeys, includeSuffix, includePrefix, backreferenceDuplicateKeys) {\n const getSafeRouteKey = buildGetSafeRouteKey();\n const routeKeys = {};\n const segments = [];\n for (const segment of (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split('/')){\n const hasInterceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m));\n const paramMatches = segment.match(_getdynamicparam.PARAMETER_PATTERN) // Check for parameters\n ;\n if (hasInterceptionMarker && paramMatches && paramMatches[2]) {\n // If there's an interception marker, add it to the segments.\n segments.push(getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker: paramMatches[1],\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys ? _constants.NEXT_INTERCEPTION_MARKER_PREFIX : undefined,\n backreferenceDuplicateKeys\n }));\n } else if (paramMatches && paramMatches[2]) {\n // If there's a prefix, add it to the segments if it's enabled.\n if (includePrefix && paramMatches[1]) {\n segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(paramMatches[1]));\n }\n let s = getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys ? _constants.NEXT_QUERY_PARAM_PREFIX : undefined,\n backreferenceDuplicateKeys\n });\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1);\n }\n segments.push(s);\n } else {\n segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(segment));\n }\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push((0, _escaperegexp.escapeStringRegexp)(paramMatches[3]));\n }\n }\n return {\n namedParameterizedRoute: segments.join(''),\n routeKeys\n };\n}\nfunction getNamedRouteRegex(normalizedRoute, options) {\n var _options_includeSuffix, _options_includePrefix, _options_backreferenceDuplicateKeys;\n const result = getNamedParametrizedRoute(normalizedRoute, options.prefixRouteKeys, (_options_includeSuffix = options.includeSuffix) != null ? _options_includeSuffix : false, (_options_includePrefix = options.includePrefix) != null ? _options_includePrefix : false, (_options_backreferenceDuplicateKeys = options.backreferenceDuplicateKeys) != null ? _options_backreferenceDuplicateKeys : false);\n let namedRegex = result.namedParameterizedRoute;\n if (!options.excludeOptionalTrailingSlash) {\n namedRegex += '(?:/)?';\n }\n return {\n ...getRouteRegex(normalizedRoute, options),\n namedRegex: \"^\" + namedRegex + \"$\",\n routeKeys: result.routeKeys\n };\n}\nfunction getNamedMiddlewareRegex(normalizedRoute, options) {\n const { parameterizedRoute } = getParametrizedRoute(normalizedRoute, false, false);\n const { catchAll = true } = options;\n if (parameterizedRoute === '/') {\n let catchAllRegex = catchAll ? '.*' : '';\n return {\n namedRegex: \"^/\" + catchAllRegex + \"$\"\n };\n }\n const { namedParameterizedRoute } = getNamedParametrizedRoute(normalizedRoute, false, false, false, false);\n let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : '';\n return {\n namedRegex: \"^\" + namedParameterizedRoute + catchAllGroupedRegex + \"$\"\n };\n} //# sourceMappingURL=route-regex.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtcmVnZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBaVdnQkEsdUJBQXVCO2VBQXZCQTs7SUE1QkFDLGtCQUFrQjtlQUFsQkE7O0lBN0xBQyxhQUFhO2VBQWJBOzs7dUNBcklUO2dEQUNvQzswQ0FDUjtpREFDQzs2Q0FDcUI7QUF5RXpELFNBQVNDLHFCQUNQQyxLQUFhLEVBQ2JDLGFBQXNCLEVBQ3RCQyxhQUFzQjtJQUV0QixNQUFNQyxTQUF5QyxDQUFDO0lBQ2hELElBQUlDLGFBQWE7SUFFakIsTUFBTUMsV0FBcUIsRUFBRTtJQUM3QixLQUFLLE1BQU1DLFdBQVdDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0JQLE9BQU9RLEtBQUssQ0FBQyxHQUFHQyxLQUFLLENBQUMsS0FBTTtRQUNwRSxNQUFNQyxjQUFjQyxvQkFBQUEsMEJBQTBCLENBQUNDLElBQUksQ0FBQyxDQUFDQyxJQUNuRFAsUUFBUVEsVUFBVSxDQUFDRDtRQUVyQixNQUFNRSxlQUFlVCxRQUFRVSxLQUFLLENBQUNDLGlCQUFBQSxpQkFBaUIsRUFBRSx1QkFBdUI7O1FBRTdFLElBQUlQLGVBQWVLLGdCQUFnQkEsWUFBWSxDQUFDLEVBQUUsRUFBRTtZQUNsRCxNQUFNLEVBQUVHLEdBQUcsRUFBRUMsUUFBUSxFQUFFQyxNQUFNLEVBQUUsR0FBR0MsQ0FBQUEsR0FBQUEsaUJBQUFBLHFCQUFBQSxFQUFzQk4sWUFBWSxDQUFDLEVBQUU7WUFDdkVaLE1BQU0sQ0FBQ2UsSUFBSSxHQUFHO2dCQUFFSSxLQUFLbEI7Z0JBQWNnQjtnQkFBUUQ7WUFBUztZQUNwRGQsU0FBU2tCLElBQUksQ0FBRSxNQUFHQyxDQUFBQSxHQUFB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O0FBQ0YiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtcmVnZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTkVYVF9JTlRFUkNFUFRJT05fTUFSS0VSX1BSRUZJWCxcbiAgTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVgsXG59IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUyB9IGZyb20gJy4vaW50ZXJjZXB0aW9uLXJvdXRlcydcbmltcG9ydCB7IGVzY2FwZVN0cmluZ1JlZ2V4cCB9IGZyb20gJy4uLy4uL2VzY2FwZS1yZWdleHAnXG5pbXBvcnQgeyByZW1vdmVUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi9yZW1vdmUtdHJhaWxpbmctc2xhc2gnXG5pbXBvcnQgeyBQQVJBTUVURVJfUEFUVEVSTiwgcGFyc2VNYXRjaGVkUGFyYW1ldGVyIH0gZnJvbSAnLi9nZXQtZHluYW1pYy1wYXJhbSdcblxuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XG4gIHBvczogbnVtYmVyXG4gIHJlcGVhdDogYm9vbGVhblxuICBvcHRpb25hbDogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlUmVnZXgge1xuICBncm91cHM6IHsgW2dyb3VwTmFtZTogc3RyaW5nXTogR3JvdXAgfVxuICByZTogUmVnRXhwXG59XG5cbnR5cGUgR2V0TmFtZWRSb3V0ZVJlZ2V4T3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHJlZml4IHRoZSByb3V0ZSBrZXlzIHdpdGggdGhlIE5FWFRfSU5URVJDRVBUSU9OX01BUktFUl9QUkVGSVhcbiAgICogb3IgTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVguIFRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIGNyZWF0aW5nIHRoZVxuICAgKiByb3V0ZXMtbWFuaWZlc3QgZHVyaW5nIHRoZSBidWlsZC5cbiAgICovXG4gIHByZWZpeFJvdXRlS2V5czogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHN1ZmZpeCBpbiB0aGUgcm91dGUgcmVnZXguIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHlvdVxuICAgKiBoYXZlIHNvbWV0aGluZyBsaWtlIGAvWy4uLnNsdWddLmpzb25gIHRoZSBgLmpzb25gIHBhcnQgd2lsbCBiZSBpbmNsdWRlZFxuICAgKiBpbiB0aGUgcmVnZXgsIHlpZWxkaW5nIGAvKC4qKS5qc29uYCBhcyB0aGUgcmVnZXguXG4gICAqL1xuICBpbmNsdWRlU3VmZml4PzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHByZWZpeCBpbiB0aGUgcm91dGUgcmVnZXguIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHlvdVxuICAgKiBoYXZlIHNvbWV0aGluZyBsaWtlIGAvWy4uLnNsdWddLmpzb25gIHRoZSBgL2AgcGFydCB3aWxsIGJlIGluY2x1ZGVkXG4gICAqIGluIHRoZSByZWdleCwgeWllbGRpbmcgYF4vKC4qKS5qc29uJGAgYXMgdGhlIHJlZ2V4LlxuICAgKlxuICAgKiBOb3RlIHRoYXQgaW50ZXJjZXB0aW9uIG1hcmtlcnMgd2lsbCBhbHJlYWR5IGJlIGluY2x1ZGVkIHdpdGhvdXQgdGhlIG5lZWRcbiAgICovXG4gIGluY2x1ZGVQcmVmaXg/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhjbHVkZSB0aGUgb3B0aW9uYWwgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgcm91dGUgcmVnZXguXG4gICAqL1xuICBleGNsdWRlT3B0aW9uYWxUcmFpbGluZ1NsYXNoPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGJhY2t0cmFjayBkdXBsaWNhdGUga2V5cy4gVGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gY3JlYXRpbmdcbiAgICogdGhlIHJvdXRlcy1tYW5pZmVzdCBkdXJpbmcgdGhlIGJ1aWxkLlxuICAgKi9cbiAgYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXM/OiBib29sZWFuXG59XG5cbnR5cGUgR2V0Um91dGVSZWdleE9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgZXh0cmEgcGFydHMgaW4gdGhlIHJvdXRlIHJlZ2V4LiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB5b3VcbiAgICogaGF2ZSBzb21ldGhpbmcgbGlrZSBgL1suLi5zbHVnXS5qc29uYCB0aGUgYC5qc29uYCBwYXJ0IHdpbGwgYmUgaW5jbHVkZWRcbiAgICogaW4gdGhlIHJlZ2V4LCB5aWVsZGluZyBgLyguKikuanNvbmAgYXMgdGhlIHJlZ2V4LlxuICAgKi9cbiAgaW5jbHVkZVN1ZmZpeD86IGJvb2xlYW5cblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBwcmVmaXggaW4gdGhlIHJvdXRlIHJlZ2V4LiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB5b3VcbiAgICogaGF2ZSBzb21ldGhpbmcgbGlrZSBgL1suLi5zbHVnXS5qc29uYCB0aGUgYC9gIHBhcnQgd2lsbCBiZSBpbmNsdWRlZFxuICAgKiBpbiB0aGUgcmVnZXgsIHlpZWxkaW5nIGBeLyguKikuanNvbiRgIGFzIHRoZSByZWdleC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGludGVyY2VwdGlvbiBtYXJrZXJzIHdpbGwgYWxyZWFkeSBiZSBpbmNsdWRlZCB3aXRob3V0IHRoZSBuZWVkXG4gICAqIG9mIGFkZGluZyB0aGlzIG9wdGlvbi5cbiAgICovXG4gIGluY2x1ZGVQcmVmaXg/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhjbHVkZSB0aGUgb3B0aW9uYWwgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgcm91dGUgcmVnZXguXG4gICAqL1xuICBleGNsdWRlT3B0aW9uYWxUcmFpbGluZ1NsYXNoPzogYm9vbGVhblxufVxuXG5mdW5jdGlvbiBnZXRQYXJhbWV0cml6ZWRSb3V0ZShcbiAgcm91dGU6IHN0cmluZyxcbiAgaW5jbHVkZVN1ZmZpeDogYm9vbGVhbixcbiAgaW5jbHVkZVByZWZpeDogYm9vbGVhblxuKSB7XG4gIGNvbnN0IGdyb3VwczogeyBbZ3JvdXBOYW1lOiBzdHJpbmddOiBHcm91cCB9ID0ge31cbiAgbGV0IGdyb3VwSW5kZXggPSAxXG5cbiAgY29uc3Qgc2VnbWVudHM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHJlbW92ZVRyYWlsaW5nU2xhc2gocm91dGUpLnNsaWNlKDEpLnNwbGl0KCcvJykpIHtcbiAgICBjb25zdCBtYXJrZXJNYXRjaCA9IElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLmZpbmQoKG0pID0+XG4gICAgICBzZWdtZW50LnN0YXJ0c1dpdGgobSlcbiAgICApXG4gICAgY29uc3QgcGFyYW1NYXRjaGVzID0gc2VnbWVudC5tYXRjaChQQVJBTUVURVJfUEFUVEVSTikgLy8gQ2hlY2sgZm9yIHBhcmFtZXRlcnNcblxuICAgIGlmIChtYXJrZXJNYXRjaCAmJiBwYXJhbU1hdGNoZXMgJiYgcGFyYW1NYXRjaGVzWzJdKSB7XG4gICAgICBjb25zdCB7IGtleSwgb3B0aW9uYWwsIHJlcGVhdCB9ID0gcGFyc2VNYXRjaGVkUGFyYW1ldGVyKHBhcmFtTWF0Y2hlc1syXSlcbiAgICAgIGdyb3Vwc1trZXldID0geyBwb3M6IGdyb3VwSW5kZXgrKywgcmVwZWF0LCBvcHRpb25hbCB9XG4gICAgICBzZWdtZW50cy5wdXNoKGAvJHtlc2NhcGVTdHJpbmdSZWdleHAobWFya2VyTWF0Y2gpfShbXi9dKz8pYClcbiAgICB9IGVsc2UgaWYgKHBhcmFtTWF0Y2hlcyAmJiBwYXJhbU1hdGNoZXNbMl0pIHtcbiAgICAgIGNvbnN0IHsga2V5LCByZXBlYXQsIG9wdGlvbmFsIH0gPSBwYXJzZU1hdGNoZWRQYXJhbWV0ZXIocGFyYW1NYXRjaGVzWzJdKVxuICAgICAgZ3JvdXBzW2tleV0gPSB7IHBvczogZ3JvdXBJbmRleCsrLCByZXBlYXQsIG9wdGlvbmFsIH1cblxuICAgICAgaWYgKGluY2x1ZGVQcmVmaXggJiYgcGFyYW1NYXRjaGVzWzFdKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goYC8ke2VzY2FwZVN0cmluZ1JlZ2V4cChwYXJhbU1hdGNoZXNbMV0pfWApXG4gICAgICB9XG5cbiAgICAgIGxldCBzID0gcmVwZWF0ID8gKG9wdGlvbmFsID8gJyg/Oi8oLis/KSk/JyA6ICcvKC4rPyknKSA6ICcvKFteL10rPyknXG5cbiAgICAgIC8vIFJlbW92ZSB0aGUgbGVhZGluZyBzbGFzaCBpZiBpbmNsdWRlUHJlZml4IGFscmVhZHkgYWRkZWQgaXQuXG4gICAgICBpZiAoaW5jbHVkZVByZWZpeCAmJiBwYXJhbU1hdGNoZXNbMV0pIHtcbiAgICAgICAgcyA9IHMuc3Vic3RyaW5nKDEpXG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnRzLnB1c2gocylcbiAgICB9IGVsc2Uge1xuICAgICAgc2VnbWVudHMucHVzaChgLyR7ZXNjYXBlU3RyaW5nUmVnZXhwKHNlZ21lbnQpfWApXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBhIHN1ZmZpeCwgYWRkIGl0IHRvIHRoZSBzZWdtZW50cyBpZiBpdCdzIGVuYWJsZWQuXG4gICAgaWYgKGluY2x1ZGVTdWZmaXggJiYgcGFyYW1NYXRjaGVzICYmIHBhcmFtTWF0Y2hlc1szXSkge1xuICAgICAgc2VnbWVudHMucHVzaChlc2NhcGVTdHJpbmdSZWdleHAocGFyYW1NYXRjaGVzWzNdKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlcml6ZWRSb3V0ZTogc2VnbWVudHMuam9pbignJyksXG4gICAgZ3JvdXBzLFxuICB9XG59XG5cbi8qKlxuICogRnJvbSBhIG5vcm1hbGl6ZWQgcm91dGUgdGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kXG4gKiBhIGNvcnJlc3BvbmRpbmcgZ3JvdXBzIG9iamVjdCBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHN0b3JlIG1hdGNoaW5nIGdyb3Vwc1xuICogZnJvbSB0aGUgcmVndWxhciBleHByZXNzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVSZWdleChcbiAgbm9ybWFsaXplZFJvdXRlOiBzdHJpbmcsXG4gIHtcbiAgICBpbmNsdWRlU3VmZml4ID0gZmFsc2UsXG4gICAgaW5jbHVkZVByZWZpeCA9IGZhbHNlLFxuICAgIGV4Y2x1ZGVPcHRpb25hbFRyYWlsaW5nU2xhc2ggPSBmYWxzZSxcbiAgfTogR2V0Um91dGVSZWdleE9wdGlvbnMgPSB7fVxuKTogUm91dGVSZWdleCB7XG4gIGNvbnN0IHsgcGFyYW1ldGVyaXplZFJvdXRlLCBncm91cHMgfSA9IGdldFBhcmFtZXRyaXplZFJvdXRlKFxuICAgIG5vcm1hbGl6ZWRSb3V0ZSxcbiAgICBpbmNsdWRlU3VmZml4LFxuICAgIGluY2x1ZGVQcmVmaXhcbiAgKVxuXG4gIGxldCByZSA9IHBhcmFtZXRlcml6ZWRSb3V0ZVxuICBpZiAoIWV4Y2x1ZGVPcHRpb25hbFRyYWlsaW5nU2xhc2gpIHtcbiAgICByZSArPSAnKD86Lyk/J1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZTogbmV3IFJlZ0V4cChgXiR7cmV9JGApLFxuICAgIGdyb3VwczogZ3JvdXBzLFxuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGEgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBtaW5pbWFsIHJvdXRlS2V5IHVzaW5nIG9ubHkgYS16IGFuZCBtaW5pbWFsXG4gKiBudW1iZXIgb2YgY2hhcmFjdGVycy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRHZXRTYWZlUm91dGVLZXkoKSB7XG4gIGxldCBpID0gMFxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgbGV0IHJvdXRlS2V5ID0gJydcbiAgICBsZXQgaiA9ICsraVxuICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgcm91dGVLZXkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg5NyArICgoaiAtIDEpICUgMjYpKVxuICAgICAgaiA9IE1hdGguZmxvb3IoKGogLSAxKSAvIDI2KVxuICAgIH1cbiAgICByZXR1cm4gcm91dGVLZXlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTYWZlS2V5RnJvbVNlZ21lbnQoe1xuICBpbnRlcmNlcHRpb25NYXJrZXIsXG4gIGdldFNhZmVSb3V0ZUtleSxcbiAgc2VnbWVudCxcbiAgcm91dGVLZXlzLFxuICBrZXlQcmVmaXgsXG4gIGJhY2tyZWZlcmVuY2VEdXBsaWNhdGVLZXlzLFxufToge1xuICBpbnRlcmNlcHRpb25NYXJrZXI/OiBzdHJpbmdcbiAgZ2V0U2FmZVJvdXRlS2V5OiAoKSA9PiBzdHJpbmdcbiAgc2VnbWVudDogc3RyaW5nXG4gIHJvdXRlS2V5czogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICBrZXlQcmVmaXg/OiBzdHJpbmdcbiAgYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXM6IGJvb2xlYW5cbn0pIHtcbiAgY29uc3QgeyBrZXksIG9wdGlvbmFsLCByZXBlYXQgfSA9IHBhcnNlTWF0Y2hlZFBhcmFtZXRlcihzZWdtZW50KVxuXG4gIC8vIHJlcGxhY2UgYW55IG5vbi13b3JkIGNoYXJhY3RlcnMgc2luY2UgdGhleSBjYW4gYnJlYWtcbiAgLy8gdGhlIG5hbWVkIHJlZ2V4XG4gIGxldCBjbGVhbmVkS2V5ID0ga2V5LnJlcGxhY2UoL1xcVy9nLCAnJylcblxuICBpZiAoa2V5UHJlZml4KSB7XG4gICAgY2xlYW5lZEtleSA9IGAke2tleVByZWZpeH0ke2NsZWFuZWRLZXl9YFxuICB9XG4gIGxldCBpbnZhbGlkS2V5ID0gZmFsc2VcblxuICAvLyBjaGVjayBpZiB0aGUga2V5IGlzIHN0aWxsIGludmFsaWQgYW5kIGZhbGxiYWNrIHRvIHVzaW5nIGEga25vd25cbiAgLy8gc2FmZSBrZXlcbiAgaWYgKGNsZWFuZWRLZXkubGVuZ3RoID09PSAwIHx8IGNsZWFuZWRLZXkubGVuZ3RoID4gMzApIHtcbiAgICBpbnZhbGlkS2V5ID0gdHJ1ZVxuICB9XG4gIGlmICghaXNOYU4ocGFyc2VJbnQoY2xlYW5lZEtleS5zbGljZSgwLCAxKSkpKSB7XG4gICAgaW52YWxpZEtleSA9IHRydWVcbiAgfVxuXG4gIGlmIChpbnZhbGlkS2V5KSB7XG4gICAgY2xlYW5lZEtleSA9IGdldFNhZmVSb3V0ZUtleSgpXG4gIH1cblxuICBjb25zdCBkdXBsaWNhdGVLZXkgPSBjbGVhbmVkS2V5IGluIHJvdXRlS2V5c1xuXG4gIGlmIChrZXlQcmVmaXgpIHtcbiAgICByb3V0ZUtleXNbY2xlYW5lZEtleV0gPSBgJHtrZXlQcmVmaXh9JHtrZXl9YFxuICB9IGVsc2Uge1xuICAgIHJvdXRlS2V5c1tjbGVhbmVkS2V5XSA9IGtleVxuICB9XG5cbiAgLy8gaWYgdGhlIHNlZ21lbnQgaGFzIGFuIGludGVyY2VwdGlvbiBtYXJrZXIsIG1ha2Ugc3VyZSB0aGF0J3MgcGFydCBvZiB0aGUgcmVnZXggcGF0dGVyblxuICAvLyB0aGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSByb3V0ZSB3aXRoIHRoZSBpbnRlcmNlcHRpb24gbWFya2VyIGRvZXNuJ3QgaW5jb3JyZWN0bHkgbWF0Y2hcbiAgLy8gdGhlIG5vbi1pbnRlcmNlcHRlZCByb3V0ZSAoaWUgL2FwcC8oLilbdXNlcm5hbWVdIHNob3VsZCBub3QgbWF0Y2ggL2FwcC9bdXNlcm5hbWVdKVxuICBjb25zdCBpbnRlcmNlcHRpb25QcmVmaXggPSBpbnRlcmNlcHRpb25NYXJrZXJcbiAgICA/IGVzY2FwZVN0cmluZ1JlZ2V4cChpbnRlcmNlcHRpb25NYXJrZXIpXG4gICAgOiAnJ1xuXG4gIGxldCBwYXR0ZXJuOiBzdHJpbmdcbiAgaWYgKGR1cGxpY2F0ZUtleSAmJiBiYWNrcmVmZXJlbmNlRHVwbGljYXRlS2V5cykge1xuICAgIC8vIFVzZSBhIGJhY2tyZWZlcmVuY2UgdG8gdGhlIGtleSB0byBlbnN1cmUgdGhhdCB0aGUga2V5IGlzIHRoZSBzYW1lIHZhbHVlXG4gICAgLy8gaW4gZWFjaCBvZiB0aGUgcGxhY2Vob2xkZXJzLlxuICAgIHBhdHRlcm4gPSBgXFxcXGs8JHtjbGVhbmVkS2V5fT5gXG4gIH0gZWxzZSBpZiAocmVwZWF0KSB7XG4gICAgcGF0dGVybiA9IGAoPzwke2NsZWFuZWRLZXl9Pi4rPylgXG4gIH0gZWxzZSB7XG4gICAgcGF0dGVybiA9IGAoPzwke2NsZWFuZWRLZXl9PlteL10rPylgXG4gIH1cblxuICByZXR1cm4gb3B0aW9uYWxcbiAgICA/IGAoPzovJHtpbnRlcmNlcHRpb25QcmVmaXh9JHtwYXR0ZXJufSk/YFxuICAgIDogYC8ke2ludGVyY2VwdGlvblByZWZpeH0ke3BhdHRlcm59YFxufVxuXG5mdW5jdGlvbiBnZXROYW1lZFBhcmFtZXRyaXplZFJvdXRlKFxuICByb3V0ZTogc3RyaW5nLFxuICBwcmVmaXhSb3V0ZUtleXM6IGJvb2xlYW4sXG4gIGluY2x1ZGVTdWZmaXg6IGJvb2xlYW4sXG4gIGluY2x1ZGVQcmVmaXg6IGJvb2xlYW4sXG4gIGJhY2tyZWZlcmVuY2VEdXBsaWNhdGVLZXlzOiBib29sZWFuXG4pIHtcbiAgY29uc3QgZ2V0U2FmZVJvdXRlS2V5ID0gYnVpbGRHZXRTYWZlUm91dGVLZXkoKVxuICBjb25zdCByb3V0ZUtleXM6IHsgW25hbWVkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9XG5cbiAgY29uc3Qgc2VnbWVudHM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHJlbW92ZVRyYWlsaW5nU2xhc2gocm91dGUpLnNsaWNlKDEpLnNwbGl0KCcvJykpIHtcbiAgICBjb25zdCBoYXNJbnRlcmNlcHRpb25NYXJrZXIgPSBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUy5zb21lKChtKSA9PlxuICAgICAgc2VnbWVudC5zdGFydHNXaXRoKG0pXG4gICAgKVxuXG4gICAgY29uc3QgcGFyYW1NYXRjaGVzID0gc2VnbWVudC5tYXRjaChQQVJBTUVURVJfUEFUVEVSTikgLy8gQ2hlY2sgZm9yIHBhcmFtZXRlcnNcblxuICAgIGlmIChoYXNJbnRlcmNlcHRpb25NYXJrZXIgJiYgcGFyYW1NYXRjaGVzICYmIHBhcmFtTWF0Y2hlc1syXSkge1xuICAgICAgLy8gSWYgdGhlcmUncyBhbiBpbnRlcmNlcHRpb24gbWFya2VyLCBhZGQgaXQgdG8gdGhlIHNlZ21lbnRzLlxuICAgICAgc2VnbWVudHMucHVzaChcbiAgICAgICAgZ2V0U2FmZUtleUZyb21TZWdtZW50KHtcbiAgICAgICAgICBnZXRTYWZlUm91dGVLZXksXG4gICAgICAgICAgaW50ZXJjZXB0aW9uTWFya2VyOiBwYXJhbU1hdGNoZXNbMV0sXG4gICAgICAgICAgc2VnbWVudDogcGFyYW1NYXRjaGVzWzJdLFxuICAgICAgICAgIHJvdXRlS2V5cyxcbiAgICAgICAgICBrZXlQcmVmaXg6IHByZWZpeFJvdXRlS2V5c1xuICAgICAgICAgICAgPyBORVhUX0lOVEVSQ0VQVElPTl9NQVJLRVJfUFJFRklYXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBiYWNrcmVmZXJlbmNlRHVwbGljYXRlS2V5cyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHBhcmFtTWF0Y2hlcyAmJiBwYXJhbU1hdGNoZXNbMl0pIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgYSBwcmVmaXgsIGFkZCBpdCB0byB0aGUgc2VnbWVudHMgaWYgaXQncyBlbmFibGVkLlxuICAgICAgaWYgKGluY2x1ZGVQcmVmaXggJiYgcGFyYW1NYXRjaGVzWzFdKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goYC8ke2VzY2FwZVN0cmluZ1JlZ2V4cChwYXJhbU1hdGNoZXNbMV0pfWApXG4gICAgICB9XG5cbiAgICAgIGxldCBzID0gZ2V0U2FmZUtleUZyb21TZWdtZW50KHtcbiAgICAgICAgZ2V0U2FmZVJvdXRlS2V5LFxuICAgICAgICBzZWdtZW50OiBwYXJhbU1hdGNoZXNbMl0sXG4gICAgICAgIHJvdXRlS2V5cyxcbiAgICAgICAga2V5UHJlZml4OiBwcmVmaXhSb3V0ZUtleXMgPyBORVhUX1FVRVJZX1BBUkFNX1BSRUZJWCA6IHVuZGVmaW5lZCxcbiAgICAgICAgYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXMsXG4gICAgICB9KVxuXG4gICAgICAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgc2xhc2ggaWYgaW5jbHVkZVByZWZpeCBhbHJlYWR5IGFkZGVkIGl0LlxuICAgICAgaWYgKGluY2x1ZGVQcmVmaXggJiYgcGFyYW1NYXRjaGVzWzFdKSB7XG4gICAgICAgIHMgPSBzLnN1YnN0cmluZygxKVxuICAgICAgfVxuXG4gICAgICBzZWdtZW50cy5wdXNoKHMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goYC8ke2VzY2FwZVN0cmluZ1JlZ2V4cChzZWdtZW50KX1gKVxuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3MgYSBzdWZmaXgsIGFkZCBpdCB0byB0aGUgc2VnbWVudHMgaWYgaXQncyBlbmFibGVkLlxuICAgIGlmIChpbmNsdWRlU3VmZml4ICYmIHBhcmFtTWF0Y2hlcyAmJiBwYXJhbU1hdGNoZXNbM10pIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goZXNjYXBlU3RyaW5nUmVnZXhwKHBhcmFtTWF0Y2hlc1szXSkpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lZFBhcmFtZXRlcml6ZWRSb3V0ZTogc2VnbWVudHMuam9pbignJyksXG4gICAgcm91dGVLZXlzLFxuICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBleHRlbmRzIGBnZXRSb3V0ZVJlZ2V4YCBnZW5lcmF0aW5nIGFsc28gYSBuYW1lZCByZWdleHAgd2hlcmVcbiAqIGVhY2ggZ3JvdXAgaXMgbmFtZWQgYWxvbmcgd2l0aCBhIHJvdXRlS2V5cyBvYmplY3QgdGhhdCBpbmRleGVzIHRoZSBhc3NpZ25lZFxuICogbmFtZWQgZ3JvdXAgd2l0aCBpdHMgY29ycmVzcG9uZGluZyBrZXkuIFdoZW4gdGhlIHJvdXRlS2V5cyBuZWVkIHRvIGJlXG4gKiBwcmVmaXhlZCB0byB1bmlxdWVseSBpZGVudGlmeSBpbnRlcm5hbGx5IHRoZSBcInByZWZpeFJvdXRlS2V5XCIgYXJnIHNob3VsZFxuICogYmUgXCJ0cnVlXCIgY3VycmVudGx5IHRoaXMgaXMgb25seSB0aGUgY2FzZSB3aGVuIGNyZWF0aW5nIHRoZSByb3V0ZXMtbWFuaWZlc3RcbiAqIGR1cmluZyB0aGUgYnVpbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkUm91dGVSZWdleChcbiAgbm9ybWFsaXplZFJvdXRlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEdldE5hbWVkUm91dGVSZWdleE9wdGlvbnNcbikge1xuICBjb25zdCByZXN1bHQgPSBnZXROYW1lZFBhcmFtZXRyaXplZFJvdXRlKFxuICAgIG5vcm1hbGl6ZWRSb3V0ZSxcbiAgICBvcHRpb25zLnByZWZpeFJvdXRlS2V5cyxcbiAgICBvcHRpb25zLmluY2x1ZGVTdWZmaXggPz8gZmFsc2UsXG4gICAgb3B0aW9ucy5pbmNsdWRlUHJlZml4ID8/IGZhbHNlLFxuICAgIG9wdGlvbnMuYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXMgPz8gZmFsc2VcbiAgKVxuXG4gIGxldCBuYW1lZFJlZ2V4ID0gcmVzdWx0Lm5hbWVkUGFyYW1ldGVyaXplZFJvdXRlXG4gIGlmICghb3B0aW9ucy5leGNsdWRlT3B0aW9uYWxUcmFpbGluZ1NsYXNoKSB7XG4gICAgbmFtZWRSZWdleCArPSAnKD86Lyk/J1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5nZXRSb3V0ZVJlZ2V4KG5vcm1hbGl6ZWRSb3V0ZSwgb3B0aW9ucyksXG4gICAgbmFtZWRSZWdleDogYF4ke25hbWVkUmVnZXh9JGAsXG4gICAgcm91dGVLZXlzOiByZXN1bHQucm91dGVLZXlzLFxuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbmFtZWQgcmVnZXhwLlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2luZyBmb3IgYnVpbGQgdGltZSBvbmx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRNaWRkbGV3YXJlUmVnZXgoXG4gIG5vcm1hbGl6ZWRSb3V0ZTogc3RyaW5nLFxuICBvcHRpb25zOiB7XG4gICAgY2F0Y2hBbGw/OiBib29sZWFuXG4gIH1cbikge1xuICBjb25zdCB7IHBhcmFtZXRlcml6ZWRSb3V0ZSB9ID0gZ2V0UGFyYW1ldHJpemVkUm91dGUoXG4gICAgbm9ybWFsaXplZFJvdXRlLFxuICAgIGZhbHNlLFxuICAgIGZhbHNlXG4gIClcbiAgY29uc3QgeyBjYXRjaEFsbCA9IHRydWUgfSA9IG9wdGlvbnNcbiAgaWYgKHBhcmFtZXRlcml6ZWRSb3V0ZSA9PT0gJy8nKSB7XG4gICAgbGV0IGNhdGNoQWxsUmVnZXggPSBjYXRjaEFsbCA/ICcuKicgOiAnJ1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lZFJlZ2V4OiBgXi8ke2NhdGNoQWxsUmVnZXh9JGAsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgeyBuYW1lZFBhcmFtZXRlcml6ZWRSb3V0ZSB9ID0gZ2V0TmFtZWRQYXJhbWV0cml6ZWRSb3V0ZShcbiAgICBub3JtYWxpemVkUm91dGUsXG4gICAgZmFsc2UsXG4gICAgZmFsc2UsXG4gICAgZmFsc2UsXG4gICAgZmFsc2VcbiAgKVxuICBsZXQgY2F0Y2hBbGxHcm91cGVkUmVnZXggPSBjYXRjaEFsbCA/ICcoPzooLy4qKT8pJyA6ICcnXG4gIHJldHVybiB7XG4gICAgbmFtZWRSZWdleDogYF4ke25hbWVkUGFyYW1ldGVyaXplZFJvdXRlfSR7Y2F0Y2hBbGxHcm91cGVkUmVnZXh9JGAsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJnZXROYW1lZE1pZGRsZXdhcmVSZWdleCIsImdldE5hbWVkUm91dGVSZWdleCIsImdldFJvdXRlUmVnZXgiLCJnZXRQYXJhbWV0cml6ZWRSb3V0ZSIsInJvdXRlIiwiaW5jbHVkZVN1ZmZpeCIsImluY2x1ZGVQcmVmaXgiLCJncm91cHMiLCJncm91cEluZGV4Iiwic2VnbWVudHMiLCJzZWdtZW50IiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsInNsaWNlIiwic3BsaXQiLCJtYXJrZXJNYXRjaCIsIklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTIiwiZmluZCIsIm0iLCJzdGFydHNXaXRoIiwicGFyYW1NYXRjaGVzIiwibWF0Y2giLCJQQVJBTUVURVJfUEFUVEVSTiIsImtleSIsIm9wdGlvbmFsIiwicmVwZWF0IiwicGFyc2VNYXRjaGVkUGFyYW1ldGVyIiwicG9zIiwicHVzaCIsImVzY2FwZVN0cmluZ1JlZ2V4cCIsInMiLCJzdWJzdHJpbmciLCJwYXJhbWV0ZXJpemVkUm91dGUiLCJqb2luIiwibm9ybWFsaXplZFJvdXRlIiwiZXhjbHVkZU9wdGlvbmFsVHJhaWxpbmdTbGFzaCIsInJlIiwiUmVnRXhwIiwiYnVpbGRHZXRTYWZlUm91dGVLZXkiLCJpIiwicm91dGVLZXkiLCJqIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiTWF0aCIsImZsb29yIiwiZ2V0U2FmZUtleUZyb21TZWdtZW50IiwiaW50ZXJjZXB0aW9uTWFya2VyIiwiZ2V0U2FmZVJvdXRlS2V5Iiwicm91dGVLZXlzIiwia2V5UHJlZml4IiwiYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXMiLCJjbGVhbmVkS2V5IiwicmVwbGFjZSIsImludmFsaWRLZXkiLCJsZW5ndGgiLCJpc05hTiIsInBhcnNlSW50IiwiZHVwbGljYXRlS2V5IiwiaW50ZXJjZXB0aW9uUHJlZml4IiwicGF0dGVybiIsImdldE5hbWVkUGFyYW1ldHJpemVkUm91dGUiLCJwcmVmaXhSb3V0ZUtleXMiLCJoYXNJbnRlcmNlcHRpb25NYXJrZXIiLCJzb21lIiwiTkVYVF9JTlRFUkNFUFRJT05fTUFSS0VSX1BSRUZJWCIsInVuZGVmaW5lZCIsIk5FWFRfUVVFUllfUEFSQU1fUFJFRklYIiwibmFtZWRQYXJhbWV0ZXJpemVkUm91dGUiLCJvcHRpb25zIiwicmVzdWx0IiwibmFtZWRSZWdleCIsImNhdGNoQWxsIiwiY2F0Y2hBbGxSZWdleCIsImNhdGNoQWxsR3JvdXBlZFJlZ2V4Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-regex.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js":
/*!****************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/sorted-routes.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 getSortedRouteObjects: function() {\n return getSortedRouteObjects;\n },\n getSortedRoutes: function() {\n return getSortedRoutes;\n }\n});\nclass UrlNode {\n insert(urlPath) {\n this._insert(urlPath.split('/').filter(Boolean), [], false);\n }\n smoosh() {\n return this._smoosh();\n }\n _smoosh(prefix) {\n if (prefix === void 0) prefix = '/';\n const childrenPaths = [\n ...this.children.keys()\n ].sort();\n if (this.slugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[]'), 1);\n }\n if (this.restSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[...]'), 1);\n }\n if (this.optionalRestSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[[...]]'), 1);\n }\n const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(\"\" + prefix + c + \"/\")).reduce((prev, curr)=>[\n ...prev,\n ...curr\n ], []);\n if (this.slugName !== null) {\n routes.push(...this.children.get('[]')._smoosh(prefix + \"[\" + this.slugName + \"]/\"));\n }\n if (!this.placeholder) {\n const r = prefix === '/' ? '/' : prefix.slice(0, -1);\n if (this.optionalRestSlugName != null) {\n throw Object.defineProperty(new Error('You cannot define a route with the same specificity as a optional catch-all route (\"' + r + '\" and \"' + r + \"[[...\" + this.optionalRestSlugName + ']]\").'), \"__NEXT_ERROR_CODE\", {\n value: \"E458\",\n enumerable: false,\n configurable: true\n });\n }\n routes.unshift(r);\n }\n if (this.restSlugName !== null) {\n routes.push(...this.children.get('[...]')._smoosh(prefix + \"[...\" + this.restSlugName + \"]/\"));\n }\n if (this.optionalRestSlugName !== null) {\n routes.push(...this.children.get('[[...]]')._smoosh(prefix + \"[[...\" + this.optionalRestSlugName + \"]]/\"));\n }\n return routes;\n }\n _insert(urlPaths, slugNames, isCatchAll) {\n if (urlPaths.length === 0) {\n this.placeholder = false;\n return;\n }\n if (isCatchAll) {\n throw Object.defineProperty(new Error(\"Catch-all must be the last part of the URL.\"), \"__NEXT_ERROR_CODE\", {\n value: \"E392\",\n enumerable: false,\n configurable: true\n });\n }\n // The next segment in the urlPaths list\n let nextSegment = urlPaths[0];\n // Check if the segment matches `[something]`\n if (nextSegment.startsWith('[') && nextSegment.endsWith(']')) {\n // Strip `[` and `]`, leaving only `something`\n let segmentName = nextSegment.slice(1, -1);\n let isOptional = false;\n if (segmentName.startsWith('[') && segmentName.endsWith(']')) {\n // Strip optional `[` and `]`, leaving only `something`\n segmentName = segmentName.slice(1, -1);\n isOptional = true;\n }\n if (segmentName.startsWith('…')) {\n throw Object.defineProperty(new Error(\"Detected a three-dot character ('…') at ('\" + segmentName + \"'). Did you mean ('...')?\"), \"__NEXT_ERROR_CODE\", {\n value: \"E147\",\n enumerable: false,\n configurable: true\n });\n }\n if (segmentName.startsWith('...')) {\n // Strip `...`, leaving only `something`\n segmentName = segmentName.substring(3);\n isCatchAll = true;\n }\n if (segmentName.startsWith('[') || segmentName.endsWith(']')) {\n throw Object.defineProperty(new Error(\"Segment names may not start or end with extra brackets ('\" + segmentName + \"').\"), \"__NEXT_ERROR_CODE\", {\n value: \"E421\",\n enumerable: false,\n configurable: true\n });\n }\n if (segmentName.startsWith('.')) {\n throw Object.defineProperty(new Error(\"Segment names may not start with erroneous periods ('\" + segmentName + \"').\"), \"__NEXT_ERROR_CODE\", {\n value: \"E288\",\n enumerable: false,\n configurable: true\n });\n }\n function handleSlug(previousSlug, nextSlug) {\n if (previousSlug !== null) {\n // If the specific segment already has a slug but the slug is not `something`\n // This prevents collisions like:\n // pages/[post]/index.js\n // pages/[id]/index.js\n // Because currently multiple dynamic params on the same segment level are not supported\n if (previousSlug !== nextSlug) {\n // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment.\n throw Object.defineProperty(new Error(\"You cannot use different slug names for the same dynamic path ('\" + previousSlug + \"' !== '\" + nextSlug + \"').\"), \"__NEXT_ERROR_CODE\", {\n value: \"E337\",\n enumerable: false,\n configurable: true\n });\n }\n }\n slugNames.forEach((slug)=>{\n if (slug === nextSlug) {\n throw Object.defineProperty(new Error('You cannot have the same slug name \"' + nextSlug + '\" repeat within a single dynamic path'), \"__NEXT_ERROR_CODE\", {\n value: \"E247\",\n enumerable: false,\n configurable: true\n });\n }\n if (slug.replace(/\\W/g, '') === nextSegment.replace(/\\W/g, '')) {\n throw Object.defineProperty(new Error('You cannot have the slug names \"' + slug + '\" and \"' + nextSlug + '\" differ only by non-word symbols within a single dynamic path'), \"__NEXT_ERROR_CODE\", {\n value: \"E499\",\n enumerable: false,\n configurable: true\n });\n }\n });\n slugNames.push(nextSlug);\n }\n if (isCatchAll) {\n if (isOptional) {\n if (this.restSlugName != null) {\n throw Object.defineProperty(new Error('You cannot use both an required and optional catch-all route at the same level (\"[...' + this.restSlugName + ']\" and \"' + urlPaths[0] + '\" ).'), \"__NEXT_ERROR_CODE\", {\n value: \"E299\",\n enumerable: false,\n configurable: true\n });\n }\n handleSlug(this.optionalRestSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.optionalRestSlugName = segmentName;\n // nextSegment is overwritten to [[...]] so that it can later be sorted specifically\n nextSegment = '[[...]]';\n } else {\n if (this.optionalRestSlugName != null) {\n throw Object.defineProperty(new Error('You cannot use both an optional and required catch-all route at the same level (\"[[...' + this.optionalRestSlugName + ']]\" and \"' + urlPaths[0] + '\").'), \"__NEXT_ERROR_CODE\", {\n value: \"E300\",\n enumerable: false,\n configurable: true\n });\n }\n handleSlug(this.restSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.restSlugName = segmentName;\n // nextSegment is overwritten to [...] so that it can later be sorted specifically\n nextSegment = '[...]';\n }\n } else {\n if (isOptional) {\n throw Object.defineProperty(new Error('Optional route parameters are not yet supported (\"' + urlPaths[0] + '\").'), \"__NEXT_ERROR_CODE\", {\n value: \"E435\",\n enumerable: false,\n configurable: true\n });\n }\n handleSlug(this.slugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.slugName = segmentName;\n // nextSegment is overwritten to [] so that it can later be sorted specifically\n nextSegment = '[]';\n }\n }\n // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode\n if (!this.children.has(nextSegment)) {\n this.children.set(nextSegment, new UrlNode());\n }\n this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll);\n }\n constructor(){\n this.placeholder = true;\n this.children = new Map();\n this.slugName = null;\n this.restSlugName = null;\n this.optionalRestSlugName = null;\n }\n}\nfunction getSortedRoutes(normalizedPages) {\n // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment\n // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js\n // Only 1 dynamic segment per nesting level\n // So in the case that is test/integration/dynamic-routing it'll be this:\n // pages/[post]/comments.js\n // pages/blog/[post]/comment/[id].js\n // Both are fine because `pages/[post]` and `pages/blog` are on the same level\n // So in this case `UrlNode` created here has `this.slugName === 'post'`\n // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities\n // Instead what has to be passed through is the upwards path's dynamic names\n const root = new UrlNode();\n // Here the `root` gets injected multiple paths, and insert will break them up into sublevels\n normalizedPages.forEach((pagePath)=>root.insert(pagePath));\n // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority\n return root.smoosh();\n}\nfunction getSortedRouteObjects(objects, getter) {\n // We're assuming here that all the pathnames are unique, that way we can\n // sort the list and use the index as the key.\n const indexes = {};\n const pathnames = [];\n for(let i = 0; i < objects.length; i++){\n const pathname = getter(objects[i]);\n indexes[pathname] = i;\n pathnames[i] = pathname;\n }\n // Sort the pathnames.\n const sorted = getSortedRoutes(pathnames);\n // Map the sorted pathnames back to the original objects using the new sorted\n // index.\n return sorted.map((pathname)=>objects[indexes[pathname]]);\n} //# sourceMappingURL=sorted-routes.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvc29ydGVkLXJvdXRlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUF1T2dCQSxxQkFBcUI7ZUFBckJBOztJQXpCQUMsZUFBZTtlQUFmQTs7O0FBOU1oQixNQUFNQztJQU9KQyxPQUFPQyxPQUFlLEVBQVE7UUFDNUIsSUFBSSxDQUFDQyxPQUFPLENBQUNELFFBQVFFLEtBQUssQ0FBQyxLQUFLQyxNQUFNLENBQUNDLFVBQVUsRUFBRSxFQUFFO0lBQ3ZEO0lBRUFDLFNBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDQyxPQUFPO0lBQ3JCO0lBRVFBLFFBQVFDLE1BQW9CLEVBQVk7UUFBaENBLElBQUFBLFdBQUFBLEtBQUFBLEdBQUFBLFNBQWlCO1FBQy9CLE1BQU1DLGdCQUFnQjtlQUFJLElBQUksQ0FBQ0MsUUFBUSxDQUFDQyxJQUFJO1NBQUcsQ0FBQ0MsSUFBSTtRQUNwRCxJQUFJLElBQUksQ0FBQ0MsUUFBUSxLQUFLLE1BQU07WUFDMUJKLGNBQWNLLE1BQU0sQ0FBQ0wsY0FBY00sT0FBTyxDQUFDLE9BQU87UUFDcEQ7UUFDQSxJQUFJLElBQUksQ0FBQ0MsWUFBWSxLQUFLLE1BQU07WUFDOUJQLGNBQWNLLE1BQU0sQ0FBQ0wsY0FBY00sT0FBTyxDQUFDLFVBQVU7UUFDdkQ7UUFDQSxJQUFJLElBQUksQ0FBQ0Usb0JBQW9CLEtBQUssTUFBTTtZQUN0Q1IsY0FBY0ssTUFBTSxDQUFDTCxjQUFjTSxPQUFPLENBQUMsWUFBWTtRQUN6RDtRQUVBLE1BQU1HLFNBQVNULGNBQ1pVLEdBQUcsQ0FBQyxDQUFDQyxJQUFNLElBQUksQ0FBQ1YsUUFBUSxDQUFDVyxHQUFHLENBQUNELEdBQUliLE9BQU8sQ0FBRSxLQUFF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ZUFBc0M7SUFFdEMsa0ZBQWtGO0lBQ2xGLDRFQUE0RTtJQUM1RSwyQ0FBMkM7SUFFM0MseUVBQXlFO0lBQ3pFLDJCQUEyQjtJQUMzQixvQ0FBb0M7SUFDcEMsOEVBQThFO0lBQzlFLHdFQUF3RTtJQUN4RSxnSEFBZ0g7SUFDaEgsNEVBQTRFO0lBQzVFLE1BQU1DLE9BQU8sSUFBSXBEO0lBRWpCLDZGQUE2RjtJQUM3Rm1ELGdCQUFnQk4sT0FBTyxDQUFDLENBQUNRLFdBQWFELEtBQUtuRCxNQUFNLENBQUNvRDtJQUNsRCw0R0FBNEc7SUFDNUcsT0FBT0QsS0FBSzdDLE1BQU07QUFDcEI7QUFLTyxTQUFTVCxzQkFDZHdELE9BQVksRUFDWkMsTUFBMEI7SUFFMUIseUVBQXlFO0lBQ3pFLDhDQUE4QztJQUM5QyxNQUFNQyxVQUFrQyxDQUFDO0lBQ3pDLE1BQU1DLFlBQXNCLEVBQUU7SUFDOUIsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUlKLFFBQVFuQixNQUFNLEVBQUV1QixJQUFLO1FBQ3ZDLE1BQU1DLFdBQVdKLE9BQU9ELE9BQU8sQ0FBQ0ksRUFBRTtRQUNsQ0YsT0FBTyxDQUFDRyxTQUFTLEdBQUdEO1FBQ3BCRCxTQUFTLENBQUNDLEVBQUUsR0FBR0M7SUFDakI7SUFFQSxzQkFBc0I7SUFDdEIsTUFBTUMsU0FBUzdELGdCQUFnQjBEO0lBRS9CLDZFQUE2RTtJQUM3RSxTQUFTO0lBQ1QsT0FBT0csT0FBT3hDLEdBQUcsQ0FBQyxDQUFDdUMsV0FBYUwsT0FBTyxDQUFDRSxPQUFPLENBQUNHLFNBQVMsQ0FBQztBQUM1RCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9zb3J0ZWQtcm91dGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIFVybE5vZGUge1xuICBwbGFjZWhvbGRlcjogYm9vbGVhbiA9IHRydWVcbiAgY2hpbGRyZW46IE1hcDxzdHJpbmcsIFVybE5vZGU+ID0gbmV3IE1hcCgpXG4gIHNsdWdOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICByZXN0U2x1Z05hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIG9wdGlvbmFsUmVzdFNsdWdOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuXG4gIGluc2VydCh1cmxQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnNlcnQodXJsUGF0aC5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKSwgW10sIGZhbHNlKVxuICB9XG5cbiAgc21vb3NoKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc21vb3NoKClcbiAgfVxuXG4gIHByaXZhdGUgX3Ntb29zaChwcmVmaXg6IHN0cmluZyA9ICcvJyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjaGlsZHJlblBhdGhzID0gWy4uLnRoaXMuY2hpbGRyZW4ua2V5cygpXS5zb3J0KClcbiAgICBpZiAodGhpcy5zbHVnTmFtZSAhPT0gbnVsbCkge1xuICAgICAgY2hpbGRyZW5QYXRocy5zcGxpY2UoY2hpbGRyZW5QYXRocy5pbmRleE9mKCdbXScpLCAxKVxuICAgIH1cbiAgICBpZiAodGhpcy5yZXN0U2x1Z05hbWUgIT09IG51bGwpIHtcbiAgICAgIGNoaWxkcmVuUGF0aHMuc3BsaWNlKGNoaWxkcmVuUGF0aHMuaW5kZXhPZignWy4uLl0nKSwgMSlcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgIT09IG51bGwpIHtcbiAgICAgIGNoaWxkcmVuUGF0aHMuc3BsaWNlKGNoaWxkcmVuUGF0aHMuaW5kZXhPZignW1suLi5dXScpLCAxKVxuICAgIH1cblxuICAgIGNvbnN0IHJvdXRlcyA9IGNoaWxkcmVuUGF0aHNcbiAgICAgIC5tYXAoKGMpID0+IHRoaXMuY2hpbGRyZW4uZ2V0KGMpIS5fc21vb3NoKGAke3ByZWZpeH0ke2N9L2ApKVxuICAgICAgLnJlZHVjZSgocHJldiwgY3VycikgPT4gWy4uLnByZXYsIC4uLmN1cnJdLCBbXSlcblxuICAgIGlmICh0aGlzLnNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICByb3V0ZXMucHVzaChcbiAgICAgICAgLi4udGhpcy5jaGlsZHJlbi5nZXQoJ1tdJykhLl9zbW9vc2goYCR7cHJlZml4fVske3RoaXMuc2x1Z05hbWV9XS9gKVxuICAgICAgKVxuICAgIH1cblxuICAgIGlmICghdGhpcy5wbGFjZWhvbGRlcikge1xuICAgICAgY29uc3QgciA9IHByZWZpeCA9PT0gJy8nID8gJy8nIDogcHJlZml4LnNsaWNlKDAsIC0xKVxuICAgICAgaWYgKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgIT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFlvdSBjYW5ub3QgZGVmaW5lIGEgcm91dGUgd2l0aCB0aGUgc2FtZSBzcGVjaWZpY2l0eSBhcyBhIG9wdGlvbmFsIGNhdGNoLWFsbCByb3V0ZSAoXCIke3J9XCIgYW5kIFwiJHtyfVtbLi4uJHt0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lfV1dXCIpLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICByb3V0ZXMudW5zaGlmdChyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc3RTbHVnTmFtZSAhPT0gbnVsbCkge1xuICAgICAgcm91dGVzLnB1c2goXG4gICAgICAgIC4uLnRoaXMuY2hpbGRyZW5cbiAgICAgICAgICAuZ2V0KCdbLi4uXScpIVxuICAgICAgICAgIC5fc21vb3NoKGAke3ByZWZpeH1bLi4uJHt0aGlzLnJlc3RTbHVnTmFtZX1dL2ApXG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgIT09IG51bGwpIHtcbiAgICAgIHJvdXRlcy5wdXNoKFxuICAgICAgICAuLi50aGlzLmNoaWxkcmVuXG4gICAgICAgICAgLmdldCgnW1suLi5dXScpIVxuICAgICAgICAgIC5fc21vb3NoKGAke3ByZWZpeH1bWy4uLiR7dGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZX1dXS9gKVxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiByb3V0ZXNcbiAgfVxuXG4gIHByaXZhdGUgX2luc2VydChcbiAgICB1cmxQYXRoczogc3RyaW5nW10sXG4gICAgc2x1Z05hbWVzOiBzdHJpbmdbXSxcbiAgICBpc0NhdGNoQWxsOiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGlmICh1cmxQYXRocy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzQ2F0Y2hBbGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2F0Y2gtYWxsIG11c3QgYmUgdGhlIGxhc3QgcGFydCBvZiB0aGUgVVJMLmApXG4gICAgfVxuXG4gICAgLy8gVGhlIG5leHQgc2VnbWVudCBpbiB0aGUgdXJsUGF0aHMgbGlzdFxuICAgIGxldCBuZXh0U2VnbWVudCA9IHVybFBhdGhzWzBdXG5cbiAgICAvLyBDaGVjayBpZiB0aGUgc2VnbWVudCBtYXRjaGVzIGBbc29tZXRoaW5nXWBcbiAgICBpZiAobmV4dFNlZ21lbnQuc3RhcnRzV2l0aCgnWycpICYmIG5leHRTZWdtZW50LmVuZHNXaXRoKCddJykpIHtcbiAgICAgIC8vIFN0cmlwIGBbYCBhbmQgYF1gLCBsZWF2aW5nIG9ubHkgYHNvbWV0aGluZ2BcbiAgICAgIGxldCBzZWdtZW50TmFtZSA9IG5leHRTZWdtZW50LnNsaWNlKDEsIC0xKVxuXG4gICAgICBsZXQgaXNPcHRpb25hbCA9IGZhbHNlXG4gICAgICBpZiAoc2VnbWVudE5hbWUuc3RhcnRzV2l0aCgnWycpICYmIHNlZ21lbnROYW1lLmVuZHNXaXRoKCddJykpIHtcbiAgICAgICAgLy8gU3RyaXAgb3B0aW9uYWwgYFtgIGFuZCBgXWAsIGxlYXZpbmcgb25seSBgc29tZXRoaW5nYFxuICAgICAgICBzZWdtZW50TmFtZSA9IHNlZ21lbnROYW1lLnNsaWNlKDEsIC0xKVxuICAgICAgICBpc09wdGlvbmFsID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudE5hbWUuc3RhcnRzV2l0aCgn4oCmJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBEZXRlY3RlZCBhIHRocmVlLWRvdCBjaGFyYWN0ZXIgKCfigKYnKSBhdCAoJyR7c2VnbWVudE5hbWV9JykuIERpZCB5b3UgbWVhbiAoJy4uLicpP2BcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudE5hbWUuc3RhcnRzV2l0aCgnLi4uJykpIHtcbiAgICAgICAgLy8gU3RyaXAgYC4uLmAsIGxlYXZpbmcgb25seSBgc29tZXRoaW5nYFxuICAgICAgICBzZWdtZW50TmFtZSA9IHNlZ21lbnROYW1lLnN1YnN0cmluZygzKVxuICAgICAgICBpc0NhdGNoQWxsID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudE5hbWUuc3RhcnRzV2l0aCgnWycpIHx8IHNlZ21lbnROYW1lLmVuZHNXaXRoKCddJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBTZWdtZW50IG5hbWVzIG1heSBub3Qgc3RhcnQgb3IgZW5kIHdpdGggZXh0cmEgYnJhY2tldHMgKCcke3NlZ21lbnROYW1lfScpLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudE5hbWUuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2VnbWVudCBuYW1lcyBtYXkgbm90IHN0YXJ0IHdpdGggZXJyb25lb3VzIHBlcmlvZHMgKCcke3NlZ21lbnROYW1lfScpLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVTbHVnKHByZXZpb3VzU2x1Zzogc3RyaW5nIHwgbnVsbCwgbmV4dFNsdWc6IHN0cmluZykge1xuICAgICAgICBpZiAocHJldmlvdXNTbHVnICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNwZWNpZmljIHNlZ21lbnQgYWxyZWFkeSBoYXMgYSBzbHVnIGJ1dCB0aGUgc2x1ZyBpcyBub3QgYHNvbWV0aGluZ2BcbiAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIGNvbGxpc2lvbnMgbGlrZTpcbiAgICAgICAgICAvLyBwYWdlcy9bcG9zdF0vaW5kZXguanNcbiAgICAgICAgICAvLyBwYWdlcy9baWRdL2luZGV4LmpzXG4gICAgICAgICAgLy8gQmVjYXVzZSBjdXJyZW50bHkgbXVsdGlwbGUgZHluYW1pYyBwYXJhbXMgb24gdGhlIHNhbWUgc2VnbWVudCBsZXZlbCBhcmUgbm90IHN1cHBvcnRlZFxuICAgICAgICAgIGlmIChwcmV2aW91c1NsdWcgIT09IG5leHRTbHVnKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGVycm9yIHNlZW1zIHRvIGJlIGNvbmZ1c2luZyBmb3IgdXNlcnMsIG5lZWRzIGFuIGVycm9yIGxpbmssIHRoZSBkZXNjcmlwdGlvbiBjYW4gYmUgYmFzZWQgb24gYWJvdmUgY29tbWVudC5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFlvdSBjYW5ub3QgdXNlIGRpZmZlcmVudCBzbHVnIG5hbWVzIGZvciB0aGUgc2FtZSBkeW5hbWljIHBhdGggKCcke3ByZXZpb3VzU2x1Z30nICE9PSAnJHtuZXh0U2x1Z30nKS5gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2x1Z05hbWVzLmZvckVhY2goKHNsdWcpID0+IHtcbiAgICAgICAgICBpZiAoc2x1ZyA9PT0gbmV4dFNsdWcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFlvdSBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBzbHVnIG5hbWUgXCIke25leHRTbHVnfVwiIHJlcGVhdCB3aXRoaW4gYSBzaW5nbGUgZHluYW1pYyBwYXRoYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzbHVnLnJlcGxhY2UoL1xcVy9nLCAnJykgPT09IG5leHRTZWdtZW50LnJlcGxhY2UoL1xcVy9nLCAnJykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFlvdSBjYW5ub3QgaGF2ZSB0aGUgc2x1ZyBuYW1lcyBcIiR7c2x1Z31cIiBhbmQgXCIke25leHRTbHVnfVwiIGRpZmZlciBvbmx5IGJ5IG5vbi13b3JkIHN5bWJvbHMgd2l0aGluIGEgc2luZ2xlIGR5bmFtaWMgcGF0aGBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgc2x1Z05hbWVzLnB1c2gobmV4dFNsdWcpXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0NhdGNoQWxsKSB7XG4gICAgICAgIGlmIChpc09wdGlvbmFsKSB7XG4gICAgICAgICAgaWYgKHRoaXMucmVzdFNsdWdOYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFlvdSBjYW5ub3QgdXNlIGJvdGggYW4gcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGNhdGNoLWFsbCByb3V0ZSBhdCB0aGUgc2FtZSBsZXZlbCAoXCJbLi4uJHt0aGlzLnJlc3RTbHVnTmFtZX1dXCIgYW5kIFwiJHt1cmxQYXRoc1swXX1cIiApLmBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBoYW5kbGVTbHVnKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUsIHNlZ21lbnROYW1lKVxuICAgICAgICAgIC8vIHNsdWdOYW1lIGlzIGtlcHQgYXMgaXQgY2FuIG9ubHkgYmUgb25lIHBhcnRpY3VsYXIgc2x1Z05hbWVcbiAgICAgICAgICB0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lID0gc2VnbWVudE5hbWVcbiAgICAgICAgICAvLyBuZXh0U2VnbWVudCBpcyBvdmVyd3JpdHRlbiB0byBbWy4uLl1dIHNvIHRoYXQgaXQgY2FuIGxhdGVyIGJlIHNvcnRlZCBzcGVjaWZpY2FsbHlcbiAgICAgICAgICBuZXh0U2VnbWVudCA9ICdbWy4uLl1dJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFlvdSBjYW5ub3QgdXNlIGJvdGggYW4gb3B0aW9uYWwgYW5kIHJlcXVpcmVkIGNhdGNoLWFsbCByb3V0ZSBhdCB0aGUgc2FtZSBsZXZlbCAoXCJbWy4uLiR7dGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZX1dXVwiIGFuZCBcIiR7dXJsUGF0aHNbMF19XCIpLmBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBoYW5kbGVTbHVnKHRoaXMucmVzdFNsdWdOYW1lLCBzZWdtZW50TmFtZSlcbiAgICAgICAgICAvLyBzbHVnTmFtZSBpcyBrZXB0IGFzIGl0IGNhbiBvbmx5IGJlIG9uZSBwYXJ0aWN1bGFyIHNsdWdOYW1lXG4gICAgICAgICAgdGhpcy5yZXN0U2x1Z05hbWUgPSBzZWdtZW50TmFtZVxuICAgICAgICAgIC8vIG5leHRTZWdtZW50IGlzIG92ZXJ3cml0dGVuIHRvIFsuLi5dIHNvIHRoYXQgaXQgY2FuIGxhdGVyIGJlIHNvcnRlZCBzcGVjaWZpY2FsbHlcbiAgICAgICAgICBuZXh0U2VnbWVudCA9ICdbLi4uXSdcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzT3B0aW9uYWwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgT3B0aW9uYWwgcm91dGUgcGFyYW1ldGVycyBhcmUgbm90IHlldCBzdXBwb3J0ZWQgKFwiJHt1cmxQYXRoc1swXX1cIikuYFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVTbHVnKHRoaXMuc2x1Z05hbWUsIHNlZ21lbnROYW1lKVxuICAgICAgICAvLyBzbHVnTmFtZSBpcyBrZXB0IGFzIGl0IGNhbiBvbmx5IGJlIG9uZSBwYXJ0aWN1bGFyIHNsdWdOYW1lXG4gICAgICAgIHRoaXMuc2x1Z05hbWUgPSBzZWdtZW50TmFtZVxuICAgICAgICAvLyBuZXh0U2VnbWVudCBpcyBvdmVyd3JpdHRlbiB0byBbXSBzbyB0aGF0IGl0IGNhbiBsYXRlciBiZSBzb3J0ZWQgc3BlY2lmaWNhbGx5XG4gICAgICAgIG5leHRTZWdtZW50ID0gJ1tdJ1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHRoaXMgVXJsTm9kZSBkb2Vzbid0IGhhdmUgdGhlIG5leHRTZWdtZW50IHlldCB3ZSBjcmVhdGUgYSBuZXcgY2hpbGQgVXJsTm9kZVxuICAgIGlmICghdGhpcy5jaGlsZHJlbi5oYXMobmV4dFNlZ21lbnQpKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuLnNldChuZXh0U2VnbWVudCwgbmV3IFVybE5vZGUoKSlcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuXG4gICAgICAuZ2V0KG5leHRTZWdtZW50KSFcbiAgICAgIC5faW5zZXJ0KHVybFBhdGhzLnNsaWNlKDEpLCBzbHVnTmFtZXMsIGlzQ2F0Y2hBbGwpXG4gIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYHNvcnRTb3J0YWJsZVJvdXRlc2Agb3IgYHNvcnRQYWdlc2AgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNvcnRlZFJvdXRlcyhcbiAgbm9ybWFsaXplZFBhZ2VzOiBSZWFkb25seUFycmF5PHN0cmluZz5cbik6IHN0cmluZ1tdIHtcbiAgLy8gRmlyc3QgdGhlIFVybE5vZGUgaXMgY3JlYXRlZCwgYW5kIGV2ZXJ5IFVybE5vZGUgY2FuIGhhdmUgb25seSAxIGR5bmFtaWMgc2VnbWVudFxuICAvLyBFZyB5b3UgY2FuJ3QgaGF2ZSBwYWdlcy9bcG9zdF0vYWJjLmpzIGFuZCBwYWdlcy9baGVsbG9dL3NvbWV0aGluZy1lbHNlLmpzXG4gIC8vIE9ubHkgMSBkeW5hbWljIHNlZ21lbnQgcGVyIG5lc3RpbmcgbGV2ZWxcblxuICAvLyBTbyBpbiB0aGUgY2FzZSB0aGF0IGlzIHRlc3QvaW50ZWdyYXRpb24vZHluYW1pYy1yb3V0aW5nIGl0J2xsIGJlIHRoaXM6XG4gIC8vIHBhZ2VzL1twb3N0XS9jb21tZW50cy5qc1xuICAvLyBwYWdlcy9ibG9nL1twb3N0XS9jb21tZW50L1tpZF0uanNcbiAgLy8gQm90aCBhcmUgZmluZSBiZWNhdXNlIGBwYWdlcy9bcG9zdF1gIGFuZCBgcGFnZXMvYmxvZ2AgYXJlIG9uIHRoZSBzYW1lIGxldmVsXG4gIC8vIFNvIGluIHRoaXMgY2FzZSBgVXJsTm9kZWAgY3JlYXRlZCBoZXJlIGhhcyBgdGhpcy5zbHVnTmFtZSA9PT0gJ3Bvc3QnYFxuICAvLyBBbmQgc2luY2UgeW91ciBQUiBwYXNzZWQgdGhyb3VnaCBgc2x1Z05hbWVgIGFzIGFuIGFycmF5IGJhc2ljYWxseSBpdCdkIGluY2x1ZGluZyBpdCBpbiB0b28gbWFueSBwb3NzaWJpbGl0aWVzXG4gIC8vIEluc3RlYWQgd2hhdCBoYXMgdG8gYmUgcGFzc2VkIHRocm91Z2ggaXMgdGhlIHVwd2FyZHMgcGF0aCdzIGR5bmFtaWMgbmFtZXNcbiAgY29uc3Qgcm9vdCA9IG5ldyBVcmxOb2RlKClcblxuICAvLyBIZXJlIHRoZSBgcm9vdGAgZ2V0cyBpbmplY3RlZCBtdWx0aXBsZSBwYXRocywgYW5kIGluc2VydCB3aWxsIGJyZWFrIHRoZW0gdXAgaW50byBzdWJsZXZlbHNcbiAgbm9ybWFsaXplZFBhZ2VzLmZvckVhY2goKHBhZ2VQYXRoKSA9PiByb290Lmluc2VydChwYWdlUGF0aCkpXG4gIC8vIFNtb29zaCB3aWxsIHRoZW4gc29ydCB0aG9zZSBzdWJsZXZlbHMgdXAgdG8gdGhlIHBvaW50IHdoZXJlIHlvdSBnZXQgdGhlIGNvcnJlY3Qgcm91dGUgZGVmaW5pdGlvbiBwcmlvcml0eVxuICByZXR1cm4gcm9vdC5zbW9vc2goKVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgc29ydFNvcnRhYmxlUm91dGVPYmplY3RzYCBvciBgc29ydFBhZ2VPYmplY3RzYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U29ydGVkUm91dGVPYmplY3RzPFQ+KFxuICBvYmplY3RzOiBUW10sXG4gIGdldHRlcjogKG9iajogVCkgPT4gc3RyaW5nXG4pOiBUW10ge1xuICAvLyBXZSdyZSBhc3N1bWluZyBoZXJlIHRoYXQgYWxsIHRoZSBwYXRobmFtZXMgYXJlIHVuaXF1ZSwgdGhhdCB3YXkgd2UgY2FuXG4gIC8vIHNvcnQgdGhlIGxpc3QgYW5kIHVzZSB0aGUgaW5kZXggYXMgdGhlIGtleS5cbiAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9XG4gIGNvbnN0IHBhdGhuYW1lczogc3RyaW5nW10gPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwYXRobmFtZSA9IGdldHRlcihvYmplY3RzW2ldKVxuICAgIGluZGV4ZXNbcGF0aG5hbWVdID0gaVxuICAgIHBhdGhuYW1lc1tpXSA9IHBhdGhuYW1lXG4gIH1cblxuICAvLyBTb3J0IHRoZSBwYXRobmFtZXMuXG4gIGNvbnN0IHNvcnRlZCA9IGdldFNvcnRlZFJvdXRlcyhwYXRobmFtZXMpXG5cbiAgLy8gTWFwIHRoZSBzb3J0ZWQgcGF0aG5hbWVzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIG9iamVjdHMgdXNpbmcgdGhlIG5ldyBzb3J0ZWRcbiAgLy8gaW5kZXguXG4gIHJldHVybiBzb3J0ZWQubWFwKChwYXRobmFtZSkgPT4gb2JqZWN0c1tpbmRleGVzW3BhdGhuYW1lXV0pXG59XG4iXSwibmFtZXMiOlsiZ2V0U29ydGVkUm91dGVPYmplY3RzIiwiZ2V0U29ydGVkUm91dGVzIiwiVXJsTm9kZSIsImluc2VydCIsInVybFBhdGgiLCJfaW5zZXJ0Iiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwic21vb3NoIiwiX3Ntb29zaCIsInByZWZpeCIsImNoaWxkcmVuUGF0aHMiLCJjaGlsZHJlbiIsImtleXMiLCJzb3J0Iiwic2x1Z05hbWUiLCJzcGxpY2UiLCJpbmRleE9mIiwicmVzdFNsdWdOYW1lIiwib3B0aW9uYWxSZXN0U2x1Z05hbWUiLCJyb3V0ZXMiLCJtYXAiLCJjIiwiZ2V0IiwicmVkdWNlIiwicHJldiIsImN1cnIiLCJwdXNoIiwicGxhY2Vob2xkZXIiLCJyIiwic2xpY2UiLCJFcnJvciIsInVuc2hpZnQiLCJ1cmxQYXRocyIsInNsdWdOYW1lcyIsImlzQ2F0Y2hBbGwiLCJsZW5ndGgiLCJuZXh0U2VnbWVudCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInNlZ21lbnROYW1lIiwiaXNPcHRpb25hbCIsInN1YnN0cmluZyIsImhhbmRsZVNsdWciLCJwcmV2aW91c1NsdWciLCJuZXh0U2x1ZyIsImZvckVhY2giLCJzbHVnIiwicmVwbGFjZSIsImhhcyIsInNldCIsIk1hcCIsIm5vcm1hbGl6ZWRQYWdlcyIsInJvb3QiLCJwYWdlUGF0aCIsIm9iamVjdHMiLCJnZXR0ZXIiLCJpbmRleGVzIiwicGF0aG5hbWVzIiwiaSIsInBhdGhuYW1lIiwic29ydGVkIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/runtime-config.external.js":
/*!*************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/runtime-config.external.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 default: function() {\n return _default;\n },\n setConfig: function() {\n return setConfig;\n }\n});\nlet runtimeConfig;\nconst _default = ()=>{\n return runtimeConfig;\n};\nfunction setConfig(configValue) {\n runtimeConfig = configValue;\n} //# sourceMappingURL=runtime-config.external.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9ydW50aW1lLWNvbmZpZy5leHRlcm5hbC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFFQSxPQUVDO2VBRkQ7O0lBSWdCQSxTQUFTO2VBQVRBOzs7QUFOaEIsSUFBSUM7TUFFSixXQUFlO0lBQ2IsT0FBT0E7QUFDVDtBQUVPLFNBQVNELFVBQVVFLFdBQWdCO0lBQ3hDRCxnQkFBZ0JDO0FBQ2xCIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9ydW50aW1lLWNvbmZpZy5leHRlcm5hbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgcnVudGltZUNvbmZpZzogYW55XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgcmV0dXJuIHJ1bnRpbWVDb25maWdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbmZpZyhjb25maWdWYWx1ZTogYW55KTogdm9pZCB7XG4gIHJ1bnRpbWVDb25maWcgPSBjb25maWdWYWx1ZVxufVxuIl0sIm5hbWVzIjpbInNldENvbmZpZyIsInJ1bnRpbWVDb25maWciLCJjb25maWdWYWx1ZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/runtime-config.external.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/segment.js":
/*!*********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/segment.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 DEFAULT_SEGMENT_KEY: function() {\n return DEFAULT_SEGMENT_KEY;\n },\n PAGE_SEGMENT_KEY: function() {\n return PAGE_SEGMENT_KEY;\n },\n addSearchParamsIfPageSegment: function() {\n return addSearchParamsIfPageSegment;\n },\n isGroupSegment: function() {\n return isGroupSegment;\n },\n isParallelRouteSegment: function() {\n return isParallelRouteSegment;\n }\n});\nfunction isGroupSegment(segment) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')');\n}\nfunction isParallelRouteSegment(segment) {\n return segment.startsWith('@') && segment !== '@children';\n}\nfunction addSearchParamsIfPageSegment(segment, searchParams) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY);\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams);\n return stringifiedQuery !== '{}' ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery : PAGE_SEGMENT_KEY;\n }\n return segment;\n}\nconst PAGE_SEGMENT_KEY = '__PAGE__';\nconst DEFAULT_SEGMENT_KEY = '__DEFAULT__'; //# sourceMappingURL=segment.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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zZWdtZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQTRCYUEsbUJBQW1CO2VBQW5CQTs7SUFEQUMsZ0JBQWdCO2VBQWhCQTs7SUFoQkdDLDRCQUE0QjtlQUE1QkE7O0lBVEFDLGNBQWM7ZUFBZEE7O0lBS0FDLHNCQUFzQjtlQUF0QkE7OztBQUxULFNBQVNELGVBQWVFLE9BQWU7SUFDNUMsc0NBQXNDO0lBQ3RDLE9BQU9BLE9BQU8sQ0FBQyxFQUFFLEtBQUssT0FBT0EsUUFBUUMsUUFBUSxDQUFDO0FBQ2hEO0FBRU8sU0FBU0YsdUJBQXVCQyxPQUFlO0lBQ3BELE9BQU9BLFFBQVFFLFVBQVUsQ0FBQyxRQUFRRixZQUFZO0FBQ2hEO0FBRU8sU0FBU0gsNkJBQ2RHLE9BQWdCLEVBQ2hCRyxZQUEyRDtJQUUzRCxNQUFNQyxnQkFBZ0JKLFFBQVFLLFFBQVEsQ0FBQ1Q7SUFFdkMsSUFBSVEsZUFBZTtRQUNqQixNQUFNRSxtQkFBbUJDLEtBQUtDLFNBQVMsQ0FBQ0w7UUFDeEMsT0FBT0cscUJBQXFCLE9BQ3hCVixtQkFBbUIsTUFBTVUsbUJBQ3pCVjtJQUNOO0lBRUEsT0FBT0k7QUFDVDtBQUVPLE1BQU1KLG1CQUFtQjtBQUN6QixNQUFNRCxzQkFBc0IiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL3NyYy9zaGFyZWQvbGliL3NlZ21lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZWdtZW50IH0gZnJvbSAnLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0dyb3VwU2VnbWVudChzZWdtZW50OiBzdHJpbmcpIHtcbiAgLy8gVXNlIGFycmF5WzBdIGZvciBwZXJmb3JtYW50IHB1cnBvc2VcbiAgcmV0dXJuIHNlZ21lbnRbMF0gPT09ICcoJyAmJiBzZWdtZW50LmVuZHNXaXRoKCcpJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyYWxsZWxSb3V0ZVNlZ21lbnQoc2VnbWVudDogc3RyaW5nKSB7XG4gIHJldHVybiBzZWdtZW50LnN0YXJ0c1dpdGgoJ0AnKSAmJiBzZWdtZW50ICE9PSAnQGNoaWxkcmVuJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkU2VhcmNoUGFyYW1zSWZQYWdlU2VnbWVudChcbiAgc2VnbWVudDogU2VnbWVudCxcbiAgc2VhcmNoUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD5cbikge1xuICBjb25zdCBpc1BhZ2VTZWdtZW50ID0gc2VnbWVudC5pbmNsdWRlcyhQQUdFX1NFR01FTlRfS0VZKVxuXG4gIGlmIChpc1BhZ2VTZWdtZW50KSB7XG4gICAgY29uc3Qgc3RyaW5naWZpZWRRdWVyeSA9IEpTT04uc3RyaW5naWZ5KHNlYXJjaFBhcmFtcylcbiAgICByZXR1cm4gc3RyaW5naWZpZWRRdWVyeSAhPT0gJ3t9J1xuICAgICAgPyBQQUdFX1NFR01FTlRfS0VZICsgJz8nICsgc3RyaW5naWZpZWRRdWVyeVxuICAgICAgOiBQQUdFX1NFR01FTlRfS0VZXG4gIH1cblxuICByZXR1cm4gc2VnbWVudFxufVxuXG5leHBvcnQgY29uc3QgUEFHRV9TRUdNRU5UX0tFWSA9ICdfX1BBR0VfXydcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFR01FTlRfS0VZID0gJ19fREVGQVVMVF9fJ1xuIl0sIm5hbWVzIjpbIkRFRkFVTFRfU0VHTUVOVF9LRVkiLCJQQUdFX1NFR01FTlRfS0VZIiwiYWRkU2VhcmNoUGFyYW1zSWZQYWdlU2VnbWVudCIsImlzR3JvdXBTZWdtZW50IiwiaXNQYXJhbGxlbFJvdXRlU2VnbWVudCIsInNlZ21lbnQiLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJzZWFyY2hQYXJhbXMiLCJpc1BhZ2VTZWdtZW50IiwiaW5jbHVkZXMiLCJzdHJpbmdpZmllZFF1ZXJ5IiwiSlNPTiIsInN0cmluZ2lmeSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/segment.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/side-effect.js":
/*!*************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/side-effect.js ***!
\*************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return SideEffect;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\");\nconst isServer = \"object\" === 'undefined';\nconst useClientOnlyLayoutEffect = isServer ? ()=>{} : _react.useLayoutEffect;\nconst useClientOnlyEffect = isServer ? ()=>{} : _react.useEffect;\nfunction SideEffect(props) {\n _s();\n const { headManager, reduceComponentsToState } = props;\n function emitChange() {\n if (headManager && headManager.mountedInstances) {\n const headElements = _react.Children.toArray(Array.from(headManager.mountedInstances).filter(Boolean));\n headManager.updateHead(reduceComponentsToState(headElements, props));\n }\n }\n if (isServer) {\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.add(props.children);\n emitChange();\n }\n useClientOnlyLayoutEffect({\n \"SideEffect.useClientOnlyLayoutEffect\": ()=>{\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.add(props.children);\n return ({\n \"SideEffect.useClientOnlyLayoutEffect\": ()=>{\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.delete(props.children);\n }\n })[\"SideEffect.useClientOnlyLayoutEffect\"];\n }\n }[\"SideEffect.useClientOnlyLayoutEffect\"]);\n // We need to call `updateHead` method whenever the `SideEffect` is trigger in all\n // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s\n // being rendered, we only trigger the method from the last one.\n // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`\n // singleton in the layout effect pass, and actually trigger it in the effect pass.\n useClientOnlyLayoutEffect({\n \"SideEffect.useClientOnlyLayoutEffect\": ()=>{\n if (headManager) {\n headManager._pendingUpdate = emitChange;\n }\n return ({\n \"SideEffect.useClientOnlyLayoutEffect\": ()=>{\n if (headManager) {\n headManager._pendingUpdate = emitChange;\n }\n }\n })[\"SideEffect.useClientOnlyLayoutEffect\"];\n }\n }[\"SideEffect.useClientOnlyLayoutEffect\"]);\n useClientOnlyEffect({\n \"SideEffect.useClientOnlyEffect\": ()=>{\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate();\n headManager._pendingUpdate = null;\n }\n return ({\n \"SideEffect.useClientOnlyEffect\": ()=>{\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate();\n headManager._pendingUpdate = null;\n }\n }\n })[\"SideEffect.useClientOnlyEffect\"];\n }\n }[\"SideEffect.useClientOnlyEffect\"]);\n return null;\n} //# sourceMappingURL=side-effect.js.map\n_s(SideEffect, \"gHVkikNHNxjVdD11eJBzaqkCiPY=\", false, function() {\n return [\n useClientOnlyLayoutEffect,\n useClientOnlyLayoutEffect,\n useClientOnlyEffect\n ];\n});\n_c = SideEffect;\nvar _c;\n$RefreshReg$(_c, \"SideEffect\");\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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zaWRlLWVmZmVjdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7MkNBb0JBOzs7ZUFBd0JBOzs7bUNBbkJ1QztBQWUvRCxNQUFNQyxXQUFXLE9BQU9DLE1BQVc7QUFDbkMsTUFBTUMsNEJBQTRCRixXQUFXLEtBQU8sSUFBSUcsT0FBQUEsZUFBZTtBQUN2RSxNQUFNQyxzQkFBc0JKLFdBQVcsS0FBTyxJQUFJSyxPQUFBQSxTQUFTO0FBRTVDLG9CQUFvQkMsS0FBc0I7O0lBQ3ZELE1BQU0sRUFBRUMsV0FBVyxFQUFFQyx1QkFBdUIsRUFBRSxHQUFHRjtJQUVqRCxTQUFTRztRQUNQLElBQUlGLGVBQWVBLFlBQVlHLGdCQUFnQixFQUFFO1lBQy9DLE1BQU1DLGVBQWVDLE9BQUFBLFFBQVEsQ0FBQ0MsT0FBTyxDQUNuQ0MsTUFBTUMsSUFBSSxDQUFDUixZQUFZRyxnQkFBZ0IsRUFBMEJNLE1BQU0sQ0FDckVDO1lBR0pWLFlBQVlXLFVBQVUsQ0FBQ1Ysd0JBQXdCRyxjQUFjTDtRQUMvRDtJQUNGO0lBRUEsSUFBSU4sVUFBVTtZQUNaTztRQUFBQSxlQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxnQ0FBQUEsWUFBYUcsZ0JBQUFBLEtBQWdCLGdCQUE3QkgsOEJBQStCWSxHQUFHLENBQUNiLE1BQU1jLFFBQVE7UUFDakRYO0lBQ0Y7O2dEQUUwQjtnQkFDeEJGO1lBQUFBLGVBQUFBLE9BQUFBLEtBQUFBLElBQUFBLENBQUFBLGdDQUFBQSxZQUFhRyxnQkFBQUEsS0FBZ0IsZ0JBQTdCSCw4QkFBK0JZLEdBQUcsQ0FBQ2IsTUFBTWMsUUFBUTtZQUNqRDt3REFBTzt3QkFDTGI7b0JBQUFBLGVBQUFBLE9BQUFBLEtBQUFBLElBQUFBLENBQUFBLGdDQUFBQSxZQUFhRyxnQkFBQUEsS0FBZ0IsZ0JBQTdCSCw4QkFBK0JjLE1BQU0sQ0FBQ2YsTUFBTWMsUUFBUTtnQkFDdEQ7O1FBQ0Y7O0lBRUEsa0ZBQWtGO0lBQ2xGLG9GQUFvRjtJQUNwRixnRUFBZ0U7SUFDaEUscUZBQXFGO0lBQ3JGLG1GQUFtRjs7Z0RBQ3pEO1lBQ3hCLElBQUliLGFBQWE7Z0JBQ2ZBLFlBQVllLGNBQWMsR0FBR2I7WUFDL0I7WUFDQTt3REFBTztvQkFDTCxJQUFJRixhQUFhO3dCQUNmQSxZQUFZZSxjQUFjLEdBQUdiO29CQUMvQjtnQkFDRjs7UUFDRjs7OzBDQUVvQjtZQUNsQixJQUFJRixlQUFlQSxZQUFZZSxjQUFjLEVBQUU7Z0JBQzdDZixZQUFZZSxjQUFjO2dCQUMxQmYsWUFBWWUsY0FBYyxHQUFHO1lBQy9CO1lBQ0E7a0RBQU87b0JBQ0wsSUFBSWYsZUFBZUEsWUFBWWUsY0FBYyxFQUFFO3dCQUM3Q2YsWUFBWWUsY0FBYzt3QkFDMUJmLFlBQVllLGNBQWMsR0FBRztvQkFDL0I7Z0JBQ0Y7O1FBQ0Y7O0lBRUEsT0FBTztBQUNUOzs7UUFyQ0VwQjtRQVlBQTtRQVdBRTs7O0tBMUNzQkwiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL3NyYy9zaGFyZWQvbGliL3NpZGUtZWZmZWN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENoaWxkcmVuLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdHlwZSBKU1ggfSBmcm9tICdyZWFjdCdcblxudHlwZSBTdGF0ZSA9IEpTWC5FbGVtZW50W10gfCB1bmRlZmluZWRcblxuZXhwb3J0IHR5cGUgU2lkZUVmZmVjdFByb3BzID0ge1xuICByZWR1Y2VDb21wb25lbnRzVG9TdGF0ZTogPFQgZXh0ZW5kcyB7fT4oXG4gICAgY29tcG9uZW50czogQXJyYXk8UmVhY3QuUmVhY3RFbGVtZW50PGFueT4+LFxuICAgIHByb3BzOiBUXG4gICkgPT4gU3RhdGVcbiAgaGFuZGxlU3RhdGVDaGFuZ2U/OiAoc3RhdGU6IFN0YXRlKSA9PiB2b2lkXG4gIGhlYWRNYW5hZ2VyOiBhbnlcbiAgaW5BbXBNb2RlPzogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmNvbnN0IGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCdcbmNvbnN0IHVzZUNsaWVudE9ubHlMYXlvdXRFZmZlY3QgPSBpc1NlcnZlciA/ICgpID0+IHt9IDogdXNlTGF5b3V0RWZmZWN0XG5jb25zdCB1c2VDbGllbnRPbmx5RWZmZWN0ID0gaXNTZXJ2ZXIgPyAoKSA9PiB7fSA6IHVzZUVmZmVjdFxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTaWRlRWZmZWN0KHByb3BzOiBTaWRlRWZmZWN0UHJvcHMpIHtcbiAgY29uc3QgeyBoZWFkTWFuYWdlciwgcmVkdWNlQ29tcG9uZW50c1RvU3RhdGUgfSA9IHByb3BzXG5cbiAgZnVuY3Rpb24gZW1pdENoYW5nZSgpIHtcbiAgICBpZiAoaGVhZE1hbmFnZXIgJiYgaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlcykge1xuICAgICAgY29uc3QgaGVhZEVsZW1lbnRzID0gQ2hpbGRyZW4udG9BcnJheShcbiAgICAgICAgQXJyYXkuZnJvbShoZWFkTWFuYWdlci5tb3VudGVkSW5zdGFuY2VzIGFzIFNldDxSZWFjdC5SZWFjdE5vZGU+KS5maWx0ZXIoXG4gICAgICAgICAgQm9vbGVhblxuICAgICAgICApXG4gICAgICApIGFzIFJlYWN0LlJlYWN0RWxlbWVudFtdXG4gICAgICBoZWFkTWFuYWdlci51cGRhdGVIZWFkKHJlZHVjZUNvbXBvbmVudHNUb1N0YXRlKGhlYWRFbGVtZW50cywgcHJvcHMpKVxuICAgIH1cbiAgfVxuXG4gIGlmIChpc1NlcnZlcikge1xuICAgIGhlYWRNYW5hZ2VyPy5tb3VudGVkSW5zdGFuY2VzPy5hZGQocHJvcHMuY2hpbGRyZW4pXG4gICAgZW1pdENoYW5nZSgpXG4gIH1cblxuICB1c2VDbGllbnRPbmx5TGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBoZWFkTWFuYWdlcj8ubW91bnRlZEluc3RhbmNlcz8uYWRkKHByb3BzLmNoaWxkcmVuKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBoZWFkTWFuYWdlcj8ubW91bnRlZEluc3RhbmNlcz8uZGVsZXRlKHByb3BzLmNoaWxkcmVuKVxuICAgIH1cbiAgfSlcblxuICAvLyBXZSBuZWVkIHRvIGNhbGwgYHVwZGF0ZUhlYWRgIG1ldGhvZCB3aGVuZXZlciB0aGUgYFNpZGVFZmZlY3RgIGlzIHRyaWdnZXIgaW4gYWxsXG4gIC8vIGxpZmUtY3ljbGVzOiBtb3VudCwgdXBkYXRlLCB1bm1vdW50LiBIb3dldmVyLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYFNpZGVFZmZlY3Rgc1xuICAvLyBiZWluZyByZW5kZXJlZCwgd2Ugb25seSB0cmlnZ2VyIHRoZSBtZXRob2QgZnJvbSB0aGUgbGFzdCBvbmUuXG4gIC8vIFRoaXMgaXMgZW5zdXJlZCBieSBrZWVwaW5nIHRoZSBsYXN0IHVuZmx1c2hlZCBgdXBkYXRlSGVhZGAgaW4gdGhlIGBfcGVuZGluZ1VwZGF0ZWBcbiAgLy8gc2luZ2xldG9uIGluIHRoZSBsYXlvdXQgZWZmZWN0IHBhc3MsIGFuZCBhY3R1YWxseSB0cmlnZ2VyIGl0IGluIHRoZSBlZmZlY3QgcGFzcy5cbiAgdXNlQ2xpZW50T25seUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGhlYWRNYW5hZ2VyKSB7XG4gICAgICBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSA9IGVtaXRDaGFuZ2VcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChoZWFkTWFuYWdlcikge1xuICAgICAgICBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSA9IGVtaXRDaGFuZ2VcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgdXNlQ2xpZW50T25seUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGhlYWRNYW5hZ2VyICYmIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlKSB7XG4gICAgICBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSgpXG4gICAgICBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSA9IG51bGxcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChoZWFkTWFuYWdlciAmJiBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSkge1xuICAgICAgICBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSgpXG4gICAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gbnVsbFxufVxuIl0sIm5hbWVzIjpbIlNpZGVFZmZlY3QiLCJpc1NlcnZlciIsIndpbmRvdyIsInVzZUNsaWVudE9ubHlMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VDbGllbnRPbmx5RWZmZWN0IiwidXNlRWZmZWN0IiwicHJvcHMiLCJoZWFkTWFuYWdlciIsInJlZHVjZUNvbXBvbmVudHNUb1N0YXRlIiwiZW1pdENoYW5nZSIsIm1vdW50ZWRJbnN0YW5jZXMiLCJoZWFkRWxlbWVudHMiLCJDaGlsZHJlbiIsInRvQXJyYXkiLCJBcnJheSIsImZyb20iLCJmaWx0ZXIiLCJCb29sZWFuIiwidXBkYXRlSGVhZCIsImFkZCIsImNoaWxkcmVuIiwiZGVsZXRlIiwiX3BlbmRpbmdVcGRhdGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/side-effect.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils.js":
/*!*******************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.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 function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\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 var _App_prototype;\n if ((_App_prototype = App.prototype) == null ? void 0 : _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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFvYWFBLFdBQVc7ZUFBWEE7O0lBb0JBQyx1QkFBdUI7ZUFBdkJBOztJQVBBQyxpQkFBaUI7ZUFBakJBOztJQVpBQyxjQUFjO2VBQWRBOztJQUNBQyxpQkFBaUI7ZUFBakJBOztJQVRBQyxFQUFFO2VBQUZBOztJQUNBQyxFQUFFO2VBQUZBOztJQWxYQUMsVUFBVTtlQUFWQTs7SUFzUUdDLFFBQVE7ZUFBUkE7O0lBK0JBQyxjQUFjO2VBQWRBOztJQVhBQyxpQkFBaUI7ZUFBakJBOztJQUtBQyxNQUFNO2VBQU5BOztJQVBIQyxhQUFhO2VBQWJBOztJQW1CR0MsU0FBUztlQUFUQTs7SUFrQk1DLG1CQUFtQjtlQUFuQkE7O0lBZE5DLHdCQUF3QjtlQUF4QkE7O0lBK0dBQyxjQUFjO2VBQWRBOzs7QUE5WlQsTUFBTVQsYUFBYTtJQUFDO0lBQU87SUFBTztJQUFPO0lBQU87SUFBTztDQUFPO0FBc1E5RCxTQUFTQyxTQUNkUyxFQUFLO0lBRUwsSUFBSUMsT0FBTztJQUNYLElBQUlDO0lBRUosT0FBUTt5Q0FBSUMsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7WUFBQUEsSUFBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O1FBQ1YsSUFBSSxDQUFDRixNQUFNO1lBQ1RBLE9BQU87WUFDUEMsU0FBU0YsTUFBTUc7UUFDakI7UUFDQTtJQUNGO0FBQ0Y7QUFFQSwwREFBMEQ7QUFDMUQsZ0VBQWdFO0FBQ2hFLE1BQU1DLHFCQUFxQjtBQUNwQixNQUFNVCxnQkFBZ0IsQ0FBQ1UsTUFBZ0JELG1CQUFtQkUsSUFB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RCwwQkFBMEJpRDtJQUdyQ1UsWUFBWUMsSUFBWSxDQUFFO1FBQ3hCLEtBQUs7UUFDTCxJQUFJLENBQUNDLElBQUksR0FBRztRQUNaLElBQUksQ0FBQzlCLElBQUksR0FBRztRQUNaLElBQUksQ0FBQ2lCLE9BQU8sR0FBSSxrQ0FBK0JZO0lBQ2pEO0FBQ0Y7QUFFTyxNQUFNOUQsMEJBQTBCbUQ7SUFDckNVLFlBQVlDLElBQVksRUFBRVosT0FBZSxDQUFFO1FBQ3pDLEtBQUs7UUFDTCxJQUFJLENBQUNBLE9BQU8sR0FBSSwwQ0FBdUNZLE9BQUssTUFBR1o7SUFDakU7QUFDRjtBQUVPLE1BQU1uRCxnQ0FBZ0NvRDtJQUUzQ1UsYUFBYztRQUNaLEtBQUs7UUFDTCxJQUFJLENBQUNFLElBQUksR0FBRztRQUNaLElBQUksQ0FBQ2IsT0FBTyxHQUFJO0lBQ2xCO0FBQ0Y7QUFXTyxTQUFTcEMsZUFBZWtELEtBQVk7SUFDekMsT0FBT0MsS0FBS0MsU0FBUyxDQUFDO1FBQUVoQixTQUFTYyxNQUFNZCxPQUFPO1FBQUVpQixPQUFPSCxNQUFNRyxLQUFLO0lBQUM7QUFDckUiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL3NyYy9zaGFyZWQvbGliL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSHRtbFByb3BzIH0gZnJvbSAnLi9odG1sLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudFR5cGUsIEpTWCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBEb21haW5Mb2NhbGUgfSBmcm9tICcuLi8uLi9zZXJ2ZXIvY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBFbnYgfSBmcm9tICdAbmV4dC9lbnYnXG5pbXBvcnQgdHlwZSB7IEluY29taW5nTWVzc2FnZSwgU2VydmVyUmVzcG9uc2UgfSBmcm9tICdodHRwJ1xuaW1wb3J0IHR5cGUgeyBOZXh0Um91dGVyIH0gZnJvbSAnLi9yb3V0ZXIvcm91dGVyJ1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRVcmxRdWVyeSB9IGZyb20gJ3F1ZXJ5c3RyaW5nJ1xuaW1wb3J0IHR5cGUgeyBQcmV2aWV3RGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDT01QSUxFUl9OQU1FUyB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgZnMgZnJvbSAnZnMnXG5cbmV4cG9ydCB0eXBlIE5leHRDb21wb25lbnRUeXBlPFxuICBDb250ZXh0IGV4dGVuZHMgQmFzZUNvbnRleHQgPSBOZXh0UGFnZUNvbnRleHQsXG4gIEluaXRpYWxQcm9wcyA9IHt9LFxuICBQcm9wcyA9IHt9LFxuPiA9IENvbXBvbmVudFR5cGU8UHJvcHM+ICYge1xuICAvKipcbiAgICogVXNlZCBmb3IgaW5pdGlhbCBwYWdlIGxvYWQgZGF0YSBwb3B1bGF0aW9uLiBEYXRhIHJldHVybmVkIGZyb20gYGdldEluaXRpYWxQcm9wc2AgaXMgc2VyaWFsaXplZCB3aGVuIHNlcnZlciByZW5kZXJlZC5cbiAgICogTWFrZSBzdXJlIHRvIHJldHVybiBwbGFpbiBgT2JqZWN0YCB3aXRob3V0IHVzaW5nIGBEYXRlYCwgYE1hcGAsIGBTZXRgLlxuICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIGBwYWdlYFxuICAgKi9cbiAgZ2V0SW5pdGlhbFByb3BzPyhjb250ZXh0OiBDb250ZXh0KTogSW5pdGlhbFByb3BzIHwgUHJvbWlzZTxJbml0aWFsUHJvcHM+XG59XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50VHlwZSA9IE5leHRDb21wb25lbnRUeXBlPFxuICBEb2N1bWVudENvbnRleHQsXG4gIERvY3VtZW50SW5pdGlhbFByb3BzLFxuICBEb2N1bWVudFByb3BzXG4+XG5cbmV4cG9ydCB0eXBlIEFwcFR5cGU8UCA9IHt9PiA9IE5leHRDb21wb25lbnRUeXBlPFxuICBBcHBDb250ZXh0VHlwZSxcbiAgUCxcbiAgQXBwUHJvcHNUeXBlPGFueSwgUD5cbj5cblxuZXhwb3J0IHR5cGUgQXBwVHJlZVR5cGUgPSBDb21wb25lbnRUeXBlPFxuICBBcHBJbml0aWFsUHJvcHMgJiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVxuPlxuXG4vKipcbiAqIFdlYiB2aXRhbHMgcHJvdmlkZWQgdG8gX2FwcC5yZXBvcnRXZWJWaXRhbHMgYnkgQ29yZSBXZWIgVml0YWxzIHBsdWdpbiBkZXZlbG9wZWQgYnkgR29vZ2xlIENocm9tZSB0ZWFtLlxuICogaHR0cHM6Ly9uZXh0anMub3JnL2Jsb2cvbmV4dC05LTQjaW50ZWdyYXRlZC13ZWItdml0YWxzLXJlcG9ydGluZ1xuICovXG5leHBvcnQgY29uc3QgV0VCX1ZJVEFMUyA9IFsnQ0xTJywgJ0ZDUCcsICdGSUQnLCAnSU5QJywgJ0xDUCcsICdUVEZCJ10gYXMgY29uc3RcbmV4cG9ydCB0eXBlIE5leHRXZWJWaXRhbHNNZXRyaWMgPSB7XG4gIGlkOiBzdHJpbmdcbiAgc3RhcnRUaW1lOiBudW1iZXJcbiAgdmFsdWU6IG51bWJlclxuICBhdHRyaWJ1dGlvbj86IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9XG59ICYgKFxuICB8IHtcbiAgICAgIGxhYmVsOiAnd2ViLXZpdGFsJ1xuICAgICAgbmFtZTogKHR5cGVvZiBXRUJfVklUQUxTKVtudW1iZXJdXG4gICAgfVxuICB8IHtcbiAgICAgIGxhYmVsOiAnY3VzdG9tJ1xuICAgICAgbmFtZTpcbiAgICAgICAgfCAnTmV4dC5qcy1oeWRyYXRpb24nXG4gICAgICAgIHwgJ05leHQuanMtcm91dGUtY2hhbmdlLXRvLXJlbmRlcidcbiAgICAgICAgfCAnTmV4dC5qcy1yZW5kZXInXG4gICAgfVxuKVxuXG5leHBvcnQgdHlwZSBFbmhhbmNlcjxDPiA9IChDb21wb25lbnQ6IEMpID0+IENcblxuZXhwb3J0IHR5cGUgQ29tcG9uZW50c0VuaGFuY2VyID1cbiAgfCB7XG4gICAgICBlbmhhbmNlQXBwPzogRW5oYW5jZXI8QXBwVHlwZT5cbiAgICAgIGVuaGFuY2VDb21wb25lbnQ/OiBFbmhhbmNlcjxOZXh0Q29tcG9uZW50VHlwZT5cbiAgICB9XG4gIHwgRW5oYW5jZXI8TmV4dENvbXBvbmVudFR5cGU+XG5cbmV4cG9ydCB0eXBlIFJlbmRlclBhZ2VSZXN1bHQgPSB7XG4gIGh0bWw6IHN0cmluZ1xuICBoZWFkPzogQXJyYXk8SlNYLkVsZW1lbnQgfCBudWxsPlxufVxuXG5leHBvcnQgdHlwZSBSZW5kZXJQYWdlID0gKFxuICBvcHRpb25zPzogQ29tcG9uZW50c0VuaGFuY2VyXG4pID0+IERvY3VtZW50SW5pdGlhbFByb3BzIHwgUHJvbWlzZTxEb2N1bWVudEluaXRpYWxQcm9wcz5cblxuZXhwb3J0IHR5cGUgQmFzZUNvbnRleHQgPSB7XG4gIHJlcz86IFNlcnZlclJlc3BvbnNlXG4gIFtrOiBzdHJpbmddOiBhbnlcbn1cblxuZXhwb3J0IHR5cGUgTkVYVF9EQVRBID0ge1xuICBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PlxuICBwYWdlOiBzdHJpbmdcbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gIGJ1aWxkSWQ6IHN0cmluZ1xuICBhc3NldFByZWZpeD86IHN0cmluZ1xuICBydW50aW1lQ29uZmlnPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuICBuZXh0RXhwb3J0PzogYm9vbGVhblxuICBhdXRvRXhwb3J0PzogYm9vbGVhblxuICBpc0ZhbGxiYWNrPzogYm9vbGVhblxuICBpc0V4cGVyaW1lbnRhbENvbXBpbGU/OiBib29sZWFuXG4gIGR5bmFtaWNJZHM/OiAoc3RyaW5nIHwgbnVtYmVyKVtdXG4gIGVycj86IEVycm9yICYge1xuICAgIHN0YXR1c0NvZGU/OiBudW1iZXJcbiAgICBzb3VyY2U/OiB0eXBlb2YgQ09NUElMRVJfTkFNRVMuc2VydmVyIHwgdHlwZW9mIENPTVBJTEVSX05BTUVTLmVkZ2VTZXJ2ZXJcbiAgfVxuICBnc3A/OiBib29sZWFuXG4gIGdzc3A/OiBib29sZWFuXG4gIGN1c3RvbVNlcnZlcj86IGJvb2xlYW5cbiAgZ2lwPzogYm9vbGVhblxuICBhcHBHaXA/OiBib29sZWFuXG4gIGxvY2FsZT86IHN0cmluZ1xuICBsb2NhbGVzPzogcmVhZG9ubHkgc3RyaW5nW11cbiAgZGVmYXVsdExvY2FsZT86IHN0cmluZ1xuICBkb21haW5Mb2NhbGVzPzogcmVhZG9ubHkgRG9tYWluTG9jYWxlW11cbiAgc2NyaXB0TG9hZGVyPzogYW55W11cbiAgaXNQcmV2aWV3PzogYm9vbGVhblxuICBub3RGb3VuZFNyY1BhZ2U/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBgTmV4dGAgY29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRQYWdlQ29udGV4dCB7XG4gIC8qKlxuICAgKiBFcnJvciBvYmplY3QgaWYgZW5jb3VudGVyZWQgZHVyaW5nIHJlbmRlcmluZ1xuICAgKi9cbiAgZXJyPzogKEVycm9yICYgeyBzdGF0dXNDb2RlPzogbnVtYmVyIH0pIHwgbnVsbFxuICAvKipcbiAgICogYEhUVFBgIHJlcXVlc3Qgb2JqZWN0LlxuICAgKi9cbiAgcmVxPzogSW5jb21pbmdNZXNzYWdlXG4gIC8qKlxuICAgKiBgSFRUUGAgcmVzcG9uc2Ugb2JqZWN0LlxuICAgKi9cbiAgcmVzPzogU2VydmVyUmVzcG9uc2VcbiAgLyoqXG4gICAqIFBhdGggc2VjdGlvbiBvZiBgVVJMYC5cbiAgICovXG4gIHBhdGhuYW1lOiBzdHJpbmdcbiAgLyoqXG4gICAqIFF1ZXJ5IHN0cmluZyBzZWN0aW9uIG9mIGBVUkxgIHBhcnNlZCBhcyBhbiBvYmplY3QuXG4gICAqL1xuICBxdWVyeTogUGFyc2VkVXJsUXVlcnlcbiAgLyoqXG4gICAqIGBTdHJpbmdgIG9mIHRoZSBhY3R1YWwgcGF0aCBpbmNsdWRpbmcgcXVlcnkuXG4gICAqL1xuICBhc1BhdGg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGxvY2FsZVxuICAgKi9cbiAgbG9jYWxlPzogc3RyaW5nXG4gIC8qKlxuICAgKiBBbGwgY29uZmlndXJlZCBsb2NhbGVzXG4gICAqL1xuICBsb2NhbGVzPzogcmVhZG9ubHkgc3RyaW5nW11cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmVkIGRlZmF1bHQgbG9jYWxlXG4gICAqL1xuICBkZWZhdWx0TG9jYWxlPzogc3RyaW5nXG4gIC8qKlxuICAgKiBgQ29tcG9uZW50YCB0aGUgdHJlZSBvZiB0aGUgQXBwIHRvIHVzZSBpZiBuZWVkaW5nIHRvIHJlbmRlciBzZXBhcmF0ZWx5XG4gICAqL1xuICBBcHBUcmVlOiBBcHBUcmVlVHlwZVxufVxuXG5leHBvcnQgdHlwZSBBcHBDb250ZXh0VHlwZTxSb3V0ZXIgZXh0ZW5kcyBOZXh0Um91dGVyID0gTmV4dFJvdXRlcj4gPSB7XG4gIENvbXBvbmVudDogTmV4dENvbXBvbmVudFR5cGU8TmV4dFBhZ2VDb250ZXh0PlxuICBBcHBUcmVlOiBBcHBUcmVlVHlwZVxuICBjdHg6IE5leHRQYWdlQ29udGV4dFxuICByb3V0ZXI6IFJvdXRlclxufVxuXG5leHBvcnQgdHlwZSBBcHBJbml0aWFsUHJvcHM8UGFnZVByb3BzID0gYW55PiA9IHtcbiAgcGFnZVByb3BzOiBQYWdlUHJvcHNcbn1cblxuZXhwb3J0IHR5cGUgQXBwUHJvcHNUeXBlPFxuICBSb3V0ZXIgZXh0ZW5kcyBOZXh0Um91dGVyID0gTmV4dFJvdXRlcixcbiAgUGFnZVByb3BzID0ge30sXG4+ID0gQXBwSW5pdGlhbFByb3BzPFBhZ2VQcm9wcz4gJiB7XG4gIENvbXBvbmVudDogTmV4dENvbXBvbmVudFR5cGU8TmV4dFBhZ2VDb250ZXh0LCBhbnksIGFueT5cbiAgcm91dGVyOiBSb3V0ZXJcbiAgX19OX1NTRz86IGJvb2xlYW5cbiAgX19OX1NTUD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgRG9jdW1lbnRDb250ZXh0ID0gTmV4dFBhZ2VDb250ZXh0ICYge1xuICByZW5kZXJQYWdlOiBSZW5kZXJQYWdlXG4gIGRlZmF1bHRHZXRJbml0aWFsUHJvcHMoXG4gICAgY3R4OiBEb2N1bWVudENvbnRleHQsXG4gICAgb3B0aW9ucz86IHsgbm9uY2U/OiBzdHJpbmcgfVxuICApOiBQcm9taXNlPERvY3VtZW50SW5pdGlhbFByb3BzPlxufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudEluaXRpYWxQcm9wcyA9IFJlbmRlclBhZ2VSZXN1bHQgJiB7XG4gIHN0eWxlcz86IFJlYWN0LlJlYWN0RWxlbWVudFtdIHwgSXRlcmFibGU8UmVhY3QuUmVhY3ROb2RlPiB8IEpTWC5FbGVtZW50XG59XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50UHJvcHMgPSBEb2N1bWVudEluaXRpYWxQcm9wcyAmIEh0bWxQcm9wc1xuXG4vKipcbiAqIE5leHQgYEFQSWAgcm91dGUgcmVxdWVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRBcGlSZXF1ZXN0IGV4dGVuZHMgSW5jb21pbmdNZXNzYWdlIHtcbiAgLyoqXG4gICAqIE9iamVjdCBvZiBgcXVlcnlgIHZhbHVlcyBmcm9tIHVybFxuICAgKi9cbiAgcXVlcnk6IFBhcnRpYWw8e1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdXG4gIH0+XG4gIC8qKlxuICAgKiBPYmplY3Qgb2YgYGNvb2tpZXNgIGZyb20gaGVhZGVyXG4gICAqL1xuICBjb29raWVzOiBQYXJ0aWFsPHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmdcbiAgfT5cblxuICBib2R5OiBhbnlcblxuICBlbnY6IEVudlxuXG4gIGRyYWZ0TW9kZT86IGJvb2xlYW5cblxuICBwcmV2aWV3PzogYm9vbGVhblxuICAvKipcbiAgICogUHJldmlldyBkYXRhIHNldCBvbiB0aGUgcmVxdWVzdCwgaWYgYW55XG4gICAqICovXG4gIHByZXZpZXdEYXRhPzogUHJldmlld0RhdGFcbn1cblxuLyoqXG4gKiBTZW5kIGJvZHkgb2YgcmVzcG9uc2VcbiAqL1xudHlwZSBTZW5kPFQ+ID0gKGJvZHk6IFQpID0+IHZvaWRcblxuLyoqXG4gKiBOZXh0IGBBUElgIHJvdXRlIHJlc3BvbnNlXG4gKi9cbmV4cG9ydCB0eXBlIE5leHRBcGlSZXNwb25zZTxEYXRhID0gYW55PiA9IFNlcnZlclJlc3BvbnNlICYge1xuICAvKipcbiAgICogU2VuZCBkYXRhIGBhbnlgIGRhdGEgaW4gcmVzcG9uc2VcbiAgICovXG4gIHNlbmQ6IFNlbmQ8RGF0YT5cbiAgLyoqXG4gICAqIFNlbmQgZGF0YSBganNvbmAgZGF0YSBpbiByZXNwb25zZVxuICAgKi9cbiAganNvbjogU2VuZDxEYXRhPlxuICBzdGF0dXM6IChzdGF0dXNDb2RlOiBudW1iZXIpID0+IE5leHRBcGlSZXNwb25zZTxEYXRhPlxuICByZWRpcmVjdCh1cmw6IHN0cmluZyk6IE5leHRBcGlSZXNwb25zZTxEYXRhPlxuICByZWRpcmVjdChzdGF0dXM6IG51bWJlciwgdXJsOiBzdHJpbmcpOiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cblxuICAvKipcbiAgICogU2V0IGRyYWZ0IG1vZGVcbiAgICovXG4gIHNldERyYWZ0TW9kZTogKG9wdGlvbnM6IHsgZW5hYmxlOiBib29sZWFuIH0pID0+IE5leHRBcGlSZXNwb25zZTxEYXRhPlxuXG4gIC8qKlxuICAgKiBTZXQgcHJldmlldyBkYXRhIGZvciBOZXh0LmpzJyBwcmVyZW5kZXIgbW9kZVxuICAgKi9cbiAgc2V0UHJldmlld0RhdGE6IChcbiAgICBkYXRhOiBvYmplY3QgfCBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIC8qKlxuICAgICAgICogU3BlY2lmaWVzIHRoZSBudW1iZXIgKGluIHNlY29uZHMpIGZvciB0aGUgcHJldmlldyBzZXNzaW9uIHRvIGxhc3QgZm9yLlxuICAgICAgICogVGhlIGdpdmVuIG51bWJlciB3aWxsIGJlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyIGJ5IHJvdW5kaW5nIGRvd24uXG4gICAgICAgKiBCeSBkZWZhdWx0LCBubyBtYXhpbXVtIGFnZSBpcyBzZXQgYW5kIHRoZSBwcmV2aWV3IHNlc3Npb24gZmluaXNoZXNcbiAgICAgICAqIHdoZW4gdGhlIGNsaWVudCBzaHV0cyBkb3duIChicm93c2VyIGlzIGNsb3NlZCkuXG4gICAgICAgKi9cbiAgICAgIG1heEFnZT86IG51bWJlclxuICAgICAgLyoqXG4gICAgICAgKiBTcGVjaWZpZXMgdGhlIHBhdGggZm9yIHRoZSBwcmV2aWV3IHNlc3Npb24gdG8gd29yayB1bmRlci4gQnkgZGVmYXVsdCxcbiAgICAgICAqIHRoZSBwYXRoIGlzIGNvbnNpZGVyZWQgdGhlIFwiZGVmYXVsdCBwYXRoXCIsIGkuZS4sIGFueSBwYWdlcyB1bmRlciBcIi9cIi5cbiAgICAgICAqL1xuICAgICAgcGF0aD86IHN0cmluZ1xuICAgIH1cbiAgKSA9PiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cblxuICAvKipcbiAgICogQ2xlYXIgcHJldmlldyBkYXRhIGZvciBOZXh0LmpzJyBwcmVyZW5kZXIgbW9kZVxuICAgKi9cbiAgY2xlYXJQcmV2aWV3RGF0YTogKG9wdGlvbnM/OiB7IHBhdGg/OiBzdHJpbmcgfSkgPT4gTmV4dEFwaVJlc3BvbnNlPERhdGE+XG5cbiAgLyoqXG4gICAqIFJldmFsaWRhdGUgYSBzcGVjaWZpYyBwYWdlIGFuZCByZWdlbmVyYXRlIGl0IHVzaW5nIE9uLURlbWFuZCBJbmNyZW1lbnRhbFxuICAgKiBTdGF0aWMgUmVnZW5lcmF0aW9uLlxuICAgKiBUaGUgcGF0aCBzaG91bGQgYmUgYW4gYWN0dWFsIHBhdGgsIG5vdCBhIHJld3JpdHRlbiBwYXRoLiBFLmcuIGZvclxuICAgKiBcIi9ibG9nL1tzbHVnXVwiIHRoaXMgc2hvdWxkIGJlIFwiL2Jsb2cvcG9zdC0xXCIuXG4gICAqIEBsaW5rIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL2RhdGEtZmV0Y2hpbmcvaW5jcmVtZW50YWwtc3RhdGljLXJlZ2VuZXJhdGlvbiNvbi1kZW1hbmQtcmV2YWxpZGF0aW9uLXdpdGgtcmV2YWxpZGF0ZXBhdGhcbiAgICovXG4gIHJldmFsaWRhdGU6IChcbiAgICB1cmxQYXRoOiBzdHJpbmcsXG4gICAgb3B0cz86IHtcbiAgICAgIHVuc3RhYmxlX29ubHlHZW5lcmF0ZWQ/OiBib29sZWFuXG4gICAgfVxuICApID0+IFByb21pc2U8dm9pZD5cbn1cblxuLyoqXG4gKiBOZXh0IGBBUElgIHJvdXRlIGhhbmRsZXJcbiAqL1xuZXhwb3J0IHR5cGUgTmV4dEFwaUhhbmRsZXI8VCA9IGFueT4gPSAoXG4gIHJlcTogTmV4dEFwaVJlcXVlc3QsXG4gIHJlczogTmV4dEFwaVJlc3BvbnNlPFQ+XG4pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+XG5cbi8qKlxuICogVXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNPbmNlPFQgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IFJldHVyblR5cGU8VD4+KFxuICBmbjogVFxuKTogVCB7XG4gIGxldCB1c2VkID0gZmFsc2VcbiAgbGV0IHJlc3VsdDogUmV0dXJuVHlwZTxUPlxuXG4gIHJldHVybiAoKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgaWYgKCF1c2VkKSB7XG4gICAgICB1c2VkID0gdHJ1ZVxuICAgICAgcmVzdWx0ID0gZm4oLi4uYXJncylcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KSBhcyBUXG59XG5cbi8vIFNjaGVtZTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjFcbi8vIEFic29sdXRlIFVSTDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi00LjNcbmNvbnN0IEFCU09MVVRFX1VSTF9SRUdFWCA9IC9eW2EtekEtWl1bYS16QS1aXFxkK1xcLS5dKj86L1xuZXhwb3J0IGNvbnN0IGlzQWJzb2x1dGVVcmwgPSAodXJsOiBzdHJpbmcpID0+IEFCU09MVVRFX1VSTF9SRUdFWC50ZXN0KHVybClcblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2F0aW9uT3JpZ2luKCkge1xuICBjb25zdCB7IHByb3RvY29sLCBob3N0bmFtZSwgcG9ydCB9ID0gd2luZG93LmxvY2F0aW9uXG4gIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9JHtwb3J0ID8gJzonICsgcG9ydCA6ICcnfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVSTCgpIHtcbiAgY29uc3QgeyBocmVmIH0gPSB3aW5kb3cubG9jYXRpb25cbiAgY29uc3Qgb3JpZ2luID0gZ2V0TG9jYXRpb25PcmlnaW4oKVxuICByZXR1cm4gaHJlZi5zdWJzdHJpbmcob3JpZ2luLmxlbmd0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lPFA+KENvbXBvbmVudDogQ29tcG9uZW50VHlwZTxQPikge1xuICByZXR1cm4gdHlwZW9mIENvbXBvbmVudCA9PT0gJ3N0cmluZydcbiAgICA/IENvbXBvbmVudFxuICAgIDogQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdVbmtub3duJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXNTZW50KHJlczogU2VydmVyUmVzcG9uc2UpIHtcbiAgcmV0dXJuIHJlcy5maW5pc2hlZCB8fCByZXMuaGVhZGVyc1NlbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyh1cmw6IHN0cmluZykge1xuICBjb25zdCB1cmxQYXJ0cyA9IHVybC5zcGxpdCgnPycpXG4gIGNvbnN0IHVybE5vUXVlcnkgPSB1cmxQYXJ0c1swXVxuXG4gIHJldHVybiAoXG4gICAgdXJsTm9RdWVyeVxuICAgICAgLy8gZmlyc3Qgd2UgcmVwbGFjZSBhbnkgbm9uLWVuY29kZWQgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkXG4gICAgICAvLyB0aGVuIG5vcm1hbGl6ZSByZXBlYXRlZCBmb3J3YXJkIHNsYXNoZXNcbiAgICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICAgIC5yZXBsYWNlKC9cXC9cXC8rL2csICcvJykgK1xuICAgICh1cmxQYXJ0c1sxXSA/IGA/JHt1cmxQYXJ0cy5zbGljZSgxKS5qb2luKCc/Jyl9YCA6ICcnKVxuICApXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkR2V0SW5pdGlhbFByb3BzPFxuICBDIGV4dGVuZHMgQmFzZUNvbnRleHQsXG4gIElQID0ge30sXG4gIFAgPSB7fSxcbj4oQXBwOiBOZXh0Q29tcG9uZW50VHlwZTxDLCBJUCwgUD4sIGN0eDogQyk6IFByb21pc2U8SVA+IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoQXBwLnByb3RvdHlwZT8uZ2V0SW5pdGlhbFByb3BzKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFwiJHtnZXREaXNwbGF5TmFtZShcbiAgICAgICAgQXBwXG4gICAgICApfS5nZXRJbml0aWFsUHJvcHMoKVwiIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kIC0gdmlzaXQgaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZ2V0LWluaXRpYWwtcHJvcHMtYXMtYW4taW5zdGFuY2UtbWV0aG9kIGZvciBtb3JlIGluZm9ybWF0aW9uLmBcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKVxuICAgIH1cbiAgfVxuICAvLyB3aGVuIGNhbGxlZCBmcm9tIF9hcHAgYGN0eGAgaXMgbmVzdGVkIGluIGBjdHhgXG4gIGNvbnN0IHJlcyA9IGN0eC5yZXMgfHwgKGN0eC5jdHggJiYgY3R4LmN0eC5yZXMpXG5cbiAgaWYgKCFBcHAuZ2V0SW5pdGlhbFByb3BzKSB7XG4gICAgaWYgKGN0eC5jdHggJiYgY3R4LkNvbXBvbmVudCkge1xuICAgICAgLy8gQHRzLWlnbm9yZSBwYWdlUHJvcHMgZGVmYXVsdFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZVByb3BzOiBhd2FpdCBsb2FkR2V0SW5pdGlhbFByb3BzKGN0eC5Db21wb25lbnQsIGN0eC5jdHgpLFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge30gYXMgSVBcbiAgfVxuXG4gIGNvbnN0IHByb3BzID0gYXdhaXQgQXBwLmdldEluaXRpYWxQcm9wcyhjdHgpXG5cbiAgaWYgKHJlcyAmJiBpc1Jlc1NlbnQocmVzKSkge1xuICAgIHJldHVybiBwcm9wc1xuICB9XG5cbiAgaWYgKCFwcm9wcykge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgXCIke2dldERpc3BsYXlOYW1lKFxuICAgICAgQXBwXG4gICAgKX0uZ2V0SW5pdGlhbFByb3BzKClcIiBzaG91bGQgcmVzb2x2ZSB0byBhbiBvYmplY3QuIEJ1dCBmb3VuZCBcIiR7cHJvcHN9XCIgaW5zdGVhZC5gXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoID09PSAwICYmICFjdHguY3R4KSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGAke2dldERpc3BsYXlOYW1lKFxuICAgICAgICAgIEFwcFxuICAgICAgICApfSByZXR1cm5lZCBhbiBlbXB0eSBvYmplY3QgZnJvbSBcXGBnZXRJbml0aWFsUHJvcHNcXGAuIFRoaXMgZGUtb3B0aW1pemVzIGFuZCBwcmV2ZW50cyBhdXRvbWF0aWMgc3RhdGljIG9wdGltaXphdGlvbi4gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZW1wdHktb2JqZWN0LWdldEluaXRpYWxQcm9wc2BcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvcHNcbn1cblxuZXhwb3J0IGNvbnN0IFNQID0gdHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJ1xuZXhwb3J0IGNvbnN0IFNUID1cbiAgU1AgJiZcbiAgKFsnbWFyaycsICdtZWFzdXJlJywgJ2dldEVudHJpZXNCeU5hbWUnXSBhcyBjb25zdCkuZXZlcnkoXG4gICAgKG1ldGhvZCkgPT4gdHlwZW9mIHBlcmZvcm1hbmNlW21ldGhvZF0gPT09ICdmdW5jdGlvbidcbiAgKVxuXG5leHBvcnQgY2xhc3MgRGVjb2RlRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuZXhwb3J0IGNsYXNzIE5vcm1hbGl6ZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cbmV4cG9ydCBjbGFzcyBQYWdlTm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29kZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IocGFnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29kZSA9ICdFTk9FTlQnXG4gICAgdGhpcy5uYW1lID0gJ1BhZ2VOb3RGb3VuZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IGBDYW5ub3QgZmluZCBtb2R1bGUgZm9yIHBhZ2U6ICR7cGFnZX1gXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1pc3NpbmdTdGF0aWNQYWdlIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwYWdlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLm1lc3NhZ2UgPSBgRmFpbGVkIHRvIGxvYWQgc3RhdGljIGZpbGUgZm9yIHBhZ2U6ICR7cGFnZX0gJHttZXNzYWdlfWBcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWlkZGxld2FyZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvZGU6IHN0cmluZ1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jb2RlID0gJ0VOT0VOVCdcbiAgICB0aGlzLm1lc3NhZ2UgPSBgQ2Fubm90IGZpbmQgdGhlIG1pZGRsZXdhcmUgbW9kdWxlYFxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVGcyB7XG4gIGV4aXN0c1N5bmM6IHR5cGVvZiBmcy5leGlzdHNTeW5jXG4gIHJlYWRGaWxlOiB0eXBlb2YgZnMucHJvbWlzZXMucmVhZEZpbGVcbiAgcmVhZEZpbGVTeW5jOiB0eXBlb2YgZnMucmVhZEZpbGVTeW5jXG4gIHdyaXRlRmlsZShmOiBzdHJpbmcsIGQ6IGFueSk6IFByb21pc2U8dm9pZD5cbiAgbWtkaXIoZGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQgfCBzdHJpbmc+XG4gIHN0YXQoZjogc3RyaW5nKTogUHJvbWlzZTx7IG10aW1lOiBEYXRlIH0+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlFcnJvcihlcnJvcjogRXJyb3IpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrIH0pXG59XG4iXSwibmFtZXMiOlsiRGVjb2RlRXJyb3IiLCJNaWRkbGV3YXJlTm90Rm91bmRFcnJvciIsIk1pc3NpbmdTdGF0aWNQYWdlIiwiTm9ybWFsaXplRXJyb3IiLCJQYWdlTm90Rm91bmRFcnJvciIsIlNQIiwiU1QiLCJXRUJfVklUQUxTIiwiZXhlY09uY2UiLCJnZXREaXNwbGF5TmFtZSIsImdldExvY2F0aW9uT3JpZ2luIiwiZ2V0VVJMIiwiaXNBYnNvbHV0ZVVybCIsImlzUmVzU2VudCIsImxvYWRHZXRJbml0aWFsUHJvcHMiLCJub3JtYWxpemVSZXBlYXRlZFNsYXNoZXMiLCJzdHJpbmdpZnlFcnJvciIsImZuIiwidXNlZCIsInJlc3VsdCIsImFyZ3MiLCJBQlNPTFVURV9VUkxfUkVHRVgiLCJ1cmwiLCJ0ZXN0IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsInBvcnQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJvcmlnaW4iLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJDb21wb25lbnQiLCJkaXNwbGF5TmFtZSIsIm5hbWUiLCJyZXMiLCJmaW5pc2hlZCIsImhlYWRlcnNTZW50IiwidXJsUGFydHMiLCJzcGxpdCIsInVybE5vUXVlcnkiLCJyZXBsYWNlIiwic2xpY2UiLCJqb2luIiwiQXBwIiwiY3R4IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJvdG90eXBlIiwiZ2V0SW5pdGlhbFByb3BzIiwibWVzc2FnZSIsIkVycm9yIiwicGFnZVByb3BzIiwicHJvcHMiLCJPYmplY3QiLCJrZXlzIiwiY29uc29sZSIsIndhcm4iLCJwZXJmb3JtYW5jZSIsImV2ZXJ5IiwibWV0aG9kIiwiY29uc3RydWN0b3IiLCJwYWdlIiwiY29kZSIsImVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YWNrIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils/warn-once.js":
/*!*****************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils/warn-once.js ***!
\*****************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"warnOnce\", ({\n enumerable: true,\n get: function() {\n return warnOnce;\n }\n}));\nlet warnOnce = (_)=>{};\nif (true) {\n const warnings = new Set();\n warnOnce = (msg)=>{\n if (!warnings.has(msg)) {\n console.warn(msg);\n }\n warnings.add(msg);\n };\n} //# sourceMappingURL=warn-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 // AMP / 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjUuNF9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMF9fcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs0Q0FXU0E7OztlQUFBQTs7O0FBWFQsSUFBSUEsV0FBVyxDQUFDQyxLQUFlO0FBQy9CLElBQUlDLElBQW9CLEVBQW1CO0lBQ3pDLE1BQU1HLFdBQVcsSUFBSUM7SUFDckJOLFdBQVcsQ0FBQ087UUFDVixJQUFJLENBQUNGLFNBQVNHLEdBQUcsQ0FBQ0QsTUFBTTtZQUN0QkUsUUFBUUMsSUFBSSxDQUFDSDtRQUNmO1FBQ0FGLFNBQVNNLEdBQUcsQ0FBQ0o7SUFDZjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsibGV0IHdhcm5PbmNlID0gKF86IHN0cmluZykgPT4ge31cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGNvbnN0IHdhcm5pbmdzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgd2Fybk9uY2UgPSAobXNnOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIXdhcm5pbmdzLmhhcyhtc2cpKSB7XG4gICAgICBjb25zb2xlLndhcm4obXNnKVxuICAgIH1cbiAgICB3YXJuaW5ncy5hZGQobXNnKVxuICB9XG59XG5cbmV4cG9ydCB7IHdhcm5PbmNlIH1cbiJdLCJuYW1lcyI6WyJ3YXJuT25jZSIsIl8iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJ3YXJuaW5ncyIsIlNldCIsIm1zZyIsImhhcyIsImNvbnNvbGUiLCJ3YXJuIiwiYWRkIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils/warn-once.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/cjs/react-dom-client.development.js":
/*!*********************************************************************************************************************!*\
!*** ./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/cjs/react-dom-client.development.js ***!
\*********************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/* provided dependency */ var process = __webpack_require__(/*! process */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/polyfills/process.js\");\n/**\n * @license React\n * react-dom-client.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 Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\n true &&\n (function () {\n function findHook(fiber, id) {\n for (fiber = fiber.memoizedState; null !== fiber && 0 < id; )\n (fiber = fiber.next), id--;\n return fiber;\n }\n function copyWithSetImpl(obj, path, index, value) {\n if (index >= path.length) return value;\n var key = path[index],\n updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);\n return updated;\n }\n function copyWithRename(obj, oldPath, newPath) {\n if (oldPath.length !== newPath.length)\n console.warn(\"copyWithRename() expects paths of the same length\");\n else {\n for (var i = 0; i < newPath.length - 1; i++)\n if (oldPath[i] !== newPath[i]) {\n console.warn(\n \"copyWithRename() expects paths to be the same except for the deepest key\"\n );\n return;\n }\n return copyWithRenameImpl(obj, oldPath, newPath, 0);\n }\n }\n function copyWithRenameImpl(obj, oldPath, newPath, index) {\n var oldKey = oldPath[index],\n updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n index + 1 === oldPath.length\n ? ((updated[newPath[index]] = updated[oldKey]),\n isArrayImpl(updated)\n ? updated.splice(oldKey, 1)\n : delete updated[oldKey])\n : (updated[oldKey] = copyWithRenameImpl(\n obj[oldKey],\n oldPath,\n newPath,\n index + 1\n ));\n return updated;\n }\n function copyWithDeleteImpl(obj, path, index) {\n var key = path[index],\n updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n if (index + 1 === path.length)\n return (\n isArrayImpl(updated) ? updated.splice(key, 1) : delete updated[key],\n updated\n );\n updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);\n return updated;\n }\n function shouldSuspendImpl() {\n return !1;\n }\n function shouldErrorImpl() {\n return null;\n }\n function warnForMissingKey() {}\n function warnInvalidHookAccess() {\n console.error(\n \"Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks\"\n );\n }\n function warnInvalidContextAccess() {\n console.error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n }\n function noop$2() {}\n function setToSortedString(set) {\n var array = [];\n set.forEach(function (value) {\n array.push(value);\n });\n return array.sort().join(\", \");\n }\n function createFiber(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n }\n function scheduleRoot(root, element) {\n root.context === emptyContextObject &&\n (updateContainerImpl(root.current, 2, element, root, null, null),\n flushSyncWork$1());\n }\n function scheduleRefresh(root, update) {\n if (null !== resolveFamily) {\n var staleFamilies = update.staleFamilies;\n update = update.updatedFamilies;\n flushPendingEffects();\n scheduleFibersWithFamiliesRecursively(\n root.current,\n update,\n staleFamilies\n );\n flushSyncWork$1();\n }\n }\n function setRefreshHandler(handler) {\n resolveFamily = handler;\n }\n function isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n }\n function getNearestMountedFiber(fiber) {\n var node = fiber,\n nearestMounted = fiber;\n if (fiber.alternate) for (; node.return; ) node = node.return;\n else {\n fiber = node;\n do\n (node = fiber),\n 0 !== (node.flags & 4098) && (nearestMounted = node.return),\n (fiber = node.return);\n while (fiber);\n }\n return 3 === node.tag ? nearestMounted : null;\n }\n function getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n }\n function assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(\"Unable to find node on an unmounted component.\");\n }\n function findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate)\n throw Error(\"Unable to find node on an unmounted component.\");\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(\"Unable to find node on an unmounted component.\");\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, _child = parentA.child; _child; ) {\n if (_child === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (_child === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n _child = _child.sibling;\n }\n if (!didFindChild) {\n for (_child = parentB.child; _child; ) {\n if (_child === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (_child === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n _child = _child.sibling;\n }\n if (!didFindChild)\n throw Error(\n \"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\"\n );\n }\n }\n if (a.alternate !== b)\n throw Error(\n \"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n if (3 !== a.tag)\n throw Error(\"Unable to find node on an unmounted component.\");\n return a.stateNode.current === a ? fiber : alternate;\n }\n function findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function getComponentNameFromOwner(owner) {\n return \"number\" === typeof owner.tag\n ? getComponentNameFromFiber(owner)\n : \"string\" === typeof owner.name\n ? owner.name\n : null;\n }\n function getComponentNameFromFiber(fiber) {\n var type = fiber.type;\n switch (fiber.tag) {\n case 31:\n return \"Activity\";\n case 24:\n return \"Cache\";\n case 9:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case 10:\n return (type.displayName || \"Context\") + \".Provider\";\n case 18:\n return \"DehydratedFragment\";\n case 11:\n return (\n (fiber = type.render),\n (fiber = fiber.displayName || fiber.name || \"\"),\n type.displayName ||\n (\"\" !== fiber ? \"ForwardRef(\" + fiber + \")\" : \"ForwardRef\")\n );\n case 7:\n return \"Fragment\";\n case 26:\n case 27:\n case 5:\n return type;\n case 4:\n return \"Portal\";\n case 3:\n return \"Root\";\n case 6:\n return \"Text\";\n case 16:\n return getComponentNameFromType(type);\n case 8:\n return type === REACT_STRICT_MODE_TYPE ? \"StrictMode\" : \"Mode\";\n case 22:\n return \"Offscreen\";\n case 12:\n return \"Profiler\";\n case 21:\n return \"Scope\";\n case 13:\n return \"Suspense\";\n case 19:\n return \"SuspenseList\";\n case 25:\n return \"TracingMarker\";\n case 1:\n case 0:\n case 14:\n case 15:\n if (\"function\" === typeof type)\n return type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n break;\n case 29:\n type = fiber._debugInfo;\n if (null != type)\n for (var i = type.length - 1; 0 <= i; i--)\n if (\"string\" === typeof type[i].name) return type[i].name;\n if (null !== fiber.return)\n return getComponentNameFromFiber(fiber.return);\n }\n return null;\n }\n function createCursor(defaultValue) {\n return { current: defaultValue };\n }\n function pop(cursor, fiber) {\n 0 > index$jscomp$0\n ? console.error(\"Unexpected pop.\")\n : (fiber !== fiberStack[index$jscomp$0] &&\n console.error(\"Unexpected Fiber popped.\"),\n (cursor.current = valueStack[index$jscomp$0]),\n (valueStack[index$jscomp$0] = null),\n (fiberStack[index$jscomp$0] = null),\n index$jscomp$0--);\n }\n function push(cursor, value, fiber) {\n index$jscomp$0++;\n valueStack[index$jscomp$0] = cursor.current;\n fiberStack[index$jscomp$0] = fiber;\n cursor.current = value;\n }\n function requiredContext(c) {\n null === c &&\n console.error(\n \"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\"\n );\n return c;\n }\n function pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance, fiber);\n push(contextFiberStackCursor, fiber, fiber);\n push(contextStackCursor, null, fiber);\n var nextRootContext = nextRootInstance.nodeType;\n switch (nextRootContext) {\n case 9:\n case 11:\n nextRootContext = 9 === nextRootContext ? \"#document\" : \"#fragment\";\n nextRootInstance = (nextRootInstance =\n nextRootInstance.documentElement)\n ? (nextRootInstance = nextRootInstance.namespaceURI)\n ? getOwnHostContext(nextRootInstance)\n : HostContextNamespaceNone\n : HostContextNamespaceNone;\n break;\n default:\n if (\n ((nextRootContext = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (nextRootInstance = getChildHostContextProd(\n nextRootInstance,\n nextRootContext\n ));\n else\n switch (nextRootContext) {\n case \"svg\":\n nextRootInstance = HostContextNamespaceSvg;\n break;\n case \"math\":\n nextRootInstance = HostContextNamespaceMath;\n break;\n default:\n nextRootInstance = HostContextNamespaceNone;\n }\n }\n nextRootContext = nextRootContext.toLowerCase();\n nextRootContext = updatedAncestorInfoDev(null, nextRootContext);\n nextRootContext = {\n context: nextRootInstance,\n ancestorInfo: nextRootContext\n };\n pop(contextStackCursor, fiber);\n push(contextStackCursor, nextRootContext, fiber);\n }\n function popHostContainer(fiber) {\n pop(contextStackCursor, fiber);\n pop(contextFiberStackCursor, fiber);\n pop(rootInstanceStackCursor, fiber);\n }\n function getHostContext() {\n return requiredContext(contextStackCursor.current);\n }\n function pushHostContext(fiber) {\n null !== fiber.memoizedState &&\n push(hostTransitionProviderCursor, fiber, fiber);\n var context = requiredContext(contextStackCursor.current);\n var type = fiber.type;\n var nextContext = getChildHostContextProd(context.context, type);\n type = updatedAncestorInfoDev(context.ancestorInfo, type);\n nextContext = { context: nextContext, ancestorInfo: type };\n context !== nextContext &&\n (push(contextFiberStackCursor, fiber, fiber),\n push(contextStackCursor, nextContext, fiber));\n }\n function popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor, fiber), pop(contextFiberStackCursor, fiber));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor, fiber),\n (HostTransitionContext._currentValue = NotPendingTransition));\n }\n function typeName(value) {\n return (\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\"\n );\n }\n function willCoercionThrow(value) {\n try {\n return testStringCoercion(value), !1;\n } catch (e) {\n return !0;\n }\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkAttributeStringCoercion(value, attributeName) {\n if (willCoercionThrow(value))\n return (\n console.error(\n \"The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.\",\n attributeName,\n typeName(value)\n ),\n testStringCoercion(value)\n );\n }\n function checkCSSPropertyStringCoercion(value, propName) {\n if (willCoercionThrow(value))\n return (\n console.error(\n \"The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.\",\n propName,\n typeName(value)\n ),\n testStringCoercion(value)\n );\n }\n function checkFormFieldValueStringCoercion(value) {\n if (willCoercionThrow(value))\n return (\n console.error(\n \"Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.\",\n typeName(value)\n ),\n testStringCoercion(value)\n );\n }\n function injectInternals(internals) {\n if (\"undefined\" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;\n var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (hook.isDisabled) return !0;\n if (!hook.supportsFiber)\n return (\n console.error(\n \"The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools\"\n ),\n !0\n );\n try {\n (rendererID = hook.inject(internals)), (injectedHook = hook);\n } catch (err) {\n console.error(\"React instrumentation encountered an error: %s.\", err);\n }\n return hook.checkDCE ? !0 : !1;\n }\n function setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 &&\n unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n }\n function injectProfilingHooks(profilingHooks) {\n injectedProfilingHooks = profilingHooks;\n }\n function markCommitStopped() {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markCommitStopped &&\n injectedProfilingHooks.markCommitStopped();\n }\n function markComponentRenderStarted(fiber) {\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentRenderStarted &&\n injectedProfilingHooks.markComponentRenderStarted(fiber);\n }\n function markComponentRenderStopped() {\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentRenderStopped &&\n injectedProfilingHooks.markComponentRenderStopped();\n }\n function markRenderStarted(lanes) {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderStarted &&\n injectedProfilingHooks.markRenderStarted(lanes);\n }\n function markRenderStopped() {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderStopped &&\n injectedProfilingHooks.markRenderStopped();\n }\n function markStateUpdateScheduled(fiber, lane) {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markStateUpdateScheduled &&\n injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);\n }\n function clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n }\n function getLabelForLane(lane) {\n if (lane & 1) return \"SyncHydrationLane\";\n if (lane & 2) return \"Sync\";\n if (lane & 4) return \"InputContinuousHydration\";\n if (lane & 8) return \"InputContinuous\";\n if (lane & 16) return \"DefaultHydration\";\n if (lane & 32) return \"Default\";\n if (lane & 128) return \"TransitionHydration\";\n if (lane & 4194048) return \"Transition\";\n if (lane & 62914560) return \"Retry\";\n if (lane & 67108864) return \"SelectiveHydration\";\n if (lane & 134217728) return \"IdleHydration\";\n if (lane & 268435456) return \"Idle\";\n if (lane & 536870912) return \"Offscreen\";\n if (lane & 1073741824) return \"Deferred\";\n }\n function getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 4194048;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return (\n console.error(\n \"Should have found matching lanes. This is a bug in React.\"\n ),\n lanes\n );\n }\n }\n function getNextLanes(root, wipLanes, rootHasPendingCommit) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n root = root.warmLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes =\n getHighestPriorityLanes(rootHasPendingCommit)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = pendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (rootHasPendingCommit = wipLanes & -wipLanes),\n suspendedLanes >= rootHasPendingCommit ||\n (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n ? wipLanes\n : nextLanes;\n }\n function checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n }\n function computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return currentTime + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return (\n console.error(\n \"Should have found matching lanes. This is a bug in React.\"\n ),\n -1\n );\n }\n }\n function claimNextTransitionLane() {\n var lane = nextTransitionLane;\n nextTransitionLane <<= 1;\n 0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);\n return lane;\n }\n function claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n }\n function createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n }\n function markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0),\n (root.pingedLanes = 0),\n (root.warmLanes = 0));\n }\n function markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n ) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index = 31 - clz32(remainingLanes),\n lane = 1 << index;\n entanglements[index] = 0;\n expirationTimes[index] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index] = null, index = 0;\n index < hiddenUpdatesForLane.length;\n index++\n ) {\n var update = hiddenUpdatesForLane[index];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n }\n function markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 4194090);\n }\n function markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index = 31 - clz32(rootEntangledLanes),\n lane = 1 << index;\n (lane & entangledLanes) | (root[index] & entangledLanes) &&\n (root[index] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n }\n function getBumpedLaneForHydrationByLane(lane) {\n switch (lane) {\n case 2:\n lane = 1;\n break;\n case 8:\n lane = 4;\n break;\n case 32:\n lane = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n lane = 128;\n break;\n case 268435456:\n lane = 134217728;\n break;\n default:\n lane = 0;\n }\n return lane;\n }\n function addFiberToLanesMap(root, fiber, lanes) {\n if (isDevToolsPresent)\n for (root = root.pendingUpdatersLaneMap; 0 < lanes; ) {\n var index = 31 - clz32(lanes),\n lane = 1 << index;\n root[index].add(fiber);\n lanes &= ~lane;\n }\n }\n function movePendingFibersToMemoized(root, lanes) {\n if (isDevToolsPresent)\n for (\n var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap,\n memoizedUpdaters = root.memoizedUpdaters;\n 0 < lanes;\n\n ) {\n var index = 31 - clz32(lanes);\n root = 1 << index;\n index = pendingUpdatersLaneMap[index];\n 0 < index.size &&\n (index.forEach(function (fiber) {\n var alternate = fiber.alternate;\n (null !== alternate && memoizedUpdaters.has(alternate)) ||\n memoizedUpdaters.add(fiber);\n }),\n index.clear());\n lanes &= ~root;\n }\n }\n function lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 0 !== DiscreteEventPriority && DiscreteEventPriority < lanes\n ? 0 !== ContinuousEventPriority && ContinuousEventPriority < lanes\n ? 0 !== (lanes & 134217727)\n ? DefaultEventPriority\n : IdleEventPriority\n : ContinuousEventPriority\n : DiscreteEventPriority;\n }\n function resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority\n ? DefaultEventPriority\n : getEventPriority(updatePriority.type);\n }\n function runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n }\n function detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlersKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n }\n function getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n if (targetInst) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentSuspenseInstance(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey]))\n return parentNode;\n targetNode = getParentSuspenseInstance(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n }\n function getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n }\n function getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag)\n return inst.stateNode;\n throw Error(\"getNodeFromInstance: Invalid argument.\");\n }\n function getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n }\n function markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n }\n function registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n }\n function registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] &&\n console.error(\n \"EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.\",\n registrationName\n );\n registrationNameDependencies[registrationName] = dependencies;\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n \"onDoubleClick\" === registrationName &&\n (possibleRegistrationNames.ondblclick = registrationName);\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n }\n function checkControlledValueProps(tagName, props) {\n hasReadOnlyValue[props.type] ||\n props.onChange ||\n props.onInput ||\n props.readOnly ||\n props.disabled ||\n null == props.value ||\n (\"select\" === tagName\n ? console.error(\n \"You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`.\"\n )\n : console.error(\n \"You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.\"\n ));\n props.onChange ||\n props.readOnly ||\n props.disabled ||\n null == props.checked ||\n console.error(\n \"You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.\"\n );\n }\n function isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))\n return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n console.error(\"Invalid attribute name: `%s`\", attributeName);\n return !1;\n }\n function getValueForAttributeOnCustomComponent(node, name, expected) {\n if (isAttributeNameSafe(name)) {\n if (!node.hasAttribute(name)) {\n switch (typeof expected) {\n case \"symbol\":\n case \"object\":\n return expected;\n case \"function\":\n return expected;\n case \"boolean\":\n if (!1 === expected) return expected;\n }\n return void 0 === expected ? void 0 : null;\n }\n node = node.getAttribute(name);\n if (\"\" === node && !0 === expected) return !0;\n checkAttributeStringCoercion(expected, name);\n return node === \"\" + expected ? expected : node;\n }\n }\n function setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix && \"aria-\" !== prefix) {\n node.removeAttribute(name);\n return;\n }\n }\n checkAttributeStringCoercion(value, name);\n node.setAttribute(name, \"\" + value);\n }\n }\n function setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n checkAttributeStringCoercion(value, name);\n node.setAttribute(name, \"\" + value);\n }\n }\n function setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n checkAttributeStringCoercion(value, name);\n node.setAttributeNS(namespace, name, \"\" + value);\n }\n }\n function disabledLog() {}\n function disableLogs() {\n if (0 === disabledDepth) {\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd;\n var props = {\n configurable: !0,\n enumerable: !0,\n value: disabledLog,\n writable: !0\n };\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n }\n disabledDepth++;\n }\n function reenableLogs() {\n disabledDepth--;\n if (0 === disabledDepth) {\n var props = { configurable: !0, enumerable: !0, writable: !0 };\n Object.defineProperties(console, {\n log: assign({}, props, { value: prevLog }),\n info: assign({}, props, { value: prevInfo }),\n warn: assign({}, props, { value: prevWarn }),\n error: assign({}, props, { value: prevError }),\n group: assign({}, props, { value: prevGroup }),\n groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),\n groupEnd: assign({}, props, { value: prevGroupEnd })\n });\n }\n 0 > disabledDepth &&\n console.error(\n \"disabledDepth fell below zero. This is a bug in React. Please file an issue.\"\n );\n }\n function describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n }\n function describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n var frame = componentFrameCache.get(fn);\n if (void 0 !== frame) return frame;\n reentry = !0;\n frame = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n var previousDispatcher = null;\n previousDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = null;\n disableLogs();\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$0) {\n control = x$0;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$1) {\n control = x$1;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter =\n RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n _RunInRootFrame$Deter = namePropDescriptor = 0;\n namePropDescriptor < sampleLines.length &&\n !sampleLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n for (\n ;\n _RunInRootFrame$Deter < controlLines.length &&\n !controlLines[_RunInRootFrame$Deter].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n _RunInRootFrame$Deter++;\n if (\n namePropDescriptor === sampleLines.length ||\n _RunInRootFrame$Deter === controlLines.length\n )\n for (\n namePropDescriptor = sampleLines.length - 1,\n _RunInRootFrame$Deter = controlLines.length - 1;\n 1 <= namePropDescriptor &&\n 0 <= _RunInRootFrame$Deter &&\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter];\n\n )\n _RunInRootFrame$Deter--;\n for (\n ;\n 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;\n namePropDescriptor--, _RunInRootFrame$Deter--\n )\n if (\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter]\n ) {\n if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {\n do\n if (\n (namePropDescriptor--,\n _RunInRootFrame$Deter--,\n 0 > _RunInRootFrame$Deter ||\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter])\n ) {\n var _frame =\n \"\\n\" +\n sampleLines[namePropDescriptor].replace(\n \" at new \",\n \" at \"\n );\n fn.displayName &&\n _frame.includes(\"<anonymous>\") &&\n (_frame = _frame.replace(\"<anonymous>\", fn.displayName));\n \"function\" === typeof fn &&\n componentFrameCache.set(fn, _frame);\n return _frame;\n }\n while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);\n }\n break;\n }\n }\n } finally {\n (reentry = !1),\n (ReactSharedInternals.H = previousDispatcher),\n reenableLogs(),\n (Error.prepareStackTrace = frame);\n }\n sampleLines = (sampleLines = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(sampleLines)\n : \"\";\n \"function\" === typeof fn && componentFrameCache.set(fn, sampleLines);\n return sampleLines;\n }\n function formatOwnerStack(error) {\n var prevPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n error = error.stack;\n Error.prepareStackTrace = prevPrepareStackTrace;\n error.startsWith(\"Error: react-stack-top-frame\\n\") &&\n (error = error.slice(29));\n prevPrepareStackTrace = error.indexOf(\"\\n\");\n -1 !== prevPrepareStackTrace &&\n (error = error.slice(prevPrepareStackTrace + 1));\n prevPrepareStackTrace = error.indexOf(\"react-stack-bottom-frame\");\n -1 !== prevPrepareStackTrace &&\n (prevPrepareStackTrace = error.lastIndexOf(\n \"\\n\",\n prevPrepareStackTrace\n ));\n if (-1 !== prevPrepareStackTrace)\n error = error.slice(0, prevPrepareStackTrace);\n else return \"\";\n return error;\n }\n function describeFiber(fiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return describeNativeComponentFrame(fiber.type, !1);\n case 11:\n return describeNativeComponentFrame(fiber.type.render, !1);\n case 1:\n return describeNativeComponentFrame(fiber.type, !0);\n case 31:\n return describeBuiltInComponentFrame(\"Activity\");\n default:\n return \"\";\n }\n }\n function getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\";\n do {\n info += describeFiber(workInProgress);\n var debugInfo = workInProgress._debugInfo;\n if (debugInfo)\n for (var i = debugInfo.length - 1; 0 <= i; i--) {\n var entry = debugInfo[i];\n if (\"string\" === typeof entry.name) {\n var JSCompiler_temp_const = info,\n env = entry.env;\n var JSCompiler_inline_result = describeBuiltInComponentFrame(\n entry.name + (env ? \" [\" + env + \"]\" : \"\")\n );\n info = JSCompiler_temp_const + JSCompiler_inline_result;\n }\n }\n workInProgress = workInProgress.return;\n } while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n }\n function describeFunctionComponentFrameWithoutLineNumber(fn) {\n return (fn = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(fn)\n : \"\";\n }\n function getCurrentFiberOwnerNameInDevOrNull() {\n if (null === current) return null;\n var owner = current._debugOwner;\n return null != owner ? getComponentNameFromOwner(owner) : null;\n }\n function getCurrentFiberStackInDev() {\n if (null === current) return \"\";\n var workInProgress = current;\n try {\n var info = \"\";\n 6 === workInProgress.tag && (workInProgress = workInProgress.return);\n switch (workInProgress.tag) {\n case 26:\n case 27:\n case 5:\n info += describeBuiltInComponentFrame(workInProgress.type);\n break;\n case 13:\n info += describeBuiltInComponentFrame(\"Suspense\");\n break;\n case 19:\n info += describeBuiltInComponentFrame(\"SuspenseList\");\n break;\n case 31:\n info += describeBuiltInComponentFrame(\"Activity\");\n break;\n case 30:\n case 0:\n case 15:\n case 1:\n workInProgress._debugOwner ||\n \"\" !== info ||\n (info += describeFunctionComponentFrameWithoutLineNumber(\n workInProgress.type\n ));\n break;\n case 11:\n workInProgress._debugOwner ||\n \"\" !== info ||\n (info += describeFunctionComponentFrameWithoutLineNumber(\n workInProgress.type.render\n ));\n }\n for (; workInProgress; )\n if (\"number\" === typeof workInProgress.tag) {\n var fiber = workInProgress;\n workInProgress = fiber._debugOwner;\n var debugStack = fiber._debugStack;\n workInProgress &&\n debugStack &&\n (\"string\" !== typeof debugStack &&\n (fiber._debugStack = debugStack = formatOwnerStack(debugStack)),\n \"\" !== debugStack && (info += \"\\n\" + debugStack));\n } else if (null != workInProgress.debugStack) {\n var ownerStack = workInProgress.debugStack;\n (workInProgress = workInProgress.owner) &&\n ownerStack &&\n (info += \"\\n\" + formatOwnerStack(ownerStack));\n } else break;\n var JSCompiler_inline_result = info;\n } catch (x) {\n JSCompiler_inline_result =\n \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n return JSCompiler_inline_result;\n }\n function runWithFiberInDEV(fiber, callback, arg0, arg1, arg2, arg3, arg4) {\n var previousFiber = current;\n setCurrentFiber(fiber);\n try {\n return null !== fiber && fiber._debugTask\n ? fiber._debugTask.run(\n callback.bind(null, arg0, arg1, arg2, arg3, arg4)\n )\n : callback(arg0, arg1, arg2, arg3, arg4);\n } finally {\n setCurrentFiber(previousFiber);\n }\n throw Error(\n \"runWithFiberInDEV should never be called in production. This is a bug in React.\"\n );\n }\n function setCurrentFiber(fiber) {\n ReactSharedInternals.getCurrentStack =\n null === fiber ? null : getCurrentFiberStackInDev;\n isRendering = !1;\n current = fiber;\n }\n function getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return checkFormFieldValueStringCoercion(value), value;\n default:\n return \"\";\n }\n }\n function isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n }\n function trackValueOnNode(node) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\",\n descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n checkFormFieldValueStringCoercion(node[valueField]);\n var currentValue = \"\" + node[valueField];\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n checkFormFieldValueStringCoercion(value);\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n checkFormFieldValueStringCoercion(value);\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n }\n function track(node) {\n node._valueTracker || (node._valueTracker = trackValueOnNode(node));\n }\n function updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n }\n function getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n }\n function escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n }\n function validateInputProps(element, props) {\n void 0 === props.checked ||\n void 0 === props.defaultChecked ||\n didWarnCheckedDefaultChecked ||\n (console.error(\n \"%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components\",\n getCurrentFiberOwnerNameInDevOrNull() || \"A component\",\n props.type\n ),\n (didWarnCheckedDefaultChecked = !0));\n void 0 === props.value ||\n void 0 === props.defaultValue ||\n didWarnValueDefaultValue$1 ||\n (console.error(\n \"%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components\",\n getCurrentFiberOwnerNameInDevOrNull() || \"A component\",\n props.type\n ),\n (didWarnValueDefaultValue$1 = !0));\n }\n function updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n ) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (checkAttributeStringCoercion(type, \"type\"), (element.type = type))\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) ||\n element.removeAttribute(\"value\");\n null != value\n ? setDefaultValue(element, type, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, type, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked &&\n \"function\" !== typeof checked &&\n \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (checkAttributeStringCoercion(name, \"name\"),\n (element.name = \"\" + getToStringValue(name)))\n : element.removeAttribute(\"name\");\n }\n function initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n ) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (checkAttributeStringCoercion(type, \"type\"), (element.type = type));\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n )\n return;\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked &&\n \"symbol\" !== typeof checked &&\n !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (checkAttributeStringCoercion(name, \"name\"), (element.name = name));\n }\n function setDefaultValue(node, type, value) {\n (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n node.defaultValue === \"\" + value ||\n (node.defaultValue = \"\" + value);\n }\n function validateOptionProps(element, props) {\n null == props.value &&\n (\"object\" === typeof props.children && null !== props.children\n ? React.Children.forEach(props.children, function (child) {\n null == child ||\n \"string\" === typeof child ||\n \"number\" === typeof child ||\n \"bigint\" === typeof child ||\n didWarnInvalidChild ||\n ((didWarnInvalidChild = !0),\n console.error(\n \"Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>.\"\n ));\n })\n : null == props.dangerouslySetInnerHTML ||\n didWarnInvalidInnerHTML ||\n ((didWarnInvalidInnerHTML = !0),\n console.error(\n \"Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected.\"\n )));\n null == props.selected ||\n didWarnSelectedSetOnOption ||\n (console.error(\n \"Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>.\"\n ),\n (didWarnSelectedSetOnOption = !0));\n }\n function getDeclarationErrorAddendum() {\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n return ownerName\n ? \"\\n\\nCheck the render method of `\" + ownerName + \"`.\"\n : \"\";\n }\n function updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n }\n function validateSelectProps(element, props) {\n for (element = 0; element < valuePropNames.length; element++) {\n var propName = valuePropNames[element];\n if (null != props[propName]) {\n var propNameIsArray = isArrayImpl(props[propName]);\n props.multiple && !propNameIsArray\n ? console.error(\n \"The `%s` prop supplied to <select> must be an array if `multiple` is true.%s\",\n propName,\n getDeclarationErrorAddendum()\n )\n : !props.multiple &&\n propNameIsArray &&\n console.error(\n \"The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.%s\",\n propName,\n getDeclarationErrorAddendum()\n );\n }\n }\n void 0 === props.value ||\n void 0 === props.defaultValue ||\n didWarnValueDefaultValue ||\n (console.error(\n \"Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components\"\n ),\n (didWarnValueDefaultValue = !0));\n }\n function validateTextareaProps(element, props) {\n void 0 === props.value ||\n void 0 === props.defaultValue ||\n didWarnValDefaultVal ||\n (console.error(\n \"%s contains a textarea with both value and defaultValue props. Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components\",\n getCurrentFiberOwnerNameInDevOrNull() || \"A component\"\n ),\n (didWarnValDefaultVal = !0));\n null != props.children &&\n null == props.value &&\n console.error(\n \"Use the `defaultValue` or `value` props instead of setting children on <textarea>.\"\n );\n }\n function updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n }\n function initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue)\n throw Error(\n \"If you supply `defaultValue` on a <textarea>, do not pass children.\"\n );\n if (isArrayImpl(children)) {\n if (1 < children.length)\n throw Error(\"<textarea> can only have at most one child.\");\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n }\n function findNotableNode(node, indent) {\n return void 0 === node.serverProps &&\n 0 === node.serverTail.length &&\n 1 === node.children.length &&\n 3 < node.distanceFromLeaf &&\n node.distanceFromLeaf > 15 - indent\n ? findNotableNode(node.children[0], indent)\n : node;\n }\n function indentation(indent) {\n return \" \" + \" \".repeat(indent);\n }\n function added(indent) {\n return \"+ \" + \" \".repeat(indent);\n }\n function removed(indent) {\n return \"- \" + \" \".repeat(indent);\n }\n function describeFiberType(fiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return fiber.type;\n case 16:\n return \"Lazy\";\n case 13:\n return \"Suspense\";\n case 19:\n return \"SuspenseList\";\n case 0:\n case 15:\n return (fiber = fiber.type), fiber.displayName || fiber.name || null;\n case 11:\n return (\n (fiber = fiber.type.render), fiber.displayName || fiber.name || null\n );\n case 1:\n return (fiber = fiber.type), fiber.displayName || fiber.name || null;\n default:\n return null;\n }\n }\n function describeTextNode(content, maxLength) {\n return needsEscaping.test(content)\n ? ((content = JSON.stringify(content)),\n content.length > maxLength - 2\n ? 8 > maxLength\n ? '{\"...\"}'\n : \"{\" + content.slice(0, maxLength - 7) + '...\"}'\n : \"{\" + content + \"}\")\n : content.length > maxLength\n ? 5 > maxLength\n ? '{\"...\"}'\n : content.slice(0, maxLength - 3) + \"...\"\n : content;\n }\n function describeTextDiff(clientText, serverProps, indent) {\n var maxLength = 120 - 2 * indent;\n if (null === serverProps)\n return added(indent) + describeTextNode(clientText, maxLength) + \"\\n\";\n if (\"string\" === typeof serverProps) {\n for (\n var firstDiff = 0;\n firstDiff < serverProps.length &&\n firstDiff < clientText.length &&\n serverProps.charCodeAt(firstDiff) ===\n clientText.charCodeAt(firstDiff);\n firstDiff++\n );\n firstDiff > maxLength - 8 &&\n 10 < firstDiff &&\n ((clientText = \"...\" + clientText.slice(firstDiff - 8)),\n (serverProps = \"...\" + serverProps.slice(firstDiff - 8)));\n return (\n added(indent) +\n describeTextNode(clientText, maxLength) +\n \"\\n\" +\n removed(indent) +\n describeTextNode(serverProps, maxLength) +\n \"\\n\"\n );\n }\n return (\n indentation(indent) + describeTextNode(clientText, maxLength) + \"\\n\"\n );\n }\n function objectName(object) {\n return Object.prototype.toString\n .call(object)\n .replace(/^\\[object (.*)\\]$/, function (m, p0) {\n return p0;\n });\n }\n function describeValue(value, maxLength) {\n switch (typeof value) {\n case \"string\":\n return (\n (value = JSON.stringify(value)),\n value.length > maxLength\n ? 5 > maxLength\n ? '\"...\"'\n : value.slice(0, maxLength - 4) + '...\"'\n : value\n );\n case \"object\":\n if (null === value) return \"null\";\n if (isArrayImpl(value)) return \"[...]\";\n if (value.$$typeof === REACT_ELEMENT_TYPE)\n return (maxLength = getComponentNameFromType(value.type))\n ? \"<\" + maxLength + \">\"\n : \"<...>\";\n var name = objectName(value);\n if (\"Object\" === name) {\n name = \"\";\n maxLength -= 2;\n for (var propName in value)\n if (value.hasOwnProperty(propName)) {\n var jsonPropName = JSON.stringify(propName);\n jsonPropName !== '\"' + propName + '\"' &&\n (propName = jsonPropName);\n maxLength -= propName.length - 2;\n jsonPropName = describeValue(\n value[propName],\n 15 > maxLength ? maxLength : 15\n );\n maxLength -= jsonPropName.length;\n if (0 > maxLength) {\n name += \"\" === name ? \"...\" : \", ...\";\n break;\n }\n name +=\n (\"\" === name ? \"\" : \",\") + propName + \":\" + jsonPropName;\n }\n return \"{\" + name + \"}\";\n }\n return name;\n case \"function\":\n return (maxLength = value.displayName || value.name)\n ? \"function \" + maxLength\n : \"function\";\n default:\n return String(value);\n }\n }\n function describePropValue(value, maxLength) {\n return \"string\" !== typeof value || needsEscaping.test(value)\n ? \"{\" + describeValue(value, maxLength - 2) + \"}\"\n : value.length > maxLength - 2\n ? 5 > maxLength\n ? '\"...\"'\n : '\"' + value.slice(0, maxLength - 5) + '...\"'\n : '\"' + value + '\"';\n }\n function describeExpandedElement(type, props, rowPrefix) {\n var remainingRowLength = 120 - rowPrefix.length - type.length,\n properties = [],\n propName;\n for (propName in props)\n if (props.hasOwnProperty(propName) && \"children\" !== propName) {\n var propValue = describePropValue(\n props[propName],\n 120 - rowPrefix.length - propName.length - 1\n );\n remainingRowLength -= propName.length + propValue.length + 2;\n properties.push(propName + \"=\" + propValue);\n }\n return 0 === properties.length\n ? rowPrefix + \"<\" + type + \">\\n\"\n : 0 < remainingRowLength\n ? rowPrefix + \"<\" + type + \" \" + properties.join(\" \") + \">\\n\"\n : rowPrefix +\n \"<\" +\n type +\n \"\\n\" +\n rowPrefix +\n \" \" +\n properties.join(\"\\n\" + rowPrefix + \" \") +\n \"\\n\" +\n rowPrefix +\n \">\\n\";\n }\n function describePropertiesDiff(clientObject, serverObject, indent) {\n var properties = \"\",\n remainingServerProperties = assign({}, serverObject),\n propName;\n for (propName in clientObject)\n if (clientObject.hasOwnProperty(propName)) {\n delete remainingServerProperties[propName];\n var maxLength = 120 - 2 * indent - propName.length - 2,\n clientPropValue = describeValue(clientObject[propName], maxLength);\n serverObject.hasOwnProperty(propName)\n ? ((maxLength = describeValue(serverObject[propName], maxLength)),\n (properties +=\n added(indent) + propName + \": \" + clientPropValue + \"\\n\"),\n (properties +=\n removed(indent) + propName + \": \" + maxLength + \"\\n\"))\n : (properties +=\n added(indent) + propName + \": \" + clientPropValue + \"\\n\");\n }\n for (var _propName in remainingServerProperties)\n remainingServerProperties.hasOwnProperty(_propName) &&\n ((clientObject = describeValue(\n remainingServerProperties[_propName],\n 120 - 2 * indent - _propName.length - 2\n )),\n (properties +=\n removed(indent) + _propName + \": \" + clientObject + \"\\n\"));\n return properties;\n }\n function describeElementDiff(type, clientProps, serverProps, indent) {\n var content = \"\",\n serverPropNames = new Map();\n for (propName$jscomp$0 in serverProps)\n serverProps.hasOwnProperty(propName$jscomp$0) &&\n serverPropNames.set(\n propName$jscomp$0.toLowerCase(),\n propName$jscomp$0\n );\n if (1 === serverPropNames.size && serverPropNames.has(\"children\"))\n content += describeExpandedElement(\n type,\n clientProps,\n indentation(indent)\n );\n else {\n for (var _propName2 in clientProps)\n if (\n clientProps.hasOwnProperty(_propName2) &&\n \"children\" !== _propName2\n ) {\n var maxLength$jscomp$0 =\n 120 - 2 * (indent + 1) - _propName2.length - 1,\n serverPropName = serverPropNames.get(_propName2.toLowerCase());\n if (void 0 !== serverPropName) {\n serverPropNames.delete(_propName2.toLowerCase());\n var propName$jscomp$0 = clientProps[_propName2];\n serverPropName = serverProps[serverPropName];\n var clientPropValue = describePropValue(\n propName$jscomp$0,\n maxLength$jscomp$0\n );\n maxLength$jscomp$0 = describePropValue(\n serverPropName,\n maxLength$jscomp$0\n );\n \"object\" === typeof propName$jscomp$0 &&\n null !== propName$jscomp$0 &&\n \"object\" === typeof serverPropName &&\n null !== serverPropName &&\n \"Object\" === objectName(propName$jscomp$0) &&\n \"Object\" === objectName(serverPropName) &&\n (2 < Object.keys(propName$jscomp$0).length ||\n 2 < Object.keys(serverPropName).length ||\n -1 < clientPropValue.indexOf(\"...\") ||\n -1 < maxLength$jscomp$0.indexOf(\"...\"))\n ? (content +=\n indentation(indent + 1) +\n _propName2 +\n \"={{\\n\" +\n describePropertiesDiff(\n propName$jscomp$0,\n serverPropName,\n indent + 2\n ) +\n indentation(indent + 1) +\n \"}}\\n\")\n : ((content +=\n added(indent + 1) +\n _propName2 +\n \"=\" +\n clientPropValue +\n \"\\n\"),\n (content +=\n removed(indent + 1) +\n _propName2 +\n \"=\" +\n maxLength$jscomp$0 +\n \"\\n\"));\n } else\n content +=\n indentation(indent + 1) +\n _propName2 +\n \"=\" +\n describePropValue(clientProps[_propName2], maxLength$jscomp$0) +\n \"\\n\";\n }\n serverPropNames.forEach(function (propName) {\n if (\"children\" !== propName) {\n var maxLength = 120 - 2 * (indent + 1) - propName.length - 1;\n content +=\n removed(indent + 1) +\n propName +\n \"=\" +\n describePropValue(serverProps[propName], maxLength) +\n \"\\n\";\n }\n });\n content =\n \"\" === content\n ? indentation(indent) + \"<\" + type + \">\\n\"\n : indentation(indent) +\n \"<\" +\n type +\n \"\\n\" +\n content +\n indentation(indent) +\n \">\\n\";\n }\n type = serverProps.children;\n clientProps = clientProps.children;\n if (\n \"string\" === typeof type ||\n \"number\" === typeof type ||\n \"bigint\" === typeof type\n ) {\n serverPropNames = \"\";\n if (\n \"string\" === typeof clientProps ||\n \"number\" === typeof clientProps ||\n \"bigint\" === typeof clientProps\n )\n serverPropNames = \"\" + clientProps;\n content += describeTextDiff(serverPropNames, \"\" + type, indent + 1);\n } else if (\n \"string\" === typeof clientProps ||\n \"number\" === typeof clientProps ||\n \"bigint\" === typeof clientProps\n )\n content =\n null == type\n ? content + describeTextDiff(\"\" + clientProps, null, indent + 1)\n : content + describeTextDiff(\"\" + clientProps, void 0, indent + 1);\n return content;\n }\n function describeSiblingFiber(fiber, indent) {\n var type = describeFiberType(fiber);\n if (null === type) {\n type = \"\";\n for (fiber = fiber.child; fiber; )\n (type += describeSiblingFiber(fiber, indent)),\n (fiber = fiber.sibling);\n return type;\n }\n return indentation(indent) + \"<\" + type + \">\\n\";\n }\n function describeNode(node, indent) {\n var skipToNode = findNotableNode(node, indent);\n if (\n skipToNode !== node &&\n (1 !== node.children.length || node.children[0] !== skipToNode)\n )\n return (\n indentation(indent) + \"...\\n\" + describeNode(skipToNode, indent + 1)\n );\n skipToNode = \"\";\n var debugInfo = node.fiber._debugInfo;\n if (debugInfo)\n for (var i = 0; i < debugInfo.length; i++) {\n var serverComponentName = debugInfo[i].name;\n \"string\" === typeof serverComponentName &&\n ((skipToNode +=\n indentation(indent) + \"<\" + serverComponentName + \">\\n\"),\n indent++);\n }\n debugInfo = \"\";\n i = node.fiber.pendingProps;\n if (6 === node.fiber.tag)\n (debugInfo = describeTextDiff(i, node.serverProps, indent)), indent++;\n else if (\n ((serverComponentName = describeFiberType(node.fiber)),\n null !== serverComponentName)\n )\n if (void 0 === node.serverProps) {\n debugInfo = indent;\n var maxLength = 120 - 2 * debugInfo - serverComponentName.length - 2,\n content = \"\";\n for (propName in i)\n if (i.hasOwnProperty(propName) && \"children\" !== propName) {\n var propValue = describePropValue(i[propName], 15);\n maxLength -= propName.length + propValue.length + 2;\n if (0 > maxLength) {\n content += \" ...\";\n break;\n }\n content += \" \" + propName + \"=\" + propValue;\n }\n debugInfo =\n indentation(debugInfo) +\n \"<\" +\n serverComponentName +\n content +\n \">\\n\";\n indent++;\n } else\n null === node.serverProps\n ? ((debugInfo = describeExpandedElement(\n serverComponentName,\n i,\n added(indent)\n )),\n indent++)\n : \"string\" === typeof node.serverProps\n ? console.error(\n \"Should not have matched a non HostText fiber to a Text node. This is a bug in React.\"\n )\n : ((debugInfo = describeElementDiff(\n serverComponentName,\n i,\n node.serverProps,\n indent\n )),\n indent++);\n var propName = \"\";\n i = node.fiber.child;\n for (\n serverComponentName = 0;\n i && serverComponentName < node.children.length;\n\n )\n (maxLength = node.children[serverComponentName]),\n maxLength.fiber === i\n ? ((propName += describeNode(maxLength, indent)),\n serverComponentName++)\n : (propName += describeSiblingFiber(i, indent)),\n (i = i.sibling);\n i &&\n 0 < node.children.length &&\n (propName += indentation(indent) + \"...\\n\");\n i = node.serverTail;\n null === node.serverProps && indent--;\n for (node = 0; node < i.length; node++)\n (serverComponentName = i[node]),\n (propName =\n \"string\" === typeof serverComponentName\n ? propName +\n (removed(indent) +\n describeTextNode(serverComponentName, 120 - 2 * indent) +\n \"\\n\")\n : propName +\n describeExpandedElement(\n serverComponentName.type,\n serverComponentName.props,\n removed(indent)\n ));\n return skipToNode + debugInfo + propName;\n }\n function describeDiff(rootNode) {\n try {\n return \"\\n\\n\" + describeNode(rootNode, 0);\n } catch (x) {\n return \"\";\n }\n }\n function describeAncestors(ancestor, child, props) {\n for (var fiber = child, node = null, distanceFromLeaf = 0; fiber; )\n fiber === ancestor && (distanceFromLeaf = 0),\n (node = {\n fiber: fiber,\n children: null !== node ? [node] : [],\n serverProps:\n fiber === child ? props : fiber === ancestor ? null : void 0,\n serverTail: [],\n distanceFromLeaf: distanceFromLeaf\n }),\n distanceFromLeaf++,\n (fiber = fiber.return);\n return null !== node ? describeDiff(node).replaceAll(/^[+-]/gm, \">\") : \"\";\n }\n function updatedAncestorInfoDev(oldInfo, tag) {\n var ancestorInfo = assign({}, oldInfo || emptyAncestorInfoDev),\n info = { tag: tag };\n -1 !== inScopeTags.indexOf(tag) &&\n ((ancestorInfo.aTagInScope = null),\n (ancestorInfo.buttonTagInScope = null),\n (ancestorInfo.nobrTagInScope = null));\n -1 !== buttonScopeTags.indexOf(tag) &&\n (ancestorInfo.pTagInButtonScope = null);\n -1 !== specialTags.indexOf(tag) &&\n \"address\" !== tag &&\n \"div\" !== tag &&\n \"p\" !== tag &&\n ((ancestorInfo.listItemTagAutoclosing = null),\n (ancestorInfo.dlItemTagAutoclosing = null));\n ancestorInfo.current = info;\n \"form\" === tag && (ancestorInfo.formTag = info);\n \"a\" === tag && (ancestorInfo.aTagInScope = info);\n \"button\" === tag && (ancestorInfo.buttonTagInScope = info);\n \"nobr\" === tag && (ancestorInfo.nobrTagInScope = info);\n \"p\" === tag && (ancestorInfo.pTagInButtonScope = info);\n \"li\" === tag && (ancestorInfo.listItemTagAutoclosing = info);\n if (\"dd\" === tag || \"dt\" === tag)\n ancestorInfo.dlItemTagAutoclosing = info;\n \"#document\" === tag || \"html\" === tag\n ? (ancestorInfo.containerTagInScope = null)\n : ancestorInfo.containerTagInScope ||\n (ancestorInfo.containerTagInScope = info);\n null !== oldInfo ||\n (\"#document\" !== tag && \"html\" !== tag && \"body\" !== tag)\n ? !0 === ancestorInfo.implicitRootScope &&\n (ancestorInfo.implicitRootScope = !1)\n : (ancestorInfo.implicitRootScope = !0);\n return ancestorInfo;\n }\n function isTagValidWithParent(tag, parentTag, implicitRootScope) {\n switch (parentTag) {\n case \"select\":\n return (\n \"hr\" === tag ||\n \"option\" === tag ||\n \"optgroup\" === tag ||\n \"script\" === tag ||\n \"template\" === tag ||\n \"#text\" === tag\n );\n case \"optgroup\":\n return \"option\" === tag || \"#text\" === tag;\n case \"option\":\n return \"#text\" === tag;\n case \"tr\":\n return (\n \"th\" === tag ||\n \"td\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"tbody\":\n case \"thead\":\n case \"tfoot\":\n return (\n \"tr\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"colgroup\":\n return \"col\" === tag || \"template\" === tag;\n case \"table\":\n return (\n \"caption\" === tag ||\n \"colgroup\" === tag ||\n \"tbody\" === tag ||\n \"tfoot\" === tag ||\n \"thead\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"head\":\n return (\n \"base\" === tag ||\n \"basefont\" === tag ||\n \"bgsound\" === tag ||\n \"link\" === tag ||\n \"meta\" === tag ||\n \"title\" === tag ||\n \"noscript\" === tag ||\n \"noframes\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"html\":\n if (implicitRootScope) break;\n return \"head\" === tag || \"body\" === tag || \"frameset\" === tag;\n case \"frameset\":\n return \"frame\" === tag;\n case \"#document\":\n if (!implicitRootScope) return \"html\" === tag;\n }\n switch (tag) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n return (\n \"h1\" !== parentTag &&\n \"h2\" !== parentTag &&\n \"h3\" !== parentTag &&\n \"h4\" !== parentTag &&\n \"h5\" !== parentTag &&\n \"h6\" !== parentTag\n );\n case \"rp\":\n case \"rt\":\n return -1 === impliedEndTags.indexOf(parentTag);\n case \"caption\":\n case \"col\":\n case \"colgroup\":\n case \"frameset\":\n case \"frame\":\n case \"tbody\":\n case \"td\":\n case \"tfoot\":\n case \"th\":\n case \"thead\":\n case \"tr\":\n return null == parentTag;\n case \"head\":\n return implicitRootScope || null === parentTag;\n case \"html\":\n return (\n (implicitRootScope && \"#document\" === parentTag) ||\n null === parentTag\n );\n case \"body\":\n return (\n (implicitRootScope &&\n (\"#document\" === parentTag || \"html\" === parentTag)) ||\n null === parentTag\n );\n }\n return !0;\n }\n function findInvalidAncestorForTag(tag, ancestorInfo) {\n switch (tag) {\n case \"address\":\n case \"article\":\n case \"aside\":\n case \"blockquote\":\n case \"center\":\n case \"details\":\n case \"dialog\":\n case \"dir\":\n case \"div\":\n case \"dl\":\n case \"fieldset\":\n case \"figcaption\":\n case \"figure\":\n case \"footer\":\n case \"header\":\n case \"hgroup\":\n case \"main\":\n case \"menu\":\n case \"nav\":\n case \"ol\":\n case \"p\":\n case \"section\":\n case \"summary\":\n case \"ul\":\n case \"pre\":\n case \"listing\":\n case \"table\":\n case \"hr\":\n case \"xmp\":\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n return ancestorInfo.pTagInButtonScope;\n case \"form\":\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n case \"li\":\n return ancestorInfo.listItemTagAutoclosing;\n case \"dd\":\n case \"dt\":\n return ancestorInfo.dlItemTagAutoclosing;\n case \"button\":\n return ancestorInfo.buttonTagInScope;\n case \"a\":\n return ancestorInfo.aTagInScope;\n case \"nobr\":\n return ancestorInfo.nobrTagInScope;\n }\n return null;\n }\n function findAncestor(parent, tagName) {\n for (; parent; ) {\n switch (parent.tag) {\n case 5:\n case 26:\n case 27:\n if (parent.type === tagName) return parent;\n }\n parent = parent.return;\n }\n return null;\n }\n function validateDOMNesting(childTag, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfoDev;\n var parentInfo = ancestorInfo.current;\n ancestorInfo = (parentInfo = isTagValidWithParent(\n childTag,\n parentInfo && parentInfo.tag,\n ancestorInfo.implicitRootScope\n )\n ? null\n : parentInfo)\n ? null\n : findInvalidAncestorForTag(childTag, ancestorInfo);\n ancestorInfo = parentInfo || ancestorInfo;\n if (!ancestorInfo) return !0;\n var ancestorTag = ancestorInfo.tag;\n ancestorInfo = String(!!parentInfo) + \"|\" + childTag + \"|\" + ancestorTag;\n if (didWarn[ancestorInfo]) return !1;\n didWarn[ancestorInfo] = !0;\n var ancestor = (ancestorInfo = current)\n ? findAncestor(ancestorInfo.return, ancestorTag)\n : null,\n ancestorDescription =\n null !== ancestorInfo && null !== ancestor\n ? describeAncestors(ancestor, ancestorInfo, null)\n : \"\",\n tagDisplayName = \"<\" + childTag + \">\";\n parentInfo\n ? ((parentInfo = \"\"),\n \"table\" === ancestorTag &&\n \"tr\" === childTag &&\n (parentInfo +=\n \" Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by the browser.\"),\n console.error(\n \"In HTML, %s cannot be a child of <%s>.%s\\nThis will cause a hydration error.%s\",\n tagDisplayName,\n ancestorTag,\n parentInfo,\n ancestorDescription\n ))\n : console.error(\n \"In HTML, %s cannot be a descendant of <%s>.\\nThis will cause a hydration error.%s\",\n tagDisplayName,\n ancestorTag,\n ancestorDescription\n );\n ancestorInfo &&\n ((childTag = ancestorInfo.return),\n null === ancestor ||\n null === childTag ||\n (ancestor === childTag &&\n childTag._debugOwner === ancestorInfo._debugOwner) ||\n runWithFiberInDEV(ancestor, function () {\n console.error(\n \"<%s> cannot contain a nested %s.\\nSee this log for the ancestor stack trace.\",\n ancestorTag,\n tagDisplayName\n );\n }));\n return !1;\n }\n function validateTextNesting(childText, parentTag, implicitRootScope) {\n if (implicitRootScope || isTagValidWithParent(\"#text\", parentTag, !1))\n return !0;\n implicitRootScope = \"#text|\" + parentTag;\n if (didWarn[implicitRootScope]) return !1;\n didWarn[implicitRootScope] = !0;\n var ancestor = (implicitRootScope = current)\n ? findAncestor(implicitRootScope, parentTag)\n : null;\n implicitRootScope =\n null !== implicitRootScope && null !== ancestor\n ? describeAncestors(\n ancestor,\n implicitRootScope,\n 6 !== implicitRootScope.tag ? { children: null } : null\n )\n : \"\";\n /\\S/.test(childText)\n ? console.error(\n \"In HTML, text nodes cannot be a child of <%s>.\\nThis will cause a hydration error.%s\",\n parentTag,\n implicitRootScope\n )\n : console.error(\n \"In HTML, whitespace text nodes cannot be a child of <%s>. Make sure you don't have any extra whitespace between tags on each line of your source code.\\nThis will cause a hydration error.%s\",\n parentTag,\n implicitRootScope\n );\n return !1;\n }\n function setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n }\n function camelize(string) {\n return string.replace(hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n }\n function setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n isCustomProperty ||\n (-1 < styleName.indexOf(\"-\")\n ? (warnedStyleNames.hasOwnProperty(styleName) &&\n warnedStyleNames[styleName]) ||\n ((warnedStyleNames[styleName] = !0),\n console.error(\n \"Unsupported style property %s. Did you mean %s?\",\n styleName,\n camelize(styleName.replace(msPattern, \"ms-\"))\n ))\n : badVendoredStyleNamePattern.test(styleName)\n ? (warnedStyleNames.hasOwnProperty(styleName) &&\n warnedStyleNames[styleName]) ||\n ((warnedStyleNames[styleName] = !0),\n console.error(\n \"Unsupported vendor-prefixed style property %s. Did you mean %s?\",\n styleName,\n styleName.charAt(0).toUpperCase() + styleName.slice(1)\n ))\n : !badStyleValueWithSemicolonPattern.test(value) ||\n (warnedStyleValues.hasOwnProperty(value) &&\n warnedStyleValues[value]) ||\n ((warnedStyleValues[value] = !0),\n console.error(\n 'Style property values shouldn\\'t contain a semicolon. Try \"%s: %s\" instead.',\n styleName,\n value.replace(badStyleValueWithSemicolonPattern, \"\")\n )),\n \"number\" === typeof value &&\n (isNaN(value)\n ? warnedForNaNValue ||\n ((warnedForNaNValue = !0),\n console.error(\n \"`NaN` is an invalid value for the `%s` css style property.\",\n styleName\n ))\n : isFinite(value) ||\n warnedForInfinityValue ||\n ((warnedForInfinityValue = !0),\n console.error(\n \"`Infinity` is an invalid value for the `%s` css style property.\",\n styleName\n ))));\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (checkCSSPropertyStringCoercion(value, styleName),\n (style[styleName] = (\"\" + value).trim()))\n : (style[styleName] = value + \"px\");\n }\n function setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(\n \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\"\n );\n styles && Object.freeze(styles);\n node = node.style;\n if (null != prevStyles) {\n if (styles) {\n var expandedUpdates = {};\n if (prevStyles)\n for (var key in prevStyles)\n if (prevStyles.hasOwnProperty(key) && !styles.hasOwnProperty(key))\n for (\n var longhands = shorthandToLonghand[key] || [key], i = 0;\n i < longhands.length;\n i++\n )\n expandedUpdates[longhands[i]] = key;\n for (var _key in styles)\n if (\n styles.hasOwnProperty(_key) &&\n (!prevStyles || prevStyles[_key] !== styles[_key])\n )\n for (\n key = shorthandToLonghand[_key] || [_key], longhands = 0;\n longhands < key.length;\n longhands++\n )\n expandedUpdates[key[longhands]] = _key;\n _key = {};\n for (var key$jscomp$0 in styles)\n for (\n key = shorthandToLonghand[key$jscomp$0] || [key$jscomp$0],\n longhands = 0;\n longhands < key.length;\n longhands++\n )\n _key[key[longhands]] = key$jscomp$0;\n key$jscomp$0 = {};\n for (var _key2 in expandedUpdates)\n if (\n ((key = expandedUpdates[_key2]),\n (longhands = _key[_key2]) &&\n key !== longhands &&\n ((i = key + \",\" + longhands), !key$jscomp$0[i]))\n ) {\n key$jscomp$0[i] = !0;\n i = console;\n var value = styles[key];\n i.error.call(\n i,\n \"%s a style property during rerender (%s) when a conflicting property is set (%s) can lead to styling bugs. To avoid this, don't mix shorthand and non-shorthand properties for the same value; instead, replace the shorthand with separate values.\",\n null == value || \"boolean\" === typeof value || \"\" === value\n ? \"Removing\"\n : \"Updating\",\n key,\n longhands\n );\n }\n }\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"));\n for (var _styleName in styles)\n (_key2 = styles[_styleName]),\n styles.hasOwnProperty(_styleName) &&\n prevStyles[_styleName] !== _key2 &&\n setValueForStyle(node, _styleName, _key2);\n } else\n for (expandedUpdates in styles)\n styles.hasOwnProperty(expandedUpdates) &&\n setValueForStyle(node, expandedUpdates, styles[expandedUpdates]);\n }\n function isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n }\n function getAttributeAlias(name) {\n return aliases.get(name) || name;\n }\n function validateProperty$1(tagName, name) {\n if (\n hasOwnProperty.call(warnedProperties$1, name) &&\n warnedProperties$1[name]\n )\n return !0;\n if (rARIACamel$1.test(name)) {\n tagName = \"aria-\" + name.slice(4).toLowerCase();\n tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;\n if (null == tagName)\n return (\n console.error(\n \"Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.\",\n name\n ),\n (warnedProperties$1[name] = !0)\n );\n if (name !== tagName)\n return (\n console.error(\n \"Invalid ARIA attribute `%s`. Did you mean `%s`?\",\n name,\n tagName\n ),\n (warnedProperties$1[name] = !0)\n );\n }\n if (rARIA$1.test(name)) {\n tagName = name.toLowerCase();\n tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;\n if (null == tagName) return (warnedProperties$1[name] = !0), !1;\n name !== tagName &&\n (console.error(\n \"Unknown ARIA attribute `%s`. Did you mean `%s`?\",\n name,\n tagName\n ),\n (warnedProperties$1[name] = !0));\n }\n return !0;\n }\n function validateProperties$2(type, props) {\n var invalidProps = [],\n key;\n for (key in props)\n validateProperty$1(type, key) || invalidProps.push(key);\n props = invalidProps\n .map(function (prop) {\n return \"`\" + prop + \"`\";\n })\n .join(\", \");\n 1 === invalidProps.length\n ? console.error(\n \"Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props\",\n props,\n type\n )\n : 1 < invalidProps.length &&\n console.error(\n \"Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props\",\n props,\n type\n );\n }\n function validateProperty(tagName, name, value, eventRegistry) {\n if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])\n return !0;\n var lowerCasedName = name.toLowerCase();\n if (\"onfocusin\" === lowerCasedName || \"onfocusout\" === lowerCasedName)\n return (\n console.error(\n \"React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React.\"\n ),\n (warnedProperties[name] = !0)\n );\n if (\n \"function\" === typeof value &&\n ((\"form\" === tagName && \"action\" === name) ||\n (\"input\" === tagName && \"formAction\" === name) ||\n (\"button\" === tagName && \"formAction\" === name))\n )\n return !0;\n if (null != eventRegistry) {\n tagName = eventRegistry.possibleRegistrationNames;\n if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))\n return !0;\n eventRegistry = tagName.hasOwnProperty(lowerCasedName)\n ? tagName[lowerCasedName]\n : null;\n if (null != eventRegistry)\n return (\n console.error(\n \"Invalid event handler property `%s`. Did you mean `%s`?\",\n name,\n eventRegistry\n ),\n (warnedProperties[name] = !0)\n );\n if (EVENT_NAME_REGEX.test(name))\n return (\n console.error(\n \"Unknown event handler property `%s`. It will be ignored.\",\n name\n ),\n (warnedProperties[name] = !0)\n );\n } else if (EVENT_NAME_REGEX.test(name))\n return (\n INVALID_EVENT_NAME_REGEX.test(name) &&\n console.error(\n \"Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.\",\n name\n ),\n (warnedProperties[name] = !0)\n );\n if (rARIA.test(name) || rARIACamel.test(name)) return !0;\n if (\"innerhtml\" === lowerCasedName)\n return (\n console.error(\n \"Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`.\"\n ),\n (warnedProperties[name] = !0)\n );\n if (\"aria\" === lowerCasedName)\n return (\n console.error(\n \"The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead.\"\n ),\n (warnedProperties[name] = !0)\n );\n if (\n \"is\" === lowerCasedName &&\n null !== value &&\n void 0 !== value &&\n \"string\" !== typeof value\n )\n return (\n console.error(\n \"Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.\",\n typeof value\n ),\n (warnedProperties[name] = !0)\n );\n if (\"number\" === typeof value && isNaN(value))\n return (\n console.error(\n \"Received NaN for the `%s` attribute. If this is expected, cast the value to a string.\",\n name\n ),\n (warnedProperties[name] = !0)\n );\n if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n if (\n ((lowerCasedName = possibleStandardNames[lowerCasedName]),\n lowerCasedName !== name)\n )\n return (\n console.error(\n \"Invalid DOM property `%s`. Did you mean `%s`?\",\n name,\n lowerCasedName\n ),\n (warnedProperties[name] = !0)\n );\n } else if (name !== lowerCasedName)\n return (\n console.error(\n \"React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.\",\n name,\n lowerCasedName\n ),\n (warnedProperties[name] = !0)\n );\n switch (name) {\n case \"dangerouslySetInnerHTML\":\n case \"children\":\n case \"style\":\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n return !0;\n case \"innerText\":\n case \"textContent\":\n return !0;\n }\n switch (typeof value) {\n case \"boolean\":\n switch (name) {\n case \"autoFocus\":\n case \"checked\":\n case \"multiple\":\n case \"muted\":\n case \"selected\":\n case \"contentEditable\":\n case \"spellCheck\":\n case \"draggable\":\n case \"value\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n case \"capture\":\n case \"download\":\n case \"inert\":\n return !0;\n default:\n lowerCasedName = name.toLowerCase().slice(0, 5);\n if (\"data-\" === lowerCasedName || \"aria-\" === lowerCasedName)\n return !0;\n value\n ? console.error(\n 'Received `%s` for a non-boolean attribute `%s`.\\n\\nIf you want to write it to the DOM, pass a string instead: %s=\"%s\" or %s={value.toString()}.',\n value,\n name,\n name,\n value,\n name\n )\n : console.error(\n 'Received `%s` for a non-boolean attribute `%s`.\\n\\nIf you want to write it to the DOM, pass a string instead: %s=\"%s\" or %s={value.toString()}.\\n\\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',\n value,\n name,\n name,\n value,\n name,\n name,\n name\n );\n return (warnedProperties[name] = !0);\n }\n case \"function\":\n case \"symbol\":\n return (warnedProperties[name] = !0), !1;\n case \"string\":\n if (\"false\" === value || \"true\" === value) {\n switch (name) {\n case \"checked\":\n case \"selected\":\n case \"multiple\":\n case \"muted\":\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n case \"inert\":\n break;\n default:\n return !0;\n }\n console.error(\n \"Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?\",\n value,\n name,\n \"false\" === value\n ? \"The browser will interpret it as a truthy value.\"\n : 'Although this works, it will not work as expected if you pass the string \"false\".',\n name,\n value\n );\n warnedProperties[name] = !0;\n }\n }\n return !0;\n }\n function warnUnknownProperties(type, props, eventRegistry) {\n var unknownProps = [],\n key;\n for (key in props)\n validateProperty(type, key, props[key], eventRegistry) ||\n unknownProps.push(key);\n props = unknownProps\n .map(function (prop) {\n return \"`\" + prop + \"`\";\n })\n .join(\", \");\n 1 === unknownProps.length\n ? console.error(\n \"Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior \",\n props,\n type\n )\n : 1 < unknownProps.length &&\n console.error(\n \"Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior \",\n props,\n type\n );\n }\n function sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n }\n function getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n }\n function restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (\n ((target = internalInstance.stateNode), internalInstance.type)\n ) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n checkAttributeStringCoercion(internalInstance, \"name\");\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps)\n throw Error(\n \"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\"\n );\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form &&\n updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n }\n function batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n }\n function getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n \"Expected `\" +\n registrationName +\n \"` listener to be a function, instead got a value of `\" +\n typeof stateNode +\n \"` type.\"\n );\n return stateNode;\n }\n function getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n }\n function getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n }\n function functionThatReturnsTrue() {\n return !0;\n }\n function functionThatReturnsFalse() {\n return !1;\n }\n function createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue &&\n (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n }\n function modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n }\n function getEventModifierState() {\n return modifierStateGetter;\n }\n function isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return nativeEvent.keyCode !== START_KEYCODE;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n }\n function getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n }\n function getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (nativeEvent.which !== SPACEBAR_CODE) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress\n ? null\n : domEventName\n );\n default:\n return null;\n }\n }\n function getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(\n nativeEvent.ctrlKey ||\n nativeEvent.altKey ||\n nativeEvent.metaKey\n ) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which)\n return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n }\n function isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n }\n function isEventSupported(eventNameSuffix) {\n if (!canUseDOM) return !1;\n eventNameSuffix = \"on\" + eventNameSuffix;\n var isSupported = eventNameSuffix in document;\n isSupported ||\n ((isSupported = document.createElement(\"div\")),\n isSupported.setAttribute(eventNameSuffix, \"return;\"),\n (isSupported = \"function\" === typeof isSupported[eventNameSuffix]));\n return isSupported;\n }\n function createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n ) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n }\n function runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n }\n function getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n }\n function getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n }\n function stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n }\n function handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n }\n function handleEventsForInputEventPolyfill(\n domEventName,\n target,\n targetInst\n ) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n }\n function getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n }\n function getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n }\n function getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n }\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n }\n function getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n }\n function getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n }\n function containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n }\n function getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n }\n function hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n }\n function constructSelectEvent(\n dispatchQueue,\n nativeEvent,\n nativeEventTarget\n ) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n }\n function makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n }\n function getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n }\n function registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n }\n function createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n }\n function finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n }\n function enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n }\n function enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n }\n function enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n }\n function markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber ||\n sourceFiber._visibility & OffscreenVisible ||\n (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n return 3 === sourceFiber.tag\n ? ((parent = sourceFiber.stateNode),\n isHidden &&\n null !== update &&\n ((isHidden = 31 - clz32(lane)),\n (sourceFiber = parent.hiddenUpdates),\n (alternate = sourceFiber[isHidden]),\n null === alternate\n ? (sourceFiber[isHidden] = [update])\n : alternate.push(update),\n (update.lane = lane | 536870912)),\n parent)\n : null;\n }\n function getRootForUpdatedFiber(sourceFiber) {\n if (nestedUpdateCount > NESTED_UPDATE_LIMIT)\n throw (\n ((nestedPassiveUpdateCount = nestedUpdateCount = 0),\n (rootWithPassiveNestedUpdates = rootWithNestedUpdates = null),\n Error(\n \"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\"\n ))\n );\n nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT &&\n ((nestedPassiveUpdateCount = 0),\n (rootWithPassiveNestedUpdates = null),\n console.error(\n \"Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.\"\n ));\n null === sourceFiber.alternate &&\n 0 !== (sourceFiber.flags & 4098) &&\n warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);\n for (var node = sourceFiber, parent = node.return; null !== parent; )\n null === node.alternate &&\n 0 !== (node.flags & 4098) &&\n warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber),\n (node = parent),\n (parent = node.return);\n return 3 === node.tag ? node.stateNode : null;\n }\n function resolveFunctionForHotReloading(type) {\n if (null === resolveFamily) return type;\n var family = resolveFamily(type);\n return void 0 === family ? type : family.current;\n }\n function resolveForwardRefForHotReloading(type) {\n if (null === resolveFamily) return type;\n var family = resolveFamily(type);\n return void 0 === family\n ? null !== type &&\n void 0 !== type &&\n \"function\" === typeof type.render &&\n ((family = resolveFunctionForHotReloading(type.render)),\n type.render !== family)\n ? ((family = { $$typeof: REACT_FORWARD_REF_TYPE, render: family }),\n void 0 !== type.displayName &&\n (family.displayName = type.displayName),\n family)\n : type\n : family.current;\n }\n function isCompatibleFamilyForHotReloading(fiber, element) {\n if (null === resolveFamily) return !1;\n var prevType = fiber.elementType;\n element = element.type;\n var needsCompareFamilies = !1,\n $$typeofNextType =\n \"object\" === typeof element && null !== element\n ? element.$$typeof\n : null;\n switch (fiber.tag) {\n case 1:\n \"function\" === typeof element && (needsCompareFamilies = !0);\n break;\n case 0:\n \"function\" === typeof element\n ? (needsCompareFamilies = !0)\n : $$typeofNextType === REACT_LAZY_TYPE &&\n (needsCompareFamilies = !0);\n break;\n case 11:\n $$typeofNextType === REACT_FORWARD_REF_TYPE\n ? (needsCompareFamilies = !0)\n : $$typeofNextType === REACT_LAZY_TYPE &&\n (needsCompareFamilies = !0);\n break;\n case 14:\n case 15:\n $$typeofNextType === REACT_MEMO_TYPE\n ? (needsCompareFamilies = !0)\n : $$typeofNextType === REACT_LAZY_TYPE &&\n (needsCompareFamilies = !0);\n break;\n default:\n return !1;\n }\n return needsCompareFamilies &&\n ((fiber = resolveFamily(prevType)),\n void 0 !== fiber && fiber === resolveFamily(element))\n ? !0\n : !1;\n }\n function markFailedErrorBoundaryForHotReloading(fiber) {\n null !== resolveFamily &&\n \"function\" === typeof WeakSet &&\n (null === failedBoundaries && (failedBoundaries = new WeakSet()),\n failedBoundaries.add(fiber));\n }\n function scheduleFibersWithFamiliesRecursively(\n fiber,\n updatedFamilies,\n staleFamilies\n ) {\n var alternate = fiber.alternate,\n child = fiber.child,\n sibling = fiber.sibling,\n tag = fiber.tag,\n type = fiber.type,\n candidateType = null;\n switch (tag) {\n case 0:\n case 15:\n case 1:\n candidateType = type;\n break;\n case 11:\n candidateType = type.render;\n }\n if (null === resolveFamily)\n throw Error(\"Expected resolveFamily to be set during hot reload.\");\n var needsRender = !1;\n type = !1;\n null !== candidateType &&\n ((candidateType = resolveFamily(candidateType)),\n void 0 !== candidateType &&\n (staleFamilies.has(candidateType)\n ? (type = !0)\n : updatedFamilies.has(candidateType) &&\n (1 === tag ? (type = !0) : (needsRender = !0))));\n null !== failedBoundaries &&\n (failedBoundaries.has(fiber) ||\n (null !== alternate && failedBoundaries.has(alternate))) &&\n (type = !0);\n type && (fiber._debugNeedsRemount = !0);\n if (type || needsRender)\n (alternate = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== alternate && scheduleUpdateOnFiber(alternate, fiber, 2);\n null === child ||\n type ||\n scheduleFibersWithFamiliesRecursively(\n child,\n updatedFamilies,\n staleFamilies\n );\n null !== sibling &&\n scheduleFibersWithFamiliesRecursively(\n sibling,\n updatedFamilies,\n staleFamilies\n );\n }\n function FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n this.actualDuration = -0;\n this.actualStartTime = -1.1;\n this.treeBaseDuration = this.selfBaseDuration = -0;\n this._debugTask =\n this._debugStack =\n this._debugOwner =\n this._debugInfo =\n null;\n this._debugNeedsRemount = !1;\n this._debugHookTypes = null;\n hasBadMapPolyfill ||\n \"function\" !== typeof Object.preventExtensions ||\n Object.preventExtensions(this);\n }\n function shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n }\n function createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiber(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress._debugOwner = current._debugOwner),\n (workInProgress._debugStack = current._debugStack),\n (workInProgress._debugTask = current._debugTask),\n (workInProgress._debugHookTypes = current._debugHookTypes),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.actualDuration = -0),\n (workInProgress.actualStartTime = -1.1));\n workInProgress.flags = current.flags & 65011712;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : {\n lanes: pendingProps.lanes,\n firstContext: pendingProps.firstContext,\n _debugThenableState: pendingProps._debugThenableState\n };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n workInProgress._debugInfo = current._debugInfo;\n workInProgress._debugNeedsRemount = current._debugNeedsRemount;\n switch (workInProgress.tag) {\n case 0:\n case 15:\n workInProgress.type = resolveFunctionForHotReloading(current.type);\n break;\n case 1:\n workInProgress.type = resolveFunctionForHotReloading(current.type);\n break;\n case 11:\n workInProgress.type = resolveForwardRefForHotReloading(current.type);\n }\n return workInProgress;\n }\n function resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 65011714;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null),\n (workInProgress.selfBaseDuration = 0),\n (workInProgress.treeBaseDuration = 0))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext,\n _debugThenableState: renderLanes._debugThenableState\n }),\n (workInProgress.selfBaseDuration = current.selfBaseDuration),\n (workInProgress.treeBaseDuration = current.treeBaseDuration));\n return workInProgress;\n }\n function createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n ) {\n var fiberTag = 0,\n resolvedType = type;\n if (\"function\" === typeof type)\n shouldConstruct(type) && (fiberTag = 1),\n (resolvedType = resolveFunctionForHotReloading(resolvedType));\n else if (\"string\" === typeof type)\n (fiberTag = getHostContext()),\n (fiberTag = isHostHoistableType(type, pendingProps, fiberTag)\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5);\n else\n a: switch (type) {\n case REACT_ACTIVITY_TYPE:\n return (\n (key = createFiber(31, pendingProps, key, mode)),\n (key.elementType = REACT_ACTIVITY_TYPE),\n (key.lanes = lanes),\n key\n );\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(\n pendingProps.children,\n mode,\n lanes,\n key\n );\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= StrictLegacyMode;\n mode |= StrictEffectsMode;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = pendingProps),\n (owner = mode),\n \"string\" !== typeof type.id &&\n console.error(\n 'Profiler must specify an \"id\" of type `string` as a prop. Received the type `%s` instead.',\n typeof type.id\n ),\n (key = createFiber(12, type, key, owner | ProfileMode)),\n (key.elementType = REACT_PROFILER_TYPE),\n (key.lanes = lanes),\n (key.stateNode = { effectDuration: 0, passiveEffectDuration: 0 }),\n key\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (key = createFiber(13, pendingProps, key, mode)),\n (key.elementType = REACT_SUSPENSE_TYPE),\n (key.lanes = lanes),\n key\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (key = createFiber(19, pendingProps, key, mode)),\n (key.elementType = REACT_SUSPENSE_LIST_TYPE),\n (key.lanes = lanes),\n key\n );\n default:\n if (\"object\" === typeof type && null !== type)\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n resolvedType = resolveForwardRefForHotReloading(resolvedType);\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n resolvedType = null;\n break a;\n }\n resolvedType = \"\";\n if (\n void 0 === type ||\n (\"object\" === typeof type &&\n null !== type &&\n 0 === Object.keys(type).length)\n )\n resolvedType +=\n \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\";\n null === type\n ? (pendingProps = \"null\")\n : isArrayImpl(type)\n ? (pendingProps = \"array\")\n : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE\n ? ((pendingProps =\n \"<\" +\n (getComponentNameFromType(type.type) || \"Unknown\") +\n \" />\"),\n (resolvedType =\n \" Did you accidentally export a JSX literal instead of a component?\"))\n : (pendingProps = typeof type);\n (fiberTag = owner ? getComponentNameFromOwner(owner) : null) &&\n (resolvedType +=\n \"\\n\\nCheck the render method of `\" + fiberTag + \"`.\");\n fiberTag = 29;\n pendingProps = Error(\n \"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \" +\n (pendingProps + \".\" + resolvedType)\n );\n resolvedType = null;\n }\n key = createFiber(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = resolvedType;\n key.lanes = lanes;\n key._debugOwner = owner;\n return key;\n }\n function createFiberFromElement(element, mode, lanes) {\n mode = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n element._owner,\n mode,\n lanes\n );\n mode._debugOwner = element._owner;\n mode._debugStack = element._debugStack;\n mode._debugTask = element._debugTask;\n return mode;\n }\n function createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiber(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n }\n function createFiberFromText(content, mode, lanes) {\n content = createFiber(6, content, null, mode);\n content.lanes = lanes;\n return content;\n }\n function createFiberFromPortal(portal, mode, lanes) {\n mode = createFiber(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n }\n function pushTreeFork(workInProgress, totalChildren) {\n warnIfNotHydrating();\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n }\n function pushTreeId(workInProgress, totalChildren, index) {\n warnIfNotHydrating();\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n }\n function pushMaterializedTreeId(workInProgress) {\n warnIfNotHydrating();\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n }\n function popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n }\n function warnIfNotHydrating() {\n isHydrating ||\n console.error(\n \"Expected to be hydrating. This is a bug in React. Please file an issue.\"\n );\n }\n function buildHydrationDiffNode(fiber, distanceFromLeaf) {\n if (null === fiber.return) {\n if (null === hydrationDiffRootDEV)\n hydrationDiffRootDEV = {\n fiber: fiber,\n children: [],\n serverProps: void 0,\n serverTail: [],\n distanceFromLeaf: distanceFromLeaf\n };\n else {\n if (hydrationDiffRootDEV.fiber !== fiber)\n throw Error(\n \"Saw multiple hydration diff roots in a pass. This is a bug in React.\"\n );\n hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf &&\n (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf);\n }\n return hydrationDiffRootDEV;\n }\n var siblings = buildHydrationDiffNode(\n fiber.return,\n distanceFromLeaf + 1\n ).children;\n if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber)\n return (\n (siblings = siblings[siblings.length - 1]),\n siblings.distanceFromLeaf > distanceFromLeaf &&\n (siblings.distanceFromLeaf = distanceFromLeaf),\n siblings\n );\n distanceFromLeaf = {\n fiber: fiber,\n children: [],\n serverProps: void 0,\n serverTail: [],\n distanceFromLeaf: distanceFromLeaf\n };\n siblings.push(distanceFromLeaf);\n return distanceFromLeaf;\n }\n function warnNonHydratedInstance(fiber, rejectedCandidate) {\n didSuspendOrErrorDEV ||\n ((fiber = buildHydrationDiffNode(fiber, 0)),\n (fiber.serverProps = null),\n null !== rejectedCandidate &&\n ((rejectedCandidate =\n describeHydratableInstanceForDevWarnings(rejectedCandidate)),\n fiber.serverTail.push(rejectedCandidate)));\n }\n function throwOnHydrationMismatch(fiber) {\n var diff = \"\",\n diffRoot = hydrationDiffRootDEV;\n null !== diffRoot &&\n ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot)));\n queueHydrationError(\n createCapturedValueAtFiber(\n Error(\n \"Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\\n\\n- A server/client branch `if (typeof window !== 'undefined')`.\\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\\n- Date formatting in a user's locale which doesn't match the server.\\n- External changing data without sending a snapshot of it along with the HTML.\\n- Invalid HTML tag nesting.\\n\\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\\n\\nhttps://react.dev/link/hydration-mismatch\" +\n diff\n ),\n fiber\n )\n );\n throw HydrationMismatchException;\n }\n function prepareToHydrateHostInstance(fiber) {\n var didHydrate = fiber.stateNode;\n var type = fiber.type,\n props = fiber.memoizedProps;\n didHydrate[internalInstanceKey] = fiber;\n didHydrate[internalPropsKey] = props;\n validatePropertiesInDevelopment(type, props);\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", didHydrate);\n listenToNonDelegatedEvent(\"close\", didHydrate);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", didHydrate);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", didHydrate);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", didHydrate);\n listenToNonDelegatedEvent(\"load\", didHydrate);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", didHydrate);\n break;\n case \"input\":\n checkControlledValueProps(\"input\", props);\n listenToNonDelegatedEvent(\"invalid\", didHydrate);\n validateInputProps(didHydrate, props);\n initInput(\n didHydrate,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n track(didHydrate);\n break;\n case \"option\":\n validateOptionProps(didHydrate, props);\n break;\n case \"select\":\n checkControlledValueProps(\"select\", props);\n listenToNonDelegatedEvent(\"invalid\", didHydrate);\n validateSelectProps(didHydrate, props);\n break;\n case \"textarea\":\n checkControlledValueProps(\"textarea\", props),\n listenToNonDelegatedEvent(\"invalid\", didHydrate),\n validateTextareaProps(didHydrate, props),\n initTextarea(\n didHydrate,\n props.value,\n props.defaultValue,\n props.children\n ),\n track(didHydrate);\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n didHydrate.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(didHydrate.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", didHydrate),\n listenToNonDelegatedEvent(\"toggle\", didHydrate)),\n null != props.onScroll &&\n listenToNonDelegatedEvent(\"scroll\", didHydrate),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", didHydrate),\n null != props.onClick && (didHydrate.onclick = noop$1),\n (didHydrate = !0))\n : (didHydrate = !1);\n didHydrate || throwOnHydrationMismatch(fiber);\n }\n function popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 5:\n case 13:\n rootOrSingletonContext = !1;\n return;\n case 27:\n case 3:\n rootOrSingletonContext = !0;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n }\n function popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating)\n return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var tag = fiber.tag,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n if ((JSCompiler_temp = 5 === tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n if (JSCompiler_temp && nextHydratableInstance) {\n for (JSCompiler_temp = nextHydratableInstance; JSCompiler_temp; ) {\n var diffNode = buildHydrationDiffNode(fiber, 0),\n description =\n describeHydratableInstanceForDevWarnings(JSCompiler_temp);\n diffNode.serverTail.push(description);\n JSCompiler_temp =\n \"Suspense\" === description.type\n ? getNextHydratableInstanceAfterSuspenseInstance(JSCompiler_temp)\n : getNextHydratable(JSCompiler_temp.nextSibling);\n }\n throwOnHydrationMismatch(fiber);\n }\n popToNextHostParent(fiber);\n if (13 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber)\n throw Error(\n \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\"\n );\n nextHydratableInstance =\n getNextHydratableInstanceAfterSuspenseInstance(fiber);\n } else\n 27 === tag\n ? ((tag = nextHydratableInstance),\n isSingletonScope(fiber.type)\n ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n (previousHydratableOnEnteringScopedSingleton = null),\n (nextHydratableInstance = fiber))\n : (nextHydratableInstance = tag))\n : (nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null);\n return !0;\n }\n function resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n didSuspendOrErrorDEV = isHydrating = !1;\n }\n function upgradeHydrationErrorsToRecoverable() {\n var queuedErrors = hydrationErrors;\n null !== queuedErrors &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = queuedErrors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n queuedErrors\n ),\n (hydrationErrors = null));\n return queuedErrors;\n }\n function queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n }\n function emitPendingHydrationWarnings() {\n var diffRoot = hydrationDiffRootDEV;\n if (null !== diffRoot) {\n hydrationDiffRootDEV = null;\n for (var diff = describeDiff(diffRoot); 0 < diffRoot.children.length; )\n diffRoot = diffRoot.children[0];\n runWithFiberInDEV(diffRoot.fiber, function () {\n console.error(\n \"A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\\n\\n- A server/client branch `if (typeof window !== 'undefined')`.\\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\\n- Date formatting in a user's locale which doesn't match the server.\\n- External changing data without sending a snapshot of it along with the HTML.\\n- Invalid HTML tag nesting.\\n\\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\\n\\n%s%s\",\n \"https://react.dev/link/hydration-mismatch\",\n diff\n );\n });\n }\n }\n function resetContextDependencies() {\n lastContextDependency = currentlyRenderingFiber$1 = null;\n isDisallowedContextReadInDEV = !1;\n }\n function pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue, providerFiber);\n context._currentValue = nextValue;\n push(rendererCursorDEV, context._currentRenderer, providerFiber);\n void 0 !== context._currentRenderer &&\n null !== context._currentRenderer &&\n context._currentRenderer !== rendererSigil &&\n console.error(\n \"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported.\"\n );\n context._currentRenderer = rendererSigil;\n }\n function popProvider(context, providerFiber) {\n context._currentValue = valueCursor.current;\n var currentRenderer = rendererCursorDEV.current;\n pop(rendererCursorDEV, providerFiber);\n context._currentRenderer = currentRenderer;\n pop(valueCursor, providerFiber);\n }\n function scheduleContextWorkOnParentPath(\n parent,\n renderLanes,\n propagationRoot\n ) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n parent !== propagationRoot &&\n console.error(\n \"Expected to find the propagation root when scheduling context work. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n function propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n ) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber)\n throw Error(\n \"We just came from a parent so we must have had a parent. This is a bug in React.\"\n );\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n nextFiber,\n renderLanes,\n workInProgress\n );\n nextFiber = null;\n } else nextFiber = fiber.child;\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n }\n function propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n ) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent)\n throw Error(\"Should have a current fiber. This is a bug in React.\");\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current\n ? current.push(context)\n : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent)\n throw Error(\"Should have a current fiber. This is a bug in React.\");\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n }\n function checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n }\n function prepareToReadContext(workInProgress) {\n currentlyRenderingFiber$1 = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n }\n function readContext(context) {\n isDisallowedContextReadInDEV &&\n console.error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n return readContextForConsumer(currentlyRenderingFiber$1, context);\n }\n function readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n }\n function readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer)\n throw Error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n lastContextDependency = context;\n consumer.dependencies = {\n lanes: 0,\n firstContext: context,\n _debugThenableState: null\n };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n }\n function createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n }\n function retainCache(cache) {\n cache.controller.signal.aborted &&\n console.warn(\n \"A cache instance was retained after it was already freed. This likely indicates a bug in React.\"\n );\n cache.refCount++;\n }\n function releaseCache(cache) {\n cache.refCount--;\n 0 > cache.refCount &&\n console.warn(\n \"A cache instance was released after it was already freed. This likely indicates a bug in React.\"\n );\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n }\n function pushNestedEffectDurations() {\n var prevEffectDuration = profilerEffectDuration;\n profilerEffectDuration = 0;\n return prevEffectDuration;\n }\n function popNestedEffectDurations(prevEffectDuration) {\n var elapsedTime = profilerEffectDuration;\n profilerEffectDuration = prevEffectDuration;\n return elapsedTime;\n }\n function bubbleNestedEffectDurations(prevEffectDuration) {\n var elapsedTime = profilerEffectDuration;\n profilerEffectDuration += prevEffectDuration;\n return elapsedTime;\n }\n function startProfilerTimer(fiber) {\n profilerStartTime = now();\n 0 > fiber.actualStartTime && (fiber.actualStartTime = profilerStartTime);\n }\n function stopProfilerTimerIfRunningAndRecordDuration(fiber) {\n if (0 <= profilerStartTime) {\n var elapsedTime = now() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n fiber.selfBaseDuration = elapsedTime;\n profilerStartTime = -1;\n }\n }\n function stopProfilerTimerIfRunningAndRecordIncompleteDuration(fiber) {\n if (0 <= profilerStartTime) {\n var elapsedTime = now() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n profilerStartTime = -1;\n }\n }\n function recordEffectDuration() {\n if (0 <= profilerStartTime) {\n var elapsedTime = now() - profilerStartTime;\n profilerStartTime = -1;\n profilerEffectDuration += elapsedTime;\n }\n }\n function startEffectTimer() {\n profilerStartTime = now();\n }\n function transferActualDuration(fiber) {\n for (var child = fiber.child; child; )\n (fiber.actualDuration += child.actualDuration), (child = child.sibling);\n }\n function entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n }\n function pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n null !== currentEntangledListeners\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n }\n function chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n }\n function peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n }\n function pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current, offscreenWorkInProgress)\n : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress);\n }\n function getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n }\n function createThenableState() {\n return { didWarnAboutUncachedPromise: !1, thenables: [] };\n }\n function isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n }\n function noop$3() {}\n function trackUsedThenable(thenableState, thenable, index) {\n null !== ReactSharedInternals.actQueue &&\n (ReactSharedInternals.didUsePromise = !0);\n var trackedThenables = thenableState.thenables;\n index = trackedThenables[index];\n void 0 === index\n ? trackedThenables.push(thenable)\n : index !== thenable &&\n (thenableState.didWarnAboutUncachedPromise ||\n ((thenableState.didWarnAboutUncachedPromise = !0),\n console.error(\n \"A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework.\"\n )),\n thenable.then(noop$3, noop$3),\n (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n default:\n if (\"string\" === typeof thenable.status)\n thenable.then(noop$3, noop$3);\n else {\n thenableState = workInProgressRoot;\n if (\n null !== thenableState &&\n 100 < thenableState.shellSuspendCounter\n )\n throw Error(\n \"An unknown Component is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\"\n );\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n needsToResetSuspendedThenableDEV = !0;\n throw SuspenseException;\n }\n }\n function getSuspendedThenable() {\n if (null === suspendedThenable)\n throw Error(\n \"Expected a suspended thenable. This is a bug in React. Please file an issue.\"\n );\n var thenable = suspendedThenable;\n suspendedThenable = null;\n needsToResetSuspendedThenableDEV = !1;\n return thenable;\n }\n function checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (\n rejectedReason === SuspenseException ||\n rejectedReason === SuspenseActionException\n )\n throw Error(\n \"Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\"\n );\n }\n function initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n }\n function cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n }\n function createUpdate(lane) {\n return {\n lane: lane,\n tag: UpdateState,\n payload: null,\n callback: null,\n next: null\n };\n }\n function enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (\n currentlyProcessingQueue === updateQueue &&\n !didWarnUpdateInsideUpdate\n ) {\n var componentName = getComponentNameFromFiber(fiber);\n console.error(\n \"An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback.\\n\\nPlease update the following component: %s\",\n componentName\n );\n didWarnUpdateInsideUpdate = !0;\n }\n if ((executionContext & RenderContext) !== NoContext)\n return (\n (componentName = updateQueue.pending),\n null === componentName\n ? (update.next = update)\n : ((update.next = componentName.next),\n (componentName.next = update)),\n (updateQueue.pending = update),\n (update = getRootForUpdatedFiber(fiber)),\n markUpdateLaneFromFiberToRoot(fiber, null, lane),\n update\n );\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n }\n function entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n }\n function enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n }\n function suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n }\n function processUpdateQueue(\n workInProgress,\n props,\n instance$jscomp$0,\n renderLanes\n ) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress.updateQueue;\n hasForceUpdate = !1;\n currentlyProcessingQueue = queue.shared;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n updateLane = workInProgress;\n var partialState = pendingQueue;\n var nextProps = props,\n instance = instance$jscomp$0;\n switch (partialState.tag) {\n case ReplaceState:\n partialState = partialState.payload;\n if (\"function\" === typeof partialState) {\n isDisallowedContextReadInDEV = !0;\n var nextState = partialState.call(\n instance,\n newState,\n nextProps\n );\n if (updateLane.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n partialState.call(instance, newState, nextProps);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n isDisallowedContextReadInDEV = !1;\n newState = nextState;\n break a;\n }\n newState = partialState;\n break a;\n case CaptureUpdate:\n updateLane.flags = (updateLane.flags & -65537) | 128;\n case UpdateState:\n nextState = partialState.payload;\n if (\"function\" === typeof nextState) {\n isDisallowedContextReadInDEV = !0;\n partialState = nextState.call(\n instance,\n newState,\n nextProps\n );\n if (updateLane.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n nextState.call(instance, newState, nextProps);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n isDisallowedContextReadInDEV = !1;\n } else partialState = nextState;\n if (null === partialState || void 0 === partialState) break a;\n newState = assign({}, newState, partialState);\n break a;\n case ForceUpdate:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress.flags |= 64),\n isHiddenUpdate && (workInProgress.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress.lanes = lastBaseUpdate;\n workInProgress.memoizedState = newState;\n }\n currentlyProcessingQueue = null;\n }\n function callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(\n \"Invalid argument passed as callback. Expected a function. Instead received: \" +\n callback\n );\n callback.call(context);\n }\n function commitHiddenCallbacks(updateQueue, context) {\n var hiddenCallbacks = updateQueue.shared.hiddenCallbacks;\n if (null !== hiddenCallbacks)\n for (\n updateQueue.shared.hiddenCallbacks = null, updateQueue = 0;\n updateQueue < hiddenCallbacks.length;\n updateQueue++\n )\n callCallback(hiddenCallbacks[updateQueue], context);\n }\n function commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n }\n function pushHiddenContext(fiber, context) {\n var prevEntangledRenderLanes = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber);\n push(currentTreeHiddenStackCursor, context, fiber);\n entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes;\n }\n function reuseHiddenContextOnStack(fiber) {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber);\n push(\n currentTreeHiddenStackCursor,\n currentTreeHiddenStackCursor.current,\n fiber\n );\n }\n function popHiddenContext(fiber) {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor, fiber);\n pop(prevEntangledRenderLanesCursor, fiber);\n }\n function mountHookTypesDev() {\n var hookName = currentHookNameInDev;\n null === hookTypesDev\n ? (hookTypesDev = [hookName])\n : hookTypesDev.push(hookName);\n }\n function updateHookTypesDev() {\n var hookName = currentHookNameInDev;\n if (\n null !== hookTypesDev &&\n (hookTypesUpdateIndexDev++,\n hookTypesDev[hookTypesUpdateIndexDev] !== hookName)\n ) {\n var componentName = getComponentNameFromFiber(currentlyRenderingFiber);\n if (\n !didWarnAboutMismatchedHooksForComponent.has(componentName) &&\n (didWarnAboutMismatchedHooksForComponent.add(componentName),\n null !== hookTypesDev)\n ) {\n for (var table = \"\", i = 0; i <= hookTypesUpdateIndexDev; i++) {\n var oldHookName = hookTypesDev[i],\n newHookName =\n i === hookTypesUpdateIndexDev ? hookName : oldHookName;\n for (\n oldHookName = i + 1 + \". \" + oldHookName;\n 30 > oldHookName.length;\n\n )\n oldHookName += \" \";\n oldHookName += newHookName + \"\\n\";\n table += oldHookName;\n }\n console.error(\n \"React has detected a change in the order of Hooks called by %s. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks\\n\\n Previous render Next render\\n ------------------------------------------------------\\n%s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n\",\n componentName,\n table\n );\n }\n }\n }\n function checkDepsAreArrayDev(deps) {\n void 0 === deps ||\n null === deps ||\n isArrayImpl(deps) ||\n console.error(\n \"%s received a final argument that is not an array (instead, received `%s`). When specified, the final argument must be an array.\",\n currentHookNameInDev,\n typeof deps\n );\n }\n function warnOnUseFormStateInDev() {\n var componentName = getComponentNameFromFiber(currentlyRenderingFiber);\n didWarnAboutUseFormState.has(componentName) ||\n (didWarnAboutUseFormState.add(componentName),\n console.error(\n \"ReactDOM.useFormState has been renamed to React.useActionState. Please update %s to use React.useActionState.\",\n componentName\n ));\n }\n function throwInvalidHookError() {\n throw 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 }\n function areHookInputsEqual(nextDeps, prevDeps) {\n if (ignorePreviousDependencies) return !1;\n if (null === prevDeps)\n return (\n console.error(\n \"%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.\",\n currentHookNameInDev\n ),\n !1\n );\n nextDeps.length !== prevDeps.length &&\n console.error(\n \"The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\\n\\nPrevious: %s\\nIncoming: %s\",\n currentHookNameInDev,\n \"[\" + prevDeps.join(\", \") + \"]\",\n \"[\" + nextDeps.join(\", \") + \"]\"\n );\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n }\n function renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n ) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber = workInProgress;\n hookTypesDev = null !== current ? current._debugHookTypes : null;\n hookTypesUpdateIndexDev = -1;\n ignorePreviousDependencies =\n null !== current && current.type !== workInProgress.type;\n if (\n \"[object AsyncFunction]\" ===\n Object.prototype.toString.call(Component) ||\n \"[object AsyncGeneratorFunction]\" ===\n Object.prototype.toString.call(Component)\n )\n (nextRenderLanes = getComponentNameFromFiber(currentlyRenderingFiber)),\n didWarnAboutAsyncClientComponent.has(nextRenderLanes) ||\n (didWarnAboutAsyncClientComponent.add(nextRenderLanes),\n console.error(\n \"%s is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\",\n null === nextRenderLanes\n ? \"An unknown Component\"\n : \"<\" + nextRenderLanes + \">\"\n ));\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null !== current && null !== current.memoizedState\n ? HooksDispatcherOnUpdateInDEV\n : null !== hookTypesDev\n ? HooksDispatcherOnMountWithHookTypesInDEV\n : HooksDispatcherOnMountInDEV;\n shouldDoubleInvokeUserFnsInHooksDEV = nextRenderLanes =\n (workInProgress.mode & StrictLegacyMode) !== NoMode;\n var children = callComponentInDEV(Component, props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (children = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n if (nextRenderLanes) {\n setIsStrictModeForDevtools(!0);\n try {\n children = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n );\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n finishRenderingHooks(current, workInProgress);\n return children;\n }\n function finishRenderingHooks(current, workInProgress) {\n workInProgress._debugHookTypes = hookTypesDev;\n null === workInProgress.dependencies\n ? null !== thenableState$1 &&\n (workInProgress.dependencies = {\n lanes: 0,\n firstContext: null,\n _debugThenableState: thenableState$1\n })\n : (workInProgress.dependencies._debugThenableState = thenableState$1);\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks =\n null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n hookTypesDev =\n currentHookNameInDev =\n workInProgressHook =\n currentHook =\n currentlyRenderingFiber =\n null;\n hookTypesUpdateIndexDev = -1;\n null !== current &&\n (current.flags & 65011712) !== (workInProgress.flags & 65011712) &&\n console.error(\n \"Internal React error: Expected static flag was missing. Please notify the React team.\"\n );\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter$1 = 0;\n thenableState$1 = null;\n if (didRenderTooFewHooks)\n throw Error(\n \"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\"\n );\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n needsToResetSuspendedThenableDEV\n ? ((needsToResetSuspendedThenableDEV = !1), (current = !0))\n : (current = !1);\n current &&\n ((workInProgress =\n getComponentNameFromFiber(workInProgress) || \"Unknown\"),\n didWarnAboutUseWrappedInTryCatch.has(workInProgress) ||\n didWarnAboutAsyncClientComponent.has(workInProgress) ||\n (didWarnAboutUseWrappedInTryCatch.add(workInProgress),\n console.error(\n \"`use` was called from inside a try/catch block. This is not allowed and can lead to unexpected behavior. To handle errors triggered by `use`, wrap your component in a error boundary.\"\n )));\n }\n function renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState$1 = null);\n thenableIndexCounter$1 = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (numberOfReRenders >= RE_RENDER_LIMIT)\n throw Error(\n \"Too many re-renders. React limits the number of renders to prevent an infinite loop.\"\n );\n numberOfReRenders += 1;\n ignorePreviousDependencies = !1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n hookTypesUpdateIndexDev = -1;\n ReactSharedInternals.H = HooksDispatcherOnRerenderInDEV;\n children = callComponentInDEV(Component, props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n }\n function TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !==\n dispatcher && (currentlyRenderingFiber.flags |= 1024);\n return maybeThenable;\n }\n function checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n }\n function bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags =\n (workInProgress.mode & StrictEffectsMode) !== NoMode\n ? workInProgress.flags & -402655237\n : workInProgress.flags & -2053;\n current.lanes &= ~lanes;\n }\n function resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n hookTypesDev =\n workInProgressHook =\n currentHook =\n currentlyRenderingFiber =\n null;\n hookTypesUpdateIndexDev = -1;\n currentHookNameInDev = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter$1 = localIdCounter = 0;\n thenableState$1 = null;\n }\n function mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n }\n function updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber.alternate)\n throw Error(\n \"Update hook called on initial render. This is likely a bug in React. Please file an issue.\"\n );\n throw Error(\"Rendered more hooks than during the previous render.\");\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n }\n function createFunctionComponentUpdateQueue() {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n }\n function useThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = createThenableState());\n thenable = trackUsedThenable(thenableState$1, thenable, index);\n index = currentlyRenderingFiber;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null !== index && null !== index.memoizedState\n ? HooksDispatcherOnUpdateInDEV\n : HooksDispatcherOnMountInDEV));\n return thenable;\n }\n function use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(\"An unsupported type was passed to use(): \" + String(usable));\n }\n function useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue || ignorePreviousDependencies)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size),\n current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n else\n updateQueue.length !== size &&\n console.error(\n \"Expected a constant size argument for each invocation of useMemoCache. The previous cache was allocated with size %s but size %s was requested.\",\n updateQueue.length,\n size\n );\n memoCache.index++;\n return updateQueue;\n }\n function basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n }\n function mountReducer(reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber,\n reducer\n );\n return [hook.memoizedState, reducer];\n }\n function updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n }\n function updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue)\n throw Error(\n \"Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)\"\n );\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue !== baseQueue &&\n console.error(\n \"Internal error: Expected work-in-progress queue to be a clone. This is a bug in React.\"\n );\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n }\n function rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue)\n throw Error(\n \"Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)\"\n );\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do\n (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n }\n function mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(\n \"Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.\"\n );\n var nextSnapshot = getServerSnapshot();\n didWarnUncachedGetSnapshot ||\n nextSnapshot === getServerSnapshot() ||\n (console.error(\n \"The result of getServerSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n } else {\n nextSnapshot = getSnapshot();\n didWarnUncachedGetSnapshot ||\n ((getServerSnapshot = getSnapshot()),\n objectIs(nextSnapshot, getServerSnapshot) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0)));\n if (null === workInProgressRoot)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n 0 !== (workInProgressRootRenderLanes & 124) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);\n }\n hook.memoizedState = nextSnapshot;\n getServerSnapshot = { value: nextSnapshot, getSnapshot: getSnapshot };\n hook.queue = getServerSnapshot;\n mountEffect(\n subscribeToStore.bind(null, fiber, getServerSnapshot, subscribe),\n [subscribe]\n );\n fiber.flags |= 2048;\n pushSimpleEffect(\n HasEffect | Passive,\n createEffectInstance(),\n updateStoreInstance.bind(\n null,\n fiber,\n getServerSnapshot,\n nextSnapshot,\n getSnapshot\n ),\n null\n );\n return nextSnapshot;\n }\n function updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n var fiber = currentlyRenderingFiber,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot)\n throw Error(\n \"Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.\"\n );\n getServerSnapshot = getServerSnapshot();\n } else if (\n ((getServerSnapshot = getSnapshot()), !didWarnUncachedGetSnapshot)\n ) {\n var cachedSnapshot = getSnapshot();\n objectIs(getServerSnapshot, cachedSnapshot) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n if (\n (cachedSnapshot = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n ))\n )\n (hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0);\n hook = hook.queue;\n var create = subscribeToStore.bind(null, fiber, hook, subscribe);\n updateEffectImpl(2048, Passive, create, [subscribe]);\n if (\n hook.getSnapshot !== getSnapshot ||\n cachedSnapshot ||\n (null !== workInProgressHook &&\n workInProgressHook.memoizedState.tag & HasEffect)\n ) {\n fiber.flags |= 2048;\n pushSimpleEffect(\n HasEffect | Passive,\n createEffectInstance(),\n updateStoreInstance.bind(\n null,\n fiber,\n hook,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n if (null === workInProgressRoot)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 124) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n }\n function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n }\n function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n }\n function subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n }\n function mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n }\n function mountState(initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n }\n function mountOptimistic(passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n }\n function updateOptimistic(passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n }\n function updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n }\n function rerenderOptimistic(passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n }\n function dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n ) {\n if (isRenderPhaseUpdate(fiber))\n throw Error(\"Cannot update form state while rendering.\");\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n }\n function runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n ReactSharedInternals.T._updatedFibers = new Set();\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n (ReactSharedInternals.T = prevTransition),\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((actionQueue = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < actionQueue &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n ));\n }\n } else\n try {\n (currentTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, currentTransition);\n } catch (error$4) {\n onActionError(actionQueue, node, error$4);\n }\n }\n function handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? (returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n ),\n node.isTransition ||\n console.error(\n \"An async function with useActionState was called outside of a transition. This is likely not what you intended (for example, isPending will not update correctly). Either call the returned function inside startTransition, or pass it to an `action` or `formAction` prop.\"\n ))\n : onActionSuccess(actionQueue, node, returnValue);\n }\n function onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n }\n function onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n }\n function notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n }\n function actionStateReducer(oldState, newState) {\n return newState;\n }\n function mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var isMatching = currentlyRenderingFiber;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var markerInstance = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== markerInstance.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n markerInstance = null;\n break b;\n }\n markerInstance = getNextHydratable(\n markerInstance.nextSibling\n );\n if (null === markerInstance) {\n markerInstance = null;\n break b;\n }\n }\n inRootOrSingleton = markerInstance.data;\n markerInstance =\n inRootOrSingleton === FORM_STATE_IS_MATCHING ||\n inRootOrSingleton === FORM_STATE_IS_NOT_MATCHING\n ? markerInstance\n : null;\n }\n if (markerInstance) {\n nextHydratableInstance = getNextHydratable(\n markerInstance.nextSibling\n );\n isMatching = markerInstance.data === FORM_STATE_IS_MATCHING;\n break a;\n }\n }\n throwOnHydrationMismatch(isMatching);\n }\n isMatching = !1;\n }\n isMatching && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n isMatching = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = isMatching;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber,\n isMatching\n );\n isMatching.dispatch = ssrFormState;\n isMatching = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !1,\n isMatching.queue\n );\n isMatching = mountWorkInProgressHook();\n markerInstance = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n isMatching.queue = markerInstance;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber,\n markerInstance,\n inRootOrSingleton,\n ssrFormState\n );\n markerInstance.dispatch = ssrFormState;\n isMatching.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n }\n function updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n }\n function updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n if (\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n )\n try {\n var state = useThenable(currentStateHook);\n } catch (x) {\n if (x === SuspenseException) throw SuspenseActionException;\n throw x;\n }\n else state = currentStateHook;\n currentStateHook = updateWorkInProgressHook();\n var actionQueue = currentStateHook.queue,\n dispatch = actionQueue.dispatch;\n action !== currentStateHook.memoizedState &&\n ((currentlyRenderingFiber.flags |= 2048),\n pushSimpleEffect(\n HasEffect | Passive,\n createEffectInstance(),\n actionStateActionEffect.bind(null, actionQueue, action),\n null\n ));\n return [state, dispatch, stateHook];\n }\n function actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n }\n function rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n }\n function pushSimpleEffect(tag, inst, create, createDeps) {\n tag = {\n tag: tag,\n create: create,\n deps: createDeps,\n inst: inst,\n next: null\n };\n inst = currentlyRenderingFiber.updateQueue;\n null === inst &&\n ((inst = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = inst));\n create = inst.lastEffect;\n null === create\n ? (inst.lastEffect = tag.next = tag)\n : ((createDeps = create.next),\n (create.next = tag),\n (tag.next = createDeps),\n (inst.lastEffect = tag));\n return tag;\n }\n function createEffectInstance() {\n return { destroy: void 0, resource: void 0 };\n }\n function mountRef(initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n }\n function mountEffectImpl(fiberFlags, hookFlags, create, createDeps) {\n var hook = mountWorkInProgressHook();\n createDeps = void 0 === createDeps ? null : createDeps;\n currentlyRenderingFiber.flags |= fiberFlags;\n hook.memoizedState = pushSimpleEffect(\n HasEffect | hookFlags,\n createEffectInstance(),\n create,\n createDeps\n );\n }\n function updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n : ((currentlyRenderingFiber.flags |= fiberFlags),\n (hook.memoizedState = pushSimpleEffect(\n HasEffect | hookFlags,\n inst,\n create,\n deps\n )));\n }\n function mountEffect(create, createDeps) {\n (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&\n (currentlyRenderingFiber.mode & NoStrictPassiveEffectsMode) === NoMode\n ? mountEffectImpl(276826112, Passive, create, createDeps)\n : mountEffectImpl(8390656, Passive, create, createDeps);\n }\n function mountLayoutEffect(create, deps) {\n var fiberFlags = 4194308;\n (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&\n (fiberFlags |= 134217728);\n return mountEffectImpl(fiberFlags, Layout, create, deps);\n }\n function imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n ref.hasOwnProperty(\"current\") ||\n console.error(\n \"Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.\",\n \"an object with keys {\" + Object.keys(ref).join(\", \") + \"}\"\n ),\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n }\n function mountImperativeHandle(ref, create, deps) {\n \"function\" !== typeof create &&\n console.error(\n \"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.\",\n null !== create ? typeof create : \"null\"\n );\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n var fiberFlags = 4194308;\n (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&\n (fiberFlags |= 134217728);\n mountEffectImpl(\n fiberFlags,\n Layout,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n }\n function updateImperativeHandle(ref, create, deps) {\n \"function\" !== typeof create &&\n console.error(\n \"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.\",\n null !== create ? typeof create : \"null\"\n );\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(\n 4,\n Layout,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n }\n function mountCallback(callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n }\n function updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n }\n function mountMemo(nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n }\n function updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n }\n function mountDeferredValue(value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n }\n function updateDeferredValue(value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n }\n function rerenderDeferredValue(value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n }\n function mountDeferredValueImpl(hook, value, initialValue) {\n if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n }\n function updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (0 === (renderLanes & 42))\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n }\n function startTransition(\n fiber,\n queue,\n pendingState,\n finishedState,\n callback\n ) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && previousPriority < ContinuousEventPriority\n ? previousPriority\n : ContinuousEventPriority;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n currentTransition._updatedFibers = new Set();\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane(fiber)\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition),\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((fiber = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < fiber &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n ));\n }\n }\n function startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag)\n throw Error(\n \"Expected the form instance to be a HostComponent. This is a bug in React.\"\n );\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n NotPendingTransition,\n null === action\n ? noop$2\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n }\n function ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: NotPendingTransition,\n baseState: NotPendingTransition,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: NotPendingTransition\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n }\n function requestFormReset$1(formFiber) {\n null === ReactSharedInternals.T &&\n console.error(\n \"requestFormReset was called outside a transition or action. To fix, move to an action, or wrap with startTransition.\"\n );\n var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;\n dispatchSetStateInternal(\n formFiber,\n resetStateQueue,\n {},\n requestUpdateLane(formFiber)\n );\n }\n function mountTransition() {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n }\n function updateTransition() {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n }\n function rerenderTransition() {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n }\n function useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n }\n function mountId() {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var treeId = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n treeId =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + treeId;\n identifierPrefix = \"\\u00ab\" + identifierPrefix + \"R\" + treeId;\n treeId = localIdCounter++;\n 0 < treeId && (identifierPrefix += \"H\" + treeId.toString(32));\n identifierPrefix += \"\\u00bb\";\n } else\n (treeId = globalClientIdCounter++),\n (identifierPrefix =\n \"\\u00ab\" + identifierPrefix + \"r\" + treeId.toString(32) + \"\\u00bb\");\n return (hook.memoizedState = identifierPrefix);\n }\n function mountRefresh() {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber\n ));\n }\n function refreshCache(fiber, seedKey) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane(provider);\n fiber = createUpdate(lane);\n var root = enqueueUpdate(provider, fiber, lane);\n null !== root &&\n (scheduleUpdateOnFiber(root, provider, lane),\n entangleTransitions(root, provider, lane));\n provider = createCache();\n null !== seedKey &&\n void 0 !== seedKey &&\n null !== root &&\n console.error(\n \"The seed argument is not enabled outside experimental channels.\"\n );\n fiber.payload = { cache: provider };\n return;\n }\n provider = provider.return;\n }\n }\n function dispatchReducerAction(fiber, queue, action) {\n var args = arguments;\n \"function\" === typeof args[3] &&\n console.error(\n \"State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().\"\n );\n args = requestUpdateLane(fiber);\n var update = {\n lane: args,\n revertLane: 0,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, update)\n : ((update = enqueueConcurrentHookUpdate(fiber, queue, update, args)),\n null !== update &&\n (scheduleUpdateOnFiber(update, fiber, args),\n entangleTransitionUpdate(update, queue, args)));\n markStateUpdateScheduled(fiber, args);\n }\n function dispatchSetState(fiber, queue, action) {\n var args = arguments;\n \"function\" === typeof args[3] &&\n console.error(\n \"State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().\"\n );\n args = requestUpdateLane(fiber);\n dispatchSetStateInternal(fiber, queue, action, args);\n markStateUpdateScheduled(fiber, args);\n }\n function dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n ) {\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot &&\n finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n }\n function dispatchOptimisticSetState(\n fiber,\n throwIfDuringRender,\n queue,\n action\n ) {\n null === ReactSharedInternals.T &&\n 0 === currentEntangledLane &&\n console.error(\n \"An optimistic state update occurred outside a transition or action. To fix, move the update to an action, or wrap with startTransition.\"\n );\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender)\n throw Error(\"Cannot update optimistic state while rendering.\");\n console.error(\"Cannot call startTransition while rendering.\");\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n markStateUpdateScheduled(fiber, 2);\n }\n function isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber ||\n (null !== alternate && alternate === currentlyRenderingFiber)\n );\n }\n function enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass =\n didScheduleRenderPhaseUpdate = !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n function entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194048)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n }\n function pushDebugInfo(debugInfo) {\n var previousDebugInfo = currentDebugInfo;\n null != debugInfo &&\n (currentDebugInfo =\n null === previousDebugInfo\n ? debugInfo\n : previousDebugInfo.concat(debugInfo));\n return previousDebugInfo;\n }\n function validateFragmentProps(element, fiber, returnFiber) {\n for (var keys = Object.keys(element.props), i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (\"children\" !== key && \"key\" !== key) {\n null === fiber &&\n ((fiber = createFiberFromElement(element, returnFiber.mode, 0)),\n (fiber._debugInfo = currentDebugInfo),\n (fiber.return = returnFiber));\n runWithFiberInDEV(\n fiber,\n function (erroredKey) {\n console.error(\n \"Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.\",\n erroredKey\n );\n },\n key\n );\n break;\n }\n }\n }\n function unwrapThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = createThenableState());\n return trackUsedThenable(thenableState, thenable, index);\n }\n function coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n }\n function throwOnInvalidObjectType(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(\n 'A React Element from an older version of React was rendered. This is not supported. It can happen if:\\n- Multiple copies of the \"react\" package is used.\\n- A library pre-bundled an old copy of \"react\" or \"react/jsx-runtime\".\\n- A compiler tries to \"inline\" JSX instead of using the runtime.'\n );\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n function warnOnFunctionType(returnFiber, invalidChild) {\n var parentName = getComponentNameFromFiber(returnFiber) || \"Component\";\n ownerHasFunctionTypeWarning[parentName] ||\n ((ownerHasFunctionTypeWarning[parentName] = !0),\n (invalidChild =\n invalidChild.displayName || invalidChild.name || \"Component\"),\n 3 === returnFiber.tag\n ? console.error(\n \"Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\\n root.render(%s)\",\n invalidChild,\n invalidChild,\n invalidChild\n )\n : console.error(\n \"Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\\n <%s>{%s}</%s>\",\n invalidChild,\n invalidChild,\n parentName,\n invalidChild,\n parentName\n ));\n }\n function warnOnSymbolType(returnFiber, invalidChild) {\n var parentName = getComponentNameFromFiber(returnFiber) || \"Component\";\n ownerHasSymbolTypeWarning[parentName] ||\n ((ownerHasSymbolTypeWarning[parentName] = !0),\n (invalidChild = String(invalidChild)),\n 3 === returnFiber.tag\n ? console.error(\n \"Symbols are not valid as a React child.\\n root.render(%s)\",\n invalidChild\n )\n : console.error(\n \"Symbols are not valid as a React child.\\n <%s>%s</%s>\",\n parentName,\n invalidChild,\n parentName\n ));\n }\n function createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]),\n (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null !== currentFirstChild.key\n ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n : existingChildren.set(currentFirstChild.index, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 67108866;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 67108866);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(\n textContent,\n returnFiber.mode,\n lanes\n )),\n (current.return = returnFiber),\n (current._debugOwner = returnFiber),\n (current._debugTask = returnFiber._debugTask),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return (\n (current = updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n )),\n validateFragmentProps(element, current, returnFiber),\n current\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n isCompatibleFamilyForHotReloading(current, element) ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n callLazyInitInDEV(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n (current._debugOwner = element._owner),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = createFiberFromElement(element, returnFiber.mode, lanes);\n coerceRef(current, element);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n (current._debugOwner = returnFiber),\n (current._debugTask = returnFiber._debugTask),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n (newChild._debugOwner = returnFiber),\n (newChild._debugTask = returnFiber._debugTask),\n (newChild._debugInfo = currentDebugInfo),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromElement(\n newChild,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = pushDebugInfo(newChild._debugInfo)),\n (lanes._debugInfo = currentDebugInfo),\n (currentDebugInfo = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n (newChild._debugInfo = currentDebugInfo),\n newChild\n );\n case REACT_LAZY_TYPE:\n var _prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n newChild = callLazyInitInDEV(newChild);\n returnFiber = createChild(returnFiber, newChild, lanes);\n currentDebugInfo = _prevDebugInfo;\n return returnFiber;\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (lanes = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (lanes.return = returnFiber),\n (lanes._debugOwner = returnFiber),\n (lanes._debugTask = returnFiber._debugTask),\n (returnFiber = pushDebugInfo(newChild._debugInfo)),\n (lanes._debugInfo = currentDebugInfo),\n (currentDebugInfo = returnFiber),\n lanes\n );\n if (\"function\" === typeof newChild.then)\n return (\n (_prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = createChild(\n returnFiber,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = _prevDebugInfo),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? ((key = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateElement(\n returnFiber,\n oldFiber,\n newChild,\n lanes\n )),\n (currentDebugInfo = key),\n returnFiber)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (key = pushDebugInfo(newChild._debugInfo)),\n (newChild = callLazyInitInDEV(newChild)),\n (returnFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChild,\n lanes\n )),\n (currentDebugInfo = key),\n returnFiber\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild)) {\n if (null !== key) return null;\n key = pushDebugInfo(newChild._debugInfo);\n returnFiber = updateFragment(\n returnFiber,\n oldFiber,\n newChild,\n lanes,\n null\n );\n currentDebugInfo = key;\n return returnFiber;\n }\n if (\"function\" === typeof newChild.then)\n return (\n (key = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = key),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (newIdx =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n (existingChildren = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateElement(\n returnFiber,\n newIdx,\n newChild,\n lanes\n )),\n (currentDebugInfo = existingChildren),\n returnFiber\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n var _prevDebugInfo7 = pushDebugInfo(newChild._debugInfo);\n newChild = callLazyInitInDEV(newChild);\n returnFiber = updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n );\n currentDebugInfo = _prevDebugInfo7;\n return returnFiber;\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newIdx = existingChildren.get(newIdx) || null),\n (existingChildren = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateFragment(\n returnFiber,\n newIdx,\n newChild,\n lanes,\n null\n )),\n (currentDebugInfo = existingChildren),\n returnFiber\n );\n if (\"function\" === typeof newChild.then)\n return (\n (_prevDebugInfo7 = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = _prevDebugInfo7),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return null;\n }\n function warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys) {\n if (\"object\" !== typeof child || null === child) return knownKeys;\n switch (child.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n warnForMissingKey(returnFiber, workInProgress, child);\n var key = child.key;\n if (\"string\" !== typeof key) break;\n if (null === knownKeys) {\n knownKeys = new Set();\n knownKeys.add(key);\n break;\n }\n if (!knownKeys.has(key)) {\n knownKeys.add(key);\n break;\n }\n runWithFiberInDEV(workInProgress, function () {\n console.error(\n \"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted \\u2014 the behavior is unsupported and could change in a future version.\",\n key\n );\n });\n break;\n case REACT_LAZY_TYPE:\n (child = callLazyInitInDEV(child)),\n warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys);\n }\n return knownKeys;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var knownKeys = null,\n resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n knownKeys = warnOnInvalidKey(\n returnFiber,\n newFiber,\n newChildren[newIdx],\n knownKeys\n );\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n knownKeys\n )),\n (currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n nextOldFiber,\n newChildren[newIdx],\n knownKeys\n )),\n shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren)\n throw Error(\"An iterable object provided no iterator.\");\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n knownKeys = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n knownKeys = warnOnInvalidKey(\n returnFiber,\n newFiber,\n step.value,\n knownKeys\n );\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (oldFiber = createChild(returnFiber, step.value, lanes)),\n null !== oldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n oldFiber,\n step.value,\n knownKeys\n )),\n (currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n step.value,\n lanes\n )),\n null !== nextOldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n nextOldFiber,\n step.value,\n knownKeys\n )),\n shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n (validateFragmentProps(newChild, null, returnFiber),\n (newChild = newChild.props.children));\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n var prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n lanes.return = returnFiber;\n lanes._debugOwner = newChild._owner;\n lanes._debugInfo = currentDebugInfo;\n validateFragmentProps(newChild, lanes, returnFiber);\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n isCompatibleFamilyForHotReloading(\n currentFirstChild,\n newChild\n ) ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n callLazyInitInDEV(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n lanes._debugOwner = newChild._owner;\n lanes._debugInfo = currentDebugInfo;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n (lanes.return = returnFiber),\n (lanes._debugOwner = returnFiber),\n (lanes._debugTask = returnFiber._debugTask),\n (lanes._debugInfo = currentDebugInfo),\n validateFragmentProps(newChild, lanes, returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromElement(\n newChild,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (lanes._debugInfo = currentDebugInfo),\n (returnFiber = lanes));\n }\n returnFiber = placeSingleChild(returnFiber);\n currentDebugInfo = prevDebugInfo;\n return returnFiber;\n case REACT_PORTAL_TYPE:\n a: {\n prevDebugInfo = newChild;\n for (\n newChild = prevDebugInfo.key;\n null !== currentFirstChild;\n\n ) {\n if (currentFirstChild.key === newChild)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n prevDebugInfo.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n prevDebugInfo.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n prevDebugInfo.children || []\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(\n prevDebugInfo,\n returnFiber.mode,\n lanes\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (newChild = callLazyInitInDEV(newChild)),\n (returnFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )),\n (currentDebugInfo = prevDebugInfo),\n returnFiber\n );\n }\n if (isArrayImpl(newChild))\n return (\n (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )),\n (currentDebugInfo = prevDebugInfo),\n returnFiber\n );\n if (getIteratorFn(newChild)) {\n prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key)\n throw Error(\n \"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\"\n );\n var newChildren = key.call(newChild);\n if (newChildren === newChild) {\n if (\n 0 !== returnFiber.tag ||\n \"[object GeneratorFunction]\" !==\n Object.prototype.toString.call(returnFiber.type) ||\n \"[object Generator]\" !==\n Object.prototype.toString.call(newChildren)\n )\n didWarnAboutGenerators ||\n console.error(\n \"Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items.\"\n ),\n (didWarnAboutGenerators = !0);\n } else\n newChild.entries !== key ||\n didWarnAboutMaps ||\n (console.error(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0));\n returnFiber = reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n );\n currentDebugInfo = prevDebugInfo;\n return returnFiber;\n }\n if (\"function\" === typeof newChild.then)\n return (\n (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = prevDebugInfo),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (prevDebugInfo = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n ),\n (lanes = useFiber(currentFirstChild, prevDebugInfo)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(\n prevDebugInfo,\n returnFiber.mode,\n lanes\n )),\n (lanes.return = returnFiber),\n (lanes._debugOwner = returnFiber),\n (lanes._debugTask = returnFiber._debugTask),\n (lanes._debugInfo = currentDebugInfo),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber)\n );\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n var prevDebugInfo = currentDebugInfo;\n currentDebugInfo = null;\n try {\n thenableIndexCounter = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException || x === SuspenseActionException) throw x;\n var fiber = createFiber(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n var debugInfo = (fiber._debugInfo = currentDebugInfo);\n fiber._debugOwner = returnFiber._debugOwner;\n fiber._debugTask = returnFiber._debugTask;\n if (null != debugInfo)\n for (var i = debugInfo.length - 1; 0 <= i; i--)\n if (\"string\" === typeof debugInfo[i].stack) {\n fiber._debugOwner = debugInfo[i];\n fiber._debugTask = debugInfo[i].debugTask;\n break;\n }\n return fiber;\n } finally {\n currentDebugInfo = prevDebugInfo;\n }\n };\n }\n function pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(\n suspenseStackCursor,\n suspenseStackCursor.current & SubtreeSuspenseContextMask,\n handler\n );\n push(suspenseHandlerStackCursor, handler, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n }\n function pushOffscreenSuspenseHandler(fiber) {\n if (22 === fiber.tag) {\n if (\n (push(suspenseStackCursor, suspenseStackCursor.current, fiber),\n push(suspenseHandlerStackCursor, fiber, fiber),\n null === shellBoundary)\n ) {\n var current = fiber.alternate;\n null !== current &&\n null !== current.memoizedState &&\n (shellBoundary = fiber);\n }\n } else reuseSuspenseHandlerOnStack(fiber);\n }\n function reuseSuspenseHandlerOnStack(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current, fiber);\n push(\n suspenseHandlerStackCursor,\n suspenseHandlerStackCursor.current,\n fiber\n );\n }\n function popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor, fiber);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor, fiber);\n }\n function findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n state.data === SUSPENSE_PENDING_START_DATA ||\n isSuspenseInstanceFallback(state))\n )\n return node;\n } else if (\n 19 === node.tag &&\n void 0 !== node.memoizedProps.revealOrder\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n }\n function warnOnInvalidCallback(callback) {\n if (null !== callback && \"function\" !== typeof callback) {\n var key = String(callback);\n didWarnOnInvalidCallback.has(key) ||\n (didWarnOnInvalidCallback.add(key),\n console.error(\n \"Expected the last optional `callback` argument to be a function. Instead received: %s.\",\n callback\n ));\n }\n }\n function applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n ) {\n var prevState = workInProgress.memoizedState,\n partialState = getDerivedStateFromProps(nextProps, prevState);\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n partialState = getDerivedStateFromProps(nextProps, prevState);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n void 0 === partialState &&\n ((ctor = getComponentNameFromType(ctor) || \"Component\"),\n didWarnAboutUndefinedDerivedState.has(ctor) ||\n (didWarnAboutUndefinedDerivedState.add(ctor),\n console.error(\n \"%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.\",\n ctor\n )));\n prevState =\n null === partialState || void 0 === partialState\n ? prevState\n : assign({}, prevState, partialState);\n workInProgress.memoizedState = prevState;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = prevState);\n }\n function checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n ) {\n var instance = workInProgress.stateNode;\n if (\"function\" === typeof instance.shouldComponentUpdate) {\n oldProps = instance.shouldComponentUpdate(\n newProps,\n newState,\n nextContext\n );\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n oldProps = instance.shouldComponentUpdate(\n newProps,\n newState,\n nextContext\n );\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n void 0 === oldProps &&\n console.error(\n \"%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.\",\n getComponentNameFromType(ctor) || \"Component\"\n );\n return oldProps;\n }\n return ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n }\n function callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n ) {\n var oldState = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== oldState &&\n ((workInProgress =\n getComponentNameFromFiber(workInProgress) || \"Component\"),\n didWarnAboutStateAssignmentForComponent.has(workInProgress) ||\n (didWarnAboutStateAssignmentForComponent.add(workInProgress),\n console.error(\n \"%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.\",\n workInProgress\n )),\n classComponentUpdater.enqueueReplaceState(\n instance,\n instance.state,\n null\n ));\n }\n function resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var _propName in Component)\n void 0 === newProps[_propName] &&\n (newProps[_propName] = Component[_propName]);\n }\n return newProps;\n }\n function defaultOnUncaughtError(error) {\n reportGlobalError(error);\n console.warn(\n \"%s\\n\\n%s\\n\",\n componentName\n ? \"An error occurred in the <\" + componentName + \"> component.\"\n : \"An error occurred in one of your React components.\",\n \"Consider adding an error boundary to your tree to customize error handling behavior.\\nVisit https://react.dev/link/error-boundaries to learn more about error boundaries.\"\n );\n }\n function defaultOnCaughtError(error) {\n var componentNameMessage = componentName\n ? \"The above error occurred in the <\" + componentName + \"> component.\"\n : \"The above error occurred in one of your React components.\",\n recreateMessage =\n \"React will try to recreate this component tree from scratch using the error boundary you provided, \" +\n ((errorBoundaryName || \"Anonymous\") + \".\");\n if (\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.environmentName\n ) {\n var JSCompiler_inline_result = error.environmentName;\n error = [\n \"%o\\n\\n%s\\n\\n%s\\n\",\n error,\n componentNameMessage,\n recreateMessage\n ].slice(0);\n \"string\" === typeof error[0]\n ? error.splice(\n 0,\n 1,\n badgeFormat + error[0],\n badgeStyle,\n pad + JSCompiler_inline_result + pad,\n resetStyle\n )\n : error.splice(\n 0,\n 0,\n badgeFormat,\n badgeStyle,\n pad + JSCompiler_inline_result + pad,\n resetStyle\n );\n error.unshift(console);\n JSCompiler_inline_result = bind.apply(console.error, error);\n JSCompiler_inline_result();\n } else\n console.error(\n \"%o\\n\\n%s\\n\\n%s\\n\",\n error,\n componentNameMessage,\n recreateMessage\n );\n }\n function defaultOnRecoverableError(error) {\n reportGlobalError(error);\n }\n function logUncaughtError(root, errorInfo) {\n try {\n componentName = errorInfo.source\n ? getComponentNameFromFiber(errorInfo.source)\n : null;\n errorBoundaryName = null;\n var error = errorInfo.value;\n if (null !== ReactSharedInternals.actQueue)\n ReactSharedInternals.thrownErrors.push(error);\n else {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(error, { componentStack: errorInfo.stack });\n }\n } catch (e$5) {\n setTimeout(function () {\n throw e$5;\n });\n }\n }\n function logCaughtError(root, boundary, errorInfo) {\n try {\n componentName = errorInfo.source\n ? getComponentNameFromFiber(errorInfo.source)\n : null;\n errorBoundaryName = getComponentNameFromFiber(boundary);\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$6) {\n setTimeout(function () {\n throw e$6;\n });\n }\n }\n function createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = CaptureUpdate;\n lane.payload = { element: null };\n lane.callback = function () {\n runWithFiberInDEV(errorInfo.source, logUncaughtError, root, errorInfo);\n };\n return lane;\n }\n function createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = CaptureUpdate;\n return lane;\n }\n function initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n markFailedErrorBoundaryForHotReloading(fiber);\n runWithFiberInDEV(\n errorInfo.source,\n logCaughtError,\n root,\n fiber,\n errorInfo\n );\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n markFailedErrorBoundaryForHotReloading(fiber);\n runWithFiberInDEV(\n errorInfo.source,\n logCaughtError,\n root,\n fiber,\n errorInfo\n );\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n callComponentDidCatchInDEV(this, errorInfo);\n \"function\" === typeof getDerivedStateFromError ||\n (0 === (fiber.lanes & 2) &&\n console.error(\n \"%s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI.\",\n getComponentNameFromFiber(fiber) || \"Unknown\"\n ));\n });\n }\n function throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n ) {\n sourceFiber.flags |= 32768;\n isDevToolsPresent && restorePendingUpdaters(root, rootRenderLanes);\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n isHydrating && (didSuspendOrErrorDEV = !0);\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 13:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n workInProgressRootExitStatus === RootInProgress &&\n (workInProgressRootExitStatus = RootSuspended),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(\n \"Unexpected Suspense handler tag (\" +\n sourceFiber.tag +\n \"). This is a bug in React.\"\n );\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (didSuspendOrErrorDEV = !0),\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n queueHydrationError(\n createCapturedValueAtFiber(\n Error(\n \"There was an error while hydrating but React was able to recover by instead client rendering from the nearest Suspense boundary.\",\n { cause: value }\n ),\n sourceFiber\n )\n ))\n : (value !== HydrationMismatchException &&\n queueHydrationError(\n createCapturedValueAtFiber(\n Error(\n \"There was an error while hydrating but React was able to recover by instead client rendering the entire root.\",\n { cause: value }\n ),\n sourceFiber\n )\n ),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n workInProgressRootExitStatus !== RootSuspendedWithDelay &&\n (workInProgressRootExitStatus = RootErrored)),\n !1\n );\n var error = createCapturedValueAtFiber(\n Error(\n \"There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root.\",\n { cause: value }\n ),\n sourceFiber\n );\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [error])\n : workInProgressRootConcurrentErrors.push(error);\n workInProgressRootExitStatus !== RootSuspendedWithDelay &&\n (workInProgressRootExitStatus = RootErrored);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(\n sourceFiber.stateNode,\n value,\n root\n )),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n if (\n ((returnFiber = sourceFiber.type),\n (error = sourceFiber.stateNode),\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== error &&\n \"function\" === typeof error.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(error)))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n }\n function reconcileChildren(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n ) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n }\n function updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n markComponentRenderStarted(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n markComponentRenderStopped();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n }\n function updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (Component = resolveFunctionForHotReloading(type)),\n (workInProgress.tag = 15),\n (workInProgress.type = Component),\n validateFunctionComponentInDev(workInProgress, type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (\n Component(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n return bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n function updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref &&\n workInProgress.type === current.type\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n }\n function updateOffscreenComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n if (\"hidden\" === nextProps.mode) {\n if (0 !== (workInProgress.flags & 128)) {\n nextProps =\n null !== prevState\n ? prevState.baseLanes | renderLanes\n : renderLanes;\n if (null !== current) {\n nextChildren = workInProgress.child = current.child;\n for (prevState = 0; null !== nextChildren; )\n (prevState =\n prevState | nextChildren.lanes | nextChildren.childLanes),\n (nextChildren = nextChildren.sibling);\n workInProgress.childLanes = prevState & ~nextProps;\n } else (workInProgress.childLanes = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextProps,\n renderLanes\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(workInProgress),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (workInProgress.lanes = workInProgress.childLanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState\n ? prevState.baseLanes | renderLanes\n : renderLanes,\n renderLanes\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(workInProgress),\n reuseSuspenseHandlerOnStack(workInProgress));\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n }\n function deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes\n ) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : {\n parent: CacheContext._currentValue,\n pool: JSCompiler_inline_result\n };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack(workInProgress);\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n return null;\n }\n function markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 4194816);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(\n \"Expected ref to be a function, an object returned by React.createRef(), or undefined/null.\"\n );\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 4194816;\n }\n }\n function updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n if (\n Component.prototype &&\n \"function\" === typeof Component.prototype.render\n ) {\n var componentName = getComponentNameFromType(Component) || \"Unknown\";\n didWarnAboutBadClass[componentName] ||\n (console.error(\n \"The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.\",\n componentName,\n componentName\n ),\n (didWarnAboutBadClass[componentName] = !0));\n }\n workInProgress.mode & StrictLegacyMode &&\n ReactStrictModeWarnings.recordLegacyContextWarning(\n workInProgress,\n null\n );\n null === current &&\n (validateFunctionComponentInDev(workInProgress, workInProgress.type),\n Component.contextTypes &&\n ((componentName = getComponentNameFromType(Component) || \"Unknown\"),\n didWarnAboutContextTypes[componentName] ||\n ((didWarnAboutContextTypes[componentName] = !0),\n console.error(\n \"%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)\",\n componentName\n ))));\n prepareToReadContext(workInProgress);\n markComponentRenderStarted(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n markComponentRenderStopped();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n }\n function replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n ) {\n prepareToReadContext(workInProgress);\n markComponentRenderStarted(workInProgress);\n hookTypesUpdateIndexDev = -1;\n ignorePreviousDependencies =\n null !== current && current.type !== workInProgress.type;\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current, workInProgress);\n Component = checkDidRenderIdHook();\n markComponentRenderStopped();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n }\n function updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n switch (shouldErrorImpl(workInProgress)) {\n case !1:\n var _instance = workInProgress.stateNode,\n state = new workInProgress.type(\n workInProgress.memoizedProps,\n _instance.context\n ).state;\n _instance.updater.enqueueSetState(_instance, state, null);\n break;\n case !0:\n workInProgress.flags |= 128;\n workInProgress.flags |= 65536;\n _instance = Error(\"Simulated error coming from DevTools\");\n var lane = renderLanes & -renderLanes;\n workInProgress.lanes |= lane;\n state = workInProgressRoot;\n if (null === state)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n lane = createClassErrorUpdate(lane);\n initializeClassErrorUpdate(\n lane,\n state,\n workInProgress,\n createCapturedValueAtFiber(_instance, workInProgress)\n );\n enqueueCapturedUpdate(workInProgress, lane);\n }\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n state = emptyContextObject;\n _instance = Component.contextType;\n \"contextType\" in Component &&\n null !== _instance &&\n (void 0 === _instance || _instance.$$typeof !== REACT_CONTEXT_TYPE) &&\n !didWarnAboutInvalidateContextType.has(Component) &&\n (didWarnAboutInvalidateContextType.add(Component),\n (lane =\n void 0 === _instance\n ? \" However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file.\"\n : \"object\" !== typeof _instance\n ? \" However, it is set to a \" + typeof _instance + \".\"\n : _instance.$$typeof === REACT_CONSUMER_TYPE\n ? \" Did you accidentally pass the Context.Consumer instead?\"\n : \" However, it is set to an object with keys {\" +\n Object.keys(_instance).join(\", \") +\n \"}.\"),\n console.error(\n \"%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s\",\n getComponentNameFromType(Component) || \"Component\",\n lane\n ));\n \"object\" === typeof _instance &&\n null !== _instance &&\n (state = readContext(_instance));\n _instance = new Component(nextProps, state);\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n _instance = new Component(nextProps, state);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n state = workInProgress.memoizedState =\n null !== _instance.state && void 0 !== _instance.state\n ? _instance.state\n : null;\n _instance.updater = classComponentUpdater;\n workInProgress.stateNode = _instance;\n _instance._reactInternals = workInProgress;\n _instance._reactInternalInstance = fakeInternalInstance;\n \"function\" === typeof Component.getDerivedStateFromProps &&\n null === state &&\n ((state = getComponentNameFromType(Component) || \"Component\"),\n didWarnAboutUninitializedState.has(state) ||\n (didWarnAboutUninitializedState.add(state),\n console.error(\n \"`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.\",\n state,\n null === _instance.state ? \"null\" : \"undefined\",\n state\n )));\n if (\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate\n ) {\n var foundWillUpdateName = (lane = state = null);\n \"function\" === typeof _instance.componentWillMount &&\n !0 !== _instance.componentWillMount.__suppressDeprecationWarning\n ? (state = \"componentWillMount\")\n : \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n (state = \"UNSAFE_componentWillMount\");\n \"function\" === typeof _instance.componentWillReceiveProps &&\n !0 !==\n _instance.componentWillReceiveProps.__suppressDeprecationWarning\n ? (lane = \"componentWillReceiveProps\")\n : \"function\" ===\n typeof _instance.UNSAFE_componentWillReceiveProps &&\n (lane = \"UNSAFE_componentWillReceiveProps\");\n \"function\" === typeof _instance.componentWillUpdate &&\n !0 !== _instance.componentWillUpdate.__suppressDeprecationWarning\n ? (foundWillUpdateName = \"componentWillUpdate\")\n : \"function\" === typeof _instance.UNSAFE_componentWillUpdate &&\n (foundWillUpdateName = \"UNSAFE_componentWillUpdate\");\n if (null !== state || null !== lane || null !== foundWillUpdateName) {\n _instance = getComponentNameFromType(Component) || \"Component\";\n var newApiName =\n \"function\" === typeof Component.getDerivedStateFromProps\n ? \"getDerivedStateFromProps()\"\n : \"getSnapshotBeforeUpdate()\";\n didWarnAboutLegacyLifecyclesAndDerivedState.has(_instance) ||\n (didWarnAboutLegacyLifecyclesAndDerivedState.add(_instance),\n console.error(\n \"Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\nhttps://react.dev/link/unsafe-component-lifecycles\",\n _instance,\n newApiName,\n null !== state ? \"\\n \" + state : \"\",\n null !== lane ? \"\\n \" + lane : \"\",\n null !== foundWillUpdateName ? \"\\n \" + foundWillUpdateName : \"\"\n ));\n }\n }\n _instance = workInProgress.stateNode;\n state = getComponentNameFromType(Component) || \"Component\";\n _instance.render ||\n (Component.prototype &&\n \"function\" === typeof Component.prototype.render\n ? console.error(\n \"No `render` method found on the %s instance: did you accidentally return an object from the constructor?\",\n state\n )\n : console.error(\n \"No `render` method found on the %s instance: you may have forgotten to define `render`.\",\n state\n ));\n !_instance.getInitialState ||\n _instance.getInitialState.isReactClassApproved ||\n _instance.state ||\n console.error(\n \"getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?\",\n state\n );\n _instance.getDefaultProps &&\n !_instance.getDefaultProps.isReactClassApproved &&\n console.error(\n \"getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.\",\n state\n );\n _instance.contextType &&\n console.error(\n \"contextType was defined as an instance property on %s. Use a static property to define contextType instead.\",\n state\n );\n Component.childContextTypes &&\n !didWarnAboutChildContextTypes.has(Component) &&\n (didWarnAboutChildContextTypes.add(Component),\n console.error(\n \"%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)\",\n state\n ));\n Component.contextTypes &&\n !didWarnAboutContextTypes$1.has(Component) &&\n (didWarnAboutContextTypes$1.add(Component),\n console.error(\n \"%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)\",\n state\n ));\n \"function\" === typeof _instance.componentShouldUpdate &&\n console.error(\n \"%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.\",\n state\n );\n Component.prototype &&\n Component.prototype.isPureReactComponent &&\n \"undefined\" !== typeof _instance.shouldComponentUpdate &&\n console.error(\n \"%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.\",\n getComponentNameFromType(Component) || \"A pure component\"\n );\n \"function\" === typeof _instance.componentDidUnmount &&\n console.error(\n \"%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?\",\n state\n );\n \"function\" === typeof _instance.componentDidReceiveProps &&\n console.error(\n \"%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().\",\n state\n );\n \"function\" === typeof _instance.componentWillRecieveProps &&\n console.error(\n \"%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?\",\n state\n );\n \"function\" === typeof _instance.UNSAFE_componentWillRecieveProps &&\n console.error(\n \"%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?\",\n state\n );\n lane = _instance.props !== nextProps;\n void 0 !== _instance.props &&\n lane &&\n console.error(\n \"When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.\",\n state\n );\n _instance.defaultProps &&\n console.error(\n \"Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.\",\n state,\n state\n );\n \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n \"function\" === typeof _instance.componentDidUpdate ||\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(Component) ||\n (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(Component),\n console.error(\n \"%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.\",\n getComponentNameFromType(Component)\n ));\n \"function\" === typeof _instance.getDerivedStateFromProps &&\n console.error(\n \"%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.\",\n state\n );\n \"function\" === typeof _instance.getDerivedStateFromError &&\n console.error(\n \"%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.\",\n state\n );\n \"function\" === typeof Component.getSnapshotBeforeUpdate &&\n console.error(\n \"%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.\",\n state\n );\n (lane = _instance.state) &&\n (\"object\" !== typeof lane || isArrayImpl(lane)) &&\n console.error(\"%s.state: must be set to an object or null\", state);\n \"function\" === typeof _instance.getChildContext &&\n \"object\" !== typeof Component.childContextTypes &&\n console.error(\n \"%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().\",\n state\n );\n _instance = workInProgress.stateNode;\n _instance.props = nextProps;\n _instance.state = workInProgress.memoizedState;\n _instance.refs = {};\n initializeUpdateQueue(workInProgress);\n state = Component.contextType;\n _instance.context =\n \"object\" === typeof state && null !== state\n ? readContext(state)\n : emptyContextObject;\n _instance.state === nextProps &&\n ((state = getComponentNameFromType(Component) || \"Component\"),\n didWarnAboutDirectlyAssigningPropsToState.has(state) ||\n (didWarnAboutDirectlyAssigningPropsToState.add(state),\n console.error(\n \"%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.\",\n state\n )));\n workInProgress.mode & StrictLegacyMode &&\n ReactStrictModeWarnings.recordLegacyContextWarning(\n workInProgress,\n _instance\n );\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(\n workInProgress,\n _instance\n );\n _instance.state = workInProgress.memoizedState;\n state = Component.getDerivedStateFromProps;\n \"function\" === typeof state &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n state,\n nextProps\n ),\n (_instance.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillMount &&\n \"function\" !== typeof _instance.componentWillMount) ||\n ((state = _instance.state),\n \"function\" === typeof _instance.componentWillMount &&\n _instance.componentWillMount(),\n \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n _instance.UNSAFE_componentWillMount(),\n state !== _instance.state &&\n (console.error(\n \"%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.\",\n getComponentNameFromFiber(workInProgress) || \"Component\"\n ),\n classComponentUpdater.enqueueReplaceState(\n _instance,\n _instance.state,\n null\n )),\n processUpdateQueue(workInProgress, nextProps, _instance, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (_instance.state = workInProgress.memoizedState));\n \"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308);\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 134217728);\n _instance = !0;\n } else if (null === current) {\n _instance = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps;\n lane = resolveClassComponentProps(Component, unresolvedOldProps);\n _instance.props = lane;\n var oldContext = _instance.context;\n foundWillUpdateName = Component.contextType;\n state = emptyContextObject;\n \"object\" === typeof foundWillUpdateName &&\n null !== foundWillUpdateName &&\n (state = readContext(foundWillUpdateName));\n newApiName = Component.getDerivedStateFromProps;\n foundWillUpdateName =\n \"function\" === typeof newApiName ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n foundWillUpdateName ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof _instance.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== state) &&\n callComponentWillReceiveProps(\n workInProgress,\n _instance,\n nextProps,\n state\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n _instance.state = oldState;\n processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof newApiName &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n newApiName,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (lane =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n lane,\n nextProps,\n oldState,\n oldContext,\n state\n ))\n ? (foundWillUpdateName ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillMount &&\n \"function\" !== typeof _instance.componentWillMount) ||\n (\"function\" === typeof _instance.componentWillMount &&\n _instance.componentWillMount(),\n \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n _instance.UNSAFE_componentWillMount()),\n \"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 134217728))\n : (\"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 134217728),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (_instance.props = nextProps),\n (_instance.state = oldContext),\n (_instance.context = state),\n (_instance = lane))\n : (\"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 134217728),\n (_instance = !1));\n } else {\n _instance = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n state = workInProgress.memoizedProps;\n foundWillUpdateName = resolveClassComponentProps(Component, state);\n _instance.props = foundWillUpdateName;\n newApiName = workInProgress.pendingProps;\n oldState = _instance.context;\n oldContext = Component.contextType;\n lane = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (lane = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof _instance.componentWillReceiveProps) ||\n ((state !== newApiName || oldState !== lane) &&\n callComponentWillReceiveProps(\n workInProgress,\n _instance,\n nextProps,\n lane\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n _instance.state = oldState;\n processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n state !== newApiName ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (foundWillUpdateName =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n foundWillUpdateName,\n nextProps,\n oldState,\n newState,\n lane\n ) ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof _instance.componentWillUpdate) ||\n (\"function\" === typeof _instance.componentWillUpdate &&\n _instance.componentWillUpdate(nextProps, newState, lane),\n \"function\" === typeof _instance.UNSAFE_componentWillUpdate &&\n _instance.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n lane\n )),\n \"function\" === typeof _instance.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof _instance.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof _instance.componentDidUpdate ||\n (state === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n (state === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (_instance.props = nextProps),\n (_instance.state = newState),\n (_instance.context = lane),\n (_instance = foundWillUpdateName))\n : (\"function\" !== typeof _instance.componentDidUpdate ||\n (state === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n (state === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (_instance = !1));\n }\n lane = _instance;\n markRef(current, workInProgress);\n state = 0 !== (workInProgress.flags & 128);\n if (lane || state) {\n lane = workInProgress.stateNode;\n setCurrentFiber(workInProgress);\n if (state && \"function\" !== typeof Component.getDerivedStateFromError)\n (Component = null), (profilerStartTime = -1);\n else {\n markComponentRenderStarted(workInProgress);\n Component = callRenderInDEV(lane);\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n callRenderInDEV(lane);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n markComponentRenderStopped();\n }\n workInProgress.flags |= 1;\n null !== current && state\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, Component, renderLanes);\n workInProgress.memoizedState = lane.state;\n current = workInProgress.child;\n } else\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n renderLanes = workInProgress.stateNode;\n _instance &&\n renderLanes.props !== nextProps &&\n (didWarnAboutReassigningProps ||\n console.error(\n \"It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.\",\n getComponentNameFromFiber(workInProgress) || \"a component\"\n ),\n (didWarnAboutReassigningProps = !0));\n return current;\n }\n function mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n ) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n }\n function validateFunctionComponentInDev(workInProgress, Component) {\n Component &&\n Component.childContextTypes &&\n console.error(\n \"childContextTypes cannot be defined on a function component.\\n %s.childContextTypes = ...\",\n Component.displayName || Component.name || \"Component\"\n );\n \"function\" === typeof Component.getDerivedStateFromProps &&\n ((workInProgress = getComponentNameFromType(Component) || \"Unknown\"),\n didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] ||\n (console.error(\n \"%s: Function components do not support getDerivedStateFromProps.\",\n workInProgress\n ),\n (didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] =\n !0)));\n \"object\" === typeof Component.contextType &&\n null !== Component.contextType &&\n ((Component = getComponentNameFromType(Component) || \"Unknown\"),\n didWarnAboutContextTypeOnFunctionComponent[Component] ||\n (console.error(\n \"%s: Function components do not support contextType.\",\n Component\n ),\n (didWarnAboutContextTypeOnFunctionComponent[Component] = !0)));\n }\n function mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n }\n function getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n ) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n }\n function updateSuspenseComponent(current, workInProgress, renderLanes) {\n var JSCompiler_object_inline_digest_2451;\n var JSCompiler_object_inline_stack_2452 = workInProgress.pendingProps;\n shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128);\n var JSCompiler_object_inline_componentStack_2453 = !1;\n var didSuspend = 0 !== (workInProgress.flags & 128);\n (JSCompiler_object_inline_digest_2451 = didSuspend) ||\n (JSCompiler_object_inline_digest_2451 =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback));\n JSCompiler_object_inline_digest_2451 &&\n ((JSCompiler_object_inline_componentStack_2453 = !0),\n (workInProgress.flags &= -129));\n JSCompiler_object_inline_digest_2451 = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n JSCompiler_object_inline_componentStack_2453\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack(workInProgress);\n if (isHydrating) {\n var JSCompiler_object_inline_message_2450 = nextHydratableInstance;\n var JSCompiler_temp;\n if (!(JSCompiler_temp = !JSCompiler_object_inline_message_2450)) {\n c: {\n var instance = JSCompiler_object_inline_message_2450;\n for (\n JSCompiler_temp = rootOrSingletonContext;\n 8 !== instance.nodeType;\n\n ) {\n if (!JSCompiler_temp) {\n JSCompiler_temp = null;\n break c;\n }\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) {\n JSCompiler_temp = null;\n break c;\n }\n }\n JSCompiler_temp = instance;\n }\n null !== JSCompiler_temp\n ? (warnIfNotHydrating(),\n (workInProgress.memoizedState = {\n dehydrated: JSCompiler_temp,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (instance = createFiber(18, null, null, NoMode)),\n (instance.stateNode = JSCompiler_temp),\n (instance.return = workInProgress),\n (workInProgress.child = instance),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (JSCompiler_temp = !0))\n : (JSCompiler_temp = !1);\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp &&\n (warnNonHydratedInstance(\n workInProgress,\n JSCompiler_object_inline_message_2450\n ),\n throwOnHydrationMismatch(workInProgress));\n }\n JSCompiler_object_inline_message_2450 = workInProgress.memoizedState;\n if (\n null !== JSCompiler_object_inline_message_2450 &&\n ((JSCompiler_object_inline_message_2450 =\n JSCompiler_object_inline_message_2450.dehydrated),\n null !== JSCompiler_object_inline_message_2450)\n )\n return (\n isSuspenseInstanceFallback(JSCompiler_object_inline_message_2450)\n ? (workInProgress.lanes = 32)\n : (workInProgress.lanes = 536870912),\n null\n );\n popSuspenseHandler(workInProgress);\n }\n JSCompiler_object_inline_message_2450 =\n JSCompiler_object_inline_stack_2452.children;\n JSCompiler_object_inline_stack_2452 =\n JSCompiler_object_inline_stack_2452.fallback;\n if (JSCompiler_object_inline_componentStack_2453)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (JSCompiler_object_inline_componentStack_2453 =\n workInProgress.mode),\n (JSCompiler_object_inline_message_2450 =\n mountWorkInProgressOffscreenFiber(\n {\n mode: \"hidden\",\n children: JSCompiler_object_inline_message_2450\n },\n JSCompiler_object_inline_componentStack_2453\n )),\n (JSCompiler_object_inline_stack_2452 = createFiberFromFragment(\n JSCompiler_object_inline_stack_2452,\n JSCompiler_object_inline_componentStack_2453,\n renderLanes,\n null\n )),\n (JSCompiler_object_inline_message_2450.return = workInProgress),\n (JSCompiler_object_inline_stack_2452.return = workInProgress),\n (JSCompiler_object_inline_message_2450.sibling =\n JSCompiler_object_inline_stack_2452),\n (workInProgress.child = JSCompiler_object_inline_message_2450),\n (JSCompiler_object_inline_componentStack_2453 =\n workInProgress.child),\n (JSCompiler_object_inline_componentStack_2453.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (JSCompiler_object_inline_componentStack_2453.childLanes =\n getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_object_inline_digest_2451,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n JSCompiler_object_inline_stack_2452\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(\n workInProgress,\n JSCompiler_object_inline_message_2450\n );\n }\n var prevState = current.memoizedState;\n if (\n null !== prevState &&\n ((JSCompiler_object_inline_message_2450 = prevState.dehydrated),\n null !== JSCompiler_object_inline_message_2450)\n ) {\n if (didSuspend)\n workInProgress.flags & 256\n ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n (workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )))\n : null !== workInProgress.memoizedState\n ? (reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null))\n : (reuseSuspenseHandlerOnStack(workInProgress),\n (JSCompiler_object_inline_componentStack_2453 =\n JSCompiler_object_inline_stack_2452.fallback),\n (JSCompiler_object_inline_message_2450 = workInProgress.mode),\n (JSCompiler_object_inline_stack_2452 =\n mountWorkInProgressOffscreenFiber(\n {\n mode: \"visible\",\n children: JSCompiler_object_inline_stack_2452.children\n },\n JSCompiler_object_inline_message_2450\n )),\n (JSCompiler_object_inline_componentStack_2453 =\n createFiberFromFragment(\n JSCompiler_object_inline_componentStack_2453,\n JSCompiler_object_inline_message_2450,\n renderLanes,\n null\n )),\n (JSCompiler_object_inline_componentStack_2453.flags |= 2),\n (JSCompiler_object_inline_stack_2452.return = workInProgress),\n (JSCompiler_object_inline_componentStack_2453.return =\n workInProgress),\n (JSCompiler_object_inline_stack_2452.sibling =\n JSCompiler_object_inline_componentStack_2453),\n (workInProgress.child = JSCompiler_object_inline_stack_2452),\n reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n ),\n (JSCompiler_object_inline_stack_2452 = workInProgress.child),\n (JSCompiler_object_inline_stack_2452.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (JSCompiler_object_inline_stack_2452.childLanes =\n getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_object_inline_digest_2451,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n (workInProgress =\n JSCompiler_object_inline_componentStack_2453));\n else if (\n (pushPrimaryTreeSuspenseHandler(workInProgress),\n isHydrating &&\n console.error(\n \"We should not be hydrating here. This is a bug in React. Please file a bug.\"\n ),\n isSuspenseInstanceFallback(JSCompiler_object_inline_message_2450))\n ) {\n JSCompiler_object_inline_digest_2451 =\n JSCompiler_object_inline_message_2450.nextSibling &&\n JSCompiler_object_inline_message_2450.nextSibling.dataset;\n if (JSCompiler_object_inline_digest_2451) {\n JSCompiler_temp = JSCompiler_object_inline_digest_2451.dgst;\n var message = JSCompiler_object_inline_digest_2451.msg;\n instance = JSCompiler_object_inline_digest_2451.stck;\n var componentStack = JSCompiler_object_inline_digest_2451.cstck;\n }\n JSCompiler_object_inline_message_2450 = message;\n JSCompiler_object_inline_digest_2451 = JSCompiler_temp;\n JSCompiler_object_inline_stack_2452 = instance;\n JSCompiler_temp = JSCompiler_object_inline_componentStack_2453 =\n componentStack;\n JSCompiler_object_inline_componentStack_2453 =\n JSCompiler_object_inline_message_2450\n ? Error(JSCompiler_object_inline_message_2450)\n : Error(\n \"The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering.\"\n );\n JSCompiler_object_inline_componentStack_2453.stack =\n JSCompiler_object_inline_stack_2452 || \"\";\n JSCompiler_object_inline_componentStack_2453.digest =\n JSCompiler_object_inline_digest_2451;\n JSCompiler_object_inline_digest_2451 =\n void 0 === JSCompiler_temp ? null : JSCompiler_temp;\n JSCompiler_object_inline_stack_2452 = {\n value: JSCompiler_object_inline_componentStack_2453,\n source: null,\n stack: JSCompiler_object_inline_digest_2451\n };\n \"string\" === typeof JSCompiler_object_inline_digest_2451 &&\n CapturedStacks.set(\n JSCompiler_object_inline_componentStack_2453,\n JSCompiler_object_inline_stack_2452\n );\n queueHydrationError(JSCompiler_object_inline_stack_2452);\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (JSCompiler_object_inline_digest_2451 =\n 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || JSCompiler_object_inline_digest_2451)\n ) {\n JSCompiler_object_inline_digest_2451 = workInProgressRoot;\n if (\n null !== JSCompiler_object_inline_digest_2451 &&\n ((JSCompiler_object_inline_stack_2452 = renderLanes & -renderLanes),\n (JSCompiler_object_inline_stack_2452 =\n 0 !== (JSCompiler_object_inline_stack_2452 & 42)\n ? 1\n : getBumpedLaneForHydrationByLane(\n JSCompiler_object_inline_stack_2452\n )),\n (JSCompiler_object_inline_stack_2452 =\n 0 !==\n (JSCompiler_object_inline_stack_2452 &\n (JSCompiler_object_inline_digest_2451.suspendedLanes |\n renderLanes))\n ? 0\n : JSCompiler_object_inline_stack_2452),\n 0 !== JSCompiler_object_inline_stack_2452 &&\n JSCompiler_object_inline_stack_2452 !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = JSCompiler_object_inline_stack_2452),\n enqueueConcurrentRenderForLane(\n current,\n JSCompiler_object_inline_stack_2452\n ),\n scheduleUpdateOnFiber(\n JSCompiler_object_inline_digest_2451,\n current,\n JSCompiler_object_inline_stack_2452\n ),\n SelectiveHydrationException)\n );\n JSCompiler_object_inline_message_2450.data ===\n SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible();\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n JSCompiler_object_inline_message_2450.data ===\n SUSPENSE_PENDING_START_DATA\n ? ((workInProgress.flags |= 192),\n (workInProgress.child = current.child),\n (workInProgress = null))\n : ((current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(\n JSCompiler_object_inline_message_2450.nextSibling\n )),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (didSuspendOrErrorDEV = !1),\n (hydrationDiffRootDEV = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n (warnIfNotHydrating(),\n (idStack[idStackIndex++] = treeContextId),\n (idStack[idStackIndex++] = treeContextOverflow),\n (idStack[idStackIndex++] = treeContextProvider),\n (treeContextId = current.id),\n (treeContextOverflow = current.overflow),\n (treeContextProvider = workInProgress)),\n (workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n JSCompiler_object_inline_stack_2452.children\n )),\n (workInProgress.flags |= 4096));\n return workInProgress;\n }\n if (JSCompiler_object_inline_componentStack_2453)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (JSCompiler_object_inline_componentStack_2453 =\n JSCompiler_object_inline_stack_2452.fallback),\n (JSCompiler_object_inline_message_2450 = workInProgress.mode),\n (JSCompiler_temp = current.child),\n (instance = JSCompiler_temp.sibling),\n (JSCompiler_object_inline_stack_2452 = createWorkInProgress(\n JSCompiler_temp,\n {\n mode: \"hidden\",\n children: JSCompiler_object_inline_stack_2452.children\n }\n )),\n (JSCompiler_object_inline_stack_2452.subtreeFlags =\n JSCompiler_temp.subtreeFlags & 65011712),\n null !== instance\n ? (JSCompiler_object_inline_componentStack_2453 =\n createWorkInProgress(\n instance,\n JSCompiler_object_inline_componentStack_2453\n ))\n : ((JSCompiler_object_inline_componentStack_2453 =\n createFiberFromFragment(\n JSCompiler_object_inline_componentStack_2453,\n JSCompiler_object_inline_message_2450,\n renderLanes,\n null\n )),\n (JSCompiler_object_inline_componentStack_2453.flags |= 2)),\n (JSCompiler_object_inline_componentStack_2453.return =\n workInProgress),\n (JSCompiler_object_inline_stack_2452.return = workInProgress),\n (JSCompiler_object_inline_stack_2452.sibling =\n JSCompiler_object_inline_componentStack_2453),\n (workInProgress.child = JSCompiler_object_inline_stack_2452),\n (JSCompiler_object_inline_stack_2452 =\n JSCompiler_object_inline_componentStack_2453),\n (JSCompiler_object_inline_componentStack_2453 = workInProgress.child),\n (JSCompiler_object_inline_message_2450 = current.child.memoizedState),\n null === JSCompiler_object_inline_message_2450\n ? (JSCompiler_object_inline_message_2450 =\n mountSuspenseOffscreenState(renderLanes))\n : ((JSCompiler_temp =\n JSCompiler_object_inline_message_2450.cachePool),\n null !== JSCompiler_temp\n ? ((instance = CacheContext._currentValue),\n (JSCompiler_temp =\n JSCompiler_temp.parent !== instance\n ? { parent: instance, pool: instance }\n : JSCompiler_temp))\n : (JSCompiler_temp = getSuspendedCache()),\n (JSCompiler_object_inline_message_2450 = {\n baseLanes:\n JSCompiler_object_inline_message_2450.baseLanes | renderLanes,\n cachePool: JSCompiler_temp\n })),\n (JSCompiler_object_inline_componentStack_2453.memoizedState =\n JSCompiler_object_inline_message_2450),\n (JSCompiler_object_inline_componentStack_2453.childLanes =\n getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_object_inline_digest_2451,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n JSCompiler_object_inline_stack_2452\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: JSCompiler_object_inline_stack_2452.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_object_inline_digest_2451 = workInProgress.deletions),\n null === JSCompiler_object_inline_digest_2451\n ? ((workInProgress.deletions = [current]),\n (workInProgress.flags |= 16))\n : JSCompiler_object_inline_digest_2451.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n }\n function mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n }\n function mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n offscreenProps = createFiber(22, offscreenProps, null, mode);\n offscreenProps.lanes = 0;\n offscreenProps.stateNode = {\n _visibility: OffscreenVisible,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n };\n return offscreenProps;\n }\n function retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n }\n function scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n fiber.return,\n renderLanes,\n propagationRoot\n );\n }\n function validateSuspenseListNestedChild(childSlot, index) {\n var isAnArray = isArrayImpl(childSlot);\n childSlot = !isAnArray && \"function\" === typeof getIteratorFn(childSlot);\n return isAnArray || childSlot\n ? ((isAnArray = isAnArray ? \"array\" : \"iterable\"),\n console.error(\n \"A nested %s was passed to row #%s in <SuspenseList />. Wrap it in an additional SuspenseList to configure its revealOrder: <SuspenseList revealOrder=...> ... <SuspenseList revealOrder=...>{%s}</SuspenseList> ... </SuspenseList>\",\n isAnArray,\n index,\n isAnArray\n ),\n !1)\n : !0;\n }\n function initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode\n ) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode));\n }\n function updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n nextProps = nextProps.children;\n if (\n void 0 !== revealOrder &&\n \"forwards\" !== revealOrder &&\n \"backwards\" !== revealOrder &&\n \"together\" !== revealOrder &&\n !didWarnAboutRevealOrder[revealOrder]\n )\n if (\n ((didWarnAboutRevealOrder[revealOrder] = !0),\n \"string\" === typeof revealOrder)\n )\n switch (revealOrder.toLowerCase()) {\n case \"together\":\n case \"forwards\":\n case \"backwards\":\n console.error(\n '\"%s\" is not a valid value for revealOrder on <SuspenseList />. Use lowercase \"%s\" instead.',\n revealOrder,\n revealOrder.toLowerCase()\n );\n break;\n case \"forward\":\n case \"backward\":\n console.error(\n '\"%s\" is not a valid value for revealOrder on <SuspenseList />. React uses the -s suffix in the spelling. Use \"%ss\" instead.',\n revealOrder,\n revealOrder.toLowerCase()\n );\n break;\n default:\n console.error(\n '\"%s\" is not a supported revealOrder on <SuspenseList />. Did you mean \"together\", \"forwards\" or \"backwards\"?',\n revealOrder\n );\n }\n else\n console.error(\n '%s is not a supported value for revealOrder on <SuspenseList />. Did you mean \"together\", \"forwards\" or \"backwards\"?',\n revealOrder\n );\n void 0 === tailMode ||\n didWarnAboutTailOptions[tailMode] ||\n (\"collapsed\" !== tailMode && \"hidden\" !== tailMode\n ? ((didWarnAboutTailOptions[tailMode] = !0),\n console.error(\n '\"%s\" is not a supported value for tail on <SuspenseList />. Did you mean \"collapsed\" or \"hidden\"?',\n tailMode\n ))\n : \"forwards\" !== revealOrder &&\n \"backwards\" !== revealOrder &&\n ((didWarnAboutTailOptions[tailMode] = !0),\n console.error(\n '<SuspenseList tail=\"%s\" /> is only valid if revealOrder is \"forwards\" or \"backwards\". Did you mean to specify revealOrder=\"forwards\"?',\n tailMode\n )));\n a: if (\n (\"forwards\" === revealOrder || \"backwards\" === revealOrder) &&\n void 0 !== nextProps &&\n null !== nextProps &&\n !1 !== nextProps\n )\n if (isArrayImpl(nextProps))\n for (var i = 0; i < nextProps.length; i++) {\n if (!validateSuspenseListNestedChild(nextProps[i], i)) break a;\n }\n else if (((i = getIteratorFn(nextProps)), \"function\" === typeof i)) {\n if ((i = i.call(nextProps)))\n for (var step = i.next(), _i = 0; !step.done; step = i.next()) {\n if (!validateSuspenseListNestedChild(step.value, _i)) break a;\n _i++;\n }\n } else\n console.error(\n 'A single row was passed to a <SuspenseList revealOrder=\"%s\" />. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?',\n revealOrder\n );\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n nextProps = suspenseStackCursor.current;\n if (0 !== (nextProps & ForceSuspenseFallback))\n (nextProps =\n (nextProps & SubtreeSuspenseContextMask) | ForceSuspenseFallback),\n (workInProgress.flags |= 128);\n else {\n if (null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(\n current,\n renderLanes,\n workInProgress\n );\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n nextProps &= SubtreeSuspenseContextMask;\n }\n push(suspenseStackCursor, nextProps, workInProgress);\n switch (revealOrder) {\n case \"forwards\":\n renderLanes = workInProgress.child;\n for (revealOrder = null; null !== renderLanes; )\n (current = renderLanes.alternate),\n null !== current &&\n null === findFirstSuspended(current) &&\n (revealOrder = renderLanes),\n (renderLanes = renderLanes.sibling);\n renderLanes = revealOrder;\n null === renderLanes\n ? ((revealOrder = workInProgress.child),\n (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling),\n (renderLanes.sibling = null));\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode\n );\n break;\n case \"backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode\n );\n break;\n case \"together\":\n initSuspenseListRenderState(workInProgress, !1, null, null, void 0);\n break;\n default:\n workInProgress.memoizedState = null;\n }\n return workInProgress.child;\n }\n function bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n profilerStartTime = -1;\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(\"Resuming work not yet implemented.\");\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n }\n function checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n }\n function attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n ) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n pushProvider(\n workInProgress,\n CacheContext,\n current.memoizedState.cache\n );\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 12:\n 0 !== (renderLanes & workInProgress.childLanes) &&\n (workInProgress.flags |= 4);\n workInProgress.flags |= 2048;\n var stateNode = workInProgress.stateNode;\n stateNode.effectDuration = -0;\n stateNode.passiveEffectDuration = -0;\n break;\n case 13:\n stateNode = workInProgress.memoizedState;\n if (null !== stateNode) {\n if (null !== stateNode.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n if (0 !== (renderLanes & workInProgress.child.childLanes))\n return updateSuspenseComponent(\n current,\n workInProgress,\n renderLanes\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n var didSuspendBefore = 0 !== (current.flags & 128);\n stateNode = 0 !== (renderLanes & workInProgress.childLanes);\n stateNode ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (stateNode = 0 !== (renderLanes & workInProgress.childLanes)));\n if (didSuspendBefore) {\n if (stateNode)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n didSuspendBefore = workInProgress.memoizedState;\n null !== didSuspendBefore &&\n ((didSuspendBefore.rendering = null),\n (didSuspendBefore.tail = null),\n (didSuspendBefore.lastEffect = null));\n push(\n suspenseStackCursor,\n suspenseStackCursor.current,\n workInProgress\n );\n if (stateNode) break;\n else return null;\n case 22:\n case 23:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(current, workInProgress, renderLanes)\n );\n case 24:\n pushProvider(\n workInProgress,\n CacheContext,\n current.memoizedState.cache\n );\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n function beginWork(current, workInProgress, renderLanes) {\n if (workInProgress._debugNeedsRemount && null !== current) {\n renderLanes = createFiberFromTypeAndProps(\n workInProgress.type,\n workInProgress.key,\n workInProgress.pendingProps,\n workInProgress._debugOwner || null,\n workInProgress.mode,\n workInProgress.lanes\n );\n renderLanes._debugStack = workInProgress._debugStack;\n renderLanes._debugTask = workInProgress._debugTask;\n var returnFiber = workInProgress.return;\n if (null === returnFiber) throw Error(\"Cannot swap the root fiber.\");\n current.alternate = null;\n workInProgress.alternate = null;\n renderLanes.index = workInProgress.index;\n renderLanes.sibling = workInProgress.sibling;\n renderLanes.return = workInProgress.return;\n renderLanes.ref = workInProgress.ref;\n renderLanes._debugInfo = workInProgress._debugInfo;\n if (workInProgress === returnFiber.child)\n returnFiber.child = renderLanes;\n else {\n var prevSibling = returnFiber.child;\n if (null === prevSibling)\n throw Error(\"Expected parent to have a child.\");\n for (; prevSibling.sibling !== workInProgress; )\n if (((prevSibling = prevSibling.sibling), null === prevSibling))\n throw Error(\"Expected to find the previous sibling.\");\n prevSibling.sibling = renderLanes;\n }\n workInProgress = returnFiber.deletions;\n null === workInProgress\n ? ((returnFiber.deletions = [current]), (returnFiber.flags |= 16))\n : workInProgress.push(current);\n renderLanes.flags |= 2;\n return renderLanes;\n }\n if (null !== current)\n if (\n current.memoizedProps !== workInProgress.pendingProps ||\n workInProgress.type !== current.type\n )\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else {\n didReceiveUpdate = !1;\n if ((returnFiber = isHydrating))\n warnIfNotHydrating(),\n (returnFiber = 0 !== (workInProgress.flags & 1048576));\n returnFiber &&\n ((returnFiber = workInProgress.index),\n warnIfNotHydrating(),\n pushTreeId(workInProgress, treeForkCount, returnFiber));\n }\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: if (\n ((returnFiber = workInProgress.pendingProps),\n (current = callLazyInitInDEV(workInProgress.elementType)),\n (workInProgress.type = current),\n \"function\" === typeof current)\n )\n shouldConstruct(current)\n ? ((returnFiber = resolveClassComponentProps(\n current,\n returnFiber\n )),\n (workInProgress.tag = 1),\n (workInProgress.type = current =\n resolveFunctionForHotReloading(current)),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n validateFunctionComponentInDev(workInProgress, current),\n (workInProgress.type = current =\n resolveFunctionForHotReloading(current)),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current)\n if (\n ((prevSibling = current.$$typeof),\n prevSibling === REACT_FORWARD_REF_TYPE)\n ) {\n workInProgress.tag = 11;\n workInProgress.type = current =\n resolveForwardRefForHotReloading(current);\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n );\n break a;\n } else if (prevSibling === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n );\n break a;\n }\n workInProgress = \"\";\n null !== current &&\n \"object\" === typeof current &&\n current.$$typeof === REACT_LAZY_TYPE &&\n (workInProgress =\n \" Did you wrap a component in React.lazy() more than once?\");\n current = getComponentNameFromType(current) || current;\n throw Error(\n \"Element type is invalid. Received a promise that resolves to: \" +\n current +\n \". Lazy element type must resolve to a class or function.\" +\n workInProgress\n );\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (returnFiber = workInProgress.type),\n (prevSibling = resolveClassComponentProps(\n returnFiber,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n returnFiber,\n prevSibling,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current)\n throw Error(\n \"Should have a current fiber. This is a bug in React.\"\n );\n returnFiber = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n prevSibling = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, returnFiber, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n returnFiber = nextState.cache;\n pushProvider(workInProgress, CacheContext, returnFiber);\n returnFiber !== prevState.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n returnFiber = nextState.element;\n if (prevState.isDehydrated)\n if (\n ((prevState = {\n element: returnFiber,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevState),\n (workInProgress.memoizedState = prevState),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n );\n break a;\n } else if (returnFiber !== prevSibling) {\n prevSibling = createCapturedValueAtFiber(\n Error(\n \"This root received an early update, before anything was able hydrate. Switched the entire root to client rendering.\"\n ),\n workInProgress\n );\n queueHydrationError(prevSibling);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n );\n break a;\n } else {\n current = workInProgress.stateNode.containerInfo;\n switch (current.nodeType) {\n case 9:\n current = current.body;\n break;\n default:\n current =\n \"HTML\" === current.nodeName\n ? current.ownerDocument.body\n : current;\n }\n nextHydratableInstance = getNextHydratable(current.firstChild);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n didSuspendOrErrorDEV = !1;\n hydrationDiffRootDEV = null;\n rootOrSingletonContext = !0;\n current = mountChildFibers(\n workInProgress,\n null,\n returnFiber,\n renderLanes\n );\n for (workInProgress.child = current; current; )\n (current.flags = (current.flags & -3) | 4096),\n (current = current.sibling);\n }\n else {\n resetHydrationState();\n if (returnFiber === prevSibling) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n );\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (current = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = current)\n : isHydrating ||\n ((current = workInProgress.type),\n (renderLanes = workInProgress.pendingProps),\n (returnFiber = requiredContext(\n rootInstanceStackCursor.current\n )),\n (returnFiber =\n getOwnerDocumentFromRootContainer(\n returnFiber\n ).createElement(current)),\n (returnFiber[internalInstanceKey] = workInProgress),\n (returnFiber[internalPropsKey] = renderLanes),\n setInitialProperties(returnFiber, current, renderLanes),\n markNodeAsHoistable(returnFiber),\n (workInProgress.stateNode = returnFiber))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((returnFiber = requiredContext(rootInstanceStackCursor.current)),\n (prevSibling = getHostContext()),\n (returnFiber = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n returnFiber,\n prevSibling,\n !1\n )),\n didSuspendOrErrorDEV ||\n ((prevSibling = diffHydratedProperties(\n returnFiber,\n workInProgress.type,\n workInProgress.pendingProps,\n prevSibling\n )),\n null !== prevSibling &&\n (buildHydrationDiffNode(workInProgress, 0).serverProps =\n prevSibling)),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n (prevSibling = nextHydratableInstance),\n isSingletonScope(workInProgress.type)\n ? ((previousHydratableOnEnteringScopedSingleton = prevSibling),\n (nextHydratableInstance = getNextHydratable(\n returnFiber.firstChild\n )))\n : (nextHydratableInstance = prevSibling)),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n markRef(current, workInProgress),\n null === current && (workInProgress.flags |= 4194304),\n workInProgress.child\n );\n case 5:\n return (\n null === current &&\n isHydrating &&\n ((prevState = getHostContext()),\n (returnFiber = validateDOMNesting(\n workInProgress.type,\n prevState.ancestorInfo\n )),\n (prevSibling = nextHydratableInstance),\n (nextState = !prevSibling) ||\n ((nextState = canHydrateInstance(\n prevSibling,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== nextState\n ? ((workInProgress.stateNode = nextState),\n didSuspendOrErrorDEV ||\n ((prevState = diffHydratedProperties(\n nextState,\n workInProgress.type,\n workInProgress.pendingProps,\n prevState\n )),\n null !== prevState &&\n (buildHydrationDiffNode(workInProgress, 0).serverProps =\n prevState)),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(\n nextState.firstChild\n )),\n (rootOrSingletonContext = !1),\n (prevState = !0))\n : (prevState = !1),\n (nextState = !prevState)),\n nextState &&\n (returnFiber &&\n warnNonHydratedInstance(workInProgress, prevSibling),\n throwOnHydrationMismatch(workInProgress))),\n pushHostContext(workInProgress),\n (prevSibling = workInProgress.type),\n (prevState = workInProgress.pendingProps),\n (nextState = null !== current ? current.memoizedProps : null),\n (returnFiber = prevState.children),\n shouldSetTextContent(prevSibling, prevState)\n ? (returnFiber = null)\n : null !== nextState &&\n shouldSetTextContent(prevSibling, nextState) &&\n (workInProgress.flags |= 32),\n null !== workInProgress.memoizedState &&\n ((prevSibling = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = prevSibling)),\n markRef(current, workInProgress),\n reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n ),\n workInProgress.child\n );\n case 6:\n return (\n null === current &&\n isHydrating &&\n ((current = workInProgress.pendingProps),\n (renderLanes = getHostContext()),\n (returnFiber = renderLanes.ancestorInfo.current),\n (current =\n null != returnFiber\n ? validateTextNesting(\n current,\n returnFiber.tag,\n renderLanes.ancestorInfo.implicitRootScope\n )\n : !0),\n (renderLanes = nextHydratableInstance),\n (returnFiber = !renderLanes) ||\n ((returnFiber = canHydrateTextInstance(\n renderLanes,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== returnFiber\n ? ((workInProgress.stateNode = returnFiber),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (returnFiber = !0))\n : (returnFiber = !1),\n (returnFiber = !returnFiber)),\n returnFiber &&\n (current &&\n warnNonHydratedInstance(workInProgress, renderLanes),\n throwOnHydrationMismatch(workInProgress))),\n null\n );\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (returnFiber = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n returnFiber,\n renderLanes\n ))\n : reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n ),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps,\n renderLanes\n ),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n (workInProgress.flags |= 4),\n (workInProgress.flags |= 2048),\n (returnFiber = workInProgress.stateNode),\n (returnFiber.effectDuration = -0),\n (returnFiber.passiveEffectDuration = -0),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return (\n (returnFiber = workInProgress.type),\n (prevSibling = workInProgress.pendingProps),\n (prevState = prevSibling.value),\n \"value\" in prevSibling ||\n hasWarnedAboutUsingNoValuePropOnContextProvider ||\n ((hasWarnedAboutUsingNoValuePropOnContextProvider = !0),\n console.error(\n \"The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?\"\n )),\n pushProvider(workInProgress, returnFiber, prevState),\n reconcileChildren(\n current,\n workInProgress,\n prevSibling.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 9:\n return (\n (prevSibling = workInProgress.type._context),\n (returnFiber = workInProgress.pendingProps.children),\n \"function\" !== typeof returnFiber &&\n console.error(\n \"A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it.\"\n ),\n prepareToReadContext(workInProgress),\n (prevSibling = readContext(prevSibling)),\n markComponentRenderStarted(workInProgress),\n (returnFiber = callComponentInDEV(\n returnFiber,\n prevSibling,\n void 0\n )),\n markComponentRenderStopped(),\n (workInProgress.flags |= 1),\n reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n ),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n case 31:\n return (\n (returnFiber = workInProgress.pendingProps),\n (renderLanes = workInProgress.mode),\n (returnFiber = {\n mode: returnFiber.mode,\n children: returnFiber.children\n }),\n null === current\n ? ((current = mountWorkInProgressOffscreenFiber(\n returnFiber,\n renderLanes\n )),\n (current.ref = workInProgress.ref),\n (workInProgress.child = current),\n (current.return = workInProgress),\n (workInProgress = current))\n : ((current = createWorkInProgress(current.child, returnFiber)),\n (current.ref = workInProgress.ref),\n (workInProgress.child = current),\n (current.return = workInProgress),\n (workInProgress = current)),\n workInProgress\n );\n case 22:\n return updateOffscreenComponent(current, workInProgress, renderLanes);\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (returnFiber = readContext(CacheContext)),\n null === current\n ? ((prevSibling = peekCacheFromPool()),\n null === prevSibling &&\n ((prevSibling = workInProgressRoot),\n (prevState = createCache()),\n (prevSibling.pooledCache = prevState),\n retainCache(prevState),\n null !== prevState &&\n (prevSibling.pooledCacheLanes |= renderLanes),\n (prevSibling = prevState)),\n (workInProgress.memoizedState = {\n parent: returnFiber,\n cache: prevSibling\n }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, prevSibling))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n (prevSibling = current.memoizedState),\n (prevState = workInProgress.memoizedState),\n prevSibling.parent !== returnFiber\n ? ((prevSibling = {\n parent: returnFiber,\n cache: returnFiber\n }),\n (workInProgress.memoizedState = prevSibling),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n prevSibling),\n pushProvider(workInProgress, CacheContext, returnFiber))\n : ((returnFiber = prevState.cache),\n pushProvider(workInProgress, CacheContext, returnFiber),\n returnFiber !== prevSibling.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(\n \"Unknown unit of work tag (\" +\n workInProgress.tag +\n \"). This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n function markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n }\n function preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\n \"stylesheet\" !== resource.type ||\n (resource.state.loading & Inserted) !== NotLoaded\n )\n workInProgress.flags &= -16777217;\n else if (\n ((workInProgress.flags |= 16777216), !preloadResource(resource))\n ) {\n resource = suspenseHandlerStackCursor.current;\n if (\n null !== resource &&\n ((workInProgressRootRenderLanes & 4194048) ===\n workInProgressRootRenderLanes\n ? null !== shellBoundary\n : ((workInProgressRootRenderLanes & 62914560) !==\n workInProgressRootRenderLanes &&\n 0 === (workInProgressRootRenderLanes & 536870912)) ||\n resource !== shellBoundary)\n )\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n workInProgress.flags |= 8192;\n }\n }\n function scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n }\n function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"hidden\":\n hasRenderedATailFallback = renderState.tail;\n for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (lastTailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === lastTailNode\n ? (renderState.tail = null)\n : (lastTailNode.sibling = null);\n break;\n case \"collapsed\":\n lastTailNode = renderState.tail;\n for (var _lastTailNode = null; null !== lastTailNode; )\n null !== lastTailNode.alternate && (_lastTailNode = lastTailNode),\n (lastTailNode = lastTailNode.sibling);\n null === _lastTailNode\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (_lastTailNode.sibling = null);\n }\n }\n function bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n if ((completedWork.mode & ProfileMode) !== NoMode) {\n for (\n var _treeBaseDuration = completedWork.selfBaseDuration,\n _child2 = completedWork.child;\n null !== _child2;\n\n )\n (newChildLanes |= _child2.lanes | _child2.childLanes),\n (subtreeFlags |= _child2.subtreeFlags & 65011712),\n (subtreeFlags |= _child2.flags & 65011712),\n (_treeBaseDuration += _child2.treeBaseDuration),\n (_child2 = _child2.sibling);\n completedWork.treeBaseDuration = _treeBaseDuration;\n } else\n for (\n _treeBaseDuration = completedWork.child;\n null !== _treeBaseDuration;\n\n )\n (newChildLanes |=\n _treeBaseDuration.lanes | _treeBaseDuration.childLanes),\n (subtreeFlags |= _treeBaseDuration.subtreeFlags & 65011712),\n (subtreeFlags |= _treeBaseDuration.flags & 65011712),\n (_treeBaseDuration.return = completedWork),\n (_treeBaseDuration = _treeBaseDuration.sibling);\n else if ((completedWork.mode & ProfileMode) !== NoMode) {\n _treeBaseDuration = completedWork.actualDuration;\n _child2 = completedWork.selfBaseDuration;\n for (var child = completedWork.child; null !== child; )\n (newChildLanes |= child.lanes | child.childLanes),\n (subtreeFlags |= child.subtreeFlags),\n (subtreeFlags |= child.flags),\n (_treeBaseDuration += child.actualDuration),\n (_child2 += child.treeBaseDuration),\n (child = child.sibling);\n completedWork.actualDuration = _treeBaseDuration;\n completedWork.treeBaseDuration = _child2;\n } else\n for (\n _treeBaseDuration = completedWork.child;\n null !== _treeBaseDuration;\n\n )\n (newChildLanes |=\n _treeBaseDuration.lanes | _treeBaseDuration.childLanes),\n (subtreeFlags |= _treeBaseDuration.subtreeFlags),\n (subtreeFlags |= _treeBaseDuration.flags),\n (_treeBaseDuration.return = completedWork),\n (_treeBaseDuration = _treeBaseDuration.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n }\n function completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 31:\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n renderLanes = workInProgress.stateNode;\n newProps = null;\n null !== current && (newProps = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext, workInProgress);\n popHostContainer(workInProgress);\n renderLanes.pendingContext &&\n ((renderLanes.context = renderLanes.pendingContext),\n (renderLanes.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? (emitPendingHydrationWarnings(), markUpdate(workInProgress))\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n upgradeHydrationErrorsToRecoverable());\n bubbleProperties(workInProgress);\n return null;\n case 26:\n return (\n (renderLanes = workInProgress.memoizedState),\n null === current\n ? (markUpdate(workInProgress),\n null !== renderLanes\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(\n workInProgress,\n renderLanes\n ))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217)))\n : renderLanes\n ? renderLanes !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(\n workInProgress,\n renderLanes\n ))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : (current.memoizedProps !== newProps &&\n markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217)),\n null\n );\n case 27:\n popHostContext(workInProgress);\n renderLanes = requiredContext(rootInstanceStackCursor.current);\n var _type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n bubbleProperties(workInProgress);\n return null;\n }\n current = getHostContext();\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(\n _type,\n newProps,\n renderLanes,\n current,\n !0\n )),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n return null;\n case 5:\n popHostContext(workInProgress);\n renderLanes = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n bubbleProperties(workInProgress);\n return null;\n }\n _type = getHostContext();\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, _type);\n else {\n current = requiredContext(rootInstanceStackCursor.current);\n validateDOMNesting(renderLanes, _type.ancestorInfo);\n _type = _type.context;\n current = getOwnerDocumentFromRootContainer(current);\n switch (_type) {\n case HostContextNamespaceSvg:\n current = current.createElementNS(SVG_NAMESPACE, renderLanes);\n break;\n case HostContextNamespaceMath:\n current = current.createElementNS(\n MATH_NAMESPACE,\n renderLanes\n );\n break;\n default:\n switch (renderLanes) {\n case \"svg\":\n current = current.createElementNS(\n SVG_NAMESPACE,\n renderLanes\n );\n break;\n case \"math\":\n current = current.createElementNS(\n MATH_NAMESPACE,\n renderLanes\n );\n break;\n case \"script\":\n current = current.createElement(\"div\");\n current.innerHTML = \"<script>\\x3c/script>\";\n current = current.removeChild(current.firstChild);\n break;\n case \"select\":\n current =\n \"string\" === typeof newProps.is\n ? current.createElement(\"select\", { is: newProps.is })\n : current.createElement(\"select\");\n newProps.multiple\n ? (current.multiple = !0)\n : newProps.size && (current.size = newProps.size);\n break;\n default:\n (current =\n \"string\" === typeof newProps.is\n ? current.createElement(renderLanes, {\n is: newProps.is\n })\n : current.createElement(renderLanes)),\n -1 === renderLanes.indexOf(\"-\") &&\n (renderLanes !== renderLanes.toLowerCase() &&\n console.error(\n \"<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.\",\n renderLanes\n ),\n \"[object HTMLUnknownElement]\" !==\n Object.prototype.toString.call(current) ||\n hasOwnProperty.call(\n warnedUnknownTags,\n renderLanes\n ) ||\n ((warnedUnknownTags[renderLanes] = !0),\n console.error(\n \"The tag <%s> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.\",\n renderLanes\n )));\n }\n }\n current[internalInstanceKey] = workInProgress;\n current[internalPropsKey] = newProps;\n a: for (_type = workInProgress.child; null !== _type; ) {\n if (5 === _type.tag || 6 === _type.tag)\n current.appendChild(_type.stateNode);\n else if (\n 4 !== _type.tag &&\n 27 !== _type.tag &&\n null !== _type.child\n ) {\n _type.child.return = _type;\n _type = _type.child;\n continue;\n }\n if (_type === workInProgress) break a;\n for (; null === _type.sibling; ) {\n if (null === _type.return || _type.return === workInProgress)\n break a;\n _type = _type.return;\n }\n _type.sibling.return = _type.return;\n _type = _type.sibling;\n }\n workInProgress.stateNode = current;\n a: switch (\n (setInitialProperties(current, renderLanes, newProps),\n renderLanes)\n ) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n current = !!newProps.autoFocus;\n break a;\n case \"img\":\n current = !0;\n break a;\n default:\n current = !1;\n }\n current && markUpdate(workInProgress);\n }\n }\n bubbleProperties(workInProgress);\n workInProgress.flags &= -16777217;\n return null;\n case 6:\n if (current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (\n \"string\" !== typeof newProps &&\n null === workInProgress.stateNode\n )\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n current = requiredContext(rootInstanceStackCursor.current);\n renderLanes = getHostContext();\n if (popHydrationState(workInProgress)) {\n current = workInProgress.stateNode;\n renderLanes = workInProgress.memoizedProps;\n _type = !didSuspendOrErrorDEV;\n newProps = null;\n var returnFiber = hydrationParentFiber;\n if (null !== returnFiber)\n switch (returnFiber.tag) {\n case 3:\n _type &&\n ((_type = diffHydratedTextForDevWarnings(\n current,\n renderLanes,\n newProps\n )),\n null !== _type &&\n (buildHydrationDiffNode(workInProgress, 0).serverProps =\n _type));\n break;\n case 27:\n case 5:\n (newProps = returnFiber.memoizedProps),\n _type &&\n ((_type = diffHydratedTextForDevWarnings(\n current,\n renderLanes,\n newProps\n )),\n null !== _type &&\n (buildHydrationDiffNode(\n workInProgress,\n 0\n ).serverProps = _type));\n }\n current[internalInstanceKey] = workInProgress;\n current =\n current.nodeValue === renderLanes ||\n (null !== newProps &&\n !0 === newProps.suppressHydrationWarning) ||\n checkForUnmatchedText(current.nodeValue, renderLanes)\n ? !0\n : !1;\n current || throwOnHydrationMismatch(workInProgress);\n } else\n (_type = renderLanes.ancestorInfo.current),\n null != _type &&\n validateTextNesting(\n newProps,\n _type.tag,\n renderLanes.ancestorInfo.implicitRootScope\n ),\n (current =\n getOwnerDocumentFromRootContainer(current).createTextNode(\n newProps\n )),\n (current[internalInstanceKey] = workInProgress),\n (workInProgress.stateNode = current);\n }\n bubbleProperties(workInProgress);\n return null;\n case 13:\n newProps = workInProgress.memoizedState;\n if (\n null === current ||\n (null !== current.memoizedState &&\n null !== current.memoizedState.dehydrated)\n ) {\n _type = popHydrationState(workInProgress);\n if (null !== newProps && null !== newProps.dehydrated) {\n if (null === current) {\n if (!_type)\n throw Error(\n \"A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.\"\n );\n _type = workInProgress.memoizedState;\n _type = null !== _type ? _type.dehydrated : null;\n if (!_type)\n throw Error(\n \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\"\n );\n _type[internalInstanceKey] = workInProgress;\n bubbleProperties(workInProgress);\n (workInProgress.mode & ProfileMode) !== NoMode &&\n null !== newProps &&\n ((_type = workInProgress.child),\n null !== _type &&\n (workInProgress.treeBaseDuration -=\n _type.treeBaseDuration));\n } else\n emitPendingHydrationWarnings(),\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (workInProgress.memoizedState = null),\n (workInProgress.flags |= 4),\n bubbleProperties(workInProgress),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n null !== newProps &&\n ((_type = workInProgress.child),\n null !== _type &&\n (workInProgress.treeBaseDuration -=\n _type.treeBaseDuration));\n _type = !1;\n } else\n (_type = upgradeHydrationErrorsToRecoverable()),\n null !== current &&\n null !== current.memoizedState &&\n (current.memoizedState.hydrationErrors = _type),\n (_type = !0);\n if (!_type) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n }\n popSuspenseHandler(workInProgress);\n if (0 !== (workInProgress.flags & 128))\n return (\n (workInProgress.lanes = renderLanes),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress\n );\n renderLanes = null !== newProps;\n current = null !== current && null !== current.memoizedState;\n renderLanes &&\n ((newProps = workInProgress.child),\n (_type = null),\n null !== newProps.alternate &&\n null !== newProps.alternate.memoizedState &&\n null !== newProps.alternate.memoizedState.cachePool &&\n (_type = newProps.alternate.memoizedState.cachePool.pool),\n (returnFiber = null),\n null !== newProps.memoizedState &&\n null !== newProps.memoizedState.cachePool &&\n (returnFiber = newProps.memoizedState.cachePool.pool),\n returnFiber !== _type && (newProps.flags |= 2048));\n renderLanes !== current &&\n renderLanes &&\n (workInProgress.child.flags |= 8192);\n scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n bubbleProperties(workInProgress);\n (workInProgress.mode & ProfileMode) !== NoMode &&\n renderLanes &&\n ((current = workInProgress.child),\n null !== current &&\n (workInProgress.treeBaseDuration -= current.treeBaseDuration));\n return null;\n case 4:\n return (\n popHostContainer(workInProgress),\n null === current &&\n listenToAllSupportedEvents(\n workInProgress.stateNode.containerInfo\n ),\n bubbleProperties(workInProgress),\n null\n );\n case 10:\n return (\n popProvider(workInProgress.type, workInProgress),\n bubbleProperties(workInProgress),\n null\n );\n case 19:\n pop(suspenseStackCursor, workInProgress);\n _type = workInProgress.memoizedState;\n if (null === _type) return bubbleProperties(workInProgress), null;\n newProps = 0 !== (workInProgress.flags & 128);\n returnFiber = _type.rendering;\n if (null === returnFiber)\n if (newProps) cutOffTailIfNeeded(_type, !1);\n else {\n if (\n workInProgressRootExitStatus !== RootInProgress ||\n (null !== current && 0 !== (current.flags & 128))\n )\n for (current = workInProgress.child; null !== current; ) {\n returnFiber = findFirstSuspended(current);\n if (null !== returnFiber) {\n workInProgress.flags |= 128;\n cutOffTailIfNeeded(_type, !1);\n current = returnFiber.updateQueue;\n workInProgress.updateQueue = current;\n scheduleRetryEffect(workInProgress, current);\n workInProgress.subtreeFlags = 0;\n current = renderLanes;\n for (\n renderLanes = workInProgress.child;\n null !== renderLanes;\n\n )\n resetWorkInProgress(renderLanes, current),\n (renderLanes = renderLanes.sibling);\n push(\n suspenseStackCursor,\n (suspenseStackCursor.current &\n SubtreeSuspenseContextMask) |\n ForceSuspenseFallback,\n workInProgress\n );\n return workInProgress.child;\n }\n current = current.sibling;\n }\n null !== _type.tail &&\n now$1() > workInProgressRootRenderTargetTime &&\n ((workInProgress.flags |= 128),\n (newProps = !0),\n cutOffTailIfNeeded(_type, !1),\n (workInProgress.lanes = 4194304));\n }\n else {\n if (!newProps)\n if (\n ((current = findFirstSuspended(returnFiber)), null !== current)\n ) {\n if (\n ((workInProgress.flags |= 128),\n (newProps = !0),\n (current = current.updateQueue),\n (workInProgress.updateQueue = current),\n scheduleRetryEffect(workInProgress, current),\n cutOffTailIfNeeded(_type, !0),\n null === _type.tail &&\n \"hidden\" === _type.tailMode &&\n !returnFiber.alternate &&\n !isHydrating)\n )\n return bubbleProperties(workInProgress), null;\n } else\n 2 * now$1() - _type.renderingStartTime >\n workInProgressRootRenderTargetTime &&\n 536870912 !== renderLanes &&\n ((workInProgress.flags |= 128),\n (newProps = !0),\n cutOffTailIfNeeded(_type, !1),\n (workInProgress.lanes = 4194304));\n _type.isBackwards\n ? ((returnFiber.sibling = workInProgress.child),\n (workInProgress.child = returnFiber))\n : ((current = _type.last),\n null !== current\n ? (current.sibling = returnFiber)\n : (workInProgress.child = returnFiber),\n (_type.last = returnFiber));\n }\n if (null !== _type.tail)\n return (\n (current = _type.tail),\n (_type.rendering = current),\n (_type.tail = current.sibling),\n (_type.renderingStartTime = now$1()),\n (current.sibling = null),\n (renderLanes = suspenseStackCursor.current),\n (renderLanes = newProps\n ? (renderLanes & SubtreeSuspenseContextMask) |\n ForceSuspenseFallback\n : renderLanes & SubtreeSuspenseContextMask),\n push(suspenseStackCursor, renderLanes, workInProgress),\n current\n );\n bubbleProperties(workInProgress);\n return null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(workInProgress),\n (newProps = null !== workInProgress.memoizedState),\n null !== current\n ? (null !== current.memoizedState) !== newProps &&\n (workInProgress.flags |= 8192)\n : newProps && (workInProgress.flags |= 8192),\n newProps\n ? 0 !== (renderLanes & 536870912) &&\n 0 === (workInProgress.flags & 128) &&\n (bubbleProperties(workInProgress),\n workInProgress.subtreeFlags & 6 &&\n (workInProgress.flags |= 8192))\n : bubbleProperties(workInProgress),\n (renderLanes = workInProgress.updateQueue),\n null !== renderLanes &&\n scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n (renderLanes = null),\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (renderLanes = current.memoizedState.cachePool.pool),\n (newProps = null),\n null !== workInProgress.memoizedState &&\n null !== workInProgress.memoizedState.cachePool &&\n (newProps = workInProgress.memoizedState.cachePool.pool),\n newProps !== renderLanes && (workInProgress.flags |= 2048),\n null !== current && pop(resumedCache, workInProgress),\n null\n );\n case 24:\n return (\n (renderLanes = null),\n null !== current && (renderLanes = current.memoizedState.cache),\n workInProgress.memoizedState.cache !== renderLanes &&\n (workInProgress.flags |= 2048),\n popProvider(CacheContext, workInProgress),\n bubbleProperties(workInProgress),\n null\n );\n case 25:\n return null;\n case 30:\n return null;\n }\n throw Error(\n \"Unknown unit of work tag (\" +\n workInProgress.tag +\n \"). This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n function unwindWork(current, workInProgress) {\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 1:\n return (\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null\n );\n case 3:\n return (\n popProvider(CacheContext, workInProgress),\n popHostContainer(workInProgress),\n (current = workInProgress.flags),\n 0 !== (current & 65536) && 0 === (current & 128)\n ? ((workInProgress.flags = (current & -65537) | 128),\n workInProgress)\n : null\n );\n case 26:\n case 27:\n case 5:\n return popHostContext(workInProgress), null;\n case 13:\n popSuspenseHandler(workInProgress);\n current = workInProgress.memoizedState;\n if (null !== current && null !== current.dehydrated) {\n if (null === workInProgress.alternate)\n throw Error(\n \"Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.\"\n );\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null;\n case 19:\n return pop(suspenseStackCursor, workInProgress), null;\n case 4:\n return popHostContainer(workInProgress), null;\n case 10:\n return popProvider(workInProgress.type, workInProgress), null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(workInProgress),\n null !== current && pop(resumedCache, workInProgress),\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null\n );\n case 24:\n return popProvider(CacheContext, workInProgress), null;\n case 25:\n return null;\n default:\n return null;\n }\n }\n function unwindInterruptedWork(current, interruptedWork) {\n popTreeContext(interruptedWork);\n switch (interruptedWork.tag) {\n case 3:\n popProvider(CacheContext, interruptedWork);\n popHostContainer(interruptedWork);\n break;\n case 26:\n case 27:\n case 5:\n popHostContext(interruptedWork);\n break;\n case 4:\n popHostContainer(interruptedWork);\n break;\n case 13:\n popSuspenseHandler(interruptedWork);\n break;\n case 19:\n pop(suspenseStackCursor, interruptedWork);\n break;\n case 10:\n popProvider(interruptedWork.type, interruptedWork);\n break;\n case 22:\n case 23:\n popSuspenseHandler(interruptedWork);\n popHiddenContext(interruptedWork);\n null !== current && pop(resumedCache, interruptedWork);\n break;\n case 24:\n popProvider(CacheContext, interruptedWork);\n }\n }\n function shouldProfile(current) {\n return (current.mode & ProfileMode) !== NoMode;\n }\n function commitHookLayoutEffects(finishedWork, hookFlags) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListMount(hookFlags, finishedWork),\n recordEffectDuration())\n : commitHookEffectListMount(hookFlags, finishedWork);\n }\n function commitHookLayoutUnmountEffects(\n finishedWork,\n nearestMountedAncestor,\n hookFlags\n ) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n ),\n recordEffectDuration())\n : commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n );\n }\n function commitHookEffectListMount(flags, finishedWork) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if (\n (updateQueue.tag & flags) === flags &&\n ((flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted &&\n injectedProfilingHooks.markComponentPassiveEffectMountStarted(\n finishedWork\n )\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted &&\n injectedProfilingHooks.markComponentLayoutEffectMountStarted(\n finishedWork\n ),\n (lastEffect = void 0),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !0),\n (lastEffect = runWithFiberInDEV(\n finishedWork,\n callCreateInDEV,\n updateQueue\n )),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !1),\n (flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped &&\n injectedProfilingHooks.markComponentPassiveEffectMountStopped()\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped &&\n injectedProfilingHooks.markComponentLayoutEffectMountStopped(),\n void 0 !== lastEffect && \"function\" !== typeof lastEffect)\n ) {\n var hookName = void 0;\n hookName =\n 0 !== (updateQueue.tag & Layout)\n ? \"useLayoutEffect\"\n : 0 !== (updateQueue.tag & Insertion)\n ? \"useInsertionEffect\"\n : \"useEffect\";\n var addendum = void 0;\n addendum =\n null === lastEffect\n ? \" You returned null. If your effect does not require clean up, return undefined (or nothing).\"\n : \"function\" === typeof lastEffect.then\n ? \"\\n\\nIt looks like you wrote \" +\n hookName +\n \"(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:\\n\\n\" +\n hookName +\n \"(() => {\\n async function fetchData() {\\n // You can await here\\n const response = await MyAPI.getData(someId);\\n // ...\\n }\\n fetchData();\\n}, [someId]); // Or [] if effect doesn't need props or state\\n\\nLearn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching\"\n : \" You returned: \" + lastEffect;\n runWithFiberInDEV(\n finishedWork,\n function (n, a) {\n console.error(\n \"%s must not return anything besides a function, which is used for clean-up.%s\",\n n,\n a\n );\n },\n hookName,\n addendum\n );\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitHookEffectListUnmount(\n flags,\n finishedWork,\n nearestMountedAncestor\n ) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if ((updateQueue.tag & flags) === flags) {\n var inst = updateQueue.inst,\n destroy = inst.destroy;\n void 0 !== destroy &&\n ((inst.destroy = void 0),\n (flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted &&\n injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(\n finishedWork\n )\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted &&\n injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(\n finishedWork\n ),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !0),\n (lastEffect = finishedWork),\n runWithFiberInDEV(\n lastEffect,\n callDestroyInDEV,\n lastEffect,\n nearestMountedAncestor,\n destroy\n ),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !1),\n (flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped &&\n injectedProfilingHooks.markComponentPassiveEffectUnmountStopped()\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped &&\n injectedProfilingHooks.markComponentLayoutEffectUnmountStopped());\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitHookPassiveMountEffects(finishedWork, hookFlags) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListMount(hookFlags, finishedWork),\n recordEffectDuration())\n : commitHookEffectListMount(hookFlags, finishedWork);\n }\n function commitHookPassiveUnmountEffects(\n finishedWork,\n nearestMountedAncestor,\n hookFlags\n ) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n ),\n recordEffectDuration())\n : commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n );\n }\n function commitClassCallbacks(finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n if (null !== updateQueue) {\n var instance = finishedWork.stateNode;\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (instance.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n instance.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ));\n try {\n runWithFiberInDEV(\n finishedWork,\n commitCallbacks,\n updateQueue,\n instance\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n function callGetSnapshotBeforeUpdates(instance, prevProps, prevState) {\n return instance.getSnapshotBeforeUpdate(prevProps, prevState);\n }\n function commitClassSnapshot(finishedWork, current) {\n var prevProps = current.memoizedProps,\n prevState = current.memoizedState;\n current = finishedWork.stateNode;\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (current.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n current.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ));\n try {\n var resolvedPrevProps = resolveClassComponentProps(\n finishedWork.type,\n prevProps,\n finishedWork.elementType === finishedWork.type\n );\n var snapshot = runWithFiberInDEV(\n finishedWork,\n callGetSnapshotBeforeUpdates,\n current,\n resolvedPrevProps,\n prevState\n );\n prevProps = didWarnAboutUndefinedSnapshotBeforeUpdate;\n void 0 !== snapshot ||\n prevProps.has(finishedWork.type) ||\n (prevProps.add(finishedWork.type),\n runWithFiberInDEV(finishedWork, function () {\n console.error(\n \"%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.\",\n getComponentNameFromFiber(finishedWork)\n );\n }));\n current.__reactInternalSnapshotBeforeUpdate = snapshot;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function safelyCallComponentWillUnmount(\n current,\n nearestMountedAncestor,\n instance\n ) {\n instance.props = resolveClassComponentProps(\n current.type,\n current.memoizedProps\n );\n instance.state = current.memoizedState;\n shouldProfile(current)\n ? (startEffectTimer(),\n runWithFiberInDEV(\n current,\n callComponentWillUnmountInDEV,\n current,\n nearestMountedAncestor,\n instance\n ),\n recordEffectDuration())\n : runWithFiberInDEV(\n current,\n callComponentWillUnmountInDEV,\n current,\n nearestMountedAncestor,\n instance\n );\n }\n function commitAttachRef(finishedWork) {\n var ref = finishedWork.ref;\n if (null !== ref) {\n switch (finishedWork.tag) {\n case 26:\n case 27:\n case 5:\n var instanceToUse = finishedWork.stateNode;\n break;\n case 30:\n instanceToUse = finishedWork.stateNode;\n break;\n default:\n instanceToUse = finishedWork.stateNode;\n }\n if (\"function\" === typeof ref)\n if (shouldProfile(finishedWork))\n try {\n startEffectTimer(),\n (finishedWork.refCleanup = ref(instanceToUse));\n } finally {\n recordEffectDuration();\n }\n else finishedWork.refCleanup = ref(instanceToUse);\n else\n \"string\" === typeof ref\n ? console.error(\"String refs are no longer supported.\")\n : ref.hasOwnProperty(\"current\") ||\n console.error(\n \"Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().\",\n getComponentNameFromFiber(finishedWork)\n ),\n (ref.current = instanceToUse);\n }\n }\n function safelyAttachRef(current, nearestMountedAncestor) {\n try {\n runWithFiberInDEV(current, commitAttachRef, current);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n function safelyDetachRef(current, nearestMountedAncestor) {\n var ref = current.ref,\n refCleanup = current.refCleanup;\n if (null !== ref)\n if (\"function\" === typeof refCleanup)\n try {\n if (shouldProfile(current))\n try {\n startEffectTimer(), runWithFiberInDEV(current, refCleanup);\n } finally {\n recordEffectDuration(current);\n }\n else runWithFiberInDEV(current, refCleanup);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n } finally {\n (current.refCleanup = null),\n (current = current.alternate),\n null != current && (current.refCleanup = null);\n }\n else if (\"function\" === typeof ref)\n try {\n if (shouldProfile(current))\n try {\n startEffectTimer(), runWithFiberInDEV(current, ref, null);\n } finally {\n recordEffectDuration(current);\n }\n else runWithFiberInDEV(current, ref, null);\n } catch (error$7) {\n captureCommitPhaseError(current, nearestMountedAncestor, error$7);\n }\n else ref.current = null;\n }\n function commitProfiler(\n finishedWork,\n current,\n commitStartTime,\n effectDuration\n ) {\n var _finishedWork$memoize = finishedWork.memoizedProps,\n id = _finishedWork$memoize.id,\n onCommit = _finishedWork$memoize.onCommit;\n _finishedWork$memoize = _finishedWork$memoize.onRender;\n current = null === current ? \"mount\" : \"update\";\n currentUpdateIsNested && (current = \"nested-update\");\n \"function\" === typeof _finishedWork$memoize &&\n _finishedWork$memoize(\n id,\n current,\n finishedWork.actualDuration,\n finishedWork.treeBaseDuration,\n finishedWork.actualStartTime,\n commitStartTime\n );\n \"function\" === typeof onCommit &&\n onCommit(\n finishedWork.memoizedProps.id,\n current,\n effectDuration,\n commitStartTime\n );\n }\n function commitProfilerPostCommitImpl(\n finishedWork,\n current,\n commitStartTime,\n passiveEffectDuration\n ) {\n var _finishedWork$memoize2 = finishedWork.memoizedProps;\n finishedWork = _finishedWork$memoize2.id;\n _finishedWork$memoize2 = _finishedWork$memoize2.onPostCommit;\n current = null === current ? \"mount\" : \"update\";\n currentUpdateIsNested && (current = \"nested-update\");\n \"function\" === typeof _finishedWork$memoize2 &&\n _finishedWork$memoize2(\n finishedWork,\n current,\n passiveEffectDuration,\n commitStartTime\n );\n }\n function commitHostMount(finishedWork) {\n var type = finishedWork.type,\n props = finishedWork.memoizedProps,\n instance = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitMount,\n instance,\n type,\n props,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitHostUpdate(finishedWork, newProps, oldProps) {\n try {\n runWithFiberInDEV(\n finishedWork,\n commitUpdate,\n finishedWork.stateNode,\n finishedWork.type,\n oldProps,\n newProps,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function isHostParent(fiber) {\n return (\n 5 === fiber.tag ||\n 3 === fiber.tag ||\n 26 === fiber.tag ||\n (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n 4 === fiber.tag\n );\n }\n function getHostSibling(fiber) {\n a: for (;;) {\n for (; null === fiber.sibling; ) {\n if (null === fiber.return || isHostParent(fiber.return)) return null;\n fiber = fiber.return;\n }\n fiber.sibling.return = fiber.return;\n for (\n fiber = fiber.sibling;\n 5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n ) {\n if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n if (fiber.flags & 2) continue a;\n if (null === fiber.child || 4 === fiber.tag) continue a;\n else (fiber.child.return = fiber), (fiber = fiber.child);\n }\n if (!(fiber.flags & 2)) return fiber.stateNode;\n }\n }\n function insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before\n ? (9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent\n ).insertBefore(node, before)\n : ((before =\n 9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent),\n before.appendChild(node),\n (parent = parent._reactRootContainer),\n (null !== parent && void 0 !== parent) ||\n null !== before.onclick ||\n (before.onclick = noop$1));\n else if (\n 4 !== tag &&\n (27 === tag &&\n isSingletonScope(node.type) &&\n ((parent = node.stateNode), (before = null)),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n (node = node.sibling);\n }\n function insertOrAppendPlacementNode(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before ? parent.insertBefore(node, before) : parent.appendChild(node);\n else if (\n 4 !== tag &&\n (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNode(node, before, parent),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNode(node, before, parent),\n (node = node.sibling);\n }\n function commitPlacement(finishedWork) {\n for (\n var hostParentFiber, parentFiber = finishedWork.return;\n null !== parentFiber;\n\n ) {\n if (isHostParent(parentFiber)) {\n hostParentFiber = parentFiber;\n break;\n }\n parentFiber = parentFiber.return;\n }\n if (null == hostParentFiber)\n throw Error(\n \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\"\n );\n switch (hostParentFiber.tag) {\n case 27:\n hostParentFiber = hostParentFiber.stateNode;\n parentFiber = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(\n finishedWork,\n parentFiber,\n hostParentFiber\n );\n break;\n case 5:\n parentFiber = hostParentFiber.stateNode;\n hostParentFiber.flags & 32 &&\n (resetTextContent(parentFiber), (hostParentFiber.flags &= -33));\n hostParentFiber = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(\n finishedWork,\n hostParentFiber,\n parentFiber\n );\n break;\n case 3:\n case 4:\n hostParentFiber = hostParentFiber.stateNode.containerInfo;\n parentFiber = getHostSibling(finishedWork);\n insertOrAppendPlacementNodeIntoContainer(\n finishedWork,\n parentFiber,\n hostParentFiber\n );\n break;\n default:\n throw Error(\n \"Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n }\n function commitHostSingletonAcquisition(finishedWork) {\n var singleton = finishedWork.stateNode,\n props = finishedWork.memoizedProps;\n try {\n runWithFiberInDEV(\n finishedWork,\n acquireSingletonInstance,\n finishedWork.type,\n props,\n singleton,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitBeforeMutationEffects(root, firstChild) {\n root = root.containerInfo;\n eventsEnabled = _enabled;\n root = getActiveElementDeep(root);\n if (hasSelectionCapabilities(root)) {\n if (\"selectionStart\" in root)\n var JSCompiler_temp = {\n start: root.selectionStart,\n end: root.selectionEnd\n };\n else\n a: {\n JSCompiler_temp =\n ((JSCompiler_temp = root.ownerDocument) &&\n JSCompiler_temp.defaultView) ||\n window;\n var selection =\n JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n if (selection && 0 !== selection.rangeCount) {\n JSCompiler_temp = selection.anchorNode;\n var anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode;\n selection = selection.focusOffset;\n try {\n JSCompiler_temp.nodeType, focusNode.nodeType;\n } catch (e$2) {\n JSCompiler_temp = null;\n break a;\n }\n var length = 0,\n start = -1,\n end = -1,\n indexWithinAnchor = 0,\n indexWithinFocus = 0,\n node = root,\n parentNode = null;\n b: for (;;) {\n for (var next; ; ) {\n node !== JSCompiler_temp ||\n (0 !== anchorOffset && 3 !== node.nodeType) ||\n (start = length + anchorOffset);\n node !== focusNode ||\n (0 !== selection && 3 !== node.nodeType) ||\n (end = length + selection);\n 3 === node.nodeType && (length += node.nodeValue.length);\n if (null === (next = node.firstChild)) break;\n parentNode = node;\n node = next;\n }\n for (;;) {\n if (node === root) break b;\n parentNode === JSCompiler_temp &&\n ++indexWithinAnchor === anchorOffset &&\n (start = length);\n parentNode === focusNode &&\n ++indexWithinFocus === selection &&\n (end = length);\n if (null !== (next = node.nextSibling)) break;\n node = parentNode;\n parentNode = node.parentNode;\n }\n node = next;\n }\n JSCompiler_temp =\n -1 === start || -1 === end ? null : { start: start, end: end };\n } else JSCompiler_temp = null;\n }\n JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n } else JSCompiler_temp = null;\n selectionInformation = {\n focusedElem: root,\n selectionRange: JSCompiler_temp\n };\n _enabled = !1;\n for (nextEffect = firstChild; null !== nextEffect; )\n if (\n ((firstChild = nextEffect),\n (root = firstChild.child),\n 0 !== (firstChild.subtreeFlags & 1024) && null !== root)\n )\n (root.return = firstChild), (nextEffect = root);\n else\n for (; null !== nextEffect; ) {\n root = firstChild = nextEffect;\n JSCompiler_temp = root.alternate;\n anchorOffset = root.flags;\n switch (root.tag) {\n case 0:\n break;\n case 11:\n case 15:\n break;\n case 1:\n 0 !== (anchorOffset & 1024) &&\n null !== JSCompiler_temp &&\n commitClassSnapshot(root, JSCompiler_temp);\n break;\n case 3:\n if (0 !== (anchorOffset & 1024))\n if (\n ((root = root.stateNode.containerInfo),\n (JSCompiler_temp = root.nodeType),\n 9 === JSCompiler_temp)\n )\n clearContainerSparingly(root);\n else if (1 === JSCompiler_temp)\n switch (root.nodeName) {\n case \"HEAD\":\n case \"HTML\":\n case \"BODY\":\n clearContainerSparingly(root);\n break;\n default:\n root.textContent = \"\";\n }\n break;\n case 5:\n case 26:\n case 27:\n case 6:\n case 4:\n case 17:\n break;\n default:\n if (0 !== (anchorOffset & 1024))\n throw Error(\n \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n root = firstChild.sibling;\n if (null !== root) {\n root.return = firstChild.return;\n nextEffect = root;\n break;\n }\n nextEffect = firstChild.return;\n }\n }\n function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 &&\n commitHookLayoutEffects(finishedWork, Layout | HasEffect);\n break;\n case 1:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (flags & 4)\n if (((finishedRoot = finishedWork.stateNode), null === current))\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (finishedRoot.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n finishedRoot.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n )),\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n runWithFiberInDEV(\n finishedWork,\n callComponentDidMountInDEV,\n finishedWork,\n finishedRoot\n ),\n recordEffectDuration())\n : runWithFiberInDEV(\n finishedWork,\n callComponentDidMountInDEV,\n finishedWork,\n finishedRoot\n );\n else {\n var prevProps = resolveClassComponentProps(\n finishedWork.type,\n current.memoizedProps\n );\n current = current.memoizedState;\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (finishedRoot.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n finishedRoot.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ));\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n runWithFiberInDEV(\n finishedWork,\n callComponentDidUpdateInDEV,\n finishedWork,\n finishedRoot,\n prevProps,\n current,\n finishedRoot.__reactInternalSnapshotBeforeUpdate\n ),\n recordEffectDuration())\n : runWithFiberInDEV(\n finishedWork,\n callComponentDidUpdateInDEV,\n finishedWork,\n finishedRoot,\n prevProps,\n current,\n finishedRoot.__reactInternalSnapshotBeforeUpdate\n );\n }\n flags & 64 && commitClassCallbacks(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 3:\n current = pushNestedEffectDurations();\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (\n flags & 64 &&\n ((flags = finishedWork.updateQueue), null !== flags)\n ) {\n prevProps = null;\n if (null !== finishedWork.child)\n switch (finishedWork.child.tag) {\n case 27:\n case 5:\n prevProps = finishedWork.child.stateNode;\n break;\n case 1:\n prevProps = finishedWork.child.stateNode;\n }\n try {\n runWithFiberInDEV(\n finishedWork,\n commitCallbacks,\n flags,\n prevProps\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n finishedRoot.effectDuration += popNestedEffectDurations(current);\n break;\n case 27:\n null === current &&\n flags & 4 &&\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n null === current && flags & 4 && commitHostMount(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n if (flags & 4) {\n flags = pushNestedEffectDurations();\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n finishedRoot = finishedWork.stateNode;\n finishedRoot.effectDuration += bubbleNestedEffectDurations(flags);\n try {\n runWithFiberInDEV(\n finishedWork,\n commitProfiler,\n finishedWork,\n current,\n commitStartTime,\n finishedRoot.effectDuration\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 &&\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n flags & 64 &&\n ((finishedRoot = finishedWork.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated),\n null !== finishedRoot &&\n ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n null,\n finishedWork\n )),\n registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n break;\n case 22:\n flags =\n null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n if (!flags) {\n current =\n (null !== current && null !== current.memoizedState) ||\n offscreenSubtreeWasHidden;\n prevProps = offscreenSubtreeIsHidden;\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = flags;\n (offscreenSubtreeWasHidden = current) &&\n !prevOffscreenSubtreeWasHidden\n ? recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n 0 !== (finishedWork.subtreeFlags & 8772)\n )\n : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n offscreenSubtreeIsHidden = prevProps;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n }\n break;\n case 30:\n break;\n default:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n }\n }\n function detachFiberAfterEffects(fiber) {\n var alternate = fiber.alternate;\n null !== alternate &&\n ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n fiber.child = null;\n fiber.deletions = null;\n fiber.sibling = null;\n 5 === fiber.tag &&\n ((alternate = fiber.stateNode),\n null !== alternate && detachDeletedInstance(alternate));\n fiber.stateNode = null;\n fiber._debugOwner = null;\n fiber.return = null;\n fiber.dependencies = null;\n fiber.memoizedProps = null;\n fiber.memoizedState = null;\n fiber.pendingProps = null;\n fiber.stateNode = null;\n fiber.updateQueue = null;\n }\n function recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n parent\n ) {\n for (parent = parent.child; null !== parent; )\n commitDeletionEffectsOnFiber(\n finishedRoot,\n nearestMountedAncestor,\n parent\n ),\n (parent = parent.sibling);\n }\n function commitDeletionEffectsOnFiber(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n ) {\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onCommitFiberUnmount\n )\n try {\n injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n switch (deletedFiber.tag) {\n case 26:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n deletedFiber.memoizedState\n ? deletedFiber.memoizedState.count--\n : deletedFiber.stateNode &&\n ((deletedFiber = deletedFiber.stateNode),\n deletedFiber.parentNode.removeChild(deletedFiber));\n break;\n case 27:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n var prevHostParent = hostParent,\n prevHostParentIsContainer = hostParentIsContainer;\n isSingletonScope(deletedFiber.type) &&\n ((hostParent = deletedFiber.stateNode),\n (hostParentIsContainer = !1));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n runWithFiberInDEV(\n deletedFiber,\n releaseSingletonInstance,\n deletedFiber.stateNode\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 5:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n case 6:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = null;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n if (null !== hostParent)\n if (hostParentIsContainer)\n try {\n runWithFiberInDEV(\n deletedFiber,\n removeChildFromContainer,\n hostParent,\n deletedFiber.stateNode\n );\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n else\n try {\n runWithFiberInDEV(\n deletedFiber,\n removeChild,\n hostParent,\n deletedFiber.stateNode\n );\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n break;\n case 18:\n null !== hostParent &&\n (hostParentIsContainer\n ? ((finishedRoot = hostParent),\n clearSuspenseBoundary(\n 9 === finishedRoot.nodeType\n ? finishedRoot.body\n : \"HTML\" === finishedRoot.nodeName\n ? finishedRoot.ownerDocument.body\n : finishedRoot,\n deletedFiber.stateNode\n ),\n retryIfBlockedOn(finishedRoot))\n : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));\n break;\n case 4:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = deletedFiber.stateNode.containerInfo;\n hostParentIsContainer = !0;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 0:\n case 11:\n case 14:\n case 15:\n offscreenSubtreeWasHidden ||\n commitHookEffectListUnmount(\n Insertion,\n deletedFiber,\n nearestMountedAncestor\n );\n offscreenSubtreeWasHidden ||\n commitHookLayoutUnmountEffects(\n deletedFiber,\n nearestMountedAncestor,\n Layout\n );\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 1:\n offscreenSubtreeWasHidden ||\n (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n (prevHostParent = deletedFiber.stateNode),\n \"function\" === typeof prevHostParent.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n deletedFiber,\n nearestMountedAncestor,\n prevHostParent\n ));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 21:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 22:\n offscreenSubtreeWasHidden =\n (prevHostParent = offscreenSubtreeWasHidden) ||\n null !== deletedFiber.memoizedState;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n offscreenSubtreeWasHidden = prevHostParent;\n break;\n default:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n }\n }\n function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n )\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHydratedSuspenseInstance,\n finishedRoot\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function getRetryCache(finishedWork) {\n switch (finishedWork.tag) {\n case 13:\n case 19:\n var retryCache = finishedWork.stateNode;\n null === retryCache &&\n (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n return retryCache;\n case 22:\n return (\n (finishedWork = finishedWork.stateNode),\n (retryCache = finishedWork._retryCache),\n null === retryCache &&\n (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n retryCache\n );\n default:\n throw Error(\n \"Unexpected Suspense handler tag (\" +\n finishedWork.tag +\n \"). This is a bug in React.\"\n );\n }\n }\n function attachSuspenseRetryListeners(finishedWork, wakeables) {\n var retryCache = getRetryCache(finishedWork);\n wakeables.forEach(function (wakeable) {\n var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n if (!retryCache.has(wakeable)) {\n retryCache.add(wakeable);\n if (isDevToolsPresent)\n if (null !== inProgressLanes && null !== inProgressRoot)\n restorePendingUpdaters(inProgressRoot, inProgressLanes);\n else\n throw Error(\n \"Expected finished root and lanes to be set. This is a bug in React.\"\n );\n wakeable.then(retry, retry);\n }\n });\n }\n function recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n var deletions = parentFiber.deletions;\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var root = root$jscomp$0,\n returnFiber = parentFiber,\n deletedFiber = deletions[i],\n parent = returnFiber;\n a: for (; null !== parent; ) {\n switch (parent.tag) {\n case 27:\n if (isSingletonScope(parent.type)) {\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n }\n break;\n case 5:\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n case 3:\n case 4:\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = !0;\n break a;\n }\n parent = parent.return;\n }\n if (null === hostParent)\n throw Error(\n \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\"\n );\n commitDeletionEffectsOnFiber(root, returnFiber, deletedFiber);\n hostParent = null;\n hostParentIsContainer = !1;\n root = deletedFiber;\n returnFiber = root.alternate;\n null !== returnFiber && (returnFiber.return = null);\n root.return = null;\n }\n if (parentFiber.subtreeFlags & 13878)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n (parentFiber = parentFiber.sibling);\n }\n function commitMutationEffectsOnFiber(finishedWork, root) {\n var current = finishedWork.alternate,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n (commitHookEffectListUnmount(\n Insertion | HasEffect,\n finishedWork,\n finishedWork.return\n ),\n commitHookEffectListMount(Insertion | HasEffect, finishedWork),\n commitHookLayoutUnmountEffects(\n finishedWork,\n finishedWork.return,\n Layout | HasEffect\n ));\n break;\n case 1:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n flags & 64 &&\n offscreenSubtreeIsHidden &&\n ((finishedWork = finishedWork.updateQueue),\n null !== finishedWork &&\n ((flags = finishedWork.callbacks),\n null !== flags &&\n ((current = finishedWork.shared.hiddenCallbacks),\n (finishedWork.shared.hiddenCallbacks =\n null === current ? flags : current.concat(flags)))));\n break;\n case 26:\n var hoistableRoot = currentHoistableRoot;\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (flags & 4)\n if (\n ((root = null !== current ? current.memoizedState : null),\n (flags = finishedWork.memoizedState),\n null === current)\n )\n if (null === flags)\n if (null === finishedWork.stateNode) {\n a: {\n flags = finishedWork.type;\n current = finishedWork.memoizedProps;\n root = hoistableRoot.ownerDocument || hoistableRoot;\n b: switch (flags) {\n case \"title\":\n hoistableRoot = root.getElementsByTagName(\"title\")[0];\n if (\n !hoistableRoot ||\n hoistableRoot[internalHoistableMarker] ||\n hoistableRoot[internalInstanceKey] ||\n hoistableRoot.namespaceURI === SVG_NAMESPACE ||\n hoistableRoot.hasAttribute(\"itemprop\")\n )\n (hoistableRoot = root.createElement(flags)),\n root.head.insertBefore(\n hoistableRoot,\n root.querySelector(\"head > title\")\n );\n setInitialProperties(hoistableRoot, flags, current);\n hoistableRoot[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(hoistableRoot);\n flags = hoistableRoot;\n break a;\n case \"link\":\n var maybeNodes = getHydratableHoistableCache(\n \"link\",\n \"href\",\n root\n ).get(flags + (current.href || \"\"));\n if (maybeNodes)\n for (var i = 0; i < maybeNodes.length; i++)\n if (\n ((hoistableRoot = maybeNodes[i]),\n hoistableRoot.getAttribute(\"href\") ===\n (null == current.href || \"\" === current.href\n ? null\n : current.href) &&\n hoistableRoot.getAttribute(\"rel\") ===\n (null == current.rel ? null : current.rel) &&\n hoistableRoot.getAttribute(\"title\") ===\n (null == current.title\n ? null\n : current.title) &&\n hoistableRoot.getAttribute(\"crossorigin\") ===\n (null == current.crossOrigin\n ? null\n : current.crossOrigin))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n hoistableRoot = root.createElement(flags);\n setInitialProperties(hoistableRoot, flags, current);\n root.head.appendChild(hoistableRoot);\n break;\n case \"meta\":\n if (\n (maybeNodes = getHydratableHoistableCache(\n \"meta\",\n \"content\",\n root\n ).get(flags + (current.content || \"\")))\n )\n for (i = 0; i < maybeNodes.length; i++)\n if (\n ((hoistableRoot = maybeNodes[i]),\n checkAttributeStringCoercion(\n current.content,\n \"content\"\n ),\n hoistableRoot.getAttribute(\"content\") ===\n (null == current.content\n ? null\n : \"\" + current.content) &&\n hoistableRoot.getAttribute(\"name\") ===\n (null == current.name\n ? null\n : current.name) &&\n hoistableRoot.getAttribute(\"property\") ===\n (null == current.property\n ? null\n : current.property) &&\n hoistableRoot.getAttribute(\"http-equiv\") ===\n (null == current.httpEquiv\n ? null\n : current.httpEquiv) &&\n hoistableRoot.getAttribute(\"charset\") ===\n (null == current.charSet\n ? null\n : current.charSet))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n hoistableRoot = root.createElement(flags);\n setInitialProperties(hoistableRoot, flags, current);\n root.head.appendChild(hoistableRoot);\n break;\n default:\n throw Error(\n 'getNodesForType encountered a type it did not expect: \"' +\n flags +\n '\". This is a bug in React.'\n );\n }\n hoistableRoot[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(hoistableRoot);\n flags = hoistableRoot;\n }\n finishedWork.stateNode = flags;\n } else\n mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n );\n else\n finishedWork.stateNode = acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n );\n else\n root !== flags\n ? (null === root\n ? null !== current.stateNode &&\n ((current = current.stateNode),\n current.parentNode.removeChild(current))\n : root.count--,\n null === flags\n ? mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n )\n : acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n ))\n : null === flags &&\n null !== finishedWork.stateNode &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n break;\n case 27:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n null !== current &&\n flags & 4 &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n break;\n case 5:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (finishedWork.flags & 32) {\n root = finishedWork.stateNode;\n try {\n runWithFiberInDEV(finishedWork, resetTextContent, root);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n flags & 4 &&\n null != finishedWork.stateNode &&\n ((root = finishedWork.memoizedProps),\n commitHostUpdate(\n finishedWork,\n root,\n null !== current ? current.memoizedProps : root\n ));\n flags & 1024 &&\n ((needsFormReset = !0),\n \"form\" !== finishedWork.type &&\n console.error(\n \"Unexpected host component type. Expected a form. This is a bug in React.\"\n ));\n break;\n case 6:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n if (flags & 4) {\n if (null === finishedWork.stateNode)\n throw Error(\n \"This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.\"\n );\n flags = finishedWork.memoizedProps;\n current = null !== current ? current.memoizedProps : flags;\n root = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitTextUpdate,\n root,\n current,\n flags\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n break;\n case 3:\n hoistableRoot = pushNestedEffectDurations();\n tagCaches = null;\n maybeNodes = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(root.containerInfo);\n recursivelyTraverseMutationEffects(root, finishedWork);\n currentHoistableRoot = maybeNodes;\n commitReconciliationEffects(finishedWork);\n if (\n flags & 4 &&\n null !== current &&\n current.memoizedState.isDehydrated\n )\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHydratedContainer,\n root.containerInfo\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n needsFormReset &&\n ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n root.effectDuration += popNestedEffectDurations(hoistableRoot);\n break;\n case 4:\n flags = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(\n finishedWork.stateNode.containerInfo\n );\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n currentHoistableRoot = flags;\n break;\n case 12:\n flags = pushNestedEffectDurations();\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n finishedWork.stateNode.effectDuration +=\n bubbleNestedEffectDurations(flags);\n break;\n case 13:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n finishedWork.child.flags & 8192 &&\n (null !== finishedWork.memoizedState) !==\n (null !== current && null !== current.memoizedState) &&\n (globalMostRecentFallbackTime = now$1());\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 22:\n hoistableRoot = null !== finishedWork.memoizedState;\n var wasHidden = null !== current && null !== current.memoizedState,\n prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden =\n prevOffscreenSubtreeIsHidden || hoistableRoot;\n offscreenSubtreeWasHidden =\n prevOffscreenSubtreeWasHidden || wasHidden;\n recursivelyTraverseMutationEffects(root, finishedWork);\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n commitReconciliationEffects(finishedWork);\n if (flags & 8192)\n a: for (\n root = finishedWork.stateNode,\n root._visibility = hoistableRoot\n ? root._visibility & ~OffscreenVisible\n : root._visibility | OffscreenVisible,\n hoistableRoot &&\n (null === current ||\n wasHidden ||\n offscreenSubtreeIsHidden ||\n offscreenSubtreeWasHidden ||\n recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n current = null,\n root = finishedWork;\n ;\n\n ) {\n if (5 === root.tag || 26 === root.tag) {\n if (null === current) {\n wasHidden = current = root;\n try {\n (maybeNodes = wasHidden.stateNode),\n hoistableRoot\n ? runWithFiberInDEV(wasHidden, hideInstance, maybeNodes)\n : runWithFiberInDEV(\n wasHidden,\n unhideInstance,\n wasHidden.stateNode,\n wasHidden.memoizedProps\n );\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (6 === root.tag) {\n if (null === current) {\n wasHidden = root;\n try {\n (i = wasHidden.stateNode),\n hoistableRoot\n ? runWithFiberInDEV(wasHidden, hideTextInstance, i)\n : runWithFiberInDEV(\n wasHidden,\n unhideTextInstance,\n i,\n wasHidden.memoizedProps\n );\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (\n ((22 !== root.tag && 23 !== root.tag) ||\n null === root.memoizedState ||\n root === finishedWork) &&\n null !== root.child\n ) {\n root.child.return = root;\n root = root.child;\n continue;\n }\n if (root === finishedWork) break a;\n for (; null === root.sibling; ) {\n if (null === root.return || root.return === finishedWork)\n break a;\n current === root && (current = null);\n root = root.return;\n }\n current === root && (current = null);\n root.sibling.return = root.return;\n root = root.sibling;\n }\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((current = flags.retryQueue),\n null !== current &&\n ((flags.retryQueue = null),\n attachSuspenseRetryListeners(finishedWork, current))));\n break;\n case 19:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 30:\n break;\n case 21:\n break;\n default:\n recursivelyTraverseMutationEffects(root, finishedWork),\n commitReconciliationEffects(finishedWork);\n }\n }\n function commitReconciliationEffects(finishedWork) {\n var flags = finishedWork.flags;\n if (flags & 2) {\n try {\n runWithFiberInDEV(finishedWork, commitPlacement, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n finishedWork.flags &= -3;\n }\n flags & 4096 && (finishedWork.flags &= -4097);\n }\n function recursivelyResetForms(parentFiber) {\n if (parentFiber.subtreeFlags & 1024)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var fiber = parentFiber;\n recursivelyResetForms(fiber);\n 5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n parentFiber = parentFiber.sibling;\n }\n }\n function recursivelyTraverseLayoutEffects(root, parentFiber) {\n if (parentFiber.subtreeFlags & 8772)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function disappearLayoutEffects(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookLayoutUnmountEffects(\n finishedWork,\n finishedWork.return,\n Layout\n );\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 1:\n safelyDetachRef(finishedWork, finishedWork.return);\n var instance = finishedWork.stateNode;\n \"function\" === typeof instance.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n finishedWork,\n finishedWork.return,\n instance\n );\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 27:\n runWithFiberInDEV(\n finishedWork,\n releaseSingletonInstance,\n finishedWork.stateNode\n );\n case 26:\n case 5:\n safelyDetachRef(finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 30:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n default:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n }\n }\n function recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n disappearLayoutEffects(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function reappearLayoutEffects(\n finishedRoot,\n current,\n finishedWork,\n includeWorkInProgressEffects\n ) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n commitHookLayoutEffects(finishedWork, Layout);\n break;\n case 1:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n current = finishedWork.stateNode;\n \"function\" === typeof current.componentDidMount &&\n runWithFiberInDEV(\n finishedWork,\n callComponentDidMountInDEV,\n finishedWork,\n current\n );\n current = finishedWork.updateQueue;\n if (null !== current) {\n finishedRoot = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHiddenCallbacks,\n current,\n finishedRoot\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n includeWorkInProgressEffects &&\n flags & 64 &&\n commitClassCallbacks(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 27:\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n null === current &&\n flags & 4 &&\n commitHostMount(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n if (includeWorkInProgressEffects && flags & 4) {\n flags = pushNestedEffectDurations();\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects = finishedWork.stateNode;\n includeWorkInProgressEffects.effectDuration +=\n bubbleNestedEffectDurations(flags);\n try {\n runWithFiberInDEV(\n finishedWork,\n commitProfiler,\n finishedWork,\n current,\n commitStartTime,\n includeWorkInProgressEffects.effectDuration\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n break;\n case 13:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 30:\n break;\n default:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n }\n }\n function recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n parentFiber,\n includeWorkInProgressEffects\n ) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n reappearLayoutEffects(\n finishedRoot,\n parentFiber.alternate,\n parentFiber,\n includeWorkInProgressEffects\n ),\n (parentFiber = parentFiber.sibling);\n }\n function commitOffscreenPassiveMountEffects(current, finishedWork) {\n var previousCache = null;\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (previousCache = current.memoizedState.cachePool.pool);\n current = null;\n null !== finishedWork.memoizedState &&\n null !== finishedWork.memoizedState.cachePool &&\n (current = finishedWork.memoizedState.cachePool.pool);\n current !== previousCache &&\n (null != current && retainCache(current),\n null != previousCache && releaseCache(previousCache));\n }\n function commitCachePassiveMountEffect(current, finishedWork) {\n current = null;\n null !== finishedWork.alternate &&\n (current = finishedWork.alternate.memoizedState.cache);\n finishedWork = finishedWork.memoizedState.cache;\n finishedWork !== current &&\n (retainCache(finishedWork), null != current && releaseCache(current));\n }\n function recursivelyTraversePassiveMountEffects(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n ) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveMountOnFiber(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n ),\n (parentFiber = parentFiber.sibling);\n }\n function commitPassiveMountOnFiber(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n ) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n commitHookPassiveMountEffects(finishedWork, Passive | HasEffect);\n break;\n case 1:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 3:\n var prevEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n ((committedLanes = null),\n null !== finishedWork.alternate &&\n (committedLanes = finishedWork.alternate.memoizedState.cache),\n (finishedWork = finishedWork.memoizedState.cache),\n finishedWork !== committedLanes &&\n (retainCache(finishedWork),\n null != committedLanes && releaseCache(committedLanes)));\n finishedRoot.passiveEffectDuration +=\n popNestedEffectDurations(prevEffectDuration);\n break;\n case 12:\n if (flags & 2048) {\n flags = pushNestedEffectDurations();\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n finishedRoot = finishedWork.stateNode;\n finishedRoot.passiveEffectDuration +=\n bubbleNestedEffectDurations(flags);\n try {\n runWithFiberInDEV(\n finishedWork,\n commitProfilerPostCommitImpl,\n finishedWork,\n finishedWork.alternate,\n commitStartTime,\n finishedRoot.passiveEffectDuration\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 13:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 23:\n break;\n case 22:\n prevEffectDuration = finishedWork.stateNode;\n var _current = finishedWork.alternate;\n null !== finishedWork.memoizedState\n ? prevEffectDuration._visibility & OffscreenPassiveEffectsConnected\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n )\n : prevEffectDuration._visibility & OffscreenPassiveEffectsConnected\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : ((prevEffectDuration._visibility |=\n OffscreenPassiveEffectsConnected),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n 0 !== (finishedWork.subtreeFlags & 10256)\n ));\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(_current, finishedWork);\n break;\n case 24:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n }\n }\n function recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n parentFiber,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects &&\n 0 !== (parentFiber.subtreeFlags & 10256);\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n reconnectPassiveEffects(\n finishedRoot,\n parentFiber,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ),\n (parentFiber = parentFiber.sibling);\n }\n function reconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n commitHookPassiveMountEffects(finishedWork, Passive);\n break;\n case 23:\n break;\n case 22:\n var _instance2 = finishedWork.stateNode;\n null !== finishedWork.memoizedState\n ? _instance2._visibility & OffscreenPassiveEffectsConnected\n ? recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n )\n : ((_instance2._visibility |= OffscreenPassiveEffectsConnected),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ));\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n }\n }\n function recursivelyTraverseAtomicPassiveEffects(\n finishedRoot$jscomp$0,\n parentFiber\n ) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 22:\n recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n );\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n );\n flags & 2048 &&\n commitCachePassiveMountEffect(\n finishedWork.alternate,\n finishedWork\n );\n break;\n default:\n recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n );\n }\n parentFiber = parentFiber.sibling;\n }\n }\n function recursivelyAccumulateSuspenseyCommit(parentFiber) {\n if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n accumulateSuspenseyCommitOnFiber(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function accumulateSuspenseyCommitOnFiber(fiber) {\n switch (fiber.tag) {\n case 26:\n recursivelyAccumulateSuspenseyCommit(fiber);\n fiber.flags & suspenseyCommitFlag &&\n null !== fiber.memoizedState &&\n suspendResource(\n currentHoistableRoot,\n fiber.memoizedState,\n fiber.memoizedProps\n );\n break;\n case 5:\n recursivelyAccumulateSuspenseyCommit(fiber);\n break;\n case 3:\n case 4:\n var previousHoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(\n fiber.stateNode.containerInfo\n );\n recursivelyAccumulateSuspenseyCommit(fiber);\n currentHoistableRoot = previousHoistableRoot;\n break;\n case 22:\n null === fiber.memoizedState &&\n ((previousHoistableRoot = fiber.alternate),\n null !== previousHoistableRoot &&\n null !== previousHoistableRoot.memoizedState\n ? ((previousHoistableRoot = suspenseyCommitFlag),\n (suspenseyCommitFlag = 16777216),\n recursivelyAccumulateSuspenseyCommit(fiber),\n (suspenseyCommitFlag = previousHoistableRoot))\n : recursivelyAccumulateSuspenseyCommit(fiber));\n break;\n default:\n recursivelyAccumulateSuspenseyCommit(fiber);\n }\n }\n function detachAlternateSiblings(parentFiber) {\n var previousFiber = parentFiber.alternate;\n if (\n null !== previousFiber &&\n ((parentFiber = previousFiber.child), null !== parentFiber)\n ) {\n previousFiber.child = null;\n do\n (previousFiber = parentFiber.sibling),\n (parentFiber.sibling = null),\n (parentFiber = previousFiber);\n while (null !== parentFiber);\n }\n }\n function recursivelyTraversePassiveUnmountEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveUnmountOnFiber(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function commitPassiveUnmountOnFiber(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.flags & 2048 &&\n commitHookPassiveUnmountEffects(\n finishedWork,\n finishedWork.return,\n Passive | HasEffect\n );\n break;\n case 3:\n var prevEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.stateNode.passiveEffectDuration +=\n popNestedEffectDurations(prevEffectDuration);\n break;\n case 12:\n prevEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.stateNode.passiveEffectDuration +=\n bubbleNestedEffectDurations(prevEffectDuration);\n break;\n case 22:\n prevEffectDuration = finishedWork.stateNode;\n null !== finishedWork.memoizedState &&\n prevEffectDuration._visibility & OffscreenPassiveEffectsConnected &&\n (null === finishedWork.return || 13 !== finishedWork.return.tag)\n ? ((prevEffectDuration._visibility &=\n ~OffscreenPassiveEffectsConnected),\n recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n : recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n default:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n }\n }\n function recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n disconnectPassiveEffect(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function disconnectPassiveEffect(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n commitHookPassiveUnmountEffects(\n finishedWork,\n finishedWork.return,\n Passive\n );\n recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n break;\n case 22:\n var instance = finishedWork.stateNode;\n instance._visibility & OffscreenPassiveEffectsConnected &&\n ((instance._visibility &= ~OffscreenPassiveEffectsConnected),\n recursivelyTraverseDisconnectPassiveEffects(finishedWork));\n break;\n default:\n recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n }\n }\n function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n deletedSubtreeRoot,\n nearestMountedAncestor\n ) {\n for (; null !== nextEffect; ) {\n var fiber = nextEffect,\n current = fiber;\n switch (current.tag) {\n case 0:\n case 11:\n case 15:\n commitHookPassiveUnmountEffects(\n current,\n nearestMountedAncestor,\n Passive\n );\n break;\n case 23:\n case 22:\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n ((current = current.memoizedState.cachePool.pool),\n null != current && retainCache(current));\n break;\n case 24:\n releaseCache(current.memoizedState.cache);\n }\n current = fiber.child;\n if (null !== current) (current.return = fiber), (nextEffect = current);\n else\n a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n current = nextEffect;\n var sibling = current.sibling,\n returnFiber = current.return;\n detachFiberAfterEffects(current);\n if (current === fiber) {\n nextEffect = null;\n break a;\n }\n if (null !== sibling) {\n sibling.return = returnFiber;\n nextEffect = sibling;\n break a;\n }\n nextEffect = returnFiber;\n }\n }\n }\n function onCommitRoot() {\n commitHooks.forEach(function (commitHook) {\n return commitHook();\n });\n }\n function isConcurrentActEnvironment() {\n var isReactActEnvironmentGlobal =\n \"undefined\" !== typeof IS_REACT_ACT_ENVIRONMENT\n ? IS_REACT_ACT_ENVIRONMENT\n : void 0;\n isReactActEnvironmentGlobal ||\n null === ReactSharedInternals.actQueue ||\n console.error(\n \"The current testing environment is not configured to support act(...)\"\n );\n return isReactActEnvironmentGlobal;\n }\n function requestUpdateLane(fiber) {\n if (\n (executionContext & RenderContext) !== NoContext &&\n 0 !== workInProgressRootRenderLanes\n )\n return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n var transition = ReactSharedInternals.T;\n return null !== transition\n ? (transition._updatedFibers || (transition._updatedFibers = new Set()),\n transition._updatedFibers.add(fiber),\n (fiber = currentEntangledLane),\n 0 !== fiber ? fiber : requestTransitionLane())\n : resolveUpdatePriority();\n }\n function requestDeferredLane() {\n 0 === workInProgressDeferredLane &&\n (workInProgressDeferredLane =\n 0 === (workInProgressRootRenderLanes & 536870912) || isHydrating\n ? claimNextTransitionLane()\n : 536870912);\n var suspenseHandler = suspenseHandlerStackCursor.current;\n null !== suspenseHandler && (suspenseHandler.flags |= 32);\n return workInProgressDeferredLane;\n }\n function scheduleUpdateOnFiber(root, fiber, lane) {\n isRunningInsertionEffect &&\n console.error(\"useInsertionEffect must not schedule updates.\");\n isFlushingPassiveEffects && (didScheduleUpdateDuringPassiveEffects = !0);\n if (\n (root === workInProgressRoot &&\n (workInProgressSuspendedReason === SuspendedOnData ||\n workInProgressSuspendedReason === SuspendedOnAction)) ||\n null !== root.cancelPendingCommit\n )\n prepareFreshStack(root, 0),\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n markRootUpdated$1(root, lane);\n if (\n 0 !== (executionContext & RenderContext) &&\n root === workInProgressRoot\n ) {\n if (isRendering)\n switch (fiber.tag) {\n case 0:\n case 11:\n case 15:\n root =\n (workInProgress && getComponentNameFromFiber(workInProgress)) ||\n \"Unknown\";\n didWarnAboutUpdateInRenderForAnotherComponent.has(root) ||\n (didWarnAboutUpdateInRenderForAnotherComponent.add(root),\n (fiber = getComponentNameFromFiber(fiber) || \"Unknown\"),\n console.error(\n \"Cannot update a component (`%s`) while rendering a different component (`%s`). To locate the bad setState() call inside `%s`, follow the stack trace as described in https://react.dev/link/setstate-in-render\",\n fiber,\n root,\n root\n ));\n break;\n case 1:\n didWarnAboutUpdateInRender ||\n (console.error(\n \"Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state.\"\n ),\n (didWarnAboutUpdateInRender = !0));\n }\n } else\n isDevToolsPresent && addFiberToLanesMap(root, fiber, lane),\n warnIfUpdatesNotWrappedWithActDEV(fiber),\n root === workInProgressRoot &&\n ((executionContext & RenderContext) === NoContext &&\n (workInProgressRootInterleavedUpdatedLanes |= lane),\n workInProgressRootExitStatus === RootSuspendedWithDelay &&\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n )),\n ensureRootIsScheduled(root);\n }\n function performWorkOnRoot(root, lanes, forceSync) {\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n throw Error(\"Should not already be working.\");\n var shouldTimeSlice =\n (!forceSync &&\n 0 === (lanes & 124) &&\n 0 === (lanes & root.expiredLanes)) ||\n checkIfRootIsPrerendering(root, lanes),\n exitStatus = shouldTimeSlice\n ? renderRootConcurrent(root, lanes)\n : renderRootSync(root, lanes, !0),\n renderWasConcurrent = shouldTimeSlice;\n do {\n if (exitStatus === RootInProgress) {\n workInProgressRootIsPrerendering &&\n !shouldTimeSlice &&\n markRootSuspended(root, lanes, 0, !1);\n break;\n } else {\n forceSync = root.current.alternate;\n if (\n renderWasConcurrent &&\n !isRenderConsistentWithExternalStores(forceSync)\n ) {\n exitStatus = renderRootSync(root, lanes, !1);\n renderWasConcurrent = !1;\n continue;\n }\n if (exitStatus === RootErrored) {\n renderWasConcurrent = lanes;\n if (root.errorRecoveryDisabledLanes & renderWasConcurrent)\n var errorRetryLanes = 0;\n else\n (errorRetryLanes = root.pendingLanes & -536870913),\n (errorRetryLanes =\n 0 !== errorRetryLanes\n ? errorRetryLanes\n : errorRetryLanes & 536870912\n ? 536870912\n : 0);\n if (0 !== errorRetryLanes) {\n lanes = errorRetryLanes;\n a: {\n exitStatus = root;\n var errorRetryLanes$jscomp$0 = errorRetryLanes;\n errorRetryLanes = workInProgressRootConcurrentErrors;\n var wasRootDehydrated =\n exitStatus.current.memoizedState.isDehydrated;\n wasRootDehydrated &&\n (prepareFreshStack(\n exitStatus,\n errorRetryLanes$jscomp$0\n ).flags |= 256);\n errorRetryLanes$jscomp$0 = renderRootSync(\n exitStatus,\n errorRetryLanes$jscomp$0,\n !1\n );\n if (errorRetryLanes$jscomp$0 !== RootErrored) {\n if (\n workInProgressRootDidAttachPingListener &&\n !wasRootDehydrated\n ) {\n exitStatus.errorRecoveryDisabledLanes |=\n renderWasConcurrent;\n workInProgressRootInterleavedUpdatedLanes |=\n renderWasConcurrent;\n exitStatus = RootSuspendedWithDelay;\n break a;\n }\n exitStatus = workInProgressRootRecoverableErrors;\n workInProgressRootRecoverableErrors = errorRetryLanes;\n null !== exitStatus &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = exitStatus)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n exitStatus\n ));\n }\n exitStatus = errorRetryLanes$jscomp$0;\n }\n renderWasConcurrent = !1;\n if (exitStatus !== RootErrored) continue;\n }\n }\n if (exitStatus === RootFatalErrored) {\n prepareFreshStack(root, 0);\n markRootSuspended(root, lanes, 0, !0);\n break;\n }\n a: {\n shouldTimeSlice = root;\n switch (exitStatus) {\n case RootInProgress:\n case RootFatalErrored:\n throw Error(\"Root did not complete. This is a bug in React.\");\n case RootSuspendedWithDelay:\n if ((lanes & 4194048) !== lanes) break;\n case RootSuspendedAtTheShell:\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n break a;\n case RootErrored:\n workInProgressRootRecoverableErrors = null;\n break;\n case RootSuspended:\n case RootCompleted:\n break;\n default:\n throw Error(\"Unknown root exit status.\");\n }\n if (null !== ReactSharedInternals.actQueue)\n commitRoot(\n shouldTimeSlice,\n forceSync,\n lanes,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes\n );\n else {\n if (\n (lanes & 62914560) === lanes &&\n ((renderWasConcurrent =\n globalMostRecentFallbackTime +\n FALLBACK_THROTTLE_MS -\n now$1()),\n 10 < renderWasConcurrent)\n ) {\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n shouldTimeSlice.timeoutHandle = scheduleTimeout(\n commitRootWhenReady.bind(\n null,\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n exitStatus,\n THROTTLED_COMMIT,\n renderStartTime,\n 0\n ),\n renderWasConcurrent\n );\n break a;\n }\n commitRootWhenReady(\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n exitStatus,\n IMMEDIATE_COMMIT,\n renderStartTime,\n 0\n );\n }\n }\n }\n break;\n } while (1);\n ensureRootIsScheduled(root);\n }\n function commitRootWhenReady(\n root,\n finishedWork,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n lanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n didSkipSuspendedSiblings,\n exitStatus,\n suspendedCommitReason,\n completedRenderStartTime,\n completedRenderEndTime\n ) {\n root.timeoutHandle = noTimeout;\n suspendedCommitReason = finishedWork.subtreeFlags;\n if (\n suspendedCommitReason & 8192 ||\n 16785408 === (suspendedCommitReason & 16785408)\n )\n if (\n ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop }),\n accumulateSuspenseyCommitOnFiber(finishedWork),\n (suspendedCommitReason = waitForCommitToBeReady()),\n null !== suspendedCommitReason)\n ) {\n root.cancelPendingCommit = suspendedCommitReason(\n commitRoot.bind(\n null,\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n exitStatus,\n SUSPENDED_COMMIT,\n completedRenderStartTime,\n completedRenderEndTime\n )\n );\n markRootSuspended(\n root,\n lanes,\n spawnedLane,\n !didSkipSuspendedSiblings\n );\n return;\n }\n commitRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n }\n function isRenderConsistentWithExternalStores(finishedWork) {\n for (var node = finishedWork; ; ) {\n var tag = node.tag;\n if (\n (0 === tag || 11 === tag || 15 === tag) &&\n node.flags & 16384 &&\n ((tag = node.updateQueue),\n null !== tag && ((tag = tag.stores), null !== tag))\n )\n for (var i = 0; i < tag.length; i++) {\n var check = tag[i],\n getSnapshot = check.getSnapshot;\n check = check.value;\n try {\n if (!objectIs(getSnapshot(), check)) return !1;\n } catch (error) {\n return !1;\n }\n }\n tag = node.child;\n if (node.subtreeFlags & 16384 && null !== tag)\n (tag.return = node), (node = tag);\n else {\n if (node === finishedWork) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === finishedWork) return !0;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n return !0;\n }\n function markRootSuspended(\n root,\n suspendedLanes,\n spawnedLane,\n didAttemptEntireTree\n ) {\n suspendedLanes &= ~workInProgressRootPingedLanes;\n suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n root.suspendedLanes |= suspendedLanes;\n root.pingedLanes &= ~suspendedLanes;\n didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n didAttemptEntireTree = root.expirationTimes;\n for (var lanes = suspendedLanes; 0 < lanes; ) {\n var index = 31 - clz32(lanes),\n lane = 1 << index;\n didAttemptEntireTree[index] = -1;\n lanes &= ~lane;\n }\n 0 !== spawnedLane &&\n markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n }\n function flushSyncWork$1() {\n return (executionContext & (RenderContext | CommitContext)) === NoContext\n ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n : !0;\n }\n function resetWorkInProgressStack() {\n if (null !== workInProgress) {\n if (workInProgressSuspendedReason === NotSuspended)\n var interruptedWork = workInProgress.return;\n else\n (interruptedWork = workInProgress),\n resetContextDependencies(),\n resetHooksOnUnwind(interruptedWork),\n (thenableState = null),\n (thenableIndexCounter = 0),\n (interruptedWork = workInProgress);\n for (; null !== interruptedWork; )\n unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n (interruptedWork = interruptedWork.return);\n workInProgress = null;\n }\n }\n function prepareFreshStack(root, lanes) {\n var timeoutHandle = root.timeoutHandle;\n timeoutHandle !== noTimeout &&\n ((root.timeoutHandle = noTimeout), cancelTimeout(timeoutHandle));\n timeoutHandle = root.cancelPendingCommit;\n null !== timeoutHandle &&\n ((root.cancelPendingCommit = null), timeoutHandle());\n resetWorkInProgressStack();\n workInProgressRoot = root;\n workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n workInProgressRootRenderLanes = lanes;\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n workInProgressRootDidSkipSuspendedSiblings = !1;\n workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n workInProgressRootDidAttachPingListener = !1;\n workInProgressRootExitStatus = RootInProgress;\n workInProgressSuspendedRetryLanes =\n workInProgressDeferredLane =\n workInProgressRootPingedLanes =\n workInProgressRootInterleavedUpdatedLanes =\n workInProgressRootSkippedLanes =\n 0;\n workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n null;\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n 0 !== (lanes & 8) && (lanes |= lanes & 32);\n var allEntangledLanes = root.entangledLanes;\n if (0 !== allEntangledLanes)\n for (\n root = root.entanglements, allEntangledLanes &= lanes;\n 0 < allEntangledLanes;\n\n ) {\n var index = 31 - clz32(allEntangledLanes),\n lane = 1 << index;\n lanes |= root[index];\n allEntangledLanes &= ~lane;\n }\n entangledRenderLanes = lanes;\n finishQueueingConcurrentUpdates();\n lanes = getCurrentTime();\n 1e3 < lanes - lastResetTime &&\n ((ReactSharedInternals.recentlyCreatedOwnerStacks = 0),\n (lastResetTime = lanes));\n ReactStrictModeWarnings.discardPendingWarnings();\n return timeoutHandle;\n }\n function handleThrow(root, thrownValue) {\n currentlyRenderingFiber = null;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n ReactSharedInternals.getCurrentStack = null;\n isRendering = !1;\n current = null;\n thrownValue === SuspenseException ||\n thrownValue === SuspenseActionException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = SuspendedOnImmediate))\n : thrownValue === SuspenseyCommitException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = SuspendedOnInstance))\n : (workInProgressSuspendedReason =\n thrownValue === SelectiveHydrationException\n ? SuspendedOnHydration\n : null !== thrownValue &&\n \"object\" === typeof thrownValue &&\n \"function\" === typeof thrownValue.then\n ? SuspendedOnDeprecatedThrowPromise\n : SuspendedOnError);\n workInProgressThrownValue = thrownValue;\n var erroredWork = workInProgress;\n if (null === erroredWork)\n (workInProgressRootExitStatus = RootFatalErrored),\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n else\n switch (\n (erroredWork.mode & ProfileMode &&\n stopProfilerTimerIfRunningAndRecordDuration(erroredWork),\n markComponentRenderStopped(),\n workInProgressSuspendedReason)\n ) {\n case SuspendedOnError:\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentErrored &&\n injectedProfilingHooks.markComponentErrored(\n erroredWork,\n thrownValue,\n workInProgressRootRenderLanes\n );\n break;\n case SuspendedOnData:\n case SuspendedOnAction:\n case SuspendedOnImmediate:\n case SuspendedOnDeprecatedThrowPromise:\n case SuspendedAndReadyToContinue:\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentSuspended &&\n injectedProfilingHooks.markComponentSuspended(\n erroredWork,\n thrownValue,\n workInProgressRootRenderLanes\n );\n }\n }\n function pushDispatcher() {\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n }\n function pushAsyncDispatcher() {\n var prevAsyncDispatcher = ReactSharedInternals.A;\n ReactSharedInternals.A = DefaultAsyncDispatcher;\n return prevAsyncDispatcher;\n }\n function renderDidSuspendDelayIfPossible() {\n workInProgressRootExitStatus = RootSuspendedWithDelay;\n workInProgressRootDidSkipSuspendedSiblings ||\n ((workInProgressRootRenderLanes & 4194048) !==\n workInProgressRootRenderLanes &&\n null !== suspenseHandlerStackCursor.current) ||\n (workInProgressRootIsPrerendering = !0);\n (0 === (workInProgressRootSkippedLanes & 134217727) &&\n 0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n null === workInProgressRoot ||\n markRootSuspended(\n workInProgressRoot,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n }\n function renderRootSync(root, lanes, shouldYieldForPrerendering) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n if (\n workInProgressRoot !== root ||\n workInProgressRootRenderLanes !== lanes\n ) {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n 0 < memoizedUpdaters.size &&\n (restorePendingUpdaters(root, workInProgressRootRenderLanes),\n memoizedUpdaters.clear());\n movePendingFibersToMemoized(root, lanes);\n }\n workInProgressTransitions = null;\n prepareFreshStack(root, lanes);\n }\n markRenderStarted(lanes);\n lanes = !1;\n memoizedUpdaters = workInProgressRootExitStatus;\n a: do\n try {\n if (\n workInProgressSuspendedReason !== NotSuspended &&\n null !== workInProgress\n ) {\n var unitOfWork = workInProgress,\n thrownValue = workInProgressThrownValue;\n switch (workInProgressSuspendedReason) {\n case SuspendedOnHydration:\n resetWorkInProgressStack();\n memoizedUpdaters = RootSuspendedAtTheShell;\n break a;\n case SuspendedOnImmediate:\n case SuspendedOnData:\n case SuspendedOnAction:\n case SuspendedOnDeprecatedThrowPromise:\n null === suspenseHandlerStackCursor.current && (lanes = !0);\n var reason = workInProgressSuspendedReason;\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n if (\n shouldYieldForPrerendering &&\n workInProgressRootIsPrerendering\n ) {\n memoizedUpdaters = RootInProgress;\n break a;\n }\n break;\n default:\n (reason = workInProgressSuspendedReason),\n (workInProgressSuspendedReason = NotSuspended),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n }\n }\n workLoopSync();\n memoizedUpdaters = workInProgressRootExitStatus;\n break;\n } catch (thrownValue$8) {\n handleThrow(root, thrownValue$8);\n }\n while (1);\n lanes && root.shellSuspendCounter++;\n resetContextDependencies();\n executionContext = prevExecutionContext;\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n markRenderStopped();\n null === workInProgress &&\n ((workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0),\n finishQueueingConcurrentUpdates());\n return memoizedUpdaters;\n }\n function workLoopSync() {\n for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n }\n function renderRootConcurrent(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n if (\n workInProgressRoot !== root ||\n workInProgressRootRenderLanes !== lanes\n ) {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n 0 < memoizedUpdaters.size &&\n (restorePendingUpdaters(root, workInProgressRootRenderLanes),\n memoizedUpdaters.clear());\n movePendingFibersToMemoized(root, lanes);\n }\n workInProgressTransitions = null;\n workInProgressRootRenderTargetTime = now$1() + RENDER_TIMEOUT_MS;\n prepareFreshStack(root, lanes);\n } else\n workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n root,\n lanes\n );\n markRenderStarted(lanes);\n a: do\n try {\n if (\n workInProgressSuspendedReason !== NotSuspended &&\n null !== workInProgress\n )\n b: switch (\n ((lanes = workInProgress),\n (memoizedUpdaters = workInProgressThrownValue),\n workInProgressSuspendedReason)\n ) {\n case SuspendedOnError:\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedOnError\n );\n break;\n case SuspendedOnData:\n case SuspendedOnAction:\n if (isThenableResolved(memoizedUpdaters)) {\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n replaySuspendedUnitOfWork(lanes);\n break;\n }\n lanes = function () {\n (workInProgressSuspendedReason !== SuspendedOnData &&\n workInProgressSuspendedReason !== SuspendedOnAction) ||\n workInProgressRoot !== root ||\n (workInProgressSuspendedReason =\n SuspendedAndReadyToContinue);\n ensureRootIsScheduled(root);\n };\n memoizedUpdaters.then(lanes, lanes);\n break a;\n case SuspendedOnImmediate:\n workInProgressSuspendedReason = SuspendedAndReadyToContinue;\n break a;\n case SuspendedOnInstance:\n workInProgressSuspendedReason =\n SuspendedOnInstanceAndReadyToContinue;\n break a;\n case SuspendedAndReadyToContinue:\n isThenableResolved(memoizedUpdaters)\n ? ((workInProgressSuspendedReason = NotSuspended),\n (workInProgressThrownValue = null),\n replaySuspendedUnitOfWork(lanes))\n : ((workInProgressSuspendedReason = NotSuspended),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedAndReadyToContinue\n ));\n break;\n case SuspendedOnInstanceAndReadyToContinue:\n var resource = null;\n switch (workInProgress.tag) {\n case 26:\n resource = workInProgress.memoizedState;\n case 5:\n case 27:\n var hostFiber = workInProgress;\n if (resource ? preloadResource(resource) : 1) {\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n var sibling = hostFiber.sibling;\n if (null !== sibling) workInProgress = sibling;\n else {\n var returnFiber = hostFiber.return;\n null !== returnFiber\n ? ((workInProgress = returnFiber),\n completeUnitOfWork(returnFiber))\n : (workInProgress = null);\n }\n break b;\n }\n break;\n default:\n console.error(\n \"Unexpected type of fiber triggered a suspensey commit. This is a bug in React.\"\n );\n }\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedOnInstanceAndReadyToContinue\n );\n break;\n case SuspendedOnDeprecatedThrowPromise:\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedOnDeprecatedThrowPromise\n );\n break;\n case SuspendedOnHydration:\n resetWorkInProgressStack();\n workInProgressRootExitStatus = RootSuspendedAtTheShell;\n break a;\n default:\n throw Error(\n \"Unexpected SuspendedReason. This is a bug in React.\"\n );\n }\n null !== ReactSharedInternals.actQueue\n ? workLoopSync()\n : workLoopConcurrentByScheduler();\n break;\n } catch (thrownValue$9) {\n handleThrow(root, thrownValue$9);\n }\n while (1);\n resetContextDependencies();\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n executionContext = prevExecutionContext;\n if (null !== workInProgress)\n return (\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderYielded &&\n injectedProfilingHooks.markRenderYielded(),\n RootInProgress\n );\n markRenderStopped();\n workInProgressRoot = null;\n workInProgressRootRenderLanes = 0;\n finishQueueingConcurrentUpdates();\n return workInProgressRootExitStatus;\n }\n function workLoopConcurrentByScheduler() {\n for (; null !== workInProgress && !shouldYield(); )\n performUnitOfWork(workInProgress);\n }\n function performUnitOfWork(unitOfWork) {\n var current = unitOfWork.alternate;\n (unitOfWork.mode & ProfileMode) !== NoMode\n ? (startProfilerTimer(unitOfWork),\n (current = runWithFiberInDEV(\n unitOfWork,\n beginWork,\n current,\n unitOfWork,\n entangledRenderLanes\n )),\n stopProfilerTimerIfRunningAndRecordDuration(unitOfWork))\n : (current = runWithFiberInDEV(\n unitOfWork,\n beginWork,\n current,\n unitOfWork,\n entangledRenderLanes\n ));\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === current\n ? completeUnitOfWork(unitOfWork)\n : (workInProgress = current);\n }\n function replaySuspendedUnitOfWork(unitOfWork) {\n var next = runWithFiberInDEV(unitOfWork, replayBeginWork, unitOfWork);\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n }\n function replayBeginWork(unitOfWork) {\n var current = unitOfWork.alternate,\n isProfilingMode = (unitOfWork.mode & ProfileMode) !== NoMode;\n isProfilingMode && startProfilerTimer(unitOfWork);\n switch (unitOfWork.tag) {\n case 15:\n case 0:\n current = replayFunctionComponent(\n current,\n unitOfWork,\n unitOfWork.pendingProps,\n unitOfWork.type,\n void 0,\n workInProgressRootRenderLanes\n );\n break;\n case 11:\n current = replayFunctionComponent(\n current,\n unitOfWork,\n unitOfWork.pendingProps,\n unitOfWork.type.render,\n unitOfWork.ref,\n workInProgressRootRenderLanes\n );\n break;\n case 5:\n resetHooksOnUnwind(unitOfWork);\n default:\n unwindInterruptedWork(current, unitOfWork),\n (unitOfWork = workInProgress =\n resetWorkInProgress(unitOfWork, entangledRenderLanes)),\n (current = beginWork(current, unitOfWork, entangledRenderLanes));\n }\n isProfilingMode &&\n stopProfilerTimerIfRunningAndRecordDuration(unitOfWork);\n return current;\n }\n function throwAndUnwindWorkLoop(\n root,\n unitOfWork,\n thrownValue,\n suspendedReason\n ) {\n resetContextDependencies();\n resetHooksOnUnwind(unitOfWork);\n thenableState = null;\n thenableIndexCounter = 0;\n var returnFiber = unitOfWork.return;\n try {\n if (\n throwException(\n root,\n returnFiber,\n unitOfWork,\n thrownValue,\n workInProgressRootRenderLanes\n )\n ) {\n workInProgressRootExitStatus = RootFatalErrored;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n } catch (error) {\n if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n workInProgressRootExitStatus = RootFatalErrored;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n if (unitOfWork.flags & 32768) {\n if (isHydrating || suspendedReason === SuspendedOnError) root = !0;\n else if (\n workInProgressRootIsPrerendering ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n )\n root = !1;\n else if (\n ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n suspendedReason === SuspendedOnData ||\n suspendedReason === SuspendedOnAction ||\n suspendedReason === SuspendedOnImmediate ||\n suspendedReason === SuspendedOnDeprecatedThrowPromise)\n )\n (suspendedReason = suspenseHandlerStackCursor.current),\n null !== suspendedReason &&\n 13 === suspendedReason.tag &&\n (suspendedReason.flags |= 16384);\n unwindUnitOfWork(unitOfWork, root);\n } else completeUnitOfWork(unitOfWork);\n }\n function completeUnitOfWork(unitOfWork) {\n var completedWork = unitOfWork;\n do {\n if (0 !== (completedWork.flags & 32768)) {\n unwindUnitOfWork(\n completedWork,\n workInProgressRootDidSkipSuspendedSiblings\n );\n return;\n }\n var current = completedWork.alternate;\n unitOfWork = completedWork.return;\n startProfilerTimer(completedWork);\n current = runWithFiberInDEV(\n completedWork,\n completeWork,\n current,\n completedWork,\n entangledRenderLanes\n );\n (completedWork.mode & ProfileMode) !== NoMode &&\n stopProfilerTimerIfRunningAndRecordIncompleteDuration(completedWork);\n if (null !== current) {\n workInProgress = current;\n return;\n }\n completedWork = completedWork.sibling;\n if (null !== completedWork) {\n workInProgress = completedWork;\n return;\n }\n workInProgress = completedWork = unitOfWork;\n } while (null !== completedWork);\n workInProgressRootExitStatus === RootInProgress &&\n (workInProgressRootExitStatus = RootCompleted);\n }\n function unwindUnitOfWork(unitOfWork, skipSiblings) {\n do {\n var next = unwindWork(unitOfWork.alternate, unitOfWork);\n if (null !== next) {\n next.flags &= 32767;\n workInProgress = next;\n return;\n }\n if ((unitOfWork.mode & ProfileMode) !== NoMode) {\n stopProfilerTimerIfRunningAndRecordIncompleteDuration(unitOfWork);\n next = unitOfWork.actualDuration;\n for (var child = unitOfWork.child; null !== child; )\n (next += child.actualDuration), (child = child.sibling);\n unitOfWork.actualDuration = next;\n }\n next = unitOfWork.return;\n null !== next &&\n ((next.flags |= 32768),\n (next.subtreeFlags = 0),\n (next.deletions = null));\n if (\n !skipSiblings &&\n ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n ) {\n workInProgress = unitOfWork;\n return;\n }\n workInProgress = unitOfWork = next;\n } while (null !== unitOfWork);\n workInProgressRootExitStatus = RootSuspendedAtTheShell;\n workInProgress = null;\n }\n function commitRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n ) {\n root.cancelPendingCommit = null;\n do flushPendingEffects();\n while (pendingEffectsStatus !== NO_PENDING_EFFECTS);\n ReactStrictModeWarnings.flushLegacyContextWarning();\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n throw Error(\"Should not already be working.\");\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markCommitStarted &&\n injectedProfilingHooks.markCommitStarted(lanes);\n if (null === finishedWork) markCommitStopped();\n else {\n 0 === lanes &&\n console.error(\n \"finishedLanes should not be empty during a commit. This is a bug in React.\"\n );\n if (finishedWork === root.current)\n throw Error(\n \"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\"\n );\n didIncludeRenderPhaseUpdate =\n finishedWork.lanes | finishedWork.childLanes;\n didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n markRootFinished(\n root,\n lanes,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n root === workInProgressRoot &&\n ((workInProgress = workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0));\n pendingFinishedWork = finishedWork;\n pendingEffectsRoot = root;\n pendingEffectsLanes = lanes;\n pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n pendingPassiveTransitions = transitions;\n pendingRecoverableErrors = recoverableErrors;\n 0 !== (finishedWork.subtreeFlags & 10256) ||\n 0 !== (finishedWork.flags & 10256)\n ? ((root.callbackNode = null),\n (root.callbackPriority = 0),\n scheduleCallback$1(NormalPriority$1, function () {\n flushPassiveEffects(!0);\n return null;\n }))\n : ((root.callbackNode = null), (root.callbackPriority = 0));\n commitStartTime = now();\n recoverableErrors = 0 !== (finishedWork.flags & 13878);\n if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n recoverableErrors = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n transitions = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = DiscreteEventPriority;\n spawnedLane = executionContext;\n executionContext |= CommitContext;\n try {\n commitBeforeMutationEffects(root, finishedWork, lanes);\n } finally {\n (executionContext = spawnedLane),\n (ReactDOMSharedInternals.p = transitions),\n (ReactSharedInternals.T = recoverableErrors);\n }\n }\n pendingEffectsStatus = PENDING_MUTATION_PHASE;\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n }\n }\n function flushMutationEffects() {\n if (pendingEffectsStatus === PENDING_MUTATION_PHASE) {\n pendingEffectsStatus = NO_PENDING_EFFECTS;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n if (\n 0 !== (finishedWork.subtreeFlags & 13878) ||\n rootMutationHasEffect\n ) {\n rootMutationHasEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = DiscreteEventPriority;\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n try {\n inProgressLanes = lanes;\n inProgressRoot = root;\n commitMutationEffectsOnFiber(finishedWork, root);\n inProgressRoot = inProgressLanes = null;\n lanes = selectionInformation;\n var curFocusedElem = getActiveElementDeep(root.containerInfo),\n priorFocusedElem = lanes.focusedElem,\n priorSelectionRange = lanes.selectionRange;\n if (\n curFocusedElem !== priorFocusedElem &&\n priorFocusedElem &&\n priorFocusedElem.ownerDocument &&\n containsNode(\n priorFocusedElem.ownerDocument.documentElement,\n priorFocusedElem\n )\n ) {\n if (\n null !== priorSelectionRange &&\n hasSelectionCapabilities(priorFocusedElem)\n ) {\n var start = priorSelectionRange.start,\n end = priorSelectionRange.end;\n void 0 === end && (end = start);\n if (\"selectionStart\" in priorFocusedElem)\n (priorFocusedElem.selectionStart = start),\n (priorFocusedElem.selectionEnd = Math.min(\n end,\n priorFocusedElem.value.length\n ));\n else {\n var doc = priorFocusedElem.ownerDocument || document,\n win = (doc && doc.defaultView) || window;\n if (win.getSelection) {\n var selection = win.getSelection(),\n length = priorFocusedElem.textContent.length,\n start$jscomp$0 = Math.min(\n priorSelectionRange.start,\n length\n ),\n end$jscomp$0 =\n void 0 === priorSelectionRange.end\n ? start$jscomp$0\n : Math.min(priorSelectionRange.end, length);\n !selection.extend &&\n start$jscomp$0 > end$jscomp$0 &&\n ((curFocusedElem = end$jscomp$0),\n (end$jscomp$0 = start$jscomp$0),\n (start$jscomp$0 = curFocusedElem));\n var startMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n start$jscomp$0\n ),\n endMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n end$jscomp$0\n );\n if (\n startMarker &&\n endMarker &&\n (1 !== selection.rangeCount ||\n selection.anchorNode !== startMarker.node ||\n selection.anchorOffset !== startMarker.offset ||\n selection.focusNode !== endMarker.node ||\n selection.focusOffset !== endMarker.offset)\n ) {\n var range = doc.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n start$jscomp$0 > end$jscomp$0\n ? (selection.addRange(range),\n selection.extend(endMarker.node, endMarker.offset))\n : (range.setEnd(endMarker.node, endMarker.offset),\n selection.addRange(range));\n }\n }\n }\n }\n doc = [];\n for (\n selection = priorFocusedElem;\n (selection = selection.parentNode);\n\n )\n 1 === selection.nodeType &&\n doc.push({\n element: selection,\n left: selection.scrollLeft,\n top: selection.scrollTop\n });\n \"function\" === typeof priorFocusedElem.focus &&\n priorFocusedElem.focus();\n for (\n priorFocusedElem = 0;\n priorFocusedElem < doc.length;\n priorFocusedElem++\n ) {\n var info = doc[priorFocusedElem];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n _enabled = !!eventsEnabled;\n selectionInformation = eventsEnabled = null;\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootMutationHasEffect);\n }\n }\n root.current = finishedWork;\n pendingEffectsStatus = PENDING_LAYOUT_PHASE;\n }\n }\n function flushLayoutEffects() {\n if (pendingEffectsStatus === PENDING_LAYOUT_PHASE) {\n pendingEffectsStatus = NO_PENDING_EFFECTS;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n rootHasLayoutEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = DiscreteEventPriority;\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n try {\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markLayoutEffectsStarted &&\n injectedProfilingHooks.markLayoutEffectsStarted(lanes),\n (inProgressLanes = lanes),\n (inProgressRoot = root),\n commitLayoutEffectOnFiber(\n root,\n finishedWork.alternate,\n finishedWork\n ),\n (inProgressRoot = inProgressLanes = null),\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markLayoutEffectsStopped &&\n injectedProfilingHooks.markLayoutEffectsStopped();\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootHasLayoutEffect);\n }\n }\n pendingEffectsStatus = PENDING_AFTER_MUTATION_PHASE;\n }\n }\n function flushSpawnedWork() {\n if (\n pendingEffectsStatus === PENDING_SPAWNED_WORK ||\n pendingEffectsStatus === PENDING_AFTER_MUTATION_PHASE\n ) {\n pendingEffectsStatus = NO_PENDING_EFFECTS;\n requestPaint();\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n recoverableErrors = pendingRecoverableErrors,\n rootDidHavePassiveEffects =\n 0 !== (finishedWork.subtreeFlags & 10256) ||\n 0 !== (finishedWork.flags & 10256);\n rootDidHavePassiveEffects\n ? (pendingEffectsStatus = PENDING_PASSIVE_PHASE)\n : ((pendingEffectsStatus = NO_PENDING_EFFECTS),\n (pendingFinishedWork = pendingEffectsRoot = null),\n releaseRootPooledCache(root, root.pendingLanes),\n (nestedPassiveUpdateCount = 0),\n (rootWithPassiveNestedUpdates = null));\n var remainingLanes = root.pendingLanes;\n 0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n rootDidHavePassiveEffects || commitDoubleInvokeEffectsInDEV(root);\n rootDidHavePassiveEffects = lanesToEventPriority(lanes);\n finishedWork = finishedWork.stateNode;\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onCommitFiberRoot\n )\n try {\n var didError = 128 === (finishedWork.current.flags & 128);\n switch (rootDidHavePassiveEffects) {\n case DiscreteEventPriority:\n var schedulerPriority = ImmediatePriority;\n break;\n case ContinuousEventPriority:\n schedulerPriority = UserBlockingPriority;\n break;\n case DefaultEventPriority:\n schedulerPriority = NormalPriority$1;\n break;\n case IdleEventPriority:\n schedulerPriority = IdlePriority;\n break;\n default:\n schedulerPriority = NormalPriority$1;\n }\n injectedHook.onCommitFiberRoot(\n rendererID,\n finishedWork,\n schedulerPriority,\n didError\n );\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n isDevToolsPresent && root.memoizedUpdaters.clear();\n onCommitRoot();\n if (null !== recoverableErrors) {\n didError = ReactSharedInternals.T;\n schedulerPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = DiscreteEventPriority;\n ReactSharedInternals.T = null;\n try {\n var onRecoverableError = root.onRecoverableError;\n for (\n finishedWork = 0;\n finishedWork < recoverableErrors.length;\n finishedWork++\n ) {\n var recoverableError = recoverableErrors[finishedWork],\n errorInfo = makeErrorInfo(recoverableError.stack);\n runWithFiberInDEV(\n recoverableError.source,\n onRecoverableError,\n recoverableError.value,\n errorInfo\n );\n }\n } finally {\n (ReactSharedInternals.T = didError),\n (ReactDOMSharedInternals.p = schedulerPriority);\n }\n }\n 0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n ensureRootIsScheduled(root);\n remainingLanes = root.pendingLanes;\n 0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)\n ? ((nestedUpdateScheduled = !0),\n root === rootWithNestedUpdates\n ? nestedUpdateCount++\n : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root)))\n : (nestedUpdateCount = 0);\n flushSyncWorkAcrossRoots_impl(0, !1);\n markCommitStopped();\n }\n }\n function makeErrorInfo(componentStack) {\n componentStack = { componentStack: componentStack };\n Object.defineProperty(componentStack, \"digest\", {\n get: function () {\n console.error(\n 'You are accessing \"digest\" from the errorInfo object passed to onRecoverableError. This property is no longer provided as part of errorInfo but can be accessed as a property of the Error instance itself.'\n );\n }\n });\n return componentStack;\n }\n function releaseRootPooledCache(root, remainingLanes) {\n 0 === (root.pooledCacheLanes &= remainingLanes) &&\n ((remainingLanes = root.pooledCache),\n null != remainingLanes &&\n ((root.pooledCache = null), releaseCache(remainingLanes)));\n }\n function flushPendingEffects(wasDelayedCommit) {\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n return flushPassiveEffects(wasDelayedCommit);\n }\n function flushPassiveEffects() {\n if (pendingEffectsStatus !== PENDING_PASSIVE_PHASE) return !1;\n var root = pendingEffectsRoot,\n remainingLanes = pendingEffectsRemainingLanes;\n pendingEffectsRemainingLanes = 0;\n var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n priority =\n 0 === DefaultEventPriority || DefaultEventPriority > renderPriority\n ? DefaultEventPriority\n : renderPriority;\n renderPriority = ReactSharedInternals.T;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n ReactDOMSharedInternals.p = priority;\n ReactSharedInternals.T = null;\n priority = pendingPassiveTransitions;\n pendingPassiveTransitions = null;\n var root$jscomp$0 = pendingEffectsRoot,\n lanes = pendingEffectsLanes;\n pendingEffectsStatus = NO_PENDING_EFFECTS;\n pendingFinishedWork = pendingEffectsRoot = null;\n pendingEffectsLanes = 0;\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n throw Error(\"Cannot flush passive effects while already rendering.\");\n isFlushingPassiveEffects = !0;\n didScheduleUpdateDuringPassiveEffects = !1;\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markPassiveEffectsStarted &&\n injectedProfilingHooks.markPassiveEffectsStarted(lanes);\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n commitPassiveUnmountOnFiber(root$jscomp$0.current);\n commitPassiveMountOnFiber(\n root$jscomp$0,\n root$jscomp$0.current,\n lanes,\n priority\n );\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markPassiveEffectsStopped &&\n injectedProfilingHooks.markPassiveEffectsStopped();\n commitDoubleInvokeEffectsInDEV(root$jscomp$0);\n executionContext = prevExecutionContext;\n flushSyncWorkAcrossRoots_impl(0, !1);\n didScheduleUpdateDuringPassiveEffects\n ? root$jscomp$0 === rootWithPassiveNestedUpdates\n ? nestedPassiveUpdateCount++\n : ((nestedPassiveUpdateCount = 0),\n (rootWithPassiveNestedUpdates = root$jscomp$0))\n : (nestedPassiveUpdateCount = 0);\n didScheduleUpdateDuringPassiveEffects = isFlushingPassiveEffects = !1;\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onPostCommitFiberRoot\n )\n try {\n injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n var stateNode = root$jscomp$0.current.stateNode;\n stateNode.effectDuration = 0;\n stateNode.passiveEffectDuration = 0;\n return !0;\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = renderPriority),\n releaseRootPooledCache(root, remainingLanes);\n }\n }\n function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n null !== rootFiber &&\n (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n }\n function captureCommitPhaseError(\n sourceFiber,\n nearestMountedAncestor,\n error\n ) {\n isRunningInsertionEffect = !1;\n if (3 === sourceFiber.tag)\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n else {\n for (; null !== nearestMountedAncestor; ) {\n if (3 === nearestMountedAncestor.tag) {\n captureCommitPhaseErrorOnRoot(\n nearestMountedAncestor,\n sourceFiber,\n error\n );\n return;\n }\n if (1 === nearestMountedAncestor.tag) {\n var instance = nearestMountedAncestor.stateNode;\n if (\n \"function\" ===\n typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n (\"function\" === typeof instance.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n ) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n error = createClassErrorUpdate(2);\n instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n null !== instance &&\n (initializeClassErrorUpdate(\n error,\n instance,\n nearestMountedAncestor,\n sourceFiber\n ),\n markRootUpdated$1(instance, 2),\n ensureRootIsScheduled(instance));\n return;\n }\n }\n nearestMountedAncestor = nearestMountedAncestor.return;\n }\n console.error(\n \"Internal React error: Attempted to capture a commit phase error inside a detached tree. This indicates a bug in React. Potential causes include deleting the same fiber more than once, committing an already-finished tree, or an inconsistent return pointer.\\n\\nError message:\\n\\n%s\",\n error\n );\n }\n }\n function attachPingListener(root, wakeable, lanes) {\n var pingCache = root.pingCache;\n if (null === pingCache) {\n pingCache = root.pingCache = new PossiblyWeakMap();\n var threadIDs = new Set();\n pingCache.set(wakeable, threadIDs);\n } else\n (threadIDs = pingCache.get(wakeable)),\n void 0 === threadIDs &&\n ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n threadIDs.has(lanes) ||\n ((workInProgressRootDidAttachPingListener = !0),\n threadIDs.add(lanes),\n (pingCache = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n isDevToolsPresent && restorePendingUpdaters(root, lanes),\n wakeable.then(pingCache, pingCache));\n }\n function pingSuspendedRoot(root, wakeable, pingedLanes) {\n var pingCache = root.pingCache;\n null !== pingCache && pingCache.delete(wakeable);\n root.pingedLanes |= root.suspendedLanes & pingedLanes;\n root.warmLanes &= ~pingedLanes;\n isConcurrentActEnvironment() &&\n null === ReactSharedInternals.actQueue &&\n console.error(\n \"A suspended resource finished loading inside a test, but the event was not wrapped in act(...).\\n\\nWhen testing, code that resolves suspended data should be wrapped into act(...):\\n\\nact(() => {\\n /* finish loading suspended data */\\n});\\n/* assert on the output */\\n\\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act\"\n );\n workInProgressRoot === root &&\n (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n (workInProgressRootExitStatus === RootSuspendedWithDelay ||\n (workInProgressRootExitStatus === RootSuspended &&\n (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes &&\n now$1() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS)\n ? (executionContext & RenderContext) === NoContext &&\n prepareFreshStack(root, 0)\n : (workInProgressRootPingedLanes |= pingedLanes),\n workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n (workInProgressSuspendedRetryLanes = 0));\n ensureRootIsScheduled(root);\n }\n function retryTimedOutBoundary(boundaryFiber, retryLane) {\n 0 === retryLane && (retryLane = claimNextRetryLane());\n boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n null !== boundaryFiber &&\n (markRootUpdated$1(boundaryFiber, retryLane),\n ensureRootIsScheduled(boundaryFiber));\n }\n function retryDehydratedSuspenseBoundary(boundaryFiber) {\n var suspenseState = boundaryFiber.memoizedState,\n retryLane = 0;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n }\n function resolveRetryWakeable(boundaryFiber, wakeable) {\n var retryLane = 0;\n switch (boundaryFiber.tag) {\n case 13:\n var retryCache = boundaryFiber.stateNode;\n var suspenseState = boundaryFiber.memoizedState;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n break;\n case 19:\n retryCache = boundaryFiber.stateNode;\n break;\n case 22:\n retryCache = boundaryFiber.stateNode._retryCache;\n break;\n default:\n throw Error(\n \"Pinged unknown suspense boundary type. This is probably a bug in React.\"\n );\n }\n null !== retryCache && retryCache.delete(wakeable);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n }\n function recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n root$jscomp$0,\n parentFiber,\n isInStrictMode\n ) {\n if (0 !== (parentFiber.subtreeFlags & 67117056))\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var root = root$jscomp$0,\n fiber = parentFiber,\n isStrictModeFiber = fiber.type === REACT_STRICT_MODE_TYPE;\n isStrictModeFiber = isInStrictMode || isStrictModeFiber;\n 22 !== fiber.tag\n ? fiber.flags & 67108864\n ? isStrictModeFiber &&\n runWithFiberInDEV(\n fiber,\n doubleInvokeEffectsOnFiber,\n root,\n fiber,\n (fiber.mode & NoStrictPassiveEffectsMode) === NoMode\n )\n : recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n root,\n fiber,\n isStrictModeFiber\n )\n : null === fiber.memoizedState &&\n (isStrictModeFiber && fiber.flags & 8192\n ? runWithFiberInDEV(\n fiber,\n doubleInvokeEffectsOnFiber,\n root,\n fiber\n )\n : fiber.subtreeFlags & 67108864 &&\n runWithFiberInDEV(\n fiber,\n recursivelyTraverseAndDoubleInvokeEffectsInDEV,\n root,\n fiber,\n isStrictModeFiber\n ));\n parentFiber = parentFiber.sibling;\n }\n }\n function doubleInvokeEffectsOnFiber(root, fiber) {\n var shouldDoubleInvokePassiveEffects =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : !0;\n setIsStrictModeForDevtools(!0);\n try {\n disappearLayoutEffects(fiber),\n shouldDoubleInvokePassiveEffects && disconnectPassiveEffect(fiber),\n reappearLayoutEffects(root, fiber.alternate, fiber, !1),\n shouldDoubleInvokePassiveEffects &&\n reconnectPassiveEffects(root, fiber, 0, null, !1, 0);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n function commitDoubleInvokeEffectsInDEV(root) {\n var doubleInvokeEffects = !0;\n root.current.mode & (StrictLegacyMode | StrictEffectsMode) ||\n (doubleInvokeEffects = !1);\n recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n root,\n root.current,\n doubleInvokeEffects\n );\n }\n function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {\n if ((executionContext & RenderContext) === NoContext) {\n var tag = fiber.tag;\n if (\n 3 === tag ||\n 1 === tag ||\n 0 === tag ||\n 11 === tag ||\n 14 === tag ||\n 15 === tag\n ) {\n tag = getComponentNameFromFiber(fiber) || \"ReactComponent\";\n if (null !== didWarnStateUpdateForNotYetMountedComponent) {\n if (didWarnStateUpdateForNotYetMountedComponent.has(tag)) return;\n didWarnStateUpdateForNotYetMountedComponent.add(tag);\n } else didWarnStateUpdateForNotYetMountedComponent = new Set([tag]);\n runWithFiberInDEV(fiber, function () {\n console.error(\n \"Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously later calls tries to update the component. Move this work to useEffect instead.\"\n );\n });\n }\n }\n }\n function restorePendingUpdaters(root, lanes) {\n isDevToolsPresent &&\n root.memoizedUpdaters.forEach(function (schedulingFiber) {\n addFiberToLanesMap(root, schedulingFiber, lanes);\n });\n }\n function scheduleCallback$1(priorityLevel, callback) {\n var actQueue = ReactSharedInternals.actQueue;\n return null !== actQueue\n ? (actQueue.push(callback), fakeActCallbackNode$1)\n : scheduleCallback$3(priorityLevel, callback);\n }\n function warnIfUpdatesNotWrappedWithActDEV(fiber) {\n isConcurrentActEnvironment() &&\n null === ReactSharedInternals.actQueue &&\n runWithFiberInDEV(fiber, function () {\n console.error(\n \"An update to %s inside a test was not wrapped in act(...).\\n\\nWhen testing, code that causes React state updates should be wrapped into act(...):\\n\\nact(() => {\\n /* fire events that update state */\\n});\\n/* assert on the output */\\n\\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act\",\n getComponentNameFromFiber(fiber)\n );\n });\n }\n function ensureRootIsScheduled(root) {\n root !== lastScheduledRoot &&\n null === root.next &&\n (null === lastScheduledRoot\n ? (firstScheduledRoot = lastScheduledRoot = root)\n : (lastScheduledRoot = lastScheduledRoot.next = root));\n mightHavePendingSyncWork = !0;\n null !== ReactSharedInternals.actQueue\n ? didScheduleMicrotask_act ||\n ((didScheduleMicrotask_act = !0), scheduleImmediateRootScheduleTask())\n : didScheduleMicrotask ||\n ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n }\n function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n if (!isFlushingWork && mightHavePendingSyncWork) {\n isFlushingWork = !0;\n do {\n var didPerformSomeWork = !1;\n for (var root = firstScheduledRoot; null !== root; ) {\n if (!onlyLegacy)\n if (0 !== syncTransitionLanes) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) var nextLanes = 0;\n else {\n var suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n nextLanes =\n (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n nextLanes &= pendingLanes & ~(suspendedLanes & ~pingedLanes);\n nextLanes =\n nextLanes & 201326741\n ? (nextLanes & 201326741) | 1\n : nextLanes\n ? nextLanes | 2\n : 0;\n }\n 0 !== nextLanes &&\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root, nextLanes));\n } else\n (nextLanes = workInProgressRootRenderLanes),\n (nextLanes = getNextLanes(\n root,\n root === workInProgressRoot ? nextLanes : 0,\n null !== root.cancelPendingCommit ||\n root.timeoutHandle !== noTimeout\n )),\n 0 === (nextLanes & 3) ||\n checkIfRootIsPrerendering(root, nextLanes) ||\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root, nextLanes));\n root = root.next;\n }\n } while (didPerformSomeWork);\n isFlushingWork = !1;\n }\n }\n function processRootScheduleInImmediateTask() {\n processRootScheduleInMicrotask();\n }\n function processRootScheduleInMicrotask() {\n mightHavePendingSyncWork =\n didScheduleMicrotask_act =\n didScheduleMicrotask =\n !1;\n var syncTransitionLanes = 0;\n 0 !== currentEventTransitionLane &&\n (shouldAttemptEagerTransition() &&\n (syncTransitionLanes = currentEventTransitionLane),\n (currentEventTransitionLane = 0));\n for (\n var currentTime = now$1(), prev = null, root = firstScheduledRoot;\n null !== root;\n\n ) {\n var next = root.next,\n nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n if (0 === nextLanes)\n (root.next = null),\n null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n null === next && (lastScheduledRoot = prev);\n else if (\n ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n )\n mightHavePendingSyncWork = !0;\n root = next;\n }\n flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n }\n function scheduleTaskForRootDuringMicrotask(root, currentTime) {\n for (\n var suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n expirationTimes = root.expirationTimes,\n lanes = root.pendingLanes & -62914561;\n 0 < lanes;\n\n ) {\n var index = 31 - clz32(lanes),\n lane = 1 << index,\n expirationTime = expirationTimes[index];\n if (-1 === expirationTime) {\n if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n expirationTimes[index] = computeExpirationTime(lane, currentTime);\n } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n lanes &= ~lane;\n }\n currentTime = workInProgressRoot;\n suspendedLanes = workInProgressRootRenderLanes;\n suspendedLanes = getNextLanes(\n root,\n root === currentTime ? suspendedLanes : 0,\n null !== root.cancelPendingCommit || root.timeoutHandle !== noTimeout\n );\n pingedLanes = root.callbackNode;\n if (\n 0 === suspendedLanes ||\n (root === currentTime &&\n (workInProgressSuspendedReason === SuspendedOnData ||\n workInProgressSuspendedReason === SuspendedOnAction)) ||\n null !== root.cancelPendingCommit\n )\n return (\n null !== pingedLanes && cancelCallback(pingedLanes),\n (root.callbackNode = null),\n (root.callbackPriority = 0)\n );\n if (\n 0 === (suspendedLanes & 3) ||\n checkIfRootIsPrerendering(root, suspendedLanes)\n ) {\n currentTime = suspendedLanes & -suspendedLanes;\n if (\n currentTime !== root.callbackPriority ||\n (null !== ReactSharedInternals.actQueue &&\n pingedLanes !== fakeActCallbackNode)\n )\n cancelCallback(pingedLanes);\n else return currentTime;\n switch (lanesToEventPriority(suspendedLanes)) {\n case DiscreteEventPriority:\n case ContinuousEventPriority:\n suspendedLanes = UserBlockingPriority;\n break;\n case DefaultEventPriority:\n suspendedLanes = NormalPriority$1;\n break;\n case IdleEventPriority:\n suspendedLanes = IdlePriority;\n break;\n default:\n suspendedLanes = NormalPriority$1;\n }\n pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n null !== ReactSharedInternals.actQueue\n ? (ReactSharedInternals.actQueue.push(pingedLanes),\n (suspendedLanes = fakeActCallbackNode))\n : (suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes));\n root.callbackPriority = currentTime;\n root.callbackNode = suspendedLanes;\n return currentTime;\n }\n null !== pingedLanes && cancelCallback(pingedLanes);\n root.callbackPriority = 2;\n root.callbackNode = null;\n return 2;\n }\n function performWorkOnRootViaSchedulerTask(root, didTimeout) {\n nestedUpdateScheduled = currentUpdateIsNested = !1;\n if (\n pendingEffectsStatus !== NO_PENDING_EFFECTS &&\n pendingEffectsStatus !== PENDING_PASSIVE_PHASE\n )\n return (root.callbackNode = null), (root.callbackPriority = 0), null;\n var originalCallbackNode = root.callbackNode;\n if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)\n return null;\n var workInProgressRootRenderLanes$jscomp$0 =\n workInProgressRootRenderLanes;\n workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n root,\n root === workInProgressRoot\n ? workInProgressRootRenderLanes$jscomp$0\n : 0,\n null !== root.cancelPendingCommit || root.timeoutHandle !== noTimeout\n );\n if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n performWorkOnRoot(\n root,\n workInProgressRootRenderLanes$jscomp$0,\n didTimeout\n );\n scheduleTaskForRootDuringMicrotask(root, now$1());\n return null != root.callbackNode &&\n root.callbackNode === originalCallbackNode\n ? performWorkOnRootViaSchedulerTask.bind(null, root)\n : null;\n }\n function performSyncWorkOnRoot(root, lanes) {\n if (flushPendingEffects()) return null;\n currentUpdateIsNested = nestedUpdateScheduled;\n nestedUpdateScheduled = !1;\n performWorkOnRoot(root, lanes, !0);\n }\n function cancelCallback(callbackNode) {\n callbackNode !== fakeActCallbackNode &&\n null !== callbackNode &&\n cancelCallback$1(callbackNode);\n }\n function scheduleImmediateRootScheduleTask() {\n null !== ReactSharedInternals.actQueue &&\n ReactSharedInternals.actQueue.push(function () {\n processRootScheduleInMicrotask();\n return null;\n });\n scheduleMicrotask(function () {\n (executionContext & (RenderContext | CommitContext)) !== NoContext\n ? scheduleCallback$3(\n ImmediatePriority,\n processRootScheduleInImmediateTask\n )\n : processRootScheduleInMicrotask();\n });\n }\n function requestTransitionLane() {\n 0 === currentEventTransitionLane &&\n (currentEventTransitionLane = claimNextTransitionLane());\n return currentEventTransitionLane;\n }\n function coerceFormActionProp(actionProp) {\n if (\n null == actionProp ||\n \"symbol\" === typeof actionProp ||\n \"boolean\" === typeof actionProp\n )\n return null;\n if (\"function\" === typeof actionProp) return actionProp;\n checkAttributeStringCoercion(actionProp, \"action\");\n return sanitizeURL(\"\" + actionProp);\n }\n function createFormDataWithSubmitter(form, submitter) {\n var temp = submitter.ownerDocument.createElement(\"input\");\n temp.name = submitter.name;\n temp.value = submitter.value;\n form.id && temp.setAttribute(\"form\", form.id);\n submitter.parentNode.insertBefore(temp, submitter);\n form = new FormData(form);\n temp.parentNode.removeChild(temp);\n return form;\n }\n function extractEvents$1(\n dispatchQueue,\n domEventName,\n maybeTargetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n if (\n \"submit\" === domEventName &&\n maybeTargetInst &&\n maybeTargetInst.stateNode === nativeEventTarget\n ) {\n var action = coerceFormActionProp(\n (nativeEventTarget[internalPropsKey] || null).action\n ),\n submitter = nativeEvent.submitter;\n submitter &&\n ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n ? coerceFormActionProp(domEventName.formAction)\n : submitter.getAttribute(\"formAction\")),\n null !== domEventName &&\n ((action = domEventName), (submitter = null)));\n var event = new SyntheticEvent(\n \"action\",\n \"action\",\n null,\n nativeEvent,\n nativeEventTarget\n );\n dispatchQueue.push({\n event: event,\n listeners: [\n {\n instance: null,\n listener: function () {\n if (nativeEvent.defaultPrevented) {\n if (0 !== currentEventTransitionLane) {\n var formData = submitter\n ? createFormDataWithSubmitter(\n nativeEventTarget,\n submitter\n )\n : new FormData(nativeEventTarget),\n pendingState = {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n };\n Object.freeze(pendingState);\n startHostTransition(\n maybeTargetInst,\n pendingState,\n null,\n formData\n );\n }\n } else\n \"function\" === typeof action &&\n (event.preventDefault(),\n (formData = submitter\n ? createFormDataWithSubmitter(\n nativeEventTarget,\n submitter\n )\n : new FormData(nativeEventTarget)),\n (pendingState = {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n }),\n Object.freeze(pendingState),\n startHostTransition(\n maybeTargetInst,\n pendingState,\n action,\n formData\n ));\n },\n currentTarget: nativeEventTarget\n }\n ]\n });\n }\n }\n function executeDispatch(event, listener, currentTarget) {\n event.currentTarget = currentTarget;\n try {\n listener(event);\n } catch (error) {\n reportGlobalError(error);\n }\n event.currentTarget = null;\n }\n function processDispatchQueue(dispatchQueue, eventSystemFlags) {\n eventSystemFlags = 0 !== (eventSystemFlags & 4);\n for (var i = 0; i < dispatchQueue.length; i++) {\n var _dispatchQueue$i = dispatchQueue[i];\n a: {\n var previousInstance = void 0,\n event = _dispatchQueue$i.event;\n _dispatchQueue$i = _dispatchQueue$i.listeners;\n if (eventSystemFlags)\n for (\n var i$jscomp$0 = _dispatchQueue$i.length - 1;\n 0 <= i$jscomp$0;\n i$jscomp$0--\n ) {\n var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n instance = _dispatchListeners$i.instance,\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n null !== instance\n ? runWithFiberInDEV(\n instance,\n executeDispatch,\n event,\n _dispatchListeners$i,\n currentTarget\n )\n : executeDispatch(event, _dispatchListeners$i, currentTarget);\n previousInstance = instance;\n }\n else\n for (\n i$jscomp$0 = 0;\n i$jscomp$0 < _dispatchQueue$i.length;\n i$jscomp$0++\n ) {\n _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n instance = _dispatchListeners$i.instance;\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n null !== instance\n ? runWithFiberInDEV(\n instance,\n executeDispatch,\n event,\n _dispatchListeners$i,\n currentTarget\n )\n : executeDispatch(event, _dispatchListeners$i, currentTarget);\n previousInstance = instance;\n }\n }\n }\n }\n function listenToNonDelegatedEvent(domEventName, targetElement) {\n nonDelegatedEvents.has(domEventName) ||\n console.error(\n 'Did not expect a listenToNonDelegatedEvent() call for \"%s\". This is a bug in React. Please file an issue.',\n domEventName\n );\n var listenerSet = targetElement[internalEventHandlersKey];\n void 0 === listenerSet &&\n (listenerSet = targetElement[internalEventHandlersKey] = new Set());\n var listenerSetKey = domEventName + \"__bubble\";\n listenerSet.has(listenerSetKey) ||\n (addTrappedEventListener(targetElement, domEventName, 2, !1),\n listenerSet.add(listenerSetKey));\n }\n function listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n nonDelegatedEvents.has(domEventName) &&\n !isCapturePhaseListener &&\n console.error(\n 'Did not expect a listenToNativeEvent() call for \"%s\" in the bubble phase. This is a bug in React. Please file an issue.',\n domEventName\n );\n var eventSystemFlags = 0;\n isCapturePhaseListener && (eventSystemFlags |= 4);\n addTrappedEventListener(\n target,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n );\n }\n function listenToAllSupportedEvents(rootContainerElement) {\n if (!rootContainerElement[listeningMarker]) {\n rootContainerElement[listeningMarker] = !0;\n allNativeEvents.forEach(function (domEventName) {\n \"selectionchange\" !== domEventName &&\n (nonDelegatedEvents.has(domEventName) ||\n listenToNativeEvent(domEventName, !1, rootContainerElement),\n listenToNativeEvent(domEventName, !0, rootContainerElement));\n });\n var ownerDocument =\n 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n null === ownerDocument ||\n ownerDocument[listeningMarker] ||\n ((ownerDocument[listeningMarker] = !0),\n listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n }\n }\n function addTrappedEventListener(\n targetContainer,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n ) {\n switch (getEventPriority(domEventName)) {\n case DiscreteEventPriority:\n var listenerWrapper = dispatchDiscreteEvent;\n break;\n case ContinuousEventPriority:\n listenerWrapper = dispatchContinuousEvent;\n break;\n default:\n listenerWrapper = dispatchEvent;\n }\n eventSystemFlags = listenerWrapper.bind(\n null,\n domEventName,\n eventSystemFlags,\n targetContainer\n );\n listenerWrapper = void 0;\n !passiveBrowserEventsSupported ||\n (\"touchstart\" !== domEventName &&\n \"touchmove\" !== domEventName &&\n \"wheel\" !== domEventName) ||\n (listenerWrapper = !0);\n isCapturePhaseListener\n ? void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n capture: !0,\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n : void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(\n domEventName,\n eventSystemFlags,\n !1\n );\n }\n function dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n targetInst$jscomp$0,\n targetContainer\n ) {\n var ancestorInst = targetInst$jscomp$0;\n if (\n 0 === (eventSystemFlags & 1) &&\n 0 === (eventSystemFlags & 2) &&\n null !== targetInst$jscomp$0\n )\n a: for (;;) {\n if (null === targetInst$jscomp$0) return;\n var nodeTag = targetInst$jscomp$0.tag;\n if (3 === nodeTag || 4 === nodeTag) {\n var container = targetInst$jscomp$0.stateNode.containerInfo;\n if (container === targetContainer) break;\n if (4 === nodeTag)\n for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n var grandTag = nodeTag.tag;\n if (\n (3 === grandTag || 4 === grandTag) &&\n nodeTag.stateNode.containerInfo === targetContainer\n )\n return;\n nodeTag = nodeTag.return;\n }\n for (; null !== container; ) {\n nodeTag = getClosestInstanceFromNode(container);\n if (null === nodeTag) return;\n grandTag = nodeTag.tag;\n if (\n 5 === grandTag ||\n 6 === grandTag ||\n 26 === grandTag ||\n 27 === grandTag\n ) {\n targetInst$jscomp$0 = ancestorInst = nodeTag;\n continue a;\n }\n container = container.parentNode;\n }\n }\n targetInst$jscomp$0 = targetInst$jscomp$0.return;\n }\n batchedUpdates$1(function () {\n var targetInst = ancestorInst,\n nativeEventTarget = getEventTarget(nativeEvent),\n dispatchQueue = [];\n a: {\n var reactName = topLevelEventsToReactNames.get(domEventName);\n if (void 0 !== reactName) {\n var SyntheticEventCtor = SyntheticEvent,\n reactEventType = domEventName;\n switch (domEventName) {\n case \"keypress\":\n if (0 === getEventCharCode(nativeEvent)) break a;\n case \"keydown\":\n case \"keyup\":\n SyntheticEventCtor = SyntheticKeyboardEvent;\n break;\n case \"focusin\":\n reactEventType = \"focus\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"focusout\":\n reactEventType = \"blur\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"beforeblur\":\n case \"afterblur\":\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"click\":\n if (2 === nativeEvent.button) break a;\n case \"auxclick\":\n case \"dblclick\":\n case \"mousedown\":\n case \"mousemove\":\n case \"mouseup\":\n case \"mouseout\":\n case \"mouseover\":\n case \"contextmenu\":\n SyntheticEventCtor = SyntheticMouseEvent;\n break;\n case \"drag\":\n case \"dragend\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"dragstart\":\n case \"drop\":\n SyntheticEventCtor = SyntheticDragEvent;\n break;\n case \"touchcancel\":\n case \"touchend\":\n case \"touchmove\":\n case \"touchstart\":\n SyntheticEventCtor = SyntheticTouchEvent;\n break;\n case ANIMATION_END:\n case ANIMATION_ITERATION:\n case ANIMATION_START:\n SyntheticEventCtor = SyntheticAnimationEvent;\n break;\n case TRANSITION_END:\n SyntheticEventCtor = SyntheticTransitionEvent;\n break;\n case \"scroll\":\n case \"scrollend\":\n SyntheticEventCtor = SyntheticUIEvent;\n break;\n case \"wheel\":\n SyntheticEventCtor = SyntheticWheelEvent;\n break;\n case \"copy\":\n case \"cut\":\n case \"paste\":\n SyntheticEventCtor = SyntheticClipboardEvent;\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"pointerup\":\n SyntheticEventCtor = SyntheticPointerEvent;\n break;\n case \"toggle\":\n case \"beforetoggle\":\n SyntheticEventCtor = SyntheticToggleEvent;\n }\n var inCapturePhase = 0 !== (eventSystemFlags & 4),\n accumulateTargetOnly =\n !inCapturePhase &&\n (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n reactEventName = inCapturePhase\n ? null !== reactName\n ? reactName + \"Capture\"\n : null\n : reactName;\n inCapturePhase = [];\n for (\n var instance = targetInst, lastHostComponent;\n null !== instance;\n\n ) {\n var _instance2 = instance;\n lastHostComponent = _instance2.stateNode;\n _instance2 = _instance2.tag;\n (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n null === lastHostComponent ||\n null === reactEventName ||\n ((_instance2 = getListener(instance, reactEventName)),\n null != _instance2 &&\n inCapturePhase.push(\n createDispatchListener(\n instance,\n _instance2,\n lastHostComponent\n )\n ));\n if (accumulateTargetOnly) break;\n instance = instance.return;\n }\n 0 < inCapturePhase.length &&\n ((reactName = new SyntheticEventCtor(\n reactName,\n reactEventType,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: reactName,\n listeners: inCapturePhase\n }));\n }\n }\n if (0 === (eventSystemFlags & 7)) {\n a: {\n reactName =\n \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n SyntheticEventCtor =\n \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n if (\n reactName &&\n nativeEvent !== currentReplayingEvent &&\n (reactEventType =\n nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n (getClosestInstanceFromNode(reactEventType) ||\n reactEventType[internalContainerInstanceKey])\n )\n break a;\n if (SyntheticEventCtor || reactName) {\n reactName =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget\n : (reactName = nativeEventTarget.ownerDocument)\n ? reactName.defaultView || reactName.parentWindow\n : window;\n if (SyntheticEventCtor) {\n if (\n ((reactEventType =\n nativeEvent.relatedTarget || nativeEvent.toElement),\n (SyntheticEventCtor = targetInst),\n (reactEventType = reactEventType\n ? getClosestInstanceFromNode(reactEventType)\n : null),\n null !== reactEventType &&\n ((accumulateTargetOnly =\n getNearestMountedFiber(reactEventType)),\n (inCapturePhase = reactEventType.tag),\n reactEventType !== accumulateTargetOnly ||\n (5 !== inCapturePhase &&\n 27 !== inCapturePhase &&\n 6 !== inCapturePhase)))\n )\n reactEventType = null;\n } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n if (SyntheticEventCtor !== reactEventType) {\n inCapturePhase = SyntheticMouseEvent;\n _instance2 = \"onMouseLeave\";\n reactEventName = \"onMouseEnter\";\n instance = \"mouse\";\n if (\n \"pointerout\" === domEventName ||\n \"pointerover\" === domEventName\n )\n (inCapturePhase = SyntheticPointerEvent),\n (_instance2 = \"onPointerLeave\"),\n (reactEventName = \"onPointerEnter\"),\n (instance = \"pointer\");\n accumulateTargetOnly =\n null == SyntheticEventCtor\n ? reactName\n : getNodeFromInstance(SyntheticEventCtor);\n lastHostComponent =\n null == reactEventType\n ? reactName\n : getNodeFromInstance(reactEventType);\n reactName = new inCapturePhase(\n _instance2,\n instance + \"leave\",\n SyntheticEventCtor,\n nativeEvent,\n nativeEventTarget\n );\n reactName.target = accumulateTargetOnly;\n reactName.relatedTarget = lastHostComponent;\n _instance2 = null;\n getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n ((inCapturePhase = new inCapturePhase(\n reactEventName,\n instance + \"enter\",\n reactEventType,\n nativeEvent,\n nativeEventTarget\n )),\n (inCapturePhase.target = lastHostComponent),\n (inCapturePhase.relatedTarget = accumulateTargetOnly),\n (_instance2 = inCapturePhase));\n accumulateTargetOnly = _instance2;\n if (SyntheticEventCtor && reactEventType)\n b: {\n inCapturePhase = SyntheticEventCtor;\n reactEventName = reactEventType;\n instance = 0;\n for (\n lastHostComponent = inCapturePhase;\n lastHostComponent;\n lastHostComponent = getParent(lastHostComponent)\n )\n instance++;\n lastHostComponent = 0;\n for (\n _instance2 = reactEventName;\n _instance2;\n _instance2 = getParent(_instance2)\n )\n lastHostComponent++;\n for (; 0 < instance - lastHostComponent; )\n (inCapturePhase = getParent(inCapturePhase)), instance--;\n for (; 0 < lastHostComponent - instance; )\n (reactEventName = getParent(reactEventName)),\n lastHostComponent--;\n for (; instance--; ) {\n if (\n inCapturePhase === reactEventName ||\n (null !== reactEventName &&\n inCapturePhase === reactEventName.alternate)\n )\n break b;\n inCapturePhase = getParent(inCapturePhase);\n reactEventName = getParent(reactEventName);\n }\n inCapturePhase = null;\n }\n else inCapturePhase = null;\n null !== SyntheticEventCtor &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n reactName,\n SyntheticEventCtor,\n inCapturePhase,\n !1\n );\n null !== reactEventType &&\n null !== accumulateTargetOnly &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n accumulateTargetOnly,\n reactEventType,\n inCapturePhase,\n !0\n );\n }\n }\n }\n a: {\n reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n SyntheticEventCtor =\n reactName.nodeName && reactName.nodeName.toLowerCase();\n if (\n \"select\" === SyntheticEventCtor ||\n (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n )\n var getTargetInstFunc = getTargetInstForChangeEvent;\n else if (isTextInputElement(reactName))\n if (isInputEventSupported)\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n var handleEventFunc = handleEventsForInputEventPolyfill;\n }\n else\n (SyntheticEventCtor = reactName.nodeName),\n !SyntheticEventCtor ||\n \"input\" !== SyntheticEventCtor.toLowerCase() ||\n (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n ? targetInst &&\n isCustomElement(targetInst.elementType) &&\n (getTargetInstFunc = getTargetInstForChangeEvent)\n : (getTargetInstFunc = getTargetInstForClickEvent);\n if (\n getTargetInstFunc &&\n (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n ) {\n createAndAccumulateChangeEvent(\n dispatchQueue,\n getTargetInstFunc,\n nativeEvent,\n nativeEventTarget\n );\n break a;\n }\n handleEventFunc &&\n handleEventFunc(domEventName, reactName, targetInst);\n \"focusout\" === domEventName &&\n targetInst &&\n \"number\" === reactName.type &&\n null != targetInst.memoizedProps.value &&\n setDefaultValue(reactName, \"number\", reactName.value);\n }\n handleEventFunc = targetInst\n ? getNodeFromInstance(targetInst)\n : window;\n switch (domEventName) {\n case \"focusin\":\n if (\n isTextInputElement(handleEventFunc) ||\n \"true\" === handleEventFunc.contentEditable\n )\n (activeElement = handleEventFunc),\n (activeElementInst = targetInst),\n (lastSelection = null);\n break;\n case \"focusout\":\n lastSelection = activeElementInst = activeElement = null;\n break;\n case \"mousedown\":\n mouseDown = !0;\n break;\n case \"contextmenu\":\n case \"mouseup\":\n case \"dragend\":\n mouseDown = !1;\n constructSelectEvent(\n dispatchQueue,\n nativeEvent,\n nativeEventTarget\n );\n break;\n case \"selectionchange\":\n if (skipSelectionChangeEvent) break;\n case \"keydown\":\n case \"keyup\":\n constructSelectEvent(\n dispatchQueue,\n nativeEvent,\n nativeEventTarget\n );\n }\n var fallbackData;\n if (canUseCompositionEvent)\n b: {\n switch (domEventName) {\n case \"compositionstart\":\n var eventType = \"onCompositionStart\";\n break b;\n case \"compositionend\":\n eventType = \"onCompositionEnd\";\n break b;\n case \"compositionupdate\":\n eventType = \"onCompositionUpdate\";\n break b;\n }\n eventType = void 0;\n }\n else\n isComposing\n ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n (eventType = \"onCompositionEnd\")\n : \"keydown\" === domEventName &&\n nativeEvent.keyCode === START_KEYCODE &&\n (eventType = \"onCompositionStart\");\n eventType &&\n (useFallbackCompositionData &&\n \"ko\" !== nativeEvent.locale &&\n (isComposing || \"onCompositionStart\" !== eventType\n ? \"onCompositionEnd\" === eventType &&\n isComposing &&\n (fallbackData = getData())\n : ((root = nativeEventTarget),\n (startText = \"value\" in root ? root.value : root.textContent),\n (isComposing = !0))),\n (handleEventFunc = accumulateTwoPhaseListeners(\n targetInst,\n eventType\n )),\n 0 < handleEventFunc.length &&\n ((eventType = new SyntheticCompositionEvent(\n eventType,\n domEventName,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: eventType,\n listeners: handleEventFunc\n }),\n fallbackData\n ? (eventType.data = fallbackData)\n : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n null !== fallbackData && (eventType.data = fallbackData))));\n if (\n (fallbackData = canUseTextInputEvent\n ? getNativeBeforeInputChars(domEventName, nativeEvent)\n : getFallbackBeforeInputChars(domEventName, nativeEvent))\n )\n (eventType = accumulateTwoPhaseListeners(\n targetInst,\n \"onBeforeInput\"\n )),\n 0 < eventType.length &&\n ((handleEventFunc = new SyntheticInputEvent(\n \"onBeforeInput\",\n \"beforeinput\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: handleEventFunc,\n listeners: eventType\n }),\n (handleEventFunc.data = fallbackData));\n extractEvents$1(\n dispatchQueue,\n domEventName,\n targetInst,\n nativeEvent,\n nativeEventTarget\n );\n }\n processDispatchQueue(dispatchQueue, eventSystemFlags);\n });\n }\n function createDispatchListener(instance, listener, currentTarget) {\n return {\n instance: instance,\n listener: listener,\n currentTarget: currentTarget\n };\n }\n function accumulateTwoPhaseListeners(targetFiber, reactName) {\n for (\n var captureName = reactName + \"Capture\", listeners = [];\n null !== targetFiber;\n\n ) {\n var _instance3 = targetFiber,\n stateNode = _instance3.stateNode;\n _instance3 = _instance3.tag;\n (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n null === stateNode ||\n ((_instance3 = getListener(targetFiber, captureName)),\n null != _instance3 &&\n listeners.unshift(\n createDispatchListener(targetFiber, _instance3, stateNode)\n ),\n (_instance3 = getListener(targetFiber, reactName)),\n null != _instance3 &&\n listeners.push(\n createDispatchListener(targetFiber, _instance3, stateNode)\n ));\n if (3 === targetFiber.tag) return listeners;\n targetFiber = targetFiber.return;\n }\n return [];\n }\n function getParent(inst) {\n if (null === inst) return null;\n do inst = inst.return;\n while (inst && 5 !== inst.tag && 27 !== inst.tag);\n return inst ? inst : null;\n }\n function accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n event,\n target,\n common,\n inCapturePhase\n ) {\n for (\n var registrationName = event._reactName, listeners = [];\n null !== target && target !== common;\n\n ) {\n var _instance4 = target,\n alternate = _instance4.alternate,\n stateNode = _instance4.stateNode;\n _instance4 = _instance4.tag;\n if (null !== alternate && alternate === common) break;\n (5 !== _instance4 && 26 !== _instance4 && 27 !== _instance4) ||\n null === stateNode ||\n ((alternate = stateNode),\n inCapturePhase\n ? ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.unshift(\n createDispatchListener(target, stateNode, alternate)\n ))\n : inCapturePhase ||\n ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.push(\n createDispatchListener(target, stateNode, alternate)\n )));\n target = target.return;\n }\n 0 !== listeners.length &&\n dispatchQueue.push({ event: event, listeners: listeners });\n }\n function validatePropertiesInDevelopment(type, props) {\n validateProperties$2(type, props);\n (\"input\" !== type && \"textarea\" !== type && \"select\" !== type) ||\n null == props ||\n null !== props.value ||\n didWarnValueNull ||\n ((didWarnValueNull = !0),\n \"select\" === type && props.multiple\n ? console.error(\n \"`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.\",\n type\n )\n : console.error(\n \"`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.\",\n type\n ));\n var eventRegistry = {\n registrationNameDependencies: registrationNameDependencies,\n possibleRegistrationNames: possibleRegistrationNames\n };\n isCustomElement(type) ||\n \"string\" === typeof props.is ||\n warnUnknownProperties(type, props, eventRegistry);\n props.contentEditable &&\n !props.suppressContentEditableWarning &&\n null != props.children &&\n console.error(\n \"A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional.\"\n );\n }\n function warnForPropDifference(\n propName,\n serverValue,\n clientValue,\n serverDifferences\n ) {\n serverValue !== clientValue &&\n ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),\n normalizeMarkupForTextOrAttribute(serverValue) !== clientValue &&\n (serverDifferences[propName] = serverValue));\n }\n function warnForExtraAttributes(\n domElement,\n attributeNames,\n serverDifferences\n ) {\n attributeNames.forEach(function (attributeName) {\n serverDifferences[getPropNameFromAttributeName(attributeName)] =\n \"style\" === attributeName\n ? getStylesObjectFromElement(domElement)\n : domElement.getAttribute(attributeName);\n });\n }\n function warnForInvalidEventListener(registrationName, listener) {\n !1 === listener\n ? console.error(\n \"Expected `%s` listener to be a function, instead got `false`.\\n\\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.\",\n registrationName,\n registrationName,\n registrationName\n )\n : console.error(\n \"Expected `%s` listener to be a function, instead got a value of `%s` type.\",\n registrationName,\n typeof listener\n );\n }\n function normalizeHTML(parent, html) {\n parent =\n parent.namespaceURI === MATH_NAMESPACE ||\n parent.namespaceURI === SVG_NAMESPACE\n ? parent.ownerDocument.createElementNS(\n parent.namespaceURI,\n parent.tagName\n )\n : parent.ownerDocument.createElement(parent.tagName);\n parent.innerHTML = html;\n return parent.innerHTML;\n }\n function normalizeMarkupForTextOrAttribute(markup) {\n willCoercionThrow(markup) &&\n (console.error(\n \"The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.\",\n typeName(markup)\n ),\n testStringCoercion(markup));\n return (\"string\" === typeof markup ? markup : \"\" + markup)\n .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n }\n function checkForUnmatchedText(serverText, clientText) {\n clientText = normalizeMarkupForTextOrAttribute(clientText);\n return normalizeMarkupForTextOrAttribute(serverText) === clientText\n ? !0\n : !1;\n }\n function noop$1() {}\n function setProp(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case \"children\":\n if (\"string\" === typeof value)\n validateTextNesting(value, tag, !1),\n \"body\" === tag ||\n (\"textarea\" === tag && \"\" === value) ||\n setTextContent(domElement, value);\n else if (\"number\" === typeof value || \"bigint\" === typeof value)\n validateTextNesting(\"\" + value, tag, !1),\n \"body\" !== tag && setTextContent(domElement, \"\" + value);\n break;\n case \"className\":\n setValueForKnownAttribute(domElement, \"class\", value);\n break;\n case \"tabIndex\":\n setValueForKnownAttribute(domElement, \"tabindex\", value);\n break;\n case \"dir\":\n case \"role\":\n case \"viewBox\":\n case \"width\":\n case \"height\":\n setValueForKnownAttribute(domElement, key, value);\n break;\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"data\":\n if (\"object\" !== tag) {\n setValueForKnownAttribute(domElement, \"data\", value);\n break;\n }\n case \"src\":\n case \"href\":\n if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n \"src\" === key\n ? console.error(\n 'An empty string (\"\") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n key,\n key\n )\n : console.error(\n 'An empty string (\"\") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n key,\n key\n );\n domElement.removeAttribute(key);\n break;\n }\n if (\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n checkAttributeStringCoercion(value, key);\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"action\":\n case \"formAction\":\n null != value &&\n (\"form\" === tag\n ? \"formAction\" === key\n ? console.error(\n \"You can only pass the formAction prop to <input> or <button>. Use the action prop on <form>.\"\n )\n : \"function\" === typeof value &&\n ((null == props.encType && null == props.method) ||\n didWarnFormActionMethod ||\n ((didWarnFormActionMethod = !0),\n console.error(\n \"Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden.\"\n )),\n null == props.target ||\n didWarnFormActionTarget ||\n ((didWarnFormActionTarget = !0),\n console.error(\n \"Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window.\"\n )))\n : \"input\" === tag || \"button\" === tag\n ? \"action\" === key\n ? console.error(\n \"You can only pass the action prop to <form>. Use the formAction prop on <input> or <button>.\"\n )\n : \"input\" !== tag ||\n \"submit\" === props.type ||\n \"image\" === props.type ||\n didWarnFormActionType\n ? \"button\" !== tag ||\n null == props.type ||\n \"submit\" === props.type ||\n didWarnFormActionType\n ? \"function\" === typeof value &&\n (null == props.name ||\n didWarnFormActionName ||\n ((didWarnFormActionName = !0),\n console.error(\n 'Cannot specify a \"name\" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'\n )),\n (null == props.formEncType &&\n null == props.formMethod) ||\n didWarnFormActionMethod ||\n ((didWarnFormActionMethod = !0),\n console.error(\n \"Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden.\"\n )),\n null == props.formTarget ||\n didWarnFormActionTarget ||\n ((didWarnFormActionTarget = !0),\n console.error(\n \"Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window.\"\n )))\n : ((didWarnFormActionType = !0),\n console.error(\n 'A button can only specify a formAction along with type=\"submit\" or no type.'\n ))\n : ((didWarnFormActionType = !0),\n console.error(\n 'An input can only specify a formAction along with type=\"submit\" or type=\"image\".'\n ))\n : \"action\" === key\n ? console.error(\n \"You can only pass the action prop to <form>.\"\n )\n : console.error(\n \"You can only pass the formAction prop to <input> or <button>.\"\n ));\n if (\"function\" === typeof value) {\n domElement.setAttribute(\n key,\n \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n );\n break;\n } else\n \"function\" === typeof prevValue &&\n (\"formAction\" === key\n ? (\"input\" !== tag &&\n setProp(domElement, tag, \"name\", props.name, props, null),\n setProp(\n domElement,\n tag,\n \"formEncType\",\n props.formEncType,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formMethod\",\n props.formMethod,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formTarget\",\n props.formTarget,\n props,\n null\n ))\n : (setProp(\n domElement,\n tag,\n \"encType\",\n props.encType,\n props,\n null\n ),\n setProp(domElement, tag, \"method\", props.method, props, null),\n setProp(\n domElement,\n tag,\n \"target\",\n props.target,\n props,\n null\n )));\n if (\n null == value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n checkAttributeStringCoercion(value, key);\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"onClick\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n (domElement.onclick = noop$1));\n break;\n case \"onScroll\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scroll\", domElement));\n break;\n case \"onScrollEnd\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scrollend\", domElement));\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(\n \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information.\"\n );\n key = value.__html;\n if (null != key) {\n if (null != props.children)\n throw Error(\n \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\"\n );\n domElement.innerHTML = key;\n }\n }\n break;\n case \"multiple\":\n domElement.multiple =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"muted\":\n domElement.muted =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"autoFocus\":\n break;\n case \"xlinkHref\":\n if (\n null == value ||\n \"function\" === typeof value ||\n \"boolean\" === typeof value ||\n \"symbol\" === typeof value\n ) {\n domElement.removeAttribute(\"xlink:href\");\n break;\n }\n checkAttributeStringCoercion(value, key);\n key = sanitizeURL(\"\" + value);\n domElement.setAttributeNS(xlinkNamespace, \"xlink:href\", key);\n break;\n case \"contentEditable\":\n case \"spellCheck\":\n case \"draggable\":\n case \"value\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value\n ? (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, \"\" + value))\n : domElement.removeAttribute(key);\n break;\n case \"inert\":\n \"\" !== value ||\n didWarnForNewBooleanPropsWithEmptyValue[key] ||\n ((didWarnForNewBooleanPropsWithEmptyValue[key] = !0),\n console.error(\n \"Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.\",\n key\n ));\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n value && \"function\" !== typeof value && \"symbol\" !== typeof value\n ? domElement.setAttribute(key, \"\")\n : domElement.removeAttribute(key);\n break;\n case \"capture\":\n case \"download\":\n !0 === value\n ? domElement.setAttribute(key, \"\")\n : !1 !== value &&\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value\n ? (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, value))\n : domElement.removeAttribute(key);\n break;\n case \"cols\":\n case \"rows\":\n case \"size\":\n case \"span\":\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value &&\n !isNaN(value) &&\n 1 <= value\n ? (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, value))\n : domElement.removeAttribute(key);\n break;\n case \"rowSpan\":\n case \"start\":\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n isNaN(value)\n ? domElement.removeAttribute(key)\n : (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, value));\n break;\n case \"popover\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n setValueForAttribute(domElement, \"popover\", value);\n break;\n case \"xlinkActuate\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:actuate\",\n value\n );\n break;\n case \"xlinkArcrole\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:arcrole\",\n value\n );\n break;\n case \"xlinkRole\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:role\",\n value\n );\n break;\n case \"xlinkShow\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:show\",\n value\n );\n break;\n case \"xlinkTitle\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:title\",\n value\n );\n break;\n case \"xlinkType\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:type\",\n value\n );\n break;\n case \"xmlBase\":\n setValueForNamespacedAttribute(\n domElement,\n xmlNamespace,\n \"xml:base\",\n value\n );\n break;\n case \"xmlLang\":\n setValueForNamespacedAttribute(\n domElement,\n xmlNamespace,\n \"xml:lang\",\n value\n );\n break;\n case \"xmlSpace\":\n setValueForNamespacedAttribute(\n domElement,\n xmlNamespace,\n \"xml:space\",\n value\n );\n break;\n case \"is\":\n null != prevValue &&\n console.error(\n 'Cannot update the \"is\" prop after it has been initialized.'\n );\n setValueForAttribute(domElement, \"is\", value);\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n case \"popoverTarget\":\n didWarnPopoverTargetObject ||\n null == value ||\n \"object\" !== typeof value ||\n ((didWarnPopoverTargetObject = !0),\n console.error(\n \"The `popoverTarget` prop expects the ID of an Element as a string. Received %s instead.\",\n value\n ));\n default:\n !(2 < key.length) ||\n (\"o\" !== key[0] && \"O\" !== key[0]) ||\n (\"n\" !== key[1] && \"N\" !== key[1])\n ? ((key = getAttributeAlias(key)),\n setValueForAttribute(domElement, key, value))\n : registrationNameDependencies.hasOwnProperty(key) &&\n null != value &&\n \"function\" !== typeof value &&\n warnForInvalidEventListener(key, value);\n }\n }\n function setPropOnCustomElement(\n domElement,\n tag,\n key,\n value,\n props,\n prevValue\n ) {\n switch (key) {\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(\n \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information.\"\n );\n key = value.__html;\n if (null != key) {\n if (null != props.children)\n throw Error(\n \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\"\n );\n domElement.innerHTML = key;\n }\n }\n break;\n case \"children\":\n \"string\" === typeof value\n ? setTextContent(domElement, value)\n : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n setTextContent(domElement, \"\" + value);\n break;\n case \"onScroll\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scroll\", domElement));\n break;\n case \"onScrollEnd\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scrollend\", domElement));\n break;\n case \"onClick\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n (domElement.onclick = noop$1));\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n default:\n if (registrationNameDependencies.hasOwnProperty(key))\n null != value &&\n \"function\" !== typeof value &&\n warnForInvalidEventListener(key, value);\n else\n a: {\n if (\n \"o\" === key[0] &&\n \"n\" === key[1] &&\n ((props = key.endsWith(\"Capture\")),\n (tag = key.slice(2, props ? key.length - 7 : void 0)),\n (prevValue = domElement[internalPropsKey] || null),\n (prevValue = null != prevValue ? prevValue[key] : null),\n \"function\" === typeof prevValue &&\n domElement.removeEventListener(tag, prevValue, props),\n \"function\" === typeof value)\n ) {\n \"function\" !== typeof prevValue &&\n null !== prevValue &&\n (key in domElement\n ? (domElement[key] = null)\n : domElement.hasAttribute(key) &&\n domElement.removeAttribute(key));\n domElement.addEventListener(tag, value, props);\n break a;\n }\n key in domElement\n ? (domElement[key] = value)\n : !0 === value\n ? domElement.setAttribute(key, \"\")\n : setValueForAttribute(domElement, key, value);\n }\n }\n }\n function setInitialProperties(domElement, tag, props) {\n validatePropertiesInDevelopment(tag, props);\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"img\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n var hasSrc = !1,\n hasSrcSet = !1,\n propKey;\n for (propKey in props)\n if (props.hasOwnProperty(propKey)) {\n var propValue = props[propKey];\n if (null != propValue)\n switch (propKey) {\n case \"src\":\n hasSrc = !0;\n break;\n case \"srcSet\":\n hasSrcSet = !0;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n default:\n setProp(domElement, tag, propKey, propValue, props, null);\n }\n }\n hasSrcSet &&\n setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n return;\n case \"input\":\n checkControlledValueProps(\"input\", props);\n listenToNonDelegatedEvent(\"invalid\", domElement);\n var defaultValue = (propKey = propValue = hasSrcSet = null),\n checked = null,\n defaultChecked = null;\n for (hasSrc in props)\n if (props.hasOwnProperty(hasSrc)) {\n var _propValue = props[hasSrc];\n if (null != _propValue)\n switch (hasSrc) {\n case \"name\":\n hasSrcSet = _propValue;\n break;\n case \"type\":\n propValue = _propValue;\n break;\n case \"checked\":\n checked = _propValue;\n break;\n case \"defaultChecked\":\n defaultChecked = _propValue;\n break;\n case \"value\":\n propKey = _propValue;\n break;\n case \"defaultValue\":\n defaultValue = _propValue;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != _propValue)\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n break;\n default:\n setProp(domElement, tag, hasSrc, _propValue, props, null);\n }\n }\n validateInputProps(domElement, props);\n initInput(\n domElement,\n propKey,\n defaultValue,\n checked,\n defaultChecked,\n propValue,\n hasSrcSet,\n !1\n );\n track(domElement);\n return;\n case \"select\":\n checkControlledValueProps(\"select\", props);\n listenToNonDelegatedEvent(\"invalid\", domElement);\n hasSrc = propValue = propKey = null;\n for (hasSrcSet in props)\n if (\n props.hasOwnProperty(hasSrcSet) &&\n ((defaultValue = props[hasSrcSet]), null != defaultValue)\n )\n switch (hasSrcSet) {\n case \"value\":\n propKey = defaultValue;\n break;\n case \"defaultValue\":\n propValue = defaultValue;\n break;\n case \"multiple\":\n hasSrc = defaultValue;\n default:\n setProp(\n domElement,\n tag,\n hasSrcSet,\n defaultValue,\n props,\n null\n );\n }\n validateSelectProps(domElement, props);\n tag = propKey;\n props = propValue;\n domElement.multiple = !!hasSrc;\n null != tag\n ? updateOptions(domElement, !!hasSrc, tag, !1)\n : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n return;\n case \"textarea\":\n checkControlledValueProps(\"textarea\", props);\n listenToNonDelegatedEvent(\"invalid\", domElement);\n propKey = hasSrcSet = hasSrc = null;\n for (propValue in props)\n if (\n props.hasOwnProperty(propValue) &&\n ((defaultValue = props[propValue]), null != defaultValue)\n )\n switch (propValue) {\n case \"value\":\n hasSrc = defaultValue;\n break;\n case \"defaultValue\":\n hasSrcSet = defaultValue;\n break;\n case \"children\":\n propKey = defaultValue;\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != defaultValue)\n throw Error(\n \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\"\n );\n break;\n default:\n setProp(\n domElement,\n tag,\n propValue,\n defaultValue,\n props,\n null\n );\n }\n validateTextareaProps(domElement, props);\n initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n track(domElement);\n return;\n case \"option\":\n validateOptionProps(domElement, props);\n for (checked in props)\n if (\n props.hasOwnProperty(checked) &&\n ((hasSrc = props[checked]), null != hasSrc)\n )\n switch (checked) {\n case \"selected\":\n domElement.selected =\n hasSrc &&\n \"function\" !== typeof hasSrc &&\n \"symbol\" !== typeof hasSrc;\n break;\n default:\n setProp(domElement, tag, checked, hasSrc, props, null);\n }\n return;\n case \"dialog\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n listenToNonDelegatedEvent(\"cancel\", domElement);\n listenToNonDelegatedEvent(\"close\", domElement);\n break;\n case \"iframe\":\n case \"object\":\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"video\":\n case \"audio\":\n for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n break;\n case \"image\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", domElement);\n break;\n case \"embed\":\n case \"source\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", domElement),\n listenToNonDelegatedEvent(\"load\", domElement);\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (defaultChecked in props)\n if (\n props.hasOwnProperty(defaultChecked) &&\n ((hasSrc = props[defaultChecked]), null != hasSrc)\n )\n switch (defaultChecked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n default:\n setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (_propValue in props)\n props.hasOwnProperty(_propValue) &&\n ((hasSrc = props[_propValue]),\n void 0 !== hasSrc &&\n setPropOnCustomElement(\n domElement,\n tag,\n _propValue,\n hasSrc,\n props,\n void 0\n ));\n return;\n }\n }\n for (defaultValue in props)\n props.hasOwnProperty(defaultValue) &&\n ((hasSrc = props[defaultValue]),\n null != hasSrc &&\n setProp(domElement, tag, defaultValue, hasSrc, props, null));\n }\n function updateProperties(domElement, tag, lastProps, nextProps) {\n validatePropertiesInDevelopment(tag, nextProps);\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"input\":\n var name = null,\n type = null,\n value = null,\n defaultValue = null,\n lastDefaultValue = null,\n checked = null,\n defaultChecked = null;\n for (propKey in lastProps) {\n var lastProp = lastProps[propKey];\n if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n switch (propKey) {\n case \"checked\":\n break;\n case \"value\":\n break;\n case \"defaultValue\":\n lastDefaultValue = lastProp;\n default:\n nextProps.hasOwnProperty(propKey) ||\n setProp(\n domElement,\n tag,\n propKey,\n null,\n nextProps,\n lastProp\n );\n }\n }\n for (var _propKey8 in nextProps) {\n var propKey = nextProps[_propKey8];\n lastProp = lastProps[_propKey8];\n if (\n nextProps.hasOwnProperty(_propKey8) &&\n (null != propKey || null != lastProp)\n )\n switch (_propKey8) {\n case \"type\":\n type = propKey;\n break;\n case \"name\":\n name = propKey;\n break;\n case \"checked\":\n checked = propKey;\n break;\n case \"defaultChecked\":\n defaultChecked = propKey;\n break;\n case \"value\":\n value = propKey;\n break;\n case \"defaultValue\":\n defaultValue = propKey;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propKey)\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n break;\n default:\n propKey !== lastProp &&\n setProp(\n domElement,\n tag,\n _propKey8,\n propKey,\n nextProps,\n lastProp\n );\n }\n }\n tag =\n \"checkbox\" === lastProps.type || \"radio\" === lastProps.type\n ? null != lastProps.checked\n : null != lastProps.value;\n nextProps =\n \"checkbox\" === nextProps.type || \"radio\" === nextProps.type\n ? null != nextProps.checked\n : null != nextProps.value;\n tag ||\n !nextProps ||\n didWarnUncontrolledToControlled ||\n (console.error(\n \"A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components\"\n ),\n (didWarnUncontrolledToControlled = !0));\n !tag ||\n nextProps ||\n didWarnControlledToUncontrolled ||\n (console.error(\n \"A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components\"\n ),\n (didWarnControlledToUncontrolled = !0));\n updateInput(\n domElement,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n );\n return;\n case \"select\":\n propKey = value = defaultValue = _propKey8 = null;\n for (type in lastProps)\n if (\n ((lastDefaultValue = lastProps[type]),\n lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n )\n switch (type) {\n case \"value\":\n break;\n case \"multiple\":\n propKey = lastDefaultValue;\n default:\n nextProps.hasOwnProperty(type) ||\n setProp(\n domElement,\n tag,\n type,\n null,\n nextProps,\n lastDefaultValue\n );\n }\n for (name in nextProps)\n if (\n ((type = nextProps[name]),\n (lastDefaultValue = lastProps[name]),\n nextProps.hasOwnProperty(name) &&\n (null != type || null != lastDefaultValue))\n )\n switch (name) {\n case \"value\":\n _propKey8 = type;\n break;\n case \"defaultValue\":\n defaultValue = type;\n break;\n case \"multiple\":\n value = type;\n default:\n type !== lastDefaultValue &&\n setProp(\n domElement,\n tag,\n name,\n type,\n nextProps,\n lastDefaultValue\n );\n }\n nextProps = defaultValue;\n tag = value;\n lastProps = propKey;\n null != _propKey8\n ? updateOptions(domElement, !!tag, _propKey8, !1)\n : !!lastProps !== !!tag &&\n (null != nextProps\n ? updateOptions(domElement, !!tag, nextProps, !0)\n : updateOptions(domElement, !!tag, tag ? [] : \"\", !1));\n return;\n case \"textarea\":\n propKey = _propKey8 = null;\n for (defaultValue in lastProps)\n if (\n ((name = lastProps[defaultValue]),\n lastProps.hasOwnProperty(defaultValue) &&\n null != name &&\n !nextProps.hasOwnProperty(defaultValue))\n )\n switch (defaultValue) {\n case \"value\":\n break;\n case \"children\":\n break;\n default:\n setProp(domElement, tag, defaultValue, null, nextProps, name);\n }\n for (value in nextProps)\n if (\n ((name = nextProps[value]),\n (type = lastProps[value]),\n nextProps.hasOwnProperty(value) && (null != name || null != type))\n )\n switch (value) {\n case \"value\":\n _propKey8 = name;\n break;\n case \"defaultValue\":\n propKey = name;\n break;\n case \"children\":\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != name)\n throw Error(\n \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\"\n );\n break;\n default:\n name !== type &&\n setProp(domElement, tag, value, name, nextProps, type);\n }\n updateTextarea(domElement, _propKey8, propKey);\n return;\n case \"option\":\n for (var _propKey13 in lastProps)\n if (\n ((_propKey8 = lastProps[_propKey13]),\n lastProps.hasOwnProperty(_propKey13) &&\n null != _propKey8 &&\n !nextProps.hasOwnProperty(_propKey13))\n )\n switch (_propKey13) {\n case \"selected\":\n domElement.selected = !1;\n break;\n default:\n setProp(\n domElement,\n tag,\n _propKey13,\n null,\n nextProps,\n _propKey8\n );\n }\n for (lastDefaultValue in nextProps)\n if (\n ((_propKey8 = nextProps[lastDefaultValue]),\n (propKey = lastProps[lastDefaultValue]),\n nextProps.hasOwnProperty(lastDefaultValue) &&\n _propKey8 !== propKey &&\n (null != _propKey8 || null != propKey))\n )\n switch (lastDefaultValue) {\n case \"selected\":\n domElement.selected =\n _propKey8 &&\n \"function\" !== typeof _propKey8 &&\n \"symbol\" !== typeof _propKey8;\n break;\n default:\n setProp(\n domElement,\n tag,\n lastDefaultValue,\n _propKey8,\n nextProps,\n propKey\n );\n }\n return;\n case \"img\":\n case \"link\":\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"embed\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"source\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (var _propKey15 in lastProps)\n (_propKey8 = lastProps[_propKey15]),\n lastProps.hasOwnProperty(_propKey15) &&\n null != _propKey8 &&\n !nextProps.hasOwnProperty(_propKey15) &&\n setProp(\n domElement,\n tag,\n _propKey15,\n null,\n nextProps,\n _propKey8\n );\n for (checked in nextProps)\n if (\n ((_propKey8 = nextProps[checked]),\n (propKey = lastProps[checked]),\n nextProps.hasOwnProperty(checked) &&\n _propKey8 !== propKey &&\n (null != _propKey8 || null != propKey))\n )\n switch (checked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != _propKey8)\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n break;\n default:\n setProp(\n domElement,\n tag,\n checked,\n _propKey8,\n nextProps,\n propKey\n );\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (var _propKey17 in lastProps)\n (_propKey8 = lastProps[_propKey17]),\n lastProps.hasOwnProperty(_propKey17) &&\n void 0 !== _propKey8 &&\n !nextProps.hasOwnProperty(_propKey17) &&\n setPropOnCustomElement(\n domElement,\n tag,\n _propKey17,\n void 0,\n nextProps,\n _propKey8\n );\n for (defaultChecked in nextProps)\n (_propKey8 = nextProps[defaultChecked]),\n (propKey = lastProps[defaultChecked]),\n !nextProps.hasOwnProperty(defaultChecked) ||\n _propKey8 === propKey ||\n (void 0 === _propKey8 && void 0 === propKey) ||\n setPropOnCustomElement(\n domElement,\n tag,\n defaultChecked,\n _propKey8,\n nextProps,\n propKey\n );\n return;\n }\n }\n for (var _propKey19 in lastProps)\n (_propKey8 = lastProps[_propKey19]),\n lastProps.hasOwnProperty(_propKey19) &&\n null != _propKey8 &&\n !nextProps.hasOwnProperty(_propKey19) &&\n setProp(domElement, tag, _propKey19, null, nextProps, _propKey8);\n for (lastProp in nextProps)\n (_propKey8 = nextProps[lastProp]),\n (propKey = lastProps[lastProp]),\n !nextProps.hasOwnProperty(lastProp) ||\n _propKey8 === propKey ||\n (null == _propKey8 && null == propKey) ||\n setProp(domElement, tag, lastProp, _propKey8, nextProps, propKey);\n }\n function getPropNameFromAttributeName(attrName) {\n switch (attrName) {\n case \"class\":\n return \"className\";\n case \"for\":\n return \"htmlFor\";\n default:\n return attrName;\n }\n }\n function getStylesObjectFromElement(domElement) {\n var serverValueInObjectForm = {};\n domElement = domElement.style;\n for (var i = 0; i < domElement.length; i++) {\n var styleName = domElement[i];\n serverValueInObjectForm[styleName] =\n domElement.getPropertyValue(styleName);\n }\n return serverValueInObjectForm;\n }\n function diffHydratedStyles(domElement, value$jscomp$0, serverDifferences) {\n if (null != value$jscomp$0 && \"object\" !== typeof value$jscomp$0)\n console.error(\n \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\"\n );\n else {\n var clientValue;\n var delimiter = (clientValue = \"\"),\n styleName;\n for (styleName in value$jscomp$0)\n if (value$jscomp$0.hasOwnProperty(styleName)) {\n var value = value$jscomp$0[styleName];\n null != value &&\n \"boolean\" !== typeof value &&\n \"\" !== value &&\n (0 === styleName.indexOf(\"--\")\n ? (checkCSSPropertyStringCoercion(value, styleName),\n (clientValue +=\n delimiter + styleName + \":\" + (\"\" + value).trim()))\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? (checkCSSPropertyStringCoercion(value, styleName),\n (clientValue +=\n delimiter +\n styleName\n .replace(uppercasePattern, \"-$1\")\n .toLowerCase()\n .replace(msPattern$1, \"-ms-\") +\n \":\" +\n (\"\" + value).trim()))\n : (clientValue +=\n delimiter +\n styleName\n .replace(uppercasePattern, \"-$1\")\n .toLowerCase()\n .replace(msPattern$1, \"-ms-\") +\n \":\" +\n value +\n \"px\"),\n (delimiter = \";\"));\n }\n clientValue = clientValue || null;\n value$jscomp$0 = domElement.getAttribute(\"style\");\n value$jscomp$0 !== clientValue &&\n ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),\n normalizeMarkupForTextOrAttribute(value$jscomp$0) !== clientValue &&\n (serverDifferences.style = getStylesObjectFromElement(domElement)));\n }\n }\n function hydrateAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n (checkAttributeStringCoercion(value, propKey),\n domElement === \"\" + value)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateBooleanAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement) {\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n return;\n }\n if (!value) return;\n } else\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n break;\n default:\n if (value) return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateBooleanishAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n break;\n default:\n if (\n (checkAttributeStringCoercion(value, attributeName),\n domElement === \"\" + value)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateNumericAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n return;\n default:\n if (isNaN(value)) return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n !isNaN(value) &&\n (checkAttributeStringCoercion(value, propKey),\n domElement === \"\" + value)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateSanitizedAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n (checkAttributeStringCoercion(value, propKey),\n (attributeName = sanitizeURL(\"\" + value)),\n domElement === attributeName)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function diffHydratedProperties(domElement, tag, props, hostContext) {\n for (\n var serverDifferences = {},\n extraAttributes = new Set(),\n attributes = domElement.attributes,\n i = 0;\n i < attributes.length;\n i++\n )\n switch (attributes[i].name.toLowerCase()) {\n case \"value\":\n break;\n case \"checked\":\n break;\n case \"selected\":\n break;\n default:\n extraAttributes.add(attributes[i].name);\n }\n if (isCustomElement(tag))\n for (var propKey in props) {\n if (props.hasOwnProperty(propKey)) {\n var value = props[propKey];\n if (null != value)\n if (registrationNameDependencies.hasOwnProperty(propKey))\n \"function\" !== typeof value &&\n warnForInvalidEventListener(propKey, value);\n else if (!0 !== props.suppressHydrationWarning)\n switch (propKey) {\n case \"children\":\n (\"string\" !== typeof value && \"number\" !== typeof value) ||\n warnForPropDifference(\n \"children\",\n domElement.textContent,\n value,\n serverDifferences\n );\n continue;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n continue;\n case \"dangerouslySetInnerHTML\":\n attributes = domElement.innerHTML;\n value = value ? value.__html : void 0;\n null != value &&\n ((value = normalizeHTML(domElement, value)),\n warnForPropDifference(\n propKey,\n attributes,\n value,\n serverDifferences\n ));\n continue;\n case \"style\":\n extraAttributes.delete(propKey);\n diffHydratedStyles(domElement, value, serverDifferences);\n continue;\n case \"offsetParent\":\n case \"offsetTop\":\n case \"offsetLeft\":\n case \"offsetWidth\":\n case \"offsetHeight\":\n case \"isContentEditable\":\n case \"outerText\":\n case \"outerHTML\":\n extraAttributes.delete(propKey.toLowerCase());\n console.error(\n \"Assignment to read-only property will result in a no-op: `%s`\",\n propKey\n );\n continue;\n case \"className\":\n extraAttributes.delete(\"class\");\n attributes = getValueForAttributeOnCustomComponent(\n domElement,\n \"class\",\n value\n );\n warnForPropDifference(\n \"className\",\n attributes,\n value,\n serverDifferences\n );\n continue;\n default:\n hostContext.context === HostContextNamespaceNone &&\n \"svg\" !== tag &&\n \"math\" !== tag\n ? extraAttributes.delete(propKey.toLowerCase())\n : extraAttributes.delete(propKey),\n (attributes = getValueForAttributeOnCustomComponent(\n domElement,\n propKey,\n value\n )),\n warnForPropDifference(\n propKey,\n attributes,\n value,\n serverDifferences\n );\n }\n }\n }\n else\n for (value in props)\n if (\n props.hasOwnProperty(value) &&\n ((propKey = props[value]), null != propKey)\n )\n if (registrationNameDependencies.hasOwnProperty(value))\n \"function\" !== typeof propKey &&\n warnForInvalidEventListener(value, propKey);\n else if (!0 !== props.suppressHydrationWarning)\n switch (value) {\n case \"children\":\n (\"string\" !== typeof propKey &&\n \"number\" !== typeof propKey) ||\n warnForPropDifference(\n \"children\",\n domElement.textContent,\n propKey,\n serverDifferences\n );\n continue;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"value\":\n case \"checked\":\n case \"selected\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n continue;\n case \"dangerouslySetInnerHTML\":\n attributes = domElement.innerHTML;\n propKey = propKey ? propKey.__html : void 0;\n null != propKey &&\n ((propKey = normalizeHTML(domElement, propKey)),\n attributes !== propKey &&\n (serverDifferences[value] = { __html: attributes }));\n continue;\n case \"className\":\n hydrateAttribute(\n domElement,\n value,\n \"class\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"tabIndex\":\n hydrateAttribute(\n domElement,\n value,\n \"tabindex\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"style\":\n extraAttributes.delete(value);\n diffHydratedStyles(domElement, propKey, serverDifferences);\n continue;\n case \"multiple\":\n extraAttributes.delete(value);\n warnForPropDifference(\n value,\n domElement.multiple,\n propKey,\n serverDifferences\n );\n continue;\n case \"muted\":\n extraAttributes.delete(value);\n warnForPropDifference(\n value,\n domElement.muted,\n propKey,\n serverDifferences\n );\n continue;\n case \"autoFocus\":\n extraAttributes.delete(\"autofocus\");\n warnForPropDifference(\n value,\n domElement.autofocus,\n propKey,\n serverDifferences\n );\n continue;\n case \"data\":\n if (\"object\" !== tag) {\n extraAttributes.delete(value);\n attributes = domElement.getAttribute(\"data\");\n warnForPropDifference(\n value,\n attributes,\n propKey,\n serverDifferences\n );\n continue;\n }\n case \"src\":\n case \"href\":\n if (\n !(\n \"\" !== propKey ||\n (\"a\" === tag && \"href\" === value) ||\n (\"object\" === tag && \"data\" === value)\n )\n ) {\n \"src\" === value\n ? console.error(\n 'An empty string (\"\") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n value,\n value\n )\n : console.error(\n 'An empty string (\"\") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n value,\n value\n );\n continue;\n }\n hydrateSanitizedAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"action\":\n case \"formAction\":\n attributes = domElement.getAttribute(value);\n if (\"function\" === typeof propKey) {\n extraAttributes.delete(value.toLowerCase());\n \"formAction\" === value\n ? (extraAttributes.delete(\"name\"),\n extraAttributes.delete(\"formenctype\"),\n extraAttributes.delete(\"formmethod\"),\n extraAttributes.delete(\"formtarget\"))\n : (extraAttributes.delete(\"enctype\"),\n extraAttributes.delete(\"method\"),\n extraAttributes.delete(\"target\"));\n continue;\n } else if (attributes === EXPECTED_FORM_ACTION_URL) {\n extraAttributes.delete(value.toLowerCase());\n warnForPropDifference(\n value,\n \"function\",\n propKey,\n serverDifferences\n );\n continue;\n }\n hydrateSanitizedAttribute(\n domElement,\n value,\n value.toLowerCase(),\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkHref\":\n hydrateSanitizedAttribute(\n domElement,\n value,\n \"xlink:href\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"contentEditable\":\n hydrateBooleanishAttribute(\n domElement,\n value,\n \"contenteditable\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"spellCheck\":\n hydrateBooleanishAttribute(\n domElement,\n value,\n \"spellcheck\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"draggable\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n hydrateBooleanishAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n hydrateBooleanAttribute(\n domElement,\n value,\n value.toLowerCase(),\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"capture\":\n case \"download\":\n a: {\n i = domElement;\n var attributeName = (attributes = value),\n serverDifferences$jscomp$0 = serverDifferences;\n extraAttributes.delete(attributeName);\n i = i.getAttribute(attributeName);\n if (null === i)\n switch (typeof propKey) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n break a;\n default:\n if (!1 === propKey) break a;\n }\n else if (null != propKey)\n switch (typeof propKey) {\n case \"function\":\n case \"symbol\":\n break;\n case \"boolean\":\n if (!0 === propKey && \"\" === i) break a;\n break;\n default:\n if (\n (checkAttributeStringCoercion(propKey, attributes),\n i === \"\" + propKey)\n )\n break a;\n }\n warnForPropDifference(\n attributes,\n i,\n propKey,\n serverDifferences$jscomp$0\n );\n }\n continue;\n case \"cols\":\n case \"rows\":\n case \"size\":\n case \"span\":\n a: {\n i = domElement;\n attributeName = attributes = value;\n serverDifferences$jscomp$0 = serverDifferences;\n extraAttributes.delete(attributeName);\n i = i.getAttribute(attributeName);\n if (null === i)\n switch (typeof propKey) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break a;\n default:\n if (isNaN(propKey) || 1 > propKey) break a;\n }\n else if (null != propKey)\n switch (typeof propKey) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n !(isNaN(propKey) || 1 > propKey) &&\n (checkAttributeStringCoercion(propKey, attributes),\n i === \"\" + propKey)\n )\n break a;\n }\n warnForPropDifference(\n attributes,\n i,\n propKey,\n serverDifferences$jscomp$0\n );\n }\n continue;\n case \"rowSpan\":\n hydrateNumericAttribute(\n domElement,\n value,\n \"rowspan\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"start\":\n hydrateNumericAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xHeight\":\n hydrateAttribute(\n domElement,\n value,\n \"x-height\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkActuate\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:actuate\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkArcrole\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:arcrole\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkRole\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:role\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkShow\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:show\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkTitle\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:title\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkType\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:type\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xmlBase\":\n hydrateAttribute(\n domElement,\n value,\n \"xml:base\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xmlLang\":\n hydrateAttribute(\n domElement,\n value,\n \"xml:lang\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xmlSpace\":\n hydrateAttribute(\n domElement,\n value,\n \"xml:space\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"inert\":\n \"\" !== propKey ||\n didWarnForNewBooleanPropsWithEmptyValue[value] ||\n ((didWarnForNewBooleanPropsWithEmptyValue[value] = !0),\n console.error(\n \"Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.\",\n value\n ));\n hydrateBooleanAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n default:\n if (\n !(2 < value.length) ||\n (\"o\" !== value[0] && \"O\" !== value[0]) ||\n (\"n\" !== value[1] && \"N\" !== value[1])\n ) {\n i = getAttributeAlias(value);\n attributes = !1;\n hostContext.context === HostContextNamespaceNone &&\n \"svg\" !== tag &&\n \"math\" !== tag\n ? extraAttributes.delete(i.toLowerCase())\n : ((attributeName = value.toLowerCase()),\n (attributeName = possibleStandardNames.hasOwnProperty(\n attributeName\n )\n ? possibleStandardNames[attributeName] || null\n : null),\n null !== attributeName &&\n attributeName !== value &&\n ((attributes = !0),\n extraAttributes.delete(attributeName)),\n extraAttributes.delete(i));\n a: if (\n ((attributeName = domElement),\n (serverDifferences$jscomp$0 = i),\n (i = propKey),\n isAttributeNameSafe(serverDifferences$jscomp$0))\n )\n if (\n attributeName.hasAttribute(serverDifferences$jscomp$0)\n )\n (attributeName = attributeName.getAttribute(\n serverDifferences$jscomp$0\n )),\n checkAttributeStringCoercion(\n i,\n serverDifferences$jscomp$0\n ),\n (i = attributeName === \"\" + i ? i : attributeName);\n else {\n switch (typeof i) {\n case \"function\":\n case \"symbol\":\n break a;\n case \"boolean\":\n if (\n ((attributeName = serverDifferences$jscomp$0\n .toLowerCase()\n .slice(0, 5)),\n \"data-\" !== attributeName &&\n \"aria-\" !== attributeName)\n )\n break a;\n }\n i = void 0 === i ? void 0 : null;\n }\n else i = void 0;\n attributes ||\n warnForPropDifference(\n value,\n i,\n propKey,\n serverDifferences\n );\n }\n }\n 0 < extraAttributes.size &&\n !0 !== props.suppressHydrationWarning &&\n warnForExtraAttributes(domElement, extraAttributes, serverDifferences);\n return 0 === Object.keys(serverDifferences).length\n ? null\n : serverDifferences;\n }\n function propNamesListJoin(list, combinator) {\n switch (list.length) {\n case 0:\n return \"\";\n case 1:\n return list[0];\n case 2:\n return list[0] + \" \" + combinator + \" \" + list[1];\n default:\n return (\n list.slice(0, -1).join(\", \") +\n \", \" +\n combinator +\n \" \" +\n list[list.length - 1]\n );\n }\n }\n function getOwnerDocumentFromRootContainer(rootContainerElement) {\n return 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n }\n function getOwnHostContext(namespaceURI) {\n switch (namespaceURI) {\n case SVG_NAMESPACE:\n return HostContextNamespaceSvg;\n case MATH_NAMESPACE:\n return HostContextNamespaceMath;\n default:\n return HostContextNamespaceNone;\n }\n }\n function getChildHostContextProd(parentNamespace, type) {\n if (parentNamespace === HostContextNamespaceNone)\n switch (type) {\n case \"svg\":\n return HostContextNamespaceSvg;\n case \"math\":\n return HostContextNamespaceMath;\n default:\n return HostContextNamespaceNone;\n }\n return parentNamespace === HostContextNamespaceSvg &&\n \"foreignObject\" === type\n ? HostContextNamespaceNone\n : parentNamespace;\n }\n function shouldSetTextContent(type, props) {\n return (\n \"textarea\" === type ||\n \"noscript\" === type ||\n \"string\" === typeof props.children ||\n \"number\" === typeof props.children ||\n \"bigint\" === typeof props.children ||\n (\"object\" === typeof props.dangerouslySetInnerHTML &&\n null !== props.dangerouslySetInnerHTML &&\n null != props.dangerouslySetInnerHTML.__html)\n );\n }\n function shouldAttemptEagerTransition() {\n var event = window.event;\n if (event && \"popstate\" === event.type) {\n if (event === currentPopstateTransitionEvent) return !1;\n currentPopstateTransitionEvent = event;\n return !0;\n }\n currentPopstateTransitionEvent = null;\n return !1;\n }\n function handleErrorInNextTick(error) {\n setTimeout(function () {\n throw error;\n });\n }\n function commitMount(domElement, type, newProps) {\n switch (type) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n newProps.autoFocus && domElement.focus();\n break;\n case \"img\":\n newProps.src\n ? (domElement.src = newProps.src)\n : newProps.srcSet && (domElement.srcset = newProps.srcSet);\n }\n }\n function commitUpdate(domElement, type, oldProps, newProps) {\n updateProperties(domElement, type, oldProps, newProps);\n domElement[internalPropsKey] = newProps;\n }\n function resetTextContent(domElement) {\n setTextContent(domElement, \"\");\n }\n function commitTextUpdate(textInstance, oldText, newText) {\n textInstance.nodeValue = newText;\n }\n function isSingletonScope(type) {\n return \"head\" === type;\n }\n function removeChild(parentInstance, child) {\n parentInstance.removeChild(child);\n }\n function removeChildFromContainer(container, child) {\n (9 === container.nodeType\n ? container.body\n : \"HTML\" === container.nodeName\n ? container.ownerDocument.body\n : container\n ).removeChild(child);\n }\n function clearSuspenseBoundary(parentInstance, suspenseInstance) {\n var node = suspenseInstance,\n possiblePreambleContribution = 0,\n depth = 0;\n do {\n var nextNode = node.nextSibling;\n parentInstance.removeChild(node);\n if (nextNode && 8 === nextNode.nodeType)\n if (((node = nextNode.data), node === SUSPENSE_END_DATA)) {\n if (\n 0 < possiblePreambleContribution &&\n 8 > possiblePreambleContribution\n ) {\n node = possiblePreambleContribution;\n var ownerDocument = parentInstance.ownerDocument;\n node & PREAMBLE_CONTRIBUTION_HTML &&\n releaseSingletonInstance(ownerDocument.documentElement);\n node & PREAMBLE_CONTRIBUTION_BODY &&\n releaseSingletonInstance(ownerDocument.body);\n if (node & PREAMBLE_CONTRIBUTION_HEAD)\n for (\n node = ownerDocument.head,\n releaseSingletonInstance(node),\n ownerDocument = node.firstChild;\n ownerDocument;\n\n ) {\n var nextNode$jscomp$0 = ownerDocument.nextSibling,\n nodeName = ownerDocument.nodeName;\n ownerDocument[internalHoistableMarker] ||\n \"SCRIPT\" === nodeName ||\n \"STYLE\" === nodeName ||\n (\"LINK\" === nodeName &&\n \"stylesheet\" === ownerDocument.rel.toLowerCase()) ||\n node.removeChild(ownerDocument);\n ownerDocument = nextNode$jscomp$0;\n }\n }\n if (0 === depth) {\n parentInstance.removeChild(nextNode);\n retryIfBlockedOn(suspenseInstance);\n return;\n }\n depth--;\n } else\n node === SUSPENSE_START_DATA ||\n node === SUSPENSE_PENDING_START_DATA ||\n node === SUSPENSE_FALLBACK_START_DATA\n ? depth++\n : (possiblePreambleContribution = node.charCodeAt(0) - 48);\n else possiblePreambleContribution = 0;\n node = nextNode;\n } while (node);\n retryIfBlockedOn(suspenseInstance);\n }\n function hideInstance(instance) {\n instance = instance.style;\n \"function\" === typeof instance.setProperty\n ? instance.setProperty(\"display\", \"none\", \"important\")\n : (instance.display = \"none\");\n }\n function hideTextInstance(textInstance) {\n textInstance.nodeValue = \"\";\n }\n function unhideInstance(instance, props) {\n props = props[STYLE];\n props =\n void 0 !== props && null !== props && props.hasOwnProperty(\"display\")\n ? props.display\n : null;\n instance.style.display =\n null == props || \"boolean\" === typeof props ? \"\" : (\"\" + props).trim();\n }\n function unhideTextInstance(textInstance, text) {\n textInstance.nodeValue = text;\n }\n function clearContainerSparingly(container) {\n var nextNode = container.firstChild;\n nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n for (; nextNode; ) {\n var node = nextNode;\n nextNode = nextNode.nextSibling;\n switch (node.nodeName) {\n case \"HTML\":\n case \"HEAD\":\n case \"BODY\":\n clearContainerSparingly(node);\n detachDeletedInstance(node);\n continue;\n case \"SCRIPT\":\n case \"STYLE\":\n continue;\n case \"LINK\":\n if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n }\n container.removeChild(node);\n }\n }\n function canHydrateInstance(instance, type, props, inRootOrSingleton) {\n for (; 1 === instance.nodeType; ) {\n var anyProps = props;\n if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n if (\n !inRootOrSingleton &&\n (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n )\n break;\n } else if (!inRootOrSingleton)\n if (\"input\" === type && \"hidden\" === instance.type) {\n checkAttributeStringCoercion(anyProps.name, \"name\");\n var name = null == anyProps.name ? null : \"\" + anyProps.name;\n if (\n \"hidden\" === anyProps.type &&\n instance.getAttribute(\"name\") === name\n )\n return instance;\n } else return instance;\n else if (!instance[internalHoistableMarker])\n switch (type) {\n case \"meta\":\n if (!instance.hasAttribute(\"itemprop\")) break;\n return instance;\n case \"link\":\n name = instance.getAttribute(\"rel\");\n if (\n \"stylesheet\" === name &&\n instance.hasAttribute(\"data-precedence\")\n )\n break;\n else if (\n name !== anyProps.rel ||\n instance.getAttribute(\"href\") !==\n (null == anyProps.href || \"\" === anyProps.href\n ? null\n : anyProps.href) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin\n ? null\n : anyProps.crossOrigin) ||\n instance.getAttribute(\"title\") !==\n (null == anyProps.title ? null : anyProps.title)\n )\n break;\n return instance;\n case \"style\":\n if (instance.hasAttribute(\"data-precedence\")) break;\n return instance;\n case \"script\":\n name = instance.getAttribute(\"src\");\n if (\n (name !== (null == anyProps.src ? null : anyProps.src) ||\n instance.getAttribute(\"type\") !==\n (null == anyProps.type ? null : anyProps.type) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin\n ? null\n : anyProps.crossOrigin)) &&\n name &&\n instance.hasAttribute(\"async\") &&\n !instance.hasAttribute(\"itemprop\")\n )\n break;\n return instance;\n default:\n return instance;\n }\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) break;\n }\n return null;\n }\n function canHydrateTextInstance(instance, text, inRootOrSingleton) {\n if (\"\" === text) return null;\n for (; 3 !== instance.nodeType; ) {\n if (\n (1 !== instance.nodeType ||\n \"INPUT\" !== instance.nodeName ||\n \"hidden\" !== instance.type) &&\n !inRootOrSingleton\n )\n return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n }\n function isSuspenseInstanceFallback(instance) {\n return (\n instance.data === SUSPENSE_FALLBACK_START_DATA ||\n (instance.data === SUSPENSE_PENDING_START_DATA &&\n instance.ownerDocument.readyState === DOCUMENT_READY_STATE_COMPLETE)\n );\n }\n function registerSuspenseInstanceRetry(instance, callback) {\n var ownerDocument = instance.ownerDocument;\n if (\n instance.data !== SUSPENSE_PENDING_START_DATA ||\n ownerDocument.readyState === DOCUMENT_READY_STATE_COMPLETE\n )\n callback();\n else {\n var listener = function () {\n callback();\n ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n };\n ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n instance._reactRetry = listener;\n }\n }\n function getNextHydratable(node) {\n for (; null != node; node = node.nextSibling) {\n var nodeType = node.nodeType;\n if (1 === nodeType || 3 === nodeType) break;\n if (8 === nodeType) {\n nodeType = node.data;\n if (\n nodeType === SUSPENSE_START_DATA ||\n nodeType === SUSPENSE_FALLBACK_START_DATA ||\n nodeType === SUSPENSE_PENDING_START_DATA ||\n nodeType === FORM_STATE_IS_MATCHING ||\n nodeType === FORM_STATE_IS_NOT_MATCHING\n )\n break;\n if (nodeType === SUSPENSE_END_DATA) return null;\n }\n }\n return node;\n }\n function describeHydratableInstanceForDevWarnings(instance) {\n if (1 === instance.nodeType) {\n for (\n var JSCompiler_temp_const = instance.nodeName.toLowerCase(),\n serverDifferences = {},\n attributes = instance.attributes,\n i = 0;\n i < attributes.length;\n i++\n ) {\n var attr = attributes[i];\n serverDifferences[getPropNameFromAttributeName(attr.name)] =\n \"style\" === attr.name.toLowerCase()\n ? getStylesObjectFromElement(instance)\n : attr.value;\n }\n return { type: JSCompiler_temp_const, props: serverDifferences };\n }\n return 8 === instance.nodeType\n ? { type: \"Suspense\", props: {} }\n : instance.nodeValue;\n }\n function diffHydratedTextForDevWarnings(textInstance, text, parentProps) {\n return null === parentProps ||\n !0 !== parentProps[SUPPRESS_HYDRATION_WARNING]\n ? (textInstance.nodeValue === text\n ? (textInstance = null)\n : ((text = normalizeMarkupForTextOrAttribute(text)),\n (textInstance =\n normalizeMarkupForTextOrAttribute(textInstance.nodeValue) ===\n text\n ? null\n : textInstance.nodeValue)),\n textInstance)\n : null;\n }\n function getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {\n suspenseInstance = suspenseInstance.nextSibling;\n for (var depth = 0; suspenseInstance; ) {\n if (8 === suspenseInstance.nodeType) {\n var data = suspenseInstance.data;\n if (data === SUSPENSE_END_DATA) {\n if (0 === depth)\n return getNextHydratable(suspenseInstance.nextSibling);\n depth--;\n } else\n (data !== SUSPENSE_START_DATA &&\n data !== SUSPENSE_FALLBACK_START_DATA &&\n data !== SUSPENSE_PENDING_START_DATA) ||\n depth++;\n }\n suspenseInstance = suspenseInstance.nextSibling;\n }\n return null;\n }\n function getParentSuspenseInstance(targetInstance) {\n targetInstance = targetInstance.previousSibling;\n for (var depth = 0; targetInstance; ) {\n if (8 === targetInstance.nodeType) {\n var data = targetInstance.data;\n if (\n data === SUSPENSE_START_DATA ||\n data === SUSPENSE_FALLBACK_START_DATA ||\n data === SUSPENSE_PENDING_START_DATA\n ) {\n if (0 === depth) return targetInstance;\n depth--;\n } else data === SUSPENSE_END_DATA && depth++;\n }\n targetInstance = targetInstance.previousSibling;\n }\n return null;\n }\n function commitHydratedContainer(container) {\n retryIfBlockedOn(container);\n }\n function commitHydratedSuspenseInstance(suspenseInstance) {\n retryIfBlockedOn(suspenseInstance);\n }\n function resolveSingletonInstance(\n type,\n props,\n rootContainerInstance,\n hostContext,\n validateDOMNestingDev\n ) {\n validateDOMNestingDev &&\n validateDOMNesting(type, hostContext.ancestorInfo);\n props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n switch (type) {\n case \"html\":\n type = props.documentElement;\n if (!type)\n throw Error(\n \"React expected an <html> element (document.documentElement) to exist in the Document but one was not found. React never removes the documentElement for any Document it renders into so the cause is likely in some other script running on this page.\"\n );\n return type;\n case \"head\":\n type = props.head;\n if (!type)\n throw Error(\n \"React expected a <head> element (document.head) to exist in the Document but one was not found. React never removes the head for any Document it renders into so the cause is likely in some other script running on this page.\"\n );\n return type;\n case \"body\":\n type = props.body;\n if (!type)\n throw Error(\n \"React expected a <body> element (document.body) to exist in the Document but one was not found. React never removes the body for any Document it renders into so the cause is likely in some other script running on this page.\"\n );\n return type;\n default:\n throw Error(\n \"resolveSingletonInstance was called with an element type that is not supported. This is a bug in React.\"\n );\n }\n }\n function acquireSingletonInstance(\n type,\n props,\n instance,\n internalInstanceHandle\n ) {\n if (\n !instance[internalContainerInstanceKey] &&\n getInstanceFromNode(instance)\n ) {\n var tagName = instance.tagName.toLowerCase();\n console.error(\n \"You are mounting a new %s component when a previous one has not first unmounted. It is an error to render more than one %s component at a time and attributes and children of these components will likely fail in unpredictable ways. Please only render a single instance of <%s> and if you need to mount a new one, ensure any previous ones have unmounted first.\",\n tagName,\n tagName,\n tagName\n );\n }\n switch (type) {\n case \"html\":\n case \"head\":\n case \"body\":\n break;\n default:\n console.error(\n \"acquireSingletonInstance was called with an element type that is not supported. This is a bug in React.\"\n );\n }\n for (tagName = instance.attributes; tagName.length; )\n instance.removeAttributeNode(tagName[0]);\n setInitialProperties(instance, type, props);\n instance[internalInstanceKey] = internalInstanceHandle;\n instance[internalPropsKey] = props;\n }\n function releaseSingletonInstance(instance) {\n for (var attributes = instance.attributes; attributes.length; )\n instance.removeAttributeNode(attributes[0]);\n detachDeletedInstance(instance);\n }\n function getHoistableRoot(container) {\n return \"function\" === typeof container.getRootNode\n ? container.getRootNode()\n : 9 === container.nodeType\n ? container\n : container.ownerDocument;\n }\n function preconnectAs(rel, href, crossOrigin) {\n var ownerDocument = globalDocument;\n if (ownerDocument && \"string\" === typeof href && href) {\n var limitedEscapedHref =\n escapeSelectorAttributeValueInsideDoubleQuotes(href);\n limitedEscapedHref =\n 'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n \"string\" === typeof crossOrigin &&\n (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n preconnectsSet.has(limitedEscapedHref) ||\n (preconnectsSet.add(limitedEscapedHref),\n (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n null === ownerDocument.querySelector(limitedEscapedHref) &&\n ((href = ownerDocument.createElement(\"link\")),\n setInitialProperties(href, \"link\", rel),\n markNodeAsHoistable(href),\n ownerDocument.head.appendChild(href)));\n }\n }\n function getResource(type, currentProps, pendingProps, currentResource) {\n var resourceRoot = (resourceRoot = rootInstanceStackCursor.current)\n ? getHoistableRoot(resourceRoot)\n : null;\n if (!resourceRoot)\n throw Error(\n '\"resourceRoot\" was expected to exist. This is a bug in React.'\n );\n switch (type) {\n case \"meta\":\n case \"title\":\n return null;\n case \"style\":\n return \"string\" === typeof pendingProps.precedence &&\n \"string\" === typeof pendingProps.href\n ? ((pendingProps = getStyleKey(pendingProps.href)),\n (currentProps =\n getResourcesFromRoot(resourceRoot).hoistableStyles),\n (currentResource = currentProps.get(pendingProps)),\n currentResource ||\n ((currentResource = {\n type: \"style\",\n instance: null,\n count: 0,\n state: null\n }),\n currentProps.set(pendingProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null };\n case \"link\":\n if (\n \"stylesheet\" === pendingProps.rel &&\n \"string\" === typeof pendingProps.href &&\n \"string\" === typeof pendingProps.precedence\n ) {\n type = getStyleKey(pendingProps.href);\n var _styles = getResourcesFromRoot(resourceRoot).hoistableStyles,\n _resource = _styles.get(type);\n if (\n !_resource &&\n ((resourceRoot = resourceRoot.ownerDocument || resourceRoot),\n (_resource = {\n type: \"stylesheet\",\n instance: null,\n count: 0,\n state: { loading: NotLoaded, preload: null }\n }),\n _styles.set(type, _resource),\n (_styles = resourceRoot.querySelector(\n getStylesheetSelectorFromKey(type)\n )) &&\n !_styles._p &&\n ((_resource.instance = _styles),\n (_resource.state.loading = Loaded | Inserted)),\n !preloadPropsMap.has(type))\n ) {\n var preloadProps = {\n rel: \"preload\",\n as: \"style\",\n href: pendingProps.href,\n crossOrigin: pendingProps.crossOrigin,\n integrity: pendingProps.integrity,\n media: pendingProps.media,\n hrefLang: pendingProps.hrefLang,\n referrerPolicy: pendingProps.referrerPolicy\n };\n preloadPropsMap.set(type, preloadProps);\n _styles ||\n preloadStylesheet(\n resourceRoot,\n type,\n preloadProps,\n _resource.state\n );\n }\n if (currentProps && null === currentResource)\n throw (\n ((pendingProps =\n \"\\n\\n - \" +\n describeLinkForResourceErrorDEV(currentProps) +\n \"\\n + \" +\n describeLinkForResourceErrorDEV(pendingProps)),\n Error(\n \"Expected <link> not to update to be updated to a stylesheet with precedence. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key.\" +\n pendingProps\n ))\n );\n return _resource;\n }\n if (currentProps && null !== currentResource)\n throw (\n ((pendingProps =\n \"\\n\\n - \" +\n describeLinkForResourceErrorDEV(currentProps) +\n \"\\n + \" +\n describeLinkForResourceErrorDEV(pendingProps)),\n Error(\n \"Expected stylesheet with precedence to not be updated to a different kind of <link>. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key.\" +\n pendingProps\n ))\n );\n return null;\n case \"script\":\n return (\n (currentProps = pendingProps.async),\n (pendingProps = pendingProps.src),\n \"string\" === typeof pendingProps &&\n currentProps &&\n \"function\" !== typeof currentProps &&\n \"symbol\" !== typeof currentProps\n ? ((pendingProps = getScriptKey(pendingProps)),\n (currentProps =\n getResourcesFromRoot(resourceRoot).hoistableScripts),\n (currentResource = currentProps.get(pendingProps)),\n currentResource ||\n ((currentResource = {\n type: \"script\",\n instance: null,\n count: 0,\n state: null\n }),\n currentProps.set(pendingProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null }\n );\n default:\n throw Error(\n 'getResource encountered a type it did not expect: \"' +\n type +\n '\". this is a bug in React.'\n );\n }\n }\n function describeLinkForResourceErrorDEV(props) {\n var describedProps = 0,\n description = \"<link\";\n \"string\" === typeof props.rel\n ? (describedProps++, (description += ' rel=\"' + props.rel + '\"'))\n : hasOwnProperty.call(props, \"rel\") &&\n (describedProps++,\n (description +=\n ' rel=\"' +\n (null === props.rel ? \"null\" : \"invalid type \" + typeof props.rel) +\n '\"'));\n \"string\" === typeof props.href\n ? (describedProps++, (description += ' href=\"' + props.href + '\"'))\n : hasOwnProperty.call(props, \"href\") &&\n (describedProps++,\n (description +=\n ' href=\"' +\n (null === props.href\n ? \"null\"\n : \"invalid type \" + typeof props.href) +\n '\"'));\n \"string\" === typeof props.precedence\n ? (describedProps++,\n (description += ' precedence=\"' + props.precedence + '\"'))\n : hasOwnProperty.call(props, \"precedence\") &&\n (describedProps++,\n (description +=\n \" precedence={\" +\n (null === props.precedence\n ? \"null\"\n : \"invalid type \" + typeof props.precedence) +\n \"}\"));\n Object.getOwnPropertyNames(props).length > describedProps &&\n (description += \" ...\");\n return description + \" />\";\n }\n function getStyleKey(href) {\n return (\n 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"'\n );\n }\n function getStylesheetSelectorFromKey(key) {\n return 'link[rel=\"stylesheet\"][' + key + \"]\";\n }\n function stylesheetPropsFromRawProps(rawProps) {\n return assign({}, rawProps, {\n \"data-precedence\": rawProps.precedence,\n precedence: null\n });\n }\n function preloadStylesheet(ownerDocument, key, preloadProps, state) {\n ownerDocument.querySelector(\n 'link[rel=\"preload\"][as=\"style\"][' + key + \"]\"\n )\n ? (state.loading = Loaded)\n : ((key = ownerDocument.createElement(\"link\")),\n (state.preload = key),\n key.addEventListener(\"load\", function () {\n return (state.loading |= Loaded);\n }),\n key.addEventListener(\"error\", function () {\n return (state.loading |= Errored);\n }),\n setInitialProperties(key, \"link\", preloadProps),\n markNodeAsHoistable(key),\n ownerDocument.head.appendChild(key));\n }\n function getScriptKey(src) {\n return (\n '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]'\n );\n }\n function getScriptSelectorFromKey(key) {\n return \"script[async]\" + key;\n }\n function acquireResource(hoistableRoot, resource, props) {\n resource.count++;\n if (null === resource.instance)\n switch (resource.type) {\n case \"style\":\n var instance = hoistableRoot.querySelector(\n 'style[data-href~=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n '\"]'\n );\n if (instance)\n return (\n (resource.instance = instance),\n markNodeAsHoistable(instance),\n instance\n );\n var styleProps = assign({}, props, {\n \"data-href\": props.href,\n \"data-precedence\": props.precedence,\n href: null,\n precedence: null\n });\n instance = (\n hoistableRoot.ownerDocument || hoistableRoot\n ).createElement(\"style\");\n markNodeAsHoistable(instance);\n setInitialProperties(instance, \"style\", styleProps);\n insertStylesheet(instance, props.precedence, hoistableRoot);\n return (resource.instance = instance);\n case \"stylesheet\":\n styleProps = getStyleKey(props.href);\n var _instance = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(styleProps)\n );\n if (_instance)\n return (\n (resource.state.loading |= Inserted),\n (resource.instance = _instance),\n markNodeAsHoistable(_instance),\n _instance\n );\n instance = stylesheetPropsFromRawProps(props);\n (styleProps = preloadPropsMap.get(styleProps)) &&\n adoptPreloadPropsForStylesheet(instance, styleProps);\n _instance = (\n hoistableRoot.ownerDocument || hoistableRoot\n ).createElement(\"link\");\n markNodeAsHoistable(_instance);\n var linkInstance = _instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(_instance, \"link\", instance);\n resource.state.loading |= Inserted;\n insertStylesheet(_instance, props.precedence, hoistableRoot);\n return (resource.instance = _instance);\n case \"script\":\n _instance = getScriptKey(props.src);\n if (\n (styleProps = hoistableRoot.querySelector(\n getScriptSelectorFromKey(_instance)\n ))\n )\n return (\n (resource.instance = styleProps),\n markNodeAsHoistable(styleProps),\n styleProps\n );\n instance = props;\n if ((styleProps = preloadPropsMap.get(_instance)))\n (instance = assign({}, props)),\n adoptPreloadPropsForScript(instance, styleProps);\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n styleProps = hoistableRoot.createElement(\"script\");\n markNodeAsHoistable(styleProps);\n setInitialProperties(styleProps, \"link\", instance);\n hoistableRoot.head.appendChild(styleProps);\n return (resource.instance = styleProps);\n case \"void\":\n return null;\n default:\n throw Error(\n 'acquireResource encountered a resource type it did not expect: \"' +\n resource.type +\n '\". this is a bug in React.'\n );\n }\n else\n \"stylesheet\" === resource.type &&\n (resource.state.loading & Inserted) === NotLoaded &&\n ((instance = resource.instance),\n (resource.state.loading |= Inserted),\n insertStylesheet(instance, props.precedence, hoistableRoot));\n return resource.instance;\n }\n function insertStylesheet(instance, precedence, root) {\n for (\n var nodes = root.querySelectorAll(\n 'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n ),\n last = nodes.length ? nodes[nodes.length - 1] : null,\n prior = last,\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (node.dataset.precedence === precedence) prior = node;\n else if (prior !== last) break;\n }\n prior\n ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n : ((precedence = 9 === root.nodeType ? root.head : root),\n precedence.insertBefore(instance, precedence.firstChild));\n }\n function adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n null == stylesheetProps.crossOrigin &&\n (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n null == stylesheetProps.referrerPolicy &&\n (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n null == stylesheetProps.title &&\n (stylesheetProps.title = preloadProps.title);\n }\n function adoptPreloadPropsForScript(scriptProps, preloadProps) {\n null == scriptProps.crossOrigin &&\n (scriptProps.crossOrigin = preloadProps.crossOrigin);\n null == scriptProps.referrerPolicy &&\n (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n null == scriptProps.integrity &&\n (scriptProps.integrity = preloadProps.integrity);\n }\n function getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n if (null === tagCaches) {\n var cache = new Map();\n var caches = (tagCaches = new Map());\n caches.set(ownerDocument, cache);\n } else\n (caches = tagCaches),\n (cache = caches.get(ownerDocument)),\n cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n if (cache.has(type)) return cache;\n cache.set(type, null);\n ownerDocument = ownerDocument.getElementsByTagName(type);\n for (caches = 0; caches < ownerDocument.length; caches++) {\n var node = ownerDocument[caches];\n if (\n !(\n node[internalHoistableMarker] ||\n node[internalInstanceKey] ||\n (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n ) &&\n node.namespaceURI !== SVG_NAMESPACE\n ) {\n var nodeKey = node.getAttribute(keyAttribute) || \"\";\n nodeKey = type + nodeKey;\n var existing = cache.get(nodeKey);\n existing ? existing.push(node) : cache.set(nodeKey, [node]);\n }\n }\n return cache;\n }\n function mountHoistable(hoistableRoot, type, instance) {\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n hoistableRoot.head.insertBefore(\n instance,\n \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n );\n }\n function isHostHoistableType(type, props, hostContext) {\n var outsideHostContainerContext =\n !hostContext.ancestorInfo.containerTagInScope;\n if (\n hostContext.context === HostContextNamespaceSvg ||\n null != props.itemProp\n )\n return (\n !outsideHostContainerContext ||\n null == props.itemProp ||\n (\"meta\" !== type &&\n \"title\" !== type &&\n \"style\" !== type &&\n \"link\" !== type &&\n \"script\" !== type) ||\n console.error(\n \"Cannot render a <%s> outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this <%s> remove the `itemProp` prop. Otherwise, try moving this tag into the <head> or <body> of the Document.\",\n type,\n type\n ),\n !1\n );\n switch (type) {\n case \"meta\":\n case \"title\":\n return !0;\n case \"style\":\n if (\n \"string\" !== typeof props.precedence ||\n \"string\" !== typeof props.href ||\n \"\" === props.href\n ) {\n outsideHostContainerContext &&\n console.error(\n 'Cannot render a <style> outside the main document without knowing its precedence and a unique href key. React can hoist and deduplicate <style> tags if you provide a `precedence` prop along with an `href` prop that does not conflict with the `href` values used in any other hoisted <style> or <link rel=\"stylesheet\" ...> tags. Note that hoisting <style> tags is considered an advanced feature that most will not use directly. Consider moving the <style> tag to the <head> or consider adding a `precedence=\"default\"` and `href=\"some unique resource identifier\"`.'\n );\n break;\n }\n return !0;\n case \"link\":\n if (\n \"string\" !== typeof props.rel ||\n \"string\" !== typeof props.href ||\n \"\" === props.href ||\n props.onLoad ||\n props.onError\n ) {\n if (\n \"stylesheet\" === props.rel &&\n \"string\" === typeof props.precedence\n ) {\n type = props.href;\n var onError = props.onError,\n disabled = props.disabled;\n hostContext = [];\n props.onLoad && hostContext.push(\"`onLoad`\");\n onError && hostContext.push(\"`onError`\");\n null != disabled && hostContext.push(\"`disabled`\");\n onError = propNamesListJoin(hostContext, \"and\");\n onError += 1 === hostContext.length ? \" prop\" : \" props\";\n disabled =\n 1 === hostContext.length ? \"an \" + onError : \"the \" + onError;\n hostContext.length &&\n console.error(\n 'React encountered a <link rel=\"stylesheet\" href=\"%s\" ... /> with a `precedence` prop that also included %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',\n type,\n disabled,\n onError\n );\n }\n outsideHostContainerContext &&\n (\"string\" !== typeof props.rel ||\n \"string\" !== typeof props.href ||\n \"\" === props.href\n ? console.error(\n \"Cannot render a <link> outside the main document without a `rel` and `href` prop. Try adding a `rel` and/or `href` prop to this <link> or moving the link into the <head> tag\"\n )\n : (props.onError || props.onLoad) &&\n console.error(\n \"Cannot render a <link> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>.\"\n ));\n break;\n }\n switch (props.rel) {\n case \"stylesheet\":\n return (\n (type = props.precedence),\n (props = props.disabled),\n \"string\" !== typeof type &&\n outsideHostContainerContext &&\n console.error(\n 'Cannot render a <link rel=\"stylesheet\" /> outside the main document without knowing its precedence. Consider adding precedence=\"default\" or moving it into the root <head> tag.'\n ),\n \"string\" === typeof type && null == props\n );\n default:\n return !0;\n }\n case \"script\":\n type =\n props.async &&\n \"function\" !== typeof props.async &&\n \"symbol\" !== typeof props.async;\n if (\n !type ||\n props.onLoad ||\n props.onError ||\n !props.src ||\n \"string\" !== typeof props.src\n ) {\n outsideHostContainerContext &&\n (type\n ? props.onLoad || props.onError\n ? console.error(\n \"Cannot render a <script> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>.\"\n )\n : console.error(\n \"Cannot render a <script> outside the main document without `async={true}` and a non-empty `src` prop. Ensure there is a valid `src` and either make the script async or move it into the root <head> tag or somewhere in the <body>.\"\n )\n : console.error(\n 'Cannot render a sync or defer <script> outside the main document without knowing its order. Try adding async=\"\" or moving it into the root <head> tag.'\n ));\n break;\n }\n return !0;\n case \"noscript\":\n case \"template\":\n outsideHostContainerContext &&\n console.error(\n \"Cannot render <%s> outside the main document. Try moving it into the root <head> tag.\",\n type\n );\n }\n return !1;\n }\n function preloadResource(resource) {\n return \"stylesheet\" === resource.type &&\n (resource.state.loading & Settled) === NotLoaded\n ? !1\n : !0;\n }\n function noop() {}\n function suspendResource(hoistableRoot, resource, props) {\n if (null === suspendedState)\n throw Error(\n \"Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug.\"\n );\n var state = suspendedState;\n if (\n \"stylesheet\" === resource.type &&\n (\"string\" !== typeof props.media ||\n !1 !== matchMedia(props.media).matches) &&\n (resource.state.loading & Inserted) === NotLoaded\n ) {\n if (null === resource.instance) {\n var key = getStyleKey(props.href),\n instance = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(key)\n );\n if (instance) {\n hoistableRoot = instance._p;\n null !== hoistableRoot &&\n \"object\" === typeof hoistableRoot &&\n \"function\" === typeof hoistableRoot.then &&\n (state.count++,\n (state = onUnsuspend.bind(state)),\n hoistableRoot.then(state, state));\n resource.state.loading |= Inserted;\n resource.instance = instance;\n markNodeAsHoistable(instance);\n return;\n }\n instance = hoistableRoot.ownerDocument || hoistableRoot;\n props = stylesheetPropsFromRawProps(props);\n (key = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(props, key);\n instance = instance.createElement(\"link\");\n markNodeAsHoistable(instance);\n var linkInstance = instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance, \"link\", props);\n resource.instance = instance;\n }\n null === state.stylesheets && (state.stylesheets = new Map());\n state.stylesheets.set(resource, hoistableRoot);\n (hoistableRoot = resource.state.preload) &&\n (resource.state.loading & Settled) === NotLoaded &&\n (state.count++,\n (resource = onUnsuspend.bind(state)),\n hoistableRoot.addEventListener(\"load\", resource),\n hoistableRoot.addEventListener(\"error\", resource));\n }\n }\n function waitForCommitToBeReady() {\n if (null === suspendedState)\n throw Error(\n \"Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug.\"\n );\n var state = suspendedState;\n state.stylesheets &&\n 0 === state.count &&\n insertSuspendedStylesheets(state, state.stylesheets);\n return 0 < state.count\n ? function (commit) {\n var stylesheetTimer = setTimeout(function () {\n state.stylesheets &&\n insertSuspendedStylesheets(state, state.stylesheets);\n if (state.unsuspend) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n }, 6e4);\n state.unsuspend = commit;\n return function () {\n state.unsuspend = null;\n clearTimeout(stylesheetTimer);\n };\n }\n : null;\n }\n function onUnsuspend() {\n this.count--;\n if (0 === this.count)\n if (this.stylesheets)\n insertSuspendedStylesheets(this, this.stylesheets);\n else if (this.unsuspend) {\n var unsuspend = this.unsuspend;\n this.unsuspend = null;\n unsuspend();\n }\n }\n function insertSuspendedStylesheets(state, resources) {\n state.stylesheets = null;\n null !== state.unsuspend &&\n (state.count++,\n (precedencesByRoot = new Map()),\n resources.forEach(insertStylesheetIntoRoot, state),\n (precedencesByRoot = null),\n onUnsuspend.call(state));\n }\n function insertStylesheetIntoRoot(root, resource) {\n if (!(resource.state.loading & Inserted)) {\n var precedences = precedencesByRoot.get(root);\n if (precedences) var last = precedences.get(LAST_PRECEDENCE);\n else {\n precedences = new Map();\n precedencesByRoot.set(root, precedences);\n for (\n var nodes = root.querySelectorAll(\n \"link[data-precedence],style[data-precedence]\"\n ),\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (\n \"LINK\" === node.nodeName ||\n \"not all\" !== node.getAttribute(\"media\")\n )\n precedences.set(node.dataset.precedence, node), (last = node);\n }\n last && precedences.set(LAST_PRECEDENCE, last);\n }\n nodes = resource.instance;\n node = nodes.getAttribute(\"data-precedence\");\n i = precedences.get(node) || last;\n i === last && precedences.set(LAST_PRECEDENCE, nodes);\n precedences.set(node, nodes);\n this.count++;\n last = onUnsuspend.bind(this);\n nodes.addEventListener(\"load\", last);\n nodes.addEventListener(\"error\", last);\n i\n ? i.parentNode.insertBefore(nodes, i.nextSibling)\n : ((root = 9 === root.nodeType ? root.head : root),\n root.insertBefore(nodes, root.firstChild));\n resource.state.loading |= Inserted;\n }\n }\n function FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n formState\n ) {\n this.tag = 1;\n this.containerInfo = containerInfo;\n this.pingCache = this.current = this.pendingChildren = null;\n this.timeoutHandle = noTimeout;\n this.callbackNode =\n this.next =\n this.pendingContext =\n this.context =\n this.cancelPendingCommit =\n null;\n this.callbackPriority = 0;\n this.expirationTimes = createLaneMap(-1);\n this.entangledLanes =\n this.shellSuspendCounter =\n this.errorRecoveryDisabledLanes =\n this.expiredLanes =\n this.warmLanes =\n this.pingedLanes =\n this.suspendedLanes =\n this.pendingLanes =\n 0;\n this.entanglements = createLaneMap(0);\n this.hiddenUpdates = createLaneMap(null);\n this.identifierPrefix = identifierPrefix;\n this.onUncaughtError = onUncaughtError;\n this.onCaughtError = onCaughtError;\n this.onRecoverableError = onRecoverableError;\n this.pooledCache = null;\n this.pooledCacheLanes = 0;\n this.formState = formState;\n this.incompleteTransitions = new Map();\n this.passiveEffectDuration = this.effectDuration = -0;\n this.memoizedUpdaters = new Set();\n containerInfo = this.pendingUpdatersLaneMap = [];\n for (tag = 0; 31 > tag; tag++) containerInfo.push(new Set());\n this._debugRootType = hydrate ? \"hydrateRoot()\" : \"createRoot()\";\n }\n function createFiberRoot(\n containerInfo,\n tag,\n hydrate,\n initialChildren,\n hydrationCallbacks,\n isStrictMode,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n transitionCallbacks,\n formState\n ) {\n containerInfo = new FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n formState\n );\n tag = ConcurrentMode;\n !0 === isStrictMode && (tag |= StrictLegacyMode | StrictEffectsMode);\n isDevToolsPresent && (tag |= ProfileMode);\n isStrictMode = createFiber(3, null, null, tag);\n containerInfo.current = isStrictMode;\n isStrictMode.stateNode = containerInfo;\n tag = createCache();\n retainCache(tag);\n containerInfo.pooledCache = tag;\n retainCache(tag);\n isStrictMode.memoizedState = {\n element: initialChildren,\n isDehydrated: hydrate,\n cache: tag\n };\n initializeUpdateQueue(isStrictMode);\n return containerInfo;\n }\n function getContextForSubtree(parentComponent) {\n if (!parentComponent) return emptyContextObject;\n parentComponent = emptyContextObject;\n return parentComponent;\n }\n function updateContainerImpl(\n rootFiber,\n lane,\n element,\n container,\n parentComponent,\n callback\n ) {\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onScheduleFiberRoot\n )\n try {\n injectedHook.onScheduleFiberRoot(rendererID, container, element);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderScheduled &&\n injectedProfilingHooks.markRenderScheduled(lane);\n parentComponent = getContextForSubtree(parentComponent);\n null === container.context\n ? (container.context = parentComponent)\n : (container.pendingContext = parentComponent);\n isRendering &&\n null !== current &&\n !didWarnAboutNestedUpdates &&\n ((didWarnAboutNestedUpdates = !0),\n console.error(\n \"Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.\\n\\nCheck the render method of %s.\",\n getComponentNameFromFiber(current) || \"Unknown\"\n ));\n container = createUpdate(lane);\n container.payload = { element: element };\n callback = void 0 === callback ? null : callback;\n null !== callback &&\n (\"function\" !== typeof callback &&\n console.error(\n \"Expected the last optional `callback` argument to be a function. Instead received: %s.\",\n callback\n ),\n (container.callback = callback));\n element = enqueueUpdate(rootFiber, container, lane);\n null !== element &&\n (scheduleUpdateOnFiber(element, rootFiber, lane),\n entangleTransitions(element, rootFiber, lane));\n }\n function markRetryLaneImpl(fiber, retryLane) {\n fiber = fiber.memoizedState;\n if (null !== fiber && null !== fiber.dehydrated) {\n var a = fiber.retryLane;\n fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n }\n }\n function markRetryLaneIfNotHydrated(fiber, retryLane) {\n markRetryLaneImpl(fiber, retryLane);\n (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n }\n function attemptContinuousHydration(fiber) {\n if (13 === fiber.tag) {\n var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n markRetryLaneIfNotHydrated(fiber, 67108864);\n }\n }\n function getCurrentFiberForDevTools() {\n return current;\n }\n function getLaneLabelMap() {\n for (var map = new Map(), lane = 1, index = 0; 31 > index; index++) {\n var label = getLabelForLane(lane);\n map.set(lane, label);\n lane *= 2;\n }\n return map;\n }\n function dispatchDiscreteEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n ) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = DiscreteEventPriority),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n }\n function dispatchContinuousEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n ) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = ContinuousEventPriority),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n }\n function dispatchEvent(\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n ) {\n if (_enabled) {\n var blockedOn = findInstanceBlockingEvent(nativeEvent);\n if (null === blockedOn)\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n ),\n clearIfContinuousEvent(domEventName, nativeEvent);\n else if (\n queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n )\n nativeEvent.stopPropagation();\n else if (\n (clearIfContinuousEvent(domEventName, nativeEvent),\n eventSystemFlags & 4 &&\n -1 < discreteReplayableEvents.indexOf(domEventName))\n ) {\n for (; null !== blockedOn; ) {\n var fiber = getInstanceFromNode(blockedOn);\n if (null !== fiber)\n switch (fiber.tag) {\n case 3:\n fiber = fiber.stateNode;\n if (fiber.current.memoizedState.isDehydrated) {\n var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n if (0 !== lanes) {\n var root = fiber;\n root.pendingLanes |= 2;\n for (root.entangledLanes |= 2; lanes; ) {\n var lane = 1 << (31 - clz32(lanes));\n root.entanglements[1] |= lane;\n lanes &= ~lane;\n }\n ensureRootIsScheduled(fiber);\n (executionContext & (RenderContext | CommitContext)) ===\n NoContext &&\n ((workInProgressRootRenderTargetTime =\n now$1() + RENDER_TIMEOUT_MS),\n flushSyncWorkAcrossRoots_impl(0, !1));\n }\n }\n break;\n case 13:\n (root = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n flushSyncWork$1(),\n markRetryLaneIfNotHydrated(fiber, 2);\n }\n fiber = findInstanceBlockingEvent(nativeEvent);\n null === fiber &&\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n );\n if (fiber === blockedOn) break;\n blockedOn = fiber;\n }\n null !== blockedOn && nativeEvent.stopPropagation();\n } else\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n null,\n targetContainer\n );\n }\n }\n function findInstanceBlockingEvent(nativeEvent) {\n nativeEvent = getEventTarget(nativeEvent);\n return findInstanceBlockingTarget(nativeEvent);\n }\n function findInstanceBlockingTarget(targetNode) {\n return_targetInst = null;\n targetNode = getClosestInstanceFromNode(targetNode);\n if (null !== targetNode) {\n var nearestMounted = getNearestMountedFiber(targetNode);\n if (null === nearestMounted) targetNode = null;\n else {\n var tag = nearestMounted.tag;\n if (13 === tag) {\n targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (3 === tag) {\n if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n return 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n targetNode = null;\n } else nearestMounted !== targetNode && (targetNode = null);\n }\n }\n return_targetInst = targetNode;\n return null;\n }\n function getEventPriority(domEventName) {\n switch (domEventName) {\n case \"beforetoggle\":\n case \"cancel\":\n case \"click\":\n case \"close\":\n case \"contextmenu\":\n case \"copy\":\n case \"cut\":\n case \"auxclick\":\n case \"dblclick\":\n case \"dragend\":\n case \"dragstart\":\n case \"drop\":\n case \"focusin\":\n case \"focusout\":\n case \"input\":\n case \"invalid\":\n case \"keydown\":\n case \"keypress\":\n case \"keyup\":\n case \"mousedown\":\n case \"mouseup\":\n case \"paste\":\n case \"pause\":\n case \"play\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointerup\":\n case \"ratechange\":\n case \"reset\":\n case \"resize\":\n case \"seeked\":\n case \"submit\":\n case \"toggle\":\n case \"touchcancel\":\n case \"touchend\":\n case \"touchstart\":\n case \"volumechange\":\n case \"change\":\n case \"selectionchange\":\n case \"textInput\":\n case \"compositionstart\":\n case \"compositionend\":\n case \"compositionupdate\":\n case \"beforeblur\":\n case \"afterblur\":\n case \"beforeinput\":\n case \"blur\":\n case \"fullscreenchange\":\n case \"focus\":\n case \"hashchange\":\n case \"popstate\":\n case \"select\":\n case \"selectstart\":\n return DiscreteEventPriority;\n case \"drag\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"mousemove\":\n case \"mouseout\":\n case \"mouseover\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"scroll\":\n case \"touchmove\":\n case \"wheel\":\n case \"mouseenter\":\n case \"mouseleave\":\n case \"pointerenter\":\n case \"pointerleave\":\n return ContinuousEventPriority;\n case \"message\":\n switch (getCurrentPriorityLevel()) {\n case ImmediatePriority:\n return DiscreteEventPriority;\n case UserBlockingPriority:\n return ContinuousEventPriority;\n case NormalPriority$1:\n case LowPriority:\n return DefaultEventPriority;\n case IdlePriority:\n return IdleEventPriority;\n default:\n return DefaultEventPriority;\n }\n default:\n return DefaultEventPriority;\n }\n }\n function clearIfContinuousEvent(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"focusin\":\n case \"focusout\":\n queuedFocus = null;\n break;\n case \"dragenter\":\n case \"dragleave\":\n queuedDrag = null;\n break;\n case \"mouseover\":\n case \"mouseout\":\n queuedMouse = null;\n break;\n case \"pointerover\":\n case \"pointerout\":\n queuedPointers.delete(nativeEvent.pointerId);\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n queuedPointerCaptures.delete(nativeEvent.pointerId);\n }\n }\n function accumulateOrCreateContinuousQueuedReplayableEvent(\n existingQueuedEvent,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n ) {\n if (\n null === existingQueuedEvent ||\n existingQueuedEvent.nativeEvent !== nativeEvent\n )\n return (\n (existingQueuedEvent = {\n blockedOn: blockedOn,\n domEventName: domEventName,\n eventSystemFlags: eventSystemFlags,\n nativeEvent: nativeEvent,\n targetContainers: [targetContainer]\n }),\n null !== blockedOn &&\n ((blockedOn = getInstanceFromNode(blockedOn)),\n null !== blockedOn && attemptContinuousHydration(blockedOn)),\n existingQueuedEvent\n );\n existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n blockedOn = existingQueuedEvent.targetContainers;\n null !== targetContainer &&\n -1 === blockedOn.indexOf(targetContainer) &&\n blockedOn.push(targetContainer);\n return existingQueuedEvent;\n }\n function queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n ) {\n switch (domEventName) {\n case \"focusin\":\n return (\n (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedFocus,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"dragenter\":\n return (\n (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedDrag,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"mouseover\":\n return (\n (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedMouse,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"pointerover\":\n var pointerId = nativeEvent.pointerId;\n queuedPointers.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointers.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n );\n return !0;\n case \"gotpointercapture\":\n return (\n (pointerId = nativeEvent.pointerId),\n queuedPointerCaptures.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointerCaptures.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n ),\n !0\n );\n }\n return !1;\n }\n function attemptExplicitHydrationTarget(queuedTarget) {\n var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n if (null !== targetInst) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n if (null !== nearestMounted)\n if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n if (\n ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n if (13 === nearestMounted.tag) {\n var lane = requestUpdateLane(nearestMounted);\n lane = getBumpedLaneForHydrationByLane(lane);\n var root = enqueueConcurrentRenderForLane(\n nearestMounted,\n lane\n );\n null !== root &&\n scheduleUpdateOnFiber(root, nearestMounted, lane);\n markRetryLaneIfNotHydrated(nearestMounted, lane);\n }\n });\n return;\n }\n } else if (\n 3 === targetInst &&\n nearestMounted.stateNode.current.memoizedState.isDehydrated\n ) {\n queuedTarget.blockedOn =\n 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n return;\n }\n }\n queuedTarget.blockedOn = null;\n }\n function attemptReplayContinuousQueuedEvent(queuedEvent) {\n if (null !== queuedEvent.blockedOn) return !1;\n for (\n var targetContainers = queuedEvent.targetContainers;\n 0 < targetContainers.length;\n\n ) {\n var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n if (null === nextBlockedOn) {\n nextBlockedOn = queuedEvent.nativeEvent;\n var nativeEventClone = new nextBlockedOn.constructor(\n nextBlockedOn.type,\n nextBlockedOn\n ),\n event = nativeEventClone;\n null !== currentReplayingEvent &&\n console.error(\n \"Expected currently replaying event to be null. This error is likely caused by a bug in React. Please file an issue.\"\n );\n currentReplayingEvent = event;\n nextBlockedOn.target.dispatchEvent(nativeEventClone);\n null === currentReplayingEvent &&\n console.error(\n \"Expected currently replaying event to not be null. This error is likely caused by a bug in React. Please file an issue.\"\n );\n currentReplayingEvent = null;\n } else\n return (\n (targetContainers = getInstanceFromNode(nextBlockedOn)),\n null !== targetContainers &&\n attemptContinuousHydration(targetContainers),\n (queuedEvent.blockedOn = nextBlockedOn),\n !1\n );\n targetContainers.shift();\n }\n return !0;\n }\n function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n }\n function replayUnblockedEvents() {\n hasScheduledReplayAttempt = !1;\n null !== queuedFocus &&\n attemptReplayContinuousQueuedEvent(queuedFocus) &&\n (queuedFocus = null);\n null !== queuedDrag &&\n attemptReplayContinuousQueuedEvent(queuedDrag) &&\n (queuedDrag = null);\n null !== queuedMouse &&\n attemptReplayContinuousQueuedEvent(queuedMouse) &&\n (queuedMouse = null);\n queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n }\n function scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n queuedEvent.blockedOn === unblocked &&\n ((queuedEvent.blockedOn = null),\n hasScheduledReplayAttempt ||\n ((hasScheduledReplayAttempt = !0),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n replayUnblockedEvents\n )));\n }\n function scheduleReplayQueueIfNeeded(formReplayingQueue) {\n lastScheduledReplayQueue !== formReplayingQueue &&\n ((lastScheduledReplayQueue = formReplayingQueue),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n function () {\n lastScheduledReplayQueue === formReplayingQueue &&\n (lastScheduledReplayQueue = null);\n for (var i = 0; i < formReplayingQueue.length; i += 3) {\n var form = formReplayingQueue[i],\n submitterOrAction = formReplayingQueue[i + 1],\n formData = formReplayingQueue[i + 2];\n if (\"function\" !== typeof submitterOrAction)\n if (\n null === findInstanceBlockingTarget(submitterOrAction || form)\n )\n continue;\n else break;\n var formInst = getInstanceFromNode(form);\n null !== formInst &&\n (formReplayingQueue.splice(i, 3),\n (i -= 3),\n (form = {\n pending: !0,\n data: formData,\n method: form.method,\n action: submitterOrAction\n }),\n Object.freeze(form),\n startHostTransition(\n formInst,\n form,\n submitterOrAction,\n formData\n ));\n }\n }\n ));\n }\n function retryIfBlockedOn(unblocked) {\n function unblock(queuedEvent) {\n return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n }\n null !== queuedFocus &&\n scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n null !== queuedMouse &&\n scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n queuedPointers.forEach(unblock);\n queuedPointerCaptures.forEach(unblock);\n for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n var queuedTarget = queuedExplicitHydrationTargets[i];\n queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n }\n for (\n ;\n 0 < queuedExplicitHydrationTargets.length &&\n ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n )\n attemptExplicitHydrationTarget(i),\n null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n if (null != i)\n for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n var form = i[queuedTarget],\n submitterOrAction = i[queuedTarget + 1],\n formProps = form[internalPropsKey] || null;\n if (\"function\" === typeof submitterOrAction)\n formProps || scheduleReplayQueueIfNeeded(i);\n else if (formProps) {\n var action = null;\n if (\n submitterOrAction &&\n submitterOrAction.hasAttribute(\"formAction\")\n )\n if (\n ((form = submitterOrAction),\n (formProps = submitterOrAction[internalPropsKey] || null))\n )\n action = formProps.formAction;\n else {\n if (null !== findInstanceBlockingTarget(form)) continue;\n }\n else action = formProps.action;\n \"function\" === typeof action\n ? (i[queuedTarget + 1] = action)\n : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n scheduleReplayQueueIfNeeded(i);\n }\n }\n }\n function ReactDOMRoot(internalRoot) {\n this._internalRoot = internalRoot;\n }\n function ReactDOMHydrationRoot(internalRoot) {\n this._internalRoot = internalRoot;\n }\n function warnIfReactDOMContainerInDEV(container) {\n container[internalContainerInstanceKey] &&\n (container._reactRootContainer\n ? console.error(\n \"You are calling ReactDOMClient.createRoot() on a container that was previously passed to ReactDOM.render(). This is not supported.\"\n )\n : console.error(\n \"You are calling ReactDOMClient.createRoot() on a container that has already been passed to createRoot() before. Instead, call root.render() on the existing root instead if you want to update it.\"\n ));\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var Scheduler = __webpack_require__(/*! scheduler */ \"(pages-dir-browser)/./node_modules/.pnpm/scheduler@0.26.0/node_modules/scheduler/index.js\"),\n React = __webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"),\n ReactDOM = __webpack_require__(/*! react-dom */ \"(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/index.js\"),\n assign = Object.assign,\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_PROVIDER_TYPE = Symbol.for(\"react.provider\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\n Symbol.for(\"react.scope\");\n var REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\n Symbol.for(\"react.legacy_hidden\");\n Symbol.for(\"react.tracing_marker\");\n var REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\n Symbol.for(\"react.view_transition\");\n var MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n isArrayImpl = Array.isArray,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n NotPending = Object.freeze({\n pending: !1,\n data: null,\n method: null,\n action: null\n }),\n valueStack = [];\n var fiberStack = [];\n var index$jscomp$0 = -1,\n contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null),\n hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now$1 = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null,\n injectedProfilingHooks = null,\n hasLoggedError = !1,\n isDevToolsPresent = \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__,\n clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2,\n nextTransitionLane = 256,\n nextRetryLane = 4194304,\n DiscreteEventPriority = 2,\n ContinuousEventPriority = 8,\n DefaultEventPriority = 32,\n IdleEventPriority = 268435456,\n randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey,\n allNativeEvents = new Set(),\n registrationNameDependencies = {},\n possibleRegistrationNames = {},\n hasReadOnlyValue = {\n button: !0,\n checkbox: !0,\n image: !0,\n hidden: !0,\n radio: !0,\n reset: !0,\n submit: !0\n },\n VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {},\n disabledDepth = 0,\n prevLog,\n prevInfo,\n prevWarn,\n prevError,\n prevGroup,\n prevGroupCollapsed,\n prevGroupEnd;\n disabledLog.__reactDisabledLog = !0;\n var prefix,\n suffix,\n reentry = !1;\n var componentFrameCache = new (\n \"function\" === typeof WeakMap ? WeakMap : Map\n )();\n var current = null,\n isRendering = !1,\n escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g,\n didWarnValueDefaultValue$1 = !1,\n didWarnCheckedDefaultChecked = !1,\n didWarnSelectedSetOnOption = !1,\n didWarnInvalidChild = !1,\n didWarnInvalidInnerHTML = !1;\n var didWarnValueDefaultValue = !1;\n var valuePropNames = [\"value\", \"defaultValue\"],\n didWarnValDefaultVal = !1,\n needsEscaping = /[\"'&<>\\n\\t]|^\\s|\\s$/,\n specialTags =\n \"address applet area article aside base basefont bgsound blockquote body br button caption center col colgroup dd details dir div dl dt embed fieldset figcaption figure footer form frame frameset h1 h2 h3 h4 h5 h6 head header hgroup hr html iframe img input isindex li link listing main marquee menu menuitem meta nav noembed noframes noscript object ol p param plaintext pre script section select source style summary table tbody td template textarea tfoot th thead title tr track ul wbr xmp\".split(\n \" \"\n ),\n inScopeTags =\n \"applet caption html table td th marquee object template foreignObject desc title\".split(\n \" \"\n ),\n buttonScopeTags = inScopeTags.concat([\"button\"]),\n impliedEndTags = \"dd dt li option optgroup p rp rt\".split(\" \"),\n emptyAncestorInfoDev = {\n current: null,\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null,\n containerTagInScope: null,\n implicitRootScope: !1\n },\n didWarn = {},\n shorthandToLonghand = {\n animation:\n \"animationDelay animationDirection animationDuration animationFillMode animationIterationCount animationName animationPlayState animationTimingFunction\".split(\n \" \"\n ),\n background:\n \"backgroundAttachment backgroundClip backgroundColor backgroundImage backgroundOrigin backgroundPositionX backgroundPositionY backgroundRepeat backgroundSize\".split(\n \" \"\n ),\n backgroundPosition: [\"backgroundPositionX\", \"backgroundPositionY\"],\n border:\n \"borderBottomColor borderBottomStyle borderBottomWidth borderImageOutset borderImageRepeat borderImageSlice borderImageSource borderImageWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderTopColor borderTopStyle borderTopWidth\".split(\n \" \"\n ),\n borderBlockEnd: [\n \"borderBlockEndColor\",\n \"borderBlockEndStyle\",\n \"borderBlockEndWidth\"\n ],\n borderBlockStart: [\n \"borderBlockStartColor\",\n \"borderBlockStartStyle\",\n \"borderBlockStartWidth\"\n ],\n borderBottom: [\n \"borderBottomColor\",\n \"borderBottomStyle\",\n \"borderBottomWidth\"\n ],\n borderColor: [\n \"borderBottomColor\",\n \"borderLeftColor\",\n \"borderRightColor\",\n \"borderTopColor\"\n ],\n borderImage: [\n \"borderImageOutset\",\n \"borderImageRepeat\",\n \"borderImageSlice\",\n \"borderImageSource\",\n \"borderImageWidth\"\n ],\n borderInlineEnd: [\n \"borderInlineEndColor\",\n \"borderInlineEndStyle\",\n \"borderInlineEndWidth\"\n ],\n borderInlineStart: [\n \"borderInlineStartColor\",\n \"borderInlineStartStyle\",\n \"borderInlineStartWidth\"\n ],\n borderLeft: [\"borderLeftColor\", \"borderLeftStyle\", \"borderLeftWidth\"],\n borderRadius: [\n \"borderBottomLeftRadius\",\n \"borderBottomRightRadius\",\n \"borderTopLeftRadius\",\n \"borderTopRightRadius\"\n ],\n borderRight: [\n \"borderRightColor\",\n \"borderRightStyle\",\n \"borderRightWidth\"\n ],\n borderStyle: [\n \"borderBottomStyle\",\n \"borderLeftStyle\",\n \"borderRightStyle\",\n \"borderTopStyle\"\n ],\n borderTop: [\"borderTopColor\", \"borderTopStyle\", \"borderTopWidth\"],\n borderWidth: [\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"borderRightWidth\",\n \"borderTopWidth\"\n ],\n columnRule: [\"columnRuleColor\", \"columnRuleStyle\", \"columnRuleWidth\"],\n columns: [\"columnCount\", \"columnWidth\"],\n flex: [\"flexBasis\", \"flexGrow\", \"flexShrink\"],\n flexFlow: [\"flexDirection\", \"flexWrap\"],\n font: \"fontFamily fontFeatureSettings fontKerning fontLanguageOverride fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition fontWeight lineHeight\".split(\n \" \"\n ),\n fontVariant:\n \"fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition\".split(\n \" \"\n ),\n gap: [\"columnGap\", \"rowGap\"],\n grid: \"gridAutoColumns gridAutoFlow gridAutoRows gridTemplateAreas gridTemplateColumns gridTemplateRows\".split(\n \" \"\n ),\n gridArea: [\n \"gridColumnEnd\",\n \"gridColumnStart\",\n \"gridRowEnd\",\n \"gridRowStart\"\n ],\n gridColumn: [\"gridColumnEnd\", \"gridColumnStart\"],\n gridColumnGap: [\"columnGap\"],\n gridGap: [\"columnGap\", \"rowGap\"],\n gridRow: [\"gridRowEnd\", \"gridRowStart\"],\n gridRowGap: [\"rowGap\"],\n gridTemplate: [\n \"gridTemplateAreas\",\n \"gridTemplateColumns\",\n \"gridTemplateRows\"\n ],\n listStyle: [\"listStyleImage\", \"listStylePosition\", \"listStyleType\"],\n margin: [\"marginBottom\", \"marginLeft\", \"marginRight\", \"marginTop\"],\n marker: [\"markerEnd\", \"markerMid\", \"markerStart\"],\n mask: \"maskClip maskComposite maskImage maskMode maskOrigin maskPositionX maskPositionY maskRepeat maskSize\".split(\n \" \"\n ),\n maskPosition: [\"maskPositionX\", \"maskPositionY\"],\n outline: [\"outlineColor\", \"outlineStyle\", \"outlineWidth\"],\n overflow: [\"overflowX\", \"overflowY\"],\n padding: [\"paddingBottom\", \"paddingLeft\", \"paddingRight\", \"paddingTop\"],\n placeContent: [\"alignContent\", \"justifyContent\"],\n placeItems: [\"alignItems\", \"justifyItems\"],\n placeSelf: [\"alignSelf\", \"justifySelf\"],\n textDecoration: [\n \"textDecorationColor\",\n \"textDecorationLine\",\n \"textDecorationStyle\"\n ],\n textEmphasis: [\"textEmphasisColor\", \"textEmphasisStyle\"],\n transition: [\n \"transitionDelay\",\n \"transitionDuration\",\n \"transitionProperty\",\n \"transitionTimingFunction\"\n ],\n wordWrap: [\"overflowWrap\"]\n },\n uppercasePattern = /([A-Z])/g,\n msPattern$1 = /^ms-/,\n badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,\n msPattern = /^-ms-/,\n hyphenPattern = /-(.)/g,\n badStyleValueWithSemicolonPattern = /;\\s*$/,\n warnedStyleNames = {},\n warnedStyleValues = {},\n warnedForNaNValue = !1,\n warnedForInfinityValue = !1,\n unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n ),\n MATH_NAMESPACE = \"http://www.w3.org/1998/Math/MathML\",\n SVG_NAMESPACE = \"http://www.w3.org/2000/svg\",\n aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n possibleStandardNames = {\n accept: \"accept\",\n acceptcharset: \"acceptCharset\",\n \"accept-charset\": \"acceptCharset\",\n accesskey: \"accessKey\",\n action: \"action\",\n allowfullscreen: \"allowFullScreen\",\n alt: \"alt\",\n as: \"as\",\n async: \"async\",\n autocapitalize: \"autoCapitalize\",\n autocomplete: \"autoComplete\",\n autocorrect: \"autoCorrect\",\n autofocus: \"autoFocus\",\n autoplay: \"autoPlay\",\n autosave: \"autoSave\",\n capture: \"capture\",\n cellpadding: \"cellPadding\",\n cellspacing: \"cellSpacing\",\n challenge: \"challenge\",\n charset: \"charSet\",\n checked: \"checked\",\n children: \"children\",\n cite: \"cite\",\n class: \"className\",\n classid: \"classID\",\n classname: \"className\",\n cols: \"cols\",\n colspan: \"colSpan\",\n content: \"content\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n controls: \"controls\",\n controlslist: \"controlsList\",\n coords: \"coords\",\n crossorigin: \"crossOrigin\",\n dangerouslysetinnerhtml: \"dangerouslySetInnerHTML\",\n data: \"data\",\n datetime: \"dateTime\",\n default: \"default\",\n defaultchecked: \"defaultChecked\",\n defaultvalue: \"defaultValue\",\n defer: \"defer\",\n dir: \"dir\",\n disabled: \"disabled\",\n disablepictureinpicture: \"disablePictureInPicture\",\n disableremoteplayback: \"disableRemotePlayback\",\n download: \"download\",\n draggable: \"draggable\",\n enctype: \"encType\",\n enterkeyhint: \"enterKeyHint\",\n fetchpriority: \"fetchPriority\",\n for: \"htmlFor\",\n form: \"form\",\n formmethod: \"formMethod\",\n formaction: \"formAction\",\n formenctype: \"formEncType\",\n formnovalidate: \"formNoValidate\",\n formtarget: \"formTarget\",\n frameborder: \"frameBorder\",\n headers: \"headers\",\n height: \"height\",\n hidden: \"hidden\",\n high: \"high\",\n href: \"href\",\n hreflang: \"hrefLang\",\n htmlfor: \"htmlFor\",\n httpequiv: \"httpEquiv\",\n \"http-equiv\": \"httpEquiv\",\n icon: \"icon\",\n id: \"id\",\n imagesizes: \"imageSizes\",\n imagesrcset: \"imageSrcSet\",\n inert: \"inert\",\n innerhtml: \"innerHTML\",\n inputmode: \"inputMode\",\n integrity: \"integrity\",\n is: \"is\",\n itemid: \"itemID\",\n itemprop: \"itemProp\",\n itemref: \"itemRef\",\n itemscope: \"itemScope\",\n itemtype: \"itemType\",\n keyparams: \"keyParams\",\n keytype: \"keyType\",\n kind: \"kind\",\n label: \"label\",\n lang: \"lang\",\n list: \"list\",\n loop: \"loop\",\n low: \"low\",\n manifest: \"manifest\",\n marginwidth: \"marginWidth\",\n marginheight: \"marginHeight\",\n max: \"max\",\n maxlength: \"maxLength\",\n media: \"media\",\n mediagroup: \"mediaGroup\",\n method: \"method\",\n min: \"min\",\n minlength: \"minLength\",\n multiple: \"multiple\",\n muted: \"muted\",\n name: \"name\",\n nomodule: \"noModule\",\n nonce: \"nonce\",\n novalidate: \"noValidate\",\n open: \"open\",\n optimum: \"optimum\",\n pattern: \"pattern\",\n placeholder: \"placeholder\",\n playsinline: \"playsInline\",\n poster: \"poster\",\n preload: \"preload\",\n profile: \"profile\",\n radiogroup: \"radioGroup\",\n readonly: \"readOnly\",\n referrerpolicy: \"referrerPolicy\",\n rel: \"rel\",\n required: \"required\",\n reversed: \"reversed\",\n role: \"role\",\n rows: \"rows\",\n rowspan: \"rowSpan\",\n sandbox: \"sandbox\",\n scope: \"scope\",\n scoped: \"scoped\",\n scrolling: \"scrolling\",\n seamless: \"seamless\",\n selected: \"selected\",\n shape: \"shape\",\n size: \"size\",\n sizes: \"sizes\",\n span: \"span\",\n spellcheck: \"spellCheck\",\n src: \"src\",\n srcdoc: \"srcDoc\",\n srclang: \"srcLang\",\n srcset: \"srcSet\",\n start: \"start\",\n step: \"step\",\n style: \"style\",\n summary: \"summary\",\n tabindex: \"tabIndex\",\n target: \"target\",\n title: \"title\",\n type: \"type\",\n usemap: \"useMap\",\n value: \"value\",\n width: \"width\",\n wmode: \"wmode\",\n wrap: \"wrap\",\n about: \"about\",\n accentheight: \"accentHeight\",\n \"accent-height\": \"accentHeight\",\n accumulate: \"accumulate\",\n additive: \"additive\",\n alignmentbaseline: \"alignmentBaseline\",\n \"alignment-baseline\": \"alignmentBaseline\",\n allowreorder: \"allowReorder\",\n alphabetic: \"alphabetic\",\n amplitude: \"amplitude\",\n arabicform: \"arabicForm\",\n \"arabic-form\": \"arabicForm\",\n ascent: \"ascent\",\n attributename: \"attributeName\",\n attributetype: \"attributeType\",\n autoreverse: \"autoReverse\",\n azimuth: \"azimuth\",\n basefrequency: \"baseFrequency\",\n baselineshift: \"baselineShift\",\n \"baseline-shift\": \"baselineShift\",\n baseprofile: \"baseProfile\",\n bbox: \"bbox\",\n begin: \"begin\",\n bias: \"bias\",\n by: \"by\",\n calcmode: \"calcMode\",\n capheight: \"capHeight\",\n \"cap-height\": \"capHeight\",\n clip: \"clip\",\n clippath: \"clipPath\",\n \"clip-path\": \"clipPath\",\n clippathunits: \"clipPathUnits\",\n cliprule: \"clipRule\",\n \"clip-rule\": \"clipRule\",\n color: \"color\",\n colorinterpolation: \"colorInterpolation\",\n \"color-interpolation\": \"colorInterpolation\",\n colorinterpolationfilters: \"colorInterpolationFilters\",\n \"color-interpolation-filters\": \"colorInterpolationFilters\",\n colorprofile: \"colorProfile\",\n \"color-profile\": \"colorProfile\",\n colorrendering: \"colorRendering\",\n \"color-rendering\": \"colorRendering\",\n contentscripttype: \"contentScriptType\",\n contentstyletype: \"contentStyleType\",\n cursor: \"cursor\",\n cx: \"cx\",\n cy: \"cy\",\n d: \"d\",\n datatype: \"datatype\",\n decelerate: \"decelerate\",\n descent: \"descent\",\n diffuseconstant: \"diffuseConstant\",\n direction: \"direction\",\n display: \"display\",\n divisor: \"divisor\",\n dominantbaseline: \"dominantBaseline\",\n \"dominant-baseline\": \"dominantBaseline\",\n dur: \"dur\",\n dx: \"dx\",\n dy: \"dy\",\n edgemode: \"edgeMode\",\n elevation: \"elevation\",\n enablebackground: \"enableBackground\",\n \"enable-background\": \"enableBackground\",\n end: \"end\",\n exponent: \"exponent\",\n externalresourcesrequired: \"externalResourcesRequired\",\n fill: \"fill\",\n fillopacity: \"fillOpacity\",\n \"fill-opacity\": \"fillOpacity\",\n fillrule: \"fillRule\",\n \"fill-rule\": \"fillRule\",\n filter: \"filter\",\n filterres: \"filterRes\",\n filterunits: \"filterUnits\",\n floodopacity: \"floodOpacity\",\n \"flood-opacity\": \"floodOpacity\",\n floodcolor: \"floodColor\",\n \"flood-color\": \"floodColor\",\n focusable: \"focusable\",\n fontfamily: \"fontFamily\",\n \"font-family\": \"fontFamily\",\n fontsize: \"fontSize\",\n \"font-size\": \"fontSize\",\n fontsizeadjust: \"fontSizeAdjust\",\n \"font-size-adjust\": \"fontSizeAdjust\",\n fontstretch: \"fontStretch\",\n \"font-stretch\": \"fontStretch\",\n fontstyle: \"fontStyle\",\n \"font-style\": \"fontStyle\",\n fontvariant: \"fontVariant\",\n \"font-variant\": \"fontVariant\",\n fontweight: \"fontWeight\",\n \"font-weight\": \"fontWeight\",\n format: \"format\",\n from: \"from\",\n fx: \"fx\",\n fy: \"fy\",\n g1: \"g1\",\n g2: \"g2\",\n glyphname: \"glyphName\",\n \"glyph-name\": \"glyphName\",\n glyphorientationhorizontal: \"glyphOrientationHorizontal\",\n \"glyph-orientation-horizontal\": \"glyphOrientationHorizontal\",\n glyphorientationvertical: \"glyphOrientationVertical\",\n \"glyph-orientation-vertical\": \"glyphOrientationVertical\",\n glyphref: \"glyphRef\",\n gradienttransform: \"gradientTransform\",\n gradientunits: \"gradientUnits\",\n hanging: \"hanging\",\n horizadvx: \"horizAdvX\",\n \"horiz-adv-x\": \"horizAdvX\",\n horizoriginx: \"horizOriginX\",\n \"horiz-origin-x\": \"horizOriginX\",\n ideographic: \"ideographic\",\n imagerendering: \"imageRendering\",\n \"image-rendering\": \"imageRendering\",\n in2: \"in2\",\n in: \"in\",\n inlist: \"inlist\",\n intercept: \"intercept\",\n k1: \"k1\",\n k2: \"k2\",\n k3: \"k3\",\n k4: \"k4\",\n k: \"k\",\n kernelmatrix: \"kernelMatrix\",\n kernelunitlength: \"kernelUnitLength\",\n kerning: \"kerning\",\n keypoints: \"keyPoints\",\n keysplines: \"keySplines\",\n keytimes: \"keyTimes\",\n lengthadjust: \"lengthAdjust\",\n letterspacing: \"letterSpacing\",\n \"letter-spacing\": \"letterSpacing\",\n lightingcolor: \"lightingColor\",\n \"lighting-color\": \"lightingColor\",\n limitingconeangle: \"limitingConeAngle\",\n local: \"local\",\n markerend: \"markerEnd\",\n \"marker-end\": \"markerEnd\",\n markerheight: \"markerHeight\",\n markermid: \"markerMid\",\n \"marker-mid\": \"markerMid\",\n markerstart: \"markerStart\",\n \"marker-start\": \"markerStart\",\n markerunits: \"markerUnits\",\n markerwidth: \"markerWidth\",\n mask: \"mask\",\n maskcontentunits: \"maskContentUnits\",\n maskunits: \"maskUnits\",\n mathematical: \"mathematical\",\n mode: \"mode\",\n numoctaves: \"numOctaves\",\n offset: \"offset\",\n opacity: \"opacity\",\n operator: \"operator\",\n order: \"order\",\n orient: \"orient\",\n orientation: \"orientation\",\n origin: \"origin\",\n overflow: \"overflow\",\n overlineposition: \"overlinePosition\",\n \"overline-position\": \"overlinePosition\",\n overlinethickness: \"overlineThickness\",\n \"overline-thickness\": \"overlineThickness\",\n paintorder: \"paintOrder\",\n \"paint-order\": \"paintOrder\",\n panose1: \"panose1\",\n \"panose-1\": \"panose1\",\n pathlength: \"pathLength\",\n patterncontentunits: \"patternContentUnits\",\n patterntransform: \"patternTransform\",\n patternunits: \"patternUnits\",\n pointerevents: \"pointerEvents\",\n \"pointer-events\": \"pointerEvents\",\n points: \"points\",\n pointsatx: \"pointsAtX\",\n pointsaty: \"pointsAtY\",\n pointsatz: \"pointsAtZ\",\n popover: \"popover\",\n popovertarget: \"popoverTarget\",\n popovertargetaction: \"popoverTargetAction\",\n prefix: \"prefix\",\n preservealpha: \"preserveAlpha\",\n preserveaspectratio: \"preserveAspectRatio\",\n primitiveunits: \"primitiveUnits\",\n property: \"property\",\n r: \"r\",\n radius: \"radius\",\n refx: \"refX\",\n refy: \"refY\",\n renderingintent: \"renderingIntent\",\n \"rendering-intent\": \"renderingIntent\",\n repeatcount: \"repeatCount\",\n repeatdur: \"repeatDur\",\n requiredextensions: \"requiredExtensions\",\n requiredfeatures: \"requiredFeatures\",\n resource: \"resource\",\n restart: \"restart\",\n result: \"result\",\n results: \"results\",\n rotate: \"rotate\",\n rx: \"rx\",\n ry: \"ry\",\n scale: \"scale\",\n security: \"security\",\n seed: \"seed\",\n shaperendering: \"shapeRendering\",\n \"shape-rendering\": \"shapeRendering\",\n slope: \"slope\",\n spacing: \"spacing\",\n specularconstant: \"specularConstant\",\n specularexponent: \"specularExponent\",\n speed: \"speed\",\n spreadmethod: \"spreadMethod\",\n startoffset: \"startOffset\",\n stddeviation: \"stdDeviation\",\n stemh: \"stemh\",\n stemv: \"stemv\",\n stitchtiles: \"stitchTiles\",\n stopcolor: \"stopColor\",\n \"stop-color\": \"stopColor\",\n stopopacity: \"stopOpacity\",\n \"stop-opacity\": \"stopOpacity\",\n strikethroughposition: \"strikethroughPosition\",\n \"strikethrough-position\": \"strikethroughPosition\",\n strikethroughthickness: \"strikethroughThickness\",\n \"strikethrough-thickness\": \"strikethroughThickness\",\n string: \"string\",\n stroke: \"stroke\",\n strokedasharray: \"strokeDasharray\",\n \"stroke-dasharray\": \"strokeDasharray\",\n strokedashoffset: \"strokeDashoffset\",\n \"stroke-dashoffset\": \"strokeDashoffset\",\n strokelinecap: \"strokeLinecap\",\n \"stroke-linecap\": \"strokeLinecap\",\n strokelinejoin: \"strokeLinejoin\",\n \"stroke-linejoin\": \"strokeLinejoin\",\n strokemiterlimit: \"strokeMiterlimit\",\n \"stroke-miterlimit\": \"strokeMiterlimit\",\n strokewidth: \"strokeWidth\",\n \"stroke-width\": \"strokeWidth\",\n strokeopacity: \"strokeOpacity\",\n \"stroke-opacity\": \"strokeOpacity\",\n suppresscontenteditablewarning: \"suppressContentEditableWarning\",\n suppresshydrationwarning: \"suppressHydrationWarning\",\n surfacescale: \"surfaceScale\",\n systemlanguage: \"systemLanguage\",\n tablevalues: \"tableValues\",\n targetx: \"targetX\",\n targety: \"targetY\",\n textanchor: \"textAnchor\",\n \"text-anchor\": \"textAnchor\",\n textdecoration: \"textDecoration\",\n \"text-decoration\": \"textDecoration\",\n textlength: \"textLength\",\n textrendering: \"textRendering\",\n \"text-rendering\": \"textRendering\",\n to: \"to\",\n transform: \"transform\",\n transformorigin: \"transformOrigin\",\n \"transform-origin\": \"transformOrigin\",\n typeof: \"typeof\",\n u1: \"u1\",\n u2: \"u2\",\n underlineposition: \"underlinePosition\",\n \"underline-position\": \"underlinePosition\",\n underlinethickness: \"underlineThickness\",\n \"underline-thickness\": \"underlineThickness\",\n unicode: \"unicode\",\n unicodebidi: \"unicodeBidi\",\n \"unicode-bidi\": \"unicodeBidi\",\n unicoderange: \"unicodeRange\",\n \"unicode-range\": \"unicodeRange\",\n unitsperem: \"unitsPerEm\",\n \"units-per-em\": \"unitsPerEm\",\n unselectable: \"unselectable\",\n valphabetic: \"vAlphabetic\",\n \"v-alphabetic\": \"vAlphabetic\",\n values: \"values\",\n vectoreffect: \"vectorEffect\",\n \"vector-effect\": \"vectorEffect\",\n version: \"version\",\n vertadvy: \"vertAdvY\",\n \"vert-adv-y\": \"vertAdvY\",\n vertoriginx: \"vertOriginX\",\n \"vert-origin-x\": \"vertOriginX\",\n vertoriginy: \"vertOriginY\",\n \"vert-origin-y\": \"vertOriginY\",\n vhanging: \"vHanging\",\n \"v-hanging\": \"vHanging\",\n videographic: \"vIdeographic\",\n \"v-ideographic\": \"vIdeographic\",\n viewbox: \"viewBox\",\n viewtarget: \"viewTarget\",\n visibility: \"visibility\",\n vmathematical: \"vMathematical\",\n \"v-mathematical\": \"vMathematical\",\n vocab: \"vocab\",\n widths: \"widths\",\n wordspacing: \"wordSpacing\",\n \"word-spacing\": \"wordSpacing\",\n writingmode: \"writingMode\",\n \"writing-mode\": \"writingMode\",\n x1: \"x1\",\n x2: \"x2\",\n x: \"x\",\n xchannelselector: \"xChannelSelector\",\n xheight: \"xHeight\",\n \"x-height\": \"xHeight\",\n xlinkactuate: \"xlinkActuate\",\n \"xlink:actuate\": \"xlinkActuate\",\n xlinkarcrole: \"xlinkArcrole\",\n \"xlink:arcrole\": \"xlinkArcrole\",\n xlinkhref: \"xlinkHref\",\n \"xlink:href\": \"xlinkHref\",\n xlinkrole: \"xlinkRole\",\n \"xlink:role\": \"xlinkRole\",\n xlinkshow: \"xlinkShow\",\n \"xlink:show\": \"xlinkShow\",\n xlinktitle: \"xlinkTitle\",\n \"xlink:title\": \"xlinkTitle\",\n xlinktype: \"xlinkType\",\n \"xlink:type\": \"xlinkType\",\n xmlbase: \"xmlBase\",\n \"xml:base\": \"xmlBase\",\n xmllang: \"xmlLang\",\n \"xml:lang\": \"xmlLang\",\n xmlns: \"xmlns\",\n \"xml:space\": \"xmlSpace\",\n xmlnsxlink: \"xmlnsXlink\",\n \"xmlns:xlink\": \"xmlnsXlink\",\n xmlspace: \"xmlSpace\",\n y1: \"y1\",\n y2: \"y2\",\n y: \"y\",\n ychannelselector: \"yChannelSelector\",\n z: \"z\",\n zoomandpan: \"zoomAndPan\"\n },\n ariaProperties = {\n \"aria-current\": 0,\n \"aria-description\": 0,\n \"aria-details\": 0,\n \"aria-disabled\": 0,\n \"aria-hidden\": 0,\n \"aria-invalid\": 0,\n \"aria-keyshortcuts\": 0,\n \"aria-label\": 0,\n \"aria-roledescription\": 0,\n \"aria-autocomplete\": 0,\n \"aria-checked\": 0,\n \"aria-expanded\": 0,\n \"aria-haspopup\": 0,\n \"aria-level\": 0,\n \"aria-modal\": 0,\n \"aria-multiline\": 0,\n \"aria-multiselectable\": 0,\n \"aria-orientation\": 0,\n \"aria-placeholder\": 0,\n \"aria-pressed\": 0,\n \"aria-readonly\": 0,\n \"aria-required\": 0,\n \"aria-selected\": 0,\n \"aria-sort\": 0,\n \"aria-valuemax\": 0,\n \"aria-valuemin\": 0,\n \"aria-valuenow\": 0,\n \"aria-valuetext\": 0,\n \"aria-atomic\": 0,\n \"aria-busy\": 0,\n \"aria-live\": 0,\n \"aria-relevant\": 0,\n \"aria-dropeffect\": 0,\n \"aria-grabbed\": 0,\n \"aria-activedescendant\": 0,\n \"aria-colcount\": 0,\n \"aria-colindex\": 0,\n \"aria-colspan\": 0,\n \"aria-controls\": 0,\n \"aria-describedby\": 0,\n \"aria-errormessage\": 0,\n \"aria-flowto\": 0,\n \"aria-labelledby\": 0,\n \"aria-owns\": 0,\n \"aria-posinset\": 0,\n \"aria-rowcount\": 0,\n \"aria-rowindex\": 0,\n \"aria-rowspan\": 0,\n \"aria-setsize\": 0\n },\n warnedProperties$1 = {},\n rARIA$1 = RegExp(\n \"^(aria)-[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n rARIACamel$1 = RegExp(\n \"^(aria)[A-Z][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n didWarnValueNull = !1,\n warnedProperties = {},\n EVENT_NAME_REGEX = /^on./,\n INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,\n rARIA = RegExp(\n \"^(aria)-[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n rARIACamel = RegExp(\n \"^(aria)[A-Z][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i,\n currentReplayingEvent = null,\n restoreTarget = null,\n restoreQueue = null,\n isInsideEventHandler = !1,\n canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n passiveBrowserEventsSupported = !1;\n if (canUseDOM)\n try {\n var options$jscomp$0 = {};\n Object.defineProperty(options$jscomp$0, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options$jscomp$0, options$jscomp$0);\n window.removeEventListener(\"test\", options$jscomp$0, options$jscomp$0);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\n var root = null,\n startText = null,\n fallbackText = null,\n EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(\n CompositionEventInterface\n ),\n SyntheticInputEvent = SyntheticCompositionEvent,\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n },\n KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n START_KEYCODE = 229,\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\n canUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\n var canUseTextInputEvent =\n canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CODE = 32,\n SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE),\n hasSpaceKeypress = !1,\n isComposing = !1,\n supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n },\n activeElement$1 = null,\n activeElementInst$1 = null,\n isInputEventSupported = !1;\n canUseDOM &&\n (isInputEventSupported =\n isEventSupported(\"input\") &&\n (!document.documentMode || 9 < document.documentMode));\n var objectIs = \"function\" === typeof Object.is ? Object.is : is,\n skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1,\n vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\n canUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\n var ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n \" \"\n );\n simpleEventPluginEvents.push(\"scrollEnd\");\n var CapturedStacks = new WeakMap(),\n OffscreenVisible = 1,\n OffscreenPassiveEffectsConnected = 2,\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0,\n emptyContextObject = {};\n Object.freeze(emptyContextObject);\n var resolveFamily = null,\n failedBoundaries = null,\n NoMode = 0,\n ConcurrentMode = 1,\n ProfileMode = 2,\n StrictLegacyMode = 8,\n StrictEffectsMode = 16,\n NoStrictPassiveEffectsMode = 64;\n var hasBadMapPolyfill = !1;\n try {\n var nonExtensibleObject = Object.preventExtensions({});\n new Map([[nonExtensibleObject, null]]);\n new Set([nonExtensibleObject]);\n } catch (e$3) {\n hasBadMapPolyfill = !0;\n }\n var forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\",\n hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n didSuspendOrErrorDEV = !1,\n hydrationDiffRootDEV = null,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(\n \"Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React.\"\n ),\n lastResetTime = 0;\n if (\n \"object\" === typeof performance &&\n \"function\" === typeof performance.now\n ) {\n var localPerformance = performance;\n var getCurrentTime = function () {\n return localPerformance.now();\n };\n } else {\n var localDate = Date;\n getCurrentTime = function () {\n return localDate.now();\n };\n }\n var valueCursor = createCursor(null);\n var rendererCursorDEV = createCursor(null);\n var rendererSigil = {};\n var currentlyRenderingFiber$1 = null,\n lastContextDependency = null,\n isDisallowedContextReadInDEV = !1,\n AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0,\n _currentRenderer: null,\n _currentRenderer2: null\n },\n now = Scheduler.unstable_now,\n renderStartTime = -0,\n commitStartTime = -0,\n profilerStartTime = -1.1,\n profilerEffectDuration = -0,\n currentUpdateIsNested = !1,\n nestedUpdateScheduled = !1,\n currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null,\n prevOnStartTransitionFinish = ReactSharedInternals.S;\n ReactSharedInternals.S = function (transition, returnValue) {\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n };\n var resumedCache = createCursor(null),\n ReactStrictModeWarnings = {\n recordUnsafeLifecycleWarnings: function () {},\n flushPendingUnsafeLifecycleWarnings: function () {},\n recordLegacyContextWarning: function () {},\n flushLegacyContextWarning: function () {},\n discardPendingWarnings: function () {}\n },\n pendingComponentWillMountWarnings = [],\n pendingUNSAFE_ComponentWillMountWarnings = [],\n pendingComponentWillReceivePropsWarnings = [],\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [],\n pendingComponentWillUpdateWarnings = [],\n pendingUNSAFE_ComponentWillUpdateWarnings = [],\n didWarnAboutUnsafeLifecycles = new Set();\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (\n fiber,\n instance\n ) {\n didWarnAboutUnsafeLifecycles.has(fiber.type) ||\n (\"function\" === typeof instance.componentWillMount &&\n !0 !== instance.componentWillMount.__suppressDeprecationWarning &&\n pendingComponentWillMountWarnings.push(fiber),\n fiber.mode & StrictLegacyMode &&\n \"function\" === typeof instance.UNSAFE_componentWillMount &&\n pendingUNSAFE_ComponentWillMountWarnings.push(fiber),\n \"function\" === typeof instance.componentWillReceiveProps &&\n !0 !==\n instance.componentWillReceiveProps.__suppressDeprecationWarning &&\n pendingComponentWillReceivePropsWarnings.push(fiber),\n fiber.mode & StrictLegacyMode &&\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber),\n \"function\" === typeof instance.componentWillUpdate &&\n !0 !== instance.componentWillUpdate.__suppressDeprecationWarning &&\n pendingComponentWillUpdateWarnings.push(fiber),\n fiber.mode & StrictLegacyMode &&\n \"function\" === typeof instance.UNSAFE_componentWillUpdate &&\n pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber));\n };\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n var componentWillMountUniqueNames = new Set();\n 0 < pendingComponentWillMountWarnings.length &&\n (pendingComponentWillMountWarnings.forEach(function (fiber) {\n componentWillMountUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingComponentWillMountWarnings = []));\n var UNSAFE_componentWillMountUniqueNames = new Set();\n 0 < pendingUNSAFE_ComponentWillMountWarnings.length &&\n (pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {\n UNSAFE_componentWillMountUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingUNSAFE_ComponentWillMountWarnings = []));\n var componentWillReceivePropsUniqueNames = new Set();\n 0 < pendingComponentWillReceivePropsWarnings.length &&\n (pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n componentWillReceivePropsUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingComponentWillReceivePropsWarnings = []));\n var UNSAFE_componentWillReceivePropsUniqueNames = new Set();\n 0 < pendingUNSAFE_ComponentWillReceivePropsWarnings.length &&\n (pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(\n function (fiber) {\n UNSAFE_componentWillReceivePropsUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }\n ),\n (pendingUNSAFE_ComponentWillReceivePropsWarnings = []));\n var componentWillUpdateUniqueNames = new Set();\n 0 < pendingComponentWillUpdateWarnings.length &&\n (pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n componentWillUpdateUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingComponentWillUpdateWarnings = []));\n var UNSAFE_componentWillUpdateUniqueNames = new Set();\n 0 < pendingUNSAFE_ComponentWillUpdateWarnings.length &&\n (pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {\n UNSAFE_componentWillUpdateUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingUNSAFE_ComponentWillUpdateWarnings = []));\n if (0 < UNSAFE_componentWillMountUniqueNames.size) {\n var sortedNames = setToSortedString(\n UNSAFE_componentWillMountUniqueNames\n );\n console.error(\n \"Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n\\nPlease update the following components: %s\",\n sortedNames\n );\n }\n 0 < UNSAFE_componentWillReceivePropsUniqueNames.size &&\n ((sortedNames = setToSortedString(\n UNSAFE_componentWillReceivePropsUniqueNames\n )),\n console.error(\n \"Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < UNSAFE_componentWillUpdateUniqueNames.size &&\n ((sortedNames = setToSortedString(\n UNSAFE_componentWillUpdateUniqueNames\n )),\n console.error(\n \"Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < componentWillMountUniqueNames.size &&\n ((sortedNames = setToSortedString(componentWillMountUniqueNames)),\n console.warn(\n \"componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < componentWillReceivePropsUniqueNames.size &&\n ((sortedNames = setToSortedString(\n componentWillReceivePropsUniqueNames\n )),\n console.warn(\n \"componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\\n* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < componentWillUpdateUniqueNames.size &&\n ((sortedNames = setToSortedString(componentWillUpdateUniqueNames)),\n console.warn(\n \"componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n };\n var pendingLegacyContextWarning = new Map(),\n didWarnAboutLegacyContext = new Set();\n ReactStrictModeWarnings.recordLegacyContextWarning = function (\n fiber,\n instance\n ) {\n var strictRoot = null;\n for (var node = fiber; null !== node; )\n node.mode & StrictLegacyMode && (strictRoot = node),\n (node = node.return);\n null === strictRoot\n ? console.error(\n \"Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue.\"\n )\n : !didWarnAboutLegacyContext.has(fiber.type) &&\n ((node = pendingLegacyContextWarning.get(strictRoot)),\n null != fiber.type.contextTypes ||\n null != fiber.type.childContextTypes ||\n (null !== instance &&\n \"function\" === typeof instance.getChildContext)) &&\n (void 0 === node &&\n ((node = []), pendingLegacyContextWarning.set(strictRoot, node)),\n node.push(fiber));\n };\n ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n pendingLegacyContextWarning.forEach(function (fiberArray) {\n if (0 !== fiberArray.length) {\n var firstFiber = fiberArray[0],\n uniqueNames = new Set();\n fiberArray.forEach(function (fiber) {\n uniqueNames.add(getComponentNameFromFiber(fiber) || \"Component\");\n didWarnAboutLegacyContext.add(fiber.type);\n });\n var sortedNames = setToSortedString(uniqueNames);\n runWithFiberInDEV(firstFiber, function () {\n console.error(\n \"Legacy context API has been detected within a strict-mode tree.\\n\\nThe old API will be supported in all 16.x releases, but applications using it should migrate to the new version.\\n\\nPlease update the following components: %s\\n\\nLearn more about this warning here: https://react.dev/link/legacy-context\",\n sortedNames\n );\n });\n }\n });\n };\n ReactStrictModeWarnings.discardPendingWarnings = function () {\n pendingComponentWillMountWarnings = [];\n pendingUNSAFE_ComponentWillMountWarnings = [];\n pendingComponentWillReceivePropsWarnings = [];\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n pendingComponentWillUpdateWarnings = [];\n pendingUNSAFE_ComponentWillUpdateWarnings = [];\n pendingLegacyContextWarning = new Map();\n };\n var SuspenseException = Error(\n \"Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\\n\\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`.\"\n ),\n SuspenseyCommitException = Error(\n \"Suspense Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React.\"\n ),\n SuspenseActionException = Error(\n \"Suspense Exception: This is not a real error! It's an implementation detail of `useActionState` to interrupt the current render. You must either rethrow it immediately, or move the `useActionState` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\\n\\nTo handle async errors, wrap your component in an error boundary.\"\n ),\n noopSuspenseyCommitThenable = {\n then: function () {\n console.error(\n 'Internal React error: A listener was unexpectedly attached to a \"noop\" thenable. This is a bug in React. Please file an issue.'\n );\n }\n },\n suspendedThenable = null,\n needsToResetSuspendedThenableDEV = !1,\n NoFlags = 0,\n HasEffect = 1,\n Insertion = 2,\n Layout = 4,\n Passive = 8,\n UpdateState = 0,\n ReplaceState = 1,\n ForceUpdate = 2,\n CaptureUpdate = 3,\n hasForceUpdate = !1;\n var didWarnUpdateInsideUpdate = !1;\n var currentlyProcessingQueue = null;\n var didReadFromEntangledAsyncAction = !1,\n currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0),\n didWarnUncachedGetSnapshot;\n var didWarnAboutMismatchedHooksForComponent = new Set();\n var didWarnAboutUseWrappedInTryCatch = new Set();\n var didWarnAboutAsyncClientComponent = new Set();\n var didWarnAboutUseFormState = new Set();\n var renderLanes = 0,\n currentlyRenderingFiber = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter$1 = 0,\n thenableState$1 = null,\n globalClientIdCounter = 0,\n RE_RENDER_LIMIT = 25,\n currentHookNameInDev = null,\n hookTypesDev = null,\n hookTypesUpdateIndexDev = -1,\n ignorePreviousDependencies = !1,\n ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n useHostTransitionStatus: throwInvalidHookError,\n useFormState: throwInvalidHookError,\n useActionState: throwInvalidHookError,\n useOptimistic: throwInvalidHookError,\n useMemoCache: throwInvalidHookError,\n useCacheRefresh: throwInvalidHookError\n },\n HooksDispatcherOnMountInDEV = null,\n HooksDispatcherOnMountWithHookTypesInDEV = null,\n HooksDispatcherOnUpdateInDEV = null,\n HooksDispatcherOnRerenderInDEV = null,\n InvalidNestedHooksDispatcherOnMountInDEV = null,\n InvalidNestedHooksDispatcherOnUpdateInDEV = null,\n InvalidNestedHooksDispatcherOnRerenderInDEV = null;\n HooksDispatcherOnMountInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n mountHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n mountHookTypesDev();\n checkDepsAreArrayDev(createDeps);\n return mountEffect(create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n mountEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = \"useRef\";\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = \"useState\";\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n mountHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n mountHookTypesDev();\n return mountDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n mountHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n mountHookTypesDev();\n return mountSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n mountHookTypesDev();\n return mountId();\n },\n useFormState: function (action, initialState) {\n currentHookNameInDev = \"useFormState\";\n mountHookTypesDev();\n warnOnUseFormStateInDev();\n return mountActionState(action, initialState);\n },\n useActionState: function (action, initialState) {\n currentHookNameInDev = \"useActionState\";\n mountHookTypesDev();\n return mountActionState(action, initialState);\n },\n useOptimistic: function (passthrough) {\n currentHookNameInDev = \"useOptimistic\";\n mountHookTypesDev();\n return mountOptimistic(passthrough);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n mountHookTypesDev();\n return mountRefresh();\n }\n };\n HooksDispatcherOnMountWithHookTypesInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n updateHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n updateHookTypesDev();\n return mountEffect(create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n updateHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n updateHookTypesDev();\n mountEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n updateHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = \"useRef\";\n updateHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = \"useState\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n updateHookTypesDev();\n return mountDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n updateHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n updateHookTypesDev();\n return mountSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n updateHookTypesDev();\n return mountId();\n },\n useActionState: function (action, initialState) {\n currentHookNameInDev = \"useActionState\";\n updateHookTypesDev();\n return mountActionState(action, initialState);\n },\n useFormState: function (action, initialState) {\n currentHookNameInDev = \"useFormState\";\n updateHookTypesDev();\n warnOnUseFormStateInDev();\n return mountActionState(action, initialState);\n },\n useOptimistic: function (passthrough) {\n currentHookNameInDev = \"useOptimistic\";\n updateHookTypesDev();\n return mountOptimistic(passthrough);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return mountRefresh();\n }\n };\n HooksDispatcherOnUpdateInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n updateHookTypesDev();\n return updateDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n updateHookTypesDev();\n return updateTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useFormState: function (action) {\n currentHookNameInDev = \"useFormState\";\n updateHookTypesDev();\n warnOnUseFormStateInDev();\n return updateActionState(action);\n },\n useActionState: function (action) {\n currentHookNameInDev = \"useActionState\";\n updateHookTypesDev();\n return updateActionState(action);\n },\n useOptimistic: function (passthrough, reducer) {\n currentHookNameInDev = \"useOptimistic\";\n updateHookTypesDev();\n return updateOptimistic(passthrough, reducer);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n HooksDispatcherOnRerenderInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n try {\n return rerenderReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n updateHookTypesDev();\n return rerenderDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n updateHookTypesDev();\n return rerenderTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useFormState: function (action) {\n currentHookNameInDev = \"useFormState\";\n updateHookTypesDev();\n warnOnUseFormStateInDev();\n return rerenderActionState(action);\n },\n useActionState: function (action) {\n currentHookNameInDev = \"useActionState\";\n updateHookTypesDev();\n return rerenderActionState(action);\n },\n useOptimistic: function (passthrough, reducer) {\n currentHookNameInDev = \"useOptimistic\";\n updateHookTypesDev();\n return rerenderOptimistic(passthrough, reducer);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n InvalidNestedHooksDispatcherOnMountInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountEffect(create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n mountEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = \"useRef\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = \"useState\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountId();\n },\n useFormState: function (action, initialState) {\n currentHookNameInDev = \"useFormState\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountActionState(action, initialState);\n },\n useActionState: function (action, initialState) {\n currentHookNameInDev = \"useActionState\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountActionState(action, initialState);\n },\n useOptimistic: function (passthrough) {\n currentHookNameInDev = \"useOptimistic\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountOptimistic(passthrough);\n },\n useMemoCache: function (size) {\n warnInvalidHookAccess();\n return useMemoCache(size);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n mountHookTypesDev();\n return mountRefresh();\n }\n };\n InvalidNestedHooksDispatcherOnUpdateInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useFormState: function (action) {\n currentHookNameInDev = \"useFormState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateActionState(action);\n },\n useActionState: function (action) {\n currentHookNameInDev = \"useActionState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateActionState(action);\n },\n useOptimistic: function (passthrough, reducer) {\n currentHookNameInDev = \"useOptimistic\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateOptimistic(passthrough, reducer);\n },\n useMemoCache: function (size) {\n warnInvalidHookAccess();\n return useMemoCache(size);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n InvalidNestedHooksDispatcherOnRerenderInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return rerenderReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useFormState: function (action) {\n currentHookNameInDev = \"useFormState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderActionState(action);\n },\n useActionState: function (action) {\n currentHookNameInDev = \"useActionState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderActionState(action);\n },\n useOptimistic: function (passthrough, reducer) {\n currentHookNameInDev = \"useOptimistic\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderOptimistic(passthrough, reducer);\n },\n useMemoCache: function (size) {\n warnInvalidHookAccess();\n return useMemoCache(size);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n var callComponent = {\n \"react-stack-bottom-frame\": function (Component, props, secondArg) {\n var wasRendering = isRendering;\n isRendering = !0;\n try {\n return Component(props, secondArg);\n } finally {\n isRendering = wasRendering;\n }\n }\n },\n callComponentInDEV =\n callComponent[\"react-stack-bottom-frame\"].bind(callComponent),\n callRender = {\n \"react-stack-bottom-frame\": function (instance) {\n var wasRendering = isRendering;\n isRendering = !0;\n try {\n return instance.render();\n } finally {\n isRendering = wasRendering;\n }\n }\n },\n callRenderInDEV = callRender[\"react-stack-bottom-frame\"].bind(callRender),\n callComponentDidMount = {\n \"react-stack-bottom-frame\": function (finishedWork, instance) {\n try {\n instance.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n },\n callComponentDidMountInDEV = callComponentDidMount[\n \"react-stack-bottom-frame\"\n ].bind(callComponentDidMount),\n callComponentDidUpdate = {\n \"react-stack-bottom-frame\": function (\n finishedWork,\n instance,\n prevProps,\n prevState,\n snapshot\n ) {\n try {\n instance.componentDidUpdate(prevProps, prevState, snapshot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n },\n callComponentDidUpdateInDEV = callComponentDidUpdate[\n \"react-stack-bottom-frame\"\n ].bind(callComponentDidUpdate),\n callComponentDidCatch = {\n \"react-stack-bottom-frame\": function (instance, errorInfo) {\n var stack = errorInfo.stack;\n instance.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n }\n },\n callComponentDidCatchInDEV = callComponentDidCatch[\n \"react-stack-bottom-frame\"\n ].bind(callComponentDidCatch),\n callComponentWillUnmount = {\n \"react-stack-bottom-frame\": function (\n current,\n nearestMountedAncestor,\n instance\n ) {\n try {\n instance.componentWillUnmount();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n },\n callComponentWillUnmountInDEV = callComponentWillUnmount[\n \"react-stack-bottom-frame\"\n ].bind(callComponentWillUnmount),\n callCreate = {\n \"react-stack-bottom-frame\": function (effect) {\n null != effect.resourceKind &&\n console.error(\n \"Expected only SimpleEffects when enableUseEffectCRUDOverload is disabled, got %s\",\n effect.resourceKind\n );\n var create = effect.create;\n effect = effect.inst;\n create = create();\n return (effect.destroy = create);\n }\n },\n callCreateInDEV = callCreate[\"react-stack-bottom-frame\"].bind(callCreate),\n callDestroy = {\n \"react-stack-bottom-frame\": function (\n current,\n nearestMountedAncestor,\n destroy\n ) {\n try {\n destroy();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n },\n callDestroyInDEV =\n callDestroy[\"react-stack-bottom-frame\"].bind(callDestroy),\n callLazyInit = {\n \"react-stack-bottom-frame\": function (lazy) {\n var init = lazy._init;\n return init(lazy._payload);\n }\n },\n callLazyInitInDEV =\n callLazyInit[\"react-stack-bottom-frame\"].bind(callLazyInit),\n thenableState = null,\n thenableIndexCounter = 0,\n currentDebugInfo = null,\n didWarnAboutMaps;\n var didWarnAboutGenerators = (didWarnAboutMaps = !1);\n var ownerHasKeyUseWarning = {};\n var ownerHasFunctionTypeWarning = {};\n var ownerHasSymbolTypeWarning = {};\n warnForMissingKey = function (returnFiber, workInProgress, child) {\n if (\n null !== child &&\n \"object\" === typeof child &&\n child._store &&\n ((!child._store.validated && null == child.key) ||\n 2 === child._store.validated)\n ) {\n if (\"object\" !== typeof child._store)\n throw Error(\n \"React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.\"\n );\n child._store.validated = 1;\n var componentName = getComponentNameFromFiber(returnFiber),\n componentKey = componentName || \"null\";\n if (!ownerHasKeyUseWarning[componentKey]) {\n ownerHasKeyUseWarning[componentKey] = !0;\n child = child._owner;\n returnFiber = returnFiber._debugOwner;\n var currentComponentErrorInfo = \"\";\n returnFiber &&\n \"number\" === typeof returnFiber.tag &&\n (componentKey = getComponentNameFromFiber(returnFiber)) &&\n (currentComponentErrorInfo =\n \"\\n\\nCheck the render method of `\" + componentKey + \"`.\");\n currentComponentErrorInfo ||\n (componentName &&\n (currentComponentErrorInfo =\n \"\\n\\nCheck the top-level render call using <\" +\n componentName +\n \">.\"));\n var childOwnerAppendix = \"\";\n null != child &&\n returnFiber !== child &&\n ((componentName = null),\n \"number\" === typeof child.tag\n ? (componentName = getComponentNameFromFiber(child))\n : \"string\" === typeof child.name && (componentName = child.name),\n componentName &&\n (childOwnerAppendix =\n \" It was passed a child from \" + componentName + \".\"));\n runWithFiberInDEV(workInProgress, function () {\n console.error(\n 'Each child in a list should have a unique \"key\" prop.%s%s See https://react.dev/link/warning-keys for more information.',\n currentComponentErrorInfo,\n childOwnerAppendix\n );\n });\n }\n }\n };\n var reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null,\n SubtreeSuspenseContextMask = 1,\n ForceSuspenseFallback = 2,\n suspenseStackCursor = createCursor(0),\n fakeInternalInstance = {};\n var didWarnAboutStateAssignmentForComponent = new Set();\n var didWarnAboutUninitializedState = new Set();\n var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n var didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n var didWarnAboutDirectlyAssigningPropsToState = new Set();\n var didWarnAboutUndefinedDerivedState = new Set();\n var didWarnAboutContextTypes$1 = new Set();\n var didWarnAboutChildContextTypes = new Set();\n var didWarnAboutInvalidateContextType = new Set();\n var didWarnOnInvalidCallback = new Set();\n Object.freeze(fakeInternalInstance);\n var classComponentUpdater = {\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(inst),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback &&\n null !== callback &&\n (warnOnInvalidCallback(callback), (update.callback = callback));\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n markStateUpdateScheduled(inst, lane);\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(inst),\n update = createUpdate(lane);\n update.tag = ReplaceState;\n update.payload = payload;\n void 0 !== callback &&\n null !== callback &&\n (warnOnInvalidCallback(callback), (update.callback = callback));\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n markStateUpdateScheduled(inst, lane);\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(inst),\n update = createUpdate(lane);\n update.tag = ForceUpdate;\n void 0 !== callback &&\n null !== callback &&\n (warnOnInvalidCallback(callback), (update.callback = callback));\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markForceUpdateScheduled &&\n injectedProfilingHooks.markForceUpdateScheduled(inst, lane);\n }\n },\n reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n componentName = null,\n errorBoundaryName = null,\n SelectiveHydrationException = Error(\n \"This is not a real error. It's an implementation detail of React's selective hydration feature. If this leaks into userspace, it's a bug in React. Please file an issue.\"\n ),\n didReceiveUpdate = !1;\n var didWarnAboutBadClass = {};\n var didWarnAboutContextTypeOnFunctionComponent = {};\n var didWarnAboutContextTypes = {};\n var didWarnAboutGetDerivedStateOnFunctionComponent = {};\n var didWarnAboutReassigningProps = !1;\n var didWarnAboutRevealOrder = {};\n var didWarnAboutTailOptions = {};\n var SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n },\n hasWarnedAboutUsingNoValuePropOnContextProvider = !1,\n didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n var offscreenSubtreeIsHidden = !1,\n offscreenSubtreeWasHidden = !1,\n needsFormReset = !1,\n PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n nextEffect = null,\n inProgressLanes = null,\n inProgressRoot = null,\n hostParent = null,\n hostParentIsContainer = !1,\n currentHoistableRoot = null,\n suspenseyCommitFlag = 8192,\n DefaultAsyncDispatcher = {\n getCacheForType: function (resourceType) {\n var cache = readContext(CacheContext),\n cacheForType = cache.data.get(resourceType);\n void 0 === cacheForType &&\n ((cacheForType = resourceType()),\n cache.data.set(resourceType, cacheForType));\n return cacheForType;\n },\n getOwner: function () {\n return current;\n }\n };\n if (\"function\" === typeof Symbol && Symbol.for) {\n var symbolFor = Symbol.for;\n symbolFor(\"selector.component\");\n symbolFor(\"selector.has_pseudo_class\");\n symbolFor(\"selector.role\");\n symbolFor(\"selector.test_id\");\n symbolFor(\"selector.text\");\n }\n var commitHooks = [],\n PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n NoContext = 0,\n RenderContext = 2,\n CommitContext = 4,\n RootInProgress = 0,\n RootFatalErrored = 1,\n RootErrored = 2,\n RootSuspended = 3,\n RootSuspendedWithDelay = 4,\n RootSuspendedAtTheShell = 6,\n RootCompleted = 5,\n executionContext = NoContext,\n workInProgressRoot = null,\n workInProgress = null,\n workInProgressRootRenderLanes = 0,\n NotSuspended = 0,\n SuspendedOnError = 1,\n SuspendedOnData = 2,\n SuspendedOnImmediate = 3,\n SuspendedOnInstance = 4,\n SuspendedOnInstanceAndReadyToContinue = 5,\n SuspendedOnDeprecatedThrowPromise = 6,\n SuspendedAndReadyToContinue = 7,\n SuspendedOnHydration = 8,\n SuspendedOnAction = 9,\n workInProgressSuspendedReason = NotSuspended,\n workInProgressThrownValue = null,\n workInProgressRootDidSkipSuspendedSiblings = !1,\n workInProgressRootIsPrerendering = !1,\n workInProgressRootDidAttachPingListener = !1,\n entangledRenderLanes = 0,\n workInProgressRootExitStatus = RootInProgress,\n workInProgressRootSkippedLanes = 0,\n workInProgressRootInterleavedUpdatedLanes = 0,\n workInProgressRootPingedLanes = 0,\n workInProgressDeferredLane = 0,\n workInProgressSuspendedRetryLanes = 0,\n workInProgressRootConcurrentErrors = null,\n workInProgressRootRecoverableErrors = null,\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n globalMostRecentFallbackTime = 0,\n FALLBACK_THROTTLE_MS = 300,\n workInProgressRootRenderTargetTime = Infinity,\n RENDER_TIMEOUT_MS = 500,\n workInProgressTransitions = null,\n legacyErrorBoundariesThatAlreadyFailed = null,\n IMMEDIATE_COMMIT = 0,\n SUSPENDED_COMMIT = 1,\n THROTTLED_COMMIT = 2,\n NO_PENDING_EFFECTS = 0,\n PENDING_MUTATION_PHASE = 1,\n PENDING_LAYOUT_PHASE = 2,\n PENDING_AFTER_MUTATION_PHASE = 3,\n PENDING_SPAWNED_WORK = 4,\n PENDING_PASSIVE_PHASE = 5,\n pendingEffectsStatus = 0,\n pendingEffectsRoot = null,\n pendingFinishedWork = null,\n pendingEffectsLanes = 0,\n pendingEffectsRemainingLanes = 0,\n pendingPassiveTransitions = null,\n pendingRecoverableErrors = null,\n NESTED_UPDATE_LIMIT = 50,\n nestedUpdateCount = 0,\n rootWithNestedUpdates = null,\n isFlushingPassiveEffects = !1,\n didScheduleUpdateDuringPassiveEffects = !1,\n NESTED_PASSIVE_UPDATE_LIMIT = 50,\n nestedPassiveUpdateCount = 0,\n rootWithPassiveNestedUpdates = null,\n isRunningInsertionEffect = !1,\n didWarnStateUpdateForNotYetMountedComponent = null,\n didWarnAboutUpdateInRender = !1;\n var didWarnAboutUpdateInRenderForAnotherComponent = new Set();\n var fakeActCallbackNode$1 = {},\n firstScheduledRoot = null,\n lastScheduledRoot = null,\n didScheduleMicrotask = !1,\n didScheduleMicrotask_act = !1,\n mightHavePendingSyncWork = !1,\n isFlushingWork = !1,\n currentEventTransitionLane = 0,\n fakeActCallbackNode = {};\n (function () {\n for (var i = 0; i < simpleEventPluginEvents.length; i++) {\n var eventName = simpleEventPluginEvents[i],\n domEventName = eventName.toLowerCase();\n eventName = eventName[0].toUpperCase() + eventName.slice(1);\n registerSimpleEvent(domEventName, \"on\" + eventName);\n }\n registerSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\n registerSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\n registerSimpleEvent(ANIMATION_START, \"onAnimationStart\");\n registerSimpleEvent(\"dblclick\", \"onDoubleClick\");\n registerSimpleEvent(\"focusin\", \"onFocus\");\n registerSimpleEvent(\"focusout\", \"onBlur\");\n registerSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\n registerSimpleEvent(TRANSITION_START, \"onTransitionStart\");\n registerSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\n registerSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\n })();\n registerDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\n registerDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\n registerDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\n registerDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\n registerTwoPhaseEvent(\n \"onChange\",\n \"change click focusin focusout input keydown keyup selectionchange\".split(\n \" \"\n )\n );\n registerTwoPhaseEvent(\n \"onSelect\",\n \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n \" \"\n )\n );\n registerTwoPhaseEvent(\"onBeforeInput\", [\n \"compositionend\",\n \"keypress\",\n \"textInput\",\n \"paste\"\n ]);\n registerTwoPhaseEvent(\n \"onCompositionEnd\",\n \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n );\n registerTwoPhaseEvent(\n \"onCompositionStart\",\n \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n );\n registerTwoPhaseEvent(\n \"onCompositionUpdate\",\n \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n );\n var mediaEventTypes =\n \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n \" \"\n ),\n nonDelegatedEvents = new Set(\n \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n .split(\" \")\n .concat(mediaEventTypes)\n ),\n listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2),\n didWarnControlledToUncontrolled = !1,\n didWarnUncontrolledToControlled = !1,\n didWarnFormActionType = !1,\n didWarnFormActionName = !1,\n didWarnFormActionTarget = !1,\n didWarnFormActionMethod = !1,\n didWarnPopoverTargetObject = !1;\n var didWarnForNewBooleanPropsWithEmptyValue = {};\n var NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g,\n xlinkNamespace = \"http://www.w3.org/1999/xlink\",\n xmlNamespace = \"http://www.w3.org/XML/1998/namespace\",\n EXPECTED_FORM_ACTION_URL =\n \"javascript:throw new Error('React form unexpectedly submitted.')\",\n SUPPRESS_HYDRATION_WARNING = \"suppressHydrationWarning\",\n SUSPENSE_START_DATA = \"$\",\n SUSPENSE_END_DATA = \"/$\",\n SUSPENSE_PENDING_START_DATA = \"$?\",\n SUSPENSE_FALLBACK_START_DATA = \"$!\",\n PREAMBLE_CONTRIBUTION_HTML = 1,\n PREAMBLE_CONTRIBUTION_BODY = 2,\n PREAMBLE_CONTRIBUTION_HEAD = 4,\n FORM_STATE_IS_MATCHING = \"F!\",\n FORM_STATE_IS_NOT_MATCHING = \"F\",\n DOCUMENT_READY_STATE_COMPLETE = \"complete\",\n STYLE = \"style\",\n HostContextNamespaceNone = 0,\n HostContextNamespaceSvg = 1,\n HostContextNamespaceMath = 2,\n eventsEnabled = null,\n selectionInformation = null,\n warnedUnknownTags = { dialog: !0, webview: !0 },\n currentPopstateTransitionEvent = null,\n scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n cancelTimeout =\n \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n noTimeout = -1,\n localPromise = \"function\" === typeof Promise ? Promise : void 0,\n scheduleMicrotask =\n \"function\" === typeof queueMicrotask\n ? queueMicrotask\n : \"undefined\" !== typeof localPromise\n ? function (callback) {\n return localPromise\n .resolve(null)\n .then(callback)\n .catch(handleErrorInNextTick);\n }\n : scheduleTimeout,\n previousHydratableOnEnteringScopedSingleton = null,\n NotLoaded = 0,\n Loaded = 1,\n Errored = 2,\n Settled = 3,\n Inserted = 4,\n preloadPropsMap = new Map(),\n preconnectsSet = new Set(),\n previousDispatcher = ReactDOMSharedInternals.d;\n ReactDOMSharedInternals.d = {\n f: function () {\n var previousWasRendering = previousDispatcher.f(),\n wasRendering = flushSyncWork$1();\n return previousWasRendering || wasRendering;\n },\n r: function (form) {\n var formInst = getInstanceFromNode(form);\n null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n ? requestFormReset$1(formInst)\n : previousDispatcher.r(form);\n },\n D: function (href) {\n previousDispatcher.D(href);\n preconnectAs(\"dns-prefetch\", href, null);\n },\n C: function (href, crossOrigin) {\n previousDispatcher.C(href, crossOrigin);\n preconnectAs(\"preconnect\", href, crossOrigin);\n },\n L: function (href, as, options) {\n previousDispatcher.L(href, as, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href && as) {\n var preloadSelector =\n 'link[rel=\"preload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"]';\n \"image\" === as\n ? options && options.imageSrcSet\n ? ((preloadSelector +=\n '[imagesrcset=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSrcSet\n ) +\n '\"]'),\n \"string\" === typeof options.imageSizes &&\n (preloadSelector +=\n '[imagesizes=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSizes\n ) +\n '\"]'))\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]')\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]');\n var key = preloadSelector;\n switch (as) {\n case \"style\":\n key = getStyleKey(href);\n break;\n case \"script\":\n key = getScriptKey(href);\n }\n preloadPropsMap.has(key) ||\n ((href = assign(\n {\n rel: \"preload\",\n href:\n \"image\" === as && options && options.imageSrcSet\n ? void 0\n : href,\n as: as\n },\n options\n )),\n preloadPropsMap.set(key, href),\n null !== ownerDocument.querySelector(preloadSelector) ||\n (\"style\" === as &&\n ownerDocument.querySelector(\n getStylesheetSelectorFromKey(key)\n )) ||\n (\"script\" === as &&\n ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n ((as = ownerDocument.createElement(\"link\")),\n setInitialProperties(as, \"link\", href),\n markNodeAsHoistable(as),\n ownerDocument.head.appendChild(as)));\n }\n },\n m: function (href, options) {\n previousDispatcher.m(href, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var as =\n options && \"string\" === typeof options.as ? options.as : \"script\",\n preloadSelector =\n 'link[rel=\"modulepreload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"][href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]',\n key = preloadSelector;\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n key = getScriptKey(href);\n }\n if (\n !preloadPropsMap.has(key) &&\n ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n preloadPropsMap.set(key, href),\n null === ownerDocument.querySelector(preloadSelector))\n ) {\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n return;\n }\n as = ownerDocument.createElement(\"link\");\n setInitialProperties(as, \"link\", href);\n markNodeAsHoistable(as);\n ownerDocument.head.appendChild(as);\n }\n }\n },\n X: function (src, options) {\n previousDispatcher.X(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(\n getScriptSelectorFromKey(key)\n )),\n resource ||\n ((src = assign({ src: src, async: !0 }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n },\n S: function (href, precedence, options) {\n previousDispatcher.S(href, precedence, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n key = getStyleKey(href);\n precedence = precedence || \"default\";\n var resource = styles.get(key);\n if (!resource) {\n var state = { loading: NotLoaded, preload: null };\n if (\n (resource = ownerDocument.querySelector(\n getStylesheetSelectorFromKey(key)\n ))\n )\n state.loading = Loaded | Inserted;\n else {\n href = assign(\n {\n rel: \"stylesheet\",\n href: href,\n \"data-precedence\": precedence\n },\n options\n );\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(href, options);\n var link = (resource = ownerDocument.createElement(\"link\"));\n markNodeAsHoistable(link);\n setInitialProperties(link, \"link\", href);\n link._p = new Promise(function (resolve, reject) {\n link.onload = resolve;\n link.onerror = reject;\n });\n link.addEventListener(\"load\", function () {\n state.loading |= Loaded;\n });\n link.addEventListener(\"error\", function () {\n state.loading |= Errored;\n });\n state.loading |= Inserted;\n insertStylesheet(resource, precedence, ownerDocument);\n }\n resource = {\n type: \"stylesheet\",\n instance: resource,\n count: 1,\n state: state\n };\n styles.set(key, resource);\n }\n }\n },\n M: function (src, options) {\n previousDispatcher.M(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(\n getScriptSelectorFromKey(key)\n )),\n resource ||\n ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n }\n };\n var globalDocument = \"undefined\" === typeof document ? null : document,\n tagCaches = null,\n suspendedState = null,\n LAST_PRECEDENCE = null,\n precedencesByRoot = null,\n NotPendingTransition = NotPending,\n HostTransitionContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Provider: null,\n Consumer: null,\n _currentValue: NotPendingTransition,\n _currentValue2: NotPendingTransition,\n _threadCount: 0\n },\n badgeFormat = \"%c%s%c \",\n badgeStyle =\n \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\",\n resetStyle = \"\",\n pad = \" \",\n bind = Function.prototype.bind;\n var didWarnAboutNestedUpdates = !1;\n var overrideHookState = null,\n overrideHookStateDeletePath = null,\n overrideHookStateRenamePath = null,\n overrideProps = null,\n overridePropsDeletePath = null,\n overridePropsRenamePath = null,\n scheduleUpdate = null,\n setErrorHandler = null,\n setSuspenseHandler = null;\n overrideHookState = function (fiber, id, path, value) {\n id = findHook(fiber, id);\n null !== id &&\n ((path = copyWithSetImpl(id.memoizedState, path, 0, value)),\n (id.memoizedState = path),\n (id.baseState = path),\n (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n (path = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== path && scheduleUpdateOnFiber(path, fiber, 2));\n };\n overrideHookStateDeletePath = function (fiber, id, path) {\n id = findHook(fiber, id);\n null !== id &&\n ((path = copyWithDeleteImpl(id.memoizedState, path, 0)),\n (id.memoizedState = path),\n (id.baseState = path),\n (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n (path = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== path && scheduleUpdateOnFiber(path, fiber, 2));\n };\n overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {\n id = findHook(fiber, id);\n null !== id &&\n ((oldPath = copyWithRename(id.memoizedState, oldPath, newPath)),\n (id.memoizedState = oldPath),\n (id.baseState = oldPath),\n (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n (oldPath = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2));\n };\n overrideProps = function (fiber, path, value) {\n fiber.pendingProps = copyWithSetImpl(fiber.memoizedProps, path, 0, value);\n fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n path = enqueueConcurrentRenderForLane(fiber, 2);\n null !== path && scheduleUpdateOnFiber(path, fiber, 2);\n };\n overridePropsDeletePath = function (fiber, path) {\n fiber.pendingProps = copyWithDeleteImpl(fiber.memoizedProps, path, 0);\n fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n path = enqueueConcurrentRenderForLane(fiber, 2);\n null !== path && scheduleUpdateOnFiber(path, fiber, 2);\n };\n overridePropsRenamePath = function (fiber, oldPath, newPath) {\n fiber.pendingProps = copyWithRename(\n fiber.memoizedProps,\n oldPath,\n newPath\n );\n fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n oldPath = enqueueConcurrentRenderForLane(fiber, 2);\n null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2);\n };\n scheduleUpdate = function (fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n };\n setErrorHandler = function (newShouldErrorImpl) {\n shouldErrorImpl = newShouldErrorImpl;\n };\n setSuspenseHandler = function (newShouldSuspendImpl) {\n shouldSuspendImpl = newShouldSuspendImpl;\n };\n var _enabled = !0,\n return_targetInst = null,\n hasScheduledReplayAttempt = !1,\n queuedFocus = null,\n queuedDrag = null,\n queuedMouse = null,\n queuedPointers = new Map(),\n queuedPointerCaptures = new Map(),\n queuedExplicitHydrationTargets = [],\n discreteReplayableEvents =\n \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n \" \"\n ),\n lastScheduledReplayQueue = null;\n ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n function (children) {\n var root = this._internalRoot;\n if (null === root) throw Error(\"Cannot update an unmounted root.\");\n var args = arguments;\n \"function\" === typeof args[1]\n ? console.error(\n \"does not support the second callback argument. To execute a side effect after rendering, declare it in a component body with useEffect().\"\n )\n : isValidContainer(args[1])\n ? console.error(\n \"You passed a container to the second argument of root.render(...). You don't need to pass it again since you already passed it to create the root.\"\n )\n : \"undefined\" !== typeof args[1] &&\n console.error(\n \"You passed a second argument to root.render(...) but it only accepts one argument.\"\n );\n args = children;\n var current = root.current,\n lane = requestUpdateLane(current);\n updateContainerImpl(current, lane, args, root, null, null);\n };\n ReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n function () {\n var args = arguments;\n \"function\" === typeof args[0] &&\n console.error(\n \"does not support a callback argument. To execute a side effect after rendering, declare it in a component body with useEffect().\"\n );\n args = this._internalRoot;\n if (null !== args) {\n this._internalRoot = null;\n var container = args.containerInfo;\n (executionContext & (RenderContext | CommitContext)) !== NoContext &&\n console.error(\n \"Attempted to synchronously unmount a root while React was already rendering. React cannot finish unmounting the root until the current render has completed, which may lead to a race condition.\"\n );\n updateContainerImpl(args.current, 2, null, args, null, null);\n flushSyncWork$1();\n container[internalContainerInstanceKey] = null;\n }\n };\n ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (\n target\n ) {\n if (target) {\n var updatePriority = resolveUpdatePriority();\n target = { blockedOn: null, target: target, priority: updatePriority };\n for (\n var i = 0;\n i < queuedExplicitHydrationTargets.length &&\n 0 !== updatePriority &&\n updatePriority < queuedExplicitHydrationTargets[i].priority;\n i++\n );\n queuedExplicitHydrationTargets.splice(i, 0, target);\n 0 === i && attemptExplicitHydrationTarget(target);\n }\n };\n (function () {\n var isomorphicReactPackageVersion = React.version;\n if (\"19.1.0\" !== isomorphicReactPackageVersion)\n throw Error(\n 'Incompatible React versions: The \"react\" and \"react-dom\" packages must have the exact same version. Instead got:\\n - react: ' +\n (isomorphicReactPackageVersion +\n \"\\n - react-dom: 19.1.0\\nLearn more: https://react.dev/warnings/version-mismatch\")\n );\n })();\n (\"function\" === typeof Map &&\n null != Map.prototype &&\n \"function\" === typeof Map.prototype.forEach &&\n \"function\" === typeof Set &&\n null != Set.prototype &&\n \"function\" === typeof Set.prototype.clear &&\n \"function\" === typeof Set.prototype.forEach) ||\n console.error(\n \"React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://react.dev/link/react-polyfills\"\n );\n ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n var fiber = componentOrElement._reactInternals;\n if (void 0 === fiber) {\n if (\"function\" === typeof componentOrElement.render)\n throw Error(\"Unable to find node on an unmounted component.\");\n componentOrElement = Object.keys(componentOrElement).join(\",\");\n throw Error(\n \"Argument appears to not be a ReactComponent. Keys: \" +\n componentOrElement\n );\n }\n componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n componentOrElement =\n null !== componentOrElement\n ? findCurrentHostFiberImpl(componentOrElement)\n : null;\n componentOrElement =\n null === componentOrElement ? null : componentOrElement.stateNode;\n return componentOrElement;\n };\n if (\n !(function () {\n var internals = {\n bundleType: 1,\n version: \"19.1.0\",\n rendererPackageName: \"react-dom\",\n currentDispatcherRef: ReactSharedInternals,\n reconcilerVersion: \"19.1.0\"\n };\n internals.overrideHookState = overrideHookState;\n internals.overrideHookStateDeletePath = overrideHookStateDeletePath;\n internals.overrideHookStateRenamePath = overrideHookStateRenamePath;\n internals.overrideProps = overrideProps;\n internals.overridePropsDeletePath = overridePropsDeletePath;\n internals.overridePropsRenamePath = overridePropsRenamePath;\n internals.scheduleUpdate = scheduleUpdate;\n internals.setErrorHandler = setErrorHandler;\n internals.setSuspenseHandler = setSuspenseHandler;\n internals.scheduleRefresh = scheduleRefresh;\n internals.scheduleRoot = scheduleRoot;\n internals.setRefreshHandler = setRefreshHandler;\n internals.getCurrentFiber = getCurrentFiberForDevTools;\n internals.getLaneLabelMap = getLaneLabelMap;\n internals.injectProfilingHooks = injectProfilingHooks;\n return injectInternals(internals);\n })() &&\n canUseDOM &&\n window.top === window.self &&\n ((-1 < navigator.userAgent.indexOf(\"Chrome\") &&\n -1 === navigator.userAgent.indexOf(\"Edge\")) ||\n -1 < navigator.userAgent.indexOf(\"Firefox\"))\n ) {\n var protocol = window.location.protocol;\n /^(https?|file):$/.test(protocol) &&\n console.info(\n \"%cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools\" +\n (\"file:\" === protocol\n ? \"\\nYou might need to use a local HTTP server (instead of file://): https://react.dev/link/react-devtools-faq\"\n : \"\"),\n \"font-weight:bold\"\n );\n }\n exports.createRoot = function (container, options) {\n if (!isValidContainer(container))\n throw Error(\"Target container is not a DOM element.\");\n warnIfReactDOMContainerInDEV(container);\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError,\n transitionCallbacks = null;\n null !== options &&\n void 0 !== options &&\n (options.hydrate\n ? console.warn(\n \"hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead.\"\n )\n : \"object\" === typeof options &&\n null !== options &&\n options.$$typeof === REACT_ELEMENT_TYPE &&\n console.error(\n \"You passed a JSX element to createRoot. You probably meant to call root.render instead. Example usage:\\n\\n let root = createRoot(domContainer);\\n root.render(<App />);\"\n ),\n !0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError &&\n (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError),\n void 0 !== options.unstable_transitionCallbacks &&\n (transitionCallbacks = options.unstable_transitionCallbacks));\n options = createFiberRoot(\n container,\n 1,\n !1,\n null,\n null,\n isStrictMode,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n transitionCallbacks,\n null\n );\n container[internalContainerInstanceKey] = options.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMRoot(options);\n };\n exports.hydrateRoot = function (container, initialChildren, options) {\n if (!isValidContainer(container))\n throw Error(\"Target container is not a DOM element.\");\n warnIfReactDOMContainerInDEV(container);\n void 0 === initialChildren &&\n console.error(\n \"Must provide initial children as second argument to hydrateRoot. Example usage: hydrateRoot(domContainer, <App />)\"\n );\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError,\n transitionCallbacks = null,\n formState = null;\n null !== options &&\n void 0 !== options &&\n (!0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError &&\n (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError),\n void 0 !== options.unstable_transitionCallbacks &&\n (transitionCallbacks = options.unstable_transitionCallbacks),\n void 0 !== options.formState && (formState = options.formState));\n initialChildren = createFiberRoot(\n container,\n 1,\n !0,\n initialChildren,\n null != options ? options : null,\n isStrictMode,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n transitionCallbacks,\n formState\n );\n initialChildren.context = getContextForSubtree(null);\n options = initialChildren.current;\n isStrictMode = requestUpdateLane(options);\n isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n identifierPrefix = createUpdate(isStrictMode);\n identifierPrefix.callback = null;\n enqueueUpdate(options, identifierPrefix, isStrictMode);\n options = isStrictMode;\n initialChildren.current.lanes = options;\n markRootUpdated$1(initialChildren, options);\n ensureRootIsScheduled(initialChildren);\n container[internalContainerInstanceKey] = initialChildren.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMHydrationRoot(initialChildren);\n };\n exports.version = \"19.1.0\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20tY2xpZW50LmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ2E7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0Esd0NBQXdDLDBCQUEwQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isd0JBQXdCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGFBQWE7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThELFFBQVE7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLFFBQVE7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixlQUFlO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFFBQVE7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLFFBQVE7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0Msb0JBQW9CO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxXQUFXO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxZQUFZO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVkseURBQXlEO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0Esd0JBQXdCLFdBQVcsZ0JBQWdCO0FBQ25ELHlCQUF5QixXQUFXLGlCQUFpQjtBQUNyRCx5QkFBeUIsV0FBVyxpQkFBaUI7QUFDckQsMEJBQTBCLFdBQVcsa0JBQWtCO0FBQ3ZELDBCQUEwQixXQUFXLGtCQUFrQjtBQUN2RCxtQ0FBbUMsV0FBVywyQkFBMkI7QUFDekUsNkJBQTZCLFdBQVcscUJBQXFCO0FBQzdELFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLFFBQVE7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQSw0QkFBNEIseUJBQXlCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlDQUFpQztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixNQUFNO0FBQ3hCLGtCQUFrQiw0Q0FBNEM7QUFDOUQsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGFBQWE7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSw0Q0FBNEM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxPQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFLE9BQU87QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGlCQUFpQjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtIQUFrSCw4QkFBOEI7QUFDaEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ05BQWdOO0FBQ2hOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtKQUFrSixpQkFBaUI7QUFDbks7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrSkFBa0osaUJBQWlCLG1EQUFtRCxtQkFBbUIsV0FBVywrQkFBK0I7QUFDblI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEZBQTRGLEdBQUc7QUFDL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGtCQUFrQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsK0JBQStCO0FBQy9CO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHFDQUFxQztBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixzQkFBc0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLE1BQU07QUFDOUI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGtEQUFrRDtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxvQ0FBb0M7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxpQkFBaUI7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELGlCQUFpQjtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsa0RBQWtEO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyw2Q0FBNkM7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQ0FBcUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHdDQUF3QztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLCtCQUErQjtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxzQkFBc0I7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsaUJBQWlCO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCw4QkFBOEI7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0JBQWdCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkM7QUFDQTtBQUNBLDRCQUE0QixxQkFBcUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxrQ0FBa0Msb0JBQW9CO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHNCQUFzQjtBQUNoRCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDBCQUEwQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnREFBZ0Q7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyw4QkFBOEI7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiw0Q0FBNEM7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGVBQWU7QUFDZjtBQUNBLDBDQUEwQyxvQkFBb0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHVCQUF1QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msb0NBQW9DO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9CQUFvQixxQ0FBcUM7QUFDckU7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxtQkFBbUI7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELGlCQUFpQjtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyx5Q0FBeUM7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaU1BQWlNLEdBQUc7QUFDcE07QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyw0QkFBNEI7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNkJBQTZCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLDRCQUE0QjtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsUUFBUTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsZUFBZTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1QkFBdUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGlDQUFpQztBQUNwRTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsdUJBQXVCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsK0JBQStCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRTtBQUNqRTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw0Q0FBNEM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwTUFBME0sR0FBRztBQUM3TTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsc0JBQXNCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLFlBQVk7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxrQkFBa0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxzQkFBc0I7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsc0JBQXNCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCwwQkFBMEI7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix3Q0FBd0M7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsU0FBUztBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLG1DQUFtQztBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsdUJBQXVCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsZ0JBQWdCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCxpQkFBaUI7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsZ0JBQWdCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix3QkFBd0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsa0JBQWtCO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixnQ0FBZ0MsOEVBQThFLGlCQUFpQixnQkFBZ0IsR0FBRyxhQUFhO0FBQzlMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixlQUFlLHdCQUF3QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QixpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3RELGNBQWM7QUFDZDtBQUNBLCtDQUErQztBQUMvQyxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxxQkFBcUI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIscUJBQXFCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsaUJBQWlCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsdUJBQXVCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsdUJBQXVCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHVCQUF1QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHNCQUFzQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsc0JBQXNCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsc0JBQXNCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsc0JBQXNCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzQkFBc0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHNCQUFzQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQkFBcUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMscUJBQXFCO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiw4Q0FBOEM7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsZ0JBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix1QkFBdUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLFdBQVc7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwQkFBMEI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx5QkFBeUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsMkNBQTJDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsZ0JBQWdCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUNBQWlDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZNQUE2TSwwQ0FBMEMsRUFBRTtBQUN6UDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNktBQTZLLDBDQUEwQyxFQUFFO0FBQ3pOO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsZUFBZTtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwQkFBMEI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsa0JBQWtCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGtDQUFrQztBQUM3RDtBQUNBLDJCQUEyQixrQ0FBa0M7QUFDN0Q7QUFDQTtBQUNBLDJCQUEyQixZQUFZO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsb0NBQW9DO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEhBQTRILG1CQUFtQixXQUFXLCtCQUErQjtBQUN6TDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxZQUFZO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLFlBQVk7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsaUNBQWlDO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsdUJBQXVCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtIQUFrSCw4QkFBOEI7QUFDaEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxvQkFBb0I7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx5QkFBeUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx5QkFBeUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxjQUFjO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGtCQUFrQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixnQkFBZ0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsZ0JBQWdCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxtQkFBbUI7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGdEQUFnRDtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QiwrQkFBK0I7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2SEFBNkgsS0FBSyxhQUFhLEtBQUs7QUFDcEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpSUFBaUksS0FBSyxhQUFhLEtBQUs7QUFDeEo7QUFDQTtBQUNBLDBGQUEwRixLQUFLO0FBQy9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsVUFBVTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0U7QUFDeEU7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsWUFBWTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxPQUFPO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDLDJCQUEyQjtBQUMzQiw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLGtDQUFrQyxvQkFBb0Isb0JBQW9CO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxvQ0FBb0MseUJBQXlCLGlCQUFpQjtBQUM5RTtBQUNBLHFDQUFxQyxzQkFBc0Isa0JBQWtCO0FBQzdFO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsMkNBQTJDLG9CQUFvQixTQUFTO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQsMkRBQTJEO0FBQzNELGtEQUFrRDtBQUNsRCxpREFBaUQ7QUFDakQ7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGVBQWU7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQjtBQUNoQixvQ0FBb0MsT0FBTztBQUMzQyxzQ0FBc0MsT0FBTztBQUM3QztBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixvQ0FBb0M7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix5QkFBeUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGtCQUFrQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtKQUErSix5QkFBeUI7QUFDeEw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxtQkFBbUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxlQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vcmVhY3QtZG9tQDE5LjEuMF9yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLWNsaWVudC5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1kb20tY2xpZW50LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4vKlxuIE1vZGVybml6ciAzLjAuMHByZSAoQ3VzdG9tIEJ1aWxkKSB8IE1JVFxuKi9cblwidXNlIHN0cmljdFwiO1xuXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gZmluZEhvb2soZmliZXIsIGlkKSB7XG4gICAgICBmb3IgKGZpYmVyID0gZmliZXIubWVtb2l6ZWRTdGF0ZTsgbnVsbCAhPT0gZmliZXIgJiYgMCA8IGlkOyApXG4gICAgICAgIChmaWJlciA9IGZpYmVyLm5leHQpLCBpZC0tO1xuICAgICAgcmV0dXJuIGZpYmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb3B5V2l0aFNldEltcGwob2JqLCBwYXRoLCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIGlmIChpbmRleCA+PSBwYXRoLmxlbmd0aCkgcmV0dXJuIHZhbHVlO1xuICAgICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdLFxuICAgICAgICB1cGRhdGVkID0gaXNBcnJheUltcGwob2JqKSA/IG9iai5zbGljZSgpIDogYXNzaWduKHt9LCBvYmopO1xuICAgICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhTZXRJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEsIHZhbHVlKTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb3B5V2l0aFJlbmFtZShvYmosIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICAgIGlmIChvbGRQYXRoLmxlbmd0aCAhPT0gbmV3UGF0aC5sZW5ndGgpXG4gICAgICAgIGNvbnNvbGUud2FybihcImNvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyBvZiB0aGUgc2FtZSBsZW5ndGhcIik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYXRoLmxlbmd0aCAtIDE7IGkrKylcbiAgICAgICAgICBpZiAob2xkUGF0aFtpXSAhPT0gbmV3UGF0aFtpXSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBcImNvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyB0byBiZSB0aGUgc2FtZSBleGNlcHQgZm9yIHRoZSBkZWVwZXN0IGtleVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvcHlXaXRoUmVuYW1lSW1wbChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIDApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb3B5V2l0aFJlbmFtZUltcGwob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCBpbmRleCkge1xuICAgICAgdmFyIG9sZEtleSA9IG9sZFBhdGhbaW5kZXhdLFxuICAgICAgICB1cGRhdGVkID0gaXNBcnJheUltcGwob2JqKSA/IG9iai5zbGljZSgpIDogYXNzaWduKHt9LCBvYmopO1xuICAgICAgaW5kZXggKyAxID09PSBvbGRQYXRoLmxlbmd0aFxuICAgICAgICA/ICgodXBkYXRlZFtuZXdQYXRoW2luZGV4XV0gPSB1cGRhdGVkW29sZEtleV0pLFxuICAgICAgICAgIGlzQXJyYXlJbXBsKHVwZGF0ZWQpXG4gICAgICAgICAgICA/IHVwZGF0ZWQuc3BsaWNlKG9sZEtleSwgMSlcbiAgICAgICAgICAgIDogZGVsZXRlIHVwZGF0ZWRbb2xkS2V5XSlcbiAgICAgICAgOiAodXBkYXRlZFtvbGRLZXldID0gY29weVdpdGhSZW5hbWVJbXBsKFxuICAgICAgICAgICAgb2JqW29sZEtleV0sXG4gICAgICAgICAgICBvbGRQYXRoLFxuICAgICAgICAgICAgbmV3UGF0aCxcbiAgICAgICAgICAgIGluZGV4ICsgMVxuICAgICAgICAgICkpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvcHlXaXRoRGVsZXRlSW1wbChvYmosIHBhdGgsIGluZGV4KSB7XG4gICAgICB2YXIga2V5ID0gcGF0aFtpbmRleF0sXG4gICAgICAgIHVwZGF0ZWQgPSBpc0FycmF5SW1wbChvYmopID8gb2JqLnNsaWNlKCkgOiBhc3NpZ24oe30sIG9iaik7XG4gICAgICBpZiAoaW5kZXggKyAxID09PSBwYXRoLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBpc0FycmF5SW1wbCh1cGRhdGVkKSA/IHVwZGF0ZWQuc3BsaWNlKGtleSwgMSkgOiBkZWxldGUgdXBkYXRlZFtrZXldLFxuICAgICAgICAgIHVwZGF0ZWRcbiAgICAgICAgKTtcbiAgICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoRGVsZXRlSW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxKTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRTdXNwZW5kSW1wbCgpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkRXJyb3JJbXBsKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5Gb3JNaXNzaW5nS2V5KCkge31cbiAgICBmdW5jdGlvbiB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIkRvIG5vdCBjYWxsIEhvb2tzIGluc2lkZSB1c2VFZmZlY3QoLi4uKSwgdXNlTWVtbyguLi4pLCBvciBvdGhlciBidWlsdC1pbiBIb29rcy4gWW91IGNhbiBvbmx5IGNhbGwgSG9va3MgYXQgdGhlIHRvcCBsZXZlbCBvZiB5b3VyIFJlYWN0IGZ1bmN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcnVsZXMtb2YtaG9va3NcIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9vcCQyKCkge31cbiAgICBmdW5jdGlvbiBzZXRUb1NvcnRlZFN0cmluZyhzZXQpIHtcbiAgICAgIHZhciBhcnJheSA9IFtdO1xuICAgICAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGFycmF5LnB1c2godmFsdWUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYXJyYXkuc29ydCgpLmpvaW4oXCIsIFwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXIodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAgICAgcmV0dXJuIG5ldyBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlUm9vdChyb290LCBlbGVtZW50KSB7XG4gICAgICByb290LmNvbnRleHQgPT09IGVtcHR5Q29udGV4dE9iamVjdCAmJlxuICAgICAgICAodXBkYXRlQ29udGFpbmVySW1wbChyb290LmN1cnJlbnQsIDIsIGVsZW1lbnQsIHJvb3QsIG51bGwsIG51bGwpLFxuICAgICAgICBmbHVzaFN5bmNXb3JrJDEoKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlUmVmcmVzaChyb290LCB1cGRhdGUpIHtcbiAgICAgIGlmIChudWxsICE9PSByZXNvbHZlRmFtaWx5KSB7XG4gICAgICAgIHZhciBzdGFsZUZhbWlsaWVzID0gdXBkYXRlLnN0YWxlRmFtaWxpZXM7XG4gICAgICAgIHVwZGF0ZSA9IHVwZGF0ZS51cGRhdGVkRmFtaWxpZXM7XG4gICAgICAgIGZsdXNoUGVuZGluZ0VmZmVjdHMoKTtcbiAgICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShcbiAgICAgICAgICByb290LmN1cnJlbnQsXG4gICAgICAgICAgdXBkYXRlLFxuICAgICAgICAgIHN0YWxlRmFtaWxpZXNcbiAgICAgICAgKTtcbiAgICAgICAgZmx1c2hTeW5jV29yayQxKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFJlZnJlc2hIYW5kbGVyKGhhbmRsZXIpIHtcbiAgICAgIHJlc29sdmVGYW1pbHkgPSBoYW5kbGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1ZhbGlkQ29udGFpbmVyKG5vZGUpIHtcbiAgICAgIHJldHVybiAhKFxuICAgICAgICAhbm9kZSB8fFxuICAgICAgICAoMSAhPT0gbm9kZS5ub2RlVHlwZSAmJiA5ICE9PSBub2RlLm5vZGVUeXBlICYmIDExICE9PSBub2RlLm5vZGVUeXBlKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikge1xuICAgICAgdmFyIG5vZGUgPSBmaWJlcixcbiAgICAgICAgbmVhcmVzdE1vdW50ZWQgPSBmaWJlcjtcbiAgICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIGZvciAoOyBub2RlLnJldHVybjsgKSBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICBlbHNlIHtcbiAgICAgICAgZmliZXIgPSBub2RlO1xuICAgICAgICBkb1xuICAgICAgICAgIChub2RlID0gZmliZXIpLFxuICAgICAgICAgICAgMCAhPT0gKG5vZGUuZmxhZ3MgJiA0MDk4KSAmJiAobmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybiksXG4gICAgICAgICAgICAoZmliZXIgPSBub2RlLnJldHVybik7XG4gICAgICAgIHdoaWxlIChmaWJlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gMyA9PT0gbm9kZS50YWcgPyBuZWFyZXN0TW91bnRlZCA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIoZmliZXIpIHtcbiAgICAgIGlmICgxMyA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgbnVsbCA9PT0gc3VzcGVuc2VTdGF0ZSAmJlxuICAgICAgICAgICgoZmliZXIgPSBmaWJlci5hbHRlcm5hdGUpLFxuICAgICAgICAgIG51bGwgIT09IGZpYmVyICYmIChzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZSkpO1xuICAgICAgICBpZiAobnVsbCAhPT0gc3VzcGVuc2VTdGF0ZSkgcmV0dXJuIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhc3NlcnRJc01vdW50ZWQoZmliZXIpIHtcbiAgICAgIGlmIChnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSAhPT0gZmliZXIpXG4gICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoZmliZXIpIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICBpZiAoIWFsdGVybmF0ZSkge1xuICAgICAgICBhbHRlcm5hdGUgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKTtcbiAgICAgICAgaWYgKG51bGwgPT09IGFsdGVybmF0ZSlcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICAgIHJldHVybiBhbHRlcm5hdGUgIT09IGZpYmVyID8gbnVsbCA6IGZpYmVyO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgYSA9IGZpYmVyLCBiID0gYWx0ZXJuYXRlOyA7ICkge1xuICAgICAgICB2YXIgcGFyZW50QSA9IGEucmV0dXJuO1xuICAgICAgICBpZiAobnVsbCA9PT0gcGFyZW50QSkgYnJlYWs7XG4gICAgICAgIHZhciBwYXJlbnRCID0gcGFyZW50QS5hbHRlcm5hdGU7XG4gICAgICAgIGlmIChudWxsID09PSBwYXJlbnRCKSB7XG4gICAgICAgICAgYiA9IHBhcmVudEEucmV0dXJuO1xuICAgICAgICAgIGlmIChudWxsICE9PSBiKSB7XG4gICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50QS5jaGlsZCA9PT0gcGFyZW50Qi5jaGlsZCkge1xuICAgICAgICAgIGZvciAocGFyZW50QiA9IHBhcmVudEEuY2hpbGQ7IHBhcmVudEI7ICkge1xuICAgICAgICAgICAgaWYgKHBhcmVudEIgPT09IGEpIHJldHVybiBhc3NlcnRJc01vdW50ZWQocGFyZW50QSksIGZpYmVyO1xuICAgICAgICAgICAgaWYgKHBhcmVudEIgPT09IGIpIHJldHVybiBhc3NlcnRJc01vdW50ZWQocGFyZW50QSksIGFsdGVybmF0ZTtcbiAgICAgICAgICAgIHBhcmVudEIgPSBwYXJlbnRCLnNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSAoYSA9IHBhcmVudEEpLCAoYiA9IHBhcmVudEIpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmb3IgKHZhciBkaWRGaW5kQ2hpbGQgPSAhMSwgX2NoaWxkID0gcGFyZW50QS5jaGlsZDsgX2NoaWxkOyApIHtcbiAgICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgICAgZGlkRmluZENoaWxkID0gITA7XG4gICAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9ICEwO1xuICAgICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAgICBmb3IgKF9jaGlsZCA9IHBhcmVudEIuY2hpbGQ7IF9jaGlsZDsgKSB7XG4gICAgICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSAhMDtcbiAgICAgICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICAgICAgZGlkRmluZENoaWxkID0gITA7XG4gICAgICAgICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZClcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJDaGlsZCB3YXMgbm90IGZvdW5kIGluIGVpdGhlciBwYXJlbnQgc2V0LiBUaGlzIGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdCByZWxhdGVkIHRvIHRoZSByZXR1cm4gcG9pbnRlci4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuYWx0ZXJuYXRlICE9PSBiKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJSZXR1cm4gZmliZXJzIHNob3VsZCBhbHdheXMgYmUgZWFjaCBvdGhlcnMnIGFsdGVybmF0ZXMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKDMgIT09IGEudGFnKVxuICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICByZXR1cm4gYS5zdGF0ZU5vZGUuY3VycmVudCA9PT0gYSA/IGZpYmVyIDogYWx0ZXJuYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwobm9kZSkge1xuICAgICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICAgICAgaWYgKDUgPT09IHRhZyB8fCAyNiA9PT0gdGFnIHx8IDI3ID09PSB0YWcgfHwgNiA9PT0gdGFnKSByZXR1cm4gbm9kZTtcbiAgICAgIGZvciAobm9kZSA9IG5vZGUuY2hpbGQ7IG51bGwgIT09IG5vZGU7ICkge1xuICAgICAgICB0YWcgPSBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwobm9kZSk7XG4gICAgICAgIGlmIChudWxsICE9PSB0YWcpIHJldHVybiB0YWc7XG4gICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gbWF5YmVJdGVyYWJsZSB8fCBcIm9iamVjdFwiICE9PSB0eXBlb2YgbWF5YmVJdGVyYWJsZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBtYXliZUl0ZXJhYmxlID1cbiAgICAgICAgKE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgICAgIG1heWJlSXRlcmFibGVbXCJAQGl0ZXJhdG9yXCJdO1xuICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG1heWJlSXRlcmFibGUgPyBtYXliZUl0ZXJhYmxlIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09IHR5cGUpIHJldHVybiBudWxsO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHJldHVybiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gdHlwZTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiRnJhZ21lbnRcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdHJpY3RNb2RlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZUxpc3RcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9BQ1RJVklUWV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIkFjdGl2aXR5XCI7XG4gICAgICB9XG4gICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHN3aXRjaCAoXG4gICAgICAgICAgKFwibnVtYmVyXCIgPT09IHR5cGVvZiB0eXBlLnRhZyAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgIHR5cGUuJCR0eXBlb2YpXG4gICAgICAgICkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gXCJQb3J0YWxcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Qcm92aWRlclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdHlwZSB8fFxuICAgICAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICh0eXBlID0gXCJcIiAhPT0gdHlwZSA/IFwiRm9yd2FyZFJlZihcIiArIHR5cGUgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChpbm5lclR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA/IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgIDogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJNZW1vXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICBpbm5lclR5cGUgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUoaW5uZXJUeXBlKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21Pd25lcihvd25lcikge1xuICAgICAgcmV0dXJuIFwibnVtYmVyXCIgPT09IHR5cGVvZiBvd25lci50YWdcbiAgICAgICAgPyBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKG93bmVyKVxuICAgICAgICA6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBvd25lci5uYW1lXG4gICAgICAgICAgPyBvd25lci5uYW1lXG4gICAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB7XG4gICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHJldHVybiBcIkFjdGl2aXR5XCI7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgcmV0dXJuIFwiQ2FjaGVcIjtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiAodHlwZS5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Qcm92aWRlclwiO1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIHJldHVybiBcIkRlaHlkcmF0ZWRGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZmliZXIgPSB0eXBlLnJlbmRlciksXG4gICAgICAgICAgICAoZmliZXIgPSBmaWJlci5kaXNwbGF5TmFtZSB8fCBmaWJlci5uYW1lIHx8IFwiXCIpLFxuICAgICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgICAgICAoXCJcIiAhPT0gZmliZXIgPyBcIkZvcndhcmRSZWYoXCIgKyBmaWJlciArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBcIkZyYWdtZW50XCI7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFwiUm9vdFwiO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFwiVGV4dFwiO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA/IFwiU3RyaWN0TW9kZVwiIDogXCJNb2RlXCI7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcmV0dXJuIFwiT2Zmc2NyZWVuXCI7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICByZXR1cm4gXCJTY29wZVwiO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgcmV0dXJuIFwiVHJhY2luZ01hcmtlclwiO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICAgICAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgdHlwZSA9IGZpYmVyLl9kZWJ1Z0luZm87XG4gICAgICAgICAgaWYgKG51bGwgIT0gdHlwZSlcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB0eXBlLmxlbmd0aCAtIDE7IDAgPD0gaTsgaS0tKVxuICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGVbaV0ubmFtZSkgcmV0dXJuIHR5cGVbaV0ubmFtZTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gZmliZXIucmV0dXJuKVxuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIucmV0dXJuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4geyBjdXJyZW50OiBkZWZhdWx0VmFsdWUgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wKGN1cnNvciwgZmliZXIpIHtcbiAgICAgIDAgPiBpbmRleCRqc2NvbXAkMFxuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXCJVbmV4cGVjdGVkIHBvcC5cIilcbiAgICAgICAgOiAoZmliZXIgIT09IGZpYmVyU3RhY2tbaW5kZXgkanNjb21wJDBdICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVW5leHBlY3RlZCBGaWJlciBwb3BwZWQuXCIpLFxuICAgICAgICAgIChjdXJzb3IuY3VycmVudCA9IHZhbHVlU3RhY2tbaW5kZXgkanNjb21wJDBdKSxcbiAgICAgICAgICAodmFsdWVTdGFja1tpbmRleCRqc2NvbXAkMF0gPSBudWxsKSxcbiAgICAgICAgICAoZmliZXJTdGFja1tpbmRleCRqc2NvbXAkMF0gPSBudWxsKSxcbiAgICAgICAgICBpbmRleCRqc2NvbXAkMC0tKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaChjdXJzb3IsIHZhbHVlLCBmaWJlcikge1xuICAgICAgaW5kZXgkanNjb21wJDArKztcbiAgICAgIHZhbHVlU3RhY2tbaW5kZXgkanNjb21wJDBdID0gY3Vyc29yLmN1cnJlbnQ7XG4gICAgICBmaWJlclN0YWNrW2luZGV4JGpzY29tcCQwXSA9IGZpYmVyO1xuICAgICAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVxdWlyZWRDb250ZXh0KGMpIHtcbiAgICAgIG51bGwgPT09IGMgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIGhvc3QgY29udGV4dCB0byBleGlzdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hIb3N0Q29udGFpbmVyKGZpYmVyLCBuZXh0Um9vdEluc3RhbmNlKSB7XG4gICAgICBwdXNoKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBuZXh0Um9vdEluc3RhbmNlLCBmaWJlcik7XG4gICAgICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpO1xuICAgICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG51bGwsIGZpYmVyKTtcbiAgICAgIHZhciBuZXh0Um9vdENvbnRleHQgPSBuZXh0Um9vdEluc3RhbmNlLm5vZGVUeXBlO1xuICAgICAgc3dpdGNoIChuZXh0Um9vdENvbnRleHQpIHtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIG5leHRSb290Q29udGV4dCA9IDkgPT09IG5leHRSb290Q29udGV4dCA/IFwiI2RvY3VtZW50XCIgOiBcIiNmcmFnbWVudFwiO1xuICAgICAgICAgIG5leHRSb290SW5zdGFuY2UgPSAobmV4dFJvb3RJbnN0YW5jZSA9XG4gICAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlLmRvY3VtZW50RWxlbWVudClcbiAgICAgICAgICAgID8gKG5leHRSb290SW5zdGFuY2UgPSBuZXh0Um9vdEluc3RhbmNlLm5hbWVzcGFjZVVSSSlcbiAgICAgICAgICAgICAgPyBnZXRPd25Ib3N0Q29udGV4dChuZXh0Um9vdEluc3RhbmNlKVxuICAgICAgICAgICAgICA6IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZVxuICAgICAgICAgICAgOiBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKChuZXh0Um9vdENvbnRleHQgPSBuZXh0Um9vdEluc3RhbmNlLnRhZ05hbWUpLFxuICAgICAgICAgICAgKG5leHRSb290SW5zdGFuY2UgPSBuZXh0Um9vdEluc3RhbmNlLm5hbWVzcGFjZVVSSSkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgKG5leHRSb290SW5zdGFuY2UgPSBnZXRPd25Ib3N0Q29udGV4dChuZXh0Um9vdEluc3RhbmNlKSksXG4gICAgICAgICAgICAgIChuZXh0Um9vdEluc3RhbmNlID0gZ2V0Q2hpbGRIb3N0Q29udGV4dFByb2QoXG4gICAgICAgICAgICAgICAgbmV4dFJvb3RJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBuZXh0Um9vdENvbnRleHRcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoIChuZXh0Um9vdENvbnRleHQpIHtcbiAgICAgICAgICAgICAgY2FzZSBcInN2Z1wiOlxuICAgICAgICAgICAgICAgIG5leHRSb290SW5zdGFuY2UgPSBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgICAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlID0gSG9zdENvbnRleHROYW1lc3BhY2VNYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG5leHRSb290SW5zdGFuY2UgPSBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0Um9vdENvbnRleHQgPSBuZXh0Um9vdENvbnRleHQudG9Mb3dlckNhc2UoKTtcbiAgICAgIG5leHRSb290Q29udGV4dCA9IHVwZGF0ZWRBbmNlc3RvckluZm9EZXYobnVsbCwgbmV4dFJvb3RDb250ZXh0KTtcbiAgICAgIG5leHRSb290Q29udGV4dCA9IHtcbiAgICAgICAgY29udGV4dDogbmV4dFJvb3RJbnN0YW5jZSxcbiAgICAgICAgYW5jZXN0b3JJbmZvOiBuZXh0Um9vdENvbnRleHRcbiAgICAgIH07XG4gICAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbmV4dFJvb3RDb250ZXh0LCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEhvc3RDb250YWluZXIoZmliZXIpIHtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgcG9wKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEhvc3RDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hIb3N0Q29udGV4dChmaWJlcikge1xuICAgICAgbnVsbCAhPT0gZmliZXIubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICBwdXNoKGhvc3RUcmFuc2l0aW9uUHJvdmlkZXJDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gICAgICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICB2YXIgbmV4dENvbnRleHQgPSBnZXRDaGlsZEhvc3RDb250ZXh0UHJvZChjb250ZXh0LmNvbnRleHQsIHR5cGUpO1xuICAgICAgdHlwZSA9IHVwZGF0ZWRBbmNlc3RvckluZm9EZXYoY29udGV4dC5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgbmV4dENvbnRleHQgPSB7IGNvbnRleHQ6IG5leHRDb250ZXh0LCBhbmNlc3RvckluZm86IHR5cGUgfTtcbiAgICAgIGNvbnRleHQgIT09IG5leHRDb250ZXh0ICYmXG4gICAgICAgIChwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpLFxuICAgICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbmV4dENvbnRleHQsIGZpYmVyKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gICAgICBjb250ZXh0RmliZXJTdGFja0N1cnNvci5jdXJyZW50ID09PSBmaWJlciAmJlxuICAgICAgICAocG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpLCBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKSk7XG4gICAgICBob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yLmN1cnJlbnQgPT09IGZpYmVyICYmXG4gICAgICAgIChwb3AoaG9zdFRyYW5zaXRpb25Qcm92aWRlckN1cnNvciwgZmliZXIpLFxuICAgICAgICAoSG9zdFRyYW5zaXRpb25Db250ZXh0Ll9jdXJyZW50VmFsdWUgPSBOb3RQZW5kaW5nVHJhbnNpdGlvbikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJlxuICAgICAgICAgIFN5bWJvbC50b1N0cmluZ1RhZyAmJlxuICAgICAgICAgIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10pIHx8XG4gICAgICAgIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgXCJPYmplY3RcIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2lsbENvZXJjaW9uVGhyb3codmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpLCAhMTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGAlc2AgYXR0cmlidXRlIGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgICAgYXR0cmlidXRlTmFtZSxcbiAgICAgICAgICAgIHR5cGVOYW1lKHZhbHVlKVxuICAgICAgICAgICksXG4gICAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0NTU1Byb3BlcnR5U3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BOYW1lKSB7XG4gICAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSBwcm92aWRlZCBgJXNgIENTUyBwcm9wZXJ0eSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICAgIHByb3BOYW1lLFxuICAgICAgICAgICAgdHlwZU5hbWUodmFsdWUpXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrRm9ybUZpZWxkVmFsdWVTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJGb3JtIGZpZWxkIHZhbHVlcyAodmFsdWUsIGNoZWNrZWQsIGRlZmF1bHRWYWx1ZSwgb3IgZGVmYXVsdENoZWNrZWQgcHJvcHMpIG11c3QgYmUgc3RyaW5ncywgbm90ICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICAgIHR5cGVOYW1lKHZhbHVlKVxuICAgICAgICAgICksXG4gICAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbmplY3RJbnRlcm5hbHMoaW50ZXJuYWxzKSB7XG4gICAgICBpZiAoXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXykgcmV0dXJuICExO1xuICAgICAgdmFyIGhvb2sgPSBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG4gICAgICBpZiAoaG9vay5pc0Rpc2FibGVkKSByZXR1cm4gITA7XG4gICAgICBpZiAoIWhvb2suc3VwcG9ydHNGaWJlcilcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUmVhY3QgRGV2VG9vbHMgaXMgdG9vIG9sZCBhbmQgd2lsbCBub3Qgd29yayB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUmVhY3QuIFBsZWFzZSB1cGRhdGUgUmVhY3QgRGV2VG9vbHMuIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcmVhY3QtZGV2dG9vbHNcIlxuICAgICAgICAgICksXG4gICAgICAgICAgITBcbiAgICAgICAgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIChyZW5kZXJlcklEID0gaG9vay5pbmplY3QoaW50ZXJuYWxzKSksIChpbmplY3RlZEhvb2sgPSBob29rKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcy5cIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBob29rLmNoZWNrRENFID8gITAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMobmV3SXNTdHJpY3RNb2RlKSB7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBsb2ckMSAmJlxuICAgICAgICB1bnN0YWJsZV9zZXREaXNhYmxlWWllbGRWYWx1ZShuZXdJc1N0cmljdE1vZGUpO1xuICAgICAgaWYgKGluamVjdGVkSG9vayAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2suc2V0U3RyaWN0TW9kZSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbmplY3RlZEhvb2suc2V0U3RyaWN0TW9kZShyZW5kZXJlcklELCBuZXdJc1N0cmljdE1vZGUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciB8fFxuICAgICAgICAgICAgKChoYXNMb2dnZWRFcnJvciA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlc1wiLFxuICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluamVjdFByb2ZpbGluZ0hvb2tzKHByb2ZpbGluZ0hvb2tzKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzID0gcHJvZmlsaW5nSG9va3M7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtDb21taXRTdG9wcGVkKCkge1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21taXRTdG9wcGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbW1pdFN0b3BwZWQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQoZmliZXIpIHtcbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpIHtcbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1JlbmRlclN0YXJ0ZWQobGFuZXMpIHtcbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyU3RhcnRlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTdGFydGVkKGxhbmVzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1JlbmRlclN0b3BwZWQoKSB7XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclN0b3BwZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyU3RvcHBlZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoZmliZXIsIGxhbmUpIHtcbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoZmliZXIsIGxhbmUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbHozMkZhbGxiYWNrKHgpIHtcbiAgICAgIHggPj4+PSAwO1xuICAgICAgcmV0dXJuIDAgPT09IHggPyAzMiA6ICgzMSAtICgobG9nKHgpIC8gTE4yKSB8IDApKSB8IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldExhYmVsRm9yTGFuZShsYW5lKSB7XG4gICAgICBpZiAobGFuZSAmIDEpIHJldHVybiBcIlN5bmNIeWRyYXRpb25MYW5lXCI7XG4gICAgICBpZiAobGFuZSAmIDIpIHJldHVybiBcIlN5bmNcIjtcbiAgICAgIGlmIChsYW5lICYgNCkgcmV0dXJuIFwiSW5wdXRDb250aW51b3VzSHlkcmF0aW9uXCI7XG4gICAgICBpZiAobGFuZSAmIDgpIHJldHVybiBcIklucHV0Q29udGludW91c1wiO1xuICAgICAgaWYgKGxhbmUgJiAxNikgcmV0dXJuIFwiRGVmYXVsdEh5ZHJhdGlvblwiO1xuICAgICAgaWYgKGxhbmUgJiAzMikgcmV0dXJuIFwiRGVmYXVsdFwiO1xuICAgICAgaWYgKGxhbmUgJiAxMjgpIHJldHVybiBcIlRyYW5zaXRpb25IeWRyYXRpb25cIjtcbiAgICAgIGlmIChsYW5lICYgNDE5NDA0OCkgcmV0dXJuIFwiVHJhbnNpdGlvblwiO1xuICAgICAgaWYgKGxhbmUgJiA2MjkxNDU2MCkgcmV0dXJuIFwiUmV0cnlcIjtcbiAgICAgIGlmIChsYW5lICYgNjcxMDg4NjQpIHJldHVybiBcIlNlbGVjdGl2ZUh5ZHJhdGlvblwiO1xuICAgICAgaWYgKGxhbmUgJiAxMzQyMTc3MjgpIHJldHVybiBcIklkbGVIeWRyYXRpb25cIjtcbiAgICAgIGlmIChsYW5lICYgMjY4NDM1NDU2KSByZXR1cm4gXCJJZGxlXCI7XG4gICAgICBpZiAobGFuZSAmIDUzNjg3MDkxMikgcmV0dXJuIFwiT2Zmc2NyZWVuXCI7XG4gICAgICBpZiAobGFuZSAmIDEwNzM3NDE4MjQpIHJldHVybiBcIkRlZmVycmVkXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gICAgICB2YXIgcGVuZGluZ1N5bmNMYW5lcyA9IGxhbmVzICYgNDI7XG4gICAgICBpZiAoMCAhPT0gcGVuZGluZ1N5bmNMYW5lcykgcmV0dXJuIHBlbmRpbmdTeW5jTGFuZXM7XG4gICAgICBzd2l0Y2ggKGxhbmVzICYgLWxhbmVzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIDQ7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICByZXR1cm4gMTY7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgcmV0dXJuIDMyO1xuICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgIHJldHVybiA2NDtcbiAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgcmV0dXJuIDEyODtcbiAgICAgICAgY2FzZSAyNTY6XG4gICAgICAgIGNhc2UgNTEyOlxuICAgICAgICBjYXNlIDEwMjQ6XG4gICAgICAgIGNhc2UgMjA0ODpcbiAgICAgICAgY2FzZSA0MDk2OlxuICAgICAgICBjYXNlIDgxOTI6XG4gICAgICAgIGNhc2UgMTYzODQ6XG4gICAgICAgIGNhc2UgMzI3Njg6XG4gICAgICAgIGNhc2UgNjU1MzY6XG4gICAgICAgIGNhc2UgMTMxMDcyOlxuICAgICAgICBjYXNlIDI2MjE0NDpcbiAgICAgICAgY2FzZSA1MjQyODg6XG4gICAgICAgIGNhc2UgMTA0ODU3NjpcbiAgICAgICAgY2FzZSAyMDk3MTUyOlxuICAgICAgICAgIHJldHVybiBsYW5lcyAmIDQxOTQwNDg7XG4gICAgICAgIGNhc2UgNDE5NDMwNDpcbiAgICAgICAgY2FzZSA4Mzg4NjA4OlxuICAgICAgICBjYXNlIDE2Nzc3MjE2OlxuICAgICAgICBjYXNlIDMzNTU0NDMyOlxuICAgICAgICAgIHJldHVybiBsYW5lcyAmIDYyOTE0NTYwO1xuICAgICAgICBjYXNlIDY3MTA4ODY0OlxuICAgICAgICAgIHJldHVybiA2NzEwODg2NDtcbiAgICAgICAgY2FzZSAxMzQyMTc3Mjg6XG4gICAgICAgICAgcmV0dXJuIDEzNDIxNzcyODtcbiAgICAgICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICAgICAgcmV0dXJuIDI2ODQzNTQ1NjtcbiAgICAgICAgY2FzZSA1MzY4NzA5MTI6XG4gICAgICAgICAgcmV0dXJuIDUzNjg3MDkxMjtcbiAgICAgICAgY2FzZSAxMDczNzQxODI0OlxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlNob3VsZCBoYXZlIGZvdW5kIG1hdGNoaW5nIGxhbmVzLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROZXh0TGFuZXMocm9vdCwgd2lwTGFuZXMsIHJvb3RIYXNQZW5kaW5nQ29tbWl0KSB7XG4gICAgICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICBpZiAoMCA9PT0gcGVuZGluZ0xhbmVzKSByZXR1cm4gMDtcbiAgICAgIHZhciBuZXh0TGFuZXMgPSAwLFxuICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXMsXG4gICAgICAgIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lcztcbiAgICAgIHJvb3QgPSByb290Lndhcm1MYW5lcztcbiAgICAgIHZhciBub25JZGxlUGVuZGluZ0xhbmVzID0gcGVuZGluZ0xhbmVzICYgMTM0MjE3NzI3O1xuICAgICAgMCAhPT0gbm9uSWRsZVBlbmRpbmdMYW5lc1xuICAgICAgICA/ICgocGVuZGluZ0xhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcyksXG4gICAgICAgICAgMCAhPT0gcGVuZGluZ0xhbmVzXG4gICAgICAgICAgICA/IChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhwZW5kaW5nTGFuZXMpKVxuICAgICAgICAgICAgOiAoKHBpbmdlZExhbmVzICY9IG5vbklkbGVQZW5kaW5nTGFuZXMpLFxuICAgICAgICAgICAgICAwICE9PSBwaW5nZWRMYW5lc1xuICAgICAgICAgICAgICAgID8gKG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHBpbmdlZExhbmVzKSlcbiAgICAgICAgICAgICAgICA6IHJvb3RIYXNQZW5kaW5nQ29tbWl0IHx8XG4gICAgICAgICAgICAgICAgICAoKHJvb3RIYXNQZW5kaW5nQ29tbWl0ID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIH5yb290KSxcbiAgICAgICAgICAgICAgICAgIDAgIT09IHJvb3RIYXNQZW5kaW5nQ29tbWl0ICYmXG4gICAgICAgICAgICAgICAgICAgIChuZXh0TGFuZXMgPVxuICAgICAgICAgICAgICAgICAgICAgIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHJvb3RIYXNQZW5kaW5nQ29tbWl0KSkpKSlcbiAgICAgICAgOiAoKG5vbklkbGVQZW5kaW5nTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXMpLFxuICAgICAgICAgIDAgIT09IG5vbklkbGVQZW5kaW5nTGFuZXNcbiAgICAgICAgICAgID8gKG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVQZW5kaW5nTGFuZXMpKVxuICAgICAgICAgICAgOiAwICE9PSBwaW5nZWRMYW5lc1xuICAgICAgICAgICAgICA/IChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhwaW5nZWRMYW5lcykpXG4gICAgICAgICAgICAgIDogcm9vdEhhc1BlbmRpbmdDb21taXQgfHxcbiAgICAgICAgICAgICAgICAoKHJvb3RIYXNQZW5kaW5nQ29tbWl0ID0gcGVuZGluZ0xhbmVzICYgfnJvb3QpLFxuICAgICAgICAgICAgICAgIDAgIT09IHJvb3RIYXNQZW5kaW5nQ29tbWl0ICYmXG4gICAgICAgICAgICAgICAgICAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocm9vdEhhc1BlbmRpbmdDb21taXQpKSkpO1xuICAgICAgcmV0dXJuIDAgPT09IG5leHRMYW5lc1xuICAgICAgICA/IDBcbiAgICAgICAgOiAwICE9PSB3aXBMYW5lcyAmJlxuICAgICAgICAgICAgd2lwTGFuZXMgIT09IG5leHRMYW5lcyAmJlxuICAgICAgICAgICAgMCA9PT0gKHdpcExhbmVzICYgc3VzcGVuZGVkTGFuZXMpICYmXG4gICAgICAgICAgICAoKHN1c3BlbmRlZExhbmVzID0gbmV4dExhbmVzICYgLW5leHRMYW5lcyksXG4gICAgICAgICAgICAocm9vdEhhc1BlbmRpbmdDb21taXQgPSB3aXBMYW5lcyAmIC13aXBMYW5lcyksXG4gICAgICAgICAgICBzdXNwZW5kZWRMYW5lcyA+PSByb290SGFzUGVuZGluZ0NvbW1pdCB8fFxuICAgICAgICAgICAgICAoMzIgPT09IHN1c3BlbmRlZExhbmVzICYmIDAgIT09IChyb290SGFzUGVuZGluZ0NvbW1pdCAmIDQxOTQwNDgpKSlcbiAgICAgICAgICA/IHdpcExhbmVzXG4gICAgICAgICAgOiBuZXh0TGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcocm9vdCwgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDAgPT09XG4gICAgICAgIChyb290LnBlbmRpbmdMYW5lcyAmXG4gICAgICAgICAgfihyb290LnN1c3BlbmRlZExhbmVzICYgfnJvb3QucGluZ2VkTGFuZXMpICZcbiAgICAgICAgICByZW5kZXJMYW5lcylcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSkge1xuICAgICAgc3dpdGNoIChsYW5lKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICByZXR1cm4gY3VycmVudFRpbWUgKyAyNTA7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgIGNhc2UgMTI4OlxuICAgICAgICBjYXNlIDI1NjpcbiAgICAgICAgY2FzZSA1MTI6XG4gICAgICAgIGNhc2UgMTAyNDpcbiAgICAgICAgY2FzZSAyMDQ4OlxuICAgICAgICBjYXNlIDQwOTY6XG4gICAgICAgIGNhc2UgODE5MjpcbiAgICAgICAgY2FzZSAxNjM4NDpcbiAgICAgICAgY2FzZSAzMjc2ODpcbiAgICAgICAgY2FzZSA2NTUzNjpcbiAgICAgICAgY2FzZSAxMzEwNzI6XG4gICAgICAgIGNhc2UgMjYyMTQ0OlxuICAgICAgICBjYXNlIDUyNDI4ODpcbiAgICAgICAgY2FzZSAxMDQ4NTc2OlxuICAgICAgICBjYXNlIDIwOTcxNTI6XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgNWUzO1xuICAgICAgICBjYXNlIDQxOTQzMDQ6XG4gICAgICAgIGNhc2UgODM4ODYwODpcbiAgICAgICAgY2FzZSAxNjc3NzIxNjpcbiAgICAgICAgY2FzZSAzMzU1NDQzMjpcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGNhc2UgNjcxMDg4NjQ6XG4gICAgICAgIGNhc2UgMTM0MjE3NzI4OlxuICAgICAgICBjYXNlIDI2ODQzNTQ1NjpcbiAgICAgICAgY2FzZSA1MzY4NzA5MTI6XG4gICAgICAgIGNhc2UgMTA3Mzc0MTgyNDpcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiU2hvdWxkIGhhdmUgZm91bmQgbWF0Y2hpbmcgbGFuZXMuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAtMVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsYWltTmV4dFRyYW5zaXRpb25MYW5lKCkge1xuICAgICAgdmFyIGxhbmUgPSBuZXh0VHJhbnNpdGlvbkxhbmU7XG4gICAgICBuZXh0VHJhbnNpdGlvbkxhbmUgPDw9IDE7XG4gICAgICAwID09PSAobmV4dFRyYW5zaXRpb25MYW5lICYgNDE5NDA0OCkgJiYgKG5leHRUcmFuc2l0aW9uTGFuZSA9IDI1Nik7XG4gICAgICByZXR1cm4gbGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xhaW1OZXh0UmV0cnlMYW5lKCkge1xuICAgICAgdmFyIGxhbmUgPSBuZXh0UmV0cnlMYW5lO1xuICAgICAgbmV4dFJldHJ5TGFuZSA8PD0gMTtcbiAgICAgIDAgPT09IChuZXh0UmV0cnlMYW5lICYgNjI5MTQ1NjApICYmIChuZXh0UmV0cnlMYW5lID0gNDE5NDMwNCk7XG4gICAgICByZXR1cm4gbGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTGFuZU1hcChpbml0aWFsKSB7XG4gICAgICBmb3IgKHZhciBsYW5lTWFwID0gW10sIGkgPSAwOyAzMSA+IGk7IGkrKykgbGFuZU1hcC5wdXNoKGluaXRpYWwpO1xuICAgICAgcmV0dXJuIGxhbmVNYXA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSb290VXBkYXRlZCQxKHJvb3QsIHVwZGF0ZUxhbmUpIHtcbiAgICAgIHJvb3QucGVuZGluZ0xhbmVzIHw9IHVwZGF0ZUxhbmU7XG4gICAgICAyNjg0MzU0NTYgIT09IHVwZGF0ZUxhbmUgJiZcbiAgICAgICAgKChyb290LnN1c3BlbmRlZExhbmVzID0gMCksXG4gICAgICAgIChyb290LnBpbmdlZExhbmVzID0gMCksXG4gICAgICAgIChyb290Lndhcm1MYW5lcyA9IDApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1Jvb3RGaW5pc2hlZChcbiAgICAgIHJvb3QsXG4gICAgICBmaW5pc2hlZExhbmVzLFxuICAgICAgcmVtYWluaW5nTGFuZXMsXG4gICAgICBzcGF3bmVkTGFuZSxcbiAgICAgIHVwZGF0ZWRMYW5lcyxcbiAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXNcbiAgICApIHtcbiAgICAgIHZhciBwcmV2aW91c2x5UGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICByb290LnBlbmRpbmdMYW5lcyA9IHJlbWFpbmluZ0xhbmVzO1xuICAgICAgcm9vdC5zdXNwZW5kZWRMYW5lcyA9IDA7XG4gICAgICByb290LnBpbmdlZExhbmVzID0gMDtcbiAgICAgIHJvb3Qud2FybUxhbmVzID0gMDtcbiAgICAgIHJvb3QuZXhwaXJlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICAgICAgcm9vdC5lbnRhbmdsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgICAgIHJvb3QuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gICAgICByb290LnNoZWxsU3VzcGVuZENvdW50ZXIgPSAwO1xuICAgICAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHMsXG4gICAgICAgIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzLFxuICAgICAgICBoaWRkZW5VcGRhdGVzID0gcm9vdC5oaWRkZW5VcGRhdGVzO1xuICAgICAgZm9yIChcbiAgICAgICAgcmVtYWluaW5nTGFuZXMgPSBwcmV2aW91c2x5UGVuZGluZ0xhbmVzICYgfnJlbWFpbmluZ0xhbmVzO1xuICAgICAgICAwIDwgcmVtYWluaW5nTGFuZXM7XG5cbiAgICAgICkge1xuICAgICAgICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKHJlbWFpbmluZ0xhbmVzKSxcbiAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgZW50YW5nbGVtZW50c1tpbmRleF0gPSAwO1xuICAgICAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gLTE7XG4gICAgICAgIHZhciBoaWRkZW5VcGRhdGVzRm9yTGFuZSA9IGhpZGRlblVwZGF0ZXNbaW5kZXhdO1xuICAgICAgICBpZiAobnVsbCAhPT0gaGlkZGVuVXBkYXRlc0ZvckxhbmUpXG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIGhpZGRlblVwZGF0ZXNbaW5kZXhdID0gbnVsbCwgaW5kZXggPSAwO1xuICAgICAgICAgICAgaW5kZXggPCBoaWRkZW5VcGRhdGVzRm9yTGFuZS5sZW5ndGg7XG4gICAgICAgICAgICBpbmRleCsrXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gaGlkZGVuVXBkYXRlc0ZvckxhbmVbaW5kZXhdO1xuICAgICAgICAgICAgbnVsbCAhPT0gdXBkYXRlICYmICh1cGRhdGUubGFuZSAmPSAtNTM2ODcwOTEzKTtcbiAgICAgICAgICB9XG4gICAgICAgIHJlbWFpbmluZ0xhbmVzICY9IH5sYW5lO1xuICAgICAgfVxuICAgICAgMCAhPT0gc3Bhd25lZExhbmUgJiYgbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIDApO1xuICAgICAgMCAhPT0gc3VzcGVuZGVkUmV0cnlMYW5lcyAmJlxuICAgICAgICAwID09PSB1cGRhdGVkTGFuZXMgJiZcbiAgICAgICAgMCAhPT0gcm9vdC50YWcgJiZcbiAgICAgICAgKHJvb3Quc3VzcGVuZGVkTGFuZXMgfD1cbiAgICAgICAgICBzdXNwZW5kZWRSZXRyeUxhbmVzICYgfihwcmV2aW91c2x5UGVuZGluZ0xhbmVzICYgfmZpbmlzaGVkTGFuZXMpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIGVudGFuZ2xlZExhbmVzKSB7XG4gICAgICByb290LnBlbmRpbmdMYW5lcyB8PSBzcGF3bmVkTGFuZTtcbiAgICAgIHJvb3Quc3VzcGVuZGVkTGFuZXMgJj0gfnNwYXduZWRMYW5lO1xuICAgICAgdmFyIHNwYXduZWRMYW5lSW5kZXggPSAzMSAtIGNsejMyKHNwYXduZWRMYW5lKTtcbiAgICAgIHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gc3Bhd25lZExhbmU7XG4gICAgICByb290LmVudGFuZ2xlbWVudHNbc3Bhd25lZExhbmVJbmRleF0gPVxuICAgICAgICByb290LmVudGFuZ2xlbWVudHNbc3Bhd25lZExhbmVJbmRleF0gfFxuICAgICAgICAxMDczNzQxODI0IHxcbiAgICAgICAgKGVudGFuZ2xlZExhbmVzICYgNDE5NDA5MCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIGVudGFuZ2xlZExhbmVzKSB7XG4gICAgICB2YXIgcm9vdEVudGFuZ2xlZExhbmVzID0gKHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gZW50YW5nbGVkTGFuZXMpO1xuICAgICAgZm9yIChyb290ID0gcm9vdC5lbnRhbmdsZW1lbnRzOyByb290RW50YW5nbGVkTGFuZXM7ICkge1xuICAgICAgICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKHJvb3RFbnRhbmdsZWRMYW5lcyksXG4gICAgICAgICAgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICAgIChsYW5lICYgZW50YW5nbGVkTGFuZXMpIHwgKHJvb3RbaW5kZXhdICYgZW50YW5nbGVkTGFuZXMpICYmXG4gICAgICAgICAgKHJvb3RbaW5kZXhdIHw9IGVudGFuZ2xlZExhbmVzKTtcbiAgICAgICAgcm9vdEVudGFuZ2xlZExhbmVzICY9IH5sYW5lO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRCdW1wZWRMYW5lRm9ySHlkcmF0aW9uQnlMYW5lKGxhbmUpIHtcbiAgICAgIHN3aXRjaCAobGFuZSkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbGFuZSA9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBsYW5lID0gNDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICBsYW5lID0gMTY7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjU2OlxuICAgICAgICBjYXNlIDUxMjpcbiAgICAgICAgY2FzZSAxMDI0OlxuICAgICAgICBjYXNlIDIwNDg6XG4gICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgY2FzZSA4MTkyOlxuICAgICAgICBjYXNlIDE2Mzg0OlxuICAgICAgICBjYXNlIDMyNzY4OlxuICAgICAgICBjYXNlIDY1NTM2OlxuICAgICAgICBjYXNlIDEzMTA3MjpcbiAgICAgICAgY2FzZSAyNjIxNDQ6XG4gICAgICAgIGNhc2UgNTI0Mjg4OlxuICAgICAgICBjYXNlIDEwNDg1NzY6XG4gICAgICAgIGNhc2UgMjA5NzE1MjpcbiAgICAgICAgY2FzZSA0MTk0MzA0OlxuICAgICAgICBjYXNlIDgzODg2MDg6XG4gICAgICAgIGNhc2UgMTY3NzcyMTY6XG4gICAgICAgIGNhc2UgMzM1NTQ0MzI6XG4gICAgICAgICAgbGFuZSA9IDEyODtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICAgICAgbGFuZSA9IDEzNDIxNzcyODtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBsYW5lID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRGaWJlclRvTGFuZXNNYXAocm9vdCwgZmliZXIsIGxhbmVzKSB7XG4gICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpXG4gICAgICAgIGZvciAocm9vdCA9IHJvb3QucGVuZGluZ1VwZGF0ZXJzTGFuZU1hcDsgMCA8IGxhbmVzOyApIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKSxcbiAgICAgICAgICAgIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICAgIHJvb3RbaW5kZXhdLmFkZChmaWJlcik7XG4gICAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbW92ZVBlbmRpbmdGaWJlcnNUb01lbW9pemVkKHJvb3QsIGxhbmVzKSB7XG4gICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIHBlbmRpbmdVcGRhdGVyc0xhbmVNYXAgPSByb290LnBlbmRpbmdVcGRhdGVyc0xhbmVNYXAsXG4gICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzID0gcm9vdC5tZW1vaXplZFVwZGF0ZXJzO1xuICAgICAgICAgIDAgPCBsYW5lcztcblxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKTtcbiAgICAgICAgICByb290ID0gMSA8PCBpbmRleDtcbiAgICAgICAgICBpbmRleCA9IHBlbmRpbmdVcGRhdGVyc0xhbmVNYXBbaW5kZXhdO1xuICAgICAgICAgIDAgPCBpbmRleC5zaXplICYmXG4gICAgICAgICAgICAoaW5kZXguZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgICAgICAgKG51bGwgIT09IGFsdGVybmF0ZSAmJiBtZW1vaXplZFVwZGF0ZXJzLmhhcyhhbHRlcm5hdGUpKSB8fFxuICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMuYWRkKGZpYmVyKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgaW5kZXguY2xlYXIoKSk7XG4gICAgICAgICAgbGFuZXMgJj0gfnJvb3Q7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbGFuZXNUb0V2ZW50UHJpb3JpdHkobGFuZXMpIHtcbiAgICAgIGxhbmVzICY9IC1sYW5lcztcbiAgICAgIHJldHVybiAwICE9PSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHkgJiYgRGlzY3JldGVFdmVudFByaW9yaXR5IDwgbGFuZXNcbiAgICAgICAgPyAwICE9PSBDb250aW51b3VzRXZlbnRQcmlvcml0eSAmJiBDb250aW51b3VzRXZlbnRQcmlvcml0eSA8IGxhbmVzXG4gICAgICAgICAgPyAwICE9PSAobGFuZXMgJiAxMzQyMTc3MjcpXG4gICAgICAgICAgICA/IERlZmF1bHRFdmVudFByaW9yaXR5XG4gICAgICAgICAgICA6IElkbGVFdmVudFByaW9yaXR5XG4gICAgICAgICAgOiBDb250aW51b3VzRXZlbnRQcmlvcml0eVxuICAgICAgICA6IERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVwZGF0ZVByaW9yaXR5KCkge1xuICAgICAgdmFyIHVwZGF0ZVByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIGlmICgwICE9PSB1cGRhdGVQcmlvcml0eSkgcmV0dXJuIHVwZGF0ZVByaW9yaXR5O1xuICAgICAgdXBkYXRlUHJpb3JpdHkgPSB3aW5kb3cuZXZlbnQ7XG4gICAgICByZXR1cm4gdm9pZCAwID09PSB1cGRhdGVQcmlvcml0eVxuICAgICAgICA/IERlZmF1bHRFdmVudFByaW9yaXR5XG4gICAgICAgIDogZ2V0RXZlbnRQcmlvcml0eSh1cGRhdGVQcmlvcml0eS50eXBlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5LCBmbikge1xuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJpb3JpdHkpLCBmbigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRldGFjaERlbGV0ZWRJbnN0YW5jZShub2RlKSB7XG4gICAgICBkZWxldGUgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcbiAgICAgIGRlbGV0ZSBub2RlW2ludGVybmFsUHJvcHNLZXldO1xuICAgICAgZGVsZXRlIG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XTtcbiAgICAgIGRlbGV0ZSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyTGlzdGVuZXJzS2V5XTtcbiAgICAgIGRlbGV0ZSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVzU2V0S2V5XTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0Tm9kZSkge1xuICAgICAgdmFyIHRhcmdldEluc3QgPSB0YXJnZXROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuICAgICAgaWYgKHRhcmdldEluc3QpIHJldHVybiB0YXJnZXRJbnN0O1xuICAgICAgZm9yICh2YXIgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTsgcGFyZW50Tm9kZTsgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGFyZ2V0SW5zdCA9XG4gICAgICAgICAgICBwYXJlbnROb2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldIHx8XG4gICAgICAgICAgICBwYXJlbnROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldKVxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJlbnROb2RlID0gdGFyZ2V0SW5zdC5hbHRlcm5hdGU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCAhPT0gdGFyZ2V0SW5zdC5jaGlsZCB8fFxuICAgICAgICAgICAgKG51bGwgIT09IHBhcmVudE5vZGUgJiYgbnVsbCAhPT0gcGFyZW50Tm9kZS5jaGlsZClcbiAgICAgICAgICApXG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICB0YXJnZXROb2RlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXROb2RlKTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gdGFyZ2V0Tm9kZTtcblxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmICgocGFyZW50Tm9kZSA9IHRhcmdldE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0pKVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnROb2RlO1xuICAgICAgICAgICAgICB0YXJnZXROb2RlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXROb2RlID0gcGFyZW50Tm9kZTtcbiAgICAgICAgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKG5vZGUgPSBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldIHx8IG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0pXG4gICAgICApIHtcbiAgICAgICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgNSA9PT0gdGFnIHx8XG4gICAgICAgICAgNiA9PT0gdGFnIHx8XG4gICAgICAgICAgMTMgPT09IHRhZyB8fFxuICAgICAgICAgIDI2ID09PSB0YWcgfHxcbiAgICAgICAgICAyNyA9PT0gdGFnIHx8XG4gICAgICAgICAgMyA9PT0gdGFnXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROb2RlRnJvbUluc3RhbmNlKGluc3QpIHtcbiAgICAgIHZhciB0YWcgPSBpbnN0LnRhZztcbiAgICAgIGlmICg1ID09PSB0YWcgfHwgMjYgPT09IHRhZyB8fCAyNyA9PT0gdGFnIHx8IDYgPT09IHRhZylcbiAgICAgICAgcmV0dXJuIGluc3Quc3RhdGVOb2RlO1xuICAgICAgdGhyb3cgRXJyb3IoXCJnZXROb2RlRnJvbUluc3RhbmNlOiBJbnZhbGlkIGFyZ3VtZW50LlwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UmVzb3VyY2VzRnJvbVJvb3Qocm9vdCkge1xuICAgICAgdmFyIHJlc291cmNlcyA9IHJvb3RbaW50ZXJuYWxSb290Tm9kZVJlc291cmNlc0tleV07XG4gICAgICByZXNvdXJjZXMgfHxcbiAgICAgICAgKHJlc291cmNlcyA9IHJvb3RbaW50ZXJuYWxSb290Tm9kZVJlc291cmNlc0tleV0gPVxuICAgICAgICAgIHsgaG9pc3RhYmxlU3R5bGVzOiBuZXcgTWFwKCksIGhvaXN0YWJsZVNjcmlwdHM6IG5ldyBNYXAoKSB9KTtcbiAgICAgIHJldHVybiByZXNvdXJjZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtOb2RlQXNIb2lzdGFibGUobm9kZSkge1xuICAgICAgbm9kZVtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0gPSAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICAgICAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpO1xuICAgICAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lICsgXCJDYXB0dXJlXCIsIGRlcGVuZGVuY2llcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJFdmVudFJlZ2lzdHJ5OiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSByZWdpc3RyYXRpb24gbmFtZSwgYCVzYC5cIixcbiAgICAgICAgICByZWdpc3RyYXRpb25OYW1lXG4gICAgICAgICk7XG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdID0gZGVwZW5kZW5jaWVzO1xuICAgICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gPSByZWdpc3RyYXRpb25OYW1lO1xuICAgICAgXCJvbkRvdWJsZUNsaWNrXCIgPT09IHJlZ2lzdHJhdGlvbk5hbWUgJiZcbiAgICAgICAgKHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMub25kYmxjbGljayA9IHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgICAgZm9yIChcbiAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSA9IDA7XG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUgPCBkZXBlbmRlbmNpZXMubGVuZ3RoO1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lKytcbiAgICAgIClcbiAgICAgICAgYWxsTmF0aXZlRXZlbnRzLmFkZChkZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKHRhZ05hbWUsIHByb3BzKSB7XG4gICAgICBoYXNSZWFkT25seVZhbHVlW3Byb3BzLnR5cGVdIHx8XG4gICAgICAgIHByb3BzLm9uQ2hhbmdlIHx8XG4gICAgICAgIHByb3BzLm9uSW5wdXQgfHxcbiAgICAgICAgcHJvcHMucmVhZE9ubHkgfHxcbiAgICAgICAgcHJvcHMuZGlzYWJsZWQgfHxcbiAgICAgICAgbnVsbCA9PSBwcm9wcy52YWx1ZSB8fFxuICAgICAgICAoXCJzZWxlY3RcIiA9PT0gdGFnTmFtZVxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJZb3UgcHJvdmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsIHNldCBgb25DaGFuZ2VgLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIllvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiBgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmIHRoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRWYWx1ZWAuIE90aGVyd2lzZSwgc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuXCJcbiAgICAgICAgICAgICkpO1xuICAgICAgcHJvcHMub25DaGFuZ2UgfHxcbiAgICAgICAgcHJvcHMucmVhZE9ubHkgfHxcbiAgICAgICAgcHJvcHMuZGlzYWJsZWQgfHxcbiAgICAgICAgbnVsbCA9PSBwcm9wcy5jaGVja2VkIHx8XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJZb3UgcHJvdmlkZWQgYSBgY2hlY2tlZGAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiBgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmIHRoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCBzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0F0dHJpYnV0ZU5hbWVTYWZlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpXG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICBpZiAoVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVgudGVzdChhdHRyaWJ1dGVOYW1lKSlcbiAgICAgICAgcmV0dXJuICh2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSAhMCk7XG4gICAgICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gITA7XG4gICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBhdHRyaWJ1dGUgbmFtZTogYCVzYFwiLCBhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JBdHRyaWJ1dGVPbkN1c3RvbUNvbXBvbmVudChub2RlLCBuYW1lLCBleHBlY3RlZCkge1xuICAgICAgaWYgKGlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgICAgaWYgKCFub2RlLmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGV4cGVjdGVkKSB7XG4gICAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICBpZiAoITEgPT09IGV4cGVjdGVkKSByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2b2lkIDAgPT09IGV4cGVjdGVkID8gdm9pZCAwIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIGlmIChcIlwiID09PSBub2RlICYmICEwID09PSBleHBlY3RlZCkgcmV0dXJuICEwO1xuICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKGV4cGVjdGVkLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuIG5vZGUgPT09IFwiXCIgKyBleHBlY3RlZCA/IGV4cGVjdGVkIDogbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIGlmIChpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKVxuICAgICAgICBpZiAobnVsbCA9PT0gdmFsdWUpIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICB2YXIgcHJlZml4ID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDUpO1xuICAgICAgICAgICAgICBpZiAoXCJkYXRhLVwiICE9PSBwcmVmaXggJiYgXCJhcmlhLVwiICE9PSBwcmVmaXgpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgbmFtZSk7XG4gICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgXCJcIiArIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gdmFsdWUpIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgbmFtZSk7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIFwiXCIgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShub2RlLCBuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gdmFsdWUpIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgbmFtZSk7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lLCBcIlwiICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG4gICAgZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gICAgICBpZiAoMCA9PT0gZGlzYWJsZWREZXB0aCkge1xuICAgICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDtcbiAgICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICAgIHdyaXRhYmxlOiAhMFxuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBkaXNhYmxlZERlcHRoKys7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAgICAgIGRpc2FibGVkRGVwdGgtLTtcbiAgICAgIGlmICgwID09PSBkaXNhYmxlZERlcHRoKSB7XG4gICAgICAgIHZhciBwcm9wcyA9IHsgY29uZmlndXJhYmxlOiAhMCwgZW51bWVyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2TG9nIH0pLFxuICAgICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZJbmZvIH0pLFxuICAgICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZXYXJuIH0pLFxuICAgICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2RXJyb3IgfSksXG4gICAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZHcm91cCB9KSxcbiAgICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkIH0pLFxuICAgICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2R3JvdXBFbmQgfSlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAwID4gZGlzYWJsZWREZXB0aCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIHtcbiAgICAgIGlmICh2b2lkIDAgPT09IHByZWZpeClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgICBwcmVmaXggPSAobWF0Y2ggJiYgbWF0Y2hbMV0pIHx8IFwiXCI7XG4gICAgICAgICAgc3VmZml4ID1cbiAgICAgICAgICAgIC0xIDwgeC5zdGFjay5pbmRleE9mKFwiXFxuICAgIGF0XCIpXG4gICAgICAgICAgICAgID8gXCIgKDxhbm9ueW1vdXM+KVwiXG4gICAgICAgICAgICAgIDogLTEgPCB4LnN0YWNrLmluZGV4T2YoXCJAXCIpXG4gICAgICAgICAgICAgICAgPyBcIkB1bmtub3duOjA6MFwiXG4gICAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICB9XG4gICAgICByZXR1cm4gXCJcXG5cIiArIHByZWZpeCArIG5hbWUgKyBzdWZmaXg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAgICAgaWYgKCFmbiB8fCByZWVudHJ5KSByZXR1cm4gXCJcIjtcbiAgICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcbiAgICAgIGlmICh2b2lkIDAgIT09IGZyYW1lKSByZXR1cm4gZnJhbWU7XG4gICAgICByZWVudHJ5ID0gITA7XG4gICAgICBmcmFtZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xuICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB2b2lkIDA7XG4gICAgICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyID0gbnVsbDtcbiAgICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gbnVsbDtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgICAgICAgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCBcInByb3BzXCIsIHtcbiAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgUmVmbGVjdCAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbCA9IHg7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHgkMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sID0geCQwO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHgkMSkge1xuICAgICAgICAgICAgICAgICAgY29udHJvbCA9IHgkMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKEZha2UgPSBmbigpKSAmJlxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgRmFrZS5jYXRjaCAmJlxuICAgICAgICAgICAgICAgICAgRmFrZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgICAgICAgICAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHNhbXBsZS5zdGFjaylcbiAgICAgICAgICAgICAgICByZXR1cm4gW3NhbXBsZS5zdGFjaywgY29udHJvbC5zdGFja107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW251bGwsIG51bGxdO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LmRpc3BsYXlOYW1lID1cbiAgICAgICAgICBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiO1xuICAgICAgICB2YXIgbmFtZVByb3BEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsXG4gICAgICAgICAgXCJuYW1lXCJcbiAgICAgICAgKTtcbiAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yICYmXG4gICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSAmJlxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCxcbiAgICAgICAgICAgIFwibmFtZVwiLFxuICAgICAgICAgICAgeyB2YWx1ZTogXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIiB9XG4gICAgICAgICAgKTtcbiAgICAgICAgdmFyIF9SdW5JblJvb3RGcmFtZSREZXRlciA9XG4gICAgICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxcbiAgICAgICAgICBzYW1wbGVTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclswXSxcbiAgICAgICAgICBjb250cm9sU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMV07XG4gICAgICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcbiAgICAgICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGVTdGFjay5zcGxpdChcIlxcblwiKSxcbiAgICAgICAgICAgIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2xTdGFjay5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyID0gbmFtZVByb3BEZXNjcmlwdG9yID0gMDtcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciA8IHNhbXBsZUxpbmVzLmxlbmd0aCAmJlxuICAgICAgICAgICAgIXNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgIFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICApXG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IrKztcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgO1xuICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyIDwgY29udHJvbExpbmVzLmxlbmd0aCAmJlxuICAgICAgICAgICAgIWNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgKVxuICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyKys7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yID09PSBzYW1wbGVMaW5lcy5sZW5ndGggfHxcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA9PT0gY29udHJvbExpbmVzLmxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIDEgPD0gbmFtZVByb3BEZXNjcmlwdG9yICYmXG4gICAgICAgICAgICAgIDAgPD0gX1J1bkluUm9vdEZyYW1lJERldGVyICYmXG4gICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0gIT09XG4gICAgICAgICAgICAgICAgY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl07XG5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyLS07XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIDEgPD0gbmFtZVByb3BEZXNjcmlwdG9yICYmIDAgPD0gX1J1bkluUm9vdEZyYW1lJERldGVyO1xuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yLS0sIF9SdW5JblJvb3RGcmFtZSREZXRlci0tXG4gICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdICE9PVxuICAgICAgICAgICAgICBjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmICgxICE9PSBuYW1lUHJvcERlc2NyaXB0b3IgfHwgMSAhPT0gX1J1bkluUm9vdEZyYW1lJERldGVyKSB7XG4gICAgICAgICAgICAgICAgZG9cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKG5hbWVQcm9wRGVzY3JpcHRvci0tLFxuICAgICAgICAgICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXItLSxcbiAgICAgICAgICAgICAgICAgICAgMCA+IF9SdW5JblJvb3RGcmFtZSREZXRlciB8fFxuICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0gIT09XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXSlcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICBcIlxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBhdCBuZXcgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBhdCBcIlxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGZuLmRpc3BsYXlOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgX2ZyYW1lLmluY2x1ZGVzKFwiPGFub255bW91cz5cIikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoX2ZyYW1lID0gX2ZyYW1lLnJlcGxhY2UoXCI8YW5vbnltb3VzPlwiLCBmbi5kaXNwbGF5TmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBmbiAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlICgxIDw9IG5hbWVQcm9wRGVzY3JpcHRvciAmJiAwIDw9IF9SdW5JblJvb3RGcmFtZSREZXRlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIChyZWVudHJ5ID0gITEpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldmlvdXNEaXNwYXRjaGVyKSxcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKSxcbiAgICAgICAgICAoRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBmcmFtZSk7XG4gICAgICB9XG4gICAgICBzYW1wbGVMaW5lcyA9IChzYW1wbGVMaW5lcyA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6IFwiXCIpXG4gICAgICAgID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoc2FtcGxlTGluZXMpXG4gICAgICAgIDogXCJcIjtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGZuICYmIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzYW1wbGVMaW5lcyk7XG4gICAgICByZXR1cm4gc2FtcGxlTGluZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcm1hdE93bmVyU3RhY2soZXJyb3IpIHtcbiAgICAgIHZhciBwcmV2UHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtcbiAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdm9pZCAwO1xuICAgICAgZXJyb3IgPSBlcnJvci5zdGFjaztcbiAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldlByZXBhcmVTdGFja1RyYWNlO1xuICAgICAgZXJyb3Iuc3RhcnRzV2l0aChcIkVycm9yOiByZWFjdC1zdGFjay10b3AtZnJhbWVcXG5cIikgJiZcbiAgICAgICAgKGVycm9yID0gZXJyb3Iuc2xpY2UoMjkpKTtcbiAgICAgIHByZXZQcmVwYXJlU3RhY2tUcmFjZSA9IGVycm9yLmluZGV4T2YoXCJcXG5cIik7XG4gICAgICAtMSAhPT0gcHJldlByZXBhcmVTdGFja1RyYWNlICYmXG4gICAgICAgIChlcnJvciA9IGVycm9yLnNsaWNlKHByZXZQcmVwYXJlU3RhY2tUcmFjZSArIDEpKTtcbiAgICAgIHByZXZQcmVwYXJlU3RhY2tUcmFjZSA9IGVycm9yLmluZGV4T2YoXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIik7XG4gICAgICAtMSAhPT0gcHJldlByZXBhcmVTdGFja1RyYWNlICYmXG4gICAgICAgIChwcmV2UHJlcGFyZVN0YWNrVHJhY2UgPSBlcnJvci5sYXN0SW5kZXhPZihcbiAgICAgICAgICBcIlxcblwiLFxuICAgICAgICAgIHByZXZQcmVwYXJlU3RhY2tUcmFjZVxuICAgICAgICApKTtcbiAgICAgIGlmICgtMSAhPT0gcHJldlByZXBhcmVTdGFja1RyYWNlKVxuICAgICAgICBlcnJvciA9IGVycm9yLnNsaWNlKDAsIHByZXZQcmVwYXJlU3RhY2tUcmFjZSk7XG4gICAgICBlbHNlIHJldHVybiBcIlwiO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUZpYmVyKGZpYmVyKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIkxhenlcIik7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VcIik7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VMaXN0XCIpO1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSwgITEpO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUucmVuZGVyLCAhMSk7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmaWJlci50eXBlLCAhMCk7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiQWN0aXZpdHlcIik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZCh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGluZm8gPSBcIlwiO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgaW5mbyArPSBkZXNjcmliZUZpYmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB2YXIgZGVidWdJbmZvID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnSW5mbztcbiAgICAgICAgICBpZiAoZGVidWdJbmZvKVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGRlYnVnSW5mby5sZW5ndGggLSAxOyAwIDw9IGk7IGktLSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBkZWJ1Z0luZm9baV07XG4gICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgZW50cnkubmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXBfY29uc3QgPSBpbmZvLFxuICAgICAgICAgICAgICAgICAgZW52ID0gZW50cnkuZW52O1xuICAgICAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcbiAgICAgICAgICAgICAgICAgIGVudHJ5Lm5hbWUgKyAoZW52ID8gXCIgW1wiICsgZW52ICsgXCJdXCIgOiBcIlwiKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaW5mbyA9IEpTQ29tcGlsZXJfdGVtcF9jb25zdCArIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgICAgICB9IHdoaWxlICh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICByZXR1cm4gXCJcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBcIiArIHgubWVzc2FnZSArIFwiXFxuXCIgKyB4LnN0YWNrO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWVXaXRob3V0TGluZU51bWJlcihmbikge1xuICAgICAgcmV0dXJuIChmbiA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6IFwiXCIpXG4gICAgICAgID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoZm4pXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgb3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuICAgICAgcmV0dXJuIG51bGwgIT0gb3duZXIgPyBnZXRDb21wb25lbnROYW1lRnJvbU93bmVyKG93bmVyKSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYoKSB7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkgcmV0dXJuIFwiXCI7XG4gICAgICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50O1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGluZm8gPSBcIlwiO1xuICAgICAgICA2ID09PSB3b3JrSW5Qcm9ncmVzcy50YWcgJiYgKHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuKTtcbiAgICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaW5mbyArPSBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICBpbmZvICs9IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgaW5mbyArPSBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlTGlzdFwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICBpbmZvICs9IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiQWN0aXZpdHlcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8XG4gICAgICAgICAgICAgIFwiXCIgIT09IGluZm8gfHxcbiAgICAgICAgICAgICAgKGluZm8gKz0gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lV2l0aG91dExpbmVOdW1iZXIoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZVxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciB8fFxuICAgICAgICAgICAgICBcIlwiICE9PSBpbmZvIHx8XG4gICAgICAgICAgICAgIChpbmZvICs9IGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZVdpdGhvdXRMaW5lTnVtYmVyKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUucmVuZGVyXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoOyB3b3JrSW5Qcm9ncmVzczsgKVxuICAgICAgICAgIGlmIChcIm51bWJlclwiID09PSB0eXBlb2Ygd29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgICAgICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gZmliZXIuX2RlYnVnT3duZXI7XG4gICAgICAgICAgICB2YXIgZGVidWdTdGFjayA9IGZpYmVyLl9kZWJ1Z1N0YWNrO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgICAgZGVidWdTdGFjayAmJlxuICAgICAgICAgICAgICAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIGRlYnVnU3RhY2sgJiZcbiAgICAgICAgICAgICAgICAoZmliZXIuX2RlYnVnU3RhY2sgPSBkZWJ1Z1N0YWNrID0gZm9ybWF0T3duZXJTdGFjayhkZWJ1Z1N0YWNrKSksXG4gICAgICAgICAgICAgIFwiXCIgIT09IGRlYnVnU3RhY2sgJiYgKGluZm8gKz0gXCJcXG5cIiArIGRlYnVnU3RhY2spKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG51bGwgIT0gd29ya0luUHJvZ3Jlc3MuZGVidWdTdGFjaykge1xuICAgICAgICAgICAgdmFyIG93bmVyU3RhY2sgPSB3b3JrSW5Qcm9ncmVzcy5kZWJ1Z1N0YWNrO1xuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3Mub3duZXIpICYmXG4gICAgICAgICAgICAgIG93bmVyU3RhY2sgJiZcbiAgICAgICAgICAgICAgKGluZm8gKz0gXCJcXG5cIiArIGZvcm1hdE93bmVyU3RhY2sob3duZXJTdGFjaykpO1xuICAgICAgICAgIH0gZWxzZSBicmVhaztcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGluZm87XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9XG4gICAgICAgICAgXCJcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBcIiArIHgubWVzc2FnZSArIFwiXFxuXCIgKyB4LnN0YWNrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcnVuV2l0aEZpYmVySW5ERVYoZmliZXIsIGNhbGxiYWNrLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG4gICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG51bGwgIT09IGZpYmVyICYmIGZpYmVyLl9kZWJ1Z1Rhc2tcbiAgICAgICAgICA/IGZpYmVyLl9kZWJ1Z1Rhc2sucnVuKFxuICAgICAgICAgICAgICBjYWxsYmFjay5iaW5kKG51bGwsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjYWxsYmFjayhhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2aW91c0ZpYmVyKTtcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcInJ1bldpdGhGaWJlckluREVWIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgaW4gcHJvZHVjdGlvbi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0Q3VycmVudEZpYmVyKGZpYmVyKSB7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2sgPVxuICAgICAgICBudWxsID09PSBmaWJlciA/IG51bGwgOiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2O1xuICAgICAgaXNSZW5kZXJpbmcgPSAhMTtcbiAgICAgIGN1cnJlbnQgPSBmaWJlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgIHJldHVybiBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24odmFsdWUpLCB2YWx1ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNDaGVja2FibGUoZWxlbSkge1xuICAgICAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoZWxlbSA9IGVsZW0ubm9kZU5hbWUpICYmXG4gICAgICAgIFwiaW5wdXRcIiA9PT0gZWxlbS50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgIChcImNoZWNrYm94XCIgPT09IHR5cGUgfHwgXCJyYWRpb1wiID09PSB0eXBlKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhY2tWYWx1ZU9uTm9kZShub2RlKSB7XG4gICAgICB2YXIgdmFsdWVGaWVsZCA9IGlzQ2hlY2thYmxlKG5vZGUpID8gXCJjaGVja2VkXCIgOiBcInZhbHVlXCIsXG4gICAgICAgIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgIG5vZGUuY29uc3RydWN0b3IucHJvdG90eXBlLFxuICAgICAgICAgIHZhbHVlRmllbGRcbiAgICAgICAgKTtcbiAgICAgIGNoZWNrRm9ybUZpZWxkVmFsdWVTdHJpbmdDb2VyY2lvbihub2RlW3ZhbHVlRmllbGRdKTtcbiAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBcIlwiICsgbm9kZVt2YWx1ZUZpZWxkXTtcbiAgICAgIGlmIChcbiAgICAgICAgIW5vZGUuaGFzT3duUHJvcGVydHkodmFsdWVGaWVsZCkgJiZcbiAgICAgICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIGRlc2NyaXB0b3IgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZGVzY3JpcHRvci5nZXQgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZGVzY3JpcHRvci5zZXRcbiAgICAgICkge1xuICAgICAgICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQsXG4gICAgICAgICAgc2V0ID0gZGVzY3JpcHRvci5zZXQ7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgICAgICAgY3VycmVudFZhbHVlID0gXCJcIiArIHZhbHVlO1xuICAgICAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdldFZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgY2hlY2tGb3JtRmllbGRWYWx1ZVN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IFwiXCIgKyB2YWx1ZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0b3BUcmFja2luZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZS5fdmFsdWVUcmFja2VyID0gbnVsbDtcbiAgICAgICAgICAgIGRlbGV0ZSBub2RlW3ZhbHVlRmllbGRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhY2sobm9kZSkge1xuICAgICAgbm9kZS5fdmFsdWVUcmFja2VyIHx8IChub2RlLl92YWx1ZVRyYWNrZXIgPSB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlVmFsdWVJZkNoYW5nZWQobm9kZSkge1xuICAgICAgaWYgKCFub2RlKSByZXR1cm4gITE7XG4gICAgICB2YXIgdHJhY2tlciA9IG5vZGUuX3ZhbHVlVHJhY2tlcjtcbiAgICAgIGlmICghdHJhY2tlcikgcmV0dXJuICEwO1xuICAgICAgdmFyIGxhc3RWYWx1ZSA9IHRyYWNrZXIuZ2V0VmFsdWUoKTtcbiAgICAgIHZhciB2YWx1ZSA9IFwiXCI7XG4gICAgICBub2RlICYmXG4gICAgICAgICh2YWx1ZSA9IGlzQ2hlY2thYmxlKG5vZGUpXG4gICAgICAgICAgPyBub2RlLmNoZWNrZWRcbiAgICAgICAgICAgID8gXCJ0cnVlXCJcbiAgICAgICAgICAgIDogXCJmYWxzZVwiXG4gICAgICAgICAgOiBub2RlLnZhbHVlKTtcbiAgICAgIG5vZGUgPSB2YWx1ZTtcbiAgICAgIHJldHVybiBub2RlICE9PSBsYXN0VmFsdWUgPyAodHJhY2tlci5zZXRWYWx1ZShub2RlKSwgITApIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnQoZG9jKSB7XG4gICAgICBkb2MgPSBkb2MgfHwgKFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBkb2N1bWVudCA/IGRvY3VtZW50IDogdm9pZCAwKTtcbiAgICAgIGlmIChcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgZG9jKSByZXR1cm4gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkb2MuYWN0aXZlRWxlbWVudCB8fCBkb2MuYm9keTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGRvYy5ib2R5O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShcbiAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3Rlc1JlZ2V4LFxuICAgICAgICBmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgICByZXR1cm4gXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSArIFwiIFwiO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUlucHV0UHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgICAgIHZvaWQgMCA9PT0gcHJvcHMuY2hlY2tlZCB8fFxuICAgICAgICB2b2lkIDAgPT09IHByb3BzLmRlZmF1bHRDaGVja2VkIHx8XG4gICAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCBjaGVja2VkIGFuZCBkZWZhdWx0Q2hlY2tlZCBwcm9wcy4gSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgKHNwZWNpZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9yIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBidXQgbm90IGJvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0IGVsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIixcbiAgICAgICAgICBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8IFwiQSBjb21wb25lbnRcIixcbiAgICAgICAgICBwcm9wcy50eXBlXG4gICAgICAgICksXG4gICAgICAgIChkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gITApKTtcbiAgICAgIHZvaWQgMCA9PT0gcHJvcHMudmFsdWUgfHxcbiAgICAgICAgdm9pZCAwID09PSBwcm9wcy5kZWZhdWx0VmFsdWUgfHxcbiAgICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiBJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCBib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCBlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzXCIsXG4gICAgICAgICAgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCBcIkEgY29tcG9uZW50XCIsXG4gICAgICAgICAgcHJvcHMudHlwZVxuICAgICAgICApLFxuICAgICAgICAoZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSAhMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVJbnB1dChcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGxhc3REZWZhdWx0VmFsdWUsXG4gICAgICBjaGVja2VkLFxuICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICB0eXBlLFxuICAgICAgbmFtZVxuICAgICkge1xuICAgICAgZWxlbWVudC5uYW1lID0gXCJcIjtcbiAgICAgIG51bGwgIT0gdHlwZSAmJlxuICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgdHlwZVxuICAgICAgICA/IChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHR5cGUsIFwidHlwZVwiKSwgKGVsZW1lbnQudHlwZSA9IHR5cGUpKVxuICAgICAgICA6IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICAgIGlmIChudWxsICE9IHZhbHVlKVxuICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZSkge1xuICAgICAgICAgIGlmICgoMCA9PT0gdmFsdWUgJiYgXCJcIiA9PT0gZWxlbWVudC52YWx1ZSkgfHwgZWxlbWVudC52YWx1ZSAhPSB2YWx1ZSlcbiAgICAgICAgICAgIGVsZW1lbnQudmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGVsZW1lbnQudmFsdWUgIT09IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSAmJlxuICAgICAgICAgICAgKGVsZW1lbnQudmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkpO1xuICAgICAgZWxzZVxuICAgICAgICAoXCJzdWJtaXRcIiAhPT0gdHlwZSAmJiBcInJlc2V0XCIgIT09IHR5cGUpIHx8XG4gICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcbiAgICAgIG51bGwgIT0gdmFsdWVcbiAgICAgICAgPyBzZXREZWZhdWx0VmFsdWUoZWxlbWVudCwgdHlwZSwgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkpXG4gICAgICAgIDogbnVsbCAhPSBkZWZhdWx0VmFsdWVcbiAgICAgICAgICA/IHNldERlZmF1bHRWYWx1ZShlbGVtZW50LCB0eXBlLCBnZXRUb1N0cmluZ1ZhbHVlKGRlZmF1bHRWYWx1ZSkpXG4gICAgICAgICAgOiBudWxsICE9IGxhc3REZWZhdWx0VmFsdWUgJiYgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcbiAgICAgIG51bGwgPT0gY2hlY2tlZCAmJlxuICAgICAgICBudWxsICE9IGRlZmF1bHRDaGVja2VkICYmXG4gICAgICAgIChlbGVtZW50LmRlZmF1bHRDaGVja2VkID0gISFkZWZhdWx0Q2hlY2tlZCk7XG4gICAgICBudWxsICE9IGNoZWNrZWQgJiZcbiAgICAgICAgKGVsZW1lbnQuY2hlY2tlZCA9XG4gICAgICAgICAgY2hlY2tlZCAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNoZWNrZWQgJiZcbiAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgY2hlY2tlZCk7XG4gICAgICBudWxsICE9IG5hbWUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIG5hbWUgJiZcbiAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBuYW1lICYmXG4gICAgICBcImJvb2xlYW5cIiAhPT0gdHlwZW9mIG5hbWVcbiAgICAgICAgPyAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihuYW1lLCBcIm5hbWVcIiksXG4gICAgICAgICAgKGVsZW1lbnQubmFtZSA9IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKG5hbWUpKSlcbiAgICAgICAgOiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRJbnB1dChcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGNoZWNrZWQsXG4gICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgIHR5cGUsXG4gICAgICBuYW1lLFxuICAgICAgaXNIeWRyYXRpbmdcbiAgICApIHtcbiAgICAgIG51bGwgIT0gdHlwZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih0eXBlLCBcInR5cGVcIiksIChlbGVtZW50LnR5cGUgPSB0eXBlKSk7XG4gICAgICBpZiAobnVsbCAhPSB2YWx1ZSB8fCBudWxsICE9IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIChcInN1Ym1pdFwiICE9PSB0eXBlICYmIFwicmVzZXRcIiAhPT0gdHlwZSkgfHxcbiAgICAgICAgICAgICh2b2lkIDAgIT09IHZhbHVlICYmIG51bGwgIT09IHZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdFZhbHVlID1cbiAgICAgICAgICBudWxsICE9IGRlZmF1bHRWYWx1ZSA/IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKGRlZmF1bHRWYWx1ZSkgOiBcIlwiO1xuICAgICAgICB2YWx1ZSA9IG51bGwgIT0gdmFsdWUgPyBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkgOiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIGlzSHlkcmF0aW5nIHx8IHZhbHVlID09PSBlbGVtZW50LnZhbHVlIHx8IChlbGVtZW50LnZhbHVlID0gdmFsdWUpO1xuICAgICAgICBlbGVtZW50LmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgY2hlY2tlZCA9IG51bGwgIT0gY2hlY2tlZCA/IGNoZWNrZWQgOiBkZWZhdWx0Q2hlY2tlZDtcbiAgICAgIGNoZWNrZWQgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjaGVja2VkICYmXG4gICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBjaGVja2VkICYmXG4gICAgICAgICEhY2hlY2tlZDtcbiAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IGlzSHlkcmF0aW5nID8gZWxlbWVudC5jaGVja2VkIDogISFjaGVja2VkO1xuICAgICAgZWxlbWVudC5kZWZhdWx0Q2hlY2tlZCA9ICEhY2hlY2tlZDtcbiAgICAgIG51bGwgIT0gbmFtZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBuYW1lICYmXG4gICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBuYW1lICYmXG4gICAgICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgbmFtZSAmJlxuICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihuYW1lLCBcIm5hbWVcIiksIChlbGVtZW50Lm5hbWUgPSBuYW1lKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZShub2RlLCB0eXBlLCB2YWx1ZSkge1xuICAgICAgKFwibnVtYmVyXCIgPT09IHR5cGUgJiYgZ2V0QWN0aXZlRWxlbWVudChub2RlLm93bmVyRG9jdW1lbnQpID09PSBub2RlKSB8fFxuICAgICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIiArIHZhbHVlIHx8XG4gICAgICAgIChub2RlLmRlZmF1bHRWYWx1ZSA9IFwiXCIgKyB2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgICAgIG51bGwgPT0gcHJvcHMudmFsdWUgJiZcbiAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiAmJiBudWxsICE9PSBwcm9wcy5jaGlsZHJlblxuICAgICAgICAgID8gUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICAgIG51bGwgPT0gY2hpbGQgfHxcbiAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgY2hpbGQgfHxcbiAgICAgICAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgY2hpbGQgfHxcbiAgICAgICAgICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgY2hpbGQgfHxcbiAgICAgICAgICAgICAgICBkaWRXYXJuSW52YWxpZENoaWxkIHx8XG4gICAgICAgICAgICAgICAgKChkaWRXYXJuSW52YWxpZENoaWxkID0gITApLFxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkNhbm5vdCBpbmZlciB0aGUgb3B0aW9uIHZhbHVlIG9mIGNvbXBsZXggY2hpbGRyZW4uIFBhc3MgYSBgdmFsdWVgIHByb3Agb3IgdXNlIGEgcGxhaW4gc3RyaW5nIGFzIGNoaWxkcmVuIHRvIDxvcHRpb24+LlwiXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbCA9PSBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCB8fFxuICAgICAgICAgICAgZGlkV2FybkludmFsaWRJbm5lckhUTUwgfHxcbiAgICAgICAgICAgICgoZGlkV2FybkludmFsaWRJbm5lckhUTUwgPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlBhc3MgYSBgdmFsdWVgIHByb3AgaWYgeW91IHNldCBkYW5nZXJvdXNseUlubmVySFRNTCBzbyBSZWFjdCBrbm93cyB3aGljaCB2YWx1ZSBzaG91bGQgYmUgc2VsZWN0ZWQuXCJcbiAgICAgICAgICAgICkpKTtcbiAgICAgIG51bGwgPT0gcHJvcHMuc2VsZWN0ZWQgfHxcbiAgICAgICAgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVjdD4gaW5zdGVhZCBvZiBzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uXCJcbiAgICAgICAgKSxcbiAgICAgICAgKGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gITApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICAgICAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG4gICAgICByZXR1cm4gb3duZXJOYW1lXG4gICAgICAgID8gXCJcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgXCIgKyBvd25lck5hbWUgKyBcImAuXCJcbiAgICAgICAgOiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVPcHRpb25zKG5vZGUsIG11bHRpcGxlLCBwcm9wVmFsdWUsIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgbm9kZSA9IG5vZGUub3B0aW9ucztcbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICBtdWx0aXBsZSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICBtdWx0aXBsZVtcIiRcIiArIHByb3BWYWx1ZVtpXV0gPSAhMDtcbiAgICAgICAgZm9yIChwcm9wVmFsdWUgPSAwOyBwcm9wVmFsdWUgPCBub2RlLmxlbmd0aDsgcHJvcFZhbHVlKyspXG4gICAgICAgICAgKGkgPSBtdWx0aXBsZS5oYXNPd25Qcm9wZXJ0eShcIiRcIiArIG5vZGVbcHJvcFZhbHVlXS52YWx1ZSkpLFxuICAgICAgICAgICAgbm9kZVtwcm9wVmFsdWVdLnNlbGVjdGVkICE9PSBpICYmIChub2RlW3Byb3BWYWx1ZV0uc2VsZWN0ZWQgPSBpKSxcbiAgICAgICAgICAgIGkgJiYgc2V0RGVmYXVsdFNlbGVjdGVkICYmIChub2RlW3Byb3BWYWx1ZV0uZGVmYXVsdFNlbGVjdGVkID0gITApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcFZhbHVlID0gXCJcIiArIGdldFRvU3RyaW5nVmFsdWUocHJvcFZhbHVlKTtcbiAgICAgICAgbXVsdGlwbGUgPSBudWxsO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChub2RlW2ldLnZhbHVlID09PSBwcm9wVmFsdWUpIHtcbiAgICAgICAgICAgIG5vZGVbaV0uc2VsZWN0ZWQgPSAhMDtcbiAgICAgICAgICAgIHNldERlZmF1bHRTZWxlY3RlZCAmJiAobm9kZVtpXS5kZWZhdWx0U2VsZWN0ZWQgPSAhMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG51bGwgIT09IG11bHRpcGxlIHx8IG5vZGVbaV0uZGlzYWJsZWQgfHwgKG11bHRpcGxlID0gbm9kZVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgbnVsbCAhPT0gbXVsdGlwbGUgJiYgKG11bHRpcGxlLnNlbGVjdGVkID0gITApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVNlbGVjdFByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gICAgICBmb3IgKGVsZW1lbnQgPSAwOyBlbGVtZW50IDwgdmFsdWVQcm9wTmFtZXMubGVuZ3RoOyBlbGVtZW50KyspIHtcbiAgICAgICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbZWxlbWVudF07XG4gICAgICAgIGlmIChudWxsICE9IHByb3BzW3Byb3BOYW1lXSkge1xuICAgICAgICAgIHZhciBwcm9wTmFtZUlzQXJyYXkgPSBpc0FycmF5SW1wbChwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICAgIHByb3BzLm11bHRpcGxlICYmICFwcm9wTmFtZUlzQXJyYXlcbiAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiBgbXVsdGlwbGVgIGlzIHRydWUuJXNcIixcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6ICFwcm9wcy5tdWx0aXBsZSAmJlxuICAgICAgICAgICAgICBwcm9wTmFtZUlzQXJyYXkgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciB2YWx1ZSBpZiBgbXVsdGlwbGVgIGlzIGZhbHNlLiVzXCIsXG4gICAgICAgICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdm9pZCAwID09PSBwcm9wcy52YWx1ZSB8fFxuICAgICAgICB2b2lkIDAgPT09IHByb3BzLmRlZmF1bHRWYWx1ZSB8fFxuICAgICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJTZWxlY3QgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgc2VsZWN0IGVsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIlxuICAgICAgICApLFxuICAgICAgICAoZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gITApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVUZXh0YXJlYVByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gICAgICB2b2lkIDAgPT09IHByb3BzLnZhbHVlIHx8XG4gICAgICAgIHZvaWQgMCA9PT0gcHJvcHMuZGVmYXVsdFZhbHVlIHx8XG4gICAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsIHx8XG4gICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiJXMgY29udGFpbnMgYSB0ZXh0YXJlYSB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gVGV4dGFyZWEgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdGV4dGFyZWEgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIixcbiAgICAgICAgICBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8IFwiQSBjb21wb25lbnRcIlxuICAgICAgICApLFxuICAgICAgICAoZGlkV2FyblZhbERlZmF1bHRWYWwgPSAhMCkpO1xuICAgICAgbnVsbCAhPSBwcm9wcy5jaGlsZHJlbiAmJlxuICAgICAgICBudWxsID09IHByb3BzLnZhbHVlICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgaW5zdGVhZCBvZiBzZXR0aW5nIGNoaWxkcmVuIG9uIDx0ZXh0YXJlYT4uXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlVGV4dGFyZWEoZWxlbWVudCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICgodmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkpLFxuICAgICAgICB2YWx1ZSAhPT0gZWxlbWVudC52YWx1ZSAmJiAoZWxlbWVudC52YWx1ZSA9IHZhbHVlKSxcbiAgICAgICAgbnVsbCA9PSBkZWZhdWx0VmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgZWxlbWVudC5kZWZhdWx0VmFsdWUgIT09IHZhbHVlICYmIChlbGVtZW50LmRlZmF1bHRWYWx1ZSA9IHZhbHVlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5kZWZhdWx0VmFsdWUgPVxuICAgICAgICBudWxsICE9IGRlZmF1bHRWYWx1ZSA/IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKGRlZmF1bHRWYWx1ZSkgOiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0VGV4dGFyZWEoZWxlbWVudCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSwgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChudWxsID09IHZhbHVlKSB7XG4gICAgICAgIGlmIChudWxsICE9IGNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKG51bGwgIT0gZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiSWYgeW91IHN1cHBseSBgZGVmYXVsdFZhbHVlYCBvbiBhIDx0ZXh0YXJlYT4sIGRvIG5vdCBwYXNzIGNoaWxkcmVuLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpc0FycmF5SW1wbChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGlmICgxIDwgY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIjx0ZXh0YXJlYT4gY2FuIG9ubHkgaGF2ZSBhdCBtb3N0IG9uZSBjaGlsZC5cIik7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBjaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICBudWxsID09IGRlZmF1bHRWYWx1ZSAmJiAoZGVmYXVsdFZhbHVlID0gXCJcIik7XG4gICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgICAgZGVmYXVsdFZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSk7XG4gICAgICBlbGVtZW50LmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIGNoaWxkcmVuID0gZWxlbWVudC50ZXh0Q29udGVudDtcbiAgICAgIGNoaWxkcmVuID09PSBkZWZhdWx0VmFsdWUgJiZcbiAgICAgICAgXCJcIiAhPT0gY2hpbGRyZW4gJiZcbiAgICAgICAgbnVsbCAhPT0gY2hpbGRyZW4gJiZcbiAgICAgICAgKGVsZW1lbnQudmFsdWUgPSBjaGlsZHJlbik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmROb3RhYmxlTm9kZShub2RlLCBpbmRlbnQpIHtcbiAgICAgIHJldHVybiB2b2lkIDAgPT09IG5vZGUuc2VydmVyUHJvcHMgJiZcbiAgICAgICAgMCA9PT0gbm9kZS5zZXJ2ZXJUYWlsLmxlbmd0aCAmJlxuICAgICAgICAxID09PSBub2RlLmNoaWxkcmVuLmxlbmd0aCAmJlxuICAgICAgICAzIDwgbm9kZS5kaXN0YW5jZUZyb21MZWFmICYmXG4gICAgICAgIG5vZGUuZGlzdGFuY2VGcm9tTGVhZiA+IDE1IC0gaW5kZW50XG4gICAgICAgID8gZmluZE5vdGFibGVOb2RlKG5vZGUuY2hpbGRyZW5bMF0sIGluZGVudClcbiAgICAgICAgOiBub2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbmRlbnRhdGlvbihpbmRlbnQpIHtcbiAgICAgIHJldHVybiBcIiAgXCIgKyBcIiAgXCIucmVwZWF0KGluZGVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZGVkKGluZGVudCkge1xuICAgICAgcmV0dXJuIFwiKyBcIiArIFwiICBcIi5yZXBlYXQoaW5kZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlZChpbmRlbnQpIHtcbiAgICAgIHJldHVybiBcIi0gXCIgKyBcIiAgXCIucmVwZWF0KGluZGVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRmliZXJUeXBlKGZpYmVyKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGZpYmVyLnR5cGU7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgcmV0dXJuIFwiTGF6eVwiO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZXR1cm4gKGZpYmVyID0gZmliZXIudHlwZSksIGZpYmVyLmRpc3BsYXlOYW1lIHx8IGZpYmVyLm5hbWUgfHwgbnVsbDtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGZpYmVyID0gZmliZXIudHlwZS5yZW5kZXIpLCBmaWJlci5kaXNwbGF5TmFtZSB8fCBmaWJlci5uYW1lIHx8IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIChmaWJlciA9IGZpYmVyLnR5cGUpLCBmaWJlci5kaXNwbGF5TmFtZSB8fCBmaWJlci5uYW1lIHx8IG51bGw7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlVGV4dE5vZGUoY29udGVudCwgbWF4TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmVlZHNFc2NhcGluZy50ZXN0KGNvbnRlbnQpXG4gICAgICAgID8gKChjb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoY29udGVudCkpLFxuICAgICAgICAgIGNvbnRlbnQubGVuZ3RoID4gbWF4TGVuZ3RoIC0gMlxuICAgICAgICAgICAgPyA4ID4gbWF4TGVuZ3RoXG4gICAgICAgICAgICAgID8gJ3tcIi4uLlwifSdcbiAgICAgICAgICAgICAgOiBcIntcIiArIGNvbnRlbnQuc2xpY2UoMCwgbWF4TGVuZ3RoIC0gNykgKyAnLi4uXCJ9J1xuICAgICAgICAgICAgOiBcIntcIiArIGNvbnRlbnQgKyBcIn1cIilcbiAgICAgICAgOiBjb250ZW50Lmxlbmd0aCA+IG1heExlbmd0aFxuICAgICAgICAgID8gNSA+IG1heExlbmd0aFxuICAgICAgICAgICAgPyAne1wiLi4uXCJ9J1xuICAgICAgICAgICAgOiBjb250ZW50LnNsaWNlKDAsIG1heExlbmd0aCAtIDMpICsgXCIuLi5cIlxuICAgICAgICAgIDogY29udGVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVUZXh0RGlmZihjbGllbnRUZXh0LCBzZXJ2ZXJQcm9wcywgaW5kZW50KSB7XG4gICAgICB2YXIgbWF4TGVuZ3RoID0gMTIwIC0gMiAqIGluZGVudDtcbiAgICAgIGlmIChudWxsID09PSBzZXJ2ZXJQcm9wcylcbiAgICAgICAgcmV0dXJuIGFkZGVkKGluZGVudCkgKyBkZXNjcmliZVRleHROb2RlKGNsaWVudFRleHQsIG1heExlbmd0aCkgKyBcIlxcblwiO1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBzZXJ2ZXJQcm9wcykge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBmaXJzdERpZmYgPSAwO1xuICAgICAgICAgIGZpcnN0RGlmZiA8IHNlcnZlclByb3BzLmxlbmd0aCAmJlxuICAgICAgICAgIGZpcnN0RGlmZiA8IGNsaWVudFRleHQubGVuZ3RoICYmXG4gICAgICAgICAgc2VydmVyUHJvcHMuY2hhckNvZGVBdChmaXJzdERpZmYpID09PVxuICAgICAgICAgICAgY2xpZW50VGV4dC5jaGFyQ29kZUF0KGZpcnN0RGlmZik7XG4gICAgICAgICAgZmlyc3REaWZmKytcbiAgICAgICAgKTtcbiAgICAgICAgZmlyc3REaWZmID4gbWF4TGVuZ3RoIC0gOCAmJlxuICAgICAgICAgIDEwIDwgZmlyc3REaWZmICYmXG4gICAgICAgICAgKChjbGllbnRUZXh0ID0gXCIuLi5cIiArIGNsaWVudFRleHQuc2xpY2UoZmlyc3REaWZmIC0gOCkpLFxuICAgICAgICAgIChzZXJ2ZXJQcm9wcyA9IFwiLi4uXCIgKyBzZXJ2ZXJQcm9wcy5zbGljZShmaXJzdERpZmYgLSA4KSkpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGFkZGVkKGluZGVudCkgK1xuICAgICAgICAgIGRlc2NyaWJlVGV4dE5vZGUoY2xpZW50VGV4dCwgbWF4TGVuZ3RoKSArXG4gICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgcmVtb3ZlZChpbmRlbnQpICtcbiAgICAgICAgICBkZXNjcmliZVRleHROb2RlKHNlcnZlclByb3BzLCBtYXhMZW5ndGgpICtcbiAgICAgICAgICBcIlxcblwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpbmRlbnRhdGlvbihpbmRlbnQpICsgZGVzY3JpYmVUZXh0Tm9kZShjbGllbnRUZXh0LCBtYXhMZW5ndGgpICsgXCJcXG5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb2JqZWN0TmFtZShvYmplY3QpIHtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG4gICAgICAgIC5jYWxsKG9iamVjdClcbiAgICAgICAgLnJlcGxhY2UoL15cXFtvYmplY3QgKC4qKVxcXSQvLCBmdW5jdGlvbiAobSwgcDApIHtcbiAgICAgICAgICByZXR1cm4gcDA7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZVZhbHVlKHZhbHVlLCBtYXhMZW5ndGgpIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpKSxcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aFxuICAgICAgICAgICAgICA/IDUgPiBtYXhMZW5ndGhcbiAgICAgICAgICAgICAgICA/ICdcIi4uLlwiJ1xuICAgICAgICAgICAgICAgIDogdmFsdWUuc2xpY2UoMCwgbWF4TGVuZ3RoIC0gNCkgKyAnLi4uXCInXG4gICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgaWYgKG51bGwgPT09IHZhbHVlKSByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKHZhbHVlKSkgcmV0dXJuIFwiWy4uLl1cIjtcbiAgICAgICAgICBpZiAodmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSlcbiAgICAgICAgICAgIHJldHVybiAobWF4TGVuZ3RoID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHZhbHVlLnR5cGUpKVxuICAgICAgICAgICAgICA/IFwiPFwiICsgbWF4TGVuZ3RoICsgXCI+XCJcbiAgICAgICAgICAgICAgOiBcIjwuLi4+XCI7XG4gICAgICAgICAgdmFyIG5hbWUgPSBvYmplY3ROYW1lKHZhbHVlKTtcbiAgICAgICAgICBpZiAoXCJPYmplY3RcIiA9PT0gbmFtZSkge1xuICAgICAgICAgICAgbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICBtYXhMZW5ndGggLT0gMjtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIHZhbHVlKVxuICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGpzb25Qcm9wTmFtZSA9IEpTT04uc3RyaW5naWZ5KHByb3BOYW1lKTtcbiAgICAgICAgICAgICAgICBqc29uUHJvcE5hbWUgIT09ICdcIicgKyBwcm9wTmFtZSArICdcIicgJiZcbiAgICAgICAgICAgICAgICAgIChwcm9wTmFtZSA9IGpzb25Qcm9wTmFtZSk7XG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoIC09IHByb3BOYW1lLmxlbmd0aCAtIDI7XG4gICAgICAgICAgICAgICAganNvblByb3BOYW1lID0gZGVzY3JpYmVWYWx1ZShcbiAgICAgICAgICAgICAgICAgIHZhbHVlW3Byb3BOYW1lXSxcbiAgICAgICAgICAgICAgICAgIDE1ID4gbWF4TGVuZ3RoID8gbWF4TGVuZ3RoIDogMTVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIG1heExlbmd0aCAtPSBqc29uUHJvcE5hbWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICgwID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICBuYW1lICs9IFwiXCIgPT09IG5hbWUgPyBcIi4uLlwiIDogXCIsIC4uLlwiO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5hbWUgKz1cbiAgICAgICAgICAgICAgICAgIChcIlwiID09PSBuYW1lID8gXCJcIiA6IFwiLFwiKSArIHByb3BOYW1lICsgXCI6XCIgKyBqc29uUHJvcE5hbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIntcIiArIG5hbWUgKyBcIn1cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIHJldHVybiAobWF4TGVuZ3RoID0gdmFsdWUuZGlzcGxheU5hbWUgfHwgdmFsdWUubmFtZSlcbiAgICAgICAgICAgID8gXCJmdW5jdGlvbiBcIiArIG1heExlbmd0aFxuICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlUHJvcFZhbHVlKHZhbHVlLCBtYXhMZW5ndGgpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiICE9PSB0eXBlb2YgdmFsdWUgfHwgbmVlZHNFc2NhcGluZy50ZXN0KHZhbHVlKVxuICAgICAgICA/IFwie1wiICsgZGVzY3JpYmVWYWx1ZSh2YWx1ZSwgbWF4TGVuZ3RoIC0gMikgKyBcIn1cIlxuICAgICAgICA6IHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aCAtIDJcbiAgICAgICAgICA/IDUgPiBtYXhMZW5ndGhcbiAgICAgICAgICAgID8gJ1wiLi4uXCInXG4gICAgICAgICAgICA6ICdcIicgKyB2YWx1ZS5zbGljZSgwLCBtYXhMZW5ndGggLSA1KSArICcuLi5cIidcbiAgICAgICAgICA6ICdcIicgKyB2YWx1ZSArICdcIic7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRXhwYW5kZWRFbGVtZW50KHR5cGUsIHByb3BzLCByb3dQcmVmaXgpIHtcbiAgICAgIHZhciByZW1haW5pbmdSb3dMZW5ndGggPSAxMjAgLSByb3dQcmVmaXgubGVuZ3RoIC0gdHlwZS5sZW5ndGgsXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXSxcbiAgICAgICAgcHJvcE5hbWU7XG4gICAgICBmb3IgKHByb3BOYW1lIGluIHByb3BzKVxuICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmIFwiY2hpbGRyZW5cIiAhPT0gcHJvcE5hbWUpIHtcbiAgICAgICAgICB2YXIgcHJvcFZhbHVlID0gZGVzY3JpYmVQcm9wVmFsdWUoXG4gICAgICAgICAgICBwcm9wc1twcm9wTmFtZV0sXG4gICAgICAgICAgICAxMjAgLSByb3dQcmVmaXgubGVuZ3RoIC0gcHJvcE5hbWUubGVuZ3RoIC0gMVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVtYWluaW5nUm93TGVuZ3RoIC09IHByb3BOYW1lLmxlbmd0aCArIHByb3BWYWx1ZS5sZW5ndGggKyAyO1xuICAgICAgICAgIHByb3BlcnRpZXMucHVzaChwcm9wTmFtZSArIFwiPVwiICsgcHJvcFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIDAgPT09IHByb3BlcnRpZXMubGVuZ3RoXG4gICAgICAgID8gcm93UHJlZml4ICsgXCI8XCIgKyB0eXBlICsgXCI+XFxuXCJcbiAgICAgICAgOiAwIDwgcmVtYWluaW5nUm93TGVuZ3RoXG4gICAgICAgICAgPyByb3dQcmVmaXggKyBcIjxcIiArIHR5cGUgKyBcIiBcIiArIHByb3BlcnRpZXMuam9pbihcIiBcIikgKyBcIj5cXG5cIlxuICAgICAgICAgIDogcm93UHJlZml4ICtcbiAgICAgICAgICAgIFwiPFwiICtcbiAgICAgICAgICAgIHR5cGUgK1xuICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICByb3dQcmVmaXggK1xuICAgICAgICAgICAgXCIgIFwiICtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuam9pbihcIlxcblwiICsgcm93UHJlZml4ICsgXCIgIFwiKSArXG4gICAgICAgICAgICBcIlxcblwiICtcbiAgICAgICAgICAgIHJvd1ByZWZpeCArXG4gICAgICAgICAgICBcIj5cXG5cIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVQcm9wZXJ0aWVzRGlmZihjbGllbnRPYmplY3QsIHNlcnZlck9iamVjdCwgaW5kZW50KSB7XG4gICAgICB2YXIgcHJvcGVydGllcyA9IFwiXCIsXG4gICAgICAgIHJlbWFpbmluZ1NlcnZlclByb3BlcnRpZXMgPSBhc3NpZ24oe30sIHNlcnZlck9iamVjdCksXG4gICAgICAgIHByb3BOYW1lO1xuICAgICAgZm9yIChwcm9wTmFtZSBpbiBjbGllbnRPYmplY3QpXG4gICAgICAgIGlmIChjbGllbnRPYmplY3QuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgICAgZGVsZXRlIHJlbWFpbmluZ1NlcnZlclByb3BlcnRpZXNbcHJvcE5hbWVdO1xuICAgICAgICAgIHZhciBtYXhMZW5ndGggPSAxMjAgLSAyICogaW5kZW50IC0gcHJvcE5hbWUubGVuZ3RoIC0gMixcbiAgICAgICAgICAgIGNsaWVudFByb3BWYWx1ZSA9IGRlc2NyaWJlVmFsdWUoY2xpZW50T2JqZWN0W3Byb3BOYW1lXSwgbWF4TGVuZ3RoKTtcbiAgICAgICAgICBzZXJ2ZXJPYmplY3QuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpXG4gICAgICAgICAgICA/ICgobWF4TGVuZ3RoID0gZGVzY3JpYmVWYWx1ZShzZXJ2ZXJPYmplY3RbcHJvcE5hbWVdLCBtYXhMZW5ndGgpKSxcbiAgICAgICAgICAgICAgKHByb3BlcnRpZXMgKz1cbiAgICAgICAgICAgICAgICBhZGRlZChpbmRlbnQpICsgcHJvcE5hbWUgKyBcIjogXCIgKyBjbGllbnRQcm9wVmFsdWUgKyBcIlxcblwiKSxcbiAgICAgICAgICAgICAgKHByb3BlcnRpZXMgKz1cbiAgICAgICAgICAgICAgICByZW1vdmVkKGluZGVudCkgKyBwcm9wTmFtZSArIFwiOiBcIiArIG1heExlbmd0aCArIFwiXFxuXCIpKVxuICAgICAgICAgICAgOiAocHJvcGVydGllcyArPVxuICAgICAgICAgICAgICAgIGFkZGVkKGluZGVudCkgKyBwcm9wTmFtZSArIFwiOiBcIiArIGNsaWVudFByb3BWYWx1ZSArIFwiXFxuXCIpO1xuICAgICAgICB9XG4gICAgICBmb3IgKHZhciBfcHJvcE5hbWUgaW4gcmVtYWluaW5nU2VydmVyUHJvcGVydGllcylcbiAgICAgICAgcmVtYWluaW5nU2VydmVyUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShfcHJvcE5hbWUpICYmXG4gICAgICAgICAgKChjbGllbnRPYmplY3QgPSBkZXNjcmliZVZhbHVlKFxuICAgICAgICAgICAgcmVtYWluaW5nU2VydmVyUHJvcGVydGllc1tfcHJvcE5hbWVdLFxuICAgICAgICAgICAgMTIwIC0gMiAqIGluZGVudCAtIF9wcm9wTmFtZS5sZW5ndGggLSAyXG4gICAgICAgICAgKSksXG4gICAgICAgICAgKHByb3BlcnRpZXMgKz1cbiAgICAgICAgICAgIHJlbW92ZWQoaW5kZW50KSArIF9wcm9wTmFtZSArIFwiOiBcIiArIGNsaWVudE9iamVjdCArIFwiXFxuXCIpKTtcbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUVsZW1lbnREaWZmKHR5cGUsIGNsaWVudFByb3BzLCBzZXJ2ZXJQcm9wcywgaW5kZW50KSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCIsXG4gICAgICAgIHNlcnZlclByb3BOYW1lcyA9IG5ldyBNYXAoKTtcbiAgICAgIGZvciAocHJvcE5hbWUkanNjb21wJDAgaW4gc2VydmVyUHJvcHMpXG4gICAgICAgIHNlcnZlclByb3BzLmhhc093blByb3BlcnR5KHByb3BOYW1lJGpzY29tcCQwKSAmJlxuICAgICAgICAgIHNlcnZlclByb3BOYW1lcy5zZXQoXG4gICAgICAgICAgICBwcm9wTmFtZSRqc2NvbXAkMC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgcHJvcE5hbWUkanNjb21wJDBcbiAgICAgICAgICApO1xuICAgICAgaWYgKDEgPT09IHNlcnZlclByb3BOYW1lcy5zaXplICYmIHNlcnZlclByb3BOYW1lcy5oYXMoXCJjaGlsZHJlblwiKSlcbiAgICAgICAgY29udGVudCArPSBkZXNjcmliZUV4cGFuZGVkRWxlbWVudChcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGNsaWVudFByb3BzLFxuICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudClcbiAgICAgICAgKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBfcHJvcE5hbWUyIGluIGNsaWVudFByb3BzKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNsaWVudFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wTmFtZTIpICYmXG4gICAgICAgICAgICBcImNoaWxkcmVuXCIgIT09IF9wcm9wTmFtZTJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBtYXhMZW5ndGgkanNjb21wJDAgPVxuICAgICAgICAgICAgICAgIDEyMCAtIDIgKiAoaW5kZW50ICsgMSkgLSBfcHJvcE5hbWUyLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgIHNlcnZlclByb3BOYW1lID0gc2VydmVyUHJvcE5hbWVzLmdldChfcHJvcE5hbWUyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gc2VydmVyUHJvcE5hbWUpIHtcbiAgICAgICAgICAgICAgc2VydmVyUHJvcE5hbWVzLmRlbGV0ZShfcHJvcE5hbWUyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICB2YXIgcHJvcE5hbWUkanNjb21wJDAgPSBjbGllbnRQcm9wc1tfcHJvcE5hbWUyXTtcbiAgICAgICAgICAgICAgc2VydmVyUHJvcE5hbWUgPSBzZXJ2ZXJQcm9wc1tzZXJ2ZXJQcm9wTmFtZV07XG4gICAgICAgICAgICAgIHZhciBjbGllbnRQcm9wVmFsdWUgPSBkZXNjcmliZVByb3BWYWx1ZShcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSRqc2NvbXAkMCxcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGgkanNjb21wJDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoJGpzY29tcCQwID0gZGVzY3JpYmVQcm9wVmFsdWUoXG4gICAgICAgICAgICAgICAgc2VydmVyUHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoJGpzY29tcCQwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBwcm9wTmFtZSRqc2NvbXAkMCAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBwcm9wTmFtZSRqc2NvbXAkMCAmJlxuICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygc2VydmVyUHJvcE5hbWUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gc2VydmVyUHJvcE5hbWUgJiZcbiAgICAgICAgICAgICAgXCJPYmplY3RcIiA9PT0gb2JqZWN0TmFtZShwcm9wTmFtZSRqc2NvbXAkMCkgJiZcbiAgICAgICAgICAgICAgXCJPYmplY3RcIiA9PT0gb2JqZWN0TmFtZShzZXJ2ZXJQcm9wTmFtZSkgJiZcbiAgICAgICAgICAgICAgKDIgPCBPYmplY3Qua2V5cyhwcm9wTmFtZSRqc2NvbXAkMCkubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgMiA8IE9iamVjdC5rZXlzKHNlcnZlclByb3BOYW1lKS5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAtMSA8IGNsaWVudFByb3BWYWx1ZS5pbmRleE9mKFwiLi4uXCIpIHx8XG4gICAgICAgICAgICAgICAgLTEgPCBtYXhMZW5ndGgkanNjb21wJDAuaW5kZXhPZihcIi4uLlwiKSlcbiAgICAgICAgICAgICAgICA/IChjb250ZW50ICs9XG4gICAgICAgICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BOYW1lMiArXG4gICAgICAgICAgICAgICAgICAgIFwiPXt7XFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmliZVByb3BlcnRpZXNEaWZmKFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BOYW1lJGpzY29tcCQwLFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclByb3BOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGVudCArIDJcbiAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgXCJ9fVxcblwiKVxuICAgICAgICAgICAgICAgIDogKChjb250ZW50ICs9XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BOYW1lMiArXG4gICAgICAgICAgICAgICAgICAgIFwiPVwiICtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50UHJvcFZhbHVlICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXG5cIiksXG4gICAgICAgICAgICAgICAgICAoY29udGVudCArPVxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BOYW1lMiArXG4gICAgICAgICAgICAgICAgICAgIFwiPVwiICtcbiAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoJGpzY29tcCQwICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXG5cIikpO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIGNvbnRlbnQgKz1cbiAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbihpbmRlbnQgKyAxKSArXG4gICAgICAgICAgICAgICAgX3Byb3BOYW1lMiArXG4gICAgICAgICAgICAgICAgXCI9XCIgK1xuICAgICAgICAgICAgICAgIGRlc2NyaWJlUHJvcFZhbHVlKGNsaWVudFByb3BzW19wcm9wTmFtZTJdLCBtYXhMZW5ndGgkanNjb21wJDApICtcbiAgICAgICAgICAgICAgICBcIlxcblwiO1xuICAgICAgICAgIH1cbiAgICAgICAgc2VydmVyUHJvcE5hbWVzLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICAgICAgaWYgKFwiY2hpbGRyZW5cIiAhPT0gcHJvcE5hbWUpIHtcbiAgICAgICAgICAgIHZhciBtYXhMZW5ndGggPSAxMjAgLSAyICogKGluZGVudCArIDEpIC0gcHJvcE5hbWUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnRlbnQgKz1cbiAgICAgICAgICAgICAgcmVtb3ZlZChpbmRlbnQgKyAxKSArXG4gICAgICAgICAgICAgIHByb3BOYW1lICtcbiAgICAgICAgICAgICAgXCI9XCIgK1xuICAgICAgICAgICAgICBkZXNjcmliZVByb3BWYWx1ZShzZXJ2ZXJQcm9wc1twcm9wTmFtZV0sIG1heExlbmd0aCkgK1xuICAgICAgICAgICAgICBcIlxcblwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRlbnQgPVxuICAgICAgICAgIFwiXCIgPT09IGNvbnRlbnRcbiAgICAgICAgICAgID8gaW5kZW50YXRpb24oaW5kZW50KSArIFwiPFwiICsgdHlwZSArIFwiPlxcblwiXG4gICAgICAgICAgICA6IGluZGVudGF0aW9uKGluZGVudCkgK1xuICAgICAgICAgICAgICBcIjxcIiArXG4gICAgICAgICAgICAgIHR5cGUgK1xuICAgICAgICAgICAgICBcIlxcblwiICtcbiAgICAgICAgICAgICAgY29udGVudCArXG4gICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCkgK1xuICAgICAgICAgICAgICBcIj5cXG5cIjtcbiAgICAgIH1cbiAgICAgIHR5cGUgPSBzZXJ2ZXJQcm9wcy5jaGlsZHJlbjtcbiAgICAgIGNsaWVudFByb3BzID0gY2xpZW50UHJvcHMuY2hpbGRyZW47XG4gICAgICBpZiAoXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiB0eXBlXG4gICAgICApIHtcbiAgICAgICAgc2VydmVyUHJvcE5hbWVzID0gXCJcIjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBjbGllbnRQcm9wcyB8fFxuICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBjbGllbnRQcm9wcyB8fFxuICAgICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBjbGllbnRQcm9wc1xuICAgICAgICApXG4gICAgICAgICAgc2VydmVyUHJvcE5hbWVzID0gXCJcIiArIGNsaWVudFByb3BzO1xuICAgICAgICBjb250ZW50ICs9IGRlc2NyaWJlVGV4dERpZmYoc2VydmVyUHJvcE5hbWVzLCBcIlwiICsgdHlwZSwgaW5kZW50ICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgY2xpZW50UHJvcHMgfHxcbiAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIGNsaWVudFByb3BzIHx8XG4gICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBjbGllbnRQcm9wc1xuICAgICAgKVxuICAgICAgICBjb250ZW50ID1cbiAgICAgICAgICBudWxsID09IHR5cGVcbiAgICAgICAgICAgID8gY29udGVudCArIGRlc2NyaWJlVGV4dERpZmYoXCJcIiArIGNsaWVudFByb3BzLCBudWxsLCBpbmRlbnQgKyAxKVxuICAgICAgICAgICAgOiBjb250ZW50ICsgZGVzY3JpYmVUZXh0RGlmZihcIlwiICsgY2xpZW50UHJvcHMsIHZvaWQgMCwgaW5kZW50ICsgMSk7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVTaWJsaW5nRmliZXIoZmliZXIsIGluZGVudCkge1xuICAgICAgdmFyIHR5cGUgPSBkZXNjcmliZUZpYmVyVHlwZShmaWJlcik7XG4gICAgICBpZiAobnVsbCA9PT0gdHlwZSkge1xuICAgICAgICB0eXBlID0gXCJcIjtcbiAgICAgICAgZm9yIChmaWJlciA9IGZpYmVyLmNoaWxkOyBmaWJlcjsgKVxuICAgICAgICAgICh0eXBlICs9IGRlc2NyaWJlU2libGluZ0ZpYmVyKGZpYmVyLCBpbmRlbnQpKSxcbiAgICAgICAgICAgIChmaWJlciA9IGZpYmVyLnNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbmRlbnRhdGlvbihpbmRlbnQpICsgXCI8XCIgKyB0eXBlICsgXCI+XFxuXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlTm9kZShub2RlLCBpbmRlbnQpIHtcbiAgICAgIHZhciBza2lwVG9Ob2RlID0gZmluZE5vdGFibGVOb2RlKG5vZGUsIGluZGVudCk7XG4gICAgICBpZiAoXG4gICAgICAgIHNraXBUb05vZGUgIT09IG5vZGUgJiZcbiAgICAgICAgKDEgIT09IG5vZGUuY2hpbGRyZW4ubGVuZ3RoIHx8IG5vZGUuY2hpbGRyZW5bMF0gIT09IHNraXBUb05vZGUpXG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaW5kZW50YXRpb24oaW5kZW50KSArIFwiLi4uXFxuXCIgKyBkZXNjcmliZU5vZGUoc2tpcFRvTm9kZSwgaW5kZW50ICsgMSlcbiAgICAgICAgKTtcbiAgICAgIHNraXBUb05vZGUgPSBcIlwiO1xuICAgICAgdmFyIGRlYnVnSW5mbyA9IG5vZGUuZmliZXIuX2RlYnVnSW5mbztcbiAgICAgIGlmIChkZWJ1Z0luZm8pXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVidWdJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHNlcnZlckNvbXBvbmVudE5hbWUgPSBkZWJ1Z0luZm9baV0ubmFtZTtcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygc2VydmVyQ29tcG9uZW50TmFtZSAmJlxuICAgICAgICAgICAgKChza2lwVG9Ob2RlICs9XG4gICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCkgKyBcIjxcIiArIHNlcnZlckNvbXBvbmVudE5hbWUgKyBcIj5cXG5cIiksXG4gICAgICAgICAgICBpbmRlbnQrKyk7XG4gICAgICAgIH1cbiAgICAgIGRlYnVnSW5mbyA9IFwiXCI7XG4gICAgICBpID0gbm9kZS5maWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICBpZiAoNiA9PT0gbm9kZS5maWJlci50YWcpXG4gICAgICAgIChkZWJ1Z0luZm8gPSBkZXNjcmliZVRleHREaWZmKGksIG5vZGUuc2VydmVyUHJvcHMsIGluZGVudCkpLCBpbmRlbnQrKztcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICAoKHNlcnZlckNvbXBvbmVudE5hbWUgPSBkZXNjcmliZUZpYmVyVHlwZShub2RlLmZpYmVyKSksXG4gICAgICAgIG51bGwgIT09IHNlcnZlckNvbXBvbmVudE5hbWUpXG4gICAgICApXG4gICAgICAgIGlmICh2b2lkIDAgPT09IG5vZGUuc2VydmVyUHJvcHMpIHtcbiAgICAgICAgICBkZWJ1Z0luZm8gPSBpbmRlbnQ7XG4gICAgICAgICAgdmFyIG1heExlbmd0aCA9IDEyMCAtIDIgKiBkZWJ1Z0luZm8gLSBzZXJ2ZXJDb21wb25lbnROYW1lLmxlbmd0aCAtIDIsXG4gICAgICAgICAgICBjb250ZW50ID0gXCJcIjtcbiAgICAgICAgICBmb3IgKHByb3BOYW1lIGluIGkpXG4gICAgICAgICAgICBpZiAoaS5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgJiYgXCJjaGlsZHJlblwiICE9PSBwcm9wTmFtZSkge1xuICAgICAgICAgICAgICB2YXIgcHJvcFZhbHVlID0gZGVzY3JpYmVQcm9wVmFsdWUoaVtwcm9wTmFtZV0sIDE1KTtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoIC09IHByb3BOYW1lLmxlbmd0aCArIHByb3BWYWx1ZS5sZW5ndGggKyAyO1xuICAgICAgICAgICAgICBpZiAoMCA+IG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgKz0gXCIgLi4uXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29udGVudCArPSBcIiBcIiArIHByb3BOYW1lICsgXCI9XCIgKyBwcm9wVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZGVidWdJbmZvID1cbiAgICAgICAgICAgIGluZGVudGF0aW9uKGRlYnVnSW5mbykgK1xuICAgICAgICAgICAgXCI8XCIgK1xuICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZSArXG4gICAgICAgICAgICBjb250ZW50ICtcbiAgICAgICAgICAgIFwiPlxcblwiO1xuICAgICAgICAgIGluZGVudCsrO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBudWxsID09PSBub2RlLnNlcnZlclByb3BzXG4gICAgICAgICAgICA/ICgoZGVidWdJbmZvID0gZGVzY3JpYmVFeHBhbmRlZEVsZW1lbnQoXG4gICAgICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIGFkZGVkKGluZGVudClcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGluZGVudCsrKVxuICAgICAgICAgICAgOiBcInN0cmluZ1wiID09PSB0eXBlb2Ygbm9kZS5zZXJ2ZXJQcm9wc1xuICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIlNob3VsZCBub3QgaGF2ZSBtYXRjaGVkIGEgbm9uIEhvc3RUZXh0IGZpYmVyIHRvIGEgVGV4dCBub2RlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6ICgoZGVidWdJbmZvID0gZGVzY3JpYmVFbGVtZW50RGlmZihcbiAgICAgICAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgbm9kZS5zZXJ2ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICAgIGluZGVudFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIGluZGVudCsrKTtcbiAgICAgIHZhciBwcm9wTmFtZSA9IFwiXCI7XG4gICAgICBpID0gbm9kZS5maWJlci5jaGlsZDtcbiAgICAgIGZvciAoXG4gICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUgPSAwO1xuICAgICAgICBpICYmIHNlcnZlckNvbXBvbmVudE5hbWUgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDtcblxuICAgICAgKVxuICAgICAgICAobWF4TGVuZ3RoID0gbm9kZS5jaGlsZHJlbltzZXJ2ZXJDb21wb25lbnROYW1lXSksXG4gICAgICAgICAgbWF4TGVuZ3RoLmZpYmVyID09PSBpXG4gICAgICAgICAgICA/ICgocHJvcE5hbWUgKz0gZGVzY3JpYmVOb2RlKG1heExlbmd0aCwgaW5kZW50KSksXG4gICAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUrKylcbiAgICAgICAgICAgIDogKHByb3BOYW1lICs9IGRlc2NyaWJlU2libGluZ0ZpYmVyKGksIGluZGVudCkpLFxuICAgICAgICAgIChpID0gaS5zaWJsaW5nKTtcbiAgICAgIGkgJiZcbiAgICAgICAgMCA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmXG4gICAgICAgIChwcm9wTmFtZSArPSBpbmRlbnRhdGlvbihpbmRlbnQpICsgXCIuLi5cXG5cIik7XG4gICAgICBpID0gbm9kZS5zZXJ2ZXJUYWlsO1xuICAgICAgbnVsbCA9PT0gbm9kZS5zZXJ2ZXJQcm9wcyAmJiBpbmRlbnQtLTtcbiAgICAgIGZvciAobm9kZSA9IDA7IG5vZGUgPCBpLmxlbmd0aDsgbm9kZSsrKVxuICAgICAgICAoc2VydmVyQ29tcG9uZW50TmFtZSA9IGlbbm9kZV0pLFxuICAgICAgICAgIChwcm9wTmFtZSA9XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygc2VydmVyQ29tcG9uZW50TmFtZVxuICAgICAgICAgICAgICA/IHByb3BOYW1lICtcbiAgICAgICAgICAgICAgICAocmVtb3ZlZChpbmRlbnQpICtcbiAgICAgICAgICAgICAgICAgIGRlc2NyaWJlVGV4dE5vZGUoc2VydmVyQ29tcG9uZW50TmFtZSwgMTIwIC0gMiAqIGluZGVudCkgK1xuICAgICAgICAgICAgICAgICAgXCJcXG5cIilcbiAgICAgICAgICAgICAgOiBwcm9wTmFtZSArXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVFeHBhbmRlZEVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lLnR5cGUsXG4gICAgICAgICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lLnByb3BzLFxuICAgICAgICAgICAgICAgICAgcmVtb3ZlZChpbmRlbnQpXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICByZXR1cm4gc2tpcFRvTm9kZSArIGRlYnVnSW5mbyArIHByb3BOYW1lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZURpZmYocm9vdE5vZGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBcIlxcblxcblwiICsgZGVzY3JpYmVOb2RlKHJvb3ROb2RlLCAwKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlQW5jZXN0b3JzKGFuY2VzdG9yLCBjaGlsZCwgcHJvcHMpIHtcbiAgICAgIGZvciAodmFyIGZpYmVyID0gY2hpbGQsIG5vZGUgPSBudWxsLCBkaXN0YW5jZUZyb21MZWFmID0gMDsgZmliZXI7IClcbiAgICAgICAgZmliZXIgPT09IGFuY2VzdG9yICYmIChkaXN0YW5jZUZyb21MZWFmID0gMCksXG4gICAgICAgICAgKG5vZGUgPSB7XG4gICAgICAgICAgICBmaWJlcjogZmliZXIsXG4gICAgICAgICAgICBjaGlsZHJlbjogbnVsbCAhPT0gbm9kZSA/IFtub2RlXSA6IFtdLFxuICAgICAgICAgICAgc2VydmVyUHJvcHM6XG4gICAgICAgICAgICAgIGZpYmVyID09PSBjaGlsZCA/IHByb3BzIDogZmliZXIgPT09IGFuY2VzdG9yID8gbnVsbCA6IHZvaWQgMCxcbiAgICAgICAgICAgIHNlcnZlclRhaWw6IFtdLFxuICAgICAgICAgICAgZGlzdGFuY2VGcm9tTGVhZjogZGlzdGFuY2VGcm9tTGVhZlxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGRpc3RhbmNlRnJvbUxlYWYrKyxcbiAgICAgICAgICAoZmliZXIgPSBmaWJlci5yZXR1cm4pO1xuICAgICAgcmV0dXJuIG51bGwgIT09IG5vZGUgPyBkZXNjcmliZURpZmYobm9kZSkucmVwbGFjZUFsbCgvXlsrLV0vZ20sIFwiPlwiKSA6IFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZWRBbmNlc3RvckluZm9EZXYob2xkSW5mbywgdGFnKSB7XG4gICAgICB2YXIgYW5jZXN0b3JJbmZvID0gYXNzaWduKHt9LCBvbGRJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvRGV2KSxcbiAgICAgICAgaW5mbyA9IHsgdGFnOiB0YWcgfTtcbiAgICAgIC0xICE9PSBpblNjb3BlVGFncy5pbmRleE9mKHRhZykgJiZcbiAgICAgICAgKChhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBudWxsKSxcbiAgICAgICAgKGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gbnVsbCksXG4gICAgICAgIChhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBudWxsKSk7XG4gICAgICAtMSAhPT0gYnV0dG9uU2NvcGVUYWdzLmluZGV4T2YodGFnKSAmJlxuICAgICAgICAoYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gbnVsbCk7XG4gICAgICAtMSAhPT0gc3BlY2lhbFRhZ3MuaW5kZXhPZih0YWcpICYmXG4gICAgICAgIFwiYWRkcmVzc1wiICE9PSB0YWcgJiZcbiAgICAgICAgXCJkaXZcIiAhPT0gdGFnICYmXG4gICAgICAgIFwicFwiICE9PSB0YWcgJiZcbiAgICAgICAgKChhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGwpLFxuICAgICAgICAoYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbCkpO1xuICAgICAgYW5jZXN0b3JJbmZvLmN1cnJlbnQgPSBpbmZvO1xuICAgICAgXCJmb3JtXCIgPT09IHRhZyAmJiAoYW5jZXN0b3JJbmZvLmZvcm1UYWcgPSBpbmZvKTtcbiAgICAgIFwiYVwiID09PSB0YWcgJiYgKGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IGluZm8pO1xuICAgICAgXCJidXR0b25cIiA9PT0gdGFnICYmIChhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm8pO1xuICAgICAgXCJub2JyXCIgPT09IHRhZyAmJiAoYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gaW5mbyk7XG4gICAgICBcInBcIiA9PT0gdGFnICYmIChhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBpbmZvKTtcbiAgICAgIFwibGlcIiA9PT0gdGFnICYmIChhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm8pO1xuICAgICAgaWYgKFwiZGRcIiA9PT0gdGFnIHx8IFwiZHRcIiA9PT0gdGFnKVxuICAgICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgICAgXCIjZG9jdW1lbnRcIiA9PT0gdGFnIHx8IFwiaHRtbFwiID09PSB0YWdcbiAgICAgICAgPyAoYW5jZXN0b3JJbmZvLmNvbnRhaW5lclRhZ0luU2NvcGUgPSBudWxsKVxuICAgICAgICA6IGFuY2VzdG9ySW5mby5jb250YWluZXJUYWdJblNjb3BlIHx8XG4gICAgICAgICAgKGFuY2VzdG9ySW5mby5jb250YWluZXJUYWdJblNjb3BlID0gaW5mbyk7XG4gICAgICBudWxsICE9PSBvbGRJbmZvIHx8XG4gICAgICAoXCIjZG9jdW1lbnRcIiAhPT0gdGFnICYmIFwiaHRtbFwiICE9PSB0YWcgJiYgXCJib2R5XCIgIT09IHRhZylcbiAgICAgICAgPyAhMCA9PT0gYW5jZXN0b3JJbmZvLmltcGxpY2l0Um9vdFNjb3BlICYmXG4gICAgICAgICAgKGFuY2VzdG9ySW5mby5pbXBsaWNpdFJvb3RTY29wZSA9ICExKVxuICAgICAgICA6IChhbmNlc3RvckluZm8uaW1wbGljaXRSb290U2NvcGUgPSAhMCk7XG4gICAgICByZXR1cm4gYW5jZXN0b3JJbmZvO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1RhZ1ZhbGlkV2l0aFBhcmVudCh0YWcsIHBhcmVudFRhZywgaW1wbGljaXRSb290U2NvcGUpIHtcbiAgICAgIHN3aXRjaCAocGFyZW50VGFnKSB7XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJoclwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwib3B0aW9uXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJvcHRncm91cFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic2NyaXB0XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwiI3RleHRcIiA9PT0gdGFnXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcIm9wdGdyb3VwXCI6XG4gICAgICAgICAgcmV0dXJuIFwib3B0aW9uXCIgPT09IHRhZyB8fCBcIiN0ZXh0XCIgPT09IHRhZztcbiAgICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICAgIHJldHVybiBcIiN0ZXh0XCIgPT09IHRhZztcbiAgICAgICAgY2FzZSBcInRyXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIFwidGhcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRkXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzdHlsZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic2NyaXB0XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiID09PSB0YWdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwidGJvZHlcIjpcbiAgICAgICAgY2FzZSBcInRoZWFkXCI6XG4gICAgICAgIGNhc2UgXCJ0Zm9vdFwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcInRyXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzdHlsZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic2NyaXB0XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiID09PSB0YWdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiY29sZ3JvdXBcIjpcbiAgICAgICAgICByZXR1cm4gXCJjb2xcIiA9PT0gdGFnIHx8IFwidGVtcGxhdGVcIiA9PT0gdGFnO1xuICAgICAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJjYXB0aW9uXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJjb2xncm91cFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGJvZHlcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRmb290XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0aGVhZFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic3R5bGVcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInNjcmlwdFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGVtcGxhdGVcIiA9PT0gdGFnXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcImhlYWRcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJiYXNlXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJiYXNlZm9udFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwiYmdzb3VuZFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwibGlua1wiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwibWV0YVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGl0bGVcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcIm5vc2NyaXB0XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJub2ZyYW1lc1wiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic3R5bGVcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInNjcmlwdFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGVtcGxhdGVcIiA9PT0gdGFnXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcImh0bWxcIjpcbiAgICAgICAgICBpZiAoaW1wbGljaXRSb290U2NvcGUpIGJyZWFrO1xuICAgICAgICAgIHJldHVybiBcImhlYWRcIiA9PT0gdGFnIHx8IFwiYm9keVwiID09PSB0YWcgfHwgXCJmcmFtZXNldFwiID09PSB0YWc7XG4gICAgICAgIGNhc2UgXCJmcmFtZXNldFwiOlxuICAgICAgICAgIHJldHVybiBcImZyYW1lXCIgPT09IHRhZztcbiAgICAgICAgY2FzZSBcIiNkb2N1bWVudFwiOlxuICAgICAgICAgIGlmICghaW1wbGljaXRSb290U2NvcGUpIHJldHVybiBcImh0bWxcIiA9PT0gdGFnO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBcImgxXCI6XG4gICAgICAgIGNhc2UgXCJoMlwiOlxuICAgICAgICBjYXNlIFwiaDNcIjpcbiAgICAgICAgY2FzZSBcImg0XCI6XG4gICAgICAgIGNhc2UgXCJoNVwiOlxuICAgICAgICBjYXNlIFwiaDZcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJoMVwiICE9PSBwYXJlbnRUYWcgJiZcbiAgICAgICAgICAgIFwiaDJcIiAhPT0gcGFyZW50VGFnICYmXG4gICAgICAgICAgICBcImgzXCIgIT09IHBhcmVudFRhZyAmJlxuICAgICAgICAgICAgXCJoNFwiICE9PSBwYXJlbnRUYWcgJiZcbiAgICAgICAgICAgIFwiaDVcIiAhPT0gcGFyZW50VGFnICYmXG4gICAgICAgICAgICBcImg2XCIgIT09IHBhcmVudFRhZ1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJycFwiOlxuICAgICAgICBjYXNlIFwicnRcIjpcbiAgICAgICAgICByZXR1cm4gLTEgPT09IGltcGxpZWRFbmRUYWdzLmluZGV4T2YocGFyZW50VGFnKTtcbiAgICAgICAgY2FzZSBcImNhcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbFwiOlxuICAgICAgICBjYXNlIFwiY29sZ3JvdXBcIjpcbiAgICAgICAgY2FzZSBcImZyYW1lc2V0XCI6XG4gICAgICAgIGNhc2UgXCJmcmFtZVwiOlxuICAgICAgICBjYXNlIFwidGJvZHlcIjpcbiAgICAgICAgY2FzZSBcInRkXCI6XG4gICAgICAgIGNhc2UgXCJ0Zm9vdFwiOlxuICAgICAgICBjYXNlIFwidGhcIjpcbiAgICAgICAgY2FzZSBcInRoZWFkXCI6XG4gICAgICAgIGNhc2UgXCJ0clwiOlxuICAgICAgICAgIHJldHVybiBudWxsID09IHBhcmVudFRhZztcbiAgICAgICAgY2FzZSBcImhlYWRcIjpcbiAgICAgICAgICByZXR1cm4gaW1wbGljaXRSb290U2NvcGUgfHwgbnVsbCA9PT0gcGFyZW50VGFnO1xuICAgICAgICBjYXNlIFwiaHRtbFwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoaW1wbGljaXRSb290U2NvcGUgJiYgXCIjZG9jdW1lbnRcIiA9PT0gcGFyZW50VGFnKSB8fFxuICAgICAgICAgICAgbnVsbCA9PT0gcGFyZW50VGFnXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcImJvZHlcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGltcGxpY2l0Um9vdFNjb3BlICYmXG4gICAgICAgICAgICAgIChcIiNkb2N1bWVudFwiID09PSBwYXJlbnRUYWcgfHwgXCJodG1sXCIgPT09IHBhcmVudFRhZykpIHx8XG4gICAgICAgICAgICBudWxsID09PSBwYXJlbnRUYWdcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnKHRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIFwiYWRkcmVzc1wiOlxuICAgICAgICBjYXNlIFwiYXJ0aWNsZVwiOlxuICAgICAgICBjYXNlIFwiYXNpZGVcIjpcbiAgICAgICAgY2FzZSBcImJsb2NrcXVvdGVcIjpcbiAgICAgICAgY2FzZSBcImNlbnRlclwiOlxuICAgICAgICBjYXNlIFwiZGV0YWlsc1wiOlxuICAgICAgICBjYXNlIFwiZGlhbG9nXCI6XG4gICAgICAgIGNhc2UgXCJkaXJcIjpcbiAgICAgICAgY2FzZSBcImRpdlwiOlxuICAgICAgICBjYXNlIFwiZGxcIjpcbiAgICAgICAgY2FzZSBcImZpZWxkc2V0XCI6XG4gICAgICAgIGNhc2UgXCJmaWdjYXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJmaWd1cmVcIjpcbiAgICAgICAgY2FzZSBcImZvb3RlclwiOlxuICAgICAgICBjYXNlIFwiaGVhZGVyXCI6XG4gICAgICAgIGNhc2UgXCJoZ3JvdXBcIjpcbiAgICAgICAgY2FzZSBcIm1haW5cIjpcbiAgICAgICAgY2FzZSBcIm1lbnVcIjpcbiAgICAgICAgY2FzZSBcIm5hdlwiOlxuICAgICAgICBjYXNlIFwib2xcIjpcbiAgICAgICAgY2FzZSBcInBcIjpcbiAgICAgICAgY2FzZSBcInNlY3Rpb25cIjpcbiAgICAgICAgY2FzZSBcInN1bW1hcnlcIjpcbiAgICAgICAgY2FzZSBcInVsXCI6XG4gICAgICAgIGNhc2UgXCJwcmVcIjpcbiAgICAgICAgY2FzZSBcImxpc3RpbmdcIjpcbiAgICAgICAgY2FzZSBcInRhYmxlXCI6XG4gICAgICAgIGNhc2UgXCJoclwiOlxuICAgICAgICBjYXNlIFwieG1wXCI6XG4gICAgICAgIGNhc2UgXCJoMVwiOlxuICAgICAgICBjYXNlIFwiaDJcIjpcbiAgICAgICAgY2FzZSBcImgzXCI6XG4gICAgICAgIGNhc2UgXCJoNFwiOlxuICAgICAgICBjYXNlIFwiaDVcIjpcbiAgICAgICAgY2FzZSBcImg2XCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcbiAgICAgICAgY2FzZSBcImZvcm1cIjpcbiAgICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmZvcm1UYWcgfHwgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuICAgICAgICBjYXNlIFwibGlcIjpcbiAgICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc7XG4gICAgICAgIGNhc2UgXCJkZFwiOlxuICAgICAgICBjYXNlIFwiZHRcIjpcbiAgICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nO1xuICAgICAgICBjYXNlIFwiYnV0dG9uXCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlO1xuICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGU7XG4gICAgICAgIGNhc2UgXCJub2JyXCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kQW5jZXN0b3IocGFyZW50LCB0YWdOYW1lKSB7XG4gICAgICBmb3IgKDsgcGFyZW50OyApIHtcbiAgICAgICAgc3dpdGNoIChwYXJlbnQudGFnKSB7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gdGFnTmFtZSkgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRE9NTmVzdGluZyhjaGlsZFRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgICBhbmNlc3RvckluZm8gPSBhbmNlc3RvckluZm8gfHwgZW1wdHlBbmNlc3RvckluZm9EZXY7XG4gICAgICB2YXIgcGFyZW50SW5mbyA9IGFuY2VzdG9ySW5mby5jdXJyZW50O1xuICAgICAgYW5jZXN0b3JJbmZvID0gKHBhcmVudEluZm8gPSBpc1RhZ1ZhbGlkV2l0aFBhcmVudChcbiAgICAgICAgY2hpbGRUYWcsXG4gICAgICAgIHBhcmVudEluZm8gJiYgcGFyZW50SW5mby50YWcsXG4gICAgICAgIGFuY2VzdG9ySW5mby5pbXBsaWNpdFJvb3RTY29wZVxuICAgICAgKVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBwYXJlbnRJbmZvKVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnKGNoaWxkVGFnLCBhbmNlc3RvckluZm8pO1xuICAgICAgYW5jZXN0b3JJbmZvID0gcGFyZW50SW5mbyB8fCBhbmNlc3RvckluZm87XG4gICAgICBpZiAoIWFuY2VzdG9ySW5mbykgcmV0dXJuICEwO1xuICAgICAgdmFyIGFuY2VzdG9yVGFnID0gYW5jZXN0b3JJbmZvLnRhZztcbiAgICAgIGFuY2VzdG9ySW5mbyA9IFN0cmluZyghIXBhcmVudEluZm8pICsgXCJ8XCIgKyBjaGlsZFRhZyArIFwifFwiICsgYW5jZXN0b3JUYWc7XG4gICAgICBpZiAoZGlkV2FyblthbmNlc3RvckluZm9dKSByZXR1cm4gITE7XG4gICAgICBkaWRXYXJuW2FuY2VzdG9ySW5mb10gPSAhMDtcbiAgICAgIHZhciBhbmNlc3RvciA9IChhbmNlc3RvckluZm8gPSBjdXJyZW50KVxuICAgICAgICAgID8gZmluZEFuY2VzdG9yKGFuY2VzdG9ySW5mby5yZXR1cm4sIGFuY2VzdG9yVGFnKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgYW5jZXN0b3JEZXNjcmlwdGlvbiA9XG4gICAgICAgICAgbnVsbCAhPT0gYW5jZXN0b3JJbmZvICYmIG51bGwgIT09IGFuY2VzdG9yXG4gICAgICAgICAgICA/IGRlc2NyaWJlQW5jZXN0b3JzKGFuY2VzdG9yLCBhbmNlc3RvckluZm8sIG51bGwpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gXCI8XCIgKyBjaGlsZFRhZyArIFwiPlwiO1xuICAgICAgcGFyZW50SW5mb1xuICAgICAgICA/ICgocGFyZW50SW5mbyA9IFwiXCIpLFxuICAgICAgICAgIFwidGFibGVcIiA9PT0gYW5jZXN0b3JUYWcgJiZcbiAgICAgICAgICAgIFwidHJcIiA9PT0gY2hpbGRUYWcgJiZcbiAgICAgICAgICAgIChwYXJlbnRJbmZvICs9XG4gICAgICAgICAgICAgIFwiIEFkZCBhIDx0Ym9keT4sIDx0aGVhZD4gb3IgPHRmb290PiB0byB5b3VyIGNvZGUgdG8gbWF0Y2ggdGhlIERPTSB0cmVlIGdlbmVyYXRlZCBieSB0aGUgYnJvd3Nlci5cIiksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW4gSFRNTCwgJXMgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCVzPi4lc1xcblRoaXMgd2lsbCBjYXVzZSBhIGh5ZHJhdGlvbiBlcnJvci4lc1wiLFxuICAgICAgICAgICAgdGFnRGlzcGxheU5hbWUsXG4gICAgICAgICAgICBhbmNlc3RvclRhZyxcbiAgICAgICAgICAgIHBhcmVudEluZm8sXG4gICAgICAgICAgICBhbmNlc3RvckRlc2NyaXB0aW9uXG4gICAgICAgICAgKSlcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbiBIVE1MLCAlcyBjYW5ub3QgYmUgYSBkZXNjZW5kYW50IG9mIDwlcz4uXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yLiVzXCIsXG4gICAgICAgICAgICB0YWdEaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIGFuY2VzdG9yVGFnLFxuICAgICAgICAgICAgYW5jZXN0b3JEZXNjcmlwdGlvblxuICAgICAgICAgICk7XG4gICAgICBhbmNlc3RvckluZm8gJiZcbiAgICAgICAgKChjaGlsZFRhZyA9IGFuY2VzdG9ySW5mby5yZXR1cm4pLFxuICAgICAgICBudWxsID09PSBhbmNlc3RvciB8fFxuICAgICAgICAgIG51bGwgPT09IGNoaWxkVGFnIHx8XG4gICAgICAgICAgKGFuY2VzdG9yID09PSBjaGlsZFRhZyAmJlxuICAgICAgICAgICAgY2hpbGRUYWcuX2RlYnVnT3duZXIgPT09IGFuY2VzdG9ySW5mby5fZGVidWdPd25lcikgfHxcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihhbmNlc3RvciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCI8JXM+IGNhbm5vdCBjb250YWluIGEgbmVzdGVkICVzLlxcblNlZSB0aGlzIGxvZyBmb3IgdGhlIGFuY2VzdG9yIHN0YWNrIHRyYWNlLlwiLFxuICAgICAgICAgICAgICBhbmNlc3RvclRhZyxcbiAgICAgICAgICAgICAgdGFnRGlzcGxheU5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSkpO1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVRleHROZXN0aW5nKGNoaWxkVGV4dCwgcGFyZW50VGFnLCBpbXBsaWNpdFJvb3RTY29wZSkge1xuICAgICAgaWYgKGltcGxpY2l0Um9vdFNjb3BlIHx8IGlzVGFnVmFsaWRXaXRoUGFyZW50KFwiI3RleHRcIiwgcGFyZW50VGFnLCAhMSkpXG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIGltcGxpY2l0Um9vdFNjb3BlID0gXCIjdGV4dHxcIiArIHBhcmVudFRhZztcbiAgICAgIGlmIChkaWRXYXJuW2ltcGxpY2l0Um9vdFNjb3BlXSkgcmV0dXJuICExO1xuICAgICAgZGlkV2FybltpbXBsaWNpdFJvb3RTY29wZV0gPSAhMDtcbiAgICAgIHZhciBhbmNlc3RvciA9IChpbXBsaWNpdFJvb3RTY29wZSA9IGN1cnJlbnQpXG4gICAgICAgID8gZmluZEFuY2VzdG9yKGltcGxpY2l0Um9vdFNjb3BlLCBwYXJlbnRUYWcpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGltcGxpY2l0Um9vdFNjb3BlID1cbiAgICAgICAgbnVsbCAhPT0gaW1wbGljaXRSb290U2NvcGUgJiYgbnVsbCAhPT0gYW5jZXN0b3JcbiAgICAgICAgICA/IGRlc2NyaWJlQW5jZXN0b3JzKFxuICAgICAgICAgICAgICBhbmNlc3RvcixcbiAgICAgICAgICAgICAgaW1wbGljaXRSb290U2NvcGUsXG4gICAgICAgICAgICAgIDYgIT09IGltcGxpY2l0Um9vdFNjb3BlLnRhZyA/IHsgY2hpbGRyZW46IG51bGwgfSA6IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFwiXCI7XG4gICAgICAvXFxTLy50ZXN0KGNoaWxkVGV4dClcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbiBIVE1MLCB0ZXh0IG5vZGVzIGNhbm5vdCBiZSBhIGNoaWxkIG9mIDwlcz4uXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yLiVzXCIsXG4gICAgICAgICAgICBwYXJlbnRUYWcsXG4gICAgICAgICAgICBpbXBsaWNpdFJvb3RTY29wZVxuICAgICAgICAgIClcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbiBIVE1MLCB3aGl0ZXNwYWNlIHRleHQgbm9kZXMgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCVzPi4gTWFrZSBzdXJlIHlvdSBkb24ndCBoYXZlIGFueSBleHRyYSB3aGl0ZXNwYWNlIGJldHdlZW4gdGFncyBvbiBlYWNoIGxpbmUgb2YgeW91ciBzb3VyY2UgY29kZS5cXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3IuJXNcIixcbiAgICAgICAgICAgIHBhcmVudFRhZyxcbiAgICAgICAgICAgIGltcGxpY2l0Um9vdFNjb3BlXG4gICAgICAgICAgKTtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0VGV4dENvbnRlbnQobm9kZSwgdGV4dCkge1xuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaXJzdENoaWxkICYmXG4gICAgICAgICAgZmlyc3RDaGlsZCA9PT0gbm9kZS5sYXN0Q2hpbGQgJiZcbiAgICAgICAgICAzID09PSBmaXJzdENoaWxkLm5vZGVUeXBlXG4gICAgICAgICkge1xuICAgICAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYW1lbGl6ZShzdHJpbmcpIHtcbiAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShoeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoXywgY2hhcmFjdGVyKSB7XG4gICAgICAgIHJldHVybiBjaGFyYWN0ZXIudG9VcHBlckNhc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRWYWx1ZUZvclN0eWxlKHN0eWxlLCBzdHlsZU5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IDAgPT09IHN0eWxlTmFtZS5pbmRleE9mKFwiLS1cIik7XG4gICAgICBpc0N1c3RvbVByb3BlcnR5IHx8XG4gICAgICAgICgtMSA8IHN0eWxlTmFtZS5pbmRleE9mKFwiLVwiKVxuICAgICAgICAgID8gKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJlxuICAgICAgICAgICAgICB3YXJuZWRTdHlsZU5hbWVzW3N0eWxlTmFtZV0pIHx8XG4gICAgICAgICAgICAoKHdhcm5lZFN0eWxlTmFtZXNbc3R5bGVOYW1lXSA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiVW5zdXBwb3J0ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz9cIixcbiAgICAgICAgICAgICAgc3R5bGVOYW1lLFxuICAgICAgICAgICAgICBjYW1lbGl6ZShzdHlsZU5hbWUucmVwbGFjZShtc1BhdHRlcm4sIFwibXMtXCIpKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgICA6IGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybi50ZXN0KHN0eWxlTmFtZSlcbiAgICAgICAgICAgID8gKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJlxuICAgICAgICAgICAgICAgIHdhcm5lZFN0eWxlTmFtZXNbc3R5bGVOYW1lXSkgfHxcbiAgICAgICAgICAgICAgKCh3YXJuZWRTdHlsZU5hbWVzW3N0eWxlTmFtZV0gPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVbnN1cHBvcnRlZCB2ZW5kb3ItcHJlZml4ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz9cIixcbiAgICAgICAgICAgICAgICBzdHlsZU5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3R5bGVOYW1lLnNsaWNlKDEpXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICA6ICFiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4udGVzdCh2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSkgfHxcbiAgICAgICAgICAgICAgKCh3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ1N0eWxlIHByb3BlcnR5IHZhbHVlcyBzaG91bGRuXFwndCBjb250YWluIGEgc2VtaWNvbG9uLiBUcnkgXCIlczogJXNcIiBpbnN0ZWFkLicsXG4gICAgICAgICAgICAgICAgc3R5bGVOYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCBcIlwiKVxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgKGlzTmFOKHZhbHVlKVxuICAgICAgICAgICAgPyB3YXJuZWRGb3JOYU5WYWx1ZSB8fFxuICAgICAgICAgICAgICAoKHdhcm5lZEZvck5hTlZhbHVlID0gITApLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiYE5hTmAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LlwiLFxuICAgICAgICAgICAgICAgIHN0eWxlTmFtZVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgOiBpc0Zpbml0ZSh2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSB8fFxuICAgICAgICAgICAgICAoKHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJgSW5maW5pdHlgIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS5cIixcbiAgICAgICAgICAgICAgICBzdHlsZU5hbWVcbiAgICAgICAgICAgICAgKSkpKTtcbiAgICAgIG51bGwgPT0gdmFsdWUgfHwgXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZSB8fCBcIlwiID09PSB2YWx1ZVxuICAgICAgICA/IGlzQ3VzdG9tUHJvcGVydHlcbiAgICAgICAgICA/IHN0eWxlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgXCJcIilcbiAgICAgICAgICA6IFwiZmxvYXRcIiA9PT0gc3R5bGVOYW1lXG4gICAgICAgICAgICA/IChzdHlsZS5jc3NGbG9hdCA9IFwiXCIpXG4gICAgICAgICAgICA6IChzdHlsZVtzdHlsZU5hbWVdID0gXCJcIilcbiAgICAgICAgOiBpc0N1c3RvbVByb3BlcnR5XG4gICAgICAgICAgPyBzdHlsZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIHZhbHVlKVxuICAgICAgICAgIDogXCJudW1iZXJcIiAhPT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICAgIDAgPT09IHZhbHVlIHx8XG4gICAgICAgICAgICAgIHVuaXRsZXNzTnVtYmVycy5oYXMoc3R5bGVOYW1lKVxuICAgICAgICAgICAgPyBcImZsb2F0XCIgPT09IHN0eWxlTmFtZVxuICAgICAgICAgICAgICA/IChzdHlsZS5jc3NGbG9hdCA9IHZhbHVlKVxuICAgICAgICAgICAgICA6IChjaGVja0NTU1Byb3BlcnR5U3RyaW5nQ29lcmNpb24odmFsdWUsIHN0eWxlTmFtZSksXG4gICAgICAgICAgICAgICAgKHN0eWxlW3N0eWxlTmFtZV0gPSAoXCJcIiArIHZhbHVlKS50cmltKCkpKVxuICAgICAgICAgICAgOiAoc3R5bGVbc3R5bGVOYW1lXSA9IHZhbHVlICsgXCJweFwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0VmFsdWVGb3JTdHlsZXMobm9kZSwgc3R5bGVzLCBwcmV2U3R5bGVzKSB7XG4gICAgICBpZiAobnVsbCAhPSBzdHlsZXMgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHN0eWxlcylcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyAnZW0nfX0gd2hlbiB1c2luZyBKU1guXCJcbiAgICAgICAgKTtcbiAgICAgIHN0eWxlcyAmJiBPYmplY3QuZnJlZXplKHN0eWxlcyk7XG4gICAgICBub2RlID0gbm9kZS5zdHlsZTtcbiAgICAgIGlmIChudWxsICE9IHByZXZTdHlsZXMpIHtcbiAgICAgICAgaWYgKHN0eWxlcykge1xuICAgICAgICAgIHZhciBleHBhbmRlZFVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICBpZiAocHJldlN0eWxlcylcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwcmV2U3R5bGVzKVxuICAgICAgICAgICAgICBpZiAocHJldlN0eWxlcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFzdHlsZXMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgdmFyIGxvbmdoYW5kcyA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5XSB8fCBba2V5XSwgaSA9IDA7XG4gICAgICAgICAgICAgICAgICBpIDwgbG9uZ2hhbmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgIGkrK1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGVkVXBkYXRlc1tsb25naGFuZHNbaV1dID0ga2V5O1xuICAgICAgICAgIGZvciAodmFyIF9rZXkgaW4gc3R5bGVzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzdHlsZXMuaGFzT3duUHJvcGVydHkoX2tleSkgJiZcbiAgICAgICAgICAgICAgKCFwcmV2U3R5bGVzIHx8IHByZXZTdHlsZXNbX2tleV0gIT09IHN0eWxlc1tfa2V5XSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBrZXkgPSBzaG9ydGhhbmRUb0xvbmdoYW5kW19rZXldIHx8IFtfa2V5XSwgbG9uZ2hhbmRzID0gMDtcbiAgICAgICAgICAgICAgICBsb25naGFuZHMgPCBrZXkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxvbmdoYW5kcysrXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBleHBhbmRlZFVwZGF0ZXNba2V5W2xvbmdoYW5kc11dID0gX2tleTtcbiAgICAgICAgICBfa2V5ID0ge307XG4gICAgICAgICAgZm9yICh2YXIga2V5JGpzY29tcCQwIGluIHN0eWxlcylcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGtleSA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5JGpzY29tcCQwXSB8fCBba2V5JGpzY29tcCQwXSxcbiAgICAgICAgICAgICAgICBsb25naGFuZHMgPSAwO1xuICAgICAgICAgICAgICBsb25naGFuZHMgPCBrZXkubGVuZ3RoO1xuICAgICAgICAgICAgICBsb25naGFuZHMrK1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBfa2V5W2tleVtsb25naGFuZHNdXSA9IGtleSRqc2NvbXAkMDtcbiAgICAgICAgICBrZXkkanNjb21wJDAgPSB7fTtcbiAgICAgICAgICBmb3IgKHZhciBfa2V5MiBpbiBleHBhbmRlZFVwZGF0ZXMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoa2V5ID0gZXhwYW5kZWRVcGRhdGVzW19rZXkyXSksXG4gICAgICAgICAgICAgIChsb25naGFuZHMgPSBfa2V5W19rZXkyXSkgJiZcbiAgICAgICAgICAgICAgICBrZXkgIT09IGxvbmdoYW5kcyAmJlxuICAgICAgICAgICAgICAgICgoaSA9IGtleSArIFwiLFwiICsgbG9uZ2hhbmRzKSwgIWtleSRqc2NvbXAkMFtpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAga2V5JGpzY29tcCQwW2ldID0gITA7XG4gICAgICAgICAgICAgIGkgPSBjb25zb2xlO1xuICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzdHlsZXNba2V5XTtcbiAgICAgICAgICAgICAgaS5lcnJvci5jYWxsKFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgXCIlcyBhIHN0eWxlIHByb3BlcnR5IGR1cmluZyByZXJlbmRlciAoJXMpIHdoZW4gYSBjb25mbGljdGluZyBwcm9wZXJ0eSBpcyBzZXQgKCVzKSBjYW4gbGVhZCB0byBzdHlsaW5nIGJ1Z3MuIFRvIGF2b2lkIHRoaXMsIGRvbid0IG1peCBzaG9ydGhhbmQgYW5kIG5vbi1zaG9ydGhhbmQgcHJvcGVydGllcyBmb3IgdGhlIHNhbWUgdmFsdWU7IGluc3RlYWQsIHJlcGxhY2UgdGhlIHNob3J0aGFuZCB3aXRoIHNlcGFyYXRlIHZhbHVlcy5cIixcbiAgICAgICAgICAgICAgICBudWxsID09IHZhbHVlIHx8IFwiYm9vbGVhblwiID09PSB0eXBlb2YgdmFsdWUgfHwgXCJcIiA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICAgID8gXCJSZW1vdmluZ1wiXG4gICAgICAgICAgICAgICAgICA6IFwiVXBkYXRpbmdcIixcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgbG9uZ2hhbmRzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHByZXZTdHlsZXMpXG4gICAgICAgICAgIXByZXZTdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSB8fFxuICAgICAgICAgICAgKG51bGwgIT0gc3R5bGVzICYmIHN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB8fFxuICAgICAgICAgICAgKDAgPT09IHN0eWxlTmFtZS5pbmRleE9mKFwiLS1cIilcbiAgICAgICAgICAgICAgPyBub2RlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgXCJcIilcbiAgICAgICAgICAgICAgOiBcImZsb2F0XCIgPT09IHN0eWxlTmFtZVxuICAgICAgICAgICAgICAgID8gKG5vZGUuY3NzRmxvYXQgPSBcIlwiKVxuICAgICAgICAgICAgICAgIDogKG5vZGVbc3R5bGVOYW1lXSA9IFwiXCIpKTtcbiAgICAgICAgZm9yICh2YXIgX3N0eWxlTmFtZSBpbiBzdHlsZXMpXG4gICAgICAgICAgKF9rZXkyID0gc3R5bGVzW19zdHlsZU5hbWVdKSxcbiAgICAgICAgICAgIHN0eWxlcy5oYXNPd25Qcm9wZXJ0eShfc3R5bGVOYW1lKSAmJlxuICAgICAgICAgICAgICBwcmV2U3R5bGVzW19zdHlsZU5hbWVdICE9PSBfa2V5MiAmJlxuICAgICAgICAgICAgICBzZXRWYWx1ZUZvclN0eWxlKG5vZGUsIF9zdHlsZU5hbWUsIF9rZXkyKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICBmb3IgKGV4cGFuZGVkVXBkYXRlcyBpbiBzdHlsZXMpXG4gICAgICAgICAgc3R5bGVzLmhhc093blByb3BlcnR5KGV4cGFuZGVkVXBkYXRlcykgJiZcbiAgICAgICAgICAgIHNldFZhbHVlRm9yU3R5bGUobm9kZSwgZXhwYW5kZWRVcGRhdGVzLCBzdHlsZXNbZXhwYW5kZWRVcGRhdGVzXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzQ3VzdG9tRWxlbWVudCh0YWdOYW1lKSB7XG4gICAgICBpZiAoLTEgPT09IHRhZ05hbWUuaW5kZXhPZihcIi1cIikpIHJldHVybiAhMTtcbiAgICAgIHN3aXRjaCAodGFnTmFtZSkge1xuICAgICAgICBjYXNlIFwiYW5ub3RhdGlvbi14bWxcIjpcbiAgICAgICAgY2FzZSBcImNvbG9yLXByb2ZpbGVcIjpcbiAgICAgICAgY2FzZSBcImZvbnQtZmFjZVwiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlLXNyY1wiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlLXVyaVwiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlLWZvcm1hdFwiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlLW5hbWVcIjpcbiAgICAgICAgY2FzZSBcIm1pc3NpbmctZ2x5cGhcIjpcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVBbGlhcyhuYW1lKSB7XG4gICAgICByZXR1cm4gYWxpYXNlcy5nZXQobmFtZSkgfHwgbmFtZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eSQxKHRhZ05hbWUsIG5hbWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzJDEsIG5hbWUpICYmXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXVxuICAgICAgKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICBpZiAockFSSUFDYW1lbCQxLnRlc3QobmFtZSkpIHtcbiAgICAgICAgdGFnTmFtZSA9IFwiYXJpYS1cIiArIG5hbWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdGFnTmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHRhZ05hbWUpID8gdGFnTmFtZSA6IG51bGw7XG4gICAgICAgIGlmIChudWxsID09IHRhZ05hbWUpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBBUklBIGF0dHJpYnV0ZXMgZm9sbG93IHRoZSBwYXR0ZXJuIGFyaWEtKiBhbmQgbXVzdCBiZSBsb3dlcmNhc2UuXCIsXG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAod2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gITApXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKG5hbWUgIT09IHRhZ05hbWUpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD9cIixcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdGFnTmFtZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSAhMClcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHJBUklBJDEudGVzdChuYW1lKSkge1xuICAgICAgICB0YWdOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB0YWdOYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgPyB0YWdOYW1lIDogbnVsbDtcbiAgICAgICAgaWYgKG51bGwgPT0gdGFnTmFtZSkgcmV0dXJuICh3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSAhMCksICExO1xuICAgICAgICBuYW1lICE9PSB0YWdOYW1lICYmXG4gICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlVua25vd24gQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/XCIsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdGFnTmFtZVxuICAgICAgICAgICksXG4gICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9ICEwKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzKSB7XG4gICAgICB2YXIgaW52YWxpZFByb3BzID0gW10sXG4gICAgICAgIGtleTtcbiAgICAgIGZvciAoa2V5IGluIHByb3BzKVxuICAgICAgICB2YWxpZGF0ZVByb3BlcnR5JDEodHlwZSwga2V5KSB8fCBpbnZhbGlkUHJvcHMucHVzaChrZXkpO1xuICAgICAgcHJvcHMgPSBpbnZhbGlkUHJvcHNcbiAgICAgICAgLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgIHJldHVybiBcImBcIiArIHByb3AgKyBcImBcIjtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgIDEgPT09IGludmFsaWRQcm9wcy5sZW5ndGhcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIGFyaWEgcHJvcCAlcyBvbiA8JXM+IHRhZy4gRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL2ludmFsaWQtYXJpYS1wcm9wc1wiLFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgKVxuICAgICAgICA6IDEgPCBpbnZhbGlkUHJvcHMubGVuZ3RoICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW52YWxpZCBhcmlhIHByb3BzICVzIG9uIDwlcz4gdGFnLiBGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaW52YWxpZC1hcmlhLXByb3BzXCIsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KHRhZ05hbWUsIG5hbWUsIHZhbHVlLCBldmVudFJlZ2lzdHJ5KSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoXCJvbmZvY3VzaW5cIiA9PT0gbG93ZXJDYXNlZE5hbWUgfHwgXCJvbmZvY3Vzb3V0XCIgPT09IGxvd2VyQ2FzZWROYW1lKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0IHVzZXMgb25Gb2N1cyBhbmQgb25CbHVyIGluc3RlYWQgb2Ygb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0LiBBbGwgUmVhY3QgZXZlbnRzIGFyZSBub3JtYWxpemVkIHRvIGJ1YmJsZSwgc28gb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0IGFyZSBub3QgbmVlZGVkL3N1cHBvcnRlZCBieSBSZWFjdC5cIlxuICAgICAgICAgICksXG4gICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgKChcImZvcm1cIiA9PT0gdGFnTmFtZSAmJiBcImFjdGlvblwiID09PSBuYW1lKSB8fFxuICAgICAgICAgIChcImlucHV0XCIgPT09IHRhZ05hbWUgJiYgXCJmb3JtQWN0aW9uXCIgPT09IG5hbWUpIHx8XG4gICAgICAgICAgKFwiYnV0dG9uXCIgPT09IHRhZ05hbWUgJiYgXCJmb3JtQWN0aW9uXCIgPT09IG5hbWUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICBpZiAobnVsbCAhPSBldmVudFJlZ2lzdHJ5KSB7XG4gICAgICAgIHRhZ05hbWUgPSBldmVudFJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM7XG4gICAgICAgIGlmIChldmVudFJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkobmFtZSkpXG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBldmVudFJlZ2lzdHJ5ID0gdGFnTmFtZS5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSlcbiAgICAgICAgICA/IHRhZ05hbWVbbG93ZXJDYXNlZE5hbWVdXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAobnVsbCAhPSBldmVudFJlZ2lzdHJ5KVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD9cIixcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRSZWdpc3RyeVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJVbmtub3duIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gSXQgd2lsbCBiZSBpZ25vcmVkLlwiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIFJlYWN0IGV2ZW50cyB1c2UgdGhlIGNhbWVsQ2FzZSBuYW1pbmcgY29udmVudGlvbiwgZm9yIGV4YW1wbGUgYG9uQ2xpY2tgLlwiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBpZiAockFSSUEudGVzdChuYW1lKSB8fCByQVJJQUNhbWVsLnRlc3QobmFtZSkpIHJldHVybiAhMDtcbiAgICAgIGlmIChcImlubmVyaHRtbFwiID09PSBsb3dlckNhc2VkTmFtZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJEaXJlY3RseSBzZXR0aW5nIHByb3BlcnR5IGBpbm5lckhUTUxgIGlzIG5vdCBwZXJtaXR0ZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBsb29rdXAgZG9jdW1lbnRhdGlvbiBvbiBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgaWYgKFwiYXJpYVwiID09PSBsb3dlckNhc2VkTmFtZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgYGFyaWFgIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBpbiBSZWFjdC4gUGFzcyBpbmRpdmlkdWFsIGBhcmlhLWAgYXR0cmlidXRlcyBpbnN0ZWFkLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBcImlzXCIgPT09IGxvd2VyQ2FzZWROYW1lICYmXG4gICAgICAgIG51bGwgIT09IHZhbHVlICYmXG4gICAgICAgIHZvaWQgMCAhPT0gdmFsdWUgJiZcbiAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHZhbHVlXG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiUmVjZWl2ZWQgYSBgJXNgIGZvciBhIHN0cmluZyBhdHRyaWJ1dGUgYGlzYC4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCB0aGUgdmFsdWUgdG8gYSBzdHJpbmcuXCIsXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWVcbiAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlICYmIGlzTmFOKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJSZWNlaXZlZCBOYU4gZm9yIHRoZSBgJXNgIGF0dHJpYnV0ZS4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCB0aGUgdmFsdWUgdG8gYSBzdHJpbmcuXCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgaWYgKHBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgobG93ZXJDYXNlZE5hbWUgPSBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdKSxcbiAgICAgICAgICBsb3dlckNhc2VkTmFtZSAhPT0gbmFtZSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkludmFsaWQgRE9NIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgP1wiLFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBsb3dlckNhc2VkTmFtZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSAhPT0gbG93ZXJDYXNlZE5hbWUpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiUmVhY3QgZG9lcyBub3QgcmVjb2duaXplIHRoZSBgJXNgIHByb3Agb24gYSBET00gZWxlbWVudC4gSWYgeW91IGludGVudGlvbmFsbHkgd2FudCBpdCB0byBhcHBlYXIgaW4gdGhlIERPTSBhcyBhIGN1c3RvbSBhdHRyaWJ1dGUsIHNwZWxsIGl0IGFzIGxvd2VyY2FzZSBgJXNgIGluc3RlYWQuIElmIHlvdSBhY2NpZGVudGFsbHkgcGFzc2VkIGl0IGZyb20gYSBwYXJlbnQgY29tcG9uZW50LCByZW1vdmUgaXQgZnJvbSB0aGUgRE9NIGVsZW1lbnQuXCIsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbG93ZXJDYXNlZE5hbWVcbiAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgY2FzZSBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOlxuICAgICAgICBjYXNlIFwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCI6XG4gICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgY2FzZSBcImRlZmF1bHRDaGVja2VkXCI6XG4gICAgICAgIGNhc2UgXCJpbm5lckhUTUxcIjpcbiAgICAgICAgY2FzZSBcInJlZlwiOlxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcImlubmVyVGV4dFwiOlxuICAgICAgICBjYXNlIFwidGV4dENvbnRlbnRcIjpcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgY2FzZSBcImF1dG9Gb2N1c1wiOlxuICAgICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgY2FzZSBcIm11dGVkXCI6XG4gICAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJjb250ZW50RWRpdGFibGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGVsbENoZWNrXCI6XG4gICAgICAgICAgICBjYXNlIFwiZHJhZ2dhYmxlXCI6XG4gICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhdXRvUmV2ZXJzZVwiOlxuICAgICAgICAgICAgY2FzZSBcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmb2N1c2FibGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwcmVzZXJ2ZUFscGhhXCI6XG4gICAgICAgICAgICBjYXNlIFwiYWxsb3dGdWxsU2NyZWVuXCI6XG4gICAgICAgICAgICBjYXNlIFwiYXN5bmNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhdXRvUGxheVwiOlxuICAgICAgICAgICAgY2FzZSBcImNvbnRyb2xzXCI6XG4gICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFwiOlxuICAgICAgICAgICAgY2FzZSBcImRlZmVyXCI6XG4gICAgICAgICAgICBjYXNlIFwiZGlzYWJsZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlUGljdHVyZUluUGljdHVyZVwiOlxuICAgICAgICAgICAgY2FzZSBcImRpc2FibGVSZW1vdGVQbGF5YmFja1wiOlxuICAgICAgICAgICAgY2FzZSBcImZvcm1Ob1ZhbGlkYXRlXCI6XG4gICAgICAgICAgICBjYXNlIFwiaGlkZGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwibG9vcFwiOlxuICAgICAgICAgICAgY2FzZSBcIm5vTW9kdWxlXCI6XG4gICAgICAgICAgICBjYXNlIFwibm9WYWxpZGF0ZVwiOlxuICAgICAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJwbGF5c0lubGluZVwiOlxuICAgICAgICAgICAgY2FzZSBcInJlYWRPbmx5XCI6XG4gICAgICAgICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJyZXZlcnNlZFwiOlxuICAgICAgICAgICAgY2FzZSBcInNjb3BlZFwiOlxuICAgICAgICAgICAgY2FzZSBcInNlYW1sZXNzXCI6XG4gICAgICAgICAgICBjYXNlIFwiaXRlbVNjb3BlXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2FwdHVyZVwiOlxuICAgICAgICAgICAgY2FzZSBcImRvd25sb2FkXCI6XG4gICAgICAgICAgICBjYXNlIFwiaW5lcnRcIjpcbiAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNSk7XG4gICAgICAgICAgICAgIGlmIChcImRhdGEtXCIgPT09IGxvd2VyQ2FzZWROYW1lIHx8IFwiYXJpYS1cIiA9PT0gbG93ZXJDYXNlZE5hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAlcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LicsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAlcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LlxcblxcbklmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCBwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgcmV0dXJuICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApLCAhMTtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGlmIChcImZhbHNlXCIgPT09IHZhbHVlIHx8IFwidHJ1ZVwiID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm11dGVkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJhbGxvd0Z1bGxTY3JlZW5cIjpcbiAgICAgICAgICAgICAgY2FzZSBcImFzeW5jXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJhdXRvUGxheVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiY29udHJvbHNcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRlZmVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRpc2FibGVSZW1vdGVQbGF5YmFja1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiZm9ybU5vVmFsaWRhdGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImhpZGRlblwiOlxuICAgICAgICAgICAgICBjYXNlIFwibG9vcFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibm9Nb2R1bGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm5vVmFsaWRhdGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBsYXlzSW5saW5lXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJyZWFkT25seVwiOlxuICAgICAgICAgICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInJldmVyc2VkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzY29wZWRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInNlYW1sZXNzXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJpdGVtU2NvcGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImluZXJ0XCI6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWNlaXZlZCB0aGUgc3RyaW5nIGAlc2AgZm9yIHRoZSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiAlcyBEaWQgeW91IG1lYW4gJXM9eyVzfT9cIixcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIFwiZmFsc2VcIiA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICA/IFwiVGhlIGJyb3dzZXIgd2lsbCBpbnRlcnByZXQgaXQgYXMgYSB0cnV0aHkgdmFsdWUuXCJcbiAgICAgICAgICAgICAgICA6ICdBbHRob3VnaCB0aGlzIHdvcmtzLCBpdCB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGlmIHlvdSBwYXNzIHRoZSBzdHJpbmcgXCJmYWxzZVwiLicsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FyblVua25vd25Qcm9wZXJ0aWVzKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gICAgICB2YXIgdW5rbm93blByb3BzID0gW10sXG4gICAgICAgIGtleTtcbiAgICAgIGZvciAoa2V5IGluIHByb3BzKVxuICAgICAgICB2YWxpZGF0ZVByb3BlcnR5KHR5cGUsIGtleSwgcHJvcHNba2V5XSwgZXZlbnRSZWdpc3RyeSkgfHxcbiAgICAgICAgICB1bmtub3duUHJvcHMucHVzaChrZXkpO1xuICAgICAgcHJvcHMgPSB1bmtub3duUHJvcHNcbiAgICAgICAgLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgIHJldHVybiBcImBcIiArIHByb3AgKyBcImBcIjtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgIDEgPT09IHVua25vd25Qcm9wcy5sZW5ndGhcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBwcm9wICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIGl0IGZyb20gdGhlIGVsZW1lbnQsIG9yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgaXQgaW4gdGhlIERPTS4gRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciBcIixcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICAgIClcbiAgICAgICAgOiAxIDwgdW5rbm93blByb3BzLmxlbmd0aCAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkludmFsaWQgdmFsdWVzIGZvciBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSB0aGVtIGZyb20gdGhlIGVsZW1lbnQsIG9yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgdGhlbSBpbiB0aGUgRE9NLiBGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yIFwiLFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2FuaXRpemVVUkwodXJsKSB7XG4gICAgICByZXR1cm4gaXNKYXZhU2NyaXB0UHJvdG9jb2wudGVzdChcIlwiICsgdXJsKVxuICAgICAgICA/IFwiamF2YXNjcmlwdDp0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0IGhhcyBibG9ja2VkIGEgamF2YXNjcmlwdDogVVJMIGFzIGEgc2VjdXJpdHkgcHJlY2F1dGlvbi4nKVwiXG4gICAgICAgIDogdXJsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICAgICAgbmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudC50YXJnZXQgfHwgbmF0aXZlRXZlbnQuc3JjRWxlbWVudCB8fCB3aW5kb3c7XG4gICAgICBuYXRpdmVFdmVudC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCAmJlxuICAgICAgICAobmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCk7XG4gICAgICByZXR1cm4gMyA9PT0gbmF0aXZlRXZlbnQubm9kZVR5cGUgPyBuYXRpdmVFdmVudC5wYXJlbnROb2RlIDogbmF0aXZlRXZlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCkge1xuICAgICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKHRhcmdldCk7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZSAmJiAodGFyZ2V0ID0gaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUpKSB7XG4gICAgICAgIHZhciBwcm9wcyA9IHRhcmdldFtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xuICAgICAgICBhOiBzd2l0Y2ggKFxuICAgICAgICAgICgodGFyZ2V0ID0gaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUpLCBpbnRlcm5hbEluc3RhbmNlLnR5cGUpXG4gICAgICAgICkge1xuICAgICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICAgICAgdXBkYXRlSW5wdXQoXG4gICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgcHJvcHMudmFsdWUsXG4gICAgICAgICAgICAgIHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICBwcm9wcy5jaGVja2VkLFxuICAgICAgICAgICAgICBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgICAgcHJvcHMudHlwZSxcbiAgICAgICAgICAgICAgcHJvcHMubmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UgPSBwcm9wcy5uYW1lO1xuICAgICAgICAgICAgaWYgKFwicmFkaW9cIiA9PT0gcHJvcHMudHlwZSAmJiBudWxsICE9IGludGVybmFsSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgZm9yIChwcm9wcyA9IHRhcmdldDsgcHJvcHMucGFyZW50Tm9kZTsgKSBwcm9wcyA9IHByb3BzLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24oaW50ZXJuYWxJbnN0YW5jZSwgXCJuYW1lXCIpO1xuICAgICAgICAgICAgICBwcm9wcyA9IHByb3BzLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgJ2lucHV0W25hbWU9XCInICtcbiAgICAgICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoXG4gICAgICAgICAgICAgICAgICAgIFwiXCIgKyBpbnRlcm5hbEluc3RhbmNlXG4gICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICdcIl1bdHlwZT1cInJhZGlvXCJdJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UgPSAwO1xuICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UgPCBwcm9wcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSsrXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlck5vZGUgPSBwcm9wc1tpbnRlcm5hbEluc3RhbmNlXTtcbiAgICAgICAgICAgICAgICBpZiAob3RoZXJOb2RlICE9PSB0YXJnZXQgJiYgb3RoZXJOb2RlLmZvcm0gPT09IHRhcmdldC5mb3JtKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgb3RoZXJQcm9wcyA9IG90aGVyTm9kZVtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgaWYgKCFvdGhlclByb3BzKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlJlYWN0RE9NSW5wdXQ6IE1peGluZyBSZWFjdCBhbmQgbm9uLVJlYWN0IHJhZGlvIGlucHV0cyB3aXRoIHRoZSBzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVkLlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB1cGRhdGVJbnB1dChcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJOb2RlLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJQcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG90aGVyUHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJQcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJQcm9wcy50eXBlLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLm5hbWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA8IHByb3BzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlKytcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIChvdGhlck5vZGUgPSBwcm9wc1tpbnRlcm5hbEluc3RhbmNlXSksXG4gICAgICAgICAgICAgICAgICBvdGhlck5vZGUuZm9ybSA9PT0gdGFyZ2V0LmZvcm0gJiZcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWVJZkNoYW5nZWQob3RoZXJOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgICB1cGRhdGVUZXh0YXJlYSh0YXJnZXQsIHByb3BzLnZhbHVlLCBwcm9wcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgICAoaW50ZXJuYWxJbnN0YW5jZSA9IHByb3BzLnZhbHVlKSxcbiAgICAgICAgICAgICAgbnVsbCAhPSBpbnRlcm5hbEluc3RhbmNlICYmXG4gICAgICAgICAgICAgICAgdXBkYXRlT3B0aW9ucyh0YXJnZXQsICEhcHJvcHMubXVsdGlwbGUsIGludGVybmFsSW5zdGFuY2UsICExKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyQxKGZuLCBhLCBiKSB7XG4gICAgICBpZiAoaXNJbnNpZGVFdmVudEhhbmRsZXIpIHJldHVybiBmbihhLCBiKTtcbiAgICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gITA7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gZm4oYSk7XG4gICAgICAgIHJldHVybiBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKChpc0luc2lkZUV2ZW50SGFuZGxlciA9ICExKSxcbiAgICAgICAgICBudWxsICE9PSByZXN0b3JlVGFyZ2V0IHx8IG51bGwgIT09IHJlc3RvcmVRdWV1ZSlcbiAgICAgICAgKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChmbHVzaFN5bmNXb3JrJDEoKSxcbiAgICAgICAgICAgIHJlc3RvcmVUYXJnZXQgJiZcbiAgICAgICAgICAgICAgKChhID0gcmVzdG9yZVRhcmdldCksXG4gICAgICAgICAgICAgIChmbiA9IHJlc3RvcmVRdWV1ZSksXG4gICAgICAgICAgICAgIChyZXN0b3JlUXVldWUgPSByZXN0b3JlVGFyZ2V0ID0gbnVsbCksXG4gICAgICAgICAgICAgIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KGEpLFxuICAgICAgICAgICAgICBmbikpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZm9yIChhID0gMDsgYSA8IGZuLmxlbmd0aDsgYSsrKSByZXN0b3JlU3RhdGVPZlRhcmdldChmblthXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgIHZhciBzdGF0ZU5vZGUgPSBpbnN0LnN0YXRlTm9kZTtcbiAgICAgIGlmIChudWxsID09PSBzdGF0ZU5vZGUpIHJldHVybiBudWxsO1xuICAgICAgdmFyIHByb3BzID0gc3RhdGVOb2RlW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG4gICAgICBpZiAobnVsbCA9PT0gcHJvcHMpIHJldHVybiBudWxsO1xuICAgICAgc3RhdGVOb2RlID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgICBhOiBzd2l0Y2ggKHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgICAgY2FzZSBcIm9uQ2xpY2tcIjpcbiAgICAgICAgY2FzZSBcIm9uQ2xpY2tDYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJvbkRvdWJsZUNsaWNrXCI6XG4gICAgICAgIGNhc2UgXCJvbkRvdWJsZUNsaWNrQ2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZURvd25cIjpcbiAgICAgICAgY2FzZSBcIm9uTW91c2VEb3duQ2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZU1vdmVcIjpcbiAgICAgICAgY2FzZSBcIm9uTW91c2VNb3ZlQ2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZVVwXCI6XG4gICAgICAgIGNhc2UgXCJvbk1vdXNlVXBDYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJvbk1vdXNlRW50ZXJcIjpcbiAgICAgICAgICAocHJvcHMgPSAhcHJvcHMuZGlzYWJsZWQpIHx8XG4gICAgICAgICAgICAoKGluc3QgPSBpbnN0LnR5cGUpLFxuICAgICAgICAgICAgKHByb3BzID0gIShcbiAgICAgICAgICAgICAgXCJidXR0b25cIiA9PT0gaW5zdCB8fFxuICAgICAgICAgICAgICBcImlucHV0XCIgPT09IGluc3QgfHxcbiAgICAgICAgICAgICAgXCJzZWxlY3RcIiA9PT0gaW5zdCB8fFxuICAgICAgICAgICAgICBcInRleHRhcmVhXCIgPT09IGluc3RcbiAgICAgICAgICAgICkpKTtcbiAgICAgICAgICBpbnN0ID0gIXByb3BzO1xuICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaW5zdCA9ICExO1xuICAgICAgfVxuICAgICAgaWYgKGluc3QpIHJldHVybiBudWxsO1xuICAgICAgaWYgKHN0YXRlTm9kZSAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBzdGF0ZU5vZGUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgYFwiICtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUgK1xuICAgICAgICAgICAgXCJgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYFwiICtcbiAgICAgICAgICAgIHR5cGVvZiBzdGF0ZU5vZGUgK1xuICAgICAgICAgICAgXCJgIHR5cGUuXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZU5vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldERhdGEoKSB7XG4gICAgICBpZiAoZmFsbGJhY2tUZXh0KSByZXR1cm4gZmFsbGJhY2tUZXh0O1xuICAgICAgdmFyIHN0YXJ0LFxuICAgICAgICBzdGFydFZhbHVlID0gc3RhcnRUZXh0LFxuICAgICAgICBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUubGVuZ3RoLFxuICAgICAgICBlbmQsXG4gICAgICAgIGVuZFZhbHVlID0gXCJ2YWx1ZVwiIGluIHJvb3QgPyByb290LnZhbHVlIDogcm9vdC50ZXh0Q29udGVudCxcbiAgICAgICAgZW5kTGVuZ3RoID0gZW5kVmFsdWUubGVuZ3RoO1xuICAgICAgZm9yIChcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICBzdGFydCA8IHN0YXJ0TGVuZ3RoICYmIHN0YXJ0VmFsdWVbc3RhcnRdID09PSBlbmRWYWx1ZVtzdGFydF07XG4gICAgICAgIHN0YXJ0KytcbiAgICAgICk7XG4gICAgICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcbiAgICAgIGZvciAoXG4gICAgICAgIGVuZCA9IDE7XG4gICAgICAgIGVuZCA8PSBtaW5FbmQgJiZcbiAgICAgICAgc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gPT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF07XG4gICAgICAgIGVuZCsrXG4gICAgICApO1xuICAgICAgcmV0dXJuIChmYWxsYmFja1RleHQgPSBlbmRWYWx1ZS5zbGljZShzdGFydCwgMSA8IGVuZCA/IDEgLSBlbmQgOiB2b2lkIDApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICAgICAgdmFyIGtleUNvZGUgPSBuYXRpdmVFdmVudC5rZXlDb2RlO1xuICAgICAgXCJjaGFyQ29kZVwiIGluIG5hdGl2ZUV2ZW50XG4gICAgICAgID8gKChuYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50LmNoYXJDb2RlKSxcbiAgICAgICAgICAwID09PSBuYXRpdmVFdmVudCAmJiAxMyA9PT0ga2V5Q29kZSAmJiAobmF0aXZlRXZlbnQgPSAxMykpXG4gICAgICAgIDogKG5hdGl2ZUV2ZW50ID0ga2V5Q29kZSk7XG4gICAgICAxMCA9PT0gbmF0aXZlRXZlbnQgJiYgKG5hdGl2ZUV2ZW50ID0gMTMpO1xuICAgICAgcmV0dXJuIDMyIDw9IG5hdGl2ZUV2ZW50IHx8IDEzID09PSBuYXRpdmVFdmVudCA/IG5hdGl2ZUV2ZW50IDogMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUoKSB7XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSgpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlU3ludGhldGljRXZlbnQoSW50ZXJmYWNlKSB7XG4gICAgICBmdW5jdGlvbiBTeW50aGV0aWNCYXNlRXZlbnQoXG4gICAgICAgIHJlYWN0TmFtZSxcbiAgICAgICAgcmVhY3RFdmVudFR5cGUsXG4gICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX3JlYWN0TmFtZSA9IHJlYWN0TmFtZTtcbiAgICAgICAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gICAgICAgIHRoaXMudHlwZSA9IHJlYWN0RXZlbnRUeXBlO1xuICAgICAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgICAgIHRoaXMuY3VycmVudFRhcmdldCA9IG51bGw7XG4gICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIEludGVyZmFjZSlcbiAgICAgICAgICBJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmXG4gICAgICAgICAgICAoKHJlYWN0TmFtZSA9IEludGVyZmFjZVtwcm9wTmFtZV0pLFxuICAgICAgICAgICAgKHRoaXNbcHJvcE5hbWVdID0gcmVhY3ROYW1lXG4gICAgICAgICAgICAgID8gcmVhY3ROYW1lKG5hdGl2ZUV2ZW50KVxuICAgICAgICAgICAgICA6IG5hdGl2ZUV2ZW50W3Byb3BOYW1lXSkpO1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IChcbiAgICAgICAgICBudWxsICE9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWRcbiAgICAgICAgICAgID8gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgICAgICAgICAgOiAhMSA9PT0gbmF0aXZlRXZlbnQucmV0dXJuVmFsdWVcbiAgICAgICAgKVxuICAgICAgICAgID8gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWVcbiAgICAgICAgICA6IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBhc3NpZ24oU3ludGhldGljQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9ICEwO1xuICAgICAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgICAgICAgZXZlbnQgJiZcbiAgICAgICAgICAgIChldmVudC5wcmV2ZW50RGVmYXVsdFxuICAgICAgICAgICAgICA/IGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgOiBcInVua25vd25cIiAhPT0gdHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICYmXG4gICAgICAgICAgICAgICAgKGV2ZW50LnJldHVyblZhbHVlID0gITEpLFxuICAgICAgICAgICAgKHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICAgICAgICBldmVudCAmJlxuICAgICAgICAgICAgKGV2ZW50LnN0b3BQcm9wYWdhdGlvblxuICAgICAgICAgICAgICA/IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgIDogXCJ1bmtub3duXCIgIT09IHR5cGVvZiBldmVudC5jYW5jZWxCdWJibGUgJiZcbiAgICAgICAgICAgICAgICAoZXZlbnQuY2FuY2VsQnViYmxlID0gITApLFxuICAgICAgICAgICAgKHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSkpO1xuICAgICAgICB9LFxuICAgICAgICBwZXJzaXN0OiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgaXNQZXJzaXN0ZW50OiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gU3ludGhldGljQmFzZUV2ZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtleUFyZykge1xuICAgICAgdmFyIG5hdGl2ZUV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICAgIHJldHVybiBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlXG4gICAgICAgID8gbmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZShrZXlBcmcpXG4gICAgICAgIDogKGtleUFyZyA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ10pXG4gICAgICAgICAgPyAhIW5hdGl2ZUV2ZW50W2tleUFyZ11cbiAgICAgICAgICA6ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUoKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXJTdGF0ZUdldHRlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJrZXl1cFwiOlxuICAgICAgICAgIHJldHVybiAtMSAhPT0gRU5EX0tFWUNPREVTLmluZGV4T2YobmF0aXZlRXZlbnQua2V5Q29kZSk7XG4gICAgICAgIGNhc2UgXCJrZXlkb3duXCI6XG4gICAgICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG4gICAgICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgICBjYXNlIFwibW91c2Vkb3duXCI6XG4gICAgICAgIGNhc2UgXCJmb2N1c291dFwiOlxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgICAgIG5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQuZGV0YWlsO1xuICAgICAgcmV0dXJuIFwib2JqZWN0XCIgPT09IHR5cGVvZiBuYXRpdmVFdmVudCAmJiBcImRhdGFcIiBpbiBuYXRpdmVFdmVudFxuICAgICAgICA/IG5hdGl2ZUV2ZW50LmRhdGFcbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbmVuZFwiOlxuICAgICAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgY2FzZSBcImtleXByZXNzXCI6XG4gICAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LndoaWNoICE9PSBTUEFDRUJBUl9DT0RFKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBoYXNTcGFjZUtleXByZXNzID0gITA7XG4gICAgICAgICAgcmV0dXJuIFNQQUNFQkFSX0NIQVI7XG4gICAgICAgIGNhc2UgXCJ0ZXh0SW5wdXRcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGRvbUV2ZW50TmFtZSA9IG5hdGl2ZUV2ZW50LmRhdGEpLFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lID09PSBTUEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3NcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogZG9tRXZlbnROYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgIGlmIChpc0NvbXBvc2luZylcbiAgICAgICAgcmV0dXJuIFwiY29tcG9zaXRpb25lbmRcIiA9PT0gZG9tRXZlbnROYW1lIHx8XG4gICAgICAgICAgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ICYmXG4gICAgICAgICAgICBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpXG4gICAgICAgICAgPyAoKGRvbUV2ZW50TmFtZSA9IGdldERhdGEoKSksXG4gICAgICAgICAgICAoZmFsbGJhY2tUZXh0ID0gc3RhcnRUZXh0ID0gcm9vdCA9IG51bGwpLFxuICAgICAgICAgICAgKGlzQ29tcG9zaW5nID0gITEpLFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJwYXN0ZVwiOlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIFwia2V5cHJlc3NcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudC5jdHJsS2V5IHx8XG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmFsdEtleSB8fFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudC5tZXRhS2V5XG4gICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAobmF0aXZlRXZlbnQuY2hhciAmJiAxIDwgbmF0aXZlRXZlbnQuY2hhci5sZW5ndGgpXG4gICAgICAgICAgICAgIHJldHVybiBuYXRpdmVFdmVudC5jaGFyO1xuICAgICAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LndoaWNoKVxuICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudC53aGljaCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpcbiAgICAgICAgICByZXR1cm4gdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgXCJrb1wiICE9PSBuYXRpdmVFdmVudC5sb2NhbGVcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBuYXRpdmVFdmVudC5kYXRhO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc1RleHRJbnB1dEVsZW1lbnQoZWxlbSkge1xuICAgICAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBcImlucHV0XCIgPT09IG5vZGVOYW1lXG4gICAgICAgID8gISFzdXBwb3J0ZWRJbnB1dFR5cGVzW2VsZW0udHlwZV1cbiAgICAgICAgOiBcInRleHRhcmVhXCIgPT09IG5vZGVOYW1lXG4gICAgICAgICAgPyAhMFxuICAgICAgICAgIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQoZXZlbnROYW1lU3VmZml4KSB7XG4gICAgICBpZiAoIWNhblVzZURPTSkgcmV0dXJuICExO1xuICAgICAgZXZlbnROYW1lU3VmZml4ID0gXCJvblwiICsgZXZlbnROYW1lU3VmZml4O1xuICAgICAgdmFyIGlzU3VwcG9ydGVkID0gZXZlbnROYW1lU3VmZml4IGluIGRvY3VtZW50O1xuICAgICAgaXNTdXBwb3J0ZWQgfHxcbiAgICAgICAgKChpc1N1cHBvcnRlZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLFxuICAgICAgICBpc1N1cHBvcnRlZC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lU3VmZml4LCBcInJldHVybjtcIiksXG4gICAgICAgIChpc1N1cHBvcnRlZCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGlzU3VwcG9ydGVkW2V2ZW50TmFtZVN1ZmZpeF0pKTtcbiAgICAgIHJldHVybiBpc1N1cHBvcnRlZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KFxuICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgIGluc3QsXG4gICAgICBuYXRpdmVFdmVudCxcbiAgICAgIHRhcmdldFxuICAgICkge1xuICAgICAgcmVzdG9yZVRhcmdldFxuICAgICAgICA/IHJlc3RvcmVRdWV1ZVxuICAgICAgICAgID8gcmVzdG9yZVF1ZXVlLnB1c2godGFyZ2V0KVxuICAgICAgICAgIDogKHJlc3RvcmVRdWV1ZSA9IFt0YXJnZXRdKVxuICAgICAgICA6IChyZXN0b3JlVGFyZ2V0ID0gdGFyZ2V0KTtcbiAgICAgIGluc3QgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoaW5zdCwgXCJvbkNoYW5nZVwiKTtcbiAgICAgIDAgPCBpbnN0Lmxlbmd0aCAmJlxuICAgICAgICAoKG5hdGl2ZUV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KFxuICAgICAgICAgIFwib25DaGFuZ2VcIixcbiAgICAgICAgICBcImNoYW5nZVwiLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgICkpLFxuICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goeyBldmVudDogbmF0aXZlRXZlbnQsIGxpc3RlbmVyczogaW5zdCB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJ1bkV2ZW50SW5CYXRjaChkaXNwYXRjaFF1ZXVlKSB7XG4gICAgICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpIHtcbiAgICAgIHZhciB0YXJnZXROb2RlID0gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KTtcbiAgICAgIGlmICh1cGRhdGVWYWx1ZUlmQ2hhbmdlZCh0YXJnZXROb2RlKSkgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgICAgIGlmIChcImNoYW5nZVwiID09PSBkb21FdmVudE5hbWUpIHJldHVybiB0YXJnZXRJbnN0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQkMSAmJlxuICAgICAgICAoYWN0aXZlRWxlbWVudCQxLmRldGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSksXG4gICAgICAgIChhY3RpdmVFbGVtZW50SW5zdCQxID0gYWN0aXZlRWxlbWVudCQxID0gbnVsbCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVQcm9wZXJ0eUNoYW5nZShuYXRpdmVFdmVudCkge1xuICAgICAgaWYgKFxuICAgICAgICBcInZhbHVlXCIgPT09IG5hdGl2ZUV2ZW50LnByb3BlcnR5TmFtZSAmJlxuICAgICAgICBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QkMSlcbiAgICAgICkge1xuICAgICAgICB2YXIgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICAgICAgICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoXG4gICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICBhY3RpdmVFbGVtZW50SW5zdCQxLFxuICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KVxuICAgICAgICApO1xuICAgICAgICBiYXRjaGVkVXBkYXRlcyQxKHJ1bkV2ZW50SW5CYXRjaCwgZGlzcGF0Y2hRdWV1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbChcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIHRhcmdldCxcbiAgICAgIHRhcmdldEluc3RcbiAgICApIHtcbiAgICAgIFwiZm9jdXNpblwiID09PSBkb21FdmVudE5hbWVcbiAgICAgICAgPyAoc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSxcbiAgICAgICAgICAoYWN0aXZlRWxlbWVudCQxID0gdGFyZ2V0KSxcbiAgICAgICAgICAoYWN0aXZlRWxlbWVudEluc3QkMSA9IHRhcmdldEluc3QpLFxuICAgICAgICAgIGFjdGl2ZUVsZW1lbnQkMS5hdHRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIiwgaGFuZGxlUHJvcGVydHlDaGFuZ2UpKVxuICAgICAgICA6IFwiZm9jdXNvdXRcIiA9PT0gZG9tRXZlbnROYW1lICYmIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGwoZG9tRXZlbnROYW1lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwic2VsZWN0aW9uY2hhbmdlXCIgPT09IGRvbUV2ZW50TmFtZSB8fFxuICAgICAgICBcImtleXVwXCIgPT09IGRvbUV2ZW50TmFtZSB8fFxuICAgICAgICBcImtleWRvd25cIiA9PT0gZG9tRXZlbnROYW1lXG4gICAgICApXG4gICAgICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QkMSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICAgICAgaWYgKFwiY2xpY2tcIiA9PT0gZG9tRXZlbnROYW1lKSByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICAgICAgaWYgKFwiaW5wdXRcIiA9PT0gZG9tRXZlbnROYW1lIHx8IFwiY2hhbmdlXCIgPT09IGRvbUV2ZW50TmFtZSlcbiAgICAgICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgICAgcmV0dXJuICh4ID09PSB5ICYmICgwICE9PSB4IHx8IDEgLyB4ID09PSAxIC8geSkpIHx8ICh4ICE9PSB4ICYmIHkgIT09IHkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xuICAgICAgaWYgKG9iamVjdElzKG9iakEsIG9iakIpKSByZXR1cm4gITA7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiBvYmpBIHx8XG4gICAgICAgIG51bGwgPT09IG9iakEgfHxcbiAgICAgICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9iakIgfHxcbiAgICAgICAgbnVsbCA9PT0gb2JqQlxuICAgICAgKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKSxcbiAgICAgICAga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcbiAgICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkgcmV0dXJuICExO1xuICAgICAgZm9yIChrZXlzQiA9IDA7IGtleXNCIDwga2V5c0EubGVuZ3RoOyBrZXlzQisrKSB7XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5c0Fba2V5c0JdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWhhc093blByb3BlcnR5LmNhbGwob2JqQiwgY3VycmVudEtleSkgfHxcbiAgICAgICAgICAhb2JqZWN0SXMob2JqQVtjdXJyZW50S2V5XSwgb2JqQltjdXJyZW50S2V5XSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TGVhZk5vZGUobm9kZSkge1xuICAgICAgZm9yICg7IG5vZGUgJiYgbm9kZS5maXJzdENoaWxkOyApIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgICAgIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gICAgICByb290ID0gMDtcbiAgICAgIGZvciAodmFyIG5vZGVFbmQ7IG5vZGU7ICkge1xuICAgICAgICBpZiAoMyA9PT0gbm9kZS5ub2RlVHlwZSkge1xuICAgICAgICAgIG5vZGVFbmQgPSByb290ICsgbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgaWYgKHJvb3QgPD0gb2Zmc2V0ICYmIG5vZGVFbmQgPj0gb2Zmc2V0KVxuICAgICAgICAgICAgcmV0dXJuIHsgbm9kZTogbm9kZSwgb2Zmc2V0OiBvZmZzZXQgLSByb290IH07XG4gICAgICAgICAgcm9vdCA9IG5vZGVFbmQ7XG4gICAgICAgIH1cbiAgICAgICAgYToge1xuICAgICAgICAgIGZvciAoOyBub2RlOyApIHtcbiAgICAgICAgICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZSA9IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gZ2V0TGVhZk5vZGUobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICAgICAgcmV0dXJuIG91dGVyTm9kZSAmJiBpbm5lck5vZGVcbiAgICAgICAgPyBvdXRlck5vZGUgPT09IGlubmVyTm9kZVxuICAgICAgICAgID8gITBcbiAgICAgICAgICA6IG91dGVyTm9kZSAmJiAzID09PSBvdXRlck5vZGUubm9kZVR5cGVcbiAgICAgICAgICAgID8gITFcbiAgICAgICAgICAgIDogaW5uZXJOb2RlICYmIDMgPT09IGlubmVyTm9kZS5ub2RlVHlwZVxuICAgICAgICAgICAgICA/IGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICA6IFwiY29udGFpbnNcIiBpbiBvdXRlck5vZGVcbiAgICAgICAgICAgICAgICA/IG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpXG4gICAgICAgICAgICAgICAgOiBvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb25cbiAgICAgICAgICAgICAgICAgID8gISEob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGlubmVyTm9kZSkgJiAxNilcbiAgICAgICAgICAgICAgICAgIDogITFcbiAgICAgICAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudERlZXAoY29udGFpbmVySW5mbykge1xuICAgICAgY29udGFpbmVySW5mbyA9XG4gICAgICAgIG51bGwgIT0gY29udGFpbmVySW5mbyAmJlxuICAgICAgICBudWxsICE9IGNvbnRhaW5lckluZm8ub3duZXJEb2N1bWVudCAmJlxuICAgICAgICBudWxsICE9IGNvbnRhaW5lckluZm8ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld1xuICAgICAgICAgID8gY29udGFpbmVySW5mby5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3XG4gICAgICAgICAgOiB3aW5kb3c7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoY29udGFpbmVySW5mby5kb2N1bWVudCk7XG4gICAgICAgIGVsZW1lbnQgaW5zdGFuY2VvZiBjb250YWluZXJJbmZvLkhUTUxJRnJhbWVFbGVtZW50O1xuXG4gICAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBlbGVtZW50LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCkgY29udGFpbmVySW5mbyA9IGVsZW1lbnQuY29udGVudFdpbmRvdztcbiAgICAgICAgZWxzZSBicmVhaztcbiAgICAgICAgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoY29udGFpbmVySW5mby5kb2N1bWVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGVsZW0pIHtcbiAgICAgIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBub2RlTmFtZSAmJlxuICAgICAgICAoKFwiaW5wdXRcIiA9PT0gbm9kZU5hbWUgJiZcbiAgICAgICAgICAoXCJ0ZXh0XCIgPT09IGVsZW0udHlwZSB8fFxuICAgICAgICAgICAgXCJzZWFyY2hcIiA9PT0gZWxlbS50eXBlIHx8XG4gICAgICAgICAgICBcInRlbFwiID09PSBlbGVtLnR5cGUgfHxcbiAgICAgICAgICAgIFwidXJsXCIgPT09IGVsZW0udHlwZSB8fFxuICAgICAgICAgICAgXCJwYXNzd29yZFwiID09PSBlbGVtLnR5cGUpKSB8fFxuICAgICAgICAgIFwidGV4dGFyZWFcIiA9PT0gbm9kZU5hbWUgfHxcbiAgICAgICAgICBcInRydWVcIiA9PT0gZWxlbS5jb250ZW50RWRpdGFibGUpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RTZWxlY3RFdmVudChcbiAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICBuYXRpdmVFdmVudCxcbiAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgKSB7XG4gICAgICB2YXIgZG9jID1cbiAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXQud2luZG93ID09PSBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgID8gbmF0aXZlRXZlbnRUYXJnZXQuZG9jdW1lbnRcbiAgICAgICAgICA6IDkgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0Lm5vZGVUeXBlXG4gICAgICAgICAgICA/IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICA6IG5hdGl2ZUV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG4gICAgICBtb3VzZURvd24gfHxcbiAgICAgICAgbnVsbCA9PSBhY3RpdmVFbGVtZW50IHx8XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQgIT09IGdldEFjdGl2ZUVsZW1lbnQoZG9jKSB8fFxuICAgICAgICAoKGRvYyA9IGFjdGl2ZUVsZW1lbnQpLFxuICAgICAgICBcInNlbGVjdGlvblN0YXJ0XCIgaW4gZG9jICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhkb2MpXG4gICAgICAgICAgPyAoZG9jID0geyBzdGFydDogZG9jLnNlbGVjdGlvblN0YXJ0LCBlbmQ6IGRvYy5zZWxlY3Rpb25FbmQgfSlcbiAgICAgICAgICA6ICgoZG9jID0gKFxuICAgICAgICAgICAgICAoZG9jLm93bmVyRG9jdW1lbnQgJiYgZG9jLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIHx8XG4gICAgICAgICAgICAgIHdpbmRvd1xuICAgICAgICAgICAgKS5nZXRTZWxlY3Rpb24oKSksXG4gICAgICAgICAgICAoZG9jID0ge1xuICAgICAgICAgICAgICBhbmNob3JOb2RlOiBkb2MuYW5jaG9yTm9kZSxcbiAgICAgICAgICAgICAgYW5jaG9yT2Zmc2V0OiBkb2MuYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgICAgICBmb2N1c05vZGU6IGRvYy5mb2N1c05vZGUsXG4gICAgICAgICAgICAgIGZvY3VzT2Zmc2V0OiBkb2MuZm9jdXNPZmZzZXRcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgKGxhc3RTZWxlY3Rpb24gJiYgc2hhbGxvd0VxdWFsKGxhc3RTZWxlY3Rpb24sIGRvYykpIHx8XG4gICAgICAgICAgKChsYXN0U2VsZWN0aW9uID0gZG9jKSxcbiAgICAgICAgICAoZG9jID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKGFjdGl2ZUVsZW1lbnRJbnN0LCBcIm9uU2VsZWN0XCIpKSxcbiAgICAgICAgICAwIDwgZG9jLmxlbmd0aCAmJlxuICAgICAgICAgICAgKChuYXRpdmVFdmVudCA9IG5ldyBTeW50aGV0aWNFdmVudChcbiAgICAgICAgICAgICAgXCJvblNlbGVjdFwiLFxuICAgICAgICAgICAgICBcInNlbGVjdFwiLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHsgZXZlbnQ6IG5hdGl2ZUV2ZW50LCBsaXN0ZW5lcnM6IGRvYyB9KSxcbiAgICAgICAgICAgIChuYXRpdmVFdmVudC50YXJnZXQgPSBhY3RpdmVFbGVtZW50KSkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFrZVByZWZpeE1hcChzdHlsZVByb3AsIGV2ZW50TmFtZSkge1xuICAgICAgdmFyIHByZWZpeGVzID0ge307XG4gICAgICBwcmVmaXhlc1tzdHlsZVByb3AudG9Mb3dlckNhc2UoKV0gPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHByZWZpeGVzW1wiV2Via2l0XCIgKyBzdHlsZVByb3BdID0gXCJ3ZWJraXRcIiArIGV2ZW50TmFtZTtcbiAgICAgIHByZWZpeGVzW1wiTW96XCIgKyBzdHlsZVByb3BdID0gXCJtb3pcIiArIGV2ZW50TmFtZTtcbiAgICAgIHJldHVybiBwcmVmaXhlcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7XG4gICAgICBpZiAocHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0pIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXTtcbiAgICAgIGlmICghdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXSkgcmV0dXJuIGV2ZW50TmFtZTtcbiAgICAgIHZhciBwcmVmaXhNYXAgPSB2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdLFxuICAgICAgICBzdHlsZVByb3A7XG4gICAgICBmb3IgKHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApXG4gICAgICAgIGlmIChwcmVmaXhNYXAuaGFzT3duUHJvcGVydHkoc3R5bGVQcm9wKSAmJiBzdHlsZVByb3AgaW4gc3R5bGUpXG4gICAgICAgICAgcmV0dXJuIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSA9IHByZWZpeE1hcFtzdHlsZVByb3BdKTtcbiAgICAgIHJldHVybiBldmVudE5hbWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlRXZlbnQoZG9tRXZlbnROYW1lLCByZWFjdE5hbWUpIHtcbiAgICAgIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLnNldChkb21FdmVudE5hbWUsIHJlYWN0TmFtZSk7XG4gICAgICByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVhY3ROYW1lLCBbZG9tRXZlbnROYW1lXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHZhbHVlLCBzb3VyY2UpIHtcbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdmFsdWUgJiYgbnVsbCAhPT0gdmFsdWUpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gQ2FwdHVyZWRTdGFja3MuZ2V0KHZhbHVlKTtcbiAgICAgICAgaWYgKHZvaWQgMCAhPT0gZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcbiAgICAgICAgc291cmNlID0ge1xuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBzdGFjazogZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHNvdXJjZSlcbiAgICAgICAgfTtcbiAgICAgICAgQ2FwdHVyZWRTdGFja3Muc2V0KHZhbHVlLCBzb3VyY2UpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgc3RhY2s6IGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzb3VyY2UpXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGVuZEluZGV4ID0gY29uY3VycmVudFF1ZXVlc0luZGV4LFxuICAgICAgICAgIGkgPSAoY29uY3VycmVudGx5VXBkYXRlZExhbmVzID0gY29uY3VycmVudFF1ZXVlc0luZGV4ID0gMCk7XG4gICAgICAgIGkgPCBlbmRJbmRleDtcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBmaWJlciA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG4gICAgICAgIHZhciBxdWV1ZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG4gICAgICAgIHZhciB1cGRhdGUgPSBjb25jdXJyZW50UXVldWVzW2ldO1xuICAgICAgICBjb25jdXJyZW50UXVldWVzW2krK10gPSBudWxsO1xuICAgICAgICB2YXIgbGFuZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG4gICAgICAgIGlmIChudWxsICE9PSBxdWV1ZSAmJiBudWxsICE9PSB1cGRhdGUpIHtcbiAgICAgICAgICB2YXIgcGVuZGluZyA9IHF1ZXVlLnBlbmRpbmc7XG4gICAgICAgICAgbnVsbCA9PT0gcGVuZGluZ1xuICAgICAgICAgICAgPyAodXBkYXRlLm5leHQgPSB1cGRhdGUpXG4gICAgICAgICAgICA6ICgodXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQpLCAocGVuZGluZy5uZXh0ID0gdXBkYXRlKSk7XG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IHVwZGF0ZTtcbiAgICAgICAgfVxuICAgICAgICAwICE9PSBsYW5lICYmIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCB1cGRhdGUsIGxhbmUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpIHtcbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gZmliZXI7XG4gICAgICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IHF1ZXVlO1xuICAgICAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSB1cGRhdGU7XG4gICAgICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IGxhbmU7XG4gICAgICBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMgfD0gbGFuZTtcbiAgICAgIGZpYmVyLmxhbmVzIHw9IGxhbmU7XG4gICAgICBmaWJlciA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgIT09IGZpYmVyICYmIChmaWJlci5sYW5lcyB8PSBsYW5lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKSB7XG4gICAgICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuICAgICAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIGxhbmUpIHtcbiAgICAgIGVucXVldWVVcGRhdGUkMShmaWJlciwgbnVsbCwgbnVsbCwgbGFuZSk7XG4gICAgICByZXR1cm4gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHNvdXJjZUZpYmVyLCB1cGRhdGUsIGxhbmUpIHtcbiAgICAgIHNvdXJjZUZpYmVyLmxhbmVzIHw9IGxhbmU7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuICAgICAgbnVsbCAhPT0gYWx0ZXJuYXRlICYmIChhbHRlcm5hdGUubGFuZXMgfD0gbGFuZSk7XG4gICAgICBmb3IgKHZhciBpc0hpZGRlbiA9ICExLCBwYXJlbnQgPSBzb3VyY2VGaWJlci5yZXR1cm47IG51bGwgIT09IHBhcmVudDsgKVxuICAgICAgICAocGFyZW50LmNoaWxkTGFuZXMgfD0gbGFuZSksXG4gICAgICAgICAgKGFsdGVybmF0ZSA9IHBhcmVudC5hbHRlcm5hdGUpLFxuICAgICAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiAoYWx0ZXJuYXRlLmNoaWxkTGFuZXMgfD0gbGFuZSksXG4gICAgICAgICAgMjIgPT09IHBhcmVudC50YWcgJiZcbiAgICAgICAgICAgICgoc291cmNlRmliZXIgPSBwYXJlbnQuc3RhdGVOb2RlKSxcbiAgICAgICAgICAgIG51bGwgPT09IHNvdXJjZUZpYmVyIHx8XG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyLl92aXNpYmlsaXR5ICYgT2Zmc2NyZWVuVmlzaWJsZSB8fFxuICAgICAgICAgICAgICAoaXNIaWRkZW4gPSAhMCkpLFxuICAgICAgICAgIChzb3VyY2VGaWJlciA9IHBhcmVudCksXG4gICAgICAgICAgKHBhcmVudCA9IHBhcmVudC5yZXR1cm4pO1xuICAgICAgcmV0dXJuIDMgPT09IHNvdXJjZUZpYmVyLnRhZ1xuICAgICAgICA/ICgocGFyZW50ID0gc291cmNlRmliZXIuc3RhdGVOb2RlKSxcbiAgICAgICAgICBpc0hpZGRlbiAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gdXBkYXRlICYmXG4gICAgICAgICAgICAoKGlzSGlkZGVuID0gMzEgLSBjbHozMihsYW5lKSksXG4gICAgICAgICAgICAoc291cmNlRmliZXIgPSBwYXJlbnQuaGlkZGVuVXBkYXRlcyksXG4gICAgICAgICAgICAoYWx0ZXJuYXRlID0gc291cmNlRmliZXJbaXNIaWRkZW5dKSxcbiAgICAgICAgICAgIG51bGwgPT09IGFsdGVybmF0ZVxuICAgICAgICAgICAgICA/IChzb3VyY2VGaWJlcltpc0hpZGRlbl0gPSBbdXBkYXRlXSlcbiAgICAgICAgICAgICAgOiBhbHRlcm5hdGUucHVzaCh1cGRhdGUpLFxuICAgICAgICAgICAgKHVwZGF0ZS5sYW5lID0gbGFuZSB8IDUzNjg3MDkxMikpLFxuICAgICAgICAgIHBhcmVudClcbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKHNvdXJjZUZpYmVyKSB7XG4gICAgICBpZiAobmVzdGVkVXBkYXRlQ291bnQgPiBORVNURURfVVBEQVRFX0xJTUlUKVxuICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgKChuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSBuZXN0ZWRVcGRhdGVDb3VudCA9IDApLFxuICAgICAgICAgIChyb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbCksXG4gICAgICAgICAgRXJyb3IoXG4gICAgICAgICAgICBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCByZXBlYXRlZGx5IGNhbGxzIHNldFN0YXRlIGluc2lkZSBjb21wb25lbnRXaWxsVXBkYXRlIG9yIGNvbXBvbmVudERpZFVwZGF0ZS4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgbmVzdGVkIHVwZGF0ZXMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cIlxuICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPiBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQgJiZcbiAgICAgICAgKChuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwKSxcbiAgICAgICAgKHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMgPSBudWxsKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCBjYWxscyBzZXRTdGF0ZSBpbnNpZGUgdXNlRWZmZWN0LCBidXQgdXNlRWZmZWN0IGVpdGhlciBkb2Vzbid0IGhhdmUgYSBkZXBlbmRlbmN5IGFycmF5LCBvciBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VzIG9uIGV2ZXJ5IHJlbmRlci5cIlxuICAgICAgICApKTtcbiAgICAgIG51bGwgPT09IHNvdXJjZUZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAwICE9PSAoc291cmNlRmliZXIuZmxhZ3MgJiA0MDk4KSAmJlxuICAgICAgICB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKHNvdXJjZUZpYmVyKTtcbiAgICAgIGZvciAodmFyIG5vZGUgPSBzb3VyY2VGaWJlciwgcGFyZW50ID0gbm9kZS5yZXR1cm47IG51bGwgIT09IHBhcmVudDsgKVxuICAgICAgICBudWxsID09PSBub2RlLmFsdGVybmF0ZSAmJlxuICAgICAgICAgIDAgIT09IChub2RlLmZsYWdzICYgNDA5OCkgJiZcbiAgICAgICAgICB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKHNvdXJjZUZpYmVyKSxcbiAgICAgICAgICAobm9kZSA9IHBhcmVudCksXG4gICAgICAgICAgKHBhcmVudCA9IG5vZGUucmV0dXJuKTtcbiAgICAgIHJldHVybiAzID09PSBub2RlLnRhZyA/IG5vZGUuc3RhdGVOb2RlIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09PSByZXNvbHZlRmFtaWx5KSByZXR1cm4gdHlwZTtcbiAgICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gZmFtaWx5ID8gdHlwZSA6IGZhbWlseS5jdXJyZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gcmVzb2x2ZUZhbWlseSkgcmV0dXJuIHR5cGU7XG4gICAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcbiAgICAgIHJldHVybiB2b2lkIDAgPT09IGZhbWlseVxuICAgICAgICA/IG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICB2b2lkIDAgIT09IHR5cGUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlLnJlbmRlciAmJlxuICAgICAgICAgICgoZmFtaWx5ID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUucmVuZGVyKSksXG4gICAgICAgICAgdHlwZS5yZW5kZXIgIT09IGZhbWlseSlcbiAgICAgICAgICA/ICgoZmFtaWx5ID0geyAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSwgcmVuZGVyOiBmYW1pbHkgfSksXG4gICAgICAgICAgICB2b2lkIDAgIT09IHR5cGUuZGlzcGxheU5hbWUgJiZcbiAgICAgICAgICAgICAgKGZhbWlseS5kaXNwbGF5TmFtZSA9IHR5cGUuZGlzcGxheU5hbWUpLFxuICAgICAgICAgICAgZmFtaWx5KVxuICAgICAgICAgIDogdHlwZVxuICAgICAgICA6IGZhbWlseS5jdXJyZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoZmliZXIsIGVsZW1lbnQpIHtcbiAgICAgIGlmIChudWxsID09PSByZXNvbHZlRmFtaWx5KSByZXR1cm4gITE7XG4gICAgICB2YXIgcHJldlR5cGUgPSBmaWJlci5lbGVtZW50VHlwZTtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnR5cGU7XG4gICAgICB2YXIgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMSxcbiAgICAgICAgJCR0eXBlb2ZOZXh0VHlwZSA9XG4gICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGVsZW1lbnQgJiYgbnVsbCAhPT0gZWxlbWVudFxuICAgICAgICAgICAgPyBlbGVtZW50LiQkdHlwZW9mXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZWxlbWVudCAmJiAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBlbGVtZW50XG4gICAgICAgICAgICA/IChuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICEwKVxuICAgICAgICAgICAgOiAkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICAgICAgKG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gITApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEVcbiAgICAgICAgICAgID8gKG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gITApXG4gICAgICAgICAgICA6ICQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTUVNT19UWVBFXG4gICAgICAgICAgICA/IChuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICEwKVxuICAgICAgICAgICAgOiAkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICAgICAgKG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gITApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZWVkc0NvbXBhcmVGYW1pbGllcyAmJlxuICAgICAgICAoKGZpYmVyID0gcmVzb2x2ZUZhbWlseShwcmV2VHlwZSkpLFxuICAgICAgICB2b2lkIDAgIT09IGZpYmVyICYmIGZpYmVyID09PSByZXNvbHZlRmFtaWx5KGVsZW1lbnQpKVxuICAgICAgICA/ICEwXG4gICAgICAgIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKSB7XG4gICAgICBudWxsICE9PSByZXNvbHZlRmFtaWx5ICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtTZXQgJiZcbiAgICAgICAgKG51bGwgPT09IGZhaWxlZEJvdW5kYXJpZXMgJiYgKGZhaWxlZEJvdW5kYXJpZXMgPSBuZXcgV2Vha1NldCgpKSxcbiAgICAgICAgZmFpbGVkQm91bmRhcmllcy5hZGQoZmliZXIpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShcbiAgICAgIGZpYmVyLFxuICAgICAgdXBkYXRlZEZhbWlsaWVzLFxuICAgICAgc3RhbGVGYW1pbGllc1xuICAgICkge1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZSxcbiAgICAgICAgY2hpbGQgPSBmaWJlci5jaGlsZCxcbiAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGUsXG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgfVxuICAgICAgaWYgKG51bGwgPT09IHJlc29sdmVGYW1pbHkpXG4gICAgICAgIHRocm93IEVycm9yKFwiRXhwZWN0ZWQgcmVzb2x2ZUZhbWlseSB0byBiZSBzZXQgZHVyaW5nIGhvdCByZWxvYWQuXCIpO1xuICAgICAgdmFyIG5lZWRzUmVuZGVyID0gITE7XG4gICAgICB0eXBlID0gITE7XG4gICAgICBudWxsICE9PSBjYW5kaWRhdGVUeXBlICYmXG4gICAgICAgICgoY2FuZGlkYXRlVHlwZSA9IHJlc29sdmVGYW1pbHkoY2FuZGlkYXRlVHlwZSkpLFxuICAgICAgICB2b2lkIDAgIT09IGNhbmRpZGF0ZVR5cGUgJiZcbiAgICAgICAgICAoc3RhbGVGYW1pbGllcy5oYXMoY2FuZGlkYXRlVHlwZSlcbiAgICAgICAgICAgID8gKHR5cGUgPSAhMClcbiAgICAgICAgICAgIDogdXBkYXRlZEZhbWlsaWVzLmhhcyhjYW5kaWRhdGVUeXBlKSAmJlxuICAgICAgICAgICAgICAoMSA9PT0gdGFnID8gKHR5cGUgPSAhMCkgOiAobmVlZHNSZW5kZXIgPSAhMCkpKSk7XG4gICAgICBudWxsICE9PSBmYWlsZWRCb3VuZGFyaWVzICYmXG4gICAgICAgIChmYWlsZWRCb3VuZGFyaWVzLmhhcyhmaWJlcikgfHxcbiAgICAgICAgICAobnVsbCAhPT0gYWx0ZXJuYXRlICYmIGZhaWxlZEJvdW5kYXJpZXMuaGFzKGFsdGVybmF0ZSkpKSAmJlxuICAgICAgICAodHlwZSA9ICEwKTtcbiAgICAgIHR5cGUgJiYgKGZpYmVyLl9kZWJ1Z05lZWRzUmVtb3VudCA9ICEwKTtcbiAgICAgIGlmICh0eXBlIHx8IG5lZWRzUmVuZGVyKVxuICAgICAgICAoYWx0ZXJuYXRlID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKSksXG4gICAgICAgICAgbnVsbCAhPT0gYWx0ZXJuYXRlICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihhbHRlcm5hdGUsIGZpYmVyLCAyKTtcbiAgICAgIG51bGwgPT09IGNoaWxkIHx8XG4gICAgICAgIHR5cGUgfHxcbiAgICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShcbiAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICAgICAgc3RhbGVGYW1pbGllc1xuICAgICAgICApO1xuICAgICAgbnVsbCAhPT0gc2libGluZyAmJlxuICAgICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgICAgIHNpYmxpbmcsXG4gICAgICAgICAgdXBkYXRlZEZhbWlsaWVzLFxuICAgICAgICAgIHN0YWxlRmFtaWxpZXNcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgICB0aGlzLnNpYmxpbmcgPVxuICAgICAgICB0aGlzLmNoaWxkID1cbiAgICAgICAgdGhpcy5yZXR1cm4gPVxuICAgICAgICB0aGlzLnN0YXRlTm9kZSA9XG4gICAgICAgIHRoaXMudHlwZSA9XG4gICAgICAgIHRoaXMuZWxlbWVudFR5cGUgPVxuICAgICAgICAgIG51bGw7XG4gICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgIHRoaXMucmVmQ2xlYW51cCA9IHRoaXMucmVmID0gbnVsbDtcbiAgICAgIHRoaXMucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzO1xuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPVxuICAgICAgICB0aGlzLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICB0aGlzLnVwZGF0ZVF1ZXVlID1cbiAgICAgICAgdGhpcy5tZW1vaXplZFByb3BzID1cbiAgICAgICAgICBudWxsO1xuICAgICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICAgIHRoaXMuc3VidHJlZUZsYWdzID0gdGhpcy5mbGFncyA9IDA7XG4gICAgICB0aGlzLmRlbGV0aW9ucyA9IG51bGw7XG4gICAgICB0aGlzLmNoaWxkTGFuZXMgPSB0aGlzLmxhbmVzID0gMDtcbiAgICAgIHRoaXMuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgIHRoaXMuYWN0dWFsRHVyYXRpb24gPSAtMDtcbiAgICAgIHRoaXMuYWN0dWFsU3RhcnRUaW1lID0gLTEuMTtcbiAgICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IC0wO1xuICAgICAgdGhpcy5fZGVidWdUYXNrID1cbiAgICAgICAgdGhpcy5fZGVidWdTdGFjayA9XG4gICAgICAgIHRoaXMuX2RlYnVnT3duZXIgPVxuICAgICAgICB0aGlzLl9kZWJ1Z0luZm8gPVxuICAgICAgICAgIG51bGw7XG4gICAgICB0aGlzLl9kZWJ1Z05lZWRzUmVtb3VudCA9ICExO1xuICAgICAgdGhpcy5fZGVidWdIb29rVHlwZXMgPSBudWxsO1xuICAgICAgaGFzQmFkTWFwUG9seWZpbGwgfHxcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zIHx8XG4gICAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICAgICAgQ29tcG9uZW50ID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgICAgIHJldHVybiAhKCFDb21wb25lbnQgfHwgIUNvbXBvbmVudC5pc1JlYWN0Q29tcG9uZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgcGVuZGluZ1Byb3BzKSB7XG4gICAgICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50LmFsdGVybmF0ZTtcbiAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzXG4gICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZUZpYmVyKFxuICAgICAgICAgICAgY3VycmVudC50YWcsXG4gICAgICAgICAgICBwZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICBjdXJyZW50LmtleSxcbiAgICAgICAgICAgIGN1cnJlbnQubW9kZVxuICAgICAgICAgICkpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9IGN1cnJlbnQuZWxlbWVudFR5cGUpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudC5zdGF0ZU5vZGUpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXIpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdTdGFjayA9IGN1cnJlbnQuX2RlYnVnU3RhY2spLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdUYXNrID0gY3VycmVudC5fZGVidWdUYXNrKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gY3VycmVudC5fZGVidWdIb29rVHlwZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBjdXJyZW50KSxcbiAgICAgICAgICAoY3VycmVudC5hbHRlcm5hdGUgPSB3b3JrSW5Qcm9ncmVzcykpXG4gICAgICAgIDogKCh3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAwKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gMCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyA9IG51bGwpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5hY3R1YWxEdXJhdGlvbiA9IC0wKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuYWN0dWFsU3RhcnRUaW1lID0gLTEuMSkpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBjdXJyZW50LmZsYWdzICYgNjUwMTE3MTI7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gICAgICBwZW5kaW5nUHJvcHMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9XG4gICAgICAgIG51bGwgPT09IHBlbmRpbmdQcm9wc1xuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBsYW5lczogcGVuZGluZ1Byb3BzLmxhbmVzLFxuICAgICAgICAgICAgICBmaXJzdENvbnRleHQ6IHBlbmRpbmdQcm9wcy5maXJzdENvbnRleHQsXG4gICAgICAgICAgICAgIF9kZWJ1Z1RoZW5hYmxlU3RhdGU6IHBlbmRpbmdQcm9wcy5fZGVidWdUaGVuYWJsZVN0YXRlXG4gICAgICAgICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3Muc2libGluZyA9IGN1cnJlbnQuc2libGluZztcbiAgICAgIHdvcmtJblByb2dyZXNzLmluZGV4ID0gY3VycmVudC5pbmRleDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnJlZiA9IGN1cnJlbnQucmVmO1xuICAgICAgd29ya0luUHJvZ3Jlc3MucmVmQ2xlYW51cCA9IGN1cnJlbnQucmVmQ2xlYW51cDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSW5mbyA9IGN1cnJlbnQuX2RlYnVnSW5mbztcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCA9IGN1cnJlbnQuX2RlYnVnTmVlZHNSZW1vdW50O1xuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IDY1MDExNzE0O1xuICAgICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG4gICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gMCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGwpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG51bGwpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IG51bGwpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IDApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gMCkpXG4gICAgICAgIDogKCh3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gMCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyA9IG51bGwpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGUpLFxuICAgICAgICAgIChyZW5kZXJMYW5lcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID1cbiAgICAgICAgICAgIG51bGwgPT09IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGxhbmVzOiByZW5kZXJMYW5lcy5sYW5lcyxcbiAgICAgICAgICAgICAgICAgIGZpcnN0Q29udGV4dDogcmVuZGVyTGFuZXMuZmlyc3RDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgX2RlYnVnVGhlbmFibGVTdGF0ZTogcmVuZGVyTGFuZXMuX2RlYnVnVGhlbmFibGVTdGF0ZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbikpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICB0eXBlLFxuICAgICAga2V5LFxuICAgICAgcGVuZGluZ1Byb3BzLFxuICAgICAgb3duZXIsXG4gICAgICBtb2RlLFxuICAgICAgbGFuZXNcbiAgICApIHtcbiAgICAgIHZhciBmaWJlclRhZyA9IDAsXG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHR5cGU7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc2hvdWxkQ29uc3RydWN0KHR5cGUpICYmIChmaWJlclRhZyA9IDEpLFxuICAgICAgICAgIChyZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKSk7XG4gICAgICBlbHNlIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgKGZpYmVyVGFnID0gZ2V0SG9zdENvbnRleHQoKSksXG4gICAgICAgICAgKGZpYmVyVGFnID0gaXNIb3N0SG9pc3RhYmxlVHlwZSh0eXBlLCBwZW5kaW5nUHJvcHMsIGZpYmVyVGFnKVxuICAgICAgICAgICAgPyAyNlxuICAgICAgICAgICAgOiBcImh0bWxcIiA9PT0gdHlwZSB8fCBcImhlYWRcIiA9PT0gdHlwZSB8fCBcImJvZHlcIiA9PT0gdHlwZVxuICAgICAgICAgICAgICA/IDI3XG4gICAgICAgICAgICAgIDogNSk7XG4gICAgICBlbHNlXG4gICAgICAgIGE6IHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQUNUSVZJVFlfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChrZXkgPSBjcmVhdGVGaWJlcigzMSwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpKSxcbiAgICAgICAgICAgICAgKGtleS5lbGVtZW50VHlwZSA9IFJFQUNUX0FDVElWSVRZX1RZUEUpLFxuICAgICAgICAgICAgICAoa2V5LmxhbmVzID0gbGFuZXMpLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICBwZW5kaW5nUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgICAgZmliZXJUYWcgPSA4O1xuICAgICAgICAgICAgbW9kZSB8PSBTdHJpY3RMZWdhY3lNb2RlO1xuICAgICAgICAgICAgbW9kZSB8PSBTdHJpY3RFZmZlY3RzTW9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh0eXBlID0gcGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAgICAgKG93bmVyID0gbW9kZSksXG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiB0eXBlLmlkICYmXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICdQcm9maWxlciBtdXN0IHNwZWNpZnkgYW4gXCJpZFwiIG9mIHR5cGUgYHN0cmluZ2AgYXMgYSBwcm9wLiBSZWNlaXZlZCB0aGUgdHlwZSBgJXNgIGluc3RlYWQuJyxcbiAgICAgICAgICAgICAgICAgIHR5cGVvZiB0eXBlLmlkXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKGtleSA9IGNyZWF0ZUZpYmVyKDEyLCB0eXBlLCBrZXksIG93bmVyIHwgUHJvZmlsZU1vZGUpKSxcbiAgICAgICAgICAgICAgKGtleS5lbGVtZW50VHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEUpLFxuICAgICAgICAgICAgICAoa2V5LmxhbmVzID0gbGFuZXMpLFxuICAgICAgICAgICAgICAoa2V5LnN0YXRlTm9kZSA9IHsgZWZmZWN0RHVyYXRpb246IDAsIHBhc3NpdmVFZmZlY3REdXJhdGlvbjogMCB9KSxcbiAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChrZXkgPSBjcmVhdGVGaWJlcigxMywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpKSxcbiAgICAgICAgICAgICAgKGtleS5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEUpLFxuICAgICAgICAgICAgICAoa2V5LmxhbmVzID0gbGFuZXMpLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoa2V5ID0gY3JlYXRlRmliZXIoMTksIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSksXG4gICAgICAgICAgICAgIChrZXkuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUpLFxuICAgICAgICAgICAgICAoa2V5LmxhbmVzID0gbGFuZXMpLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJiBudWxsICE9PSB0eXBlKVxuICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgICAgICBmaWJlclRhZyA9IDEwO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlNVTUVSX1RZUEU6XG4gICAgICAgICAgICAgICAgICBmaWJlclRhZyA9IDk7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gMTE7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gMTQ7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgICAgZmliZXJUYWcgPSAxNjtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB2b2lkIDAgPT09IHR5cGUgfHxcbiAgICAgICAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgIDAgPT09IE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlICs9XG4gICAgICAgICAgICAgICAgXCIgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgICAgICAgICAgbnVsbCA9PT0gdHlwZVxuICAgICAgICAgICAgICA/IChwZW5kaW5nUHJvcHMgPSBcIm51bGxcIilcbiAgICAgICAgICAgICAgOiBpc0FycmF5SW1wbCh0eXBlKVxuICAgICAgICAgICAgICAgID8gKHBlbmRpbmdQcm9wcyA9IFwiYXJyYXlcIilcbiAgICAgICAgICAgICAgICA6IHZvaWQgMCAhPT0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICAgICAgICAgICAgID8gKChwZW5kaW5nUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgICAgIFwiPFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAoZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJVbmtub3duXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICBcIiAvPlwiKSxcbiAgICAgICAgICAgICAgICAgICAgKHJlc29sdmVkVHlwZSA9XG4gICAgICAgICAgICAgICAgICAgICAgXCIgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD9cIikpXG4gICAgICAgICAgICAgICAgICA6IChwZW5kaW5nUHJvcHMgPSB0eXBlb2YgdHlwZSk7XG4gICAgICAgICAgICAoZmliZXJUYWcgPSBvd25lciA/IGdldENvbXBvbmVudE5hbWVGcm9tT3duZXIob3duZXIpIDogbnVsbCkgJiZcbiAgICAgICAgICAgICAgKHJlc29sdmVkVHlwZSArPVxuICAgICAgICAgICAgICAgIFwiXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYFwiICsgZmliZXJUYWcgKyBcImAuXCIpO1xuICAgICAgICAgICAgZmliZXJUYWcgPSAyOTtcbiAgICAgICAgICAgIHBlbmRpbmdQcm9wcyA9IEVycm9yKFxuICAgICAgICAgICAgICBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkOiBleHBlY3RlZCBhIHN0cmluZyAoZm9yIGJ1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgY29tcG9uZW50cykgYnV0IGdvdDogXCIgK1xuICAgICAgICAgICAgICAgIChwZW5kaW5nUHJvcHMgKyBcIi5cIiArIHJlc29sdmVkVHlwZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICBrZXkgPSBjcmVhdGVGaWJlcihmaWJlclRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICAgICAga2V5LmVsZW1lbnRUeXBlID0gdHlwZTtcbiAgICAgIGtleS50eXBlID0gcmVzb2x2ZWRUeXBlO1xuICAgICAga2V5LmxhbmVzID0gbGFuZXM7XG4gICAgICBrZXkuX2RlYnVnT3duZXIgPSBvd25lcjtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgbW9kZSwgbGFuZXMpIHtcbiAgICAgIG1vZGUgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICAgIGVsZW1lbnQudHlwZSxcbiAgICAgICAgZWxlbWVudC5rZXksXG4gICAgICAgIGVsZW1lbnQucHJvcHMsXG4gICAgICAgIGVsZW1lbnQuX293bmVyLFxuICAgICAgICBtb2RlLFxuICAgICAgICBsYW5lc1xuICAgICAgKTtcbiAgICAgIG1vZGUuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIG1vZGUuX2RlYnVnU3RhY2sgPSBlbGVtZW50Ll9kZWJ1Z1N0YWNrO1xuICAgICAgbW9kZS5fZGVidWdUYXNrID0gZWxlbWVudC5fZGVidWdUYXNrO1xuICAgICAgcmV0dXJuIG1vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnRzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gICAgICBlbGVtZW50cyA9IGNyZWF0ZUZpYmVyKDcsIGVsZW1lbnRzLCBrZXksIG1vZGUpO1xuICAgICAgZWxlbWVudHMubGFuZXMgPSBsYW5lcztcbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVGV4dChjb250ZW50LCBtb2RlLCBsYW5lcykge1xuICAgICAgY29udGVudCA9IGNyZWF0ZUZpYmVyKDYsIGNvbnRlbnQsIG51bGwsIG1vZGUpO1xuICAgICAgY29udGVudC5sYW5lcyA9IGxhbmVzO1xuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIG1vZGUsIGxhbmVzKSB7XG4gICAgICBtb2RlID0gY3JlYXRlRmliZXIoXG4gICAgICAgIDQsXG4gICAgICAgIG51bGwgIT09IHBvcnRhbC5jaGlsZHJlbiA/IHBvcnRhbC5jaGlsZHJlbiA6IFtdLFxuICAgICAgICBwb3J0YWwua2V5LFxuICAgICAgICBtb2RlXG4gICAgICApO1xuICAgICAgbW9kZS5sYW5lcyA9IGxhbmVzO1xuICAgICAgbW9kZS5zdGF0ZU5vZGUgPSB7XG4gICAgICAgIGNvbnRhaW5lckluZm86IHBvcnRhbC5jb250YWluZXJJbmZvLFxuICAgICAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG4gICAgICAgIGltcGxlbWVudGF0aW9uOiBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgICAgIH07XG4gICAgICByZXR1cm4gbW9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaFRyZWVGb3JrKHdvcmtJblByb2dyZXNzLCB0b3RhbENoaWxkcmVuKSB7XG4gICAgICB3YXJuSWZOb3RIeWRyYXRpbmcoKTtcbiAgICAgIGZvcmtTdGFja1tmb3JrU3RhY2tJbmRleCsrXSA9IHRyZWVGb3JrQ291bnQ7XG4gICAgICBmb3JrU3RhY2tbZm9ya1N0YWNrSW5kZXgrK10gPSB0cmVlRm9ya1Byb3ZpZGVyO1xuICAgICAgdHJlZUZvcmtQcm92aWRlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgdHJlZUZvcmtDb3VudCA9IHRvdGFsQ2hpbGRyZW47XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hUcmVlSWQod29ya0luUHJvZ3Jlc3MsIHRvdGFsQ2hpbGRyZW4sIGluZGV4KSB7XG4gICAgICB3YXJuSWZOb3RIeWRyYXRpbmcoKTtcbiAgICAgIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRJZDtcbiAgICAgIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRPdmVyZmxvdztcbiAgICAgIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRQcm92aWRlcjtcbiAgICAgIHRyZWVDb250ZXh0UHJvdmlkZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHZhciBiYXNlSWRXaXRoTGVhZGluZ0JpdCA9IHRyZWVDb250ZXh0SWQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHRyZWVDb250ZXh0T3ZlcmZsb3c7XG4gICAgICB2YXIgYmFzZUxlbmd0aCA9IDMyIC0gY2x6MzIoYmFzZUlkV2l0aExlYWRpbmdCaXQpIC0gMTtcbiAgICAgIGJhc2VJZFdpdGhMZWFkaW5nQml0ICY9IH4oMSA8PCBiYXNlTGVuZ3RoKTtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgICB2YXIgbGVuZ3RoID0gMzIgLSBjbHozMih0b3RhbENoaWxkcmVuKSArIGJhc2VMZW5ndGg7XG4gICAgICBpZiAoMzAgPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIG51bWJlck9mT3ZlcmZsb3dCaXRzID0gYmFzZUxlbmd0aCAtIChiYXNlTGVuZ3RoICUgNSk7XG4gICAgICAgIGxlbmd0aCA9IChcbiAgICAgICAgICBiYXNlSWRXaXRoTGVhZGluZ0JpdCAmXG4gICAgICAgICAgKCgxIDw8IG51bWJlck9mT3ZlcmZsb3dCaXRzKSAtIDEpXG4gICAgICAgICkudG9TdHJpbmcoMzIpO1xuICAgICAgICBiYXNlSWRXaXRoTGVhZGluZ0JpdCA+Pj0gbnVtYmVyT2ZPdmVyZmxvd0JpdHM7XG4gICAgICAgIGJhc2VMZW5ndGggLT0gbnVtYmVyT2ZPdmVyZmxvd0JpdHM7XG4gICAgICAgIHRyZWVDb250ZXh0SWQgPVxuICAgICAgICAgICgxIDw8ICgzMiAtIGNsejMyKHRvdGFsQ2hpbGRyZW4pICsgYmFzZUxlbmd0aCkpIHxcbiAgICAgICAgICAoaW5kZXggPDwgYmFzZUxlbmd0aCkgfFxuICAgICAgICAgIGJhc2VJZFdpdGhMZWFkaW5nQml0O1xuICAgICAgICB0cmVlQ29udGV4dE92ZXJmbG93ID0gbGVuZ3RoICsgd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9IGVsc2VcbiAgICAgICAgKHRyZWVDb250ZXh0SWQgPVxuICAgICAgICAgICgxIDw8IGxlbmd0aCkgfCAoaW5kZXggPDwgYmFzZUxlbmd0aCkgfCBiYXNlSWRXaXRoTGVhZGluZ0JpdCksXG4gICAgICAgICAgKHRyZWVDb250ZXh0T3ZlcmZsb3cgPSB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hNYXRlcmlhbGl6ZWRUcmVlSWQod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHdhcm5JZk5vdEh5ZHJhdGluZygpO1xuICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MucmV0dXJuICYmXG4gICAgICAgIChwdXNoVHJlZUZvcmsod29ya0luUHJvZ3Jlc3MsIDEpLCBwdXNoVHJlZUlkKHdvcmtJblByb2dyZXNzLCAxLCAwKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcFRyZWVDb250ZXh0KHdvcmtJblByb2dyZXNzKSB7XG4gICAgICBmb3IgKDsgd29ya0luUHJvZ3Jlc3MgPT09IHRyZWVGb3JrUHJvdmlkZXI7IClcbiAgICAgICAgKHRyZWVGb3JrUHJvdmlkZXIgPSBmb3JrU3RhY2tbLS1mb3JrU3RhY2tJbmRleF0pLFxuICAgICAgICAgIChmb3JrU3RhY2tbZm9ya1N0YWNrSW5kZXhdID0gbnVsbCksXG4gICAgICAgICAgKHRyZWVGb3JrQ291bnQgPSBmb3JrU3RhY2tbLS1mb3JrU3RhY2tJbmRleF0pLFxuICAgICAgICAgIChmb3JrU3RhY2tbZm9ya1N0YWNrSW5kZXhdID0gbnVsbCk7XG4gICAgICBmb3IgKDsgd29ya0luUHJvZ3Jlc3MgPT09IHRyZWVDb250ZXh0UHJvdmlkZXI7IClcbiAgICAgICAgKHRyZWVDb250ZXh0UHJvdmlkZXIgPSBpZFN0YWNrWy0taWRTdGFja0luZGV4XSksXG4gICAgICAgICAgKGlkU3RhY2tbaWRTdGFja0luZGV4XSA9IG51bGwpLFxuICAgICAgICAgICh0cmVlQ29udGV4dE92ZXJmbG93ID0gaWRTdGFja1stLWlkU3RhY2tJbmRleF0pLFxuICAgICAgICAgIChpZFN0YWNrW2lkU3RhY2tJbmRleF0gPSBudWxsKSxcbiAgICAgICAgICAodHJlZUNvbnRleHRJZCA9IGlkU3RhY2tbLS1pZFN0YWNrSW5kZXhdKSxcbiAgICAgICAgICAoaWRTdGFja1tpZFN0YWNrSW5kZXhdID0gbnVsbCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5JZk5vdEh5ZHJhdGluZygpIHtcbiAgICAgIGlzSHlkcmF0aW5nIHx8XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCB0byBiZSBoeWRyYXRpbmcuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUoZmliZXIsIGRpc3RhbmNlRnJvbUxlYWYpIHtcbiAgICAgIGlmIChudWxsID09PSBmaWJlci5yZXR1cm4pIHtcbiAgICAgICAgaWYgKG51bGwgPT09IGh5ZHJhdGlvbkRpZmZSb290REVWKVxuICAgICAgICAgIGh5ZHJhdGlvbkRpZmZSb290REVWID0ge1xuICAgICAgICAgICAgZmliZXI6IGZpYmVyLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgc2VydmVyUHJvcHM6IHZvaWQgMCxcbiAgICAgICAgICAgIHNlcnZlclRhaWw6IFtdLFxuICAgICAgICAgICAgZGlzdGFuY2VGcm9tTGVhZjogZGlzdGFuY2VGcm9tTGVhZlxuICAgICAgICAgIH07XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChoeWRyYXRpb25EaWZmUm9vdERFVi5maWJlciAhPT0gZmliZXIpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJTYXcgbXVsdGlwbGUgaHlkcmF0aW9uIGRpZmYgcm9vdHMgaW4gYSBwYXNzLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGh5ZHJhdGlvbkRpZmZSb290REVWLmRpc3RhbmNlRnJvbUxlYWYgPiBkaXN0YW5jZUZyb21MZWFmICYmXG4gICAgICAgICAgICAoaHlkcmF0aW9uRGlmZlJvb3RERVYuZGlzdGFuY2VGcm9tTGVhZiA9IGRpc3RhbmNlRnJvbUxlYWYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoeWRyYXRpb25EaWZmUm9vdERFVjtcbiAgICAgIH1cbiAgICAgIHZhciBzaWJsaW5ncyA9IGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUoXG4gICAgICAgIGZpYmVyLnJldHVybixcbiAgICAgICAgZGlzdGFuY2VGcm9tTGVhZiArIDFcbiAgICAgICkuY2hpbGRyZW47XG4gICAgICBpZiAoMCA8IHNpYmxpbmdzLmxlbmd0aCAmJiBzaWJsaW5nc1tzaWJsaW5ncy5sZW5ndGggLSAxXS5maWJlciA9PT0gZmliZXIpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHNpYmxpbmdzID0gc2libGluZ3Nbc2libGluZ3MubGVuZ3RoIC0gMV0pLFxuICAgICAgICAgIHNpYmxpbmdzLmRpc3RhbmNlRnJvbUxlYWYgPiBkaXN0YW5jZUZyb21MZWFmICYmXG4gICAgICAgICAgICAoc2libGluZ3MuZGlzdGFuY2VGcm9tTGVhZiA9IGRpc3RhbmNlRnJvbUxlYWYpLFxuICAgICAgICAgIHNpYmxpbmdzXG4gICAgICAgICk7XG4gICAgICBkaXN0YW5jZUZyb21MZWFmID0ge1xuICAgICAgICBmaWJlcjogZmliZXIsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgc2VydmVyUHJvcHM6IHZvaWQgMCxcbiAgICAgICAgc2VydmVyVGFpbDogW10sXG4gICAgICAgIGRpc3RhbmNlRnJvbUxlYWY6IGRpc3RhbmNlRnJvbUxlYWZcbiAgICAgIH07XG4gICAgICBzaWJsaW5ncy5wdXNoKGRpc3RhbmNlRnJvbUxlYWYpO1xuICAgICAgcmV0dXJuIGRpc3RhbmNlRnJvbUxlYWY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5Ob25IeWRyYXRlZEluc3RhbmNlKGZpYmVyLCByZWplY3RlZENhbmRpZGF0ZSkge1xuICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgfHxcbiAgICAgICAgKChmaWJlciA9IGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUoZmliZXIsIDApKSxcbiAgICAgICAgKGZpYmVyLnNlcnZlclByb3BzID0gbnVsbCksXG4gICAgICAgIG51bGwgIT09IHJlamVjdGVkQ2FuZGlkYXRlICYmXG4gICAgICAgICAgKChyZWplY3RlZENhbmRpZGF0ZSA9XG4gICAgICAgICAgICBkZXNjcmliZUh5ZHJhdGFibGVJbnN0YW5jZUZvckRldldhcm5pbmdzKHJlamVjdGVkQ2FuZGlkYXRlKSksXG4gICAgICAgICAgZmliZXIuc2VydmVyVGFpbC5wdXNoKHJlamVjdGVkQ2FuZGlkYXRlKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2goZmliZXIpIHtcbiAgICAgIHZhciBkaWZmID0gXCJcIixcbiAgICAgICAgZGlmZlJvb3QgPSBoeWRyYXRpb25EaWZmUm9vdERFVjtcbiAgICAgIG51bGwgIT09IGRpZmZSb290ICYmXG4gICAgICAgICgoaHlkcmF0aW9uRGlmZlJvb3RERVYgPSBudWxsKSwgKGRpZmYgPSBkZXNjcmliZURpZmYoZGlmZlJvb3QpKSk7XG4gICAgICBxdWV1ZUh5ZHJhdGlvbkVycm9yKFxuICAgICAgICBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihcbiAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgIFwiSHlkcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBzZXJ2ZXIgcmVuZGVyZWQgSFRNTCBkaWRuJ3QgbWF0Y2ggdGhlIGNsaWVudC4gQXMgYSByZXN1bHQgdGhpcyB0cmVlIHdpbGwgYmUgcmVnZW5lcmF0ZWQgb24gdGhlIGNsaWVudC4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgU1NSLWVkIENsaWVudCBDb21wb25lbnQgdXNlZDpcXG5cXG4tIEEgc2VydmVyL2NsaWVudCBicmFuY2ggYGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylgLlxcbi0gVmFyaWFibGUgaW5wdXQgc3VjaCBhcyBgRGF0ZS5ub3coKWAgb3IgYE1hdGgucmFuZG9tKClgIHdoaWNoIGNoYW5nZXMgZWFjaCB0aW1lIGl0J3MgY2FsbGVkLlxcbi0gRGF0ZSBmb3JtYXR0aW5nIGluIGEgdXNlcidzIGxvY2FsZSB3aGljaCBkb2Vzbid0IG1hdGNoIHRoZSBzZXJ2ZXIuXFxuLSBFeHRlcm5hbCBjaGFuZ2luZyBkYXRhIHdpdGhvdXQgc2VuZGluZyBhIHNuYXBzaG90IG9mIGl0IGFsb25nIHdpdGggdGhlIEhUTUwuXFxuLSBJbnZhbGlkIEhUTUwgdGFnIG5lc3RpbmcuXFxuXFxuSXQgY2FuIGFsc28gaGFwcGVuIGlmIHRoZSBjbGllbnQgaGFzIGEgYnJvd3NlciBleHRlbnNpb24gaW5zdGFsbGVkIHdoaWNoIG1lc3NlcyB3aXRoIHRoZSBIVE1MIGJlZm9yZSBSZWFjdCBsb2FkZWQuXFxuXFxuaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9oeWRyYXRpb24tbWlzbWF0Y2hcIiArXG4gICAgICAgICAgICAgIGRpZmZcbiAgICAgICAgICApLFxuICAgICAgICAgIGZpYmVyXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0aHJvdyBIeWRyYXRpb25NaXNtYXRjaEV4Y2VwdGlvbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZShmaWJlcikge1xuICAgICAgdmFyIGRpZEh5ZHJhdGUgPSBmaWJlci5zdGF0ZU5vZGU7XG4gICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGUsXG4gICAgICAgIHByb3BzID0gZmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgIGRpZEh5ZHJhdGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBmaWJlcjtcbiAgICAgIGRpZEh5ZHJhdGVbaW50ZXJuYWxQcm9wc0tleV0gPSBwcm9wcztcbiAgICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodHlwZSwgcHJvcHMpO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJkaWFsb2dcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiY2FuY2VsXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJjbG9zZVwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImlmcmFtZVwiOlxuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIGNhc2UgXCJlbWJlZFwiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidmlkZW9cIjpcbiAgICAgICAgY2FzZSBcImF1ZGlvXCI6XG4gICAgICAgICAgZm9yICh0eXBlID0gMDsgdHlwZSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IHR5cGUrKylcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW3R5cGVdLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInNvdXJjZVwiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJlcnJvclwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImltZ1wiOlxuICAgICAgICBjYXNlIFwiaW1hZ2VcIjpcbiAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiZXJyb3JcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImxvYWRcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkZXRhaWxzXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInRvZ2dsZVwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyhcImlucHV0XCIsIHByb3BzKTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiaW52YWxpZFwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICB2YWxpZGF0ZUlucHV0UHJvcHMoZGlkSHlkcmF0ZSwgcHJvcHMpO1xuICAgICAgICAgIGluaXRJbnB1dChcbiAgICAgICAgICAgIGRpZEh5ZHJhdGUsXG4gICAgICAgICAgICBwcm9wcy52YWx1ZSxcbiAgICAgICAgICAgIHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHByb3BzLmNoZWNrZWQsXG4gICAgICAgICAgICBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgIHByb3BzLnR5cGUsXG4gICAgICAgICAgICBwcm9wcy5uYW1lLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgICAgIHRyYWNrKGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib3B0aW9uXCI6XG4gICAgICAgICAgdmFsaWRhdGVPcHRpb25Qcm9wcyhkaWRIeWRyYXRlLCBwcm9wcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKFwic2VsZWN0XCIsIHByb3BzKTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiaW52YWxpZFwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICB2YWxpZGF0ZVNlbGVjdFByb3BzKGRpZEh5ZHJhdGUsIHByb3BzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyhcInRleHRhcmVhXCIsIHByb3BzKSxcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRpZEh5ZHJhdGUpLFxuICAgICAgICAgICAgdmFsaWRhdGVUZXh0YXJlYVByb3BzKGRpZEh5ZHJhdGUsIHByb3BzKSxcbiAgICAgICAgICAgIGluaXRUZXh0YXJlYShcbiAgICAgICAgICAgICAgZGlkSHlkcmF0ZSxcbiAgICAgICAgICAgICAgcHJvcHMudmFsdWUsXG4gICAgICAgICAgICAgIHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgcHJvcHMuY2hpbGRyZW5cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFjayhkaWRIeWRyYXRlKTtcbiAgICAgIH1cbiAgICAgIHR5cGUgPSBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIChcInN0cmluZ1wiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICBcIm51bWJlclwiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICBcImJpZ2ludFwiICE9PSB0eXBlb2YgdHlwZSkgfHxcbiAgICAgIGRpZEh5ZHJhdGUudGV4dENvbnRlbnQgPT09IFwiXCIgKyB0eXBlIHx8XG4gICAgICAhMCA9PT0gcHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHx8XG4gICAgICBjaGVja0ZvclVubWF0Y2hlZFRleHQoZGlkSHlkcmF0ZS50ZXh0Q29udGVudCwgdHlwZSlcbiAgICAgICAgPyAobnVsbCAhPSBwcm9wcy5wb3BvdmVyICYmXG4gICAgICAgICAgICAobGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImJlZm9yZXRvZ2dsZVwiLCBkaWRIeWRyYXRlKSxcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJ0b2dnbGVcIiwgZGlkSHlkcmF0ZSkpLFxuICAgICAgICAgIG51bGwgIT0gcHJvcHMub25TY3JvbGwgJiZcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJzY3JvbGxcIiwgZGlkSHlkcmF0ZSksXG4gICAgICAgICAgbnVsbCAhPSBwcm9wcy5vblNjcm9sbEVuZCAmJlxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInNjcm9sbGVuZFwiLCBkaWRIeWRyYXRlKSxcbiAgICAgICAgICBudWxsICE9IHByb3BzLm9uQ2xpY2sgJiYgKGRpZEh5ZHJhdGUub25jbGljayA9IG5vb3AkMSksXG4gICAgICAgICAgKGRpZEh5ZHJhdGUgPSAhMCkpXG4gICAgICAgIDogKGRpZEh5ZHJhdGUgPSAhMSk7XG4gICAgICBkaWRIeWRyYXRlIHx8IHRocm93T25IeWRyYXRpb25NaXNtYXRjaChmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpIHtcbiAgICAgIGZvciAoaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlci5yZXR1cm47IGh5ZHJhdGlvblBhcmVudEZpYmVyOyApXG4gICAgICAgIHN3aXRjaCAoaHlkcmF0aW9uUGFyZW50RmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICByb290T3JTaW5nbGV0b25Db250ZXh0ID0gITE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByb290T3JTaW5nbGV0b25Db250ZXh0ID0gITA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXIucmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG4gICAgICBpZiAoZmliZXIgIT09IGh5ZHJhdGlvblBhcmVudEZpYmVyKSByZXR1cm4gITE7XG4gICAgICBpZiAoIWlzSHlkcmF0aW5nKVxuICAgICAgICByZXR1cm4gcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlciksIChpc0h5ZHJhdGluZyA9ICEwKSwgITE7XG4gICAgICB2YXIgdGFnID0gZmliZXIudGFnLFxuICAgICAgICBKU0NvbXBpbGVyX3RlbXA7XG4gICAgICBpZiAoKEpTQ29tcGlsZXJfdGVtcCA9IDMgIT09IHRhZyAmJiAyNyAhPT0gdGFnKSkge1xuICAgICAgICBpZiAoKEpTQ29tcGlsZXJfdGVtcCA9IDUgPT09IHRhZykpXG4gICAgICAgICAgKEpTQ29tcGlsZXJfdGVtcCA9IGZpYmVyLnR5cGUpLFxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfdGVtcCA9XG4gICAgICAgICAgICAgICEoXCJmb3JtXCIgIT09IEpTQ29tcGlsZXJfdGVtcCAmJiBcImJ1dHRvblwiICE9PSBKU0NvbXBpbGVyX3RlbXApIHx8XG4gICAgICAgICAgICAgIHNob3VsZFNldFRleHRDb250ZW50KGZpYmVyLnR5cGUsIGZpYmVyLm1lbW9pemVkUHJvcHMpKTtcbiAgICAgICAgSlNDb21waWxlcl90ZW1wID0gIUpTQ29tcGlsZXJfdGVtcDtcbiAgICAgIH1cbiAgICAgIGlmIChKU0NvbXBpbGVyX3RlbXAgJiYgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSkge1xuICAgICAgICBmb3IgKEpTQ29tcGlsZXJfdGVtcCA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7IEpTQ29tcGlsZXJfdGVtcDsgKSB7XG4gICAgICAgICAgdmFyIGRpZmZOb2RlID0gYnVpbGRIeWRyYXRpb25EaWZmTm9kZShmaWJlciwgMCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9XG4gICAgICAgICAgICAgIGRlc2NyaWJlSHlkcmF0YWJsZUluc3RhbmNlRm9yRGV2V2FybmluZ3MoSlNDb21waWxlcl90ZW1wKTtcbiAgICAgICAgICBkaWZmTm9kZS5zZXJ2ZXJUYWlsLnB1c2goZGVzY3JpcHRpb24pO1xuICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9XG4gICAgICAgICAgICBcIlN1c3BlbnNlXCIgPT09IGRlc2NyaXB0aW9uLnR5cGVcbiAgICAgICAgICAgICAgPyBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKEpTQ29tcGlsZXJfdGVtcClcbiAgICAgICAgICAgICAgOiBnZXROZXh0SHlkcmF0YWJsZShKU0NvbXBpbGVyX3RlbXAubmV4dFNpYmxpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaChmaWJlcik7XG4gICAgICB9XG4gICAgICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcbiAgICAgIGlmICgxMyA9PT0gdGFnKSB7XG4gICAgICAgIGZpYmVyID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgZmliZXIgPSBudWxsICE9PSBmaWJlciA/IGZpYmVyLmRlaHlkcmF0ZWQgOiBudWxsO1xuICAgICAgICBpZiAoIWZpYmVyKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBoYXZlIGEgaHlkcmF0ZWQgc3VzcGVuc2UgaW5zdGFuY2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID1cbiAgICAgICAgICBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKGZpYmVyKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICAyNyA9PT0gdGFnXG4gICAgICAgICAgPyAoKHRhZyA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2UpLFxuICAgICAgICAgICAgaXNTaW5nbGV0b25TY29wZShmaWJlci50eXBlKVxuICAgICAgICAgICAgICA/ICgoZmliZXIgPSBwcmV2aW91c0h5ZHJhdGFibGVPbkVudGVyaW5nU2NvcGVkU2luZ2xldG9uKSxcbiAgICAgICAgICAgICAgICAocHJldmlvdXNIeWRyYXRhYmxlT25FbnRlcmluZ1Njb3BlZFNpbmdsZXRvbiA9IG51bGwpLFxuICAgICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZmliZXIpKVxuICAgICAgICAgICAgICA6IChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gdGFnKSlcbiAgICAgICAgICA6IChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaHlkcmF0aW9uUGFyZW50RmliZXJcbiAgICAgICAgICAgICAgPyBnZXROZXh0SHlkcmF0YWJsZShmaWJlci5zdGF0ZU5vZGUubmV4dFNpYmxpbmcpXG4gICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc2V0SHlkcmF0aW9uU3RhdGUoKSB7XG4gICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xuICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgPSBpc0h5ZHJhdGluZyA9ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGdyYWRlSHlkcmF0aW9uRXJyb3JzVG9SZWNvdmVyYWJsZSgpIHtcbiAgICAgIHZhciBxdWV1ZWRFcnJvcnMgPSBoeWRyYXRpb25FcnJvcnM7XG4gICAgICBudWxsICE9PSBxdWV1ZWRFcnJvcnMgJiZcbiAgICAgICAgKG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzXG4gICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBxdWV1ZWRFcnJvcnMpXG4gICAgICAgICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycy5wdXNoLmFwcGx5KFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgcXVldWVkRXJyb3JzXG4gICAgICAgICAgICApLFxuICAgICAgICAoaHlkcmF0aW9uRXJyb3JzID0gbnVsbCkpO1xuICAgICAgcmV0dXJuIHF1ZXVlZEVycm9ycztcbiAgICB9XG4gICAgZnVuY3Rpb24gcXVldWVIeWRyYXRpb25FcnJvcihlcnJvcikge1xuICAgICAgbnVsbCA9PT0gaHlkcmF0aW9uRXJyb3JzXG4gICAgICAgID8gKGh5ZHJhdGlvbkVycm9ycyA9IFtlcnJvcl0pXG4gICAgICAgIDogaHlkcmF0aW9uRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbWl0UGVuZGluZ0h5ZHJhdGlvbldhcm5pbmdzKCkge1xuICAgICAgdmFyIGRpZmZSb290ID0gaHlkcmF0aW9uRGlmZlJvb3RERVY7XG4gICAgICBpZiAobnVsbCAhPT0gZGlmZlJvb3QpIHtcbiAgICAgICAgaHlkcmF0aW9uRGlmZlJvb3RERVYgPSBudWxsO1xuICAgICAgICBmb3IgKHZhciBkaWZmID0gZGVzY3JpYmVEaWZmKGRpZmZSb290KTsgMCA8IGRpZmZSb290LmNoaWxkcmVuLmxlbmd0aDsgKVxuICAgICAgICAgIGRpZmZSb290ID0gZGlmZlJvb3QuY2hpbGRyZW5bMF07XG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKGRpZmZSb290LmZpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiQSB0cmVlIGh5ZHJhdGVkIGJ1dCBzb21lIGF0dHJpYnV0ZXMgb2YgdGhlIHNlcnZlciByZW5kZXJlZCBIVE1MIGRpZG4ndCBtYXRjaCB0aGUgY2xpZW50IHByb3BlcnRpZXMuIFRoaXMgd29uJ3QgYmUgcGF0Y2hlZCB1cC4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgU1NSLWVkIENsaWVudCBDb21wb25lbnQgdXNlZDpcXG5cXG4tIEEgc2VydmVyL2NsaWVudCBicmFuY2ggYGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylgLlxcbi0gVmFyaWFibGUgaW5wdXQgc3VjaCBhcyBgRGF0ZS5ub3coKWAgb3IgYE1hdGgucmFuZG9tKClgIHdoaWNoIGNoYW5nZXMgZWFjaCB0aW1lIGl0J3MgY2FsbGVkLlxcbi0gRGF0ZSBmb3JtYXR0aW5nIGluIGEgdXNlcidzIGxvY2FsZSB3aGljaCBkb2Vzbid0IG1hdGNoIHRoZSBzZXJ2ZXIuXFxuLSBFeHRlcm5hbCBjaGFuZ2luZyBkYXRhIHdpdGhvdXQgc2VuZGluZyBhIHNuYXBzaG90IG9mIGl0IGFsb25nIHdpdGggdGhlIEhUTUwuXFxuLSBJbnZhbGlkIEhUTUwgdGFnIG5lc3RpbmcuXFxuXFxuSXQgY2FuIGFsc28gaGFwcGVuIGlmIHRoZSBjbGllbnQgaGFzIGEgYnJvd3NlciBleHRlbnNpb24gaW5zdGFsbGVkIHdoaWNoIG1lc3NlcyB3aXRoIHRoZSBIVE1MIGJlZm9yZSBSZWFjdCBsb2FkZWQuXFxuXFxuJXMlc1wiLFxuICAgICAgICAgICAgXCJodHRwczovL3JlYWN0LmRldi9saW5rL2h5ZHJhdGlvbi1taXNtYXRjaFwiLFxuICAgICAgICAgICAgZGlmZlxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSB7XG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaFByb3ZpZGVyKHByb3ZpZGVyRmliZXIsIGNvbnRleHQsIG5leHRWYWx1ZSkge1xuICAgICAgcHVzaCh2YWx1ZUN1cnNvciwgY29udGV4dC5fY3VycmVudFZhbHVlLCBwcm92aWRlckZpYmVyKTtcbiAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgIHB1c2gocmVuZGVyZXJDdXJzb3JERVYsIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciwgcHJvdmlkZXJGaWJlcik7XG4gICAgICB2b2lkIDAgIT09IGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAmJlxuICAgICAgICBudWxsICE9PSBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgJiZcbiAgICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgc2FtZSBjb250ZXh0IHByb3ZpZGVyLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC5cIlxuICAgICAgICApO1xuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gcmVuZGVyZXJTaWdpbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wUHJvdmlkZXIoY29udGV4dCwgcHJvdmlkZXJGaWJlcikge1xuICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gdmFsdWVDdXJzb3IuY3VycmVudDtcbiAgICAgIHZhciBjdXJyZW50UmVuZGVyZXIgPSByZW5kZXJlckN1cnNvckRFVi5jdXJyZW50O1xuICAgICAgcG9wKHJlbmRlcmVyQ3Vyc29yREVWLCBwcm92aWRlckZpYmVyKTtcbiAgICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IGN1cnJlbnRSZW5kZXJlcjtcbiAgICAgIHBvcCh2YWx1ZUN1cnNvciwgcHJvdmlkZXJGaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgoXG4gICAgICBwYXJlbnQsXG4gICAgICByZW5kZXJMYW5lcyxcbiAgICAgIHByb3BhZ2F0aW9uUm9vdFxuICAgICkge1xuICAgICAgZm9yICg7IG51bGwgIT09IHBhcmVudDsgKSB7XG4gICAgICAgIHZhciBhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuICAgICAgICAocGFyZW50LmNoaWxkTGFuZXMgJiByZW5kZXJMYW5lcykgIT09IHJlbmRlckxhbmVzXG4gICAgICAgICAgPyAoKHBhcmVudC5jaGlsZExhbmVzIHw9IHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiAoYWx0ZXJuYXRlLmNoaWxkTGFuZXMgfD0gcmVuZGVyTGFuZXMpKVxuICAgICAgICAgIDogbnVsbCAhPT0gYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAoYWx0ZXJuYXRlLmNoaWxkTGFuZXMgJiByZW5kZXJMYW5lcykgIT09IHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAoYWx0ZXJuYXRlLmNoaWxkTGFuZXMgfD0gcmVuZGVyTGFuZXMpO1xuICAgICAgICBpZiAocGFyZW50ID09PSBwcm9wYWdhdGlvblJvb3QpIGJyZWFrO1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuICAgICAgcGFyZW50ICE9PSBwcm9wYWdhdGlvblJvb3QgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHRvIGZpbmQgdGhlIHByb3BhZ2F0aW9uIHJvb3Qgd2hlbiBzY2hlZHVsaW5nIGNvbnRleHQgd29yay4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlcyhcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgY29udGV4dHMsXG4gICAgICByZW5kZXJMYW5lcyxcbiAgICAgIGZvcmNlUHJvcGFnYXRlRW50aXJlVHJlZVxuICAgICkge1xuICAgICAgdmFyIGZpYmVyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBudWxsICE9PSBmaWJlciAmJiAoZmliZXIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgZm9yICg7IG51bGwgIT09IGZpYmVyOyApIHtcbiAgICAgICAgdmFyIGxpc3QgPSBmaWJlci5kZXBlbmRlbmNpZXM7XG4gICAgICAgIGlmIChudWxsICE9PSBsaXN0KSB7XG4gICAgICAgICAgdmFyIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgICAgIGxpc3QgPSBsaXN0LmZpcnN0Q29udGV4dDtcbiAgICAgICAgICBhOiBmb3IgKDsgbnVsbCAhPT0gbGlzdDsgKSB7XG4gICAgICAgICAgICB2YXIgZGVwZW5kZW5jeSA9IGxpc3Q7XG4gICAgICAgICAgICBsaXN0ID0gZmliZXI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRleHRzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeS5jb250ZXh0ID09PSBjb250ZXh0c1tpXSkge1xuICAgICAgICAgICAgICAgIGxpc3QubGFuZXMgfD0gcmVuZGVyTGFuZXM7XG4gICAgICAgICAgICAgICAgZGVwZW5kZW5jeSA9IGxpc3QuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgICAgIG51bGwgIT09IGRlcGVuZGVuY3kgJiYgKGRlcGVuZGVuY3kubGFuZXMgfD0gcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgoXG4gICAgICAgICAgICAgICAgICBsaXN0LnJldHVybixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZvcmNlUHJvcGFnYXRlRW50aXJlVHJlZSB8fCAobmV4dEZpYmVyID0gbnVsbCk7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGlzdCA9IGRlcGVuZGVuY3kubmV4dDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoMTggPT09IGZpYmVyLnRhZykge1xuICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gbmV4dEZpYmVyKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiV2UganVzdCBjYW1lIGZyb20gYSBwYXJlbnQgc28gd2UgbXVzdCBoYXZlIGhhZCBhIHBhcmVudC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBuZXh0RmliZXIubGFuZXMgfD0gcmVuZGVyTGFuZXM7XG4gICAgICAgICAgbGlzdCA9IG5leHRGaWJlci5hbHRlcm5hdGU7XG4gICAgICAgICAgbnVsbCAhPT0gbGlzdCAmJiAobGlzdC5sYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgICAgIG5leHRGaWJlcixcbiAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICApO1xuICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICAgICAgaWYgKG51bGwgIT09IG5leHRGaWJlcikgbmV4dEZpYmVyLnJldHVybiA9IGZpYmVyO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgZm9yIChuZXh0RmliZXIgPSBmaWJlcjsgbnVsbCAhPT0gbmV4dEZpYmVyOyApIHtcbiAgICAgICAgICAgIGlmIChuZXh0RmliZXIgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmliZXIgPSBuZXh0RmliZXIuc2libGluZztcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBmaWJlcikge1xuICAgICAgICAgICAgICBmaWJlci5yZXR1cm4gPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgICAgICAgICBuZXh0RmliZXIgPSBmaWJlcjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0RmliZXIgPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgZmliZXIgPSBuZXh0RmliZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZVBhcmVudENvbnRleHRDaGFuZ2VzKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICBmb3JjZVByb3BhZ2F0ZUVudGlyZVRyZWVcbiAgICApIHtcbiAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIHBhcmVudCA9IHdvcmtJblByb2dyZXNzLCBpc0luc2lkZVByb3BhZ2F0aW9uQmFpbG91dCA9ICExO1xuICAgICAgICBudWxsICE9PSBwYXJlbnQ7XG5cbiAgICAgICkge1xuICAgICAgICBpZiAoIWlzSW5zaWRlUHJvcGFnYXRpb25CYWlsb3V0KVxuICAgICAgICAgIGlmICgwICE9PSAocGFyZW50LmZsYWdzICYgNTI0Mjg4KSkgaXNJbnNpZGVQcm9wYWdhdGlvbkJhaWxvdXQgPSAhMDtcbiAgICAgICAgICBlbHNlIGlmICgwICE9PSAocGFyZW50LmZsYWdzICYgMjYyMTQ0KSkgYnJlYWs7XG4gICAgICAgIGlmICgxMCA9PT0gcGFyZW50LnRhZykge1xuICAgICAgICAgIHZhciBjdXJyZW50UGFyZW50ID0gcGFyZW50LmFsdGVybmF0ZTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudFBhcmVudClcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiU2hvdWxkIGhhdmUgYSBjdXJyZW50IGZpYmVyLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgICAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudFBhcmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IHBhcmVudC50eXBlO1xuICAgICAgICAgICAgb2JqZWN0SXMocGFyZW50LnBlbmRpbmdQcm9wcy52YWx1ZSwgY3VycmVudFBhcmVudC52YWx1ZSkgfHxcbiAgICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnQucHVzaChjb250ZXh0KVxuICAgICAgICAgICAgICAgIDogKGN1cnJlbnQgPSBbY29udGV4dF0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFyZW50ID09PSBob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yLmN1cnJlbnQpIHtcbiAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50LmFsdGVybmF0ZTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudFBhcmVudClcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiU2hvdWxkIGhhdmUgYSBjdXJyZW50IGZpYmVyLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgICAgICBjdXJyZW50UGFyZW50Lm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSAhPT1cbiAgICAgICAgICAgIHBhcmVudC5tZW1vaXplZFN0YXRlLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIChudWxsICE9PSBjdXJyZW50XG4gICAgICAgICAgICAgID8gY3VycmVudC5wdXNoKEhvc3RUcmFuc2l0aW9uQ29udGV4dClcbiAgICAgICAgICAgICAgOiAoY3VycmVudCA9IFtIb3N0VHJhbnNpdGlvbkNvbnRleHRdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgIH1cbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZXMoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICBmb3JjZVByb3BhZ2F0ZUVudGlyZVRyZWVcbiAgICAgICAgKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDI2MjE0NDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tJZkNvbnRleHRDaGFuZ2VkKGN1cnJlbnREZXBlbmRlbmNpZXMpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dDtcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudERlcGVuZGVuY2llcztcblxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhb2JqZWN0SXMoXG4gICAgICAgICAgICBjdXJyZW50RGVwZW5kZW5jaWVzLmNvbnRleHQuX2N1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIGN1cnJlbnREZXBlbmRlbmNpZXMubWVtb2l6ZWRWYWx1ZVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMubmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcztcbiAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzICYmICh3b3JrSW5Qcm9ncmVzcy5maXJzdENvbnRleHQgPSBudWxsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZENvbnRleHQoY29udGV4dCkge1xuICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90IGluc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIGNvbnRleHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsaWF0aW9uKGNvbnN1bWVyLCBjb250ZXh0KSB7XG4gICAgICBudWxsID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxICYmIHByZXBhcmVUb1JlYWRDb250ZXh0KGNvbnN1bWVyKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGNvbnN1bWVyLCBjb250ZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZENvbnRleHRGb3JDb25zdW1lcihjb25zdW1lciwgY29udGV4dCkge1xuICAgICAgdmFyIHZhbHVlID0gY29udGV4dC5fY3VycmVudFZhbHVlO1xuICAgICAgY29udGV4dCA9IHsgY29udGV4dDogY29udGV4dCwgbWVtb2l6ZWRWYWx1ZTogdmFsdWUsIG5leHQ6IG51bGwgfTtcbiAgICAgIGlmIChudWxsID09PSBsYXN0Q29udGV4dERlcGVuZGVuY3kpIHtcbiAgICAgICAgaWYgKG51bGwgPT09IGNvbnN1bWVyKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGNvbnRleHQ7XG4gICAgICAgIGNvbnN1bWVyLmRlcGVuZGVuY2llcyA9IHtcbiAgICAgICAgICBsYW5lczogMCxcbiAgICAgICAgICBmaXJzdENvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgX2RlYnVnVGhlbmFibGVTdGF0ZTogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBjb25zdW1lci5mbGFncyB8PSA1MjQyODg7XG4gICAgICB9IGVsc2UgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbGFzdENvbnRleHREZXBlbmRlbmN5Lm5leHQgPSBjb250ZXh0O1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRyb2xsZXI6IG5ldyBBYm9ydENvbnRyb2xsZXJMb2NhbCgpLFxuICAgICAgICBkYXRhOiBuZXcgTWFwKCksXG4gICAgICAgIHJlZkNvdW50OiAwXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXRhaW5DYWNoZShjYWNoZSkge1xuICAgICAgY2FjaGUuY29udHJvbGxlci5zaWduYWwuYWJvcnRlZCAmJlxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJBIGNhY2hlIGluc3RhbmNlIHdhcyByZXRhaW5lZCBhZnRlciBpdCB3YXMgYWxyZWFkeSBmcmVlZC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICk7XG4gICAgICBjYWNoZS5yZWZDb3VudCsrO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxlYXNlQ2FjaGUoY2FjaGUpIHtcbiAgICAgIGNhY2hlLnJlZkNvdW50LS07XG4gICAgICAwID4gY2FjaGUucmVmQ291bnQgJiZcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiQSBjYWNoZSBpbnN0YW5jZSB3YXMgcmVsZWFzZWQgYWZ0ZXIgaXQgd2FzIGFscmVhZHkgZnJlZWQuIFRoaXMgbGlrZWx5IGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICApO1xuICAgICAgMCA9PT0gY2FjaGUucmVmQ291bnQgJiZcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayQyKE5vcm1hbFByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FjaGUuY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpIHtcbiAgICAgIHZhciBwcmV2RWZmZWN0RHVyYXRpb24gPSBwcm9maWxlckVmZmVjdER1cmF0aW9uO1xuICAgICAgcHJvZmlsZXJFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICByZXR1cm4gcHJldkVmZmVjdER1cmF0aW9uO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BOZXN0ZWRFZmZlY3REdXJhdGlvbnMocHJldkVmZmVjdER1cmF0aW9uKSB7XG4gICAgICB2YXIgZWxhcHNlZFRpbWUgPSBwcm9maWxlckVmZmVjdER1cmF0aW9uO1xuICAgICAgcHJvZmlsZXJFZmZlY3REdXJhdGlvbiA9IHByZXZFZmZlY3REdXJhdGlvbjtcbiAgICAgIHJldHVybiBlbGFwc2VkVGltZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnViYmxlTmVzdGVkRWZmZWN0RHVyYXRpb25zKHByZXZFZmZlY3REdXJhdGlvbikge1xuICAgICAgdmFyIGVsYXBzZWRUaW1lID0gcHJvZmlsZXJFZmZlY3REdXJhdGlvbjtcbiAgICAgIHByb2ZpbGVyRWZmZWN0RHVyYXRpb24gKz0gcHJldkVmZmVjdER1cmF0aW9uO1xuICAgICAgcmV0dXJuIGVsYXBzZWRUaW1lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydFByb2ZpbGVyVGltZXIoZmliZXIpIHtcbiAgICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gbm93KCk7XG4gICAgICAwID4gZmliZXIuYWN0dWFsU3RhcnRUaW1lICYmIChmaWJlci5hY3R1YWxTdGFydFRpbWUgPSBwcm9maWxlclN0YXJ0VGltZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRHVyYXRpb24oZmliZXIpIHtcbiAgICAgIGlmICgwIDw9IHByb2ZpbGVyU3RhcnRUaW1lKSB7XG4gICAgICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdygpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuICAgICAgICBmaWJlci5zZWxmQmFzZUR1cmF0aW9uID0gZWxhcHNlZFRpbWU7XG4gICAgICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkSW5jb21wbGV0ZUR1cmF0aW9uKGZpYmVyKSB7XG4gICAgICBpZiAoMCA8PSBwcm9maWxlclN0YXJ0VGltZSkge1xuICAgICAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3coKSAtIHByb2ZpbGVyU3RhcnRUaW1lO1xuICAgICAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcbiAgICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjb3JkRWZmZWN0RHVyYXRpb24oKSB7XG4gICAgICBpZiAoMCA8PSBwcm9maWxlclN0YXJ0VGltZSkge1xuICAgICAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3coKSAtIHByb2ZpbGVyU3RhcnRUaW1lO1xuICAgICAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICAgICAgICBwcm9maWxlckVmZmVjdER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydEVmZmVjdFRpbWVyKCkge1xuICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSBub3coKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNmZXJBY3R1YWxEdXJhdGlvbihmaWJlcikge1xuICAgICAgZm9yICh2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDsgY2hpbGQ7IClcbiAgICAgICAgKGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uKSwgKGNoaWxkID0gY2hpbGQuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVudGFuZ2xlQXN5bmNBY3Rpb24odHJhbnNpdGlvbiwgdGhlbmFibGUpIHtcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzKSB7XG4gICAgICAgIHZhciBlbnRhbmdsZWRMaXN0ZW5lcnMgPSAoY3VycmVudEVudGFuZ2xlZExpc3RlbmVycyA9IFtdKTtcbiAgICAgICAgY3VycmVudEVudGFuZ2xlZFBlbmRpbmdDb3VudCA9IDA7XG4gICAgICAgIGN1cnJlbnRFbnRhbmdsZWRMYW5lID0gcmVxdWVzdFRyYW5zaXRpb25MYW5lKCk7XG4gICAgICAgIGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSA9IHtcbiAgICAgICAgICBzdGF0dXM6IFwicGVuZGluZ1wiLFxuICAgICAgICAgIHZhbHVlOiB2b2lkIDAsXG4gICAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIGVudGFuZ2xlZExpc3RlbmVycy5wdXNoKHJlc29sdmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRFbnRhbmdsZWRQZW5kaW5nQ291bnQrKztcbiAgICAgIHRoZW5hYmxlLnRoZW4ocGluZ0VuZ3RhbmdsZWRBY3Rpb25TY29wZSwgcGluZ0VuZ3RhbmdsZWRBY3Rpb25TY29wZSk7XG4gICAgICByZXR1cm4gdGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBpbmdFbmd0YW5nbGVkQWN0aW9uU2NvcGUoKSB7XG4gICAgICBpZiAoXG4gICAgICAgIDAgPT09IC0tY3VycmVudEVudGFuZ2xlZFBlbmRpbmdDb3VudCAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzXG4gICAgICApIHtcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlICYmXG4gICAgICAgICAgKGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiKTtcbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnM7XG4gICAgICAgIGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnMgPSBudWxsO1xuICAgICAgICBjdXJyZW50RW50YW5nbGVkTGFuZSA9IDA7XG4gICAgICAgIGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSA9IG51bGw7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSAoMCwgbGlzdGVuZXJzW2ldKSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjaGFpblRoZW5hYmxlVmFsdWUodGhlbmFibGUsIHJlc3VsdCkge1xuICAgICAgdmFyIGxpc3RlbmVycyA9IFtdLFxuICAgICAgICB0aGVuYWJsZVdpdGhPdmVycmlkZSA9IHtcbiAgICAgICAgICBzdGF0dXM6IFwicGVuZGluZ1wiLFxuICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgIHJlYXNvbjogbnVsbCxcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnB1c2gocmVzb2x2ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgdGhlbmFibGUudGhlbihcbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoZW5hYmxlV2l0aE92ZXJyaWRlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgdGhlbmFibGVXaXRoT3ZlcnJpZGUudmFsdWUgPSByZXN1bHQ7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspICgwLCBsaXN0ZW5lcnNbaV0pKHJlc3VsdCk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIHRoZW5hYmxlV2l0aE92ZXJyaWRlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIjtcbiAgICAgICAgICB0aGVuYWJsZVdpdGhPdmVycmlkZS5yZWFzb24gPSBlcnJvcjtcbiAgICAgICAgICBmb3IgKGVycm9yID0gMDsgZXJyb3IgPCBsaXN0ZW5lcnMubGVuZ3RoOyBlcnJvcisrKVxuICAgICAgICAgICAgKDAsIGxpc3RlbmVyc1tlcnJvcl0pKHZvaWQgMCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhlbmFibGVXaXRoT3ZlcnJpZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZWtDYWNoZUZyb21Qb29sKCkge1xuICAgICAgdmFyIGNhY2hlUmVzdW1lZEZyb21QcmV2aW91c1JlbmRlciA9IHJlc3VtZWRDYWNoZS5jdXJyZW50O1xuICAgICAgcmV0dXJuIG51bGwgIT09IGNhY2hlUmVzdW1lZEZyb21QcmV2aW91c1JlbmRlclxuICAgICAgICA/IGNhY2hlUmVzdW1lZEZyb21QcmV2aW91c1JlbmRlclxuICAgICAgICA6IHdvcmtJblByb2dyZXNzUm9vdC5wb29sZWRDYWNoZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaFRyYW5zaXRpb24ob2Zmc2NyZWVuV29ya0luUHJvZ3Jlc3MsIHByZXZDYWNoZVBvb2wpIHtcbiAgICAgIG51bGwgPT09IHByZXZDYWNoZVBvb2xcbiAgICAgICAgPyBwdXNoKHJlc3VtZWRDYWNoZSwgcmVzdW1lZENhY2hlLmN1cnJlbnQsIG9mZnNjcmVlbldvcmtJblByb2dyZXNzKVxuICAgICAgICA6IHB1c2gocmVzdW1lZENhY2hlLCBwcmV2Q2FjaGVQb29sLnBvb2wsIG9mZnNjcmVlbldvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VzcGVuZGVkQ2FjaGUoKSB7XG4gICAgICB2YXIgY2FjaGVGcm9tUG9vbCA9IHBlZWtDYWNoZUZyb21Qb29sKCk7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gY2FjaGVGcm9tUG9vbFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB7IHBhcmVudDogQ2FjaGVDb250ZXh0Ll9jdXJyZW50VmFsdWUsIHBvb2w6IGNhY2hlRnJvbVBvb2wgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlVGhlbmFibGVTdGF0ZSgpIHtcbiAgICAgIHJldHVybiB7IGRpZFdhcm5BYm91dFVuY2FjaGVkUHJvbWlzZTogITEsIHRoZW5hYmxlczogW10gfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNUaGVuYWJsZVJlc29sdmVkKHRoZW5hYmxlKSB7XG4gICAgICB0aGVuYWJsZSA9IHRoZW5hYmxlLnN0YXR1cztcbiAgICAgIHJldHVybiBcImZ1bGZpbGxlZFwiID09PSB0aGVuYWJsZSB8fCBcInJlamVjdGVkXCIgPT09IHRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub29wJDMoKSB7fVxuICAgIGZ1bmN0aW9uIHRyYWNrVXNlZFRoZW5hYmxlKHRoZW5hYmxlU3RhdGUsIHRoZW5hYmxlLCBpbmRleCkge1xuICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgJiZcbiAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmRpZFVzZVByb21pc2UgPSAhMCk7XG4gICAgICB2YXIgdHJhY2tlZFRoZW5hYmxlcyA9IHRoZW5hYmxlU3RhdGUudGhlbmFibGVzO1xuICAgICAgaW5kZXggPSB0cmFja2VkVGhlbmFibGVzW2luZGV4XTtcbiAgICAgIHZvaWQgMCA9PT0gaW5kZXhcbiAgICAgICAgPyB0cmFja2VkVGhlbmFibGVzLnB1c2godGhlbmFibGUpXG4gICAgICAgIDogaW5kZXggIT09IHRoZW5hYmxlICYmXG4gICAgICAgICAgKHRoZW5hYmxlU3RhdGUuZGlkV2FybkFib3V0VW5jYWNoZWRQcm9taXNlIHx8XG4gICAgICAgICAgICAoKHRoZW5hYmxlU3RhdGUuZGlkV2FybkFib3V0VW5jYWNoZWRQcm9taXNlID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJBIGNvbXBvbmVudCB3YXMgc3VzcGVuZGVkIGJ5IGFuIHVuY2FjaGVkIHByb21pc2UuIENyZWF0aW5nIHByb21pc2VzIGluc2lkZSBhIENsaWVudCBDb21wb25lbnQgb3IgaG9vayBpcyBub3QgeWV0IHN1cHBvcnRlZCwgZXhjZXB0IHZpYSBhIFN1c3BlbnNlLWNvbXBhdGlibGUgbGlicmFyeSBvciBmcmFtZXdvcmsuXCJcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgIHRoZW5hYmxlLnRoZW4obm9vcCQzLCBub29wJDMpLFxuICAgICAgICAgICh0aGVuYWJsZSA9IGluZGV4KSk7XG4gICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHRoZW5hYmxlLnZhbHVlO1xuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAoKHRoZW5hYmxlU3RhdGUgPSB0aGVuYWJsZS5yZWFzb24pLFxuICAgICAgICAgICAgY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2godGhlbmFibGVTdGF0ZSksXG4gICAgICAgICAgICB0aGVuYWJsZVN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0aGVuYWJsZS5zdGF0dXMpXG4gICAgICAgICAgICB0aGVuYWJsZS50aGVuKG5vb3AkMywgbm9vcCQzKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG51bGwgIT09IHRoZW5hYmxlU3RhdGUgJiZcbiAgICAgICAgICAgICAgMTAwIDwgdGhlbmFibGVTdGF0ZS5zaGVsbFN1c3BlbmRDb3VudGVyXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiQW4gdW5rbm93biBDb21wb25lbnQgaXMgYW4gYXN5bmMgQ2xpZW50IENvbXBvbmVudC4gT25seSBTZXJ2ZXIgQ29tcG9uZW50cyBjYW4gYmUgYXN5bmMgYXQgdGhlIG1vbWVudC4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IGFkZGluZyBgJ3VzZSBjbGllbnQnYCB0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBzZXJ2ZXIuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUuc3RhdHVzID0gXCJwZW5kaW5nXCI7XG4gICAgICAgICAgICB0aGVuYWJsZVN0YXRlLnRoZW4oXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChmdWxmaWxsZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChcInBlbmRpbmdcIiA9PT0gdGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZnVsZmlsbGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgICAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgICAgICAgICBmdWxmaWxsZWRUaGVuYWJsZS52YWx1ZSA9IGZ1bGZpbGxlZFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgIHZhciByZWplY3RlZFRoZW5hYmxlID0gdGhlbmFibGU7XG4gICAgICAgICAgICAgICAgICByZWplY3RlZFRoZW5hYmxlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgIHJlamVjdGVkVGhlbmFibGUucmVhc29uID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgICAgICByZXR1cm4gdGhlbmFibGUudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgICAgICgodGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlLnJlYXNvbiksXG4gICAgICAgICAgICAgICAgY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2godGhlbmFibGVTdGF0ZSksXG4gICAgICAgICAgICAgICAgdGhlbmFibGVTdGF0ZSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3VzcGVuZGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICBuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViA9ICEwO1xuICAgICAgICAgIHRocm93IFN1c3BlbnNlRXhjZXB0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpIHtcbiAgICAgIGlmIChudWxsID09PSBzdXNwZW5kZWRUaGVuYWJsZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCBhIHN1c3BlbmRlZCB0aGVuYWJsZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciB0aGVuYWJsZSA9IHN1c3BlbmRlZFRoZW5hYmxlO1xuICAgICAgc3VzcGVuZGVkVGhlbmFibGUgPSBudWxsO1xuICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVYgPSAhMTtcbiAgICAgIHJldHVybiB0aGVuYWJsZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2gocmVqZWN0ZWRSZWFzb24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVqZWN0ZWRSZWFzb24gPT09IFN1c3BlbnNlRXhjZXB0aW9uIHx8XG4gICAgICAgIHJlamVjdGVkUmVhc29uID09PSBTdXNwZW5zZUFjdGlvbkV4Y2VwdGlvblxuICAgICAgKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkhvb2tzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBhbiBhc3luYyBjb21wb25lbnQuIFRoaXMgZXJyb3IgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGFjY2lkZW50YWxseSBhZGRpbmcgYCd1c2UgY2xpZW50J2AgdG8gYSBtb2R1bGUgdGhhdCB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGZvciB0aGUgc2VydmVyLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVVcGRhdGVRdWV1ZShmaWJlcikge1xuICAgICAgZmliZXIudXBkYXRlUXVldWUgPSB7XG4gICAgICAgIGJhc2VTdGF0ZTogZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgICAgICBsYXN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICAgICAgc2hhcmVkOiB7IHBlbmRpbmc6IG51bGwsIGxhbmVzOiAwLCBoaWRkZW5DYWxsYmFja3M6IG51bGwgfSxcbiAgICAgICAgY2FsbGJhY2tzOiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gICAgICBjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID09PSBjdXJyZW50ICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHtcbiAgICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnQuYmFzZVN0YXRlLFxuICAgICAgICAgIGZpcnN0QmFzZVVwZGF0ZTogY3VycmVudC5maXJzdEJhc2VVcGRhdGUsXG4gICAgICAgICAgbGFzdEJhc2VVcGRhdGU6IGN1cnJlbnQubGFzdEJhc2VVcGRhdGUsXG4gICAgICAgICAgc2hhcmVkOiBjdXJyZW50LnNoYXJlZCxcbiAgICAgICAgICBjYWxsYmFja3M6IG51bGxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVwZGF0ZShsYW5lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYW5lOiBsYW5lLFxuICAgICAgICB0YWc6IFVwZGF0ZVN0YXRlLFxuICAgICAgICBwYXlsb2FkOiBudWxsLFxuICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlLCBsYW5lKSB7XG4gICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaWJlci51cGRhdGVRdWV1ZTtcbiAgICAgIGlmIChudWxsID09PSB1cGRhdGVRdWV1ZSkgcmV0dXJuIG51bGw7XG4gICAgICB1cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID09PSB1cGRhdGVRdWV1ZSAmJlxuICAgICAgICAhZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZVxuICAgICAgKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkIGZyb20gaW5zaWRlIGFuIHVwZGF0ZSBmdW5jdGlvbi4gVXBkYXRlIGZ1bmN0aW9ucyBzaG91bGQgYmUgcHVyZSwgd2l0aCB6ZXJvIHNpZGUtZWZmZWN0cy4gQ29uc2lkZXIgdXNpbmcgY29tcG9uZW50RGlkVXBkYXRlIG9yIGEgY2FsbGJhY2suXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudDogJXNcIixcbiAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICk7XG4gICAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSAhMDtcbiAgICAgIH1cbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGNvbXBvbmVudE5hbWUgPSB1cGRhdGVRdWV1ZS5wZW5kaW5nKSxcbiAgICAgICAgICBudWxsID09PSBjb21wb25lbnROYW1lXG4gICAgICAgICAgICA/ICh1cGRhdGUubmV4dCA9IHVwZGF0ZSlcbiAgICAgICAgICAgIDogKCh1cGRhdGUubmV4dCA9IGNvbXBvbmVudE5hbWUubmV4dCksXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lLm5leHQgPSB1cGRhdGUpKSxcbiAgICAgICAgICAodXBkYXRlUXVldWUucGVuZGluZyA9IHVwZGF0ZSksXG4gICAgICAgICAgKHVwZGF0ZSA9IGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpKSxcbiAgICAgICAgICBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbnVsbCwgbGFuZSksXG4gICAgICAgICAgdXBkYXRlXG4gICAgICAgICk7XG4gICAgICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHVwZGF0ZVF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuICAgICAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnRhbmdsZVRyYW5zaXRpb25zKHJvb3QsIGZpYmVyLCBsYW5lKSB7XG4gICAgICBmaWJlciA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuICAgICAgaWYgKG51bGwgIT09IGZpYmVyICYmICgoZmliZXIgPSBmaWJlci5zaGFyZWQpLCAwICE9PSAobGFuZSAmIDQxOTQwNDgpKSkge1xuICAgICAgICB2YXIgcXVldWVMYW5lcyA9IGZpYmVyLmxhbmVzO1xuICAgICAgICBxdWV1ZUxhbmVzICY9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgICBsYW5lIHw9IHF1ZXVlTGFuZXM7XG4gICAgICAgIGZpYmVyLmxhbmVzID0gbGFuZTtcbiAgICAgICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgbGFuZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY2FwdHVyZWRVcGRhdGUpIHtcbiAgICAgIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlLFxuICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICgoY3VycmVudCA9IGN1cnJlbnQudXBkYXRlUXVldWUpLCBxdWV1ZSA9PT0gY3VycmVudClcbiAgICAgICkge1xuICAgICAgICB2YXIgbmV3Rmlyc3QgPSBudWxsLFxuICAgICAgICAgIG5ld0xhc3QgPSBudWxsO1xuICAgICAgICBxdWV1ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcbiAgICAgICAgaWYgKG51bGwgIT09IHF1ZXVlKSB7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgICAgICBsYW5lOiBxdWV1ZS5sYW5lLFxuICAgICAgICAgICAgICB0YWc6IHF1ZXVlLnRhZyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogcXVldWUucGF5bG9hZCxcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IG51bGwsXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBudWxsID09PSBuZXdMYXN0XG4gICAgICAgICAgICAgID8gKG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNsb25lKVxuICAgICAgICAgICAgICA6IChuZXdMYXN0ID0gbmV3TGFzdC5uZXh0ID0gY2xvbmUpO1xuICAgICAgICAgICAgcXVldWUgPSBxdWV1ZS5uZXh0O1xuICAgICAgICAgIH0gd2hpbGUgKG51bGwgIT09IHF1ZXVlKTtcbiAgICAgICAgICBudWxsID09PSBuZXdMYXN0XG4gICAgICAgICAgICA/IChuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZSlcbiAgICAgICAgICAgIDogKG5ld0xhc3QgPSBuZXdMYXN0Lm5leHQgPSBjYXB0dXJlZFVwZGF0ZSk7XG4gICAgICAgIH0gZWxzZSBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgcXVldWUgPSB7XG4gICAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50LmJhc2VTdGF0ZSxcbiAgICAgICAgICBmaXJzdEJhc2VVcGRhdGU6IG5ld0ZpcnN0LFxuICAgICAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgICAgIHNoYXJlZDogY3VycmVudC5zaGFyZWQsXG4gICAgICAgICAgY2FsbGJhY2tzOiBjdXJyZW50LmNhbGxiYWNrc1xuICAgICAgICB9O1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgPyAocXVldWUuZmlyc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGUpXG4gICAgICAgIDogKHdvcmtJblByb2dyZXNzLm5leHQgPSBjYXB0dXJlZFVwZGF0ZSk7XG4gICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCkge1xuICAgICAgaWYgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24pIHtcbiAgICAgICAgdmFyIGVudGFuZ2xlZEFjdGlvblRoZW5hYmxlID0gY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlO1xuICAgICAgICBpZiAobnVsbCAhPT0gZW50YW5nbGVkQWN0aW9uVGhlbmFibGUpIHRocm93IGVudGFuZ2xlZEFjdGlvblRoZW5hYmxlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzVXBkYXRlUXVldWUoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2UkanNjb21wJDAsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9ICExO1xuICAgICAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gICAgICBoYXNGb3JjZVVwZGF0ZSA9ICExO1xuICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gcXVldWUuc2hhcmVkO1xuICAgICAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSxcbiAgICAgICAgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSxcbiAgICAgICAgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG4gICAgICBpZiAobnVsbCAhPT0gcGVuZGluZ1F1ZXVlKSB7XG4gICAgICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDtcbiAgICAgICAgdmFyIGxhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlLFxuICAgICAgICAgIGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgICAgIGxhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsO1xuICAgICAgICBudWxsID09PSBsYXN0QmFzZVVwZGF0ZVxuICAgICAgICAgID8gKGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZSlcbiAgICAgICAgICA6IChsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlKTtcbiAgICAgICAgbGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAocGVuZGluZ1F1ZXVlID0gY3VycmVudC5sYXN0QmFzZVVwZGF0ZSksXG4gICAgICAgICAgcGVuZGluZ1F1ZXVlICE9PSBsYXN0QmFzZVVwZGF0ZSAmJlxuICAgICAgICAgICAgKG51bGwgPT09IHBlbmRpbmdRdWV1ZVxuICAgICAgICAgICAgICA/IChjdXJyZW50LmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZSlcbiAgICAgICAgICAgICAgOiAocGVuZGluZ1F1ZXVlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGUpLFxuICAgICAgICAgICAgKGN1cnJlbnQubGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZSkpKTtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsICE9PSBmaXJzdEJhc2VVcGRhdGUpIHtcbiAgICAgICAgdmFyIG5ld1N0YXRlID0gcXVldWUuYmFzZVN0YXRlO1xuICAgICAgICBsYXN0QmFzZVVwZGF0ZSA9IDA7XG4gICAgICAgIGN1cnJlbnQgPSBmaXJzdFBlbmRpbmdVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZSA9IG51bGw7XG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciB1cGRhdGVMYW5lID0gcGVuZGluZ1F1ZXVlLmxhbmUgJiAtNTM2ODcwOTEzLFxuICAgICAgICAgICAgaXNIaWRkZW5VcGRhdGUgPSB1cGRhdGVMYW5lICE9PSBwZW5kaW5nUXVldWUubGFuZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0hpZGRlblVwZGF0ZVxuICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIHVwZGF0ZUxhbmUpID09PSB1cGRhdGVMYW5lXG4gICAgICAgICAgICAgIDogKHJlbmRlckxhbmVzICYgdXBkYXRlTGFuZSkgPT09IHVwZGF0ZUxhbmVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIDAgIT09IHVwZGF0ZUxhbmUgJiZcbiAgICAgICAgICAgICAgdXBkYXRlTGFuZSA9PT0gY3VycmVudEVudGFuZ2xlZExhbmUgJiZcbiAgICAgICAgICAgICAgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSAhMCk7XG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC5uZXh0ID1cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsYW5lOiAwLFxuICAgICAgICAgICAgICAgICAgdGFnOiBwZW5kaW5nUXVldWUudGFnLFxuICAgICAgICAgICAgICAgICAgcGF5bG9hZDogcGVuZGluZ1F1ZXVlLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgdXBkYXRlTGFuZSA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICB2YXIgcGFydGlhbFN0YXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICAgICAgICB2YXIgbmV4dFByb3BzID0gcHJvcHMsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZSRqc2NvbXAkMDtcbiAgICAgICAgICAgICAgc3dpdGNoIChwYXJ0aWFsU3RhdGUudGFnKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBSZXBsYWNlU3RhdGU6XG4gICAgICAgICAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBwYXJ0aWFsU3RhdGUucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwYXJ0aWFsU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICEwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gcGFydGlhbFN0YXRlLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1cGRhdGVMYW5lLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsU3RhdGUuY2FsbChpbnN0YW5jZSwgbmV3U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICExO1xuICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG5ld1N0YXRlID0gcGFydGlhbFN0YXRlO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjYXNlIENhcHR1cmVVcGRhdGU6XG4gICAgICAgICAgICAgICAgICB1cGRhdGVMYW5lLmZsYWdzID0gKHVwZGF0ZUxhbmUuZmxhZ3MgJiAtNjU1MzcpIHwgMTI4O1xuICAgICAgICAgICAgICAgIGNhc2UgVXBkYXRlU3RhdGU6XG4gICAgICAgICAgICAgICAgICBuZXh0U3RhdGUgPSBwYXJ0aWFsU3RhdGUucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXh0U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICEwO1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBuZXh0U3RhdGUuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUxhbmUubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKGluc3RhbmNlLCBuZXdTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gITE7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgcGFydGlhbFN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IHBhcnRpYWxTdGF0ZSB8fCB2b2lkIDAgPT09IHBhcnRpYWxTdGF0ZSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIG5ld1N0YXRlID0gYXNzaWduKHt9LCBuZXdTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY2FzZSBGb3JjZVVwZGF0ZTpcbiAgICAgICAgICAgICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gITA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZUxhbmUgPSBwZW5kaW5nUXVldWUuY2FsbGJhY2s7XG4gICAgICAgICAgICBudWxsICE9PSB1cGRhdGVMYW5lICYmXG4gICAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNjQpLFxuICAgICAgICAgICAgICBpc0hpZGRlblVwZGF0ZSAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MiksXG4gICAgICAgICAgICAgIChpc0hpZGRlblVwZGF0ZSA9IHF1ZXVlLmNhbGxiYWNrcyksXG4gICAgICAgICAgICAgIG51bGwgPT09IGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgICAgICAgPyAocXVldWUuY2FsbGJhY2tzID0gW3VwZGF0ZUxhbmVdKVxuICAgICAgICAgICAgICAgIDogaXNIaWRkZW5VcGRhdGUucHVzaCh1cGRhdGVMYW5lKSk7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSB7XG4gICAgICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgICAgIHRhZzogcGVuZGluZ1F1ZXVlLnRhZyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogcGVuZGluZ1F1ZXVlLnBheWxvYWQsXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiBwZW5kaW5nUXVldWUuY2FsbGJhY2ssXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgICAgICAgICAgPyAoKGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGN1cnJlbnQgPSBpc0hpZGRlblVwZGF0ZSksXG4gICAgICAgICAgICAgICAgICAobGFzdFBlbmRpbmdVcGRhdGUgPSBuZXdTdGF0ZSkpXG4gICAgICAgICAgICAgICAgOiAoY3VycmVudCA9IGN1cnJlbnQubmV4dCA9IGlzSGlkZGVuVXBkYXRlKSxcbiAgICAgICAgICAgICAgKGxhc3RCYXNlVXBkYXRlIHw9IHVwZGF0ZUxhbmUpO1xuICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IHBlbmRpbmdRdWV1ZS5uZXh0O1xuICAgICAgICAgIGlmIChudWxsID09PSBwZW5kaW5nUXVldWUpXG4gICAgICAgICAgICBpZiAoKChwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZyksIG51bGwgPT09IHBlbmRpbmdRdWV1ZSkpXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSBwZW5kaW5nUXVldWUpLFxuICAgICAgICAgICAgICAgIChwZW5kaW5nUXVldWUgPSBpc0hpZGRlblVwZGF0ZS5uZXh0KSxcbiAgICAgICAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUubmV4dCA9IG51bGwpLFxuICAgICAgICAgICAgICAgIChxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGlzSGlkZGVuVXBkYXRlKSxcbiAgICAgICAgICAgICAgICAocXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsKTtcbiAgICAgICAgfSB3aGlsZSAoMSk7XG4gICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiYgKGxhc3RQZW5kaW5nVXBkYXRlID0gbmV3U3RhdGUpO1xuICAgICAgICBxdWV1ZS5iYXNlU3RhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGN1cnJlbnQ7XG4gICAgICAgIG51bGwgPT09IGZpcnN0QmFzZVVwZGF0ZSAmJiAocXVldWUuc2hhcmVkLmxhbmVzID0gMCk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSBsYXN0QmFzZVVwZGF0ZTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBsYXN0QmFzZVVwZGF0ZTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfVxuICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY2FsbGJhY2spXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgYXMgY2FsbGJhY2suIEV4cGVjdGVkIGEgZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6IFwiICtcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICk7XG4gICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIaWRkZW5DYWxsYmFja3ModXBkYXRlUXVldWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciBoaWRkZW5DYWxsYmFja3MgPSB1cGRhdGVRdWV1ZS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzO1xuICAgICAgaWYgKG51bGwgIT09IGhpZGRlbkNhbGxiYWNrcylcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB1cGRhdGVRdWV1ZS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzID0gbnVsbCwgdXBkYXRlUXVldWUgPSAwO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlIDwgaGlkZGVuQ2FsbGJhY2tzLmxlbmd0aDtcbiAgICAgICAgICB1cGRhdGVRdWV1ZSsrXG4gICAgICAgIClcbiAgICAgICAgICBjYWxsQ2FsbGJhY2soaGlkZGVuQ2FsbGJhY2tzW3VwZGF0ZVF1ZXVlXSwgY29udGV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdENhbGxiYWNrcyh1cGRhdGVRdWV1ZSwgY29udGV4dCkge1xuICAgICAgdmFyIGNhbGxiYWNrcyA9IHVwZGF0ZVF1ZXVlLmNhbGxiYWNrcztcbiAgICAgIGlmIChudWxsICE9PSBjYWxsYmFja3MpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdXBkYXRlUXVldWUuY2FsbGJhY2tzID0gbnVsbCwgdXBkYXRlUXVldWUgPSAwO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlIDwgY2FsbGJhY2tzLmxlbmd0aDtcbiAgICAgICAgICB1cGRhdGVRdWV1ZSsrXG4gICAgICAgIClcbiAgICAgICAgICBjYWxsQ2FsbGJhY2soY2FsbGJhY2tzW3VwZGF0ZVF1ZXVlXSwgY29udGV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hIaWRkZW5Db250ZXh0KGZpYmVyLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzID0gZW50YW5nbGVkUmVuZGVyTGFuZXM7XG4gICAgICBwdXNoKHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvciwgcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzLCBmaWJlcik7XG4gICAgICBwdXNoKGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IsIGNvbnRleHQsIGZpYmVyKTtcbiAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzIHwgY29udGV4dC5iYXNlTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2soZmliZXIpIHtcbiAgICAgIHB1c2gocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLCBlbnRhbmdsZWRSZW5kZXJMYW5lcywgZmliZXIpO1xuICAgICAgcHVzaChcbiAgICAgICAgY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvcixcbiAgICAgICAgY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvci5jdXJyZW50LFxuICAgICAgICBmaWJlclxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wSGlkZGVuQ29udGV4dChmaWJlcikge1xuICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IuY3VycmVudDtcbiAgICAgIHBvcChjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICBwb3AocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50SG9va1R5cGVzRGV2KCkge1xuICAgICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG4gICAgICBudWxsID09PSBob29rVHlwZXNEZXZcbiAgICAgICAgPyAoaG9va1R5cGVzRGV2ID0gW2hvb2tOYW1lXSlcbiAgICAgICAgOiBob29rVHlwZXNEZXYucHVzaChob29rTmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAgICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBob29rVHlwZXNEZXYgJiZcbiAgICAgICAgKGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2KyssXG4gICAgICAgIGhvb2tUeXBlc0Rldltob29rVHlwZXNVcGRhdGVJbmRleERldl0gIT09IGhvb2tOYW1lKVxuICAgICAgKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihjdXJyZW50bHlSZW5kZXJpbmdGaWJlcik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSAmJlxuICAgICAgICAgIChkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpLFxuICAgICAgICAgIG51bGwgIT09IGhvb2tUeXBlc0RldilcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9yICh2YXIgdGFibGUgPSBcIlwiLCBpID0gMDsgaSA8PSBob29rVHlwZXNVcGRhdGVJbmRleERldjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgb2xkSG9va05hbWUgPSBob29rVHlwZXNEZXZbaV0sXG4gICAgICAgICAgICAgIG5ld0hvb2tOYW1lID1cbiAgICAgICAgICAgICAgICBpID09PSBob29rVHlwZXNVcGRhdGVJbmRleERldiA/IGhvb2tOYW1lIDogb2xkSG9va05hbWU7XG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICBvbGRIb29rTmFtZSA9IGkgKyAxICsgXCIuIFwiICsgb2xkSG9va05hbWU7XG4gICAgICAgICAgICAgIDMwID4gb2xkSG9va05hbWUubGVuZ3RoO1xuXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIG9sZEhvb2tOYW1lICs9IFwiIFwiO1xuICAgICAgICAgICAgb2xkSG9va05hbWUgKz0gbmV3SG9va05hbWUgKyBcIlxcblwiO1xuICAgICAgICAgICAgdGFibGUgKz0gb2xkSG9va05hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0IGhhcyBkZXRlY3RlZCBhIGNoYW5nZSBpbiB0aGUgb3JkZXIgb2YgSG9va3MgY2FsbGVkIGJ5ICVzLiBUaGlzIHdpbGwgbGVhZCB0byBidWdzIGFuZCBlcnJvcnMgaWYgbm90IGZpeGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgUnVsZXMgb2YgSG9va3M6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcnVsZXMtb2YtaG9va3NcXG5cXG4gICBQcmV2aW91cyByZW5kZXIgICAgICAgICAgICBOZXh0IHJlbmRlclxcbiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiVzICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXFxuXCIsXG4gICAgICAgICAgICBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgdGFibGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpIHtcbiAgICAgIHZvaWQgMCA9PT0gZGVwcyB8fFxuICAgICAgICBudWxsID09PSBkZXBzIHx8XG4gICAgICAgIGlzQXJyYXlJbXBsKGRlcHMpIHx8XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IHRoYXQgaXMgbm90IGFuIGFycmF5IChpbnN0ZWFkLCByZWNlaXZlZCBgJXNgKS4gV2hlbiBzcGVjaWZpZWQsIHRoZSBmaW5hbCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5LlwiLFxuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2LFxuICAgICAgICAgIHR5cGVvZiBkZXBzXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5PblVzZUZvcm1TdGF0ZUluRGV2KCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyKTtcbiAgICAgIGRpZFdhcm5BYm91dFVzZUZvcm1TdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkgfHxcbiAgICAgICAgKGRpZFdhcm5BYm91dFVzZUZvcm1TdGF0ZS5hZGQoY29tcG9uZW50TmFtZSksXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJSZWFjdERPTS51c2VGb3JtU3RhdGUgaGFzIGJlZW4gcmVuYW1lZCB0byBSZWFjdC51c2VBY3Rpb25TdGF0ZS4gUGxlYXNlIHVwZGF0ZSAlcyB0byB1c2UgUmVhY3QudXNlQWN0aW9uU3RhdGUuXCIsXG4gICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGhyb3dJbnZhbGlkSG9va0Vycm9yKCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSB7XG4gICAgICBpZiAoaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMpIHJldHVybiAhMTtcbiAgICAgIGlmIChudWxsID09PSBwcmV2RGVwcylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IGR1cmluZyB0aGlzIHJlbmRlciwgYnV0IG5vdCBkdXJpbmcgdGhlIHByZXZpb3VzIHJlbmRlci4gRXZlbiB0aG91Z2ggdGhlIGZpbmFsIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBpdHMgdHlwZSBjYW5ub3QgY2hhbmdlIGJldHdlZW4gcmVuZGVycy5cIixcbiAgICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2XG4gICAgICAgICAgKSxcbiAgICAgICAgICAhMVxuICAgICAgICApO1xuICAgICAgbmV4dERlcHMubGVuZ3RoICE9PSBwcmV2RGVwcy5sZW5ndGggJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlRoZSBmaW5hbCBhcmd1bWVudCBwYXNzZWQgdG8gJXMgY2hhbmdlZCBzaXplIGJldHdlZW4gcmVuZGVycy4gVGhlIG9yZGVyIGFuZCBzaXplIG9mIHRoaXMgYXJyYXkgbXVzdCByZW1haW4gY29uc3RhbnQuXFxuXFxuUHJldmlvdXM6ICVzXFxuSW5jb21pbmc6ICVzXCIsXG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYsXG4gICAgICAgICAgXCJbXCIgKyBwcmV2RGVwcy5qb2luKFwiLCBcIikgKyBcIl1cIixcbiAgICAgICAgICBcIltcIiArIG5leHREZXBzLmpvaW4oXCIsIFwiKSArIFwiXVwiXG4gICAgICAgICk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmICghb2JqZWN0SXMobmV4dERlcHNbaV0sIHByZXZEZXBzW2ldKSkgcmV0dXJuICExO1xuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW5kZXJXaXRoSG9va3MoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBwcm9wcyxcbiAgICAgIHNlY29uZEFyZyxcbiAgICAgIG5leHRSZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgcmVuZGVyTGFuZXMgPSBuZXh0UmVuZGVyTGFuZXM7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgaG9va1R5cGVzRGV2ID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzIDogbnVsbDtcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgY3VycmVudC50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgaWYgKFxuICAgICAgICBcIltvYmplY3QgQXN5bmNGdW5jdGlvbl1cIiA9PT1cbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ29tcG9uZW50KSB8fFxuICAgICAgICBcIltvYmplY3QgQXN5bmNHZW5lcmF0b3JGdW5jdGlvbl1cIiA9PT1cbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ29tcG9uZW50KVxuICAgICAgKVxuICAgICAgICAobmV4dFJlbmRlckxhbmVzID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihjdXJyZW50bHlSZW5kZXJpbmdGaWJlcikpLFxuICAgICAgICAgIGRpZFdhcm5BYm91dEFzeW5jQ2xpZW50Q29tcG9uZW50LmhhcyhuZXh0UmVuZGVyTGFuZXMpIHx8XG4gICAgICAgICAgICAoZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQuYWRkKG5leHRSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIiVzIGlzIGFuIGFzeW5jIENsaWVudCBDb21wb25lbnQuIE9ubHkgU2VydmVyIENvbXBvbmVudHMgY2FuIGJlIGFzeW5jIGF0IHRoZSBtb21lbnQuIFRoaXMgZXJyb3IgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGFjY2lkZW50YWxseSBhZGRpbmcgYCd1c2UgY2xpZW50J2AgdG8gYSBtb2R1bGUgdGhhdCB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGZvciB0aGUgc2VydmVyLlwiLFxuICAgICAgICAgICAgICBudWxsID09PSBuZXh0UmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICA/IFwiQW4gdW5rbm93biBDb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDogXCI8XCIgKyBuZXh0UmVuZGVyTGFuZXMgKyBcIj5cIlxuICAgICAgICAgICAgKSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gMDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPVxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgID8gSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVlxuICAgICAgICAgIDogbnVsbCAhPT0gaG9va1R5cGVzRGV2XG4gICAgICAgICAgICA/IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVZcbiAgICAgICAgICAgIDogSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgPSBuZXh0UmVuZGVyTGFuZXMgPVxuICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpICE9PSBOb01vZGU7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBjYWxsQ29tcG9uZW50SW5ERVYoQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnKTtcbiAgICAgIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gITE7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgJiZcbiAgICAgICAgKGNoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzQWdhaW4oXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICAgIHNlY29uZEFyZ1xuICAgICAgICApKTtcbiAgICAgIGlmIChuZXh0UmVuZGVyTGFuZXMpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzQWdhaW4oXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgc2Vjb25kQXJnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZpbmlzaFJlbmRlcmluZ0hvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluaXNoUmVuZGVyaW5nSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGhvb2tUeXBlc0RldjtcbiAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llc1xuICAgICAgICA/IG51bGwgIT09IHRoZW5hYmxlU3RhdGUkMSAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSB7XG4gICAgICAgICAgICBsYW5lczogMCxcbiAgICAgICAgICAgIGZpcnN0Q29udGV4dDogbnVsbCxcbiAgICAgICAgICAgIF9kZWJ1Z1RoZW5hYmxlU3RhdGU6IHRoZW5hYmxlU3RhdGUkMVxuICAgICAgICAgIH0pXG4gICAgICAgIDogKHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcy5fZGVidWdUaGVuYWJsZVN0YXRlID0gdGhlbmFibGVTdGF0ZSQxKTtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG4gICAgICB2YXIgZGlkUmVuZGVyVG9vRmV3SG9va3MgPVxuICAgICAgICBudWxsICE9PSBjdXJyZW50SG9vayAmJiBudWxsICE9PSBjdXJyZW50SG9vay5uZXh0O1xuICAgICAgcmVuZGVyTGFuZXMgPSAwO1xuICAgICAgaG9va1R5cGVzRGV2ID1cbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPVxuICAgICAgICBjdXJyZW50SG9vayA9XG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID1cbiAgICAgICAgICBudWxsO1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgKGN1cnJlbnQuZmxhZ3MgJiA2NTAxMTcxMikgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDY1MDExNzEyKSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEV4cGVjdGVkIHN0YXRpYyBmbGFnIHdhcyBtaXNzaW5nLiBQbGVhc2Ugbm90aWZ5IHRoZSBSZWFjdCB0ZWFtLlwiXG4gICAgICAgICk7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITE7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciQxID0gMDtcbiAgICAgIHRoZW5hYmxlU3RhdGUkMSA9IG51bGw7XG4gICAgICBpZiAoZGlkUmVuZGVyVG9vRmV3SG9va3MpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiUmVuZGVyZWQgZmV3ZXIgaG9va3MgdGhhbiBleHBlY3RlZC4gVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IGFuIGFjY2lkZW50YWwgZWFybHkgcmV0dXJuIHN0YXRlbWVudC5cIlxuICAgICAgICApO1xuICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlIHx8XG4gICAgICAgICgoY3VycmVudCA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzKSxcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgIGNoZWNrSWZDb250ZXh0Q2hhbmdlZChjdXJyZW50KSAmJlxuICAgICAgICAgIChkaWRSZWNlaXZlVXBkYXRlID0gITApKTtcbiAgICAgIG5lZWRzVG9SZXNldFN1c3BlbmRlZFRoZW5hYmxlREVWXG4gICAgICAgID8gKChuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViA9ICExKSwgKGN1cnJlbnQgPSAhMCkpXG4gICAgICAgIDogKGN1cnJlbnQgPSAhMSk7XG4gICAgICBjdXJyZW50ICYmXG4gICAgICAgICgod29ya0luUHJvZ3Jlc3MgPVxuICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpIHx8IFwiVW5rbm93blwiKSxcbiAgICAgICAgZGlkV2FybkFib3V0VXNlV3JhcHBlZEluVHJ5Q2F0Y2guaGFzKHdvcmtJblByb2dyZXNzKSB8fFxuICAgICAgICAgIGRpZFdhcm5BYm91dEFzeW5jQ2xpZW50Q29tcG9uZW50Lmhhcyh3b3JrSW5Qcm9ncmVzcykgfHxcbiAgICAgICAgICAoZGlkV2FybkFib3V0VXNlV3JhcHBlZEluVHJ5Q2F0Y2guYWRkKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJgdXNlYCB3YXMgY2FsbGVkIGZyb20gaW5zaWRlIGEgdHJ5L2NhdGNoIGJsb2NrLiBUaGlzIGlzIG5vdCBhbGxvd2VkIGFuZCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUbyBoYW5kbGUgZXJyb3JzIHRyaWdnZXJlZCBieSBgdXNlYCwgd3JhcCB5b3VyIGNvbXBvbmVudCBpbiBhIGVycm9yIGJvdW5kYXJ5LlwiXG4gICAgICAgICAgKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW5kZXJXaXRoSG9va3NBZ2Fpbih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnKSB7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgdmFyIG51bWJlck9mUmVSZW5kZXJzID0gMDtcbiAgICAgIGRvIHtcbiAgICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzICYmICh0aGVuYWJsZVN0YXRlJDEgPSBudWxsKTtcbiAgICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDA7XG4gICAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9ICExO1xuICAgICAgICBpZiAobnVtYmVyT2ZSZVJlbmRlcnMgPj0gUkVfUkVOREVSX0xJTUlUKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJUb28gbWFueSByZS1yZW5kZXJzLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiByZW5kZXJzIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIG51bWJlck9mUmVSZW5kZXJzICs9IDE7XG4gICAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gITE7XG4gICAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IGN1cnJlbnRIb29rID0gbnVsbDtcbiAgICAgICAgaWYgKG51bGwgIT0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUpIHtcbiAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICAgICAgICBjaGlsZHJlbi5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICBjaGlsZHJlbi5ldmVudHMgPSBudWxsO1xuICAgICAgICAgIGNoaWxkcmVuLnN0b3JlcyA9IG51bGw7XG4gICAgICAgICAgbnVsbCAhPSBjaGlsZHJlbi5tZW1vQ2FjaGUgJiYgKGNoaWxkcmVuLm1lbW9DYWNoZS5pbmRleCA9IDApO1xuICAgICAgICB9XG4gICAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG4gICAgICAgIGNoaWxkcmVuID0gY2FsbENvbXBvbmVudEluREVWKENvbXBvbmVudCwgcHJvcHMsIHNlY29uZEFyZyk7XG4gICAgICB9IHdoaWxlIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUcmFuc2l0aW9uQXdhcmVIb3N0Q29tcG9uZW50KCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5ILFxuICAgICAgICBtYXliZVRoZW5hYmxlID0gZGlzcGF0Y2hlci51c2VTdGF0ZSgpWzBdO1xuICAgICAgbWF5YmVUaGVuYWJsZSA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG1heWJlVGhlbmFibGUudGhlblxuICAgICAgICAgID8gdXNlVGhlbmFibGUobWF5YmVUaGVuYWJsZSlcbiAgICAgICAgICA6IG1heWJlVGhlbmFibGU7XG4gICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2hlci51c2VTdGF0ZSgpWzBdO1xuICAgICAgKG51bGwgIT09IGN1cnJlbnRIb29rID8gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSA6IG51bGwpICE9PVxuICAgICAgICBkaXNwYXRjaGVyICYmIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5mbGFncyB8PSAxMDI0KTtcbiAgICAgIHJldHVybiBtYXliZVRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0RpZFJlbmRlcklkSG9vaygpIHtcbiAgICAgIHZhciBkaWRSZW5kZXJJZEhvb2sgPSAwICE9PSBsb2NhbElkQ291bnRlcjtcbiAgICAgIGxvY2FsSWRDb3VudGVyID0gMDtcbiAgICAgIHJldHVybiBkaWRSZW5kZXJJZEhvb2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbGFuZXMpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID1cbiAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZVxuICAgICAgICAgID8gd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAtNDAyNjU1MjM3XG4gICAgICAgICAgOiB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIC0yMDUzO1xuICAgICAgY3VycmVudC5sYW5lcyAmPSB+bGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc2V0SG9va3NPblVud2luZCh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MucXVldWU7XG4gICAgICAgICAgbnVsbCAhPT0gcXVldWUgJiYgKHF1ZXVlLnBlbmRpbmcgPSBudWxsKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9ICExO1xuICAgICAgfVxuICAgICAgcmVuZGVyTGFuZXMgPSAwO1xuICAgICAgaG9va1R5cGVzRGV2ID1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID1cbiAgICAgICAgY3VycmVudEhvb2sgPVxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9XG4gICAgICAgICAgbnVsbDtcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSAhMTtcbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSBsb2NhbElkQ291bnRlciA9IDA7XG4gICAgICB0aGVuYWJsZVN0YXRlJDEgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgICAgIHZhciBob29rID0ge1xuICAgICAgICBtZW1vaXplZFN0YXRlOiBudWxsLFxuICAgICAgICBiYXNlU3RhdGU6IG51bGwsXG4gICAgICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICAgICAgcXVldWU6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc0hvb2tcbiAgICAgICAgPyAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IGhvb2spXG4gICAgICAgIDogKHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gaG9vayk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudEhvb2spIHtcbiAgICAgICAgdmFyIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgbmV4dEN1cnJlbnRIb29rID1cbiAgICAgICAgICBudWxsICE9PSBuZXh0Q3VycmVudEhvb2sgPyBuZXh0Q3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG4gICAgICB9IGVsc2UgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgICAgIHZhciBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID1cbiAgICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NIb29rXG4gICAgICAgICAgPyBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgOiB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgICAgIGlmIChudWxsICE9PSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rKVxuICAgICAgICAod29ya0luUHJvZ3Jlc3NIb29rID0gbmV4dFdvcmtJblByb2dyZXNzSG9vayksXG4gICAgICAgICAgKGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAobnVsbCA9PT0gbmV4dEN1cnJlbnRIb29rKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmFsdGVybmF0ZSlcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIlVwZGF0ZSBob29rIGNhbGxlZCBvbiBpbml0aWFsIHJlbmRlci4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHRocm93IEVycm9yKFwiUmVuZGVyZWQgbW9yZSBob29rcyB0aGFuIGR1cmluZyB0aGUgcHJldmlvdXMgcmVuZGVyLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgICAgICAgbmV4dEN1cnJlbnRIb29rID0ge1xuICAgICAgICAgIG1lbW9pemVkU3RhdGU6IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50SG9vay5iYXNlU3RhdGUsXG4gICAgICAgICAgYmFzZVF1ZXVlOiBjdXJyZW50SG9vay5iYXNlUXVldWUsXG4gICAgICAgICAgcXVldWU6IGN1cnJlbnRIb29rLnF1ZXVlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NIb29rXG4gICAgICAgICAgPyAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9XG4gICAgICAgICAgICAgIG5leHRDdXJyZW50SG9vaylcbiAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IG5leHRDdXJyZW50SG9vayk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkge1xuICAgICAgcmV0dXJuIHsgbGFzdEVmZmVjdDogbnVsbCwgZXZlbnRzOiBudWxsLCBzdG9yZXM6IG51bGwsIG1lbW9DYWNoZTogbnVsbCB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiB1c2VUaGVuYWJsZSh0aGVuYWJsZSkge1xuICAgICAgdmFyIGluZGV4ID0gdGhlbmFibGVJbmRleENvdW50ZXIkMTtcbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgKz0gMTtcbiAgICAgIG51bGwgPT09IHRoZW5hYmxlU3RhdGUkMSAmJiAodGhlbmFibGVTdGF0ZSQxID0gY3JlYXRlVGhlbmFibGVTdGF0ZSgpKTtcbiAgICAgIHRoZW5hYmxlID0gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSQxLCB0aGVuYWJsZSwgaW5kZXgpO1xuICAgICAgaW5kZXggPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcjtcbiAgICAgIG51bGwgPT09XG4gICAgICAgIChudWxsID09PSB3b3JrSW5Qcm9ncmVzc0hvb2tcbiAgICAgICAgICA/IGluZGV4Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICA6IHdvcmtJblByb2dyZXNzSG9vay5uZXh0KSAmJlxuICAgICAgICAoKGluZGV4ID0gaW5kZXguYWx0ZXJuYXRlKSxcbiAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPVxuICAgICAgICAgIG51bGwgIT09IGluZGV4ICYmIG51bGwgIT09IGluZGV4Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgID8gSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVlxuICAgICAgICAgICAgOiBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYpKTtcbiAgICAgIHJldHVybiB0aGVuYWJsZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNlKHVzYWJsZSkge1xuICAgICAgaWYgKG51bGwgIT09IHVzYWJsZSAmJiBcIm9iamVjdFwiID09PSB0eXBlb2YgdXNhYmxlKSB7XG4gICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB1c2FibGUudGhlbikgcmV0dXJuIHVzZVRoZW5hYmxlKHVzYWJsZSk7XG4gICAgICAgIGlmICh1c2FibGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSkgcmV0dXJuIHJlYWRDb250ZXh0KHVzYWJsZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcIkFuIHVuc3VwcG9ydGVkIHR5cGUgd2FzIHBhc3NlZCB0byB1c2UoKTogXCIgKyBTdHJpbmcodXNhYmxlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVzZU1lbW9DYWNoZShzaXplKSB7XG4gICAgICB2YXIgbWVtb0NhY2hlID0gbnVsbCxcbiAgICAgICAgdXBkYXRlUXVldWUgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci51cGRhdGVRdWV1ZTtcbiAgICAgIG51bGwgIT09IHVwZGF0ZVF1ZXVlICYmIChtZW1vQ2FjaGUgPSB1cGRhdGVRdWV1ZS5tZW1vQ2FjaGUpO1xuICAgICAgaWYgKG51bGwgPT0gbWVtb0NhY2hlKSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIuYWx0ZXJuYXRlO1xuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC5tZW1vQ2FjaGUpLFxuICAgICAgICAgICAgbnVsbCAhPSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIChtZW1vQ2FjaGUgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogY3VycmVudC5kYXRhLm1hcChmdW5jdGlvbiAoYXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheS5zbGljZSgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGluZGV4OiAwXG4gICAgICAgICAgICAgIH0pKSk7XG4gICAgICB9XG4gICAgICBudWxsID09IG1lbW9DYWNoZSAmJiAobWVtb0NhY2hlID0geyBkYXRhOiBbXSwgaW5kZXg6IDAgfSk7XG4gICAgICBudWxsID09PSB1cGRhdGVRdWV1ZSAmJlxuICAgICAgICAoKHVwZGF0ZVF1ZXVlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpKSxcbiAgICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWUpKTtcbiAgICAgIHVwZGF0ZVF1ZXVlLm1lbW9DYWNoZSA9IG1lbW9DYWNoZTtcbiAgICAgIHVwZGF0ZVF1ZXVlID0gbWVtb0NhY2hlLmRhdGFbbWVtb0NhY2hlLmluZGV4XTtcbiAgICAgIGlmICh2b2lkIDAgPT09IHVwZGF0ZVF1ZXVlIHx8IGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzKVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIHVwZGF0ZVF1ZXVlID0gbWVtb0NhY2hlLmRhdGFbbWVtb0NhY2hlLmluZGV4XSA9IEFycmF5KHNpemUpLFxuICAgICAgICAgICAgY3VycmVudCA9IDA7XG4gICAgICAgICAgY3VycmVudCA8IHNpemU7XG4gICAgICAgICAgY3VycmVudCsrXG4gICAgICAgIClcbiAgICAgICAgICB1cGRhdGVRdWV1ZVtjdXJyZW50XSA9IFJFQUNUX01FTU9fQ0FDSEVfU0VOVElORUw7XG4gICAgICBlbHNlXG4gICAgICAgIHVwZGF0ZVF1ZXVlLmxlbmd0aCAhPT0gc2l6ZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIGEgY29uc3RhbnQgc2l6ZSBhcmd1bWVudCBmb3IgZWFjaCBpbnZvY2F0aW9uIG9mIHVzZU1lbW9DYWNoZS4gVGhlIHByZXZpb3VzIGNhY2hlIHdhcyBhbGxvY2F0ZWQgd2l0aCBzaXplICVzIGJ1dCBzaXplICVzIHdhcyByZXF1ZXN0ZWQuXCIsXG4gICAgICAgICAgICB1cGRhdGVRdWV1ZS5sZW5ndGgsXG4gICAgICAgICAgICBzaXplXG4gICAgICAgICAgKTtcbiAgICAgIG1lbW9DYWNoZS5pbmRleCsrO1xuICAgICAgcmV0dXJuIHVwZGF0ZVF1ZXVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiYXNpY1N0YXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYWN0aW9uID8gYWN0aW9uKHN0YXRlKSA6IGFjdGlvbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGlmICh2b2lkIDAgIT09IGluaXQpIHtcbiAgICAgICAgdmFyIGluaXRpYWxTdGF0ZSA9IGluaXQoaW5pdGlhbEFyZyk7XG4gICAgICAgIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5pdChpbml0aWFsQXJnKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxBcmc7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICAgIHJlZHVjZXIgPSB7XG4gICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgIGxhbmVzOiAwLFxuICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogcmVkdWNlcixcbiAgICAgICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICAgICAgfTtcbiAgICAgIGhvb2sucXVldWUgPSByZWR1Y2VyO1xuICAgICAgcmVkdWNlciA9IHJlZHVjZXIuZGlzcGF0Y2ggPSBkaXNwYXRjaFJlZHVjZXJBY3Rpb24uYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIsXG4gICAgICAgIHJlZHVjZXJcbiAgICAgICk7XG4gICAgICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgcmVkdWNlcl07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXIocmVkdWNlcikge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VySW1wbChob29rLCBjdXJyZW50SG9vaywgcmVkdWNlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXJJbXBsKGhvb2ssIGN1cnJlbnQsIHJlZHVjZXIpIHtcbiAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG4gICAgICBpZiAobnVsbCA9PT0gcXVldWUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gWW91IGFyZSBsaWtlbHkgY2FsbGluZyBIb29rcyBjb25kaXRpb25hbGx5LCB3aGljaCBpcyBub3QgYWxsb3dlZC4gKGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaW52YWxpZC1ob29rLWNhbGwpXCJcbiAgICAgICAgKTtcbiAgICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyO1xuICAgICAgdmFyIGJhc2VRdWV1ZSA9IGhvb2suYmFzZVF1ZXVlLFxuICAgICAgICBwZW5kaW5nUXVldWUgPSBxdWV1ZS5wZW5kaW5nO1xuICAgICAgaWYgKG51bGwgIT09IHBlbmRpbmdRdWV1ZSkge1xuICAgICAgICBpZiAobnVsbCAhPT0gYmFzZVF1ZXVlKSB7XG4gICAgICAgICAgdmFyIGJhc2VGaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgICAgIGJhc2VRdWV1ZS5uZXh0ID0gcGVuZGluZ1F1ZXVlLm5leHQ7XG4gICAgICAgICAgcGVuZGluZ1F1ZXVlLm5leHQgPSBiYXNlRmlyc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudC5iYXNlUXVldWUgIT09IGJhc2VRdWV1ZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkludGVybmFsIGVycm9yOiBFeHBlY3RlZCB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIHRvIGJlIGEgY2xvbmUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICApO1xuICAgICAgICBjdXJyZW50LmJhc2VRdWV1ZSA9IGJhc2VRdWV1ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgICB9XG4gICAgICBwZW5kaW5nUXVldWUgPSBob29rLmJhc2VTdGF0ZTtcbiAgICAgIGlmIChudWxsID09PSBiYXNlUXVldWUpIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBjdXJyZW50ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgICAgIHZhciBuZXdCYXNlUXVldWVGaXJzdCA9IChiYXNlRmlyc3QgPSBudWxsKSxcbiAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbnVsbCxcbiAgICAgICAgICB1cGRhdGUgPSBjdXJyZW50LFxuICAgICAgICAgIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSAhMTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciB1cGRhdGVMYW5lID0gdXBkYXRlLmxhbmUgJiAtNTM2ODcwOTEzO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHVwZGF0ZUxhbmUgIT09IHVwZGF0ZS5sYW5lXG4gICAgICAgICAgICAgID8gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgdXBkYXRlTGFuZSkgPT09IHVwZGF0ZUxhbmVcbiAgICAgICAgICAgICAgOiAocmVuZGVyTGFuZXMgJiB1cGRhdGVMYW5lKSA9PT0gdXBkYXRlTGFuZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIHJldmVydExhbmUgPSB1cGRhdGUucmV2ZXJ0TGFuZTtcbiAgICAgICAgICAgIGlmICgwID09PSByZXZlcnRMYW5lKVxuICAgICAgICAgICAgICBudWxsICE9PSBuZXdCYXNlUXVldWVMYXN0ICYmXG4gICAgICAgICAgICAgICAgKG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPVxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYW5lOiAwLFxuICAgICAgICAgICAgICAgICAgICByZXZlcnRMYW5lOiAwLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGhhc0VhZ2VyU3RhdGU6IHVwZGF0ZS5oYXNFYWdlclN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdXBkYXRlTGFuZSA9PT0gY3VycmVudEVudGFuZ2xlZExhbmUgJiZcbiAgICAgICAgICAgICAgICAgIChkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uID0gITApO1xuICAgICAgICAgICAgZWxzZSBpZiAoKHJlbmRlckxhbmVzICYgcmV2ZXJ0TGFuZSkgPT09IHJldmVydExhbmUpIHtcbiAgICAgICAgICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgICAgICAgICAgIHJldmVydExhbmUgPT09IGN1cnJlbnRFbnRhbmdsZWRMYW5lICYmXG4gICAgICAgICAgICAgICAgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSAhMCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICh1cGRhdGVMYW5lID0ge1xuICAgICAgICAgICAgICAgIGxhbmU6IDAsXG4gICAgICAgICAgICAgICAgcmV2ZXJ0TGFuZTogdXBkYXRlLnJldmVydExhbmUsXG4gICAgICAgICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgICAgICAgIGhhc0VhZ2VyU3RhdGU6IHVwZGF0ZS5oYXNFYWdlclN0YXRlLFxuICAgICAgICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gbmV3QmFzZVF1ZXVlTGFzdFxuICAgICAgICAgICAgICAgICAgPyAoKG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IHVwZGF0ZUxhbmUpLFxuICAgICAgICAgICAgICAgICAgICAoYmFzZUZpcnN0ID0gcGVuZGluZ1F1ZXVlKSlcbiAgICAgICAgICAgICAgICAgIDogKG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSB1cGRhdGVMYW5lKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIubGFuZXMgfD0gcmV2ZXJ0TGFuZSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSByZXZlcnRMYW5lKTtcbiAgICAgICAgICAgIHVwZGF0ZUxhbmUgPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgJiZcbiAgICAgICAgICAgICAgcmVkdWNlcihwZW5kaW5nUXVldWUsIHVwZGF0ZUxhbmUpO1xuICAgICAgICAgICAgcGVuZGluZ1F1ZXVlID0gdXBkYXRlLmhhc0VhZ2VyU3RhdGVcbiAgICAgICAgICAgICAgPyB1cGRhdGUuZWFnZXJTdGF0ZVxuICAgICAgICAgICAgICA6IHJlZHVjZXIocGVuZGluZ1F1ZXVlLCB1cGRhdGVMYW5lKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIChyZXZlcnRMYW5lID0ge1xuICAgICAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgICAgICByZXZlcnRMYW5lOiB1cGRhdGUucmV2ZXJ0TGFuZSxcbiAgICAgICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBudWxsID09PSBuZXdCYXNlUXVldWVMYXN0XG4gICAgICAgICAgICAgICAgPyAoKG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IHJldmVydExhbmUpLFxuICAgICAgICAgICAgICAgICAgKGJhc2VGaXJzdCA9IHBlbmRpbmdRdWV1ZSkpXG4gICAgICAgICAgICAgICAgOiAobmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IHJldmVydExhbmUpLFxuICAgICAgICAgICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIubGFuZXMgfD0gdXBkYXRlTGFuZSksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gdXBkYXRlTGFuZSk7XG4gICAgICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgICAgIH0gd2hpbGUgKG51bGwgIT09IHVwZGF0ZSAmJiB1cGRhdGUgIT09IGN1cnJlbnQpO1xuICAgICAgICBudWxsID09PSBuZXdCYXNlUXVldWVMYXN0XG4gICAgICAgICAgPyAoYmFzZUZpcnN0ID0gcGVuZGluZ1F1ZXVlKVxuICAgICAgICAgIDogKG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IG5ld0Jhc2VRdWV1ZUZpcnN0KTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFvYmplY3RJcyhwZW5kaW5nUXVldWUsIGhvb2subWVtb2l6ZWRTdGF0ZSkgJiZcbiAgICAgICAgICAoKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCksXG4gICAgICAgICAgZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiAmJlxuICAgICAgICAgICAgKChyZWR1Y2VyID0gY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlKSwgbnVsbCAhPT0gcmVkdWNlcikpXG4gICAgICAgIClcbiAgICAgICAgICB0aHJvdyByZWR1Y2VyO1xuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgICAgIGhvb2suYmFzZVN0YXRlID0gYmFzZUZpcnN0O1xuICAgICAgICBob29rLmJhc2VRdWV1ZSA9IG5ld0Jhc2VRdWV1ZUxhc3Q7XG4gICAgICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgfVxuICAgICAgbnVsbCA9PT0gYmFzZVF1ZXVlICYmIChxdWV1ZS5sYW5lcyA9IDApO1xuICAgICAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIHF1ZXVlLmRpc3BhdGNoXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgICAgIHF1ZXVlID0gaG9vay5xdWV1ZTtcbiAgICAgIGlmIChudWxsID09PSBxdWV1ZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBZb3UgYXJlIGxpa2VseSBjYWxsaW5nIEhvb2tzIGNvbmRpdGlvbmFsbHksIHdoaWNoIGlzIG5vdCBhbGxvd2VkLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbClcIlxuICAgICAgICApO1xuICAgICAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7XG4gICAgICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCxcbiAgICAgICAgbGFzdFJlbmRlclBoYXNlVXBkYXRlID0gcXVldWUucGVuZGluZyxcbiAgICAgICAgbmV3U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gICAgICBpZiAobnVsbCAhPT0gbGFzdFJlbmRlclBoYXNlVXBkYXRlKSB7XG4gICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICB2YXIgdXBkYXRlID0gKGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZS5uZXh0KTtcbiAgICAgICAgZG9cbiAgICAgICAgICAobmV3U3RhdGUgPSByZWR1Y2VyKG5ld1N0YXRlLCB1cGRhdGUuYWN0aW9uKSksICh1cGRhdGUgPSB1cGRhdGUubmV4dCk7XG4gICAgICAgIHdoaWxlICh1cGRhdGUgIT09IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSk7XG4gICAgICAgIG9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpIHx8IChkaWRSZWNlaXZlVXBkYXRlID0gITApO1xuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgbnVsbCA9PT0gaG9vay5iYXNlUXVldWUgJiYgKGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGUpO1xuICAgICAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtuZXdTdGF0ZSwgZGlzcGF0Y2hdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gICAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcixcbiAgICAgICAgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gZ2V0U2VydmVyU25hcHNob3QpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIk1pc3NpbmcgZ2V0U2VydmVyU25hcHNob3QsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gV2lsbCByZXZlcnQgdG8gY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgICAgICk7XG4gICAgICAgIHZhciBuZXh0U25hcHNob3QgPSBnZXRTZXJ2ZXJTbmFwc2hvdCgpO1xuICAgICAgICBkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCB8fFxuICAgICAgICAgIG5leHRTbmFwc2hvdCA9PT0gZ2V0U2VydmVyU25hcHNob3QoKSB8fFxuICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgcmVzdWx0IG9mIGdldFNlcnZlclNuYXBzaG90IHNob3VsZCBiZSBjYWNoZWQgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSAhMCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcbiAgICAgICAgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgfHxcbiAgICAgICAgICAoKGdldFNlcnZlclNuYXBzaG90ID0gZ2V0U25hcHNob3QoKSksXG4gICAgICAgICAgb2JqZWN0SXMobmV4dFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCkgfHxcbiAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSByZXN1bHQgb2YgZ2V0U25hcHNob3Qgc2hvdWxkIGJlIGNhY2hlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSAhMCkpKTtcbiAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgYSB3b3JrLWluLXByb2dyZXNzIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgMCAhPT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgMTI0KSB8fFxuICAgICAgICAgIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuICAgICAgfVxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV4dFNuYXBzaG90O1xuICAgICAgZ2V0U2VydmVyU25hcHNob3QgPSB7IHZhbHVlOiBuZXh0U25hcHNob3QsIGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCB9O1xuICAgICAgaG9vay5xdWV1ZSA9IGdldFNlcnZlclNuYXBzaG90O1xuICAgICAgbW91bnRFZmZlY3QoXG4gICAgICAgIHN1YnNjcmliZVRvU3RvcmUuYmluZChudWxsLCBmaWJlciwgZ2V0U2VydmVyU25hcHNob3QsIHN1YnNjcmliZSksXG4gICAgICAgIFtzdWJzY3JpYmVdXG4gICAgICApO1xuICAgICAgZmliZXIuZmxhZ3MgfD0gMjA0ODtcbiAgICAgIHB1c2hTaW1wbGVFZmZlY3QoXG4gICAgICAgIEhhc0VmZmVjdCB8IFBhc3NpdmUsXG4gICAgICAgIGNyZWF0ZUVmZmVjdEluc3RhbmNlKCksXG4gICAgICAgIHVwZGF0ZVN0b3JlSW5zdGFuY2UuYmluZChcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90LFxuICAgICAgICAgIG5leHRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTbmFwc2hvdFxuICAgICAgICApLFxuICAgICAgICBudWxsXG4gICAgICApO1xuICAgICAgcmV0dXJuIG5leHRTbmFwc2hvdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICBzdWJzY3JpYmUsXG4gICAgICBnZXRTbmFwc2hvdCxcbiAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgKSB7XG4gICAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcixcbiAgICAgICAgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLFxuICAgICAgICBpc0h5ZHJhdGluZyRqc2NvbXAkMCA9IGlzSHlkcmF0aW5nO1xuICAgICAgaWYgKGlzSHlkcmF0aW5nJGpzY29tcCQwKSB7XG4gICAgICAgIGlmICh2b2lkIDAgPT09IGdldFNlcnZlclNuYXBzaG90KVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJNaXNzaW5nIGdldFNlcnZlclNuYXBzaG90LCB3aGljaCBpcyByZXF1aXJlZCBmb3Igc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQuIFdpbGwgcmV2ZXJ0IHRvIGNsaWVudCByZW5kZXJpbmcuXCJcbiAgICAgICAgICApO1xuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdCA9IGdldFNlcnZlclNuYXBzaG90KCk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAoKGdldFNlcnZlclNuYXBzaG90ID0gZ2V0U25hcHNob3QoKSksICFkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdClcbiAgICAgICkge1xuICAgICAgICB2YXIgY2FjaGVkU25hcHNob3QgPSBnZXRTbmFwc2hvdCgpO1xuICAgICAgICBvYmplY3RJcyhnZXRTZXJ2ZXJTbmFwc2hvdCwgY2FjaGVkU25hcHNob3QpIHx8XG4gICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSByZXN1bHQgb2YgZ2V0U25hcHNob3Qgc2hvdWxkIGJlIGNhY2hlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIChkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCA9ICEwKSk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIChjYWNoZWRTbmFwc2hvdCA9ICFvYmplY3RJcyhcbiAgICAgICAgICAoY3VycmVudEhvb2sgfHwgaG9vaykubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApKVxuICAgICAgKVxuICAgICAgICAoaG9vay5tZW1vaXplZFN0YXRlID0gZ2V0U2VydmVyU25hcHNob3QpLCAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKTtcbiAgICAgIGhvb2sgPSBob29rLnF1ZXVlO1xuICAgICAgdmFyIGNyZWF0ZSA9IHN1YnNjcmliZVRvU3RvcmUuYmluZChudWxsLCBmaWJlciwgaG9vaywgc3Vic2NyaWJlKTtcbiAgICAgIHVwZGF0ZUVmZmVjdEltcGwoMjA0OCwgUGFzc2l2ZSwgY3JlYXRlLCBbc3Vic2NyaWJlXSk7XG4gICAgICBpZiAoXG4gICAgICAgIGhvb2suZ2V0U25hcHNob3QgIT09IGdldFNuYXBzaG90IHx8XG4gICAgICAgIGNhY2hlZFNuYXBzaG90IHx8XG4gICAgICAgIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzc0hvb2sgJiZcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2subWVtb2l6ZWRTdGF0ZS50YWcgJiBIYXNFZmZlY3QpXG4gICAgICApIHtcbiAgICAgICAgZmliZXIuZmxhZ3MgfD0gMjA0ODtcbiAgICAgICAgcHVzaFNpbXBsZUVmZmVjdChcbiAgICAgICAgICBIYXNFZmZlY3QgfCBQYXNzaXZlLFxuICAgICAgICAgIGNyZWF0ZUVmZmVjdEluc3RhbmNlKCksXG4gICAgICAgICAgdXBkYXRlU3RvcmVJbnN0YW5jZS5iaW5kKFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgaG9vayxcbiAgICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90LFxuICAgICAgICAgICAgZ2V0U25hcHNob3RcbiAgICAgICAgICApLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgYSB3b3JrLWluLXByb2dyZXNzIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgaXNIeWRyYXRpbmckanNjb21wJDAgfHxcbiAgICAgICAgICAwICE9PSAocmVuZGVyTGFuZXMgJiAxMjQpIHx8XG4gICAgICAgICAgcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRTZXJ2ZXJTbmFwc2hvdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIHJlbmRlcmVkU25hcHNob3QpIHtcbiAgICAgIGZpYmVyLmZsYWdzIHw9IDE2Mzg0O1xuICAgICAgZmliZXIgPSB7IGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCwgdmFsdWU6IHJlbmRlcmVkU25hcHNob3QgfTtcbiAgICAgIGdldFNuYXBzaG90ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIudXBkYXRlUXVldWU7XG4gICAgICBudWxsID09PSBnZXRTbmFwc2hvdFxuICAgICAgICA/ICgoZ2V0U25hcHNob3QgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkpLFxuICAgICAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci51cGRhdGVRdWV1ZSA9IGdldFNuYXBzaG90KSxcbiAgICAgICAgICAoZ2V0U25hcHNob3Quc3RvcmVzID0gW2ZpYmVyXSkpXG4gICAgICAgIDogKChyZW5kZXJlZFNuYXBzaG90ID0gZ2V0U25hcHNob3Quc3RvcmVzKSxcbiAgICAgICAgICBudWxsID09PSByZW5kZXJlZFNuYXBzaG90XG4gICAgICAgICAgICA/IChnZXRTbmFwc2hvdC5zdG9yZXMgPSBbZmliZXJdKVxuICAgICAgICAgICAgOiByZW5kZXJlZFNuYXBzaG90LnB1c2goZmliZXIpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlU3RvcmVJbnN0YW5jZShmaWJlciwgaW5zdCwgbmV4dFNuYXBzaG90LCBnZXRTbmFwc2hvdCkge1xuICAgICAgaW5zdC52YWx1ZSA9IG5leHRTbmFwc2hvdDtcbiAgICAgIGluc3QuZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDtcbiAgICAgIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkgJiYgZm9yY2VTdG9yZVJlcmVuZGVyKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3Vic2NyaWJlVG9TdG9yZShmaWJlciwgaW5zdCwgc3Vic2NyaWJlKSB7XG4gICAgICByZXR1cm4gc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkge1xuICAgICAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5nZXRTbmFwc2hvdDtcbiAgICAgIGluc3QgPSBpbnN0LnZhbHVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5leHRWYWx1ZSA9IGxhdGVzdEdldFNuYXBzaG90KCk7XG4gICAgICAgIHJldHVybiAhb2JqZWN0SXMoaW5zdCwgbmV4dFZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZm9yY2VTdG9yZVJlcmVuZGVyKGZpYmVyKSB7XG4gICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMik7XG4gICAgICBudWxsICE9PSByb290ICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50U3RhdGVJbXBsKGluaXRpYWxTdGF0ZSkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluaXRpYWxTdGF0ZSkge1xuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlSW5pdGlhbGl6ZXIgPSBpbml0aWFsU3RhdGU7XG4gICAgICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZUluaXRpYWxpemVyKCk7XG4gICAgICAgIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5pdGlhbFN0YXRlSW5pdGlhbGl6ZXIoKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgICBob29rLnF1ZXVlID0ge1xuICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICBsYW5lczogMCxcbiAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGhvb2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBpbml0aWFsU3RhdGUgPSBtb3VudFN0YXRlSW1wbChpbml0aWFsU3RhdGUpO1xuICAgICAgdmFyIHF1ZXVlID0gaW5pdGlhbFN0YXRlLnF1ZXVlLFxuICAgICAgICBkaXNwYXRjaCA9IGRpc3BhdGNoU2V0U3RhdGUuYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciwgcXVldWUpO1xuICAgICAgcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgICAgIHJldHVybiBbaW5pdGlhbFN0YXRlLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRPcHRpbWlzdGljKHBhc3N0aHJvdWdoKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IHBhc3N0aHJvdWdoO1xuICAgICAgdmFyIHF1ZXVlID0ge1xuICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICBsYW5lczogMCxcbiAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IG51bGwsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBudWxsXG4gICAgICB9O1xuICAgICAgaG9vay5xdWV1ZSA9IHF1ZXVlO1xuICAgICAgaG9vayA9IGRpc3BhdGNoT3B0aW1pc3RpY1NldFN0YXRlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLFxuICAgICAgICAhMCxcbiAgICAgICAgcXVldWVcbiAgICAgICk7XG4gICAgICBxdWV1ZS5kaXNwYXRjaCA9IGhvb2s7XG4gICAgICByZXR1cm4gW3Bhc3N0aHJvdWdoLCBob29rXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHJldHVybiB1cGRhdGVPcHRpbWlzdGljSW1wbChob29rLCBjdXJyZW50SG9vaywgcGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVPcHRpbWlzdGljSW1wbChob29rLCBjdXJyZW50LCBwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBwYXNzdGhyb3VnaDtcbiAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VySW1wbChcbiAgICAgICAgaG9vayxcbiAgICAgICAgY3VycmVudEhvb2ssXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZHVjZXIgPyByZWR1Y2VyIDogYmFzaWNTdGF0ZVJlZHVjZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcmVuZGVyT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50SG9vaylcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU9wdGltaXN0aWNJbXBsKGhvb2ssIGN1cnJlbnRIb29rLCBwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IHBhc3N0aHJvdWdoO1xuICAgICAgcmV0dXJuIFtwYXNzdGhyb3VnaCwgaG9vay5xdWV1ZS5kaXNwYXRjaF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uU3RhdGUoXG4gICAgICBmaWJlcixcbiAgICAgIGFjdGlvblF1ZXVlLFxuICAgICAgc2V0UGVuZGluZ1N0YXRlLFxuICAgICAgc2V0U3RhdGUsXG4gICAgICBwYXlsb2FkXG4gICAgKSB7XG4gICAgICBpZiAoaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikpXG4gICAgICAgIHRocm93IEVycm9yKFwiQ2Fubm90IHVwZGF0ZSBmb3JtIHN0YXRlIHdoaWxlIHJlbmRlcmluZy5cIik7XG4gICAgICBmaWJlciA9IGFjdGlvblF1ZXVlLmFjdGlvbjtcbiAgICAgIGlmIChudWxsICE9PSBmaWJlcikge1xuICAgICAgICB2YXIgYWN0aW9uTm9kZSA9IHtcbiAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgIGFjdGlvbjogZmliZXIsXG4gICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgICBpc1RyYW5zaXRpb246ICEwLFxuICAgICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgcmVhc29uOiBudWxsLFxuICAgICAgICAgIGxpc3RlbmVyczogW10sXG4gICAgICAgICAgdGhlbjogZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBhY3Rpb25Ob2RlLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG51bGwgIT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlRcbiAgICAgICAgICA/IHNldFBlbmRpbmdTdGF0ZSghMClcbiAgICAgICAgICA6IChhY3Rpb25Ob2RlLmlzVHJhbnNpdGlvbiA9ICExKTtcbiAgICAgICAgc2V0U3RhdGUoYWN0aW9uTm9kZSk7XG4gICAgICAgIHNldFBlbmRpbmdTdGF0ZSA9IGFjdGlvblF1ZXVlLnBlbmRpbmc7XG4gICAgICAgIG51bGwgPT09IHNldFBlbmRpbmdTdGF0ZVxuICAgICAgICAgID8gKChhY3Rpb25Ob2RlLm5leHQgPSBhY3Rpb25RdWV1ZS5wZW5kaW5nID0gYWN0aW9uTm9kZSksXG4gICAgICAgICAgICBydW5BY3Rpb25TdGF0ZUFjdGlvbihhY3Rpb25RdWV1ZSwgYWN0aW9uTm9kZSkpXG4gICAgICAgICAgOiAoKGFjdGlvbk5vZGUubmV4dCA9IHNldFBlbmRpbmdTdGF0ZS5uZXh0KSxcbiAgICAgICAgICAgIChhY3Rpb25RdWV1ZS5wZW5kaW5nID0gc2V0UGVuZGluZ1N0YXRlLm5leHQgPSBhY3Rpb25Ob2RlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJ1bkFjdGlvblN0YXRlQWN0aW9uKGFjdGlvblF1ZXVlLCBub2RlKSB7XG4gICAgICB2YXIgYWN0aW9uID0gbm9kZS5hY3Rpb24sXG4gICAgICAgIHBheWxvYWQgPSBub2RlLnBheWxvYWQsXG4gICAgICAgIHByZXZTdGF0ZSA9IGFjdGlvblF1ZXVlLnN0YXRlO1xuICAgICAgaWYgKG5vZGUuaXNUcmFuc2l0aW9uKSB7XG4gICAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQsXG4gICAgICAgICAgY3VycmVudFRyYW5zaXRpb24gPSB7fTtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IGN1cnJlbnRUcmFuc2l0aW9uO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5ULl91cGRhdGVkRmliZXJzID0gbmV3IFNldCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IGFjdGlvbihwcmV2U3RhdGUsIHBheWxvYWQpLFxuICAgICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgICAgICAgIG51bGwgIT09IG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoICYmXG4gICAgICAgICAgICBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaChjdXJyZW50VHJhbnNpdGlvbiwgcmV0dXJuVmFsdWUpO1xuICAgICAgICAgIGhhbmRsZUFjdGlvblJldHVyblZhbHVlKGFjdGlvblF1ZXVlLCBub2RlLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgb25BY3Rpb25FcnJvcihhY3Rpb25RdWV1ZSwgbm9kZSwgZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcHJldlRyYW5zaXRpb24pLFxuICAgICAgICAgICAgbnVsbCA9PT0gcHJldlRyYW5zaXRpb24gJiZcbiAgICAgICAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgJiZcbiAgICAgICAgICAgICAgKChhY3Rpb25RdWV1ZSA9IGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLnNpemUpLFxuICAgICAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5jbGVhcigpLFxuICAgICAgICAgICAgICAxMCA8IGFjdGlvblF1ZXVlICYmXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgXCJEZXRlY3RlZCBhIGxhcmdlIG51bWJlciBvZiB1cGRhdGVzIGluc2lkZSBzdGFydFRyYW5zaXRpb24uIElmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuIE90aGVyd2lzZSBjb25jdXJyZW50IG1vZGUgZ3VhcmFudGVlcyBhcmUgb2ZmIHRoZSB0YWJsZS5cIlxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2VcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAoY3VycmVudFRyYW5zaXRpb24gPSBhY3Rpb24ocHJldlN0YXRlLCBwYXlsb2FkKSksXG4gICAgICAgICAgICBoYW5kbGVBY3Rpb25SZXR1cm5WYWx1ZShhY3Rpb25RdWV1ZSwgbm9kZSwgY3VycmVudFRyYW5zaXRpb24pO1xuICAgICAgICB9IGNhdGNoIChlcnJvciQ0KSB7XG4gICAgICAgICAgb25BY3Rpb25FcnJvcihhY3Rpb25RdWV1ZSwgbm9kZSwgZXJyb3IkNCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlQWN0aW9uUmV0dXJuVmFsdWUoYWN0aW9uUXVldWUsIG5vZGUsIHJldHVyblZhbHVlKSB7XG4gICAgICBudWxsICE9PSByZXR1cm5WYWx1ZSAmJlxuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZS50aGVuXG4gICAgICAgID8gKHJldHVyblZhbHVlLnRoZW4oXG4gICAgICAgICAgICBmdW5jdGlvbiAobmV4dFN0YXRlKSB7XG4gICAgICAgICAgICAgIG9uQWN0aW9uU3VjY2VzcyhhY3Rpb25RdWV1ZSwgbm9kZSwgbmV4dFN0YXRlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9uQWN0aW9uRXJyb3IoYWN0aW9uUXVldWUsIG5vZGUsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLFxuICAgICAgICAgIG5vZGUuaXNUcmFuc2l0aW9uIHx8XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkFuIGFzeW5jIGZ1bmN0aW9uIHdpdGggdXNlQWN0aW9uU3RhdGUgd2FzIGNhbGxlZCBvdXRzaWRlIG9mIGEgdHJhbnNpdGlvbi4gVGhpcyBpcyBsaWtlbHkgbm90IHdoYXQgeW91IGludGVuZGVkIChmb3IgZXhhbXBsZSwgaXNQZW5kaW5nIHdpbGwgbm90IHVwZGF0ZSBjb3JyZWN0bHkpLiBFaXRoZXIgY2FsbCB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gaW5zaWRlIHN0YXJ0VHJhbnNpdGlvbiwgb3IgcGFzcyBpdCB0byBhbiBgYWN0aW9uYCBvciBgZm9ybUFjdGlvbmAgcHJvcC5cIlxuICAgICAgICAgICAgKSlcbiAgICAgICAgOiBvbkFjdGlvblN1Y2Nlc3MoYWN0aW9uUXVldWUsIG5vZGUsIHJldHVyblZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25BY3Rpb25TdWNjZXNzKGFjdGlvblF1ZXVlLCBhY3Rpb25Ob2RlLCBuZXh0U3RhdGUpIHtcbiAgICAgIGFjdGlvbk5vZGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgIGFjdGlvbk5vZGUudmFsdWUgPSBuZXh0U3RhdGU7XG4gICAgICBub3RpZnlBY3Rpb25MaXN0ZW5lcnMoYWN0aW9uTm9kZSk7XG4gICAgICBhY3Rpb25RdWV1ZS5zdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgIGFjdGlvbk5vZGUgPSBhY3Rpb25RdWV1ZS5wZW5kaW5nO1xuICAgICAgbnVsbCAhPT0gYWN0aW9uTm9kZSAmJlxuICAgICAgICAoKG5leHRTdGF0ZSA9IGFjdGlvbk5vZGUubmV4dCksXG4gICAgICAgIG5leHRTdGF0ZSA9PT0gYWN0aW9uTm9kZVxuICAgICAgICAgID8gKGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBudWxsKVxuICAgICAgICAgIDogKChuZXh0U3RhdGUgPSBuZXh0U3RhdGUubmV4dCksXG4gICAgICAgICAgICAoYWN0aW9uTm9kZS5uZXh0ID0gbmV4dFN0YXRlKSxcbiAgICAgICAgICAgIHJ1bkFjdGlvblN0YXRlQWN0aW9uKGFjdGlvblF1ZXVlLCBuZXh0U3RhdGUpKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uRXJyb3IoYWN0aW9uUXVldWUsIGFjdGlvbk5vZGUsIGVycm9yKSB7XG4gICAgICB2YXIgbGFzdCA9IGFjdGlvblF1ZXVlLnBlbmRpbmc7XG4gICAgICBhY3Rpb25RdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIGlmIChudWxsICE9PSBsYXN0KSB7XG4gICAgICAgIGxhc3QgPSBsYXN0Lm5leHQ7XG4gICAgICAgIGRvXG4gICAgICAgICAgKGFjdGlvbk5vZGUuc3RhdHVzID0gXCJyZWplY3RlZFwiKSxcbiAgICAgICAgICAgIChhY3Rpb25Ob2RlLnJlYXNvbiA9IGVycm9yKSxcbiAgICAgICAgICAgIG5vdGlmeUFjdGlvbkxpc3RlbmVycyhhY3Rpb25Ob2RlKSxcbiAgICAgICAgICAgIChhY3Rpb25Ob2RlID0gYWN0aW9uTm9kZS5uZXh0KTtcbiAgICAgICAgd2hpbGUgKGFjdGlvbk5vZGUgIT09IGxhc3QpO1xuICAgICAgfVxuICAgICAgYWN0aW9uUXVldWUuYWN0aW9uID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90aWZ5QWN0aW9uTGlzdGVuZXJzKGFjdGlvbk5vZGUpIHtcbiAgICAgIGFjdGlvbk5vZGUgPSBhY3Rpb25Ob2RlLmxpc3RlbmVycztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9uTm9kZS5sZW5ndGg7IGkrKykgKDAsIGFjdGlvbk5vZGVbaV0pKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFjdGlvblN0YXRlUmVkdWNlcihvbGRTdGF0ZSwgbmV3U3RhdGUpIHtcbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZVByb3ApIHtcbiAgICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgICB2YXIgc3NyRm9ybVN0YXRlID0gd29ya0luUHJvZ3Jlc3NSb290LmZvcm1TdGF0ZTtcbiAgICAgICAgaWYgKG51bGwgIT09IHNzckZvcm1TdGF0ZSkge1xuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIHZhciBpc01hdGNoaW5nID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXI7XG4gICAgICAgICAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgICAgICAgaWYgKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICB2YXIgbWFya2VySW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluUm9vdE9yU2luZ2xldG9uID0gcm9vdE9yU2luZ2xldG9uQ29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgOCAhPT0gbWFya2VySW5zdGFuY2Uubm9kZVR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWluUm9vdE9yU2luZ2xldG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShcbiAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJJbnN0YW5jZS5uZXh0U2libGluZ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gbWFya2VySW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJJbnN0YW5jZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaW5Sb290T3JTaW5nbGV0b24gPSBtYXJrZXJJbnN0YW5jZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2UgPVxuICAgICAgICAgICAgICAgICAgICBpblJvb3RPclNpbmdsZXRvbiA9PT0gRk9STV9TVEFURV9JU19NQVRDSElORyB8fFxuICAgICAgICAgICAgICAgICAgICBpblJvb3RPclNpbmdsZXRvbiA9PT0gRk9STV9TVEFURV9JU19OT1RfTUFUQ0hJTkdcbiAgICAgICAgICAgICAgICAgICAgICA/IG1hcmtlckluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWFya2VySW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShcbiAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2UubmV4dFNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpc01hdGNoaW5nID0gbWFya2VySW5zdGFuY2UuZGF0YSA9PT0gRk9STV9TVEFURV9JU19NQVRDSElORztcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaChpc01hdGNoaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlzTWF0Y2hpbmcgPSAhMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaXNNYXRjaGluZyAmJiAoaW5pdGlhbFN0YXRlUHJvcCA9IHNzckZvcm1TdGF0ZVswXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNzckZvcm1TdGF0ZSA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBzc3JGb3JtU3RhdGUubWVtb2l6ZWRTdGF0ZSA9IHNzckZvcm1TdGF0ZS5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGVQcm9wO1xuICAgICAgaXNNYXRjaGluZyA9IHtcbiAgICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgICAgbGFuZXM6IDAsXG4gICAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBhY3Rpb25TdGF0ZVJlZHVjZXIsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVQcm9wXG4gICAgICB9O1xuICAgICAgc3NyRm9ybVN0YXRlLnF1ZXVlID0gaXNNYXRjaGluZztcbiAgICAgIHNzckZvcm1TdGF0ZSA9IGRpc3BhdGNoU2V0U3RhdGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIsXG4gICAgICAgIGlzTWF0Y2hpbmdcbiAgICAgICk7XG4gICAgICBpc01hdGNoaW5nLmRpc3BhdGNoID0gc3NyRm9ybVN0YXRlO1xuICAgICAgaXNNYXRjaGluZyA9IG1vdW50U3RhdGVJbXBsKCExKTtcbiAgICAgIGluUm9vdE9yU2luZ2xldG9uID0gZGlzcGF0Y2hPcHRpbWlzdGljU2V0U3RhdGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIsXG4gICAgICAgICExLFxuICAgICAgICBpc01hdGNoaW5nLnF1ZXVlXG4gICAgICApO1xuICAgICAgaXNNYXRjaGluZyA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBtYXJrZXJJbnN0YW5jZSA9IHtcbiAgICAgICAgc3RhdGU6IGluaXRpYWxTdGF0ZVByb3AsXG4gICAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgcGVuZGluZzogbnVsbFxuICAgICAgfTtcbiAgICAgIGlzTWF0Y2hpbmcucXVldWUgPSBtYXJrZXJJbnN0YW5jZTtcbiAgICAgIHNzckZvcm1TdGF0ZSA9IGRpc3BhdGNoQWN0aW9uU3RhdGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIsXG4gICAgICAgIG1hcmtlckluc3RhbmNlLFxuICAgICAgICBpblJvb3RPclNpbmdsZXRvbixcbiAgICAgICAgc3NyRm9ybVN0YXRlXG4gICAgICApO1xuICAgICAgbWFya2VySW5zdGFuY2UuZGlzcGF0Y2ggPSBzc3JGb3JtU3RhdGU7XG4gICAgICBpc01hdGNoaW5nLm1lbW9pemVkU3RhdGUgPSBhY3Rpb247XG4gICAgICByZXR1cm4gW2luaXRpYWxTdGF0ZVByb3AsIHNzckZvcm1TdGF0ZSwgITFdO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVBY3Rpb25TdGF0ZShhY3Rpb24pIHtcbiAgICAgIHZhciBzdGF0ZUhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHJldHVybiB1cGRhdGVBY3Rpb25TdGF0ZUltcGwoc3RhdGVIb29rLCBjdXJyZW50SG9vaywgYWN0aW9uKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlQWN0aW9uU3RhdGVJbXBsKHN0YXRlSG9vaywgY3VycmVudFN0YXRlSG9vaywgYWN0aW9uKSB7XG4gICAgICBjdXJyZW50U3RhdGVIb29rID0gdXBkYXRlUmVkdWNlckltcGwoXG4gICAgICAgIHN0YXRlSG9vayxcbiAgICAgICAgY3VycmVudFN0YXRlSG9vayxcbiAgICAgICAgYWN0aW9uU3RhdGVSZWR1Y2VyXG4gICAgICApWzBdO1xuICAgICAgc3RhdGVIb29rID0gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcilbMF07XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBjdXJyZW50U3RhdGVIb29rICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnRTdGF0ZUhvb2sgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY3VycmVudFN0YXRlSG9vay50aGVuXG4gICAgICApXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIHN0YXRlID0gdXNlVGhlbmFibGUoY3VycmVudFN0YXRlSG9vayk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBpZiAoeCA9PT0gU3VzcGVuc2VFeGNlcHRpb24pIHRocm93IFN1c3BlbnNlQWN0aW9uRXhjZXB0aW9uO1xuICAgICAgICAgIHRocm93IHg7XG4gICAgICAgIH1cbiAgICAgIGVsc2Ugc3RhdGUgPSBjdXJyZW50U3RhdGVIb29rO1xuICAgICAgY3VycmVudFN0YXRlSG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgdmFyIGFjdGlvblF1ZXVlID0gY3VycmVudFN0YXRlSG9vay5xdWV1ZSxcbiAgICAgICAgZGlzcGF0Y2ggPSBhY3Rpb25RdWV1ZS5kaXNwYXRjaDtcbiAgICAgIGFjdGlvbiAhPT0gY3VycmVudFN0YXRlSG9vay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZmxhZ3MgfD0gMjA0OCksXG4gICAgICAgIHB1c2hTaW1wbGVFZmZlY3QoXG4gICAgICAgICAgSGFzRWZmZWN0IHwgUGFzc2l2ZSxcbiAgICAgICAgICBjcmVhdGVFZmZlY3RJbnN0YW5jZSgpLFxuICAgICAgICAgIGFjdGlvblN0YXRlQWN0aW9uRWZmZWN0LmJpbmQobnVsbCwgYWN0aW9uUXVldWUsIGFjdGlvbiksXG4gICAgICAgICAgbnVsbFxuICAgICAgICApKTtcbiAgICAgIHJldHVybiBbc3RhdGUsIGRpc3BhdGNoLCBzdGF0ZUhvb2tdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhY3Rpb25TdGF0ZUFjdGlvbkVmZmVjdChhY3Rpb25RdWV1ZSwgYWN0aW9uKSB7XG4gICAgICBhY3Rpb25RdWV1ZS5hY3Rpb24gPSBhY3Rpb247XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcmVuZGVyQWN0aW9uU3RhdGUoYWN0aW9uKSB7XG4gICAgICB2YXIgc3RhdGVIb29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgICAgIGN1cnJlbnRTdGF0ZUhvb2sgPSBjdXJyZW50SG9vaztcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50U3RhdGVIb29rKVxuICAgICAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGVJbXBsKHN0YXRlSG9vaywgY3VycmVudFN0YXRlSG9vaywgYWN0aW9uKTtcbiAgICAgIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgc3RhdGVIb29rID0gc3RhdGVIb29rLm1lbW9pemVkU3RhdGU7XG4gICAgICBjdXJyZW50U3RhdGVIb29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgZGlzcGF0Y2ggPSBjdXJyZW50U3RhdGVIb29rLnF1ZXVlLmRpc3BhdGNoO1xuICAgICAgY3VycmVudFN0YXRlSG9vay5tZW1vaXplZFN0YXRlID0gYWN0aW9uO1xuICAgICAgcmV0dXJuIFtzdGF0ZUhvb2ssIGRpc3BhdGNoLCAhMV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hTaW1wbGVFZmZlY3QodGFnLCBpbnN0LCBjcmVhdGUsIGNyZWF0ZURlcHMpIHtcbiAgICAgIHRhZyA9IHtcbiAgICAgICAgdGFnOiB0YWcsXG4gICAgICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgICAgICBkZXBzOiBjcmVhdGVEZXBzLFxuICAgICAgICBpbnN0OiBpbnN0LFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgaW5zdCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLnVwZGF0ZVF1ZXVlO1xuICAgICAgbnVsbCA9PT0gaW5zdCAmJlxuICAgICAgICAoKGluc3QgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkpLFxuICAgICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIudXBkYXRlUXVldWUgPSBpbnN0KSk7XG4gICAgICBjcmVhdGUgPSBpbnN0Lmxhc3RFZmZlY3Q7XG4gICAgICBudWxsID09PSBjcmVhdGVcbiAgICAgICAgPyAoaW5zdC5sYXN0RWZmZWN0ID0gdGFnLm5leHQgPSB0YWcpXG4gICAgICAgIDogKChjcmVhdGVEZXBzID0gY3JlYXRlLm5leHQpLFxuICAgICAgICAgIChjcmVhdGUubmV4dCA9IHRhZyksXG4gICAgICAgICAgKHRhZy5uZXh0ID0gY3JlYXRlRGVwcyksXG4gICAgICAgICAgKGluc3QubGFzdEVmZmVjdCA9IHRhZykpO1xuICAgICAgcmV0dXJuIHRhZztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRWZmZWN0SW5zdGFuY2UoKSB7XG4gICAgICByZXR1cm4geyBkZXN0cm95OiB2b2lkIDAsIHJlc291cmNlOiB2b2lkIDAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRSZWYoaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBpbml0aWFsVmFsdWUgPSB7IGN1cnJlbnQ6IGluaXRpYWxWYWx1ZSB9O1xuICAgICAgcmV0dXJuIChob29rLm1lbW9pemVkU3RhdGUgPSBpbml0aWFsVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGNyZWF0ZURlcHMpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGNyZWF0ZURlcHMgPSB2b2lkIDAgPT09IGNyZWF0ZURlcHMgPyBudWxsIDogY3JlYXRlRGVwcztcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoU2ltcGxlRWZmZWN0KFxuICAgICAgICBIYXNFZmZlY3QgfCBob29rRmxhZ3MsXG4gICAgICAgIGNyZWF0ZUVmZmVjdEluc3RhbmNlKCksXG4gICAgICAgIGNyZWF0ZSxcbiAgICAgICAgY3JlYXRlRGVwc1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlRWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGRlcHMgPSB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwcztcbiAgICAgIHZhciBpbnN0ID0gaG9vay5tZW1vaXplZFN0YXRlLmluc3Q7XG4gICAgICBudWxsICE9PSBjdXJyZW50SG9vayAmJlxuICAgICAgbnVsbCAhPT0gZGVwcyAmJlxuICAgICAgYXJlSG9va0lucHV0c0VxdWFsKGRlcHMsIGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUuZGVwcylcbiAgICAgICAgPyAoaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaFNpbXBsZUVmZmVjdChob29rRmxhZ3MsIGluc3QsIGNyZWF0ZSwgZGVwcykpXG4gICAgICAgIDogKChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5mbGFncyB8PSBmaWJlckZsYWdzKSxcbiAgICAgICAgICAoaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaFNpbXBsZUVmZmVjdChcbiAgICAgICAgICAgIEhhc0VmZmVjdCB8IGhvb2tGbGFncyxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjcmVhdGUsXG4gICAgICAgICAgICBkZXBzXG4gICAgICAgICAgKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEVmZmVjdChjcmVhdGUsIGNyZWF0ZURlcHMpIHtcbiAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5tb2RlICYgTm9TdHJpY3RQYXNzaXZlRWZmZWN0c01vZGUpID09PSBOb01vZGVcbiAgICAgICAgPyBtb3VudEVmZmVjdEltcGwoMjc2ODI2MTEyLCBQYXNzaXZlLCBjcmVhdGUsIGNyZWF0ZURlcHMpXG4gICAgICAgIDogbW91bnRFZmZlY3RJbXBsKDgzOTA2NTYsIFBhc3NpdmUsIGNyZWF0ZSwgY3JlYXRlRGVwcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICAgICAgdmFyIGZpYmVyRmxhZ3MgPSA0MTk0MzA4O1xuICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAoZmliZXJGbGFncyB8PSAxMzQyMTc3MjgpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChmaWJlckZsYWdzLCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QoY3JlYXRlLCByZWYpIHtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWYpIHtcbiAgICAgICAgY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgICAgIHZhciByZWZDbGVhbnVwID0gcmVmKGNyZWF0ZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmQ2xlYW51cCA/IHJlZkNsZWFudXAoKSA6IHJlZihudWxsKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsICE9PSByZWYgJiYgdm9pZCAwICE9PSByZWYpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcmVmLmhhc093blByb3BlcnR5KFwiY3VycmVudFwiKSB8fFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgZmlyc3QgYXJndW1lbnQgdG8gZWl0aGVyIGJlIGEgcmVmIGNhbGxiYWNrIG9yIFJlYWN0LmNyZWF0ZVJlZigpIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgICAgIFwiYW4gb2JqZWN0IHdpdGgga2V5cyB7XCIgKyBPYmplY3Qua2V5cyhyZWYpLmpvaW4oXCIsIFwiKSArIFwifVwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgIChjcmVhdGUgPSBjcmVhdGUoKSksXG4gICAgICAgICAgKHJlZi5jdXJyZW50ID0gY3JlYXRlKSxcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNyZWF0ZSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgbnVsbCAhPT0gY3JlYXRlID8gdHlwZW9mIGNyZWF0ZSA6IFwibnVsbFwiXG4gICAgICAgICk7XG4gICAgICBkZXBzID0gbnVsbCAhPT0gZGVwcyAmJiB2b2lkIDAgIT09IGRlcHMgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICAgICAgdmFyIGZpYmVyRmxhZ3MgPSA0MTk0MzA4O1xuICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAoZmliZXJGbGFncyB8PSAxMzQyMTc3MjgpO1xuICAgICAgbW91bnRFZmZlY3RJbXBsKFxuICAgICAgICBmaWJlckZsYWdzLFxuICAgICAgICBMYXlvdXQsXG4gICAgICAgIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksXG4gICAgICAgIGRlcHNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNyZWF0ZSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgbnVsbCAhPT0gY3JlYXRlID8gdHlwZW9mIGNyZWF0ZSA6IFwibnVsbFwiXG4gICAgICAgICk7XG4gICAgICBkZXBzID0gbnVsbCAhPT0gZGVwcyAmJiB2b2lkIDAgIT09IGRlcHMgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICAgICAgdXBkYXRlRWZmZWN0SW1wbChcbiAgICAgICAgNCxcbiAgICAgICAgTGF5b3V0LFxuICAgICAgICBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLFxuICAgICAgICBkZXBzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGUgPSBbXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwc1xuICAgICAgXTtcbiAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gICAgICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKG51bGwgIT09IGRlcHMgJiYgYXJlSG9va0lucHV0c0VxdWFsKGRlcHMsIHByZXZTdGF0ZVsxXSkpXG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIGRlcHNdO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudE1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgZGVwcyA9IHZvaWQgMCA9PT0gZGVwcyA/IG51bGwgOiBkZXBzO1xuICAgICAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgICAgIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV4dENyZWF0ZSgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgZGVwc107XG4gICAgICByZXR1cm4gbmV4dFZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gICAgICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKG51bGwgIT09IGRlcHMgJiYgYXJlSG9va0lucHV0c0VxdWFsKGRlcHMsIHByZXZTdGF0ZVsxXSkpXG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICBwcmV2U3RhdGUgPSBuZXh0Q3JlYXRlKCk7XG4gICAgICBpZiAoc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG5leHRDcmVhdGUoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtwcmV2U3RhdGUsIGRlcHNdO1xuICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoXG4gICAgICAgIGhvb2ssXG4gICAgICAgIGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpbml0aWFsVmFsdWVcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGN1cnJlbnRIb29rXG4gICAgICAgID8gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKVxuICAgICAgICA6IHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKFxuICAgICAgICAgICAgaG9vayxcbiAgICAgICAgICAgIGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZVxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50RGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgdmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgaWYgKHZvaWQgMCA9PT0gaW5pdGlhbFZhbHVlIHx8IDAgIT09IChyZW5kZXJMYW5lcyAmIDEwNzM3NDE4MjQpKVxuICAgICAgICByZXR1cm4gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IHZhbHVlKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICAgIGhvb2sgPSByZXF1ZXN0RGVmZXJyZWRMYW5lKCk7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5sYW5lcyB8PSBob29rO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IGhvb2s7XG4gICAgICByZXR1cm4gaW5pdGlhbFZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbChob29rLCBwcmV2VmFsdWUsIHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIGlmIChvYmplY3RJcyh2YWx1ZSwgcHJldlZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IuY3VycmVudClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoaG9vayA9IG1vdW50RGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgdmFsdWUsIGluaXRpYWxWYWx1ZSkpLFxuICAgICAgICAgIG9iamVjdElzKGhvb2ssIHByZXZWYWx1ZSkgfHwgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCksXG4gICAgICAgICAgaG9va1xuICAgICAgICApO1xuICAgICAgaWYgKDAgPT09IChyZW5kZXJMYW5lcyAmIDQyKSlcbiAgICAgICAgcmV0dXJuIChkaWRSZWNlaXZlVXBkYXRlID0gITApLCAoaG9vay5tZW1vaXplZFN0YXRlID0gdmFsdWUpO1xuICAgICAgaG9vayA9IHJlcXVlc3REZWZlcnJlZExhbmUoKTtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmxhbmVzIHw9IGhvb2s7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gaG9vaztcbiAgICAgIHJldHVybiBwcmV2VmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihcbiAgICAgIGZpYmVyLFxuICAgICAgcXVldWUsXG4gICAgICBwZW5kaW5nU3RhdGUsXG4gICAgICBmaW5pc2hlZFN0YXRlLFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPVxuICAgICAgICAwICE9PSBwcmV2aW91c1ByaW9yaXR5ICYmIHByZXZpb3VzUHJpb3JpdHkgPCBDb250aW51b3VzRXZlbnRQcmlvcml0eVxuICAgICAgICAgID8gcHJldmlvdXNQcmlvcml0eVxuICAgICAgICAgIDogQ29udGludW91c0V2ZW50UHJpb3JpdHk7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdFNoYXJlZEludGVybmFscy5ULFxuICAgICAgICBjdXJyZW50VHJhbnNpdGlvbiA9IHt9O1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IGN1cnJlbnRUcmFuc2l0aW9uO1xuICAgICAgZGlzcGF0Y2hPcHRpbWlzdGljU2V0U3RhdGUoZmliZXIsICExLCBxdWV1ZSwgcGVuZGluZ1N0YXRlKTtcbiAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzID0gbmV3IFNldCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJldHVyblZhbHVlID0gY2FsbGJhY2soKSxcbiAgICAgICAgICBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlM7XG4gICAgICAgIG51bGwgIT09IG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoICYmXG4gICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2goY3VycmVudFRyYW5zaXRpb24sIHJldHVyblZhbHVlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG51bGwgIT09IHJldHVyblZhbHVlICYmXG4gICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUudGhlblxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgdGhlbmFibGVGb3JGaW5pc2hlZFN0YXRlID0gY2hhaW5UaGVuYWJsZVZhbHVlKFxuICAgICAgICAgICAgcmV0dXJuVmFsdWUsXG4gICAgICAgICAgICBmaW5pc2hlZFN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkaXNwYXRjaFNldFN0YXRlSW50ZXJuYWwoXG4gICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgIHF1ZXVlLFxuICAgICAgICAgICAgdGhlbmFibGVGb3JGaW5pc2hlZFN0YXRlLFxuICAgICAgICAgICAgcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKFxuICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICBxdWV1ZSxcbiAgICAgICAgICAgIGZpbmlzaGVkU3RhdGUsXG4gICAgICAgICAgICByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcilcbiAgICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKFxuICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgIHF1ZXVlLFxuICAgICAgICAgIHsgdGhlbjogZnVuY3Rpb24gKCkge30sIHN0YXR1czogXCJyZWplY3RlZFwiLCByZWFzb246IGVycm9yIH0sXG4gICAgICAgICAgcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpXG4gICAgICAgICk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcHJldlRyYW5zaXRpb24pLFxuICAgICAgICAgIG51bGwgPT09IHByZXZUcmFuc2l0aW9uICYmXG4gICAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyAmJlxuICAgICAgICAgICAgKChmaWJlciA9IGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLnNpemUpLFxuICAgICAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuY2xlYXIoKSxcbiAgICAgICAgICAgIDEwIDwgZmliZXIgJiZcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIFwiRGV0ZWN0ZWQgYSBsYXJnZSBudW1iZXIgb2YgdXBkYXRlcyBpbnNpZGUgc3RhcnRUcmFuc2l0aW9uLiBJZiB0aGlzIGlzIGR1ZSB0byBhIHN1YnNjcmlwdGlvbiBwbGVhc2UgcmUtd3JpdGUgaXQgdG8gdXNlIFJlYWN0IHByb3ZpZGVkIGhvb2tzLiBPdGhlcndpc2UgY29uY3VycmVudCBtb2RlIGd1YXJhbnRlZXMgYXJlIG9mZiB0aGUgdGFibGUuXCJcbiAgICAgICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0SG9zdFRyYW5zaXRpb24oZm9ybUZpYmVyLCBwZW5kaW5nU3RhdGUsIGFjdGlvbiwgZm9ybURhdGEpIHtcbiAgICAgIGlmICg1ICE9PSBmb3JtRmliZXIudGFnKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHRoZSBmb3JtIGluc3RhbmNlIHRvIGJlIGEgSG9zdENvbXBvbmVudC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICApO1xuICAgICAgdmFyIHF1ZXVlID0gZW5zdXJlRm9ybUNvbXBvbmVudElzU3RhdGVmdWwoZm9ybUZpYmVyKS5xdWV1ZTtcbiAgICAgIHN0YXJ0VHJhbnNpdGlvbihcbiAgICAgICAgZm9ybUZpYmVyLFxuICAgICAgICBxdWV1ZSxcbiAgICAgICAgcGVuZGluZ1N0YXRlLFxuICAgICAgICBOb3RQZW5kaW5nVHJhbnNpdGlvbixcbiAgICAgICAgbnVsbCA9PT0gYWN0aW9uXG4gICAgICAgICAgPyBub29wJDJcbiAgICAgICAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmVxdWVzdEZvcm1SZXNldCQxKGZvcm1GaWJlcik7XG4gICAgICAgICAgICAgIHJldHVybiBhY3Rpb24oZm9ybURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5zdXJlRm9ybUNvbXBvbmVudElzU3RhdGVmdWwoZm9ybUZpYmVyKSB7XG4gICAgICB2YXIgZXhpc3RpbmdTdGF0ZUhvb2sgPSBmb3JtRmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBleGlzdGluZ1N0YXRlSG9vaykgcmV0dXJuIGV4aXN0aW5nU3RhdGVIb29rO1xuICAgICAgZXhpc3RpbmdTdGF0ZUhvb2sgPSB7XG4gICAgICAgIG1lbW9pemVkU3RhdGU6IE5vdFBlbmRpbmdUcmFuc2l0aW9uLFxuICAgICAgICBiYXNlU3RhdGU6IE5vdFBlbmRpbmdUcmFuc2l0aW9uLFxuICAgICAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgICAgIHF1ZXVlOiB7XG4gICAgICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgICAgICBsYW5lczogMCxcbiAgICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICAgICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogTm90UGVuZGluZ1RyYW5zaXRpb25cbiAgICAgICAgfSxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICAgIHZhciBpbml0aWFsUmVzZXRTdGF0ZSA9IHt9O1xuICAgICAgZXhpc3RpbmdTdGF0ZUhvb2submV4dCA9IHtcbiAgICAgICAgbWVtb2l6ZWRTdGF0ZTogaW5pdGlhbFJlc2V0U3RhdGUsXG4gICAgICAgIGJhc2VTdGF0ZTogaW5pdGlhbFJlc2V0U3RhdGUsXG4gICAgICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICAgICAgcXVldWU6IHtcbiAgICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICAgIGxhbmVzOiAwLFxuICAgICAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsUmVzZXRTdGF0ZVxuICAgICAgICB9LFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgZm9ybUZpYmVyLm1lbW9pemVkU3RhdGUgPSBleGlzdGluZ1N0YXRlSG9vaztcbiAgICAgIGZvcm1GaWJlciA9IGZvcm1GaWJlci5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSBmb3JtRmliZXIgJiYgKGZvcm1GaWJlci5tZW1vaXplZFN0YXRlID0gZXhpc3RpbmdTdGF0ZUhvb2spO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nU3RhdGVIb29rO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1ZXN0Rm9ybVJlc2V0JDEoZm9ybUZpYmVyKSB7XG4gICAgICBudWxsID09PSBSZWFjdFNoYXJlZEludGVybmFscy5UICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJyZXF1ZXN0Rm9ybVJlc2V0IHdhcyBjYWxsZWQgb3V0c2lkZSBhIHRyYW5zaXRpb24gb3IgYWN0aW9uLiBUbyBmaXgsIG1vdmUgdG8gYW4gYWN0aW9uLCBvciB3cmFwIHdpdGggc3RhcnRUcmFuc2l0aW9uLlwiXG4gICAgICAgICk7XG4gICAgICB2YXIgcmVzZXRTdGF0ZVF1ZXVlID0gZW5zdXJlRm9ybUNvbXBvbmVudElzU3RhdGVmdWwoZm9ybUZpYmVyKS5uZXh0LnF1ZXVlO1xuICAgICAgZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKFxuICAgICAgICBmb3JtRmliZXIsXG4gICAgICAgIHJlc2V0U3RhdGVRdWV1ZSxcbiAgICAgICAge30sXG4gICAgICAgIHJlcXVlc3RVcGRhdGVMYW5lKGZvcm1GaWJlcilcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50VHJhbnNpdGlvbigpIHtcbiAgICAgIHZhciBzdGF0ZUhvb2sgPSBtb3VudFN0YXRlSW1wbCghMSk7XG4gICAgICBzdGF0ZUhvb2sgPSBzdGFydFRyYW5zaXRpb24uYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIsXG4gICAgICAgIHN0YXRlSG9vay5xdWV1ZSxcbiAgICAgICAgITAsXG4gICAgICAgICExXG4gICAgICApO1xuICAgICAgbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlID0gc3RhdGVIb29rO1xuICAgICAgcmV0dXJuIFshMSwgc3RhdGVIb29rXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlVHJhbnNpdGlvbigpIHtcbiAgICAgIHZhciBib29sZWFuT3JUaGVuYWJsZSA9IHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpWzBdLFxuICAgICAgICBzdGFydCA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIGJvb2xlYW5PclRoZW5hYmxlXG4gICAgICAgICAgPyBib29sZWFuT3JUaGVuYWJsZVxuICAgICAgICAgIDogdXNlVGhlbmFibGUoYm9vbGVhbk9yVGhlbmFibGUpLFxuICAgICAgICBzdGFydFxuICAgICAgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVyZW5kZXJUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIGJvb2xlYW5PclRoZW5hYmxlID0gcmVyZW5kZXJSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKVswXSxcbiAgICAgICAgc3RhcnQgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiBib29sZWFuT3JUaGVuYWJsZVxuICAgICAgICAgID8gYm9vbGVhbk9yVGhlbmFibGVcbiAgICAgICAgICA6IHVzZVRoZW5hYmxlKGJvb2xlYW5PclRoZW5hYmxlKSxcbiAgICAgICAgc3RhcnRcbiAgICAgIF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzKCkge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KEhvc3RUcmFuc2l0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50SWQoKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXggPSB3b3JrSW5Qcm9ncmVzc1Jvb3QuaWRlbnRpZmllclByZWZpeDtcbiAgICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgICB2YXIgdHJlZUlkID0gdHJlZUNvbnRleHRPdmVyZmxvdztcbiAgICAgICAgdmFyIGlkV2l0aExlYWRpbmdCaXQgPSB0cmVlQ29udGV4dElkO1xuICAgICAgICB0cmVlSWQgPVxuICAgICAgICAgIChcbiAgICAgICAgICAgIGlkV2l0aExlYWRpbmdCaXQgJiB+KDEgPDwgKDMyIC0gY2x6MzIoaWRXaXRoTGVhZGluZ0JpdCkgLSAxKSlcbiAgICAgICAgICApLnRvU3RyaW5nKDMyKSArIHRyZWVJZDtcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCA9IFwiXFx1MDBhYlwiICsgaWRlbnRpZmllclByZWZpeCArIFwiUlwiICsgdHJlZUlkO1xuICAgICAgICB0cmVlSWQgPSBsb2NhbElkQ291bnRlcisrO1xuICAgICAgICAwIDwgdHJlZUlkICYmIChpZGVudGlmaWVyUHJlZml4ICs9IFwiSFwiICsgdHJlZUlkLnRvU3RyaW5nKDMyKSk7XG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXggKz0gXCJcXHUwMGJiXCI7XG4gICAgICB9IGVsc2VcbiAgICAgICAgKHRyZWVJZCA9IGdsb2JhbENsaWVudElkQ291bnRlcisrKSxcbiAgICAgICAgICAoaWRlbnRpZmllclByZWZpeCA9XG4gICAgICAgICAgICBcIlxcdTAwYWJcIiArIGlkZW50aWZpZXJQcmVmaXggKyBcInJcIiArIHRyZWVJZC50b1N0cmluZygzMikgKyBcIlxcdTAwYmJcIik7XG4gICAgICByZXR1cm4gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IGlkZW50aWZpZXJQcmVmaXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFJlZnJlc2goKSB7XG4gICAgICByZXR1cm4gKG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZSA9IHJlZnJlc2hDYWNoZS5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlclxuICAgICAgKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZnJlc2hDYWNoZShmaWJlciwgc2VlZEtleSkge1xuICAgICAgZm9yICh2YXIgcHJvdmlkZXIgPSBmaWJlci5yZXR1cm47IG51bGwgIT09IHByb3ZpZGVyOyApIHtcbiAgICAgICAgc3dpdGNoIChwcm92aWRlci50YWcpIHtcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUocHJvdmlkZXIpO1xuICAgICAgICAgICAgZmliZXIgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVVcGRhdGUocHJvdmlkZXIsIGZpYmVyLCBsYW5lKTtcbiAgICAgICAgICAgIG51bGwgIT09IHJvb3QgJiZcbiAgICAgICAgICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBwcm92aWRlciwgbGFuZSksXG4gICAgICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgcHJvdmlkZXIsIGxhbmUpKTtcbiAgICAgICAgICAgIHByb3ZpZGVyID0gY3JlYXRlQ2FjaGUoKTtcbiAgICAgICAgICAgIG51bGwgIT09IHNlZWRLZXkgJiZcbiAgICAgICAgICAgICAgdm9pZCAwICE9PSBzZWVkS2V5ICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IHJvb3QgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBzZWVkIGFyZ3VtZW50IGlzIG5vdCBlbmFibGVkIG91dHNpZGUgZXhwZXJpbWVudGFsIGNoYW5uZWxzLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmaWJlci5wYXlsb2FkID0geyBjYWNoZTogcHJvdmlkZXIgfTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwcm92aWRlciA9IHByb3ZpZGVyLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hSZWR1Y2VyQWN0aW9uKGZpYmVyLCBxdWV1ZSwgYWN0aW9uKSB7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGFyZ3NbM10gJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlN0YXRlIHVwZGF0ZXMgZnJvbSB0aGUgdXNlU3RhdGUoKSBhbmQgdXNlUmVkdWNlcigpIEhvb2tzIGRvbid0IHN1cHBvcnQgdGhlIHNlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS5cIlxuICAgICAgICApO1xuICAgICAgYXJncyA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgIHZhciB1cGRhdGUgPSB7XG4gICAgICAgIGxhbmU6IGFyZ3MsXG4gICAgICAgIHJldmVydExhbmU6IDAsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBoYXNFYWdlclN0YXRlOiAhMSxcbiAgICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICAgIGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpXG4gICAgICAgID8gZW5xdWV1ZVJlbmRlclBoYXNlVXBkYXRlKHF1ZXVlLCB1cGRhdGUpXG4gICAgICAgIDogKCh1cGRhdGUgPSBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGFyZ3MpKSxcbiAgICAgICAgICBudWxsICE9PSB1cGRhdGUgJiZcbiAgICAgICAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIodXBkYXRlLCBmaWJlciwgYXJncyksXG4gICAgICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUodXBkYXRlLCBxdWV1ZSwgYXJncykpKTtcbiAgICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgYXJncyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoU2V0U3RhdGUoZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXJnc1szXSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiU3RhdGUgdXBkYXRlcyBmcm9tIHRoZSB1c2VTdGF0ZSgpIGFuZCB1c2VSZWR1Y2VyKCkgSG9va3MgZG9uJ3Qgc3VwcG9ydCB0aGUgc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIHRoZSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLlwiXG4gICAgICAgICk7XG4gICAgICBhcmdzID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKGZpYmVyLCBxdWV1ZSwgYWN0aW9uLCBhcmdzKTtcbiAgICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgYXJncyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChmaWJlciwgcXVldWUsIGFjdGlvbiwgbGFuZSkge1xuICAgICAgdmFyIHVwZGF0ZSA9IHtcbiAgICAgICAgbGFuZTogbGFuZSxcbiAgICAgICAgcmV2ZXJ0TGFuZTogMCxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGhhc0VhZ2VyU3RhdGU6ICExLFxuICAgICAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgaWYgKGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpKSBlbnF1ZXVlUmVuZGVyUGhhc2VVcGRhdGUocXVldWUsIHVwZGF0ZSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIDAgPT09IGZpYmVyLmxhbmVzICYmXG4gICAgICAgICAgKG51bGwgPT09IGFsdGVybmF0ZSB8fCAwID09PSBhbHRlcm5hdGUubGFuZXMpICYmXG4gICAgICAgICAgKChhbHRlcm5hdGUgPSBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyKSwgbnVsbCAhPT0gYWx0ZXJuYXRlKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlLFxuICAgICAgICAgICAgICBlYWdlclN0YXRlID0gYWx0ZXJuYXRlKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIHVwZGF0ZS5oYXNFYWdlclN0YXRlID0gITA7XG4gICAgICAgICAgICB1cGRhdGUuZWFnZXJTdGF0ZSA9IGVhZ2VyU3RhdGU7XG4gICAgICAgICAgICBpZiAob2JqZWN0SXMoZWFnZXJTdGF0ZSwgY3VycmVudFN0YXRlKSlcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIDApLFxuICAgICAgICAgICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJlxuICAgICAgICAgICAgICAgICAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpLFxuICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhY3Rpb24gPSBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuICAgICAgICBpZiAobnVsbCAhPT0gYWN0aW9uKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoYWN0aW9uLCBmaWJlciwgbGFuZSksXG4gICAgICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUoYWN0aW9uLCBxdWV1ZSwgbGFuZSksXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoT3B0aW1pc3RpY1NldFN0YXRlKFxuICAgICAgZmliZXIsXG4gICAgICB0aHJvd0lmRHVyaW5nUmVuZGVyLFxuICAgICAgcXVldWUsXG4gICAgICBhY3Rpb25cbiAgICApIHtcbiAgICAgIG51bGwgPT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgJiZcbiAgICAgICAgMCA9PT0gY3VycmVudEVudGFuZ2xlZExhbmUgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkFuIG9wdGltaXN0aWMgc3RhdGUgdXBkYXRlIG9jY3VycmVkIG91dHNpZGUgYSB0cmFuc2l0aW9uIG9yIGFjdGlvbi4gVG8gZml4LCBtb3ZlIHRoZSB1cGRhdGUgdG8gYW4gYWN0aW9uLCBvciB3cmFwIHdpdGggc3RhcnRUcmFuc2l0aW9uLlwiXG4gICAgICAgICk7XG4gICAgICBhY3Rpb24gPSB7XG4gICAgICAgIGxhbmU6IDIsXG4gICAgICAgIHJldmVydExhbmU6IHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpLFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgaGFzRWFnZXJTdGF0ZTogITEsXG4gICAgICAgIGVhZ2VyU3RhdGU6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAoaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikpIHtcbiAgICAgICAgaWYgKHRocm93SWZEdXJpbmdSZW5kZXIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW5ub3QgdXBkYXRlIG9wdGltaXN0aWMgc3RhdGUgd2hpbGUgcmVuZGVyaW5nLlwiKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkNhbm5vdCBjYWxsIHN0YXJ0VHJhbnNpdGlvbiB3aGlsZSByZW5kZXJpbmcuXCIpO1xuICAgICAgfSBlbHNlXG4gICAgICAgICh0aHJvd0lmRHVyaW5nUmVuZGVyID0gZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlKFxuICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgIHF1ZXVlLFxuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAyXG4gICAgICAgICkpLFxuICAgICAgICAgIG51bGwgIT09IHRocm93SWZEdXJpbmdSZW5kZXIgJiZcbiAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcih0aHJvd0lmRHVyaW5nUmVuZGVyLCBmaWJlciwgMik7XG4gICAgICBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoZmliZXIsIDIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSB7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZmliZXIgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyIHx8XG4gICAgICAgIChudWxsICE9PSBhbHRlcm5hdGUgJiYgYWx0ZXJuYXRlID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcilcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKSB7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPVxuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITA7XG4gICAgICB2YXIgcGVuZGluZyA9IHF1ZXVlLnBlbmRpbmc7XG4gICAgICBudWxsID09PSBwZW5kaW5nXG4gICAgICAgID8gKHVwZGF0ZS5uZXh0ID0gdXBkYXRlKVxuICAgICAgICA6ICgodXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQpLCAocGVuZGluZy5uZXh0ID0gdXBkYXRlKSk7XG4gICAgICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUocm9vdCwgcXVldWUsIGxhbmUpIHtcbiAgICAgIGlmICgwICE9PSAobGFuZSAmIDQxOTQwNDgpKSB7XG4gICAgICAgIHZhciBxdWV1ZUxhbmVzID0gcXVldWUubGFuZXM7XG4gICAgICAgIHF1ZXVlTGFuZXMgJj0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICAgIGxhbmUgfD0gcXVldWVMYW5lcztcbiAgICAgICAgcXVldWUubGFuZXMgPSBsYW5lO1xuICAgICAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBsYW5lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaERlYnVnSW5mbyhkZWJ1Z0luZm8pIHtcbiAgICAgIHZhciBwcmV2aW91c0RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICBudWxsICE9IGRlYnVnSW5mbyAmJlxuICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9XG4gICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNEZWJ1Z0luZm9cbiAgICAgICAgICAgID8gZGVidWdJbmZvXG4gICAgICAgICAgICA6IHByZXZpb3VzRGVidWdJbmZvLmNvbmNhdChkZWJ1Z0luZm8pKTtcbiAgICAgIHJldHVybiBwcmV2aW91c0RlYnVnSW5mbztcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQsIGZpYmVyLCByZXR1cm5GaWJlcikge1xuICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKGVsZW1lbnQucHJvcHMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmIChcImNoaWxkcmVuXCIgIT09IGtleSAmJiBcImtleVwiICE9PSBrZXkpIHtcbiAgICAgICAgICBudWxsID09PSBmaWJlciAmJlxuICAgICAgICAgICAgKChmaWJlciA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgMCkpLFxuICAgICAgICAgICAgKGZpYmVyLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgIChmaWJlci5yZXR1cm4gPSByZXR1cm5GaWJlcikpO1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyb3JlZEtleSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy5cIixcbiAgICAgICAgICAgICAgICBlcnJvcmVkS2V5XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1bndyYXBUaGVuYWJsZSh0aGVuYWJsZSkge1xuICAgICAgdmFyIGluZGV4ID0gdGhlbmFibGVJbmRleENvdW50ZXI7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciArPSAxO1xuICAgICAgbnVsbCA9PT0gdGhlbmFibGVTdGF0ZSAmJiAodGhlbmFibGVTdGF0ZSA9IGNyZWF0ZVRoZW5hYmxlU3RhdGUoKSk7XG4gICAgICByZXR1cm4gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSwgdGhlbmFibGUsIGluZGV4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29lcmNlUmVmKHdvcmtJblByb2dyZXNzLCBlbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gZWxlbWVudC5wcm9wcy5yZWY7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5yZWYgPSB2b2lkIDAgIT09IGVsZW1lbnQgPyBlbGVtZW50IDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCkge1xuICAgICAgaWYgKG5ld0NoaWxkLiQkdHlwZW9mID09PSBSRUFDVF9MRUdBQ1lfRUxFTUVOVF9UWVBFKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQSBSZWFjdCBFbGVtZW50IGZyb20gYW4gb2xkZXIgdmVyc2lvbiBvZiBSZWFjdCB3YXMgcmVuZGVyZWQuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gSXQgY2FuIGhhcHBlbiBpZjpcXG4tIE11bHRpcGxlIGNvcGllcyBvZiB0aGUgXCJyZWFjdFwiIHBhY2thZ2UgaXMgdXNlZC5cXG4tIEEgbGlicmFyeSBwcmUtYnVuZGxlZCBhbiBvbGQgY29weSBvZiBcInJlYWN0XCIgb3IgXCJyZWFjdC9qc3gtcnVudGltZVwiLlxcbi0gQSBjb21waWxlciB0cmllcyB0byBcImlubGluZVwiIEpTWCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBydW50aW1lLidcbiAgICAgICAgKTtcbiAgICAgIHJldHVybkZpYmVyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkKTtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgK1xuICAgICAgICAgIChcIltvYmplY3QgT2JqZWN0XVwiID09PSByZXR1cm5GaWJlclxuICAgICAgICAgICAgPyBcIm9iamVjdCB3aXRoIGtleXMge1wiICsgT2JqZWN0LmtleXMobmV3Q2hpbGQpLmpvaW4oXCIsIFwiKSArIFwifVwiXG4gICAgICAgICAgICA6IHJldHVybkZpYmVyKSArXG4gICAgICAgICAgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlciwgaW52YWxpZENoaWxkKSB7XG4gICAgICB2YXIgcGFyZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIocmV0dXJuRmliZXIpIHx8IFwiQ29tcG9uZW50XCI7XG4gICAgICBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbcGFyZW50TmFtZV0gfHxcbiAgICAgICAgKChvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbcGFyZW50TmFtZV0gPSAhMCksXG4gICAgICAgIChpbnZhbGlkQ2hpbGQgPVxuICAgICAgICAgIGludmFsaWRDaGlsZC5kaXNwbGF5TmFtZSB8fCBpbnZhbGlkQ2hpbGQubmFtZSB8fCBcIkNvbXBvbmVudFwiKSxcbiAgICAgICAgMyA9PT0gcmV0dXJuRmliZXIudGFnXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkZ1bmN0aW9ucyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQuIFRoaXMgbWF5IGhhcHBlbiBpZiB5b3UgcmV0dXJuICVzIGluc3RlYWQgb2YgPCVzIC8+IGZyb20gcmVuZGVyLiBPciBtYXliZSB5b3UgbWVhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHJldHVybiBpdC5cXG4gIHJvb3QucmVuZGVyKCVzKVwiLFxuICAgICAgICAgICAgICBpbnZhbGlkQ2hpbGQsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZCxcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkZ1bmN0aW9ucyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQuIFRoaXMgbWF5IGhhcHBlbiBpZiB5b3UgcmV0dXJuICVzIGluc3RlYWQgb2YgPCVzIC8+IGZyb20gcmVuZGVyLiBPciBtYXliZSB5b3UgbWVhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHJldHVybiBpdC5cXG4gIDwlcz57JXN9PC8lcz5cIixcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkLFxuICAgICAgICAgICAgICBpbnZhbGlkQ2hpbGQsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWUsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZCxcbiAgICAgICAgICAgICAgcGFyZW50TmFtZVxuICAgICAgICAgICAgKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5PblN5bWJvbFR5cGUocmV0dXJuRmliZXIsIGludmFsaWRDaGlsZCkge1xuICAgICAgdmFyIHBhcmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHJldHVybkZpYmVyKSB8fCBcIkNvbXBvbmVudFwiO1xuICAgICAgb3duZXJIYXNTeW1ib2xUeXBlV2FybmluZ1twYXJlbnROYW1lXSB8fFxuICAgICAgICAoKG93bmVySGFzU3ltYm9sVHlwZVdhcm5pbmdbcGFyZW50TmFtZV0gPSAhMCksXG4gICAgICAgIChpbnZhbGlkQ2hpbGQgPSBTdHJpbmcoaW52YWxpZENoaWxkKSksXG4gICAgICAgIDMgPT09IHJldHVybkZpYmVyLnRhZ1xuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJTeW1ib2xzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC5cXG4gIHJvb3QucmVuZGVyKCVzKVwiLFxuICAgICAgICAgICAgICBpbnZhbGlkQ2hpbGRcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiU3ltYm9scyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQuXFxuICA8JXM+JXM8LyVzPlwiLFxuICAgICAgICAgICAgICBwYXJlbnROYW1lLFxuICAgICAgICAgICAgICBpbnZhbGlkQ2hpbGQsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWVcbiAgICAgICAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDaGlsZFJlY29uY2lsZXIoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgZnVuY3Rpb24gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICB2YXIgZGVsZXRpb25zID0gcmV0dXJuRmliZXIuZGVsZXRpb25zO1xuICAgICAgICAgIG51bGwgPT09IGRlbGV0aW9uc1xuICAgICAgICAgICAgPyAoKHJldHVybkZpYmVyLmRlbGV0aW9ucyA9IFtjaGlsZFRvRGVsZXRlXSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlci5mbGFncyB8PSAxNikpXG4gICAgICAgICAgICA6IGRlbGV0aW9ucy5wdXNoKGNoaWxkVG9EZWxldGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICAgICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgZm9yICg7IG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkOyApXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSxcbiAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG1hcFJlbWFpbmluZ0NoaWxkcmVuKGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgICAgIGZvciAodmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBuZXcgTWFwKCk7IG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkOyApXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQua2V5XG4gICAgICAgICAgICA/IGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGN1cnJlbnRGaXJzdENoaWxkLmtleSwgY3VycmVudEZpcnN0Q2hpbGQpXG4gICAgICAgICAgICA6IGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGN1cnJlbnRGaXJzdENoaWxkLmluZGV4LCBjdXJyZW50Rmlyc3RDaGlsZCksXG4gICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nQ2hpbGRyZW47XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1c2VGaWJlcihmaWJlciwgcGVuZGluZ1Byb3BzKSB7XG4gICAgICAgIGZpYmVyID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoZmliZXIsIHBlbmRpbmdQcm9wcyk7XG4gICAgICAgIGZpYmVyLmluZGV4ID0gMDtcbiAgICAgICAgZmliZXIuc2libGluZyA9IG51bGw7XG4gICAgICAgIHJldHVybiBmaWJlcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SW5kZXgpIHtcbiAgICAgICAgbmV3RmliZXIuaW5kZXggPSBuZXdJbmRleDtcbiAgICAgICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKVxuICAgICAgICAgIHJldHVybiAobmV3RmliZXIuZmxhZ3MgfD0gMTA0ODU3NiksIGxhc3RQbGFjZWRJbmRleDtcbiAgICAgICAgbmV3SW5kZXggPSBuZXdGaWJlci5hbHRlcm5hdGU7XG4gICAgICAgIGlmIChudWxsICE9PSBuZXdJbmRleClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKG5ld0luZGV4ID0gbmV3SW5kZXguaW5kZXgpLFxuICAgICAgICAgICAgbmV3SW5kZXggPCBsYXN0UGxhY2VkSW5kZXhcbiAgICAgICAgICAgICAgPyAoKG5ld0ZpYmVyLmZsYWdzIHw9IDY3MTA4ODY2KSwgbGFzdFBsYWNlZEluZGV4KVxuICAgICAgICAgICAgICA6IG5ld0luZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgbmV3RmliZXIuZmxhZ3MgfD0gNjcxMDg4NjY7XG4gICAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwbGFjZVNpbmdsZUNoaWxkKG5ld0ZpYmVyKSB7XG4gICAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICBudWxsID09PSBuZXdGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAobmV3RmliZXIuZmxhZ3MgfD0gNjcxMDg4NjYpO1xuICAgICAgICByZXR1cm4gbmV3RmliZXI7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudCwgdGV4dENvbnRlbnQsIGxhbmVzKSB7XG4gICAgICAgIGlmIChudWxsID09PSBjdXJyZW50IHx8IDYgIT09IGN1cnJlbnQudGFnKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoXG4gICAgICAgICAgICAgIHRleHRDb250ZW50LFxuICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAoY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdPd25lciA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z1Rhc2sgPSByZXR1cm5GaWJlci5fZGVidWdUYXNrKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICApO1xuICAgICAgICBjdXJyZW50ID0gdXNlRmliZXIoY3VycmVudCwgdGV4dENvbnRlbnQpO1xuICAgICAgICBjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICBjdXJyZW50Ll9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvO1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgICAgIHZhciBlbGVtZW50VHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoY3VycmVudCA9IHVwZGF0ZUZyYWdtZW50KFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgZWxlbWVudC5wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgIGVsZW1lbnQua2V5XG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50LCBjdXJyZW50LCByZXR1cm5GaWJlciksXG4gICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAoY3VycmVudC5lbGVtZW50VHlwZSA9PT0gZWxlbWVudFR5cGUgfHxcbiAgICAgICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjdXJyZW50LCBlbGVtZW50KSB8fFxuICAgICAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBlbGVtZW50VHlwZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBlbGVtZW50VHlwZSAmJlxuICAgICAgICAgICAgICBlbGVtZW50VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFICYmXG4gICAgICAgICAgICAgIGNhbGxMYXp5SW5pdEluREVWKGVsZW1lbnRUeXBlKSA9PT0gY3VycmVudC50eXBlKSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoY3VycmVudCA9IHVzZUZpYmVyKGN1cnJlbnQsIGVsZW1lbnQucHJvcHMpKSxcbiAgICAgICAgICAgIGNvZXJjZVJlZihjdXJyZW50LCBlbGVtZW50KSxcbiAgICAgICAgICAgIChjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXIpLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgY3VycmVudFxuICAgICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgICAgY29lcmNlUmVmKGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgICAgICBjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICBjdXJyZW50Ll9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvO1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudCwgcG9ydGFsLCBsYW5lcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAgIDQgIT09IGN1cnJlbnQudGFnIHx8XG4gICAgICAgICAgY3VycmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyAhPT0gcG9ydGFsLmNvbnRhaW5lckluZm8gfHxcbiAgICAgICAgICBjdXJyZW50LnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiAhPT0gcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGN1cnJlbnQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcykpLFxuICAgICAgICAgICAgKGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgY3VycmVudFxuICAgICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQgPSB1c2VGaWJlcihjdXJyZW50LCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgICBjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICBjdXJyZW50Ll9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvO1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBmcmFnbWVudCwgbGFuZXMsIGtleSkge1xuICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCB8fCA3ICE9PSBjdXJyZW50LnRhZylcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGN1cnJlbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICAgICAgZnJhZ21lbnQsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdUYXNrID0gcmV0dXJuRmliZXIuX2RlYnVnVGFzayksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgY3VycmVudCA9IHVzZUZpYmVyKGN1cnJlbnQsIGZyYWdtZW50KTtcbiAgICAgICAgY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIFwiXCIgIT09IG5ld0NoaWxkKSB8fFxuICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBuZXdDaGlsZCB8fFxuICAgICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBuZXdDaGlsZFxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChuZXdDaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoXG4gICAgICAgICAgICAgIFwiXCIgKyBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKG5ld0NoaWxkLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChuZXdDaGlsZC5fZGVidWdPd25lciA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChuZXdDaGlsZC5fZGVidWdUYXNrID0gcmV0dXJuRmliZXIuX2RlYnVnVGFzayksXG4gICAgICAgICAgICAobmV3Q2hpbGQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgbmV3Q2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIG51bGwgIT09IG5ld0NoaWxkKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgY29lcmNlUmVmKGxhbmVzLCBuZXdDaGlsZCksXG4gICAgICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChuZXdDaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKG5ld0NoaWxkLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAobmV3Q2hpbGQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgdmFyIF9wcmV2RGVidWdJbmZvID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKTtcbiAgICAgICAgICAgICAgbmV3Q2hpbGQgPSBjYWxsTGF6eUluaXRJbkRFVihuZXdDaGlsZCk7XG4gICAgICAgICAgICAgIHJldHVybkZpYmVyID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBfcHJldkRlYnVnSW5mbztcbiAgICAgICAgICAgICAgcmV0dXJuIHJldHVybkZpYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNBcnJheUltcGwobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgIChsYW5lcy5fZGVidWdUYXNrID0gcmV0dXJuRmliZXIuX2RlYnVnVGFzayksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkLnRoZW4pXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoX3ByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gY3JlYXRlQ2hpbGQoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUobmV3Q2hpbGQpLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IF9wcmV2RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG5ld0NoaWxkLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUpXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ2hpbGQoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsaWF0aW9uKHJldHVybkZpYmVyLCBuZXdDaGlsZCksXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmXG4gICAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiB3YXJuT25TeW1ib2xUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgICAgICB2YXIga2V5ID0gbnVsbCAhPT0gb2xkRmliZXIgPyBvbGRGaWJlci5rZXkgOiBudWxsO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBcIlwiICE9PSBuZXdDaGlsZCkgfHxcbiAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgbmV3Q2hpbGQgfHxcbiAgICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgbmV3Q2hpbGRcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBudWxsICE9PSBrZXlcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgb2xkRmliZXIsIFwiXCIgKyBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIG51bGwgIT09IG5ld0NoaWxkKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXdDaGlsZC5rZXkgPT09IGtleVxuICAgICAgICAgICAgICAgID8gKChrZXkgPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHVwZGF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0ga2V5KSxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyKVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXdDaGlsZC5rZXkgPT09IGtleVxuICAgICAgICAgICAgICAgID8gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChrZXkgPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgICAobmV3Q2hpbGQgPSBjYWxsTGF6eUluaXRJbkRFVihuZXdDaGlsZCkpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHVwZGF0ZVNsb3QoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0ga2V5KSxcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNBcnJheUltcGwobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0ga2V5KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGtleSA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbyk7XG4gICAgICAgICAgICByZXR1cm5GaWJlciA9IHVwZGF0ZUZyYWdtZW50KFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBrZXk7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuRmliZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZC50aGVuKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSB1cGRhdGVTbG90KFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgIHVud3JhcFRoZW5hYmxlKG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBrZXkpLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSlcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVTbG90KFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxpYXRpb24ocmV0dXJuRmliZXIsIG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiZcbiAgICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIHdhcm5PblN5bWJvbFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cGRhdGVGcm9tTWFwKFxuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgbmV3SWR4LFxuICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgbGFuZXNcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBcIlwiICE9PSBuZXdDaGlsZCkgfHxcbiAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgbmV3Q2hpbGQgfHxcbiAgICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgbmV3Q2hpbGRcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZXhpc3RpbmdDaGlsZHJlbiA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbCksXG4gICAgICAgICAgICB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgZXhpc3RpbmdDaGlsZHJlbiwgXCJcIiArIG5ld0NoaWxkLCBsYW5lcylcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIG51bGwgIT09IG5ld0NoaWxkKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKG5ld0lkeCA9XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmdldChcbiAgICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gbmV3Q2hpbGQua2V5ID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5XG4gICAgICAgICAgICAgICAgICApIHx8IG51bGwpLFxuICAgICAgICAgICAgICAgIChleGlzdGluZ0NoaWxkcmVuID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdXBkYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gZXhpc3RpbmdDaGlsZHJlbiksXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKGV4aXN0aW5nQ2hpbGRyZW4gPVxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5nZXQoXG4gICAgICAgICAgICAgICAgICAgIG51bGwgPT09IG5ld0NoaWxkLmtleSA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleVxuICAgICAgICAgICAgICAgICAgKSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgICB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIGV4aXN0aW5nQ2hpbGRyZW4sIG5ld0NoaWxkLCBsYW5lcylcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICB2YXIgX3ByZXZEZWJ1Z0luZm83ID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKTtcbiAgICAgICAgICAgICAgbmV3Q2hpbGQgPSBjYWxsTGF6eUluaXRJbkRFVihuZXdDaGlsZCk7XG4gICAgICAgICAgICAgIHJldHVybkZpYmVyID0gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjdXJyZW50RGVidWdJbmZvID0gX3ByZXZEZWJ1Z0luZm83O1xuICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuRmliZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAobmV3SWR4ID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgKGV4aXN0aW5nQ2hpbGRyZW4gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdXBkYXRlRnJhZ21lbnQoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gZXhpc3RpbmdDaGlsZHJlbiksXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZC50aGVuKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKF9wcmV2RGVidWdJbmZvNyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICAgIHVud3JhcFRoZW5hYmxlKG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBfcHJldkRlYnVnSW5mbzcpLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSlcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsaWF0aW9uKHJldHVybkZpYmVyLCBuZXdDaGlsZCksXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmXG4gICAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiB3YXJuT25TeW1ib2xUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZEtleShyZXR1cm5GaWJlciwgd29ya0luUHJvZ3Jlc3MsIGNoaWxkLCBrbm93bktleXMpIHtcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgIT09IHR5cGVvZiBjaGlsZCB8fCBudWxsID09PSBjaGlsZCkgcmV0dXJuIGtub3duS2V5cztcbiAgICAgICAgc3dpdGNoIChjaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICB3YXJuRm9yTWlzc2luZ0tleShyZXR1cm5GaWJlciwgd29ya0luUHJvZ3Jlc3MsIGNoaWxkKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBjaGlsZC5rZXk7XG4gICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIGtleSkgYnJlYWs7XG4gICAgICAgICAgICBpZiAobnVsbCA9PT0ga25vd25LZXlzKSB7XG4gICAgICAgICAgICAgIGtub3duS2V5cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgha25vd25LZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVih3b3JrSW5Qcm9ncmVzcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiRW5jb3VudGVyZWQgdHdvIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUga2V5LCBgJXNgLiBLZXlzIHNob3VsZCBiZSB1bmlxdWUgc28gdGhhdCBjb21wb25lbnRzIG1haW50YWluIHRoZWlyIGlkZW50aXR5IGFjcm9zcyB1cGRhdGVzLiBOb24tdW5pcXVlIGtleXMgbWF5IGNhdXNlIGNoaWxkcmVuIHRvIGJlIGR1cGxpY2F0ZWQgYW5kL29yIG9taXR0ZWQgXFx1MjAxNCB0aGUgYmVoYXZpb3IgaXMgdW5zdXBwb3J0ZWQgYW5kIGNvdWxkIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlwiLFxuICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIChjaGlsZCA9IGNhbGxMYXp5SW5pdEluREVWKGNoaWxkKSksXG4gICAgICAgICAgICAgIHdhcm5PbkludmFsaWRLZXkocmV0dXJuRmliZXIsIHdvcmtJblByb2dyZXNzLCBjaGlsZCwga25vd25LZXlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga25vd25LZXlzO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdDaGlsZHJlbixcbiAgICAgICAgbGFuZXNcbiAgICAgICkge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBrbm93bktleXMgPSBudWxsLFxuICAgICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGwsXG4gICAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gbnVsbCxcbiAgICAgICAgICAgIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICBuZXdJZHggPSAoY3VycmVudEZpcnN0Q2hpbGQgPSAwKSxcbiAgICAgICAgICAgIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgICAgICAgbnVsbCAhPT0gb2xkRmliZXIgJiYgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgIG5ld0lkeCsrXG4gICAgICAgICkge1xuICAgICAgICAgIG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4XG4gICAgICAgICAgICA/ICgobmV4dE9sZEZpYmVyID0gb2xkRmliZXIpLCAob2xkRmliZXIgPSBudWxsKSlcbiAgICAgICAgICAgIDogKG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmcpO1xuICAgICAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gbmV3RmliZXIpIHtcbiAgICAgICAgICAgIG51bGwgPT09IG9sZEZpYmVyICYmIChvbGRGaWJlciA9IG5leHRPbGRGaWJlcik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAga25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgbmV3RmliZXIsXG4gICAgICAgICAgICBuZXdDaGlsZHJlbltuZXdJZHhdLFxuICAgICAgICAgICAga25vd25LZXlzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgICBvbGRGaWJlciAmJlxuICAgICAgICAgICAgbnVsbCA9PT0gbmV3RmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChuZXdGaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0lkeCk7XG4gICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyKVxuICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXIpO1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3SWR4ID09PSBuZXdDaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlciksXG4gICAgICAgICAgICBpc0h5ZHJhdGluZyAmJiBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG5ld0lkeCksXG4gICAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKG51bGwgPT09IG9sZEZpYmVyKSB7XG4gICAgICAgICAgZm9yICg7IG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspXG4gICAgICAgICAgICAob2xkRmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gb2xkRmliZXIgJiZcbiAgICAgICAgICAgICAgICAoKGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgICAgICAgIGtub3duS2V5c1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQoXG4gICAgICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgbmV3SWR4XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG9sZEZpYmVyKVxuICAgICAgICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gb2xkRmliZXIpLFxuICAgICAgICAgICAgICAgIChwcmV2aW91c05ld0ZpYmVyID0gb2xkRmliZXIpKTtcbiAgICAgICAgICBpc0h5ZHJhdGluZyAmJiBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG5ld0lkeCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChcbiAgICAgICAgICBvbGRGaWJlciA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKG9sZEZpYmVyKTtcbiAgICAgICAgICBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgbmV3SWR4KytcbiAgICAgICAgKVxuICAgICAgICAgIChuZXh0T2xkRmliZXIgPSB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICkpLFxuICAgICAgICAgICAgbnVsbCAhPT0gbmV4dE9sZEZpYmVyICYmXG4gICAgICAgICAgICAgICgoa25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBuZXh0T2xkRmliZXIsXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgICAgICBrbm93bktleXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9PSBuZXh0T2xkRmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAgICAgb2xkRmliZXIuZGVsZXRlKFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gbmV4dE9sZEZpYmVyLmtleSA/IG5ld0lkeCA6IG5leHRPbGRGaWJlci5rZXlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKFxuICAgICAgICAgICAgICAgIG5leHRPbGRGaWJlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICBuZXdJZHhcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gbmV4dE9sZEZpYmVyKVxuICAgICAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5leHRPbGRGaWJlciksXG4gICAgICAgICAgICAgIChwcmV2aW91c05ld0ZpYmVyID0gbmV4dE9sZEZpYmVyKSk7XG4gICAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICBvbGRGaWJlci5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgIG5ld0NoaWxkcmVuLFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIGlmIChudWxsID09IG5ld0NoaWxkcmVuKVxuICAgICAgICAgIHRocm93IEVycm9yKFwiQW4gaXRlcmFibGUgb2JqZWN0IHByb3ZpZGVkIG5vIGl0ZXJhdG9yLlwiKTtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGwsXG4gICAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gbnVsbCxcbiAgICAgICAgICAgIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICBuZXdJZHggPSAoY3VycmVudEZpcnN0Q2hpbGQgPSAwKSxcbiAgICAgICAgICAgIG5leHRPbGRGaWJlciA9IG51bGwsXG4gICAgICAgICAgICBrbm93bktleXMgPSBudWxsLFxuICAgICAgICAgICAgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKTtcbiAgICAgICAgICBudWxsICE9PSBvbGRGaWJlciAmJiAhc3RlcC5kb25lO1xuICAgICAgICAgIG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpXG4gICAgICAgICkge1xuICAgICAgICAgIG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4XG4gICAgICAgICAgICA/ICgobmV4dE9sZEZpYmVyID0gb2xkRmliZXIpLCAob2xkRmliZXIgPSBudWxsKSlcbiAgICAgICAgICAgIDogKG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmcpO1xuICAgICAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG4gICAgICAgICAgaWYgKG51bGwgPT09IG5ld0ZpYmVyKSB7XG4gICAgICAgICAgICBudWxsID09PSBvbGRGaWJlciAmJiAob2xkRmliZXIgPSBuZXh0T2xkRmliZXIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG5ld0ZpYmVyLFxuICAgICAgICAgICAgc3RlcC52YWx1ZSxcbiAgICAgICAgICAgIGtub3duS2V5c1xuICAgICAgICAgICk7XG4gICAgICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgICAgb2xkRmliZXIgJiZcbiAgICAgICAgICAgIG51bGwgPT09IG5ld0ZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdJZHgpO1xuICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgICAgID8gKHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcilcbiAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyKTtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXAuZG9uZSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKSxcbiAgICAgICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KSxcbiAgICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBpZiAobnVsbCA9PT0gb2xkRmliZXIpIHtcbiAgICAgICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpXG4gICAgICAgICAgICAob2xkRmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gb2xkRmliZXIgJiZcbiAgICAgICAgICAgICAgICAoKGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgc3RlcC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIGtub3duS2V5c1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQoXG4gICAgICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgbmV3SWR4XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG9sZEZpYmVyKVxuICAgICAgICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gb2xkRmliZXIpLFxuICAgICAgICAgICAgICAgIChwcmV2aW91c05ld0ZpYmVyID0gb2xkRmliZXIpKTtcbiAgICAgICAgICBpc0h5ZHJhdGluZyAmJiBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG5ld0lkeCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChcbiAgICAgICAgICBvbGRGaWJlciA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKG9sZEZpYmVyKTtcbiAgICAgICAgICAhc3RlcC5kb25lO1xuICAgICAgICAgIG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpXG4gICAgICAgIClcbiAgICAgICAgICAobmV4dE9sZEZpYmVyID0gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICBzdGVwLnZhbHVlLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApKSxcbiAgICAgICAgICAgIG51bGwgIT09IG5leHRPbGRGaWJlciAmJlxuICAgICAgICAgICAgICAoKGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgbmV4dE9sZEZpYmVyLFxuICAgICAgICAgICAgICAgIHN0ZXAudmFsdWUsXG4gICAgICAgICAgICAgICAga25vd25LZXlzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gbmV4dE9sZEZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgIG9sZEZpYmVyLmRlbGV0ZShcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IG5leHRPbGRGaWJlci5rZXkgPyBuZXdJZHggOiBuZXh0T2xkRmliZXIua2V5XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChcbiAgICAgICAgICAgICAgICBuZXh0T2xkRmliZXIsXG4gICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgbmV3SWR4XG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5leHRPbGRGaWJlcilcbiAgICAgICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXh0T2xkRmliZXIpLFxuICAgICAgICAgICAgICAocHJldmlvdXNOZXdGaWJlciA9IG5leHRPbGRGaWJlcikpO1xuICAgICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgb2xkRmliZXIuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICBpc0h5ZHJhdGluZyAmJiBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG5ld0lkeCk7XG4gICAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgIG5ld0NoaWxkLFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJlxuICAgICAgICAgIG51bGwgIT09IG5ld0NoaWxkICYmXG4gICAgICAgICAgbmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSAmJlxuICAgICAgICAgIG51bGwgPT09IG5ld0NoaWxkLmtleSAmJlxuICAgICAgICAgICh2YWxpZGF0ZUZyYWdtZW50UHJvcHMobmV3Q2hpbGQsIG51bGwsIHJldHVybkZpYmVyKSxcbiAgICAgICAgICAobmV3Q2hpbGQgPSBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbikpO1xuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIG51bGwgIT09IG5ld0NoaWxkKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIHZhciBwcmV2RGVidWdJbmZvID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKTtcbiAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSA9IG5ld0NoaWxkLmtleTsgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQ7ICkge1xuICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5ld0NoaWxkLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoNyA9PT0gY3VycmVudEZpcnN0Q2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5lcyA9IHVzZUZpYmVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmVzLl9kZWJ1Z093bmVyID0gbmV3Q2hpbGQuX293bmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZXMuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMobmV3Q2hpbGQsIGxhbmVzLCByZXR1cm5GaWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGxhbmVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuZWxlbWVudFR5cGUgPT09IGtleSB8fFxuICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGRcbiAgICAgICAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBrZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGtleSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAga2V5LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMYXp5SW5pdEluREVWKGtleSkgPT09IGN1cnJlbnRGaXJzdENoaWxkLnR5cGUpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcyA9IHVzZUZpYmVyKGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgY29lcmNlUmVmKGxhbmVzLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMuX2RlYnVnT3duZXIgPSBuZXdDaGlsZC5fb3duZXI7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBsYW5lcztcbiAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEVcbiAgICAgICAgICAgICAgICAgID8gKChsYW5lcyA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQua2V5XG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdUYXNrID0gcmV0dXJuRmliZXIuX2RlYnVnVGFzayksXG4gICAgICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhuZXdDaGlsZCwgbGFuZXMsIHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gbGFuZXMpKVxuICAgICAgICAgICAgICAgICAgOiAoKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICBjb2VyY2VSZWYobGFuZXMsIG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gbGFuZXMpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IHBsYWNlU2luZ2xlQ2hpbGQocmV0dXJuRmliZXIpO1xuICAgICAgICAgICAgICBjdXJyZW50RGVidWdJbmZvID0gcHJldkRlYnVnSW5mbztcbiAgICAgICAgICAgICAgcmV0dXJuIHJldHVybkZpYmVyO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgIHByZXZEZWJ1Z0luZm8gPSBuZXdDaGlsZDtcbiAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQgPSBwcmV2RGVidWdJbmZvLmtleTtcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZpcnN0Q2hpbGQua2V5ID09PSBuZXdDaGlsZClcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIDQgPT09IGN1cnJlbnRGaXJzdENoaWxkLnRhZyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkRlYnVnSW5mby5jb250YWluZXJJbmZvICYmXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkRlYnVnSW5mby5pbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZ1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMgPSB1c2VGaWJlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkRlYnVnSW5mby5jaGlsZHJlbiB8fCBbXVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBsYW5lcztcbiAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGVsc2UgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGFuZXMgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwoXG4gICAgICAgICAgICAgICAgICBwcmV2RGVidWdJbmZvLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGxhbmVzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJldHVybkZpYmVyKTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChwcmV2RGVidWdJbmZvID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgICAgKG5ld0NoaWxkID0gY2FsbExhenlJbml0SW5ERVYobmV3Q2hpbGQpKSxcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gcHJldkRlYnVnSW5mbyksXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKG5ld0NoaWxkKSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChwcmV2RGVidWdJbmZvID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gcHJldkRlYnVnSW5mbyksXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICAgICAgcHJldkRlYnVnSW5mbyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbyk7XG4gICAgICAgICAgICBrZXkgPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKTtcbiAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBrZXkpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiQW4gb2JqZWN0IGlzIG5vdCBhbiBpdGVyYWJsZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIG5ld0NoaWxkcmVuID0ga2V5LmNhbGwobmV3Q2hpbGQpO1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkcmVuID09PSBuZXdDaGlsZCkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgMCAhPT0gcmV0dXJuRmliZXIudGFnIHx8XG4gICAgICAgICAgICAgICAgXCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwiICE9PVxuICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJldHVybkZpYmVyLnR5cGUpIHx8XG4gICAgICAgICAgICAgICAgXCJbb2JqZWN0IEdlbmVyYXRvcl1cIiAhPT1cbiAgICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdDaGlsZHJlbilcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgfHxcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiVXNpbmcgSXRlcmF0b3JzIGFzIGNoaWxkcmVuIGlzIHVuc3VwcG9ydGVkIGFuZCB3aWxsIGxpa2VseSB5aWVsZCB1bmV4cGVjdGVkIHJlc3VsdHMgYmVjYXVzZSBlbnVtZXJhdGluZyBhIGdlbmVyYXRvciBtdXRhdGVzIGl0LiBZb3UgbWF5IGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBgQXJyYXkuZnJvbSgpYCBvciB0aGUgYFsuLi5zcHJlYWRdYCBvcGVyYXRvciBiZWZvcmUgcmVuZGVyaW5nLiBZb3UgY2FuIGFsc28gdXNlIGFuIEl0ZXJhYmxlIHRoYXQgY2FuIGl0ZXJhdGUgbXVsdGlwbGUgdGltZXMgb3ZlciB0aGUgc2FtZSBpdGVtcy5cIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIChkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gITApO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIG5ld0NoaWxkLmVudHJpZXMgIT09IGtleSB8fFxuICAgICAgICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgfHxcbiAgICAgICAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLlwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoZGlkV2FybkFib3V0TWFwcyA9ICEwKSk7XG4gICAgICAgICAgICByZXR1cm5GaWJlciA9IHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4sXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IHByZXZEZWJ1Z0luZm87XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuRmliZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZC50aGVuKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgIHVud3JhcFRoZW5hYmxlKG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBwcmV2RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG5ld0NoaWxkLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUpXG4gICAgICAgICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxpYXRpb24ocmV0dXJuRmliZXIsIG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgXCJcIiAhPT0gbmV3Q2hpbGQpIHx8XG4gICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG5ld0NoaWxkIHx8XG4gICAgICAgICAgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIG5ld0NoaWxkXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHByZXZEZWJ1Z0luZm8gPSBcIlwiICsgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQgJiYgNiA9PT0gY3VycmVudEZpcnN0Q2hpbGQudGFnXG4gICAgICAgICAgICAgID8gKGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAobGFuZXMgPSB1c2VGaWJlcihjdXJyZW50Rmlyc3RDaGlsZCwgcHJldkRlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gbGFuZXMpKVxuICAgICAgICAgICAgICA6IChkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpLFxuICAgICAgICAgICAgICAgIChsYW5lcyA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoXG4gICAgICAgICAgICAgICAgICBwcmV2RGVidWdJbmZvLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z1Rhc2sgPSByZXR1cm5GaWJlci5fZGVidWdUYXNrKSxcbiAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGxhbmVzKSksXG4gICAgICAgICAgICBwbGFjZVNpbmdsZUNoaWxkKHJldHVybkZpYmVyKVxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmXG4gICAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiB3YXJuT25TeW1ib2xUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIHJldHVybiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgICAgICB2YXIgcHJldkRlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbiAgICAgICAgICB2YXIgZmlyc3RDaGlsZEZpYmVyID0gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoZW5hYmxlU3RhdGUgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkRmliZXI7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBpZiAoeCA9PT0gU3VzcGVuc2VFeGNlcHRpb24gfHwgeCA9PT0gU3VzcGVuc2VBY3Rpb25FeGNlcHRpb24pIHRocm93IHg7XG4gICAgICAgICAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoMjksIHgsIG51bGwsIHJldHVybkZpYmVyLm1vZGUpO1xuICAgICAgICAgIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gICAgICAgICAgZmliZXIucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgdmFyIGRlYnVnSW5mbyA9IChmaWJlci5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyk7XG4gICAgICAgICAgZmliZXIuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlci5fZGVidWdPd25lcjtcbiAgICAgICAgICBmaWJlci5fZGVidWdUYXNrID0gcmV0dXJuRmliZXIuX2RlYnVnVGFzaztcbiAgICAgICAgICBpZiAobnVsbCAhPSBkZWJ1Z0luZm8pXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZGVidWdJbmZvLmxlbmd0aCAtIDE7IDAgPD0gaTsgaS0tKVxuICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGRlYnVnSW5mb1tpXS5zdGFjaykge1xuICAgICAgICAgICAgICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gZGVidWdJbmZvW2ldO1xuICAgICAgICAgICAgICAgIGZpYmVyLl9kZWJ1Z1Rhc2sgPSBkZWJ1Z0luZm9baV0uZGVidWdUYXNrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZpYmVyO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBwcmV2RGVidWdJbmZvO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIoaGFuZGxlcikge1xuICAgICAgdmFyIGN1cnJlbnQgPSBoYW5kbGVyLmFsdGVybmF0ZTtcbiAgICAgIHB1c2goXG4gICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IsXG4gICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrLFxuICAgICAgICBoYW5kbGVyXG4gICAgICApO1xuICAgICAgcHVzaChzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciwgaGFuZGxlciwgaGFuZGxlcik7XG4gICAgICBudWxsID09PSBzaGVsbEJvdW5kYXJ5ICYmXG4gICAgICAgIChudWxsID09PSBjdXJyZW50IHx8IG51bGwgIT09IGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IuY3VycmVudFxuICAgICAgICAgID8gKHNoZWxsQm91bmRhcnkgPSBoYW5kbGVyKVxuICAgICAgICAgIDogbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmIChzaGVsbEJvdW5kYXJ5ID0gaGFuZGxlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyKGZpYmVyKSB7XG4gICAgICBpZiAoMjIgPT09IGZpYmVyLnRhZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBmaWJlciksXG4gICAgICAgICAgcHVzaChzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKSxcbiAgICAgICAgICBudWxsID09PSBzaGVsbEJvdW5kYXJ5KVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgY3VycmVudCA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIChzaGVsbEJvdW5kYXJ5ID0gZmliZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKGZpYmVyKSB7XG4gICAgICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgZmliZXIpO1xuICAgICAgcHVzaChcbiAgICAgICAgc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsXG4gICAgICAgIHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQsXG4gICAgICAgIGZpYmVyXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BTdXNwZW5zZUhhbmRsZXIoZmliZXIpIHtcbiAgICAgIHBvcChzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgc2hlbGxCb3VuZGFyeSA9PT0gZmliZXIgJiYgKHNoZWxsQm91bmRhcnkgPSBudWxsKTtcbiAgICAgIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpIHtcbiAgICAgIGZvciAodmFyIG5vZGUgPSByb3c7IG51bGwgIT09IG5vZGU7ICkge1xuICAgICAgICBpZiAoMTMgPT09IG5vZGUudGFnKSB7XG4gICAgICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG51bGwgIT09IHN0YXRlICYmXG4gICAgICAgICAgICAoKHN0YXRlID0gc3RhdGUuZGVoeWRyYXRlZCksXG4gICAgICAgICAgICBudWxsID09PSBzdGF0ZSB8fFxuICAgICAgICAgICAgICBzdGF0ZS5kYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgICAgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soc3RhdGUpKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIDE5ID09PSBub2RlLnRhZyAmJlxuICAgICAgICAgIHZvaWQgMCAhPT0gbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICgwICE9PSAobm9kZS5mbGFncyAmIDEyOCkpIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2UgaWYgKG51bGwgIT09IG5vZGUuY2hpbGQpIHtcbiAgICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUgPT09IHJvdykgYnJlYWs7XG4gICAgICAgIGZvciAoOyBudWxsID09PSBub2RlLnNpYmxpbmc7ICkge1xuICAgICAgICAgIGlmIChudWxsID09PSBub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gcm93KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgaWYgKG51bGwgIT09IGNhbGxiYWNrICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBrZXkgPSBTdHJpbmcoY2FsbGJhY2spO1xuICAgICAgICBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suaGFzKGtleSkgfHxcbiAgICAgICAgICAoZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmFkZChrZXkpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgY3RvcixcbiAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxcbiAgICAgIG5leHRQcm9wc1xuICAgICkge1xuICAgICAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUsXG4gICAgICAgIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2b2lkIDAgPT09IHBhcnRpYWxTdGF0ZSAmJlxuICAgICAgICAoKGN0b3IgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgXCJDb21wb25lbnRcIiksXG4gICAgICAgIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5oYXMoY3RvcikgfHxcbiAgICAgICAgICAoZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmFkZChjdG9yKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKTogQSB2YWxpZCBzdGF0ZSBvYmplY3QgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuIFlvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC5cIixcbiAgICAgICAgICAgIGN0b3JcbiAgICAgICAgICApKSk7XG4gICAgICBwcmV2U3RhdGUgPVxuICAgICAgICBudWxsID09PSBwYXJ0aWFsU3RhdGUgfHwgdm9pZCAwID09PSBwYXJ0aWFsU3RhdGVcbiAgICAgICAgICA/IHByZXZTdGF0ZVxuICAgICAgICAgIDogYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gcHJldlN0YXRlO1xuICAgICAgMCA9PT0gd29ya0luUHJvZ3Jlc3MubGFuZXMgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZSA9IHByZXZTdGF0ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjdG9yLFxuICAgICAgb2xkUHJvcHMsXG4gICAgICBuZXdQcm9wcyxcbiAgICAgIG9sZFN0YXRlLFxuICAgICAgbmV3U3RhdGUsXG4gICAgICBuZXh0Q29udGV4dFxuICAgICkge1xuICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSkge1xuICAgICAgICBvbGRQcm9wcyA9IGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICBuZXh0Q29udGV4dFxuICAgICAgICApO1xuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG9sZFByb3BzID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICAgIG5leHRDb250ZXh0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZvaWQgMCA9PT0gb2xkUHJvcHMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSBib29sZWFuIHZhbHVlLiBNYWtlIHN1cmUgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiBvbGRQcm9wcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudFxuICAgICAgICA/ICFzaGFsbG93RXF1YWwob2xkUHJvcHMsIG5ld1Byb3BzKSB8fCAhc2hhbGxvd0VxdWFsKG9sZFN0YXRlLCBuZXdTdGF0ZSlcbiAgICAgICAgOiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3UHJvcHMsXG4gICAgICBuZXh0Q29udGV4dFxuICAgICkge1xuICAgICAgdmFyIG9sZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgICBpbnN0YW5jZS5zdGF0ZSAhPT0gb2xkU3RhdGUgJiZcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcyA9XG4gICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJDb21wb25lbnRcIiksXG4gICAgICAgIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5oYXMod29ya0luUHJvZ3Jlc3MpIHx8XG4gICAgICAgICAgKGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5hZGQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvIHRoaXMuc3RhdGUgaXMgZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuXCIsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICkpLFxuICAgICAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSxcbiAgICAgICAgICBudWxsXG4gICAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhDb21wb25lbnQsIGJhc2VQcm9wcykge1xuICAgICAgdmFyIG5ld1Byb3BzID0gYmFzZVByb3BzO1xuICAgICAgaWYgKFwicmVmXCIgaW4gYmFzZVByb3BzKSB7XG4gICAgICAgIG5ld1Byb3BzID0ge307XG4gICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIGJhc2VQcm9wcylcbiAgICAgICAgICBcInJlZlwiICE9PSBwcm9wTmFtZSAmJiAobmV3UHJvcHNbcHJvcE5hbWVdID0gYmFzZVByb3BzW3Byb3BOYW1lXSk7XG4gICAgICB9XG4gICAgICBpZiAoKENvbXBvbmVudCA9IENvbXBvbmVudC5kZWZhdWx0UHJvcHMpKSB7XG4gICAgICAgIG5ld1Byb3BzID09PSBiYXNlUHJvcHMgJiYgKG5ld1Byb3BzID0gYXNzaWduKHt9LCBuZXdQcm9wcykpO1xuICAgICAgICBmb3IgKHZhciBfcHJvcE5hbWUgaW4gQ29tcG9uZW50KVxuICAgICAgICAgIHZvaWQgMCA9PT0gbmV3UHJvcHNbX3Byb3BOYW1lXSAmJlxuICAgICAgICAgICAgKG5ld1Byb3BzW19wcm9wTmFtZV0gPSBDb21wb25lbnRbX3Byb3BOYW1lXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3UHJvcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmF1bHRPblVuY2F1Z2h0RXJyb3IoZXJyb3IpIHtcbiAgICAgIHJlcG9ydEdsb2JhbEVycm9yKGVycm9yKTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCIlc1xcblxcbiVzXFxuXCIsXG4gICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICA/IFwiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDxcIiArIGNvbXBvbmVudE5hbWUgKyBcIj4gY29tcG9uZW50LlwiXG4gICAgICAgICAgOiBcIkFuIGVycm9yIG9jY3VycmVkIGluIG9uZSBvZiB5b3VyIFJlYWN0IGNvbXBvbmVudHMuXCIsXG4gICAgICAgIFwiQ29uc2lkZXIgYWRkaW5nIGFuIGVycm9yIGJvdW5kYXJ5IHRvIHlvdXIgdHJlZSB0byBjdXN0b21pemUgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3IuXFxuVmlzaXQgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9lcnJvci1ib3VuZGFyaWVzIHRvIGxlYXJuIG1vcmUgYWJvdXQgZXJyb3IgYm91bmRhcmllcy5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmYXVsdE9uQ2F1Z2h0RXJyb3IoZXJyb3IpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lTWVzc2FnZSA9IGNvbXBvbmVudE5hbWVcbiAgICAgICAgICA/IFwiVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIHRoZSA8XCIgKyBjb21wb25lbnROYW1lICsgXCI+IGNvbXBvbmVudC5cIlxuICAgICAgICAgIDogXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50cy5cIixcbiAgICAgICAgcmVjcmVhdGVNZXNzYWdlID1cbiAgICAgICAgICBcIlJlYWN0IHdpbGwgdHJ5IHRvIHJlY3JlYXRlIHRoaXMgY29tcG9uZW50IHRyZWUgZnJvbSBzY3JhdGNoIHVzaW5nIHRoZSBlcnJvciBib3VuZGFyeSB5b3UgcHJvdmlkZWQsIFwiICtcbiAgICAgICAgICAoKGVycm9yQm91bmRhcnlOYW1lIHx8IFwiQW5vbnltb3VzXCIpICsgXCIuXCIpO1xuICAgICAgaWYgKFxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZXJyb3IgJiZcbiAgICAgICAgbnVsbCAhPT0gZXJyb3IgJiZcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yLmVudmlyb25tZW50TmFtZVxuICAgICAgKSB7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBlcnJvci5lbnZpcm9ubWVudE5hbWU7XG4gICAgICAgIGVycm9yID0gW1xuICAgICAgICAgIFwiJW9cXG5cXG4lc1xcblxcbiVzXFxuXCIsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgY29tcG9uZW50TmFtZU1lc3NhZ2UsXG4gICAgICAgICAgcmVjcmVhdGVNZXNzYWdlXG4gICAgICAgIF0uc2xpY2UoMCk7XG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvclswXVxuICAgICAgICAgID8gZXJyb3Iuc3BsaWNlKFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICBiYWRnZUZvcm1hdCArIGVycm9yWzBdLFxuICAgICAgICAgICAgICBiYWRnZVN0eWxlLFxuICAgICAgICAgICAgICBwYWQgKyBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgKyBwYWQsXG4gICAgICAgICAgICAgIHJlc2V0U3R5bGVcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGVycm9yLnNwbGljZShcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgYmFkZ2VGb3JtYXQsXG4gICAgICAgICAgICAgIGJhZGdlU3R5bGUsXG4gICAgICAgICAgICAgIHBhZCArIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCArIHBhZCxcbiAgICAgICAgICAgICAgcmVzZXRTdHlsZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgZXJyb3IudW5zaGlmdChjb25zb2xlKTtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gYmluZC5hcHBseShjb25zb2xlLmVycm9yLCBlcnJvcik7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCgpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlb1xcblxcbiVzXFxuXFxuJXNcXG5cIixcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBjb21wb25lbnROYW1lTWVzc2FnZSxcbiAgICAgICAgICByZWNyZWF0ZU1lc3NhZ2VcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmYXVsdE9uUmVjb3ZlcmFibGVFcnJvcihlcnJvcikge1xuICAgICAgcmVwb3J0R2xvYmFsRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsb2dVbmNhdWdodEVycm9yKHJvb3QsIGVycm9ySW5mbykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29tcG9uZW50TmFtZSA9IGVycm9ySW5mby5zb3VyY2VcbiAgICAgICAgICA/IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZXJyb3JJbmZvLnNvdXJjZSlcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGVycm9yQm91bmRhcnlOYW1lID0gbnVsbDtcbiAgICAgICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuICAgICAgICBpZiAobnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUpXG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgb25VbmNhdWdodEVycm9yID0gcm9vdC5vblVuY2F1Z2h0RXJyb3I7XG4gICAgICAgICAgb25VbmNhdWdodEVycm9yKGVycm9yLCB7IGNvbXBvbmVudFN0YWNrOiBlcnJvckluZm8uc3RhY2sgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUkNSkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBlJDU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsb2dDYXVnaHRFcnJvcihyb290LCBib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb21wb25lbnROYW1lID0gZXJyb3JJbmZvLnNvdXJjZVxuICAgICAgICAgID8gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihlcnJvckluZm8uc291cmNlKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGJvdW5kYXJ5KTtcbiAgICAgICAgdmFyIG9uQ2F1Z2h0RXJyb3IgPSByb290Lm9uQ2F1Z2h0RXJyb3I7XG4gICAgICAgIG9uQ2F1Z2h0RXJyb3IoZXJyb3JJbmZvLnZhbHVlLCB7XG4gICAgICAgICAgY29tcG9uZW50U3RhY2s6IGVycm9ySW5mby5zdGFjayxcbiAgICAgICAgICBlcnJvckJvdW5kYXJ5OiAxID09PSBib3VuZGFyeS50YWcgPyBib3VuZGFyeS5zdGF0ZU5vZGUgOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSQ2KSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGUkNjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290LCBlcnJvckluZm8sIGxhbmUpIHtcbiAgICAgIGxhbmUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICBsYW5lLnRhZyA9IENhcHR1cmVVcGRhdGU7XG4gICAgICBsYW5lLnBheWxvYWQgPSB7IGVsZW1lbnQ6IG51bGwgfTtcbiAgICAgIGxhbmUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKGVycm9ySW5mby5zb3VyY2UsIGxvZ1VuY2F1Z2h0RXJyb3IsIHJvb3QsIGVycm9ySW5mbyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUobGFuZSkge1xuICAgICAgbGFuZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgIGxhbmUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0aWFsaXplQ2xhc3NFcnJvclVwZGF0ZSh1cGRhdGUsIHJvb3QsIGZpYmVyLCBlcnJvckluZm8pIHtcbiAgICAgIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPSBmaWJlci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IpIHtcbiAgICAgICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuICAgICAgICB1cGRhdGUucGF5bG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGVycm9ySW5mby5zb3VyY2UsXG4gICAgICAgICAgICBsb2dDYXVnaHRFcnJvcixcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgIGVycm9ySW5mb1xuICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIG51bGwgIT09IGluc3QgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdC5jb21wb25lbnREaWRDYXRjaCAmJlxuICAgICAgICAodXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGVycm9ySW5mby5zb3VyY2UsXG4gICAgICAgICAgICBsb2dDYXVnaHRFcnJvcixcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgIGVycm9ySW5mb1xuICAgICAgICAgICk7XG4gICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICYmXG4gICAgICAgICAgICAobnVsbCA9PT0gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWRcbiAgICAgICAgICAgICAgPyAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFt0aGlzXSkpXG4gICAgICAgICAgICAgIDogbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuYWRkKHRoaXMpKTtcbiAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkQ2F0Y2hJbkRFVih0aGlzLCBlcnJvckluZm8pO1xuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciB8fFxuICAgICAgICAgICAgKDAgPT09IChmaWJlci5sYW5lcyAmIDIpICYmXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCIlczogRXJyb3IgYm91bmRhcmllcyBzaG91bGQgaW1wbGVtZW50IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpLiBJbiB0aGF0IG1ldGhvZCwgcmV0dXJuIGEgc3RhdGUgdXBkYXRlIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBvciBmYWxsYmFjayBVSS5cIixcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIlVua25vd25cIlxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKFxuICAgICAgcm9vdCxcbiAgICAgIHJldHVybkZpYmVyLFxuICAgICAgc291cmNlRmliZXIsXG4gICAgICB2YWx1ZSxcbiAgICAgIHJvb3RSZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgc291cmNlRmliZXIuZmxhZ3MgfD0gMzI3Njg7XG4gICAgICBpc0RldlRvb2xzUHJlc2VudCAmJiByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IHZhbHVlICYmXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZS50aGVuXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuRmliZXIgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG4gICAgICAgIG51bGwgIT09IHJldHVybkZpYmVyICYmXG4gICAgICAgICAgcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgICAgICAgcm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgICBpc0h5ZHJhdGluZyAmJiAoZGlkU3VzcGVuZE9yRXJyb3JERVYgPSAhMCk7XG4gICAgICAgIHNvdXJjZUZpYmVyID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgICAgaWYgKG51bGwgIT09IHNvdXJjZUZpYmVyKSB7XG4gICAgICAgICAgc3dpdGNoIChzb3VyY2VGaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gc2hlbGxCb3VuZGFyeVxuICAgICAgICAgICAgICAgICAgPyByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKClcbiAgICAgICAgICAgICAgICAgIDogbnVsbCA9PT0gc291cmNlRmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJblByb2dyZXNzICYmXG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZCksXG4gICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzICY9IC0yNTcpLFxuICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmxhbmVzID0gcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PT0gbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlXG4gICAgICAgICAgICAgICAgICA/IChzb3VyY2VGaWJlci5mbGFncyB8PSAxNjM4NClcbiAgICAgICAgICAgICAgICAgIDogKChyZXR1cm5GaWJlciA9IHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgICAgICA/IChzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IG5ldyBTZXQoW3ZhbHVlXSkpXG4gICAgICAgICAgICAgICAgICAgICAgOiByZXR1cm5GaWJlci5hZGQodmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgICAgdmFsdWUgPT09IG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZVxuICAgICAgICAgICAgICAgICAgPyAoc291cmNlRmliZXIuZmxhZ3MgfD0gMTYzODQpXG4gICAgICAgICAgICAgICAgICA6ICgocmV0dXJuRmliZXIgPSBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICAgICAgICAgIG51bGwgPT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICAgICAgPyAoKHJldHVybkZpYmVyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2VzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeVF1ZXVlOiBuZXcgU2V0KFt2YWx1ZV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IHJldHVybkZpYmVyKSlcbiAgICAgICAgICAgICAgICAgICAgICA6ICgoc291cmNlRmliZXIgPSByZXR1cm5GaWJlci5yZXRyeVF1ZXVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgPT09IHNvdXJjZUZpYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gKHJldHVybkZpYmVyLnJldHJ5UXVldWUgPSBuZXcgU2V0KFt2YWx1ZV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvdXJjZUZpYmVyLmFkZCh2YWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbnNlIGhhbmRsZXIgdGFnIChcIiArXG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyLnRhZyArXG4gICAgICAgICAgICAgIFwiKS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpO1xuICAgICAgICByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCk7XG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0h5ZHJhdGluZylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoZGlkU3VzcGVuZE9yRXJyb3JERVYgPSAhMCksXG4gICAgICAgICAgKHJldHVybkZpYmVyID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudCksXG4gICAgICAgICAgbnVsbCAhPT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgID8gKDAgPT09IChyZXR1cm5GaWJlci5mbGFncyAmIDY1NTM2KSAmJiAocmV0dXJuRmliZXIuZmxhZ3MgfD0gMjU2KSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyLmxhbmVzID0gcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgdmFsdWUgIT09IEh5ZHJhdGlvbk1pc21hdGNoRXhjZXB0aW9uICYmXG4gICAgICAgICAgICAgICAgcXVldWVIeWRyYXRpb25FcnJvcihcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKFxuICAgICAgICAgICAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBoeWRyYXRpbmcgYnV0IFJlYWN0IHdhcyBhYmxlIHRvIHJlY292ZXIgYnkgaW5zdGVhZCBjbGllbnQgcmVuZGVyaW5nIGZyb20gdGhlIG5lYXJlc3QgU3VzcGVuc2UgYm91bmRhcnkuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgeyBjYXVzZTogdmFsdWUgfVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWJlclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICA6ICh2YWx1ZSAhPT0gSHlkcmF0aW9uTWlzbWF0Y2hFeGNlcHRpb24gJiZcbiAgICAgICAgICAgICAgICBxdWV1ZUh5ZHJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoXG4gICAgICAgICAgICAgICAgICAgIEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGh5ZHJhdGluZyBidXQgUmVhY3Qgd2FzIGFibGUgdG8gcmVjb3ZlciBieSBpbnN0ZWFkIGNsaWVudCByZW5kZXJpbmcgdGhlIGVudGlyZSByb290LlwiLFxuICAgICAgICAgICAgICAgICAgICAgIHsgY2F1c2U6IHZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlRmliZXJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAocm9vdCA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGUpLFxuICAgICAgICAgICAgICAocm9vdC5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgJj0gLXJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIChyb290LmxhbmVzIHw9IHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICh2YWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHZhbHVlLCBzb3VyY2VGaWJlcikpLFxuICAgICAgICAgICAgICAocm9vdFJlbmRlckxhbmVzID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKFxuICAgICAgICAgICAgICAgIHJvb3Quc3RhdGVOb2RlLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHJvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHJvb3QsIHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgJiZcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RFcnJvcmVkKSksXG4gICAgICAgICAgITFcbiAgICAgICAgKTtcbiAgICAgIHZhciBlcnJvciA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKFxuICAgICAgICBFcnJvcihcbiAgICAgICAgICBcIlRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgY29uY3VycmVudCByZW5kZXJpbmcgYnV0IFJlYWN0IHdhcyBhYmxlIHRvIHJlY292ZXIgYnkgaW5zdGVhZCBzeW5jaHJvbm91c2x5IHJlbmRlcmluZyB0aGUgZW50aXJlIHJvb3QuXCIsXG4gICAgICAgICAgeyBjYXVzZTogdmFsdWUgfVxuICAgICAgICApLFxuICAgICAgICBzb3VyY2VGaWJlclxuICAgICAgKTtcbiAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnNcbiAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9IFtlcnJvcl0pXG4gICAgICAgIDogd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RXJyb3JlZCk7XG4gICAgICBpZiAobnVsbCA9PT0gcmV0dXJuRmliZXIpIHJldHVybiAhMDtcbiAgICAgIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZUZpYmVyKTtcbiAgICAgIHNvdXJjZUZpYmVyID0gcmV0dXJuRmliZXI7XG4gICAgICBkbyB7XG4gICAgICAgIHN3aXRjaCAoc291cmNlRmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgICAgKHJvb3QgPSByb290UmVuZGVyTGFuZXMgJiAtcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmxhbmVzIHw9IHJvb3QpLFxuICAgICAgICAgICAgICAocm9vdCA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShcbiAgICAgICAgICAgICAgICBzb3VyY2VGaWJlci5zdGF0ZU5vZGUsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHNvdXJjZUZpYmVyLCByb290KSxcbiAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKHJldHVybkZpYmVyID0gc291cmNlRmliZXIudHlwZSksXG4gICAgICAgICAgICAgIChlcnJvciA9IHNvdXJjZUZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAgIDAgPT09IChzb3VyY2VGaWJlci5mbGFncyAmIDEyOCkgJiZcbiAgICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuRmliZXIuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIHx8XG4gICAgICAgICAgICAgICAgICAobnVsbCAhPT0gZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZXJyb3IuY29tcG9uZW50RGlkQ2F0Y2ggJiZcbiAgICAgICAgICAgICAgICAgICAgKG51bGwgPT09IGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIWxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhlcnJvcikpKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgICAgICAocm9vdFJlbmRlckxhbmVzICY9IC1yb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5sYW5lcyB8PSByb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKHJvb3RSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVDbGFzc0Vycm9yVXBkYXRlKFxuICAgICAgICAgICAgICAgICAgcm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZShzb3VyY2VGaWJlciwgcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZUZpYmVyID0gc291cmNlRmliZXIucmV0dXJuO1xuICAgICAgfSB3aGlsZSAobnVsbCAhPT0gc291cmNlRmliZXIpO1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9XG4gICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICA/IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgOiByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGN1cnJlbnQuY2hpbGQsXG4gICAgICAgICAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgQ29tcG9uZW50ID0gQ29tcG9uZW50LnJlbmRlcjtcbiAgICAgIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgICBpZiAoXCJyZWZcIiBpbiBuZXh0UHJvcHMpIHtcbiAgICAgICAgdmFyIHByb3BzV2l0aG91dFJlZiA9IHt9O1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gbmV4dFByb3BzKVxuICAgICAgICAgIFwicmVmXCIgIT09IGtleSAmJiAocHJvcHNXaXRob3V0UmVmW2tleV0gPSBuZXh0UHJvcHNba2V5XSk7XG4gICAgICB9IGVsc2UgcHJvcHNXaXRob3V0UmVmID0gbmV4dFByb3BzO1xuICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbmV4dFByb3BzID0gcmVuZGVyV2l0aEhvb2tzKFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBwcm9wc1dpdGhvdXRSZWYsXG4gICAgICAgIHJlZixcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgICBrZXkgPSBjaGVja0RpZFJlbmRlcklkSG9vaygpO1xuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKTtcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmICFkaWRSZWNlaXZlVXBkYXRlKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKVxuICAgICAgICApO1xuICAgICAgaXNIeWRyYXRpbmcgJiYga2V5ICYmIHB1c2hNYXRlcmlhbGl6ZWRUcmVlSWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgICAgICB2YXIgdHlwZSA9IENvbXBvbmVudC50eXBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgICFzaG91bGRDb25zdHJ1Y3QodHlwZSkgJiZcbiAgICAgICAgICB2b2lkIDAgPT09IHR5cGUuZGVmYXVsdFByb3BzICYmXG4gICAgICAgICAgbnVsbCA9PT0gQ29tcG9uZW50LmNvbXBhcmVcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoQ29tcG9uZW50ID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50YWcgPSAxNSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCksXG4gICAgICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIHR5cGUpLFxuICAgICAgICAgICAgdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICAgICAgQ29tcG9uZW50LnR5cGUsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZSxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgICBjdXJyZW50LnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICAgICAgY3VycmVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgcmV0dXJuICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgdHlwZSA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICBpZiAoIWNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSkge1xuICAgICAgICB2YXIgcHJldlByb3BzID0gdHlwZS5tZW1vaXplZFByb3BzO1xuICAgICAgICBDb21wb25lbnQgPSBDb21wb25lbnQuY29tcGFyZTtcbiAgICAgICAgQ29tcG9uZW50ID0gbnVsbCAhPT0gQ29tcG9uZW50ID8gQ29tcG9uZW50IDogc2hhbGxvd0VxdWFsO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgQ29tcG9uZW50KHByZXZQcm9wcywgbmV4dFByb3BzKSAmJlxuICAgICAgICAgIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWZcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTtcbiAgICAgIGN1cnJlbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyh0eXBlLCBuZXh0UHJvcHMpO1xuICAgICAgY3VycmVudC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgICBjdXJyZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgcmV0dXJuICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50KSB7XG4gICAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpICYmXG4gICAgICAgICAgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZiAmJlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IGN1cnJlbnQudHlwZVxuICAgICAgICApXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKChkaWRSZWNlaXZlVXBkYXRlID0gITEpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IG5leHRQcm9wcyA9IHByZXZQcm9wcyksXG4gICAgICAgICAgICBjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcykpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMzEwNzIpICYmIChkaWRSZWNlaXZlVXBkYXRlID0gITApO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXMpLFxuICAgICAgICAgICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgcHJldlN0YXRlID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG4gICAgICBpZiAoXCJoaWRkZW5cIiA9PT0gbmV4dFByb3BzLm1vZGUpIHtcbiAgICAgICAgaWYgKDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkpIHtcbiAgICAgICAgICBuZXh0UHJvcHMgPVxuICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlXG4gICAgICAgICAgICAgID8gcHJldlN0YXRlLmJhc2VMYW5lcyB8IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgIDogcmVuZGVyTGFuZXM7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgICAgICAgICAgIGZvciAocHJldlN0YXRlID0gMDsgbnVsbCAhPT0gbmV4dENoaWxkcmVuOyApXG4gICAgICAgICAgICAgIChwcmV2U3RhdGUgPVxuICAgICAgICAgICAgICAgIHByZXZTdGF0ZSB8IG5leHRDaGlsZHJlbi5sYW5lcyB8IG5leHRDaGlsZHJlbi5jaGlsZExhbmVzKSxcbiAgICAgICAgICAgICAgICAobmV4dENoaWxkcmVuID0gbmV4dENoaWxkcmVuLnNpYmxpbmcpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IHByZXZTdGF0ZSAmIH5uZXh0UHJvcHM7XG4gICAgICAgICAgfSBlbHNlICh3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gMCksICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGwpO1xuICAgICAgICAgIHJldHVybiBkZWZlckhpZGRlbk9mZnNjcmVlbkNvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoMCAhPT0gKHJlbmRlckxhbmVzICYgNTM2ODcwOTEyKSlcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHsgYmFzZUxhbmVzOiAwLCBjYWNoZVBvb2w6IG51bGwgfSksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIHB1c2hUcmFuc2l0aW9uKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHByZXZTdGF0ZSA/IHByZXZTdGF0ZS5jYWNoZVBvb2wgOiBudWxsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBudWxsICE9PSBwcmV2U3RhdGVcbiAgICAgICAgICAgICAgPyBwdXNoSGlkZGVuQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcHJldlN0YXRlKVxuICAgICAgICAgICAgICA6IHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcHVzaE9mZnNjcmVlblN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IDUzNjg3MDkxMiksXG4gICAgICAgICAgICBkZWZlckhpZGRlbk9mZnNjcmVlbkNvbXBvbmVudChcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIG51bGwgIT09IHByZXZTdGF0ZVxuICAgICAgICAgICAgICAgID8gcHJldlN0YXRlLmJhc2VMYW5lcyB8IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgOiByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlXG4gICAgICAgIG51bGwgIT09IHByZXZTdGF0ZVxuICAgICAgICAgID8gKHB1c2hUcmFuc2l0aW9uKHdvcmtJblByb2dyZXNzLCBwcmV2U3RhdGUuY2FjaGVQb29sKSxcbiAgICAgICAgICAgIHB1c2hIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzLCBwcmV2U3RhdGUpLFxuICAgICAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbCkpXG4gICAgICAgICAgOiAobnVsbCAhPT0gY3VycmVudCAmJiBwdXNoVHJhbnNpdGlvbih3b3JrSW5Qcm9ncmVzcywgbnVsbCksXG4gICAgICAgICAgICByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcykpO1xuICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZlckhpZGRlbk9mZnNjcmVlbkNvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIG5leHRCYXNlTGFuZXMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHBlZWtDYWNoZUZyb21Qb29sKCk7XG4gICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPVxuICAgICAgICBudWxsID09PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgcGFyZW50OiBDYWNoZUNvbnRleHQuX2N1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgcG9vbDogSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICAgICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBuZXh0QmFzZUxhbmVzLFxuICAgICAgICBjYWNoZVBvb2w6IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgfTtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgcHVzaFRyYW5zaXRpb24od29ya0luUHJvZ3Jlc3MsIG51bGwpO1xuICAgICAgcmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzLCAhMCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICAgIGlmIChudWxsID09PSByZWYpXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50LnJlZiAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0ODE2KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcmVmICYmIFwib2JqZWN0XCIgIT09IHR5cGVvZiByZWYpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHJlZiB0byBiZSBhIGZ1bmN0aW9uLCBhbiBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlUmVmKCksIG9yIHVuZGVmaW5lZC9udWxsLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQgfHwgY3VycmVudC5yZWYgIT09IHJlZilcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0ODE2O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIENvbXBvbmVudC5wcm90b3R5cGUgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXJcbiAgICAgICkge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiVW5rbm93blwiO1xuICAgICAgICBkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSB8fFxuICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGhhdmUgYSByZW5kZXIgbWV0aG9kLCBidXQgZG9lc24ndCBleHRlbmQgUmVhY3QuQ29tcG9uZW50LiBUaGlzIGlzIGxpa2VseSB0byBjYXVzZSBlcnJvcnMuIENoYW5nZSAlcyB0byBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuXCIsXG4gICAgICAgICAgICBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICksXG4gICAgICAgICAgKGRpZFdhcm5BYm91dEJhZENsYXNzW2NvbXBvbmVudE5hbWVdID0gITApKTtcbiAgICAgIH1cbiAgICAgIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmXG4gICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgKHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSksXG4gICAgICAgIENvbXBvbmVudC5jb250ZXh0VHlwZXMgJiZcbiAgICAgICAgICAoKGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIlVua25vd25cIiksXG4gICAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVzW2NvbXBvbmVudE5hbWVdIHx8XG4gICAgICAgICAgICAoKGRpZFdhcm5BYm91dENvbnRleHRUeXBlc1tjb21wb25lbnROYW1lXSA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMgdXNlcyB0aGUgbGVnYWN5IGNvbnRleHRUeXBlcyBBUEkgd2hpY2ggd2FzIHJlbW92ZWQgaW4gUmVhY3QgMTkuIFVzZSBSZWFjdC5jcmVhdGVDb250ZXh0KCkgd2l0aCBSZWFjdC51c2VDb250ZXh0KCkgaW5zdGVhZC4gKGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvbGVnYWN5LWNvbnRleHQpXCIsXG4gICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICkpKSk7XG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBDb21wb25lbnQgPSByZW5kZXJXaXRoSG9va3MoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICAgIG5leHRQcm9wcyA9IGNoZWNrRGlkUmVuZGVySWRIb29rKCk7XG4gICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgIWRpZFJlY2VpdmVVcGRhdGUpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgICAgICk7XG4gICAgICBpc0h5ZHJhdGluZyAmJiBuZXh0UHJvcHMgJiYgcHVzaE1hdGVyaWFsaXplZFRyZWVJZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIHNlY29uZEFyZyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPVxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgIG5leHRQcm9wcyA9IHJlbmRlcldpdGhIb29rc0FnYWluKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgIHNlY29uZEFyZ1xuICAgICAgKTtcbiAgICAgIGZpbmlzaFJlbmRlcmluZ0hvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIENvbXBvbmVudCA9IGNoZWNrRGlkUmVuZGVySWRIb29rKCk7XG4gICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgIWRpZFJlY2VpdmVVcGRhdGUpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgICAgICk7XG4gICAgICBpc0h5ZHJhdGluZyAmJiBDb21wb25lbnQgJiYgcHVzaE1hdGVyaWFsaXplZFRyZWVJZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVDbGFzc0NvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKHNob3VsZEVycm9ySW1wbCh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgICAgY2FzZSAhMTpcbiAgICAgICAgICB2YXIgX2luc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLFxuICAgICAgICAgICAgc3RhdGUgPSBuZXcgd29ya0luUHJvZ3Jlc3MudHlwZShcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgX2luc3RhbmNlLmNvbnRleHRcbiAgICAgICAgICAgICkuc3RhdGU7XG4gICAgICAgICAgX2luc3RhbmNlLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKF9pbnN0YW5jZSwgc3RhdGUsIG51bGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICEwOlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyODtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA2NTUzNjtcbiAgICAgICAgICBfaW5zdGFuY2UgPSBFcnJvcihcIlNpbXVsYXRlZCBlcnJvciBjb21pbmcgZnJvbSBEZXZUb29sc1wiKTtcbiAgICAgICAgICB2YXIgbGFuZSA9IHJlbmRlckxhbmVzICYgLXJlbmRlckxhbmVzO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzIHw9IGxhbmU7XG4gICAgICAgICAgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHN0YXRlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRXhwZWN0ZWQgYSB3b3JrLWluLXByb2dyZXNzIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGxhbmUgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGxhbmUpO1xuICAgICAgICAgIGluaXRpYWxpemVDbGFzc0Vycm9yVXBkYXRlKFxuICAgICAgICAgICAgbGFuZSxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihfaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICk7XG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBsYW5lKTtcbiAgICAgIH1cbiAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIGlmIChudWxsID09PSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpIHtcbiAgICAgICAgc3RhdGUgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICAgIF9pbnN0YW5jZSA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICAgICAgXCJjb250ZXh0VHlwZVwiIGluIENvbXBvbmVudCAmJlxuICAgICAgICAgIG51bGwgIT09IF9pbnN0YW5jZSAmJlxuICAgICAgICAgICh2b2lkIDAgPT09IF9pbnN0YW5jZSB8fCBfaW5zdGFuY2UuJCR0eXBlb2YgIT09IFJFQUNUX0NPTlRFWFRfVFlQRSkgJiZcbiAgICAgICAgICAhZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmhhcyhDb21wb25lbnQpICYmXG4gICAgICAgICAgKGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5hZGQoQ29tcG9uZW50KSxcbiAgICAgICAgICAobGFuZSA9XG4gICAgICAgICAgICB2b2lkIDAgPT09IF9pbnN0YW5jZVxuICAgICAgICAgICAgICA/IFwiIEhvd2V2ZXIsIGl0IGlzIHNldCB0byB1bmRlZmluZWQuIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBhIHR5cG8gb3IgYnkgbWl4aW5nIHVwIG5hbWVkIGFuZCBkZWZhdWx0IGltcG9ydHMuIFRoaXMgY2FuIGFsc28gaGFwcGVuIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3ksIHNvIHRyeSBtb3ZpbmcgdGhlIGNyZWF0ZUNvbnRleHQoKSBjYWxsIHRvIGEgc2VwYXJhdGUgZmlsZS5cIlxuICAgICAgICAgICAgICA6IFwib2JqZWN0XCIgIT09IHR5cGVvZiBfaW5zdGFuY2VcbiAgICAgICAgICAgICAgICA/IFwiIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhIFwiICsgdHlwZW9mIF9pbnN0YW5jZSArIFwiLlwiXG4gICAgICAgICAgICAgICAgOiBfaW5zdGFuY2UuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlNVTUVSX1RZUEVcbiAgICAgICAgICAgICAgICAgID8gXCIgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Db25zdW1lciBpbnN0ZWFkP1wiXG4gICAgICAgICAgICAgICAgICA6IFwiIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhbiBvYmplY3Qgd2l0aCBrZXlzIHtcIiArXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKF9pbnN0YW5jZSkuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgICAgICAgICAgXCJ9LlwiKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyBkZWZpbmVzIGFuIGludmFsaWQgY29udGV4dFR5cGUuIGNvbnRleHRUeXBlIHNob3VsZCBwb2ludCB0byB0aGUgQ29udGV4dCBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlQ29udGV4dCgpLiVzXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIkNvbXBvbmVudFwiLFxuICAgICAgICAgICAgbGFuZVxuICAgICAgICAgICkpO1xuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgX2luc3RhbmNlICYmXG4gICAgICAgICAgbnVsbCAhPT0gX2luc3RhbmNlICYmXG4gICAgICAgICAgKHN0YXRlID0gcmVhZENvbnRleHQoX2luc3RhbmNlKSk7XG4gICAgICAgIF9pbnN0YW5jZSA9IG5ldyBDb21wb25lbnQobmV4dFByb3BzLCBzdGF0ZSk7XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgX2luc3RhbmNlID0gbmV3IENvbXBvbmVudChuZXh0UHJvcHMsIHN0YXRlKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgIG51bGwgIT09IF9pbnN0YW5jZS5zdGF0ZSAmJiB2b2lkIDAgIT09IF9pbnN0YW5jZS5zdGF0ZVxuICAgICAgICAgICAgPyBfaW5zdGFuY2Uuc3RhdGVcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgX2luc3RhbmNlLnVwZGF0ZXIgPSBjbGFzc0NvbXBvbmVudFVwZGF0ZXI7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IF9pbnN0YW5jZTtcbiAgICAgICAgX2luc3RhbmNlLl9yZWFjdEludGVybmFscyA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICBfaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IGZha2VJbnRlcm5hbEluc3RhbmNlO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICYmXG4gICAgICAgICAgbnVsbCA9PT0gc3RhdGUgJiZcbiAgICAgICAgICAoKHN0YXRlID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJDb21wb25lbnRcIiksXG4gICAgICAgICAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmhhcyhzdGF0ZSkgfHxcbiAgICAgICAgICAgIChkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuYWRkKHN0YXRlKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiYCVzYCB1c2VzIGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGJ1dCBpdHMgaW5pdGlhbCBzdGF0ZSBpcyAlcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuIEluc3RlYWQsIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBieSBhc3NpZ25pbmcgYW4gb2JqZWN0IHRvIGB0aGlzLnN0YXRlYCBpbiB0aGUgY29uc3RydWN0b3Igb2YgYCVzYC4gVGhpcyBlbnN1cmVzIHRoYXQgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYXJndW1lbnRzIGhhdmUgYSBjb25zaXN0ZW50IHNoYXBlLlwiLFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gX2luc3RhbmNlLnN0YXRlID8gXCJudWxsXCIgOiBcInVuZGVmaW5lZFwiLFxuICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgKSkpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyB8fFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgZm91bmRXaWxsVXBkYXRlTmFtZSA9IChsYW5lID0gc3RhdGUgPSBudWxsKTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgITAgIT09IF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgICAgPyAoc3RhdGUgPSBcImNvbXBvbmVudFdpbGxNb3VudFwiKVxuICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgICAoc3RhdGUgPSBcIlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRcIik7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgICAhMCAhPT1cbiAgICAgICAgICAgIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdcbiAgICAgICAgICAgID8gKGxhbmUgPSBcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIilcbiAgICAgICAgICAgIDogXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgIHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgICAgICAgKGxhbmUgPSBcIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIpO1xuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgITAgIT09IF9pbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdcbiAgICAgICAgICAgID8gKGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBcImNvbXBvbmVudFdpbGxVcGRhdGVcIilcbiAgICAgICAgICAgIDogXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgICAgIChmb3VuZFdpbGxVcGRhdGVOYW1lID0gXCJVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVwiKTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gc3RhdGUgfHwgbnVsbCAhPT0gbGFuZSB8fCBudWxsICE9PSBmb3VuZFdpbGxVcGRhdGVOYW1lKSB7XG4gICAgICAgICAgICBfaW5zdGFuY2UgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIkNvbXBvbmVudFwiO1xuICAgICAgICAgICAgdmFyIG5ld0FwaU5hbWUgPVxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXG4gICAgICAgICAgICAgICAgPyBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpXCJcbiAgICAgICAgICAgICAgICA6IFwiZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKVwiO1xuICAgICAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5oYXMoX2luc3RhbmNlKSB8fFxuICAgICAgICAgICAgICAoZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5hZGQoX2luc3RhbmNlKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuc2FmZSBsZWdhY3kgbGlmZWN5Y2xlcyB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgbmV3IGNvbXBvbmVudCBBUElzLlxcblxcbiVzIHVzZXMgJXMgYnV0IGFsc28gY29udGFpbnMgdGhlIGZvbGxvd2luZyBsZWdhY3kgbGlmZWN5Y2xlczolcyVzJXNcXG5cXG5UaGUgYWJvdmUgbGlmZWN5Y2xlcyBzaG91bGQgYmUgcmVtb3ZlZC4gTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTpcXG5odHRwczovL3JlYWN0LmRldi9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlc1wiLFxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBuZXdBcGlOYW1lLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHN0YXRlID8gXCJcXG4gIFwiICsgc3RhdGUgOiBcIlwiLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IGxhbmUgPyBcIlxcbiAgXCIgKyBsYW5lIDogXCJcIixcbiAgICAgICAgICAgICAgICBudWxsICE9PSBmb3VuZFdpbGxVcGRhdGVOYW1lID8gXCJcXG4gIFwiICsgZm91bmRXaWxsVXBkYXRlTmFtZSA6IFwiXCJcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9pbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgc3RhdGUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIkNvbXBvbmVudFwiO1xuICAgICAgICBfaW5zdGFuY2UucmVuZGVyIHx8XG4gICAgICAgICAgKENvbXBvbmVudC5wcm90b3R5cGUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQucHJvdG90eXBlLnJlbmRlclxuICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSAlcyBpbnN0YW5jZTogZGlkIHlvdSBhY2NpZGVudGFsbHkgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvcj9cIixcbiAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlICVzIGluc3RhbmNlOiB5b3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGRlZmluZSBgcmVuZGVyYC5cIixcbiAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgIV9pbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUgfHxcbiAgICAgICAgICBfaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkIHx8XG4gICAgICAgICAgX2luc3RhbmNlLnN0YXRlIHx8XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiZ2V0SW5pdGlhbFN0YXRlIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gRGlkIHlvdSBtZWFuIHRvIGRlZmluZSBhIHN0YXRlIHByb3BlcnR5IGluc3RlYWQ/XCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIF9pbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMgJiZcbiAgICAgICAgICAhX2luc3RhbmNlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImdldERlZmF1bHRQcm9wcyB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIF9pbnN0YW5jZS5jb250ZXh0VHlwZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImNvbnRleHRUeXBlIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlIGluc3RlYWQuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcyAmJlxuICAgICAgICAgICFkaWRXYXJuQWJvdXRDaGlsZENvbnRleHRUeXBlcy5oYXMoQ29tcG9uZW50KSAmJlxuICAgICAgICAgIChkaWRXYXJuQWJvdXRDaGlsZENvbnRleHRUeXBlcy5hZGQoQ29tcG9uZW50KSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyB1c2VzIHRoZSBsZWdhY3kgY2hpbGRDb250ZXh0VHlwZXMgQVBJIHdoaWNoIHdhcyByZW1vdmVkIGluIFJlYWN0IDE5LiBVc2UgUmVhY3QuY3JlYXRlQ29udGV4dCgpIGluc3RlYWQuIChodHRwczovL3JlYWN0LmRldi9saW5rL2xlZ2FjeS1jb250ZXh0KVwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApKTtcbiAgICAgICAgQ29tcG9uZW50LmNvbnRleHRUeXBlcyAmJlxuICAgICAgICAgICFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZXMkMS5oYXMoQ29tcG9uZW50KSAmJlxuICAgICAgICAgIChkaWRXYXJuQWJvdXRDb250ZXh0VHlwZXMkMS5hZGQoQ29tcG9uZW50KSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyB1c2VzIHRoZSBsZWdhY3kgY29udGV4dFR5cGVzIEFQSSB3aGljaCB3YXMgcmVtb3ZlZCBpbiBSZWFjdCAxOS4gVXNlIFJlYWN0LmNyZWF0ZUNvbnRleHQoKSB3aXRoIHN0YXRpYyBjb250ZXh0VHlwZSBpbnN0ZWFkLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9sZWdhY3ktY29udGV4dClcIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKSk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRTaG91bGRVcGRhdGUgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyBoYXMgYSBtZXRob2QgY2FsbGVkIGNvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/IFRoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgQ29tcG9uZW50LnByb3RvdHlwZSAmJlxuICAgICAgICAgIENvbXBvbmVudC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgJiZcbiAgICAgICAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX2luc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkuIHNob3VsZENvbXBvbmVudFVwZGF0ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBleHRlbmRpbmcgUmVhY3QuUHVyZUNvbXBvbmVudC4gUGxlYXNlIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHVzZWQuXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIkEgcHVyZSBjb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRVbm1vdW50ICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBjb21wb25lbnREaWRVbm1vdW50KCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuIERpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsVW5tb3VudCgpP1wiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBjb21wb25lbnREaWRSZWNlaXZlUHJvcHMoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gSWYgeW91IG1lYW50IHRvIHVwZGF0ZSB0aGUgc3RhdGUgaW4gcmVzcG9uc2UgdG8gY2hhbmdpbmcgcHJvcHMsIHVzZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCkuIElmIHlvdSBtZWFudCB0byBmZXRjaCBkYXRhIG9yIHJ1biBzaWRlLWVmZmVjdHMgb3IgbXV0YXRpb25zIGFmdGVyIFJlYWN0IGhhcyB1cGRhdGVkIHRoZSBVSSwgdXNlIGNvbXBvbmVudERpZFVwZGF0ZSgpLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpP1wiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyBoYXMgYSBtZXRob2QgY2FsbGVkIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpP1wiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBsYW5lID0gX2luc3RhbmNlLnByb3BzICE9PSBuZXh0UHJvcHM7XG4gICAgICAgIHZvaWQgMCAhPT0gX2luc3RhbmNlLnByb3BzICYmXG4gICAgICAgICAgbGFuZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIldoZW4gY2FsbGluZyBzdXBlcigpIGluIGAlc2AsIG1ha2Ugc3VyZSB0byBwYXNzIHVwIHRoZSBzYW1lIHByb3BzIHRoYXQgeW91ciBjb21wb25lbnQncyBjb25zdHJ1Y3RvciB3YXMgcGFzc2VkLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBfaW5zdGFuY2UuZGVmYXVsdFByb3BzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiU2V0dGluZyBkZWZhdWx0UHJvcHMgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWZpbmUgZGVmYXVsdFByb3BzIGFzIGEgc3RhdGljIHByb3BlcnR5IG9uICVzLlwiLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgfHxcbiAgICAgICAgICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuaGFzKENvbXBvbmVudCkgfHxcbiAgICAgICAgICAoZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmFkZChDb21wb25lbnQpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIHNob3VsZCBiZSB1c2VkIHdpdGggY29tcG9uZW50RGlkVXBkYXRlKCkuIFRoaXMgY29tcG9uZW50IGRlZmluZXMgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBvbmx5LlwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudClcbiAgICAgICAgICApKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCBhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCBhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBtZXRob2QgYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhbiBpbnN0YW5jZSBtZXRob2QuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIChsYW5lID0gX2luc3RhbmNlLnN0YXRlKSAmJlxuICAgICAgICAgIChcIm9iamVjdFwiICE9PSB0eXBlb2YgbGFuZSB8fCBpc0FycmF5SW1wbChsYW5lKSkgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiJXMuc3RhdGU6IG11c3QgYmUgc2V0IHRvIGFuIG9iamVjdCBvciBudWxsXCIsIHN0YXRlKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldENoaWxkQ29udGV4dCAmJlxuICAgICAgICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiBDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcy5nZXRDaGlsZENvbnRleHQoKTogY2hpbGRDb250ZXh0VHlwZXMgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIHVzZSBnZXRDaGlsZENvbnRleHQoKS5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgX2luc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICBfaW5zdGFuY2UucHJvcHMgPSBuZXh0UHJvcHM7XG4gICAgICAgIF9pbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9pbnN0YW5jZS5yZWZzID0ge307XG4gICAgICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHN0YXRlID0gQ29tcG9uZW50LmNvbnRleHRUeXBlO1xuICAgICAgICBfaW5zdGFuY2UuY29udGV4dCA9XG4gICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHN0YXRlICYmIG51bGwgIT09IHN0YXRlXG4gICAgICAgICAgICA/IHJlYWRDb250ZXh0KHN0YXRlKVxuICAgICAgICAgICAgOiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICAgIF9pbnN0YW5jZS5zdGF0ZSA9PT0gbmV4dFByb3BzICYmXG4gICAgICAgICAgKChzdGF0ZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiQ29tcG9uZW50XCIpLFxuICAgICAgICAgIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmhhcyhzdGF0ZSkgfHxcbiAgICAgICAgICAgIChkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5hZGQoc3RhdGUpLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCIlczogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFzc2lnbiBwcm9wcyBkaXJlY3RseSB0byBzdGF0ZSBiZWNhdXNlIHVwZGF0ZXMgdG8gcHJvcHMgd29uJ3QgYmUgcmVmbGVjdGVkIGluIHN0YXRlLiBJbiBtb3N0IGNhc2VzLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIHByb3BzIGRpcmVjdGx5LlwiLFxuICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgKSkpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSAmJlxuICAgICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBfaW5zdGFuY2VcbiAgICAgICAgICApO1xuICAgICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBfaW5zdGFuY2VcbiAgICAgICAgKTtcbiAgICAgICAgX2luc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgc3RhdGUgPSBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBzdGF0ZSAmJlxuICAgICAgICAgIChhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICApLFxuICAgICAgICAgIChfaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgfHxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgfHxcbiAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQpIHx8XG4gICAgICAgICAgKChzdGF0ZSA9IF9pbnN0YW5jZS5zdGF0ZSksXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpLFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpLFxuICAgICAgICAgIHN0YXRlICE9PSBfaW5zdGFuY2Uuc3RhdGUgJiZcbiAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIiVzLmNvbXBvbmVudFdpbGxNb3VudCgpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKFxuICAgICAgICAgICAgICBfaW5zdGFuY2UsXG4gICAgICAgICAgICAgIF9pbnN0YW5jZS5zdGF0ZSxcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIF9pbnN0YW5jZSwgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKSxcbiAgICAgICAgICAoX2luc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSkpO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgJiZcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDMwOCk7XG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTM0MjE3NzI4KTtcbiAgICAgICAgX2luc3RhbmNlID0gITA7XG4gICAgICB9IGVsc2UgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgX2luc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICB2YXIgdW5yZXNvbHZlZE9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgbGFuZSA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKENvbXBvbmVudCwgdW5yZXNvbHZlZE9sZFByb3BzKTtcbiAgICAgICAgX2luc3RhbmNlLnByb3BzID0gbGFuZTtcbiAgICAgICAgdmFyIG9sZENvbnRleHQgPSBfaW5zdGFuY2UuY29udGV4dDtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICAgICAgc3RhdGUgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBmb3VuZFdpbGxVcGRhdGVOYW1lICYmXG4gICAgICAgICAgbnVsbCAhPT0gZm91bmRXaWxsVXBkYXRlTmFtZSAmJlxuICAgICAgICAgIChzdGF0ZSA9IHJlYWRDb250ZXh0KGZvdW5kV2lsbFVwZGF0ZU5hbWUpKTtcbiAgICAgICAgbmV3QXBpTmFtZSA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPVxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0FwaU5hbWUgfHxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU7XG4gICAgICAgIHVucmVzb2x2ZWRPbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyAhPT0gdW5yZXNvbHZlZE9sZFByb3BzO1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lIHx8XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMpIHx8XG4gICAgICAgICAgKCh1bnJlc29sdmVkT2xkUHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gc3RhdGUpICYmXG4gICAgICAgICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIF9pbnN0YW5jZSxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gITE7XG4gICAgICAgIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9pbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICAgICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgX2luc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKTtcbiAgICAgICAgb2xkQ29udGV4dCA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHVucmVzb2x2ZWRPbGRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gb2xkQ29udGV4dCB8fCBoYXNGb3JjZVVwZGF0ZVxuICAgICAgICAgID8gKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0FwaU5hbWUgJiZcbiAgICAgICAgICAgICAgKGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBuZXdBcGlOYW1lLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wc1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAob2xkQ29udGV4dCA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpKSxcbiAgICAgICAgICAgIChsYW5lID1cbiAgICAgICAgICAgICAgaGFzRm9yY2VVcGRhdGUgfHxcbiAgICAgICAgICAgICAgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGxhbmUsXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgIG9sZFN0YXRlLFxuICAgICAgICAgICAgICAgIG9sZENvbnRleHQsXG4gICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgPyAoZm91bmRXaWxsVXBkYXRlTmFtZSB8fFxuICAgICAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQpIHx8XG4gICAgICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCksXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSxcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgJiZcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA4KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTM0MjE3NzI4KSlcbiAgICAgICAgICAgICAgOiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDMwOCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEzNDIxNzcyOCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXh0UHJvcHMpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gb2xkQ29udGV4dCkpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZS5wcm9wcyA9IG5leHRQcm9wcyksXG4gICAgICAgICAgICAoX2luc3RhbmNlLnN0YXRlID0gb2xkQ29udGV4dCksXG4gICAgICAgICAgICAoX2luc3RhbmNlLmNvbnRleHQgPSBzdGF0ZSksXG4gICAgICAgICAgICAoX2luc3RhbmNlID0gbGFuZSkpXG4gICAgICAgICAgOiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA4KSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEzNDIxNzcyOCksXG4gICAgICAgICAgICAoX2luc3RhbmNlID0gITEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9pbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKENvbXBvbmVudCwgc3RhdGUpO1xuICAgICAgICBfaW5zdGFuY2UucHJvcHMgPSBmb3VuZFdpbGxVcGRhdGVOYW1lO1xuICAgICAgICBuZXdBcGlOYW1lID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICBvbGRTdGF0ZSA9IF9pbnN0YW5jZS5jb250ZXh0O1xuICAgICAgICBvbGRDb250ZXh0ID0gQ29tcG9uZW50LmNvbnRleHRUeXBlO1xuICAgICAgICBsYW5lID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygb2xkQ29udGV4dCAmJlxuICAgICAgICAgIG51bGwgIT09IG9sZENvbnRleHQgJiZcbiAgICAgICAgICAobGFuZSA9IHJlYWRDb250ZXh0KG9sZENvbnRleHQpKTtcbiAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzID0gQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgICAgICAgKG9sZENvbnRleHQgPVxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHVucmVzb2x2ZWRPbGRQcm9wcyB8fFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSkgfHxcbiAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcykgfHxcbiAgICAgICAgICAoKHN0YXRlICE9PSBuZXdBcGlOYW1lIHx8IG9sZFN0YXRlICE9PSBsYW5lKSAmJlxuICAgICAgICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBfaW5zdGFuY2UsXG4gICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgbGFuZVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gITE7XG4gICAgICAgIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX2luc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gICAgICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBfaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpO1xuICAgICAgICB2YXIgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICBzdGF0ZSAhPT0gbmV3QXBpTmFtZSB8fFxuICAgICAgICBvbGRTdGF0ZSAhPT0gbmV3U3RhdGUgfHxcbiAgICAgICAgaGFzRm9yY2VVcGRhdGUgfHxcbiAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50LmRlcGVuZGVuY2llcyAmJlxuICAgICAgICAgIGNoZWNrSWZDb250ZXh0Q2hhbmdlZChjdXJyZW50LmRlcGVuZGVuY2llcykpXG4gICAgICAgICAgPyAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdW5yZXNvbHZlZE9sZFByb3BzICYmXG4gICAgICAgICAgICAgIChhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wc1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAobmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSksXG4gICAgICAgICAgICAoZm91bmRXaWxsVXBkYXRlTmFtZSA9XG4gICAgICAgICAgICAgIGhhc0ZvcmNlVXBkYXRlIHx8XG4gICAgICAgICAgICAgIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICBvbGRTdGF0ZSxcbiAgICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgICBsYW5lXG4gICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50LmRlcGVuZGVuY2llcyAmJlxuICAgICAgICAgICAgICAgIGNoZWNrSWZDb250ZXh0Q2hhbmdlZChjdXJyZW50LmRlcGVuZGVuY2llcykpKVxuICAgICAgICAgICAgICA/IChvbGRDb250ZXh0IHx8XG4gICAgICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlKG5leHRQcm9wcywgbmV3U3RhdGUsIGxhbmUpLFxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgbGFuZVxuICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCksXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTAyNCkpXG4gICAgICAgICAgICAgIDogKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgfHxcbiAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgICAgIG9sZFN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCksXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIHx8XG4gICAgICAgICAgICAgICAgICAoc3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgICAgICBvbGRTdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEwMjQpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV4dFByb3BzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlKSksXG4gICAgICAgICAgICAoX2luc3RhbmNlLnByb3BzID0gbmV4dFByb3BzKSxcbiAgICAgICAgICAgIChfaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZSksXG4gICAgICAgICAgICAoX2luc3RhbmNlLmNvbnRleHQgPSBsYW5lKSxcbiAgICAgICAgICAgIChfaW5zdGFuY2UgPSBmb3VuZFdpbGxVcGRhdGVOYW1lKSlcbiAgICAgICAgICA6IChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlIHx8XG4gICAgICAgICAgICAgIChzdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgb2xkU3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIHx8XG4gICAgICAgICAgICAgIChzdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgb2xkU3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEwMjQpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZSA9ICExKSk7XG4gICAgICB9XG4gICAgICBsYW5lID0gX2luc3RhbmNlO1xuICAgICAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBzdGF0ZSA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCk7XG4gICAgICBpZiAobGFuZSB8fCBzdGF0ZSkge1xuICAgICAgICBsYW5lID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICBzZXRDdXJyZW50RmliZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBpZiAoc3RhdGUgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcilcbiAgICAgICAgICAoQ29tcG9uZW50ID0gbnVsbCksIChwcm9maWxlclN0YXJ0VGltZSA9IC0xKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIENvbXBvbmVudCA9IGNhbGxSZW5kZXJJbkRFVihsYW5lKTtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNhbGxSZW5kZXJJbkRFVihsYW5lKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIHN0YXRlXG4gICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBjdXJyZW50LmNoaWxkLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICkpKVxuICAgICAgICAgIDogcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbGFuZS5zdGF0ZTtcbiAgICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGN1cnJlbnQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgX2luc3RhbmNlICYmXG4gICAgICAgIHJlbmRlckxhbmVzLnByb3BzICE9PSBuZXh0UHJvcHMgJiZcbiAgICAgICAgKGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgfHxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJdCBsb29rcyBsaWtlICVzIGlzIHJlYXNzaWduaW5nIGl0cyBvd24gYHRoaXMucHJvcHNgIHdoaWxlIHJlbmRlcmluZy4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBjYW4gbGVhZCB0byBjb25mdXNpbmcgYnVncy5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpIHx8IFwiYSBjb21wb25lbnRcIlxuICAgICAgICAgICksXG4gICAgICAgIChkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gITApKTtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEhvc3RSb290V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyNTY7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KSB7XG4gICAgICBDb21wb25lbnQgJiZcbiAgICAgICAgQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJjaGlsZENvbnRleHRUeXBlcyBjYW5ub3QgYmUgZGVmaW5lZCBvbiBhIGZ1bmN0aW9uIGNvbXBvbmVudC5cXG4gICVzLmNoaWxkQ29udGV4dFR5cGVzID0gLi4uXCIsXG4gICAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8IFwiQ29tcG9uZW50XCJcbiAgICAgICAgKTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgJiZcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcyA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiVW5rbm93blwiKSxcbiAgICAgICAgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudFt3b3JrSW5Qcm9ncmVzc10gfHxcbiAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLlwiLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICApLFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W3dvcmtJblByb2dyZXNzXSA9XG4gICAgICAgICAgICAhMCkpKTtcbiAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBDb21wb25lbnQuY29udGV4dFR5cGUgJiZcbiAgICAgICAgbnVsbCAhPT0gQ29tcG9uZW50LmNvbnRleHRUeXBlICYmXG4gICAgICAgICgoQ29tcG9uZW50ID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJVbmtub3duXCIpLFxuICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbQ29tcG9uZW50XSB8fFxuICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBjb250ZXh0VHlwZS5cIixcbiAgICAgICAgICAgIENvbXBvbmVudFxuICAgICAgICAgICksXG4gICAgICAgICAgKGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtDb21wb25lbnRdID0gITApKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykge1xuICAgICAgcmV0dXJuIHsgYmFzZUxhbmVzOiByZW5kZXJMYW5lcywgY2FjaGVQb29sOiBnZXRTdXNwZW5kZWRDYWNoZSgpIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKFxuICAgICAgY3VycmVudCxcbiAgICAgIHByaW1hcnlUcmVlRGlkRGVmZXIsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgY3VycmVudCA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50LmNoaWxkTGFuZXMgJiB+cmVuZGVyTGFuZXMgOiAwO1xuICAgICAgcHJpbWFyeVRyZWVEaWREZWZlciAmJiAoY3VycmVudCB8PSB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSk7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICB2YXIgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxO1xuICAgICAgdmFyIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgc2hvdWxkU3VzcGVuZEltcGwod29ya0luUHJvZ3Jlc3MpICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpO1xuICAgICAgdmFyIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzID0gITE7XG4gICAgICB2YXIgZGlkU3VzcGVuZCA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCk7XG4gICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxID0gZGlkU3VzcGVuZCkgfHxcbiAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSA9XG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBudWxsID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgID8gITFcbiAgICAgICAgICAgIDogMCAhPT0gKHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCAmIEZvcmNlU3VzcGVuc2VGYWxsYmFjaykpO1xuICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxICYmXG4gICAgICAgICgoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMgPSAhMCksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTI5KSk7XG4gICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAzMik7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMzM7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgICAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1M1xuICAgICAgICAgICAgPyBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICA6IHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgICAgICAgICB2YXIgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG4gICAgICAgICAgICB2YXIgSlNDb21waWxlcl90ZW1wO1xuICAgICAgICAgICAgaWYgKCEoSlNDb21waWxlcl90ZW1wID0gIUpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTApKSB7XG4gICAgICAgICAgICAgIGM6IHtcbiAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwO1xuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSByb290T3JTaW5nbGV0b25Db250ZXh0O1xuICAgICAgICAgICAgICAgICAgOCAhPT0gaW5zdGFuY2Uubm9kZVR5cGU7XG5cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGlmICghSlNDb21waWxlcl90ZW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKGluc3RhbmNlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBicmVhayBjO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBudWxsICE9PSBKU0NvbXBpbGVyX3RlbXBcbiAgICAgICAgICAgICAgICA/ICh3YXJuSWZOb3RIeWRyYXRpbmcoKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBkZWh5ZHJhdGVkOiBKU0NvbXBpbGVyX3RlbXAsXG4gICAgICAgICAgICAgICAgICAgIHRyZWVDb250ZXh0OlxuICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IHRyZWVDb250ZXh0UHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8geyBpZDogdHJlZUNvbnRleHRJZCwgb3ZlcmZsb3c6IHRyZWVDb250ZXh0T3ZlcmZsb3cgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICByZXRyeUxhbmU6IDUzNjg3MDkxMixcbiAgICAgICAgICAgICAgICAgICAgaHlkcmF0aW9uRXJyb3JzOiBudWxsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIChpbnN0YW5jZSA9IGNyZWF0ZUZpYmVyKDE4LCBudWxsLCBudWxsLCBOb01vZGUpKSxcbiAgICAgICAgICAgICAgICAgIChpbnN0YW5jZS5zdGF0ZU5vZGUgPSBKU0NvbXBpbGVyX3RlbXApLFxuICAgICAgICAgICAgICAgICAgKGluc3RhbmNlLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGluc3RhbmNlKSxcbiAgICAgICAgICAgICAgICAgIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID0gITApKVxuICAgICAgICAgICAgICAgIDogKEpTQ29tcGlsZXJfdGVtcCA9ICExKTtcbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gIUpTQ29tcGlsZXJfdGVtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCAmJlxuICAgICAgICAgICAgICAod2Fybk5vbkh5ZHJhdGVkSW5zdGFuY2UoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2god29ya0luUHJvZ3Jlc3MpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCAhPT0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCAmJlxuICAgICAgICAgICAgKChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwID1cbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MC5kZWh5ZHJhdGVkKSxcbiAgICAgICAgICAgIG51bGwgIT09IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTApXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MClcbiAgICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDMyKVxuICAgICAgICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzLmxhbmVzID0gNTM2ODcwOTEyKSxcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG4gICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAgPVxuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyLmNoaWxkcmVuO1xuICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiA9XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIuZmFsbGJhY2s7XG4gICAgICAgIGlmIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MylcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyA9XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1vZGUpLFxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAgPVxuICAgICAgICAgICAgICBtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbW9kZTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1M1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MixcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1Mi5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MC5zaWJsaW5nID1cbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCksXG4gICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMgPVxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgICAgIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzLmNoaWxkTGFuZXMgPVxuICAgICAgICAgICAgICBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUiksXG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MlxuICAgICAgICAgICk7XG4gICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IHByZXZTdGF0ZSAmJlxuICAgICAgICAoKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAgPSBwcmV2U3RhdGUuZGVoeWRyYXRlZCksXG4gICAgICAgIG51bGwgIT09IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTApXG4gICAgICApIHtcbiAgICAgICAgaWYgKGRpZFN1c3BlbmQpXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAyNTZcbiAgICAgICAgICAgID8gKHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMjU3KSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApKSlcbiAgICAgICAgICAgIDogbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgICA/IChyZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IG51bGwpKVxuICAgICAgICAgICAgICA6IChyZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyA9XG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1Mi5mYWxsYmFjayksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIgPVxuICAgICAgICAgICAgICAgICAgbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbW9kZTogXCJ2aXNpYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyLmNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTBcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyA9XG4gICAgICAgICAgICAgICAgICBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMsXG4gICAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMuZmxhZ3MgfD0gMiksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMucmV0dXJuID1cbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIuc2libGluZyA9XG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIpLFxuICAgICAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LmNoaWxkLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgICAgICAgbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyLmNoaWxkTGFuZXMgPVxuICAgICAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUiksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID1cbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzKSk7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIChwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIGlzSHlkcmF0aW5nICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIldlIHNob3VsZCBub3QgYmUgaHlkcmF0aW5nIGhlcmUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGEgYnVnLlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTApKVxuICAgICAgICApIHtcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEgPVxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MC5uZXh0U2libGluZyAmJlxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MC5uZXh0U2libGluZy5kYXRhc2V0O1xuICAgICAgICAgIGlmIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEpIHtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MS5kZ3N0O1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEubXNnO1xuICAgICAgICAgICAgaW5zdGFuY2UgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEuc3RjaztcbiAgICAgICAgICAgIHZhciBjb21wb25lbnRTdGFjayA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MS5jc3RjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCA9IG1lc3NhZ2U7XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxID0gSlNDb21waWxlcl90ZW1wO1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyID0gaW5zdGFuY2U7XG4gICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMgPVxuICAgICAgICAgICAgY29tcG9uZW50U3RhY2s7XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMgPVxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MFxuICAgICAgICAgICAgICA/IEVycm9yKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTApXG4gICAgICAgICAgICAgIDogRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIlRoZSBzZXJ2ZXIgY291bGQgbm90IGZpbmlzaCB0aGlzIFN1c3BlbnNlIGJvdW5kYXJ5LCBsaWtlbHkgZHVlIHRvIGFuIGVycm9yIGR1cmluZyBzZXJ2ZXIgcmVuZGVyaW5nLiBTd2l0Y2hlZCB0byBjbGllbnQgcmVuZGVyaW5nLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1My5zdGFjayA9XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiB8fCBcIlwiO1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzLmRpZ2VzdCA9XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTE7XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxID1cbiAgICAgICAgICAgIHZvaWQgMCA9PT0gSlNDb21waWxlcl90ZW1wID8gbnVsbCA6IEpTQ29tcGlsZXJfdGVtcDtcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyxcbiAgICAgICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgICAgIHN0YWNrOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTFcbiAgICAgICAgICB9O1xuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEgJiZcbiAgICAgICAgICAgIENhcHR1cmVkU3RhY2tzLnNldChcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMsXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKGRpZFJlY2VpdmVVcGRhdGUgfHxcbiAgICAgICAgICAgIHByb3BhZ2F0ZVBhcmVudENvbnRleHRDaGFuZ2VzKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICExXG4gICAgICAgICAgICApLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEgPVxuICAgICAgICAgICAgMCAhPT0gKHJlbmRlckxhbmVzICYgY3VycmVudC5jaGlsZExhbmVzKSksXG4gICAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSB8fCBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEpXG4gICAgICAgICkge1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBudWxsICE9PSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEgJiZcbiAgICAgICAgICAgICgoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIgPSByZW5kZXJMYW5lcyAmIC1yZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIgPVxuICAgICAgICAgICAgICAwICE9PSAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIgJiA0MilcbiAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICA6IGdldEJ1bXBlZExhbmVGb3JIeWRyYXRpb25CeUxhbmUoXG4gICAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyXG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiA9XG4gICAgICAgICAgICAgIDAgIT09XG4gICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiAmXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MS5zdXNwZW5kZWRMYW5lcyB8XG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcykpXG4gICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiksXG4gICAgICAgICAgICAwICE9PSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiAmJlxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiAhPT0gcHJldlN0YXRlLnJldHJ5TGFuZSlcbiAgICAgICAgICApXG4gICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICgocHJldlN0YXRlLnJldHJ5TGFuZSA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyKSxcbiAgICAgICAgICAgICAgZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSxcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIFNlbGVjdGl2ZUh5ZHJhdGlvbkV4Y2VwdGlvbilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MC5kYXRhID09PVxuICAgICAgICAgICAgU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBIHx8IHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwLmRhdGEgPT09XG4gICAgICAgICAgU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBXG4gICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTkyKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZCksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IG51bGwpKVxuICAgICAgICAgICAgOiAoKGN1cnJlbnQgPSBwcmV2U3RhdGUudHJlZUNvbnRleHQpLFxuICAgICAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAubmV4dFNpYmxpbmdcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgKGlzSHlkcmF0aW5nID0gITApLFxuICAgICAgICAgICAgICAoaHlkcmF0aW9uRXJyb3JzID0gbnVsbCksXG4gICAgICAgICAgICAgIChkaWRTdXNwZW5kT3JFcnJvckRFViA9ICExKSxcbiAgICAgICAgICAgICAgKGh5ZHJhdGlvbkRpZmZSb290REVWID0gbnVsbCksXG4gICAgICAgICAgICAgIChyb290T3JTaW5nbGV0b25Db250ZXh0ID0gITEpLFxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgKHdhcm5JZk5vdEh5ZHJhdGluZygpLFxuICAgICAgICAgICAgICAgIChpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0SWQpLFxuICAgICAgICAgICAgICAgIChpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0T3ZlcmZsb3cpLFxuICAgICAgICAgICAgICAgIChpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0UHJvdmlkZXIpLFxuICAgICAgICAgICAgICAgICh0cmVlQ29udGV4dElkID0gY3VycmVudC5pZCksXG4gICAgICAgICAgICAgICAgKHRyZWVDb250ZXh0T3ZlcmZsb3cgPSBjdXJyZW50Lm92ZXJmbG93KSxcbiAgICAgICAgICAgICAgICAodHJlZUNvbnRleHRQcm92aWRlciA9IHdvcmtJblByb2dyZXNzKSksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIuY2hpbGRyZW5cbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MDk2KSk7XG4gICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cbiAgICAgIGlmIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyA9XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1Mi5mYWxsYmFjayksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlKSxcbiAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID0gY3VycmVudC5jaGlsZCksXG4gICAgICAgICAgKGluc3RhbmNlID0gSlNDb21waWxlcl90ZW1wLnNpYmxpbmcpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKFxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtb2RlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIuY2hpbGRyZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApKSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIuc3VidHJlZUZsYWdzID1cbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5zdWJ0cmVlRmxhZ3MgJiA2NTAxMTcxMiksXG4gICAgICAgICAgbnVsbCAhPT0gaW5zdGFuY2VcbiAgICAgICAgICAgID8gKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzID1cbiAgICAgICAgICAgICAgICBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTNcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgOiAoKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzID1cbiAgICAgICAgICAgICAgICBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzLFxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMuZmxhZ3MgfD0gMikpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1My5yZXR1cm4gPVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1Mi5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyLnNpYmxpbmcgPVxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyKSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIgPVxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgbnVsbCA9PT0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MFxuICAgICAgICAgICAgPyAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCA9XG4gICAgICAgICAgICAgICAgbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSlcbiAgICAgICAgICAgIDogKChKU0NvbXBpbGVyX3RlbXAgPVxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAuY2FjaGVQb29sKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gSlNDb21waWxlcl90ZW1wXG4gICAgICAgICAgICAgICAgPyAoKGluc3RhbmNlID0gQ2FjaGVDb250ZXh0Ll9jdXJyZW50VmFsdWUpLFxuICAgICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfdGVtcCA9XG4gICAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5wYXJlbnQgIT09IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgPyB7IHBhcmVudDogaW5zdGFuY2UsIHBvb2w6IGluc3RhbmNlIH1cbiAgICAgICAgICAgICAgICAgICAgICA6IEpTQ29tcGlsZXJfdGVtcCkpXG4gICAgICAgICAgICAgICAgOiAoSlNDb21waWxlcl90ZW1wID0gZ2V0U3VzcGVuZGVkQ2FjaGUoKSksXG4gICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwID0ge1xuICAgICAgICAgICAgICAgIGJhc2VMYW5lczpcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAuYmFzZUxhbmVzIHwgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgY2FjaGVQb29sOiBKU0NvbXBpbGVyX3RlbXBcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1My5tZW1vaXplZFN0YXRlID1cbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTApLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1My5jaGlsZExhbmVzID1cbiAgICAgICAgICAgIGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVIpLFxuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyXG4gICAgICAgICk7XG4gICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmVuZGVyTGFuZXMgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgY3VycmVudCA9IHJlbmRlckxhbmVzLnNpYmxpbmc7XG4gICAgICByZW5kZXJMYW5lcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKHJlbmRlckxhbmVzLCB7XG4gICAgICAgIG1vZGU6IFwidmlzaWJsZVwiLFxuICAgICAgICBjaGlsZHJlbjogSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIuY2hpbGRyZW5cbiAgICAgIH0pO1xuICAgICAgcmVuZGVyTGFuZXMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICByZW5kZXJMYW5lcy5zaWJsaW5nID0gbnVsbDtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgKChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEgPSB3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMpLFxuICAgICAgICBudWxsID09PSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTFcbiAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gW2N1cnJlbnRdKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxNikpXG4gICAgICAgICAgOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEucHVzaChjdXJyZW50KSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlckxhbmVzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gcmVuZGVyTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbikge1xuICAgICAgcHJpbWFyeUNoaWxkcmVuID0gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICB7IG1vZGU6IFwidmlzaWJsZVwiLCBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuIH0sXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1vZGVcbiAgICAgICk7XG4gICAgICBwcmltYXJ5Q2hpbGRyZW4ucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICByZXR1cm4gKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkcmVuKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKG9mZnNjcmVlblByb3BzLCBtb2RlKSB7XG4gICAgICBvZmZzY3JlZW5Qcm9wcyA9IGNyZWF0ZUZpYmVyKDIyLCBvZmZzY3JlZW5Qcm9wcywgbnVsbCwgbW9kZSk7XG4gICAgICBvZmZzY3JlZW5Qcm9wcy5sYW5lcyA9IDA7XG4gICAgICBvZmZzY3JlZW5Qcm9wcy5zdGF0ZU5vZGUgPSB7XG4gICAgICAgIF92aXNpYmlsaXR5OiBPZmZzY3JlZW5WaXNpYmxlLFxuICAgICAgICBfcGVuZGluZ01hcmtlcnM6IG51bGwsXG4gICAgICAgIF9yZXRyeUNhY2hlOiBudWxsLFxuICAgICAgICBfdHJhbnNpdGlvbnM6IG51bGxcbiAgICAgIH07XG4gICAgICByZXR1cm4gb2Zmc2NyZWVuUHJvcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gICAgICBjdXJyZW50ID0gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlblxuICAgICAgKTtcbiAgICAgIGN1cnJlbnQuZmxhZ3MgfD0gMjtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlU3VzcGVuc2VXb3JrT25GaWJlcihmaWJlciwgcmVuZGVyTGFuZXMsIHByb3BhZ2F0aW9uUm9vdCkge1xuICAgICAgZmliZXIubGFuZXMgfD0gcmVuZGVyTGFuZXM7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgbnVsbCAhPT0gYWx0ZXJuYXRlICYmIChhbHRlcm5hdGUubGFuZXMgfD0gcmVuZGVyTGFuZXMpO1xuICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgZmliZXIucmV0dXJuLFxuICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgcHJvcGFnYXRpb25Sb290XG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkU2xvdCwgaW5kZXgpIHtcbiAgICAgIHZhciBpc0FuQXJyYXkgPSBpc0FycmF5SW1wbChjaGlsZFNsb3QpO1xuICAgICAgY2hpbGRTbG90ID0gIWlzQW5BcnJheSAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBnZXRJdGVyYXRvckZuKGNoaWxkU2xvdCk7XG4gICAgICByZXR1cm4gaXNBbkFycmF5IHx8IGNoaWxkU2xvdFxuICAgICAgICA/ICgoaXNBbkFycmF5ID0gaXNBbkFycmF5ID8gXCJhcnJheVwiIDogXCJpdGVyYWJsZVwiKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJBIG5lc3RlZCAlcyB3YXMgcGFzc2VkIHRvIHJvdyAjJXMgaW4gPFN1c3BlbnNlTGlzdCAvPi4gV3JhcCBpdCBpbiBhbiBhZGRpdGlvbmFsIFN1c3BlbnNlTGlzdCB0byBjb25maWd1cmUgaXRzIHJldmVhbE9yZGVyOiA8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj4gLi4uIDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPnslc308L1N1c3BlbnNlTGlzdD4gLi4uIDwvU3VzcGVuc2VMaXN0PlwiLFxuICAgICAgICAgICAgaXNBbkFycmF5LFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBpc0FuQXJyYXlcbiAgICAgICAgICApLFxuICAgICAgICAgICExKVxuICAgICAgICA6ICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIGlzQmFja3dhcmRzLFxuICAgICAgdGFpbCxcbiAgICAgIGxhc3RDb250ZW50Um93LFxuICAgICAgdGFpbE1vZGVcbiAgICApIHtcbiAgICAgIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICBudWxsID09PSByZW5kZXJTdGF0ZVxuICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgICAgICAgaXNCYWNrd2FyZHM6IGlzQmFja3dhcmRzLFxuICAgICAgICAgICAgcmVuZGVyaW5nOiBudWxsLFxuICAgICAgICAgICAgcmVuZGVyaW5nU3RhcnRUaW1lOiAwLFxuICAgICAgICAgICAgbGFzdDogbGFzdENvbnRlbnRSb3csXG4gICAgICAgICAgICB0YWlsOiB0YWlsLFxuICAgICAgICAgICAgdGFpbE1vZGU6IHRhaWxNb2RlXG4gICAgICAgICAgfSlcbiAgICAgICAgOiAoKHJlbmRlclN0YXRlLmlzQmFja3dhcmRzID0gaXNCYWNrd2FyZHMpLFxuICAgICAgICAgIChyZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsKSxcbiAgICAgICAgICAocmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gMCksXG4gICAgICAgICAgKHJlbmRlclN0YXRlLmxhc3QgPSBsYXN0Q29udGVudFJvdyksXG4gICAgICAgICAgKHJlbmRlclN0YXRlLnRhaWwgPSB0YWlsKSxcbiAgICAgICAgICAocmVuZGVyU3RhdGUudGFpbE1vZGUgPSB0YWlsTW9kZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICByZXZlYWxPcmRlciA9IG5leHRQcm9wcy5yZXZlYWxPcmRlcixcbiAgICAgICAgdGFpbE1vZGUgPSBuZXh0UHJvcHMudGFpbDtcbiAgICAgIG5leHRQcm9wcyA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICAgIGlmIChcbiAgICAgICAgdm9pZCAwICE9PSByZXZlYWxPcmRlciAmJlxuICAgICAgICBcImZvcndhcmRzXCIgIT09IHJldmVhbE9yZGVyICYmXG4gICAgICAgIFwiYmFja3dhcmRzXCIgIT09IHJldmVhbE9yZGVyICYmXG4gICAgICAgIFwidG9nZXRoZXJcIiAhPT0gcmV2ZWFsT3JkZXIgJiZcbiAgICAgICAgIWRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXVxuICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKChkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltyZXZlYWxPcmRlcl0gPSAhMCksXG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHJldmVhbE9yZGVyKVxuICAgICAgICApXG4gICAgICAgICAgc3dpdGNoIChyZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwidG9nZXRoZXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmb3J3YXJkc1wiOlxuICAgICAgICAgICAgY2FzZSBcImJhY2t3YXJkc1wiOlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uIFVzZSBsb3dlcmNhc2UgXCIlc1wiIGluc3RlYWQuJyxcbiAgICAgICAgICAgICAgICByZXZlYWxPcmRlcixcbiAgICAgICAgICAgICAgICByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImZvcndhcmRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJiYWNrd2FyZFwiOlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uIFJlYWN0IHVzZXMgdGhlIC1zIHN1ZmZpeCBpbiB0aGUgc3BlbGxpbmcuIFVzZSBcIiVzc1wiIGluc3RlYWQuJyxcbiAgICAgICAgICAgICAgICByZXZlYWxPcmRlcixcbiAgICAgICAgICAgICAgICByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiBEaWQgeW91IG1lYW4gXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLFxuICAgICAgICAgICAgICAgIHJldmVhbE9yZGVyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICclcyBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uIERpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsXG4gICAgICAgICAgICByZXZlYWxPcmRlclxuICAgICAgICAgICk7XG4gICAgICB2b2lkIDAgPT09IHRhaWxNb2RlIHx8XG4gICAgICAgIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSB8fFxuICAgICAgICAoXCJjb2xsYXBzZWRcIiAhPT0gdGFpbE1vZGUgJiYgXCJoaWRkZW5cIiAhPT0gdGFpbE1vZGVcbiAgICAgICAgICA/ICgoZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJ1wiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHRhaWwgb24gPFN1c3BlbnNlTGlzdCAvPi4gRGlkIHlvdSBtZWFuIFwiY29sbGFwc2VkXCIgb3IgXCJoaWRkZW5cIj8nLFxuICAgICAgICAgICAgICB0YWlsTW9kZVxuICAgICAgICAgICAgKSlcbiAgICAgICAgICA6IFwiZm9yd2FyZHNcIiAhPT0gcmV2ZWFsT3JkZXIgJiZcbiAgICAgICAgICAgIFwiYmFja3dhcmRzXCIgIT09IHJldmVhbE9yZGVyICYmXG4gICAgICAgICAgICAoKGRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICc8U3VzcGVuc2VMaXN0IHRhaWw9XCIlc1wiIC8+IGlzIG9ubHkgdmFsaWQgaWYgcmV2ZWFsT3JkZXIgaXMgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCIuIERpZCB5b3UgbWVhbiB0byBzcGVjaWZ5IHJldmVhbE9yZGVyPVwiZm9yd2FyZHNcIj8nLFxuICAgICAgICAgICAgICB0YWlsTW9kZVxuICAgICAgICAgICAgKSkpO1xuICAgICAgYTogaWYgKFxuICAgICAgICAoXCJmb3J3YXJkc1wiID09PSByZXZlYWxPcmRlciB8fCBcImJhY2t3YXJkc1wiID09PSByZXZlYWxPcmRlcikgJiZcbiAgICAgICAgdm9pZCAwICE9PSBuZXh0UHJvcHMgJiZcbiAgICAgICAgbnVsbCAhPT0gbmV4dFByb3BzICYmXG4gICAgICAgICExICE9PSBuZXh0UHJvcHNcbiAgICAgIClcbiAgICAgICAgaWYgKGlzQXJyYXlJbXBsKG5leHRQcm9wcykpXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0UHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChuZXh0UHJvcHNbaV0sIGkpKSBicmVhayBhO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKChpID0gZ2V0SXRlcmF0b3JGbihuZXh0UHJvcHMpKSwgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaSkpIHtcbiAgICAgICAgICBpZiAoKGkgPSBpLmNhbGwobmV4dFByb3BzKSkpXG4gICAgICAgICAgICBmb3IgKHZhciBzdGVwID0gaS5uZXh0KCksIF9pID0gMDsgIXN0ZXAuZG9uZTsgc3RlcCA9IGkubmV4dCgpKSB7XG4gICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChzdGVwLnZhbHVlLCBfaSkpIGJyZWFrIGE7XG4gICAgICAgICAgICAgIF9pKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnQSBzaW5nbGUgcm93IHdhcyBwYXNzZWQgdG8gYSA8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPVwiJXNcIiAvPi4gVGhpcyBpcyBub3QgdXNlZnVsIHNpbmNlIGl0IG5lZWRzIG11bHRpcGxlIHJvd3MuIERpZCB5b3UgbWVhbiB0byBwYXNzIG11bHRpcGxlIGNoaWxkcmVuIG9yIGFuIGFycmF5PycsXG4gICAgICAgICAgICByZXZlYWxPcmRlclxuICAgICAgICAgICk7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICBuZXh0UHJvcHMgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICBpZiAoMCAhPT0gKG5leHRQcm9wcyAmIEZvcmNlU3VzcGVuc2VGYWxsYmFjaykpXG4gICAgICAgIChuZXh0UHJvcHMgPVxuICAgICAgICAgIChuZXh0UHJvcHMgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaykgfCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIDAgIT09IChjdXJyZW50LmZsYWdzICYgMTI4KSlcbiAgICAgICAgICBhOiBmb3IgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDsgbnVsbCAhPT0gY3VycmVudDsgKSB7XG4gICAgICAgICAgICBpZiAoMTMgPT09IGN1cnJlbnQudGFnKVxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbHNlIGlmICgxOSA9PT0gY3VycmVudC50YWcpXG4gICAgICAgICAgICAgIHNjaGVkdWxlU3VzcGVuc2VXb3JrT25GaWJlcihjdXJyZW50LCByZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgZWxzZSBpZiAobnVsbCAhPT0gY3VycmVudC5jaGlsZCkge1xuICAgICAgICAgICAgICBjdXJyZW50LmNoaWxkLnJldHVybiA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSB3b3JrSW5Qcm9ncmVzcykgYnJlYWsgYTtcbiAgICAgICAgICAgIGZvciAoOyBudWxsID09PSBjdXJyZW50LnNpYmxpbmc7ICkge1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudC5yZXR1cm4gfHwgY3VycmVudC5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQuc2libGluZy5yZXR1cm4gPSBjdXJyZW50LnJldHVybjtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICBuZXh0UHJvcHMgJj0gU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2s7XG4gICAgICB9XG4gICAgICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIG5leHRQcm9wcywgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgc3dpdGNoIChyZXZlYWxPcmRlcikge1xuICAgICAgICBjYXNlIFwiZm9yd2FyZHNcIjpcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgIGZvciAocmV2ZWFsT3JkZXIgPSBudWxsOyBudWxsICE9PSByZW5kZXJMYW5lczsgKVxuICAgICAgICAgICAgKGN1cnJlbnQgPSByZW5kZXJMYW5lcy5hbHRlcm5hdGUpLFxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnQpICYmXG4gICAgICAgICAgICAgICAgKHJldmVhbE9yZGVyID0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcy5zaWJsaW5nKTtcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IHJldmVhbE9yZGVyO1xuICAgICAgICAgIG51bGwgPT09IHJlbmRlckxhbmVzXG4gICAgICAgICAgICA/ICgocmV2ZWFsT3JkZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGwpKVxuICAgICAgICAgICAgOiAoKHJldmVhbE9yZGVyID0gcmVuZGVyTGFuZXMuc2libGluZyksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcy5zaWJsaW5nID0gbnVsbCkpO1xuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgITEsXG4gICAgICAgICAgICByZXZlYWxPcmRlcixcbiAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgdGFpbE1vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYmFja3dhcmRzXCI6XG4gICAgICAgICAgcmVuZGVyTGFuZXMgPSBudWxsO1xuICAgICAgICAgIHJldmVhbE9yZGVyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgZm9yICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7IG51bGwgIT09IHJldmVhbE9yZGVyOyApIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSByZXZlYWxPcmRlci5hbHRlcm5hdGU7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiBudWxsID09PSBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZXZlYWxPcmRlcjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50ID0gcmV2ZWFsT3JkZXIuc2libGluZztcbiAgICAgICAgICAgIHJldmVhbE9yZGVyLnNpYmxpbmcgPSByZW5kZXJMYW5lcztcbiAgICAgICAgICAgIHJlbmRlckxhbmVzID0gcmV2ZWFsT3JkZXI7XG4gICAgICAgICAgICByZXZlYWxPcmRlciA9IGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgITAsXG4gICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB0YWlsTW9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0b2dldGhlclwiOlxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgITEsIG51bGwsIG51bGwsIHZvaWQgMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiAod29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXMpO1xuICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSB3b3JrSW5Qcm9ncmVzcy5sYW5lcztcbiAgICAgIGlmICgwID09PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSlcbiAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAocHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAwID09PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHJldHVybiBudWxsO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgd29ya0luUHJvZ3Jlc3MuY2hpbGQgIT09IGN1cnJlbnQuY2hpbGQpXG4gICAgICAgIHRocm93IEVycm9yKFwiUmVzdW1pbmcgd29yayBub3QgeWV0IGltcGxlbWVudGVkLlwiKTtcbiAgICAgIGlmIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCkge1xuICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIHJlbmRlckxhbmVzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgY3VycmVudC5wZW5kaW5nUHJvcHMpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlckxhbmVzO1xuICAgICAgICBmb3IgKHJlbmRlckxhbmVzLnJldHVybiA9IHdvcmtJblByb2dyZXNzOyBudWxsICE9PSBjdXJyZW50LnNpYmxpbmc7IClcbiAgICAgICAgICAoY3VycmVudCA9IGN1cnJlbnQuc2libGluZyksXG4gICAgICAgICAgICAocmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcy5zaWJsaW5nID1cbiAgICAgICAgICAgICAgY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgY3VycmVudC5wZW5kaW5nUHJvcHMpKSxcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcy5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlbmRlckxhbmVzLnNpYmxpbmcgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcykge1xuICAgICAgaWYgKDAgIT09IChjdXJyZW50LmxhbmVzICYgcmVuZGVyTGFuZXMpKSByZXR1cm4gITA7XG4gICAgICBjdXJyZW50ID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gICAgICByZXR1cm4gbnVsbCAhPT0gY3VycmVudCAmJiBjaGVja0lmQ29udGV4dENoYW5nZWQoY3VycmVudCkgPyAhMCA6ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRlbXB0RWFybHlCYWlsb3V0SWZOb1NjaGVkdWxlZFVwZGF0ZShcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcHVzaEhvc3RDb250YWluZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgICBwdXNoUHJvdmlkZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENhY2hlQ29udGV4dCxcbiAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcHVzaFByb3ZpZGVyKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy52YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcykgJiZcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDQ4O1xuICAgICAgICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gLTA7XG4gICAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IC0wO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IHN0YXRlTm9kZSkge1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IHN0YXRlTm9kZS5kZWh5ZHJhdGVkKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKDAgIT09IChyZW5kZXJMYW5lcyAmIHdvcmtJblByb2dyZXNzLmNoaWxkLmNoaWxkTGFuZXMpKVxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQuc2libGluZyA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSAwICE9PSAoY3VycmVudC5mbGFncyAmIDEyOCk7XG4gICAgICAgICAgc3RhdGVOb2RlID0gMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG4gICAgICAgICAgc3RhdGVOb2RlIHx8XG4gICAgICAgICAgICAocHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAoc3RhdGVOb2RlID0gMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcykpKTtcbiAgICAgICAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgICAgICAgaWYgKHN0YXRlTm9kZSlcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRpZFN1c3BlbmRCZWZvcmUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIG51bGwgIT09IGRpZFN1c3BlbmRCZWZvcmUgJiZcbiAgICAgICAgICAgICgoZGlkU3VzcGVuZEJlZm9yZS5yZW5kZXJpbmcgPSBudWxsKSxcbiAgICAgICAgICAgIChkaWRTdXNwZW5kQmVmb3JlLnRhaWwgPSBudWxsKSxcbiAgICAgICAgICAgIChkaWRTdXNwZW5kQmVmb3JlLmxhc3RFZmZlY3QgPSBudWxsKSk7XG4gICAgICAgICAgcHVzaChcbiAgICAgICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IsXG4gICAgICAgICAgICBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHN0YXRlTm9kZSkgYnJlYWs7XG4gICAgICAgICAgZWxzZSByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gMCksXG4gICAgICAgICAgICB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgcHVzaFByb3ZpZGVyKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDYWNoZUNvbnRleHQsXG4gICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmVnaW5Xb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgaWYgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCAmJiBudWxsICE9PSBjdXJyZW50KSB7XG4gICAgICAgIHJlbmRlckxhbmVzID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3Mua2V5LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciB8fCBudWxsLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1vZGUsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXNcbiAgICAgICAgKTtcbiAgICAgICAgcmVuZGVyTGFuZXMuX2RlYnVnU3RhY2sgPSB3b3JrSW5Qcm9ncmVzcy5fZGVidWdTdGFjaztcbiAgICAgICAgcmVuZGVyTGFuZXMuX2RlYnVnVGFzayA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z1Rhc2s7XG4gICAgICAgIHZhciByZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICAgICAgaWYgKG51bGwgPT09IHJldHVybkZpYmVyKSB0aHJvdyBFcnJvcihcIkNhbm5vdCBzd2FwIHRoZSByb290IGZpYmVyLlwiKTtcbiAgICAgICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgICByZW5kZXJMYW5lcy5pbmRleCA9IHdvcmtJblByb2dyZXNzLmluZGV4O1xuICAgICAgICByZW5kZXJMYW5lcy5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3Muc2libGluZztcbiAgICAgICAgcmVuZGVyTGFuZXMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgICAgICByZW5kZXJMYW5lcy5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgICAgIHJlbmRlckxhbmVzLl9kZWJ1Z0luZm8gPSB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJbmZvO1xuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IHJldHVybkZpYmVyLmNoaWxkKVxuICAgICAgICAgIHJldHVybkZpYmVyLmNoaWxkID0gcmVuZGVyTGFuZXM7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2U2libGluZyA9IHJldHVybkZpYmVyLmNoaWxkO1xuICAgICAgICAgIGlmIChudWxsID09PSBwcmV2U2libGluZylcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiRXhwZWN0ZWQgcGFyZW50IHRvIGhhdmUgYSBjaGlsZC5cIik7XG4gICAgICAgICAgZm9yICg7IHByZXZTaWJsaW5nLnNpYmxpbmcgIT09IHdvcmtJblByb2dyZXNzOyApXG4gICAgICAgICAgICBpZiAoKChwcmV2U2libGluZyA9IHByZXZTaWJsaW5nLnNpYmxpbmcpLCBudWxsID09PSBwcmV2U2libGluZykpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFwiRXhwZWN0ZWQgdG8gZmluZCB0aGUgcHJldmlvdXMgc2libGluZy5cIik7XG4gICAgICAgICAgcHJldlNpYmxpbmcuc2libGluZyA9IHJlbmRlckxhbmVzO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXIuZGVsZXRpb25zO1xuICAgICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgID8gKChyZXR1cm5GaWJlci5kZWxldGlvbnMgPSBbY3VycmVudF0pLCAocmV0dXJuRmliZXIuZmxhZ3MgfD0gMTYpKVxuICAgICAgICAgIDogd29ya0luUHJvZ3Jlc3MucHVzaChjdXJyZW50KTtcbiAgICAgICAgcmVuZGVyTGFuZXMuZmxhZ3MgfD0gMjtcbiAgICAgICAgcmV0dXJuIHJlbmRlckxhbmVzO1xuICAgICAgfVxuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHMgIT09IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyB8fFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgIT09IGN1cnJlbnQudHlwZVxuICAgICAgICApXG4gICAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhY2hlY2tTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQoY3VycmVudCwgcmVuZGVyTGFuZXMpICYmXG4gICAgICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMSksXG4gICAgICAgICAgICAgIGF0dGVtcHRFYXJseUJhaWxvdXRJZk5vU2NoZWR1bGVkVXBkYXRlKFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMzEwNzIpID8gITAgOiAhMTtcbiAgICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSAhMTtcbiAgICAgICAgaWYgKChyZXR1cm5GaWJlciA9IGlzSHlkcmF0aW5nKSlcbiAgICAgICAgICB3YXJuSWZOb3RIeWRyYXRpbmcoKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEwNDg1NzYpKTtcbiAgICAgICAgcmV0dXJuRmliZXIgJiZcbiAgICAgICAgICAoKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MuaW5kZXgpLFxuICAgICAgICAgIHdhcm5JZk5vdEh5ZHJhdGluZygpLFxuICAgICAgICAgIHB1c2hUcmVlSWQod29ya0luUHJvZ3Jlc3MsIHRyZWVGb3JrQ291bnQsIHJldHVybkZpYmVyKSk7XG4gICAgICB9XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDA7XG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIGE6IGlmIChcbiAgICAgICAgICAgICgocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgKGN1cnJlbnQgPSBjYWxsTGF6eUluaXRJbkRFVih3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50KSxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGN1cnJlbnQpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgc2hvdWxkQ29uc3RydWN0KGN1cnJlbnQpXG4gICAgICAgICAgICAgID8gKChyZXR1cm5GaWJlciA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRhZyA9IDEpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudCA9XG4gICAgICAgICAgICAgICAgICByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoY3VycmVudCkpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApKSlcbiAgICAgICAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzLnRhZyA9IDApLFxuICAgICAgICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgY3VycmVudCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50KSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICkpKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudClcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICgocHJldlNpYmxpbmcgPSBjdXJyZW50LiQkdHlwZW9mKSxcbiAgICAgICAgICAgICAgICBwcmV2U2libGluZyA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudGFnID0gMTE7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoY3VycmVudCk7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB1cGRhdGVGb3J3YXJkUmVmKFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldlNpYmxpbmcgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IDE0O1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IFwiXCI7XG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIGN1cnJlbnQuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPVxuICAgICAgICAgICAgICAgIFwiIERpZCB5b3Ugd3JhcCBhIGNvbXBvbmVudCBpbiBSZWFjdC5sYXp5KCkgbW9yZSB0aGFuIG9uY2U/XCIpO1xuICAgICAgICAgICAgY3VycmVudCA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdXJyZW50KSB8fCBjdXJyZW50O1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQuIFJlY2VpdmVkIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvOiBcIiArXG4gICAgICAgICAgICAgICAgY3VycmVudCArXG4gICAgICAgICAgICAgICAgXCIuIExhenkgZWxlbWVudCB0eXBlIG11c3QgcmVzb2x2ZSB0byBhIGNsYXNzIG9yIGZ1bmN0aW9uLlwiICtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgICAgIChwcmV2U2libGluZyA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHVwZGF0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICBwdXNoSG9zdENvbnRhaW5lcihcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiU2hvdWxkIGhhdmUgYSBjdXJyZW50IGZpYmVyLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgcHJldlNpYmxpbmcgPSBwcmV2U3RhdGUuZWxlbWVudDtcbiAgICAgICAgICAgIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCByZXR1cm5GaWJlciwgbnVsbCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICByZXR1cm5GaWJlciA9IG5leHRTdGF0ZS5jYWNoZTtcbiAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ2FjaGVDb250ZXh0LCByZXR1cm5GaWJlcik7XG4gICAgICAgICAgICByZXR1cm5GaWJlciAhPT0gcHJldlN0YXRlLmNhY2hlICYmXG4gICAgICAgICAgICAgIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2VzKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIFtDYWNoZUNvbnRleHRdLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICEwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm5GaWJlciA9IG5leHRTdGF0ZS5lbGVtZW50O1xuICAgICAgICAgICAgaWYgKHByZXZTdGF0ZS5pc0RlaHlkcmF0ZWQpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoKHByZXZTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgaXNEZWh5ZHJhdGVkOiAhMSxcbiAgICAgICAgICAgICAgICAgIGNhY2hlOiBuZXh0U3RhdGUuY2FjaGVcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUuYmFzZVN0YXRlID0gcHJldlN0YXRlKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHByZXZTdGF0ZSksXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAyNTYpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gbW91bnRIb3N0Um9vdFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHVybkZpYmVyICE9PSBwcmV2U2libGluZykge1xuICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoXG4gICAgICAgICAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJUaGlzIHJvb3QgcmVjZWl2ZWQgYW4gZWFybHkgdXBkYXRlLCBiZWZvcmUgYW55dGhpbmcgd2FzIGFibGUgaHlkcmF0ZS4gU3dpdGNoZWQgdGhlIGVudGlyZSByb290IHRvIGNsaWVudCByZW5kZXJpbmcuXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcXVldWVIeWRyYXRpb25FcnJvcihwcmV2U2libGluZyk7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBtb3VudEhvc3RSb290V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudC5ub2RlVHlwZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgIFwiSFRNTFwiID09PSBjdXJyZW50Lm5vZGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnQub3duZXJEb2N1bWVudC5ib2R5XG4gICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShjdXJyZW50LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgaXNIeWRyYXRpbmcgPSAhMDtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25FcnJvcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRPckVycm9yREVWID0gITE7XG4gICAgICAgICAgICAgICAgaHlkcmF0aW9uRGlmZlJvb3RERVYgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMDtcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gbW91bnRDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZvciAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50OyBjdXJyZW50OyApXG4gICAgICAgICAgICAgICAgICAoY3VycmVudC5mbGFncyA9IChjdXJyZW50LmZsYWdzICYgLTMpIHwgNDA5NiksXG4gICAgICAgICAgICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC5zaWJsaW5nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICAgICAgaWYgKHJldHVybkZpYmVyID09PSBwcmV2U2libGluZykge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgICAgICAgID8gKGN1cnJlbnQgPSBnZXRSZXNvdXJjZShcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQpXG4gICAgICAgICAgICAgICAgOiBpc0h5ZHJhdGluZyB8fFxuICAgICAgICAgICAgICAgICAgKChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZSksXG4gICAgICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcmVxdWlyZWRDb250ZXh0KFxuICAgICAgICAgICAgICAgICAgICByb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50XG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9XG4gICAgICAgICAgICAgICAgICAgIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgICApLmNyZWF0ZUVsZW1lbnQoY3VycmVudCkpLFxuICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyW2ludGVybmFsSW5zdGFuY2VLZXldID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyW2ludGVybmFsUHJvcHNLZXldID0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMocmV0dXJuRmliZXIsIGN1cnJlbnQsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUocmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IHJldHVybkZpYmVyKSlcbiAgICAgICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGdldFJlc291cmNlKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIGlzSHlkcmF0aW5nICYmXG4gICAgICAgICAgICAgICgocmV0dXJuRmliZXIgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCkpLFxuICAgICAgICAgICAgICAocHJldlNpYmxpbmcgPSBnZXRIb3N0Q29udGV4dCgpKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID1cbiAgICAgICAgICAgICAgICByZXNvbHZlU2luZ2xldG9uSW5zdGFuY2UoXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRPckVycm9yREVWIHx8XG4gICAgICAgICAgICAgICAgKChwcmV2U2libGluZyA9IGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICBwcmV2U2libGluZ1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHByZXZTaWJsaW5nICYmXG4gICAgICAgICAgICAgICAgICAoYnVpbGRIeWRyYXRpb25EaWZmTm9kZSh3b3JrSW5Qcm9ncmVzcywgMCkuc2VydmVyUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgICBwcmV2U2libGluZykpLFxuICAgICAgICAgICAgICAoaHlkcmF0aW9uUGFyZW50RmliZXIgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIChyb290T3JTaW5nbGV0b25Db250ZXh0ID0gITApLFxuICAgICAgICAgICAgICAocHJldlNpYmxpbmcgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlKSxcbiAgICAgICAgICAgICAgaXNTaW5nbGV0b25TY29wZSh3b3JrSW5Qcm9ncmVzcy50eXBlKVxuICAgICAgICAgICAgICAgID8gKChwcmV2aW91c0h5ZHJhdGFibGVPbkVudGVyaW5nU2NvcGVkU2luZ2xldG9uID0gcHJldlNpYmxpbmcpLFxuICAgICAgICAgICAgICAgICAgKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RDaGlsZFxuICAgICAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICAgICAgOiAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IHByZXZTaWJsaW5nKSksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQzMDQpLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgaXNIeWRyYXRpbmcgJiZcbiAgICAgICAgICAgICAgKChwcmV2U3RhdGUgPSBnZXRIb3N0Q29udGV4dCgpKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdmFsaWRhdGVET01OZXN0aW5nKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgcHJldlN0YXRlLmFuY2VzdG9ySW5mb1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSksXG4gICAgICAgICAgICAgIChuZXh0U3RhdGUgPSAhcHJldlNpYmxpbmcpIHx8XG4gICAgICAgICAgICAgICAgKChuZXh0U3RhdGUgPSBjYW5IeWRyYXRlSW5zdGFuY2UoXG4gICAgICAgICAgICAgICAgICBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICByb290T3JTaW5nbGV0b25Db250ZXh0XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gbmV4dFN0YXRlXG4gICAgICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gbmV4dFN0YXRlKSxcbiAgICAgICAgICAgICAgICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoKHByZXZTdGF0ZSA9IGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldlN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnVpbGRIeWRyYXRpb25EaWZmTm9kZSh3b3JrSW5Qcm9ncmVzcywgMCkuc2VydmVyUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U3RhdGUpKSxcbiAgICAgICAgICAgICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5maXJzdENoaWxkXG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAocm9vdE9yU2luZ2xldG9uQ29udGV4dCA9ICExKSxcbiAgICAgICAgICAgICAgICAgICAgKHByZXZTdGF0ZSA9ICEwKSlcbiAgICAgICAgICAgICAgICAgIDogKHByZXZTdGF0ZSA9ICExKSxcbiAgICAgICAgICAgICAgICAobmV4dFN0YXRlID0gIXByZXZTdGF0ZSkpLFxuICAgICAgICAgICAgICBuZXh0U3RhdGUgJiZcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgJiZcbiAgICAgICAgICAgICAgICAgIHdhcm5Ob25IeWRyYXRlZEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCBwcmV2U2libGluZyksXG4gICAgICAgICAgICAgICAgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKHdvcmtJblByb2dyZXNzKSkpLFxuICAgICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChwcmV2U2libGluZyA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAgICAgKHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAobmV4dFN0YXRlID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG51bGwpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcHJldlN0YXRlLmNoaWxkcmVuKSxcbiAgICAgICAgICAgIHNob3VsZFNldFRleHRDb250ZW50KHByZXZTaWJsaW5nLCBwcmV2U3RhdGUpXG4gICAgICAgICAgICAgID8gKHJldHVybkZpYmVyID0gbnVsbClcbiAgICAgICAgICAgICAgOiBudWxsICE9PSBuZXh0U3RhdGUgJiZcbiAgICAgICAgICAgICAgICBzaG91bGRTZXRUZXh0Q29udGVudChwcmV2U2libGluZywgbmV4dFN0YXRlKSAmJlxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAzMiksXG4gICAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgICgocHJldlNpYmxpbmcgPSByZW5kZXJXaXRoSG9va3MoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uQXdhcmVIb3N0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKEhvc3RUcmFuc2l0aW9uQ29udGV4dC5fY3VycmVudFZhbHVlID0gcHJldlNpYmxpbmcpKSxcbiAgICAgICAgICAgIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICBpc0h5ZHJhdGluZyAmJlxuICAgICAgICAgICAgICAoKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSBnZXRIb3N0Q29udGV4dCgpKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcmVuZGVyTGFuZXMuYW5jZXN0b3JJbmZvLmN1cnJlbnQpLFxuICAgICAgICAgICAgICAoY3VycmVudCA9XG4gICAgICAgICAgICAgICAgbnVsbCAhPSByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgPyB2YWxpZGF0ZVRleHROZXN0aW5nKFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIudGFnLFxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLmFuY2VzdG9ySW5mby5pbXBsaWNpdFJvb3RTY29wZVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6ICEwKSxcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9ICFyZW5kZXJMYW5lcykgfHxcbiAgICAgICAgICAgICAgICAoKHJldHVybkZpYmVyID0gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAoaHlkcmF0aW9uUGFyZW50RmliZXIgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9ICEwKSlcbiAgICAgICAgICAgICAgICAgIDogKHJldHVybkZpYmVyID0gITEpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9ICFyZXR1cm5GaWJlcikpLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlciAmJlxuICAgICAgICAgICAgICAgIChjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICB3YXJuTm9uSHlkcmF0ZWRJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaCh3b3JrSW5Qcm9ncmVzcykpKSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwNDgpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlci5lZmZlY3REdXJhdGlvbiA9IC0wKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlci5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAtMCksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAgIChwcmV2U3RhdGUgPSBwcmV2U2libGluZy52YWx1ZSksXG4gICAgICAgICAgICBcInZhbHVlXCIgaW4gcHJldlNpYmxpbmcgfHxcbiAgICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgfHxcbiAgICAgICAgICAgICAgKChoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBgdmFsdWVgIHByb3AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgPENvbnRleHQuUHJvdmlkZXI+YC4gRGlkIHlvdSBtaXNzcGVsbCBpdCBvciBmb3JnZXQgdG8gcGFzcyBpdD9cIlxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgcmV0dXJuRmliZXIsIHByZXZTdGF0ZSksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHByZXZTaWJsaW5nLmNoaWxkcmVuLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocHJldlNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLl9jb250ZXh0KSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiByZXR1cm5GaWJlciAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiQSBjb250ZXh0IGNvbnN1bWVyIHdhcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIGNoaWxkcmVuLCBvciBhIGNoaWxkIHRoYXQgaXNuJ3QgYSBmdW5jdGlvbi4gQSBjb250ZXh0IGNvbnN1bWVyIGV4cGVjdHMgYSBzaW5nbGUgY2hpbGQgdGhhdCBpcyBhIGZ1bmN0aW9uLiBJZiB5b3UgZGlkIHBhc3MgYSBmdW5jdGlvbiwgbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBhcm91bmQgaXQuXCJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChwcmV2U2libGluZyA9IHJlYWRDb250ZXh0KHByZXZTaWJsaW5nKSksXG4gICAgICAgICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSBjYWxsQ29tcG9uZW50SW5ERVYoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgdm9pZCAwXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMSksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAocmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHtcbiAgICAgICAgICAgICAgbW9kZTogcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IHJldHVybkZpYmVyLmNoaWxkcmVuXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyAoKGN1cnJlbnQgPSBtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICAoY3VycmVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gY3VycmVudCkpXG4gICAgICAgICAgICAgIDogKChjdXJyZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudC5jaGlsZCwgcmV0dXJuRmliZXIpKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWYpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50KSksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSByZWFkQ29udGV4dChDYWNoZUNvbnRleHQpKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyAoKHByZXZTaWJsaW5nID0gcGVla0NhY2hlRnJvbVBvb2woKSksXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gcHJldlNpYmxpbmcgJiZcbiAgICAgICAgICAgICAgICAgICgocHJldlNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzc1Jvb3QpLFxuICAgICAgICAgICAgICAgICAgKHByZXZTdGF0ZSA9IGNyZWF0ZUNhY2hlKCkpLFxuICAgICAgICAgICAgICAgICAgKHByZXZTaWJsaW5nLnBvb2xlZENhY2hlID0gcHJldlN0YXRlKSxcbiAgICAgICAgICAgICAgICAgIHJldGFpbkNhY2hlKHByZXZTdGF0ZSksXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBwcmV2U3RhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKHByZXZTaWJsaW5nLnBvb2xlZENhY2hlTGFuZXMgfD0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gcHJldlN0YXRlKSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICBwYXJlbnQ6IHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgY2FjaGU6IHByZXZTaWJsaW5nXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENhY2hlQ29udGV4dCwgcHJldlNpYmxpbmcpKVxuICAgICAgICAgICAgICA6ICgwICE9PSAoY3VycmVudC5sYW5lcyAmIHJlbmRlckxhbmVzKSAmJlxuICAgICAgICAgICAgICAgICAgKGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBudWxsLCBudWxsLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCkpLFxuICAgICAgICAgICAgICAgIChwcmV2U2libGluZyA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICAgICAgKHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpLFxuICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nLnBhcmVudCAhPT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgID8gKChwcmV2U2libGluZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgICAgIGNhY2hlOiByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBwcmV2U2libGluZyksXG4gICAgICAgICAgICAgICAgICAgIDAgPT09IHdvcmtJblByb2dyZXNzLmxhbmVzICYmXG4gICAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUuYmFzZVN0YXRlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNpYmxpbmcpLFxuICAgICAgICAgICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENhY2hlQ29udGV4dCwgcmV0dXJuRmliZXIpKVxuICAgICAgICAgICAgICAgICAgOiAoKHJldHVybkZpYmVyID0gcHJldlN0YXRlLmNhY2hlKSxcbiAgICAgICAgICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDYWNoZUNvbnRleHQsIHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgIT09IHByZXZTaWJsaW5nLmNhY2hlICYmXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtDYWNoZUNvbnRleHRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICAgICAgICAgICkpKSxcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICB0aHJvdyB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgK1xuICAgICAgICAgIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlbG9hZFJlc291cmNlQW5kU3VzcGVuZElmTmVlZGVkKHdvcmtJblByb2dyZXNzLCByZXNvdXJjZSkge1xuICAgICAgaWYgKFxuICAgICAgICBcInN0eWxlc2hlZXRcIiAhPT0gcmVzb3VyY2UudHlwZSB8fFxuICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyAmIEluc2VydGVkKSAhPT0gTm90TG9hZGVkXG4gICAgICApXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xNjc3NzIxNztcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE2Nzc3MjE2KSwgIXByZWxvYWRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgICApIHtcbiAgICAgICAgcmVzb3VyY2UgPSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbnVsbCAhPT0gcmVzb3VyY2UgJiZcbiAgICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNDE5NDA0OCkgPT09XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICAgID8gbnVsbCAhPT0gc2hlbGxCb3VuZGFyeVxuICAgICAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNjI5MTQ1NjApICE9PVxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNTM2ODcwOTEyKSkgfHxcbiAgICAgICAgICAgICAgcmVzb3VyY2UgIT09IHNoZWxsQm91bmRhcnkpXG4gICAgICAgIClcbiAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAoKHN1c3BlbmRlZFRoZW5hYmxlID0gbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlKSxcbiAgICAgICAgICAgIFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvbilcbiAgICAgICAgICApO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA4MTkyO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCByZXRyeVF1ZXVlKSB7XG4gICAgICBudWxsICE9PSByZXRyeVF1ZXVlICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTYzODQgJiZcbiAgICAgICAgKChyZXRyeVF1ZXVlID1cbiAgICAgICAgICAyMiAhPT0gd29ya0luUHJvZ3Jlc3MudGFnID8gY2xhaW1OZXh0UmV0cnlMYW5lKCkgOiA1MzY4NzA5MTIpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgfD0gcmV0cnlRdWV1ZSksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgfD0gcmV0cnlRdWV1ZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjaykge1xuICAgICAgaWYgKCFpc0h5ZHJhdGluZylcbiAgICAgICAgc3dpdGNoIChyZW5kZXJTdGF0ZS50YWlsTW9kZSkge1xuICAgICAgICAgIGNhc2UgXCJoaWRkZW5cIjpcbiAgICAgICAgICAgIGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgICAgICBmb3IgKHZhciBsYXN0VGFpbE5vZGUgPSBudWxsOyBudWxsICE9PSBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2s7IClcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgIChsYXN0VGFpbE5vZGUgPSBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spLFxuICAgICAgICAgICAgICAgIChoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2sgPSBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2suc2libGluZyk7XG4gICAgICAgICAgICBudWxsID09PSBsYXN0VGFpbE5vZGVcbiAgICAgICAgICAgICAgPyAocmVuZGVyU3RhdGUudGFpbCA9IG51bGwpXG4gICAgICAgICAgICAgIDogKGxhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiY29sbGFwc2VkXCI6XG4gICAgICAgICAgICBsYXN0VGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgICAgZm9yICh2YXIgX2xhc3RUYWlsTm9kZSA9IG51bGw7IG51bGwgIT09IGxhc3RUYWlsTm9kZTsgKVxuICAgICAgICAgICAgICBudWxsICE9PSBsYXN0VGFpbE5vZGUuYWx0ZXJuYXRlICYmIChfbGFzdFRhaWxOb2RlID0gbGFzdFRhaWxOb2RlKSxcbiAgICAgICAgICAgICAgICAobGFzdFRhaWxOb2RlID0gbGFzdFRhaWxOb2RlLnNpYmxpbmcpO1xuICAgICAgICAgICAgbnVsbCA9PT0gX2xhc3RUYWlsTm9kZVxuICAgICAgICAgICAgICA/IGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayB8fCBudWxsID09PSByZW5kZXJTdGF0ZS50YWlsXG4gICAgICAgICAgICAgICAgPyAocmVuZGVyU3RhdGUudGFpbCA9IG51bGwpXG4gICAgICAgICAgICAgICAgOiAocmVuZGVyU3RhdGUudGFpbC5zaWJsaW5nID0gbnVsbClcbiAgICAgICAgICAgICAgOiAoX2xhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYnViYmxlUHJvcGVydGllcyhjb21wbGV0ZWRXb3JrKSB7XG4gICAgICB2YXIgZGlkQmFpbG91dCA9XG4gICAgICAgICAgbnVsbCAhPT0gY29tcGxldGVkV29yay5hbHRlcm5hdGUgJiZcbiAgICAgICAgICBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZS5jaGlsZCA9PT0gY29tcGxldGVkV29yay5jaGlsZCxcbiAgICAgICAgbmV3Q2hpbGRMYW5lcyA9IDAsXG4gICAgICAgIHN1YnRyZWVGbGFncyA9IDA7XG4gICAgICBpZiAoZGlkQmFpbG91dClcbiAgICAgICAgaWYgKChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICB2YXIgX3RyZWVCYXNlRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLnNlbGZCYXNlRHVyYXRpb24sXG4gICAgICAgICAgICAgIF9jaGlsZDIgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuICAgICAgICAgICAgbnVsbCAhPT0gX2NoaWxkMjtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIChuZXdDaGlsZExhbmVzIHw9IF9jaGlsZDIubGFuZXMgfCBfY2hpbGQyLmNoaWxkTGFuZXMpLFxuICAgICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IF9jaGlsZDIuc3VidHJlZUZsYWdzICYgNjUwMTE3MTIpLFxuICAgICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IF9jaGlsZDIuZmxhZ3MgJiA2NTAxMTcxMiksXG4gICAgICAgICAgICAgIChfdHJlZUJhc2VEdXJhdGlvbiArPSBfY2hpbGQyLnRyZWVCYXNlRHVyYXRpb24pLFxuICAgICAgICAgICAgICAoX2NoaWxkMiA9IF9jaGlsZDIuc2libGluZyk7XG4gICAgICAgICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gX3RyZWVCYXNlRHVyYXRpb247XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBfdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG4gICAgICAgICAgICBudWxsICE9PSBfdHJlZUJhc2VEdXJhdGlvbjtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIChuZXdDaGlsZExhbmVzIHw9XG4gICAgICAgICAgICAgIF90cmVlQmFzZUR1cmF0aW9uLmxhbmVzIHwgX3RyZWVCYXNlRHVyYXRpb24uY2hpbGRMYW5lcyksXG4gICAgICAgICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gX3RyZWVCYXNlRHVyYXRpb24uc3VidHJlZUZsYWdzICYgNjUwMTE3MTIpLFxuICAgICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IF90cmVlQmFzZUR1cmF0aW9uLmZsYWdzICYgNjUwMTE3MTIpLFxuICAgICAgICAgICAgICAoX3RyZWVCYXNlRHVyYXRpb24ucmV0dXJuID0gY29tcGxldGVkV29yayksXG4gICAgICAgICAgICAgIChfdHJlZUJhc2VEdXJhdGlvbiA9IF90cmVlQmFzZUR1cmF0aW9uLnNpYmxpbmcpO1xuICAgICAgZWxzZSBpZiAoKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIF90cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgX2NoaWxkMiA9IGNvbXBsZXRlZFdvcmsuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgICAgZm9yICh2YXIgY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkOyBudWxsICE9PSBjaGlsZDsgKVxuICAgICAgICAgIChuZXdDaGlsZExhbmVzIHw9IGNoaWxkLmxhbmVzIHwgY2hpbGQuY2hpbGRMYW5lcyksXG4gICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IGNoaWxkLnN1YnRyZWVGbGFncyksXG4gICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IGNoaWxkLmZsYWdzKSxcbiAgICAgICAgICAgIChfdHJlZUJhc2VEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbiksXG4gICAgICAgICAgICAoX2NoaWxkMiArPSBjaGlsZC50cmVlQmFzZUR1cmF0aW9uKSxcbiAgICAgICAgICAgIChjaGlsZCA9IGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gX3RyZWVCYXNlRHVyYXRpb247XG4gICAgICAgIGNvbXBsZXRlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiA9IF9jaGlsZDI7XG4gICAgICB9IGVsc2VcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBfdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG4gICAgICAgICAgbnVsbCAhPT0gX3RyZWVCYXNlRHVyYXRpb247XG5cbiAgICAgICAgKVxuICAgICAgICAgIChuZXdDaGlsZExhbmVzIHw9XG4gICAgICAgICAgICBfdHJlZUJhc2VEdXJhdGlvbi5sYW5lcyB8IF90cmVlQmFzZUR1cmF0aW9uLmNoaWxkTGFuZXMpLFxuICAgICAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBfdHJlZUJhc2VEdXJhdGlvbi5zdWJ0cmVlRmxhZ3MpLFxuICAgICAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBfdHJlZUJhc2VEdXJhdGlvbi5mbGFncyksXG4gICAgICAgICAgICAoX3RyZWVCYXNlRHVyYXRpb24ucmV0dXJuID0gY29tcGxldGVkV29yayksXG4gICAgICAgICAgICAoX3RyZWVCYXNlRHVyYXRpb24gPSBfdHJlZUJhc2VEdXJhdGlvbi5zaWJsaW5nKTtcbiAgICAgIGNvbXBsZXRlZFdvcmsuc3VidHJlZUZsYWdzIHw9IHN1YnRyZWVGbGFncztcbiAgICAgIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG4gICAgICByZXR1cm4gZGlkQmFpbG91dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgcG9wVHJlZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIHJldHVybiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgIG5ld1Byb3BzID0gbnVsbDtcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIChuZXdQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZSk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZS5jYWNoZSAhPT0gbmV3UHJvcHMgJiZcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDQ4KTtcbiAgICAgICAgICBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZW5kZXJMYW5lcy5wZW5kaW5nQ29udGV4dCAmJlxuICAgICAgICAgICAgKChyZW5kZXJMYW5lcy5jb250ZXh0ID0gcmVuZGVyTGFuZXMucGVuZGluZ0NvbnRleHQpLFxuICAgICAgICAgICAgKHJlbmRlckxhbmVzLnBlbmRpbmdDb250ZXh0ID0gbnVsbCkpO1xuICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50IHx8IG51bGwgPT09IGN1cnJlbnQuY2hpbGQpXG4gICAgICAgICAgICBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgICAgPyAoZW1pdFBlbmRpbmdIeWRyYXRpb25XYXJuaW5ncygpLCBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSlcbiAgICAgICAgICAgICAgOiBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgICAgKGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQgJiZcbiAgICAgICAgICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NikpIHx8XG4gICAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMDI0KSxcbiAgICAgICAgICAgICAgICB1cGdyYWRlSHlkcmF0aW9uRXJyb3JzVG9SZWNvdmVyYWJsZSgpKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgICAgICAgID8gKG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICA/IChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgcHJlbG9hZFJlc291cmNlQW5kU3VzcGVuZElmTmVlZGVkKFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICA6IChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xNjc3NzIxNykpKVxuICAgICAgICAgICAgICA6IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgPyByZW5kZXJMYW5lcyAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICAgICAgICA/IChtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAgIHByZWxvYWRSZXNvdXJjZUFuZFN1c3BlbmRJZk5lZWRlZChcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgOiAoYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTY3NzcyMTcpKVxuICAgICAgICAgICAgICAgIDogKGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAhPT0gbmV3UHJvcHMgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTY3NzcyMTcpKSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgICAgICAgICB2YXIgX3R5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzICE9PSBuZXdQcm9wcyAmJiBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgICAgICAgICAgcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgID8gcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3VycmVudClcbiAgICAgICAgICAgICAgOiAoKGN1cnJlbnQgPSByZXNvbHZlU2luZ2xldG9uSW5zdGFuY2UoXG4gICAgICAgICAgICAgICAgICBfdHlwZSxcbiAgICAgICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgITBcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudCksXG4gICAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHMgIT09IG5ld1Byb3BzICYmIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3R5cGUgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgICAgICAgICAgaWYgKHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKSlcbiAgICAgICAgICAgICAgcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgX3R5cGUpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGN1cnJlbnQgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhyZW5kZXJMYW5lcywgX3R5cGUuYW5jZXN0b3JJbmZvKTtcbiAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5jb250ZXh0O1xuICAgICAgICAgICAgICBjdXJyZW50ID0gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKGN1cnJlbnQpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKF90eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZzpcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTkFNRVNQQUNFLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aDpcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICAgICAgICAgICAgTUFUSF9OQU1FU1BBQ0UsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVuZGVyTGFuZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN2Z1wiOlxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFNWR19OQU1FU1BBQ0UsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtYXRoXCI6XG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgICAgICAgICAgICAgICAgTUFUSF9OQU1FU1BBQ0UsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuaW5uZXJIVE1MID0gXCI8c2NyaXB0PlxceDNjL3NjcmlwdD5cIjtcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5yZW1vdmVDaGlsZChjdXJyZW50LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3UHJvcHMuaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgeyBpczogbmV3UHJvcHMuaXMgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIik7XG4gICAgICAgICAgICAgICAgICAgICAgbmV3UHJvcHMubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKGN1cnJlbnQubXVsdGlwbGUgPSAhMClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3UHJvcHMuc2l6ZSAmJiAoY3VycmVudC5zaXplID0gbmV3UHJvcHMuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld1Byb3BzLmlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gY3VycmVudC5jcmVhdGVFbGVtZW50KHJlbmRlckxhbmVzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpczogbmV3UHJvcHMuaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuY3JlYXRlRWxlbWVudChyZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLTEgPT09IHJlbmRlckxhbmVzLmluZGV4T2YoXCItXCIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChyZW5kZXJMYW5lcyAhPT0gcmVuZGVyTGFuZXMudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjwlcyAvPiBpcyB1c2luZyBpbmNvcnJlY3QgY2FzaW5nLiBVc2UgUGFzY2FsQ2FzZSBmb3IgUmVhY3QgY29tcG9uZW50cywgb3IgbG93ZXJjYXNlIGZvciBIVE1MIGVsZW1lbnRzLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIltvYmplY3QgSFRNTFVua25vd25FbGVtZW50XVwiICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjdXJyZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuZWRVbmtub3duVGFncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgod2FybmVkVW5rbm93blRhZ3NbcmVuZGVyTGFuZXNdID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZSB0YWcgPCVzPiBpcyB1bnJlY29nbml6ZWQgaW4gdGhpcyBicm93c2VyLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgUmVhY3QgY29tcG9uZW50LCBzdGFydCBpdHMgbmFtZSB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXJyZW50W2ludGVybmFsSW5zdGFuY2VLZXldID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIGN1cnJlbnRbaW50ZXJuYWxQcm9wc0tleV0gPSBuZXdQcm9wcztcbiAgICAgICAgICAgICAgYTogZm9yIChfdHlwZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkOyBudWxsICE9PSBfdHlwZTsgKSB7XG4gICAgICAgICAgICAgICAgaWYgKDUgPT09IF90eXBlLnRhZyB8fCA2ID09PSBfdHlwZS50YWcpXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LmFwcGVuZENoaWxkKF90eXBlLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICA0ICE9PSBfdHlwZS50YWcgJiZcbiAgICAgICAgICAgICAgICAgIDI3ICE9PSBfdHlwZS50YWcgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IF90eXBlLmNoaWxkXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBfdHlwZS5jaGlsZC5yZXR1cm4gPSBfdHlwZTtcbiAgICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUuY2hpbGQ7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF90eXBlID09PSB3b3JrSW5Qcm9ncmVzcykgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBmb3IgKDsgbnVsbCA9PT0gX3R5cGUuc2libGluZzsgKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gX3R5cGUucmV0dXJuIHx8IF90eXBlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3R5cGUuc2libGluZy5yZXR1cm4gPSBfdHlwZS5yZXR1cm47XG4gICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5zaWJsaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgIGE6IHN3aXRjaCAoXG4gICAgICAgICAgICAgICAgKHNldEluaXRpYWxQcm9wZXJ0aWVzKGN1cnJlbnQsIHJlbmRlckxhbmVzLCBuZXdQcm9wcyksXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJidXR0b25cIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgICAgICAgICBjdXJyZW50ID0gISFuZXdQcm9wcy5hdXRvRm9jdXM7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpbWdcIjpcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSAhMDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSAhMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXJyZW50ICYmIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTY3NzcyMTc7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAoY3VycmVudCAmJiBudWxsICE9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSlcbiAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAhPT0gbmV3UHJvcHMgJiYgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBuZXdQcm9wcyAmJlxuICAgICAgICAgICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGVcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjdXJyZW50ID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICAgICAgICAgICAgcmVuZGVyTGFuZXMgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgICAgICAgICAgaWYgKHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgICAgICByZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICAgIF90eXBlID0gIWRpZFN1c3BlbmRPckVycm9yREVWO1xuICAgICAgICAgICAgICBuZXdQcm9wcyA9IG51bGw7XG4gICAgICAgICAgICAgIHZhciByZXR1cm5GaWJlciA9IGh5ZHJhdGlvblBhcmVudEZpYmVyO1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gcmV0dXJuRmliZXIpXG4gICAgICAgICAgICAgICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX3R5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKF90eXBlID0gZGlmZkh5ZHJhdGVkVGV4dEZvckRldldhcm5pbmdzKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBfdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUod29ya0luUHJvZ3Jlc3MsIDApLnNlcnZlclByb3BzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3R5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAobmV3UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKChfdHlwZSA9IGRpZmZIeWRyYXRlZFRleHRGb3JEZXZXYXJuaW5ncyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Byb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IF90eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChidWlsZEh5ZHJhdGlvbkRpZmZOb2RlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zZXJ2ZXJQcm9wcyA9IF90eXBlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXJyZW50W2ludGVybmFsSW5zdGFuY2VLZXldID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgIGN1cnJlbnQubm9kZVZhbHVlID09PSByZW5kZXJMYW5lcyB8fFxuICAgICAgICAgICAgICAgIChudWxsICE9PSBuZXdQcm9wcyAmJlxuICAgICAgICAgICAgICAgICAgITAgPT09IG5ld1Byb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZykgfHxcbiAgICAgICAgICAgICAgICBjaGVja0ZvclVubWF0Y2hlZFRleHQoY3VycmVudC5ub2RlVmFsdWUsIHJlbmRlckxhbmVzKVxuICAgICAgICAgICAgICAgICAgPyAhMFxuICAgICAgICAgICAgICAgICAgOiAhMTtcbiAgICAgICAgICAgICAgY3VycmVudCB8fCB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2god29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIChfdHlwZSA9IHJlbmRlckxhbmVzLmFuY2VzdG9ySW5mby5jdXJyZW50KSxcbiAgICAgICAgICAgICAgICBudWxsICE9IF90eXBlICYmXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0ZVRleHROZXN0aW5nKFxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgX3R5cGUudGFnLFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcy5hbmNlc3RvckluZm8uaW1wbGljaXRSb290U2NvcGVcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKGN1cnJlbnQpLmNyZWF0ZVRleHROb2RlKFxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9wc1xuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuZGVoeWRyYXRlZClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIF90eXBlID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IG5ld1Byb3BzICYmIG51bGwgIT09IG5ld1Byb3BzLmRlaHlkcmF0ZWQpIHtcbiAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90eXBlKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiQSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGNvbXBvbmVudCB3YXMgY29tcGxldGVkIHdpdGhvdXQgYSBoeWRyYXRlZCBub2RlLiBUaGlzIGlzIHByb2JhYmx5IGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIF90eXBlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgICAgICBfdHlwZSA9IG51bGwgIT09IF90eXBlID8gX3R5cGUuZGVoeWRyYXRlZCA6IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCFfdHlwZSlcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBfdHlwZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IG5ld1Byb3BzICYmXG4gICAgICAgICAgICAgICAgICAoKF90eXBlID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gX3R5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gLT1cbiAgICAgICAgICAgICAgICAgICAgICBfdHlwZS50cmVlQmFzZUR1cmF0aW9uKSk7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIGVtaXRQZW5kaW5nSHlkcmF0aW9uV2FybmluZ3MoKSxcbiAgICAgICAgICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKSxcbiAgICAgICAgICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KSxcbiAgICAgICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcyAmJlxuICAgICAgICAgICAgICAgICAgICAoKF90eXBlID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBfdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uIC09XG4gICAgICAgICAgICAgICAgICAgICAgICBfdHlwZS50cmVlQmFzZUR1cmF0aW9uKSk7XG4gICAgICAgICAgICAgIF90eXBlID0gITE7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgKF90eXBlID0gdXBncmFkZUh5ZHJhdGlvbkVycm9yc1RvUmVjb3ZlcmFibGUoKSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgICAgICAoY3VycmVudC5tZW1vaXplZFN0YXRlLmh5ZHJhdGlvbkVycm9ycyA9IF90eXBlKSxcbiAgICAgICAgICAgICAgICAoX3R5cGUgPSAhMCk7XG4gICAgICAgICAgICBpZiAoIV90eXBlKSB7XG4gICAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NilcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSwgd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGlmICgwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJlbmRlckxhbmVzID0gbnVsbCAhPT0gbmV3UHJvcHM7XG4gICAgICAgICAgY3VycmVudCA9IG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAoKG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgKF90eXBlID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gbmV3UHJvcHMuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gbmV3UHJvcHMuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgICAgICAgIChfdHlwZSA9IG5ld1Byb3BzLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IG51bGwpLFxuICAgICAgICAgICAgbnVsbCAhPT0gbmV3UHJvcHMubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBuZXdQcm9wcy5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxcbiAgICAgICAgICAgIHJldHVybkZpYmVyICE9PSBfdHlwZSAmJiAobmV3UHJvcHMuZmxhZ3MgfD0gMjA0OCkpO1xuICAgICAgICAgIHJlbmRlckxhbmVzICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkLmZsYWdzIHw9IDgxOTIpO1xuICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgKChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb24pKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBfdHlwZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKG51bGwgPT09IF90eXBlKSByZXR1cm4gYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgICAgbmV3UHJvcHMgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpO1xuICAgICAgICAgIHJldHVybkZpYmVyID0gX3R5cGUucmVuZGVyaW5nO1xuICAgICAgICAgIGlmIChudWxsID09PSByZXR1cm5GaWJlcilcbiAgICAgICAgICAgIGlmIChuZXdQcm9wcykgY3V0T2ZmVGFpbElmTmVlZGVkKF90eXBlLCAhMSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RJblByb2dyZXNzIHx8XG4gICAgICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiYgMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMjgpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgZm9yIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7IG51bGwgIT09IGN1cnJlbnQ7ICkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gcmV0dXJuRmliZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4O1xuICAgICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQoX3R5cGUsICExKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHJldHVybkZpYmVyLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gcmVuZGVyTGFuZXM7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgICBudWxsICE9PSByZW5kZXJMYW5lcztcblxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzcyhyZW5kZXJMYW5lcywgY3VycmVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcy5zaWJsaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaChcbiAgICAgICAgICAgICAgICAgICAgICBzdXNwZW5zZVN0YWNrQ3Vyc29yLFxuICAgICAgICAgICAgICAgICAgICAgIChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQgJlxuICAgICAgICAgICAgICAgICAgICAgICAgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2spIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlU3VzcGVuc2VGYWxsYmFjayxcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbnVsbCAhPT0gX3R5cGUudGFpbCAmJlxuICAgICAgICAgICAgICAgIG5vdyQxKCkgPiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lICYmXG4gICAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgICAgIChuZXdQcm9wcyA9ICEwKSxcbiAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQoX3R5cGUsICExKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSA0MTk0MzA0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIW5ld1Byb3BzKVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKChjdXJyZW50ID0gZmluZEZpcnN0U3VzcGVuZGVkKHJldHVybkZpYmVyKSksIG51bGwgIT09IGN1cnJlbnQpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgICAgICAgIChuZXdQcm9wcyA9ICEwKSxcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQpLFxuICAgICAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKF90eXBlLCAhMCksXG4gICAgICAgICAgICAgICAgICBudWxsID09PSBfdHlwZS50YWlsICYmXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZGVuXCIgPT09IF90eXBlLnRhaWxNb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICFyZXR1cm5GaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzSHlkcmF0aW5nKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIHJldHVybiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgMiAqIG5vdyQxKCkgLSBfdHlwZS5yZW5kZXJpbmdTdGFydFRpbWUgPlxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSAmJlxuICAgICAgICAgICAgICAgICAgNTM2ODcwOTEyICE9PSByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgICAgICAgKG5ld1Byb3BzID0gITApLFxuICAgICAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKF90eXBlLCAhMSksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSA0MTk0MzA0KSk7XG4gICAgICAgICAgICBfdHlwZS5pc0JhY2t3YXJkc1xuICAgICAgICAgICAgICA/ICgocmV0dXJuRmliZXIuc2libGluZyA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZXR1cm5GaWJlcikpXG4gICAgICAgICAgICAgIDogKChjdXJyZW50ID0gX3R5cGUubGFzdCksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudFxuICAgICAgICAgICAgICAgICAgPyAoY3VycmVudC5zaWJsaW5nID0gcmV0dXJuRmliZXIpXG4gICAgICAgICAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAoX3R5cGUubGFzdCA9IHJldHVybkZpYmVyKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChudWxsICE9PSBfdHlwZS50YWlsKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGN1cnJlbnQgPSBfdHlwZS50YWlsKSxcbiAgICAgICAgICAgICAgKF90eXBlLnJlbmRlcmluZyA9IGN1cnJlbnQpLFxuICAgICAgICAgICAgICAoX3R5cGUudGFpbCA9IGN1cnJlbnQuc2libGluZyksXG4gICAgICAgICAgICAgIChfdHlwZS5yZW5kZXJpbmdTdGFydFRpbWUgPSBub3ckMSgpKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnQuc2libGluZyA9IG51bGwpLFxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpLFxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSBuZXdQcm9wc1xuICAgICAgICAgICAgICAgID8gKHJlbmRlckxhbmVzICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2spIHxcbiAgICAgICAgICAgICAgICAgIEZvcmNlU3VzcGVuc2VGYWxsYmFja1xuICAgICAgICAgICAgICAgIDogcmVuZGVyTGFuZXMgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayksXG4gICAgICAgICAgICAgIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgcmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgY3VycmVudFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHBvcEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKG5ld1Byb3BzID0gbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50XG4gICAgICAgICAgICAgID8gKG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgIT09IG5ld1Byb3BzICYmXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTIpXG4gICAgICAgICAgICAgIDogbmV3UHJvcHMgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTIpLFxuICAgICAgICAgICAgbmV3UHJvcHNcbiAgICAgICAgICAgICAgPyAwICE9PSAocmVuZGVyTGFuZXMgJiA1MzY4NzA5MTIpICYmXG4gICAgICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KSAmJlxuICAgICAgICAgICAgICAgIChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgJiA2ICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MikpXG4gICAgICAgICAgICAgIDogYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAocmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICBudWxsICE9PSByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcy5yZXRyeVF1ZXVlKSxcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IG51bGwpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLFxuICAgICAgICAgICAgKG5ld1Byb3BzID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgICAgICAgIChuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLFxuICAgICAgICAgICAgbmV3UHJvcHMgIT09IHJlbmRlckxhbmVzICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDQ4KSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgcG9wKHJlc3VtZWRDYWNoZSwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IG51bGwpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiAocmVuZGVyTGFuZXMgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGUpLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZS5jYWNoZSAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwNDgpLFxuICAgICAgICAgICAgcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudGFnICtcbiAgICAgICAgICBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVud2luZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHBvcFRyZWVDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyksXG4gICAgICAgICAgICBjdXJyZW50ICYgNjU1MzZcbiAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmZsYWdzID0gKGN1cnJlbnQgJiAtNjU1MzcpIHwgMTI4KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyksXG4gICAgICAgICAgICAwICE9PSAoY3VycmVudCAmIDY1NTM2KSAmJiAwID09PSAoY3VycmVudCAmIDEyOClcbiAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmZsYWdzID0gKGN1cnJlbnQgJiAtNjU1MzcpIHwgMTI4KSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50LmRlaHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIGlmIChudWxsID09PSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiVGhyZXcgaW4gbmV3bHkgbW91bnRlZCBkZWh5ZHJhdGVkIGNvbXBvbmVudC4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcbiAgICAgICAgICByZXR1cm4gY3VycmVudCAmIDY1NTM2XG4gICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHJldHVybiBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBwb3BIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgcG9wKHJlc3VtZWRDYWNoZSwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyksXG4gICAgICAgICAgICBjdXJyZW50ICYgNjU1MzZcbiAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmZsYWdzID0gKGN1cnJlbnQgJiAtNjU1MzcpIHwgMTI4KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICByZXR1cm4gcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVud2luZEludGVycnVwdGVkV29yayhjdXJyZW50LCBpbnRlcnJ1cHRlZFdvcmspIHtcbiAgICAgIHBvcFRyZWVDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBzd2l0Y2ggKGludGVycnVwdGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHBvcFByb3ZpZGVyKENhY2hlQ29udGV4dCwgaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBwb3BIb3N0Q29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHBvcFByb3ZpZGVyKGludGVycnVwdGVkV29yay50eXBlLCBpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIHBvcEhpZGRlbkNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIHBvcChyZXN1bWVkQ2FjaGUsIGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0LCBpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRQcm9maWxlKGN1cnJlbnQpIHtcbiAgICAgIHJldHVybiAoY3VycmVudC5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgaG9va0ZsYWdzKSB7XG4gICAgICBzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaylcbiAgICAgICAgPyAoc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoaG9va0ZsYWdzLCBmaW5pc2hlZFdvcmspLFxuICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCkpXG4gICAgICAgIDogY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tMYXlvdXRVbm1vdW50RWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICBob29rRmxhZ3NcbiAgICApIHtcbiAgICAgIHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKVxuICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgaG9va0ZsYWdzLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICAgICksXG4gICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKSlcbiAgICAgICAgOiBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICBob29rRmxhZ3MsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChmbGFncywgZmluaXNoZWRXb3JrKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUsXG4gICAgICAgICAgbGFzdEVmZmVjdCA9IG51bGwgIT09IHVwZGF0ZVF1ZXVlID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG4gICAgICAgIGlmIChudWxsICE9PSBsYXN0RWZmZWN0KSB7XG4gICAgICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlID0gZmlyc3RFZmZlY3Q7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAodXBkYXRlUXVldWUudGFnICYgZmxhZ3MpID09PSBmbGFncyAmJlxuICAgICAgICAgICAgICAoKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3NcbiAgICAgICAgICAgICAgICA/IG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0YXJ0ZWQgJiZcbiAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0YXJ0ZWQoXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogKGZsYWdzICYgTGF5b3V0KSAhPT0gTm9GbGFncyAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdGFydGVkICYmXG4gICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0YXJ0ZWQoXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKGxhc3RFZmZlY3QgPSB2b2lkIDApLFxuICAgICAgICAgICAgICAoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgKGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9ICEwKSxcbiAgICAgICAgICAgICAgKGxhc3RFZmZlY3QgPSBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY2FsbENyZWF0ZUluREVWLFxuICAgICAgICAgICAgICAgIHVwZGF0ZVF1ZXVlXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgKGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9ICExKSxcbiAgICAgICAgICAgICAgKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3NcbiAgICAgICAgICAgICAgICA/IG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0b3BwZWQgJiZcbiAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0b3BwZWQoKVxuICAgICAgICAgICAgICAgIDogKGZsYWdzICYgTGF5b3V0KSAhPT0gTm9GbGFncyAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdG9wcGVkICYmXG4gICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0b3BwZWQoKSxcbiAgICAgICAgICAgICAgdm9pZCAwICE9PSBsYXN0RWZmZWN0ICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGxhc3RFZmZlY3QpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFyIGhvb2tOYW1lID0gdm9pZCAwO1xuICAgICAgICAgICAgICBob29rTmFtZSA9XG4gICAgICAgICAgICAgICAgMCAhPT0gKHVwZGF0ZVF1ZXVlLnRhZyAmIExheW91dClcbiAgICAgICAgICAgICAgICAgID8gXCJ1c2VMYXlvdXRFZmZlY3RcIlxuICAgICAgICAgICAgICAgICAgOiAwICE9PSAodXBkYXRlUXVldWUudGFnICYgSW5zZXJ0aW9uKVxuICAgICAgICAgICAgICAgICAgICA/IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgOiBcInVzZUVmZmVjdFwiO1xuICAgICAgICAgICAgICB2YXIgYWRkZW5kdW0gPSB2b2lkIDA7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID1cbiAgICAgICAgICAgICAgICBudWxsID09PSBsYXN0RWZmZWN0XG4gICAgICAgICAgICAgICAgICA/IFwiIFlvdSByZXR1cm5lZCBudWxsLiBJZiB5b3VyIGVmZmVjdCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuIHVwLCByZXR1cm4gdW5kZWZpbmVkIChvciBub3RoaW5nKS5cIlxuICAgICAgICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBsYXN0RWZmZWN0LnRoZW5cbiAgICAgICAgICAgICAgICAgICAgPyBcIlxcblxcbkl0IGxvb2tzIGxpa2UgeW91IHdyb3RlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICBob29rTmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgXCIoYXN5bmMgKCkgPT4gLi4uKSBvciByZXR1cm5lZCBhIFByb21pc2UuIEluc3RlYWQsIHdyaXRlIHRoZSBhc3luYyBmdW5jdGlvbiBpbnNpZGUgeW91ciBlZmZlY3QgYW5kIGNhbGwgaXQgaW1tZWRpYXRlbHk6XFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIGhvb2tOYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICBcIigoKSA9PiB7XFxuICBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGEoKSB7XFxuICAgIC8vIFlvdSBjYW4gYXdhaXQgaGVyZVxcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IE15QVBJLmdldERhdGEoc29tZUlkKTtcXG4gICAgLy8gLi4uXFxuICB9XFxuICBmZXRjaERhdGEoKTtcXG59LCBbc29tZUlkXSk7IC8vIE9yIFtdIGlmIGVmZmVjdCBkb2Vzbid0IG5lZWQgcHJvcHMgb3Igc3RhdGVcXG5cXG5MZWFybiBtb3JlIGFib3V0IGRhdGEgZmV0Y2hpbmcgd2l0aCBIb29rczogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9ob29rcy1kYXRhLWZldGNoaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIiBZb3UgcmV0dXJuZWQ6IFwiICsgbGFzdEVmZmVjdDtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChuLCBhKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIiVzIG11c3Qgbm90IHJldHVybiBhbnl0aGluZyBiZXNpZGVzIGEgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWQgZm9yIGNsZWFuLXVwLiVzXCIsXG4gICAgICAgICAgICAgICAgICAgIG4sXG4gICAgICAgICAgICAgICAgICAgIGFcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBob29rTmFtZSxcbiAgICAgICAgICAgICAgICBhZGRlbmR1bVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZS5uZXh0O1xuICAgICAgICAgIH0gd2hpbGUgKHVwZGF0ZVF1ZXVlICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICBmbGFncyxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSxcbiAgICAgICAgICBsYXN0RWZmZWN0ID0gbnVsbCAhPT0gdXBkYXRlUXVldWUgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcbiAgICAgICAgaWYgKG51bGwgIT09IGxhc3RFZmZlY3QpIHtcbiAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgdXBkYXRlUXVldWUgPSBmaXJzdEVmZmVjdDtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKHVwZGF0ZVF1ZXVlLnRhZyAmIGZsYWdzKSA9PT0gZmxhZ3MpIHtcbiAgICAgICAgICAgICAgdmFyIGluc3QgPSB1cGRhdGVRdWV1ZS5pbnN0LFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBpbnN0LmRlc3Ryb3k7XG4gICAgICAgICAgICAgIHZvaWQgMCAhPT0gZGVzdHJveSAmJlxuICAgICAgICAgICAgICAgICgoaW5zdC5kZXN0cm95ID0gdm9pZCAwKSxcbiAgICAgICAgICAgICAgICAoZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFnc1xuICAgICAgICAgICAgICAgICAgPyBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdGFydGVkICYmXG4gICAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RhcnRlZChcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiAoZmxhZ3MgJiBMYXlvdXQpICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZCAmJlxuICAgICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZChcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgICAoaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ID0gITApLFxuICAgICAgICAgICAgICAgIChsYXN0RWZmZWN0ID0gZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QsXG4gICAgICAgICAgICAgICAgICBjYWxsRGVzdHJveUluREVWLFxuICAgICAgICAgICAgICAgICAgbGFzdEVmZmVjdCxcbiAgICAgICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgICAgICBkZXN0cm95XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgICAoaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ID0gITEpLFxuICAgICAgICAgICAgICAgIChmbGFncyAmIFBhc3NpdmUpICE9PSBOb0ZsYWdzXG4gICAgICAgICAgICAgICAgICA/IG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0b3BwZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdG9wcGVkKClcbiAgICAgICAgICAgICAgICAgIDogKGZsYWdzICYgTGF5b3V0KSAhPT0gTm9GbGFncyAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0b3BwZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0b3BwZWQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlLm5leHQ7XG4gICAgICAgICAgfSB3aGlsZSAodXBkYXRlUXVldWUgIT09IGZpcnN0RWZmZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgaG9va0ZsYWdzKSB7XG4gICAgICBzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaylcbiAgICAgICAgPyAoc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoaG9va0ZsYWdzLCBmaW5pc2hlZFdvcmspLFxuICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCkpXG4gICAgICAgIDogY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tQYXNzaXZlVW5tb3VudEVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgaG9va0ZsYWdzXG4gICAgKSB7XG4gICAgICBzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaylcbiAgICAgICAgPyAoc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICAgIGhvb2tGbGFncyxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICAgICAgICApLFxuICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCkpXG4gICAgICAgIDogY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgaG9va0ZsYWdzLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdENsYXNzQ2FsbGJhY2tzKGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICAgICAgaWYgKG51bGwgIT09IHVwZGF0ZVF1ZXVlKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIGZpbmlzaGVkV29yay50eXBlLmRlZmF1bHRQcm9wcyB8fFxuICAgICAgICAgIFwicmVmXCIgaW4gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMgfHxcbiAgICAgICAgICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzIHx8XG4gICAgICAgICAgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuIFRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICAgKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXRDYWxsYmFja3MsXG4gICAgICAgICAgICB1cGRhdGVRdWV1ZSxcbiAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsR2V0U25hcHNob3RCZWZvcmVVcGRhdGVzKGluc3RhbmNlLCBwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0Q2xhc3NTbmFwc2hvdChmaW5pc2hlZFdvcmssIGN1cnJlbnQpIHtcbiAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHMsXG4gICAgICAgIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgZmluaXNoZWRXb3JrLnR5cGUuZGVmYXVsdFByb3BzIHx8XG4gICAgICAgIFwicmVmXCIgaW4gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMgfHxcbiAgICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyB8fFxuICAgICAgICAoY3VycmVudC5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuIFRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICApLFxuICAgICAgICBjdXJyZW50LnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc29sdmVkUHJldlByb3BzID0gcmVzb2x2ZUNsYXNzQ29tcG9uZW50UHJvcHMoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgcHJldlByb3BzLFxuICAgICAgICAgIGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGVcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIHNuYXBzaG90ID0gcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGNhbGxHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXMsXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICByZXNvbHZlZFByZXZQcm9wcyxcbiAgICAgICAgICBwcmV2U3RhdGVcbiAgICAgICAgKTtcbiAgICAgICAgcHJldlByb3BzID0gZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGU7XG4gICAgICAgIHZvaWQgMCAhPT0gc25hcHNob3QgfHxcbiAgICAgICAgICBwcmV2UHJvcHMuaGFzKGZpbmlzaGVkV29yay50eXBlKSB8fFxuICAgICAgICAgIChwcmV2UHJvcHMuYWRkKGZpbmlzaGVkV29yay50eXBlKSxcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaW5pc2hlZFdvcmssIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKTogQSBzbmFwc2hvdCB2YWx1ZSAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZC4gWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLlwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICBjdXJyZW50Ll9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlID0gc25hcHNob3Q7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICBpbnN0YW5jZVxuICAgICkge1xuICAgICAgaW5zdGFuY2UucHJvcHMgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhcbiAgICAgICAgY3VycmVudC50eXBlLFxuICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHNcbiAgICAgICk7XG4gICAgICBpbnN0YW5jZS5zdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHNob3VsZFByb2ZpbGUoY3VycmVudClcbiAgICAgICAgPyAoc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudEluREVWLFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICksXG4gICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKSlcbiAgICAgICAgOiBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRJbkRFVixcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRBdHRhY2hSZWYoZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgcmVmID0gZmluaXNoZWRXb3JrLnJlZjtcbiAgICAgIGlmIChudWxsICE9PSByZWYpIHtcbiAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZVRvVXNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICBpbnN0YW5jZVRvVXNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpbnN0YW5jZVRvVXNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmKVxuICAgICAgICAgIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgICAgICAgKGZpbmlzaGVkV29yay5yZWZDbGVhbnVwID0gcmVmKGluc3RhbmNlVG9Vc2UpKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBmaW5pc2hlZFdvcmsucmVmQ2xlYW51cCA9IHJlZihpbnN0YW5jZVRvVXNlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiByZWZcbiAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcIlN0cmluZyByZWZzIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLlwiKVxuICAgICAgICAgICAgOiByZWYuaGFzT3duUHJvcGVydHkoXCJjdXJyZW50XCIpIHx8XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIHJlZiBvYmplY3QgcHJvdmlkZWQgZm9yICVzLiBVc2UgZWl0aGVyIGEgcmVmLXNldHRlciBmdW5jdGlvbiBvciBSZWFjdC5jcmVhdGVSZWYoKS5cIixcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaylcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChyZWYuY3VycmVudCA9IGluc3RhbmNlVG9Vc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzYWZlbHlBdHRhY2hSZWYoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoY3VycmVudCwgY29tbWl0QXR0YWNoUmVmLCBjdXJyZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgICAgIHZhciByZWYgPSBjdXJyZW50LnJlZixcbiAgICAgICAgcmVmQ2xlYW51cCA9IGN1cnJlbnQucmVmQ2xlYW51cDtcbiAgICAgIGlmIChudWxsICE9PSByZWYpXG4gICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWZDbGVhbnVwKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUHJvZmlsZShjdXJyZW50KSlcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzdGFydEVmZmVjdFRpbWVyKCksIHJ1bldpdGhGaWJlckluREVWKGN1cnJlbnQsIHJlZkNsZWFudXApO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKGN1cnJlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHJ1bldpdGhGaWJlckluREVWKGN1cnJlbnQsIHJlZkNsZWFudXApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIChjdXJyZW50LnJlZkNsZWFudXAgPSBudWxsKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnQgPSBjdXJyZW50LmFsdGVybmF0ZSksXG4gICAgICAgICAgICAgIG51bGwgIT0gY3VycmVudCAmJiAoY3VycmVudC5yZWZDbGVhbnVwID0gbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWYpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRQcm9maWxlKGN1cnJlbnQpKVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHN0YXJ0RWZmZWN0VGltZXIoKSwgcnVuV2l0aEZpYmVySW5ERVYoY3VycmVudCwgcmVmLCBudWxsKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbihjdXJyZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBydW5XaXRoRmliZXJJbkRFVihjdXJyZW50LCByZWYsIG51bGwpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yJDcpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yJDcpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSByZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFByb2ZpbGVyKFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgY3VycmVudCxcbiAgICAgIGNvbW1pdFN0YXJ0VGltZSxcbiAgICAgIGVmZmVjdER1cmF0aW9uXG4gICAgKSB7XG4gICAgICB2YXIgX2ZpbmlzaGVkV29yayRtZW1vaXplID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgIGlkID0gX2ZpbmlzaGVkV29yayRtZW1vaXplLmlkLFxuICAgICAgICBvbkNvbW1pdCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZS5vbkNvbW1pdDtcbiAgICAgIF9maW5pc2hlZFdvcmskbWVtb2l6ZSA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZS5vblJlbmRlcjtcbiAgICAgIGN1cnJlbnQgPSBudWxsID09PSBjdXJyZW50ID8gXCJtb3VudFwiIDogXCJ1cGRhdGVcIjtcbiAgICAgIGN1cnJlbnRVcGRhdGVJc05lc3RlZCAmJiAoY3VycmVudCA9IFwibmVzdGVkLXVwZGF0ZVwiKTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9maW5pc2hlZFdvcmskbWVtb2l6ZSAmJlxuICAgICAgICBfZmluaXNoZWRXb3JrJG1lbW9pemUoXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuYWN0dWFsRHVyYXRpb24sXG4gICAgICAgICAgZmluaXNoZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24sXG4gICAgICAgICAgZmluaXNoZWRXb3JrLmFjdHVhbFN0YXJ0VGltZSxcbiAgICAgICAgICBjb21taXRTdGFydFRpbWVcbiAgICAgICAgKTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG9uQ29tbWl0ICYmXG4gICAgICAgIG9uQ29tbWl0KFxuICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLmlkLFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgZWZmZWN0RHVyYXRpb24sXG4gICAgICAgICAgY29tbWl0U3RhcnRUaW1lXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFByb2ZpbGVyUG9zdENvbW1pdEltcGwoXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBjdXJyZW50LFxuICAgICAgY29tbWl0U3RhcnRUaW1lLFxuICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uXG4gICAgKSB7XG4gICAgICB2YXIgX2ZpbmlzaGVkV29yayRtZW1vaXplMiA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgZmluaXNoZWRXb3JrID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5pZDtcbiAgICAgIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uUG9zdENvbW1pdDtcbiAgICAgIGN1cnJlbnQgPSBudWxsID09PSBjdXJyZW50ID8gXCJtb3VudFwiIDogXCJ1cGRhdGVcIjtcbiAgICAgIGN1cnJlbnRVcGRhdGVJc05lc3RlZCAmJiAoY3VycmVudCA9IFwibmVzdGVkLXVwZGF0ZVwiKTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIgJiZcbiAgICAgICAgX2ZpbmlzaGVkV29yayRtZW1vaXplMihcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb24sXG4gICAgICAgICAgY29tbWl0U3RhcnRUaW1lXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvc3RNb3VudChmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgIHByb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBjb21taXRNb3VudCxcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvc3RVcGRhdGUoZmluaXNoZWRXb3JrLCBuZXdQcm9wcywgb2xkUHJvcHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBjb21taXRVcGRhdGUsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZSxcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICBvbGRQcm9wcyxcbiAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0hvc3RQYXJlbnQoZmliZXIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDUgPT09IGZpYmVyLnRhZyB8fFxuICAgICAgICAzID09PSBmaWJlci50YWcgfHxcbiAgICAgICAgMjYgPT09IGZpYmVyLnRhZyB8fFxuICAgICAgICAoMjcgPT09IGZpYmVyLnRhZyAmJiBpc1NpbmdsZXRvblNjb3BlKGZpYmVyLnR5cGUpKSB8fFxuICAgICAgICA0ID09PSBmaWJlci50YWdcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEhvc3RTaWJsaW5nKGZpYmVyKSB7XG4gICAgICBhOiBmb3IgKDs7KSB7XG4gICAgICAgIGZvciAoOyBudWxsID09PSBmaWJlci5zaWJsaW5nOyApIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gZmliZXIucmV0dXJuIHx8IGlzSG9zdFBhcmVudChmaWJlci5yZXR1cm4pKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmaWJlci5zaWJsaW5nLnJldHVybiA9IGZpYmVyLnJldHVybjtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBmaWJlciA9IGZpYmVyLnNpYmxpbmc7XG4gICAgICAgICAgNSAhPT0gZmliZXIudGFnICYmIDYgIT09IGZpYmVyLnRhZyAmJiAxOCAhPT0gZmliZXIudGFnO1xuXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICgyNyA9PT0gZmliZXIudGFnICYmIGlzU2luZ2xldG9uU2NvcGUoZmliZXIudHlwZSkpIGNvbnRpbnVlIGE7XG4gICAgICAgICAgaWYgKGZpYmVyLmZsYWdzICYgMikgY29udGludWUgYTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gZmliZXIuY2hpbGQgfHwgNCA9PT0gZmliZXIudGFnKSBjb250aW51ZSBhO1xuICAgICAgICAgIGVsc2UgKGZpYmVyLmNoaWxkLnJldHVybiA9IGZpYmVyKSwgKGZpYmVyID0gZmliZXIuY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGZpYmVyLmZsYWdzICYgMikpIHJldHVybiBmaWJlci5zdGF0ZU5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgICAgIHZhciB0YWcgPSBub2RlLnRhZztcbiAgICAgIGlmICg1ID09PSB0YWcgfHwgNiA9PT0gdGFnKVxuICAgICAgICAobm9kZSA9IG5vZGUuc3RhdGVOb2RlKSxcbiAgICAgICAgICBiZWZvcmVcbiAgICAgICAgICAgID8gKDkgPT09IHBhcmVudC5ub2RlVHlwZVxuICAgICAgICAgICAgICAgID8gcGFyZW50LmJvZHlcbiAgICAgICAgICAgICAgICA6IFwiSFRNTFwiID09PSBwYXJlbnQubm9kZU5hbWVcbiAgICAgICAgICAgICAgICAgID8gcGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keVxuICAgICAgICAgICAgICAgICAgOiBwYXJlbnRcbiAgICAgICAgICAgICAgKS5pbnNlcnRCZWZvcmUobm9kZSwgYmVmb3JlKVxuICAgICAgICAgICAgOiAoKGJlZm9yZSA9XG4gICAgICAgICAgICAgICAgOSA9PT0gcGFyZW50Lm5vZGVUeXBlXG4gICAgICAgICAgICAgICAgICA/IHBhcmVudC5ib2R5XG4gICAgICAgICAgICAgICAgICA6IFwiSFRNTFwiID09PSBwYXJlbnQubm9kZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJlbnQub3duZXJEb2N1bWVudC5ib2R5XG4gICAgICAgICAgICAgICAgICAgIDogcGFyZW50KSxcbiAgICAgICAgICAgICAgYmVmb3JlLmFwcGVuZENoaWxkKG5vZGUpLFxuICAgICAgICAgICAgICAocGFyZW50ID0gcGFyZW50Ll9yZWFjdFJvb3RDb250YWluZXIpLFxuICAgICAgICAgICAgICAobnVsbCAhPT0gcGFyZW50ICYmIHZvaWQgMCAhPT0gcGFyZW50KSB8fFxuICAgICAgICAgICAgICAgIG51bGwgIT09IGJlZm9yZS5vbmNsaWNrIHx8XG4gICAgICAgICAgICAgICAgKGJlZm9yZS5vbmNsaWNrID0gbm9vcCQxKSk7XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgNCAhPT0gdGFnICYmXG4gICAgICAgICgyNyA9PT0gdGFnICYmXG4gICAgICAgICAgaXNTaW5nbGV0b25TY29wZShub2RlLnR5cGUpICYmXG4gICAgICAgICAgKChwYXJlbnQgPSBub2RlLnN0YXRlTm9kZSksIChiZWZvcmUgPSBudWxsKSksXG4gICAgICAgIChub2RlID0gbm9kZS5jaGlsZCksXG4gICAgICAgIG51bGwgIT09IG5vZGUpXG4gICAgICApXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCksXG4gICAgICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgICAgIG51bGwgIT09IG5vZGU7XG5cbiAgICAgICAgKVxuICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpLFxuICAgICAgICAgICAgKG5vZGUgPSBub2RlLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgICAgIHZhciB0YWcgPSBub2RlLnRhZztcbiAgICAgIGlmICg1ID09PSB0YWcgfHwgNiA9PT0gdGFnKVxuICAgICAgICAobm9kZSA9IG5vZGUuc3RhdGVOb2RlKSxcbiAgICAgICAgICBiZWZvcmUgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIGJlZm9yZSkgOiBwYXJlbnQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgNCAhPT0gdGFnICYmXG4gICAgICAgICgyNyA9PT0gdGFnICYmIGlzU2luZ2xldG9uU2NvcGUobm9kZS50eXBlKSAmJiAocGFyZW50ID0gbm9kZS5zdGF0ZU5vZGUpLFxuICAgICAgICAobm9kZSA9IG5vZGUuY2hpbGQpLFxuICAgICAgICBudWxsICE9PSBub2RlKVxuICAgICAgKVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCksXG4gICAgICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgICAgIG51bGwgIT09IG5vZGU7XG5cbiAgICAgICAgKVxuICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCksXG4gICAgICAgICAgICAobm9kZSA9IG5vZGUuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFBsYWNlbWVudChmaW5pc2hlZFdvcmspIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBob3N0UGFyZW50RmliZXIsIHBhcmVudEZpYmVyID0gZmluaXNoZWRXb3JrLnJldHVybjtcbiAgICAgICAgbnVsbCAhPT0gcGFyZW50RmliZXI7XG5cbiAgICAgICkge1xuICAgICAgICBpZiAoaXNIb3N0UGFyZW50KHBhcmVudEZpYmVyKSkge1xuICAgICAgICAgIGhvc3RQYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIucmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKG51bGwgPT0gaG9zdFBhcmVudEZpYmVyKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgc3dpdGNoIChob3N0UGFyZW50RmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgaG9zdFBhcmVudEZpYmVyID0gaG9zdFBhcmVudEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICBwYXJlbnRGaWJlciA9IGdldEhvc3RTaWJsaW5nKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgcGFyZW50RmliZXIsXG4gICAgICAgICAgICBob3N0UGFyZW50RmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcGFyZW50RmliZXIgPSBob3N0UGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIGhvc3RQYXJlbnRGaWJlci5mbGFncyAmIDMyICYmXG4gICAgICAgICAgICAocmVzZXRUZXh0Q29udGVudChwYXJlbnRGaWJlciksIChob3N0UGFyZW50RmliZXIuZmxhZ3MgJj0gLTMzKSk7XG4gICAgICAgICAgaG9zdFBhcmVudEZpYmVyID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBob3N0UGFyZW50RmliZXIsXG4gICAgICAgICAgICBwYXJlbnRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGhvc3RQYXJlbnRGaWJlciA9IGhvc3RQYXJlbnRGaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICBwYXJlbnRGaWJlciA9IGdldEhvc3RTaWJsaW5nKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgICAgICAgaG9zdFBhcmVudEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiSW52YWxpZCBob3N0IHBhcmVudCBmaWJlci4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvc3RTaW5nbGV0b25BY3F1aXNpdGlvbihmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciBzaW5nbGV0b24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLFxuICAgICAgICBwcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGFjcXVpcmVTaW5nbGV0b25JbnN0YW5jZSxcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICBzaW5nbGV0b24sXG4gICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpcnN0Q2hpbGQpIHtcbiAgICAgIHJvb3QgPSByb290LmNvbnRhaW5lckluZm87XG4gICAgICBldmVudHNFbmFibGVkID0gX2VuYWJsZWQ7XG4gICAgICByb290ID0gZ2V0QWN0aXZlRWxlbWVudERlZXAocm9vdCk7XG4gICAgICBpZiAoaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKHJvb3QpKSB7XG4gICAgICAgIGlmIChcInNlbGVjdGlvblN0YXJ0XCIgaW4gcm9vdClcbiAgICAgICAgICB2YXIgSlNDb21waWxlcl90ZW1wID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHJvb3Quc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHJvb3Quc2VsZWN0aW9uRW5kXG4gICAgICAgICAgfTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9XG4gICAgICAgICAgICAgICgoSlNDb21waWxlcl90ZW1wID0gcm9vdC5vd25lckRvY3VtZW50KSAmJlxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5kZWZhdWx0VmlldykgfHxcbiAgICAgICAgICAgICAgd2luZG93O1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5nZXRTZWxlY3Rpb24gJiYgSlNDb21waWxlcl90ZW1wLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiAwICE9PSBzZWxlY3Rpb24ucmFuZ2VDb3VudCkge1xuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgICAgICAgICAgICAgdmFyIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgICAgICAgZm9jdXNOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZTtcbiAgICAgICAgICAgICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uLmZvY3VzT2Zmc2V0O1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5ub2RlVHlwZSwgZm9jdXNOb2RlLm5vZGVUeXBlO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlJDIpIHtcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDAsXG4gICAgICAgICAgICAgICAgc3RhcnQgPSAtMSxcbiAgICAgICAgICAgICAgICBlbmQgPSAtMSxcbiAgICAgICAgICAgICAgICBpbmRleFdpdGhpbkFuY2hvciA9IDAsXG4gICAgICAgICAgICAgICAgaW5kZXhXaXRoaW5Gb2N1cyA9IDAsXG4gICAgICAgICAgICAgICAgbm9kZSA9IHJvb3QsXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IG51bGw7XG4gICAgICAgICAgICAgIGI6IGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBuZXh0OyA7ICkge1xuICAgICAgICAgICAgICAgICAgbm9kZSAhPT0gSlNDb21waWxlcl90ZW1wIHx8XG4gICAgICAgICAgICAgICAgICAgICgwICE9PSBhbmNob3JPZmZzZXQgJiYgMyAhPT0gbm9kZS5ub2RlVHlwZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0ID0gbGVuZ3RoICsgYW5jaG9yT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgIG5vZGUgIT09IGZvY3VzTm9kZSB8fFxuICAgICAgICAgICAgICAgICAgICAoMCAhPT0gc2VsZWN0aW9uICYmIDMgIT09IG5vZGUubm9kZVR5cGUpIHx8XG4gICAgICAgICAgICAgICAgICAgIChlbmQgPSBsZW5ndGggKyBzZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgMyA9PT0gbm9kZS5ub2RlVHlwZSAmJiAobGVuZ3RoICs9IG5vZGUubm9kZVZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gKG5leHQgPSBub2RlLmZpcnN0Q2hpbGQpKSBicmVhaztcbiAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBub2RlO1xuICAgICAgICAgICAgICAgICAgbm9kZSA9IG5leHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgIGlmIChub2RlID09PSByb290KSBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9PT0gSlNDb21waWxlcl90ZW1wICYmXG4gICAgICAgICAgICAgICAgICAgICsraW5kZXhXaXRoaW5BbmNob3IgPT09IGFuY2hvck9mZnNldCAmJlxuICAgICAgICAgICAgICAgICAgICAoc3RhcnQgPSBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9PT0gZm9jdXNOb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICsraW5kZXhXaXRoaW5Gb2N1cyA9PT0gc2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgIChlbmQgPSBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IChuZXh0ID0gbm9kZS5uZXh0U2libGluZykpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub2RlID0gbmV4dDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPVxuICAgICAgICAgICAgICAgIC0xID09PSBzdGFydCB8fCAtMSA9PT0gZW5kID8gbnVsbCA6IHsgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZCB9O1xuICAgICAgICAgICAgfSBlbHNlIEpTQ29tcGlsZXJfdGVtcCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBKU0NvbXBpbGVyX3RlbXAgfHwgeyBzdGFydDogMCwgZW5kOiAwIH07XG4gICAgICB9IGVsc2UgSlNDb21waWxlcl90ZW1wID0gbnVsbDtcbiAgICAgIHNlbGVjdGlvbkluZm9ybWF0aW9uID0ge1xuICAgICAgICBmb2N1c2VkRWxlbTogcm9vdCxcbiAgICAgICAgc2VsZWN0aW9uUmFuZ2U6IEpTQ29tcGlsZXJfdGVtcFxuICAgICAgfTtcbiAgICAgIF9lbmFibGVkID0gITE7XG4gICAgICBmb3IgKG5leHRFZmZlY3QgPSBmaXJzdENoaWxkOyBudWxsICE9PSBuZXh0RWZmZWN0OyApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKGZpcnN0Q2hpbGQgPSBuZXh0RWZmZWN0KSxcbiAgICAgICAgICAocm9vdCA9IGZpcnN0Q2hpbGQuY2hpbGQpLFxuICAgICAgICAgIDAgIT09IChmaXJzdENoaWxkLnN1YnRyZWVGbGFncyAmIDEwMjQpICYmIG51bGwgIT09IHJvb3QpXG4gICAgICAgIClcbiAgICAgICAgICAocm9vdC5yZXR1cm4gPSBmaXJzdENoaWxkKSwgKG5leHRFZmZlY3QgPSByb290KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGZvciAoOyBudWxsICE9PSBuZXh0RWZmZWN0OyApIHtcbiAgICAgICAgICAgIHJvb3QgPSBmaXJzdENoaWxkID0gbmV4dEVmZmVjdDtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IHJvb3QuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgYW5jaG9yT2Zmc2V0ID0gcm9vdC5mbGFncztcbiAgICAgICAgICAgIHN3aXRjaCAocm9vdC50YWcpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgMCAhPT0gKGFuY2hvck9mZnNldCAmIDEwMjQpICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBKU0NvbXBpbGVyX3RlbXAgJiZcbiAgICAgICAgICAgICAgICAgIGNvbW1pdENsYXNzU25hcHNob3Qocm9vdCwgSlNDb21waWxlcl90ZW1wKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIGlmICgwICE9PSAoYW5jaG9yT2Zmc2V0ICYgMTAyNCkpXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICgocm9vdCA9IHJvb3Quc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFxuICAgICAgICAgICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID0gcm9vdC5ub2RlVHlwZSksXG4gICAgICAgICAgICAgICAgICAgIDkgPT09IEpTQ29tcGlsZXJfdGVtcClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJDb250YWluZXJTcGFyaW5nbHkocm9vdCk7XG4gICAgICAgICAgICAgICAgICBlbHNlIGlmICgxID09PSBKU0NvbXBpbGVyX3RlbXApXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9vdC5ub2RlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJIRUFEXCI6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkhUTUxcIjpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQk9EWVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJDb250YWluZXJTcGFyaW5nbHkocm9vdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC50ZXh0Q29udGVudCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoMCAhPT0gKGFuY2hvck9mZnNldCAmIDEwMjQpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb290ID0gZmlyc3RDaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IHJvb3QpIHtcbiAgICAgICAgICAgICAgcm9vdC5yZXR1cm4gPSBmaXJzdENoaWxkLnJldHVybjtcbiAgICAgICAgICAgICAgbmV4dEVmZmVjdCA9IHJvb3Q7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dEVmZmVjdCA9IGZpcnN0Q2hpbGQucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0TGF5b3V0RWZmZWN0T25GaWJlcihmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICBjb21taXRIb29rTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmssIExheW91dCB8IEhhc0VmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgaWYgKGZsYWdzICYgNClcbiAgICAgICAgICAgIGlmICgoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUpLCBudWxsID09PSBjdXJyZW50KSlcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUuZGVmYXVsdFByb3BzIHx8XG4gICAgICAgICAgICAgICAgXCJyZWZcIiBpbiBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICAgICAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgfHxcbiAgICAgICAgICAgICAgICAoZmluaXNoZWRSb290LnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgY29tcG9uZW50RGlkTW91bnQuIFRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3Quc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSBjb21wb25lbnREaWRNb3VudC4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaylcbiAgICAgICAgICAgICAgICAgID8gKHN0YXJ0RWZmZWN0VGltZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxDb21wb25lbnREaWRNb3VudEluREVWLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3RcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKSlcbiAgICAgICAgICAgICAgICAgIDogcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxDb21wb25lbnREaWRNb3VudEluREVWLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3RcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgcHJldlByb3BzID0gcmVzb2x2ZUNsYXNzQ29tcG9uZW50UHJvcHMoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay50eXBlLmRlZmF1bHRQcm9wcyB8fFxuICAgICAgICAgICAgICAgIFwicmVmXCIgaW4gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMgfHxcbiAgICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzIHx8XG4gICAgICAgICAgICAgICAgKGZpbmlzaGVkUm9vdC5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlIGNvbXBvbmVudERpZFVwZGF0ZS4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlIGNvbXBvbmVudERpZFVwZGF0ZS4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgc2hvdWxkUHJvZmlsZShmaW5pc2hlZFdvcmspXG4gICAgICAgICAgICAgICAgPyAoc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgY2FsbENvbXBvbmVudERpZFVwZGF0ZUluREVWLFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgICAgcHJldlByb3BzLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGVcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpKVxuICAgICAgICAgICAgICAgIDogcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgY2FsbENvbXBvbmVudERpZFVwZGF0ZUluREVWLFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgICAgcHJldlByb3BzLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZmxhZ3MgJiA2NCAmJiBjb21taXRDbGFzc0NhbGxiYWNrcyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNTEyICYmIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgY3VycmVudCA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmxhZ3MgJiA2NCAmJlxuICAgICAgICAgICAgKChmbGFncyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSksIG51bGwgIT09IGZsYWdzKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJldlByb3BzID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBmaW5pc2hlZFdvcmsuY2hpbGQpXG4gICAgICAgICAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLmNoaWxkLnRhZykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgcHJldlByb3BzID0gZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgIHByZXZQcm9wcyA9IGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjb21taXRDYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgZmxhZ3MsXG4gICAgICAgICAgICAgICAgcHJldlByb3BzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmluaXNoZWRSb290LmVmZmVjdER1cmF0aW9uICs9IHBvcE5lc3RlZEVmZmVjdER1cmF0aW9ucyhjdXJyZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBudWxsID09PSBjdXJyZW50ICYmXG4gICAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdEhvc3RTaW5nbGV0b25BY3F1aXNpdGlvbihmaW5pc2hlZFdvcmspO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiYgZmxhZ3MgJiA0ICYmIGNvbW1pdEhvc3RNb3VudChmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNTEyICYmIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIGlmIChmbGFncyAmIDQpIHtcbiAgICAgICAgICAgIGZsYWdzID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5lZmZlY3REdXJhdGlvbiArPSBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMoZmxhZ3MpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdFByb2ZpbGVyLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIGNvbW1pdFN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QuZWZmZWN0RHVyYXRpb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNjQgJiZcbiAgICAgICAgICAgICgoZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRSb290ICYmXG4gICAgICAgICAgICAgICgoZmluaXNoZWRSb290ID0gZmluaXNoZWRSb290LmRlaHlkcmF0ZWQpLFxuICAgICAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFJvb3QgJiZcbiAgICAgICAgICAgICAgICAoKGZpbmlzaGVkV29yayA9IHJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkuYmluZChcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICByZWdpc3RlclN1c3BlbnNlSW5zdGFuY2VSZXRyeShmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgZmxhZ3MgPVxuICAgICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgfHwgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuO1xuICAgICAgICAgIGlmICghZmxhZ3MpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPVxuICAgICAgICAgICAgICAobnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgICAgICBwcmV2UHJvcHMgPSBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gZmxhZ3M7XG4gICAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IGN1cnJlbnQpICYmXG4gICAgICAgICAgICAhcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW5cbiAgICAgICAgICAgICAgPyByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgMCAhPT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiA4NzcyKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBwcmV2UHJvcHM7XG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiZcbiAgICAgICAgKChmaWJlci5hbHRlcm5hdGUgPSBudWxsKSwgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoYWx0ZXJuYXRlKSk7XG4gICAgICBmaWJlci5jaGlsZCA9IG51bGw7XG4gICAgICBmaWJlci5kZWxldGlvbnMgPSBudWxsO1xuICAgICAgZmliZXIuc2libGluZyA9IG51bGw7XG4gICAgICA1ID09PSBmaWJlci50YWcgJiZcbiAgICAgICAgKChhbHRlcm5hdGUgPSBmaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgZGV0YWNoRGVsZXRlZEluc3RhbmNlKGFsdGVybmF0ZSkpO1xuICAgICAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDtcbiAgICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgICAgIGZpYmVyLnJldHVybiA9IG51bGw7XG4gICAgICBmaWJlci5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gICAgICBmaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IG51bGw7XG4gICAgICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsO1xuICAgICAgZmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIHBhcmVudFxuICAgICkge1xuICAgICAgZm9yIChwYXJlbnQgPSBwYXJlbnQuY2hpbGQ7IG51bGwgIT09IHBhcmVudDsgKVxuICAgICAgICBjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgIHBhcmVudFxuICAgICAgICApLFxuICAgICAgICAgIChwYXJlbnQgPSBwYXJlbnQuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgZGVsZXRlZEZpYmVyXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnRcbiAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQocmVuZGVyZXJJRCwgZGVsZXRlZEZpYmVyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgfHxcbiAgICAgICAgICAgICgoaGFzTG9nZ2VkRXJyb3IgPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXNcIixcbiAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgICAgc3dpdGNoIChkZWxldGVkRmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRlbGV0ZWRGaWJlci5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICA/IGRlbGV0ZWRGaWJlci5tZW1vaXplZFN0YXRlLmNvdW50LS1cbiAgICAgICAgICAgIDogZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSAmJlxuICAgICAgICAgICAgICAoKGRlbGV0ZWRGaWJlciA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgICBkZWxldGVkRmliZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkZWxldGVkRmliZXIpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICAgICAgICB2YXIgcHJldkhvc3RQYXJlbnQgPSBob3N0UGFyZW50LFxuICAgICAgICAgICAgcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBpc1NpbmdsZXRvblNjb3BlKGRlbGV0ZWRGaWJlci50eXBlKSAmJlxuICAgICAgICAgICAgKChob3N0UGFyZW50ID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAoaG9zdFBhcmVudElzQ29udGFpbmVyID0gITEpKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICByZWxlYXNlU2luZ2xldG9uSW5zdGFuY2UsXG4gICAgICAgICAgICBkZWxldGVkRmliZXIuc3RhdGVOb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBob3N0UGFyZW50ID0gcHJldkhvc3RQYXJlbnQ7XG4gICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcHJldkhvc3RQYXJlbnQgPSBob3N0UGFyZW50O1xuICAgICAgICAgIHByZXZIb3N0UGFyZW50SXNDb250YWluZXIgPSBob3N0UGFyZW50SXNDb250YWluZXI7XG4gICAgICAgICAgaG9zdFBhcmVudCA9IG51bGw7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBwcmV2SG9zdFBhcmVudDtcbiAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgIGlmIChudWxsICE9PSBob3N0UGFyZW50KVxuICAgICAgICAgICAgaWYgKGhvc3RQYXJlbnRJc0NvbnRhaW5lcilcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgIGhvc3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICBkZWxldGVkRmliZXIuc3RhdGVOb2RlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkLFxuICAgICAgICAgICAgICAgICAgaG9zdFBhcmVudCxcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIG51bGwgIT09IGhvc3RQYXJlbnQgJiZcbiAgICAgICAgICAgIChob3N0UGFyZW50SXNDb250YWluZXJcbiAgICAgICAgICAgICAgPyAoKGZpbmlzaGVkUm9vdCA9IGhvc3RQYXJlbnQpLFxuICAgICAgICAgICAgICAgIGNsZWFyU3VzcGVuc2VCb3VuZGFyeShcbiAgICAgICAgICAgICAgICAgIDkgPT09IGZpbmlzaGVkUm9vdC5ub2RlVHlwZVxuICAgICAgICAgICAgICAgICAgICA/IGZpbmlzaGVkUm9vdC5ib2R5XG4gICAgICAgICAgICAgICAgICAgIDogXCJIVE1MXCIgPT09IGZpbmlzaGVkUm9vdC5ub2RlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgID8gZmluaXNoZWRSb290Lm93bmVyRG9jdW1lbnQuYm9keVxuICAgICAgICAgICAgICAgICAgICAgIDogZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLnN0YXRlTm9kZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgcmV0cnlJZkJsb2NrZWRPbihmaW5pc2hlZFJvb3QpKVxuICAgICAgICAgICAgICA6IGNsZWFyU3VzcGVuc2VCb3VuZGFyeShob3N0UGFyZW50LCBkZWxldGVkRmliZXIuc3RhdGVOb2RlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBwcmV2SG9zdFBhcmVudCA9IGhvc3RQYXJlbnQ7XG4gICAgICAgICAgcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBob3N0UGFyZW50ID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9ICEwO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBob3N0UGFyZW50ID0gcHJldkhvc3RQYXJlbnQ7XG4gICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE0OlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICAgICAgSW5zZXJ0aW9uLFxuICAgICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgY29tbWl0SG9va0xheW91dFVubW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgIExheW91dFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICAoc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciksXG4gICAgICAgICAgICAocHJldkhvc3RQYXJlbnQgPSBkZWxldGVkRmliZXIuc3RhdGVOb2RlKSxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByZXZIb3N0UGFyZW50LmNvbXBvbmVudFdpbGxVbm1vdW50ICYmXG4gICAgICAgICAgICAgIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChcbiAgICAgICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICBwcmV2SG9zdFBhcmVudFxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPVxuICAgICAgICAgICAgKHByZXZIb3N0UGFyZW50ID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbikgfHxcbiAgICAgICAgICAgIG51bGwgIT09IGRlbGV0ZWRGaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gcHJldkhvc3RQYXJlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUpLFxuICAgICAgICBudWxsICE9PSBmaW5pc2hlZFJvb3QgJiZcbiAgICAgICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdC5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFJvb3QgJiZcbiAgICAgICAgICAgICgoZmluaXNoZWRSb290ID0gZmluaXNoZWRSb290LmRlaHlkcmF0ZWQpLCBudWxsICE9PSBmaW5pc2hlZFJvb3QpKSlcbiAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZSxcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UmV0cnlDYWNoZShmaW5pc2hlZFdvcmspIHtcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHZhciByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBudWxsID09PSByZXRyeUNhY2hlICYmXG4gICAgICAgICAgICAocmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCkpO1xuICAgICAgICAgIHJldHVybiByZXRyeUNhY2hlO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAocmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5fcmV0cnlDYWNoZSksXG4gICAgICAgICAgICBudWxsID09PSByZXRyeUNhY2hlICYmXG4gICAgICAgICAgICAgIChyZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLl9yZXRyeUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpKSxcbiAgICAgICAgICAgIHJldHJ5Q2FjaGVcbiAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbnNlIGhhbmRsZXIgdGFnIChcIiArXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay50YWcgK1xuICAgICAgICAgICAgICBcIikuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgd2FrZWFibGVzKSB7XG4gICAgICB2YXIgcmV0cnlDYWNoZSA9IGdldFJldHJ5Q2FjaGUoZmluaXNoZWRXb3JrKTtcbiAgICAgIHdha2VhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uICh3YWtlYWJsZSkge1xuICAgICAgICB2YXIgcmV0cnkgPSByZXNvbHZlUmV0cnlXYWtlYWJsZS5iaW5kKG51bGwsIGZpbmlzaGVkV29yaywgd2FrZWFibGUpO1xuICAgICAgICBpZiAoIXJldHJ5Q2FjaGUuaGFzKHdha2VhYmxlKSkge1xuICAgICAgICAgIHJldHJ5Q2FjaGUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpXG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gaW5Qcm9ncmVzc0xhbmVzICYmIG51bGwgIT09IGluUHJvZ3Jlc3NSb290KVxuICAgICAgICAgICAgICByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKGluUHJvZ3Jlc3NSb290LCBpblByb2dyZXNzTGFuZXMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIGZpbmlzaGVkIHJvb3QgYW5kIGxhbmVzIHRvIGJlIHNldC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIHdha2VhYmxlLnRoZW4ocmV0cnksIHJldHJ5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCRqc2NvbXAkMCwgcGFyZW50RmliZXIpIHtcbiAgICAgIHZhciBkZWxldGlvbnMgPSBwYXJlbnRGaWJlci5kZWxldGlvbnM7XG4gICAgICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciByb290ID0gcm9vdCRqc2NvbXAkMCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyID0gcGFyZW50RmliZXIsXG4gICAgICAgICAgICBkZWxldGVkRmliZXIgPSBkZWxldGlvbnNbaV0sXG4gICAgICAgICAgICBwYXJlbnQgPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICBhOiBmb3IgKDsgbnVsbCAhPT0gcGFyZW50OyApIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGFyZW50LnRhZykge1xuICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZXRvblNjb3BlKHBhcmVudC50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gITE7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMDtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG51bGwgPT09IGhvc3RQYXJlbnQpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlcihyb290LCByZXR1cm5GaWJlciwgZGVsZXRlZEZpYmVyKTtcbiAgICAgICAgICBob3N0UGFyZW50ID0gbnVsbDtcbiAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMTtcbiAgICAgICAgICByb290ID0gZGVsZXRlZEZpYmVyO1xuICAgICAgICAgIHJldHVybkZpYmVyID0gcm9vdC5hbHRlcm5hdGU7XG4gICAgICAgICAgbnVsbCAhPT0gcmV0dXJuRmliZXIgJiYgKHJldHVybkZpYmVyLnJldHVybiA9IG51bGwpO1xuICAgICAgICAgIHJvb3QucmV0dXJuID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEzODc4KVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgICAgY29tbWl0TXV0YXRpb25FZmZlY3RzT25GaWJlcihwYXJlbnRGaWJlciwgcm9vdCRqc2NvbXAkMCksXG4gICAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0TXV0YXRpb25FZmZlY3RzT25GaWJlcihmaW5pc2hlZFdvcmssIHJvb3QpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE0OlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIChjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICAgIEluc2VydGlvbiB8IEhhc0VmZmVjdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChJbnNlcnRpb24gfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayksXG4gICAgICAgICAgICBjb21taXRIb29rTGF5b3V0VW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgICAgTGF5b3V0IHwgSGFzRWZmZWN0XG4gICAgICAgICAgICApKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDUxMiAmJlxuICAgICAgICAgICAgKG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pKTtcbiAgICAgICAgICBmbGFncyAmIDY0ICYmXG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gJiZcbiAgICAgICAgICAgICgoZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yayAmJlxuICAgICAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLmNhbGxiYWNrcyksXG4gICAgICAgICAgICAgIG51bGwgIT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICAgKChjdXJyZW50ID0gZmluaXNoZWRXb3JrLnNoYXJlZC5oaWRkZW5DYWxsYmFja3MpLFxuICAgICAgICAgICAgICAgIChmaW5pc2hlZFdvcmsuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyA9XG4gICAgICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50ID8gZmxhZ3MgOiBjdXJyZW50LmNvbmNhdChmbGFncykpKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHZhciBob2lzdGFibGVSb290ID0gY3VycmVudEhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybikpO1xuICAgICAgICAgIGlmIChmbGFncyAmIDQpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgocm9vdCA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Lm1lbW9pemVkU3RhdGUgOiBudWxsKSxcbiAgICAgICAgICAgICAgKGZsYWdzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpLFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gZmxhZ3MpXG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICAgICAgICByb290ID0gaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgICAgICAgICAgIGI6IHN3aXRjaCAoZmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwidGl0bGVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGl0bGVcIilbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFob2lzdGFibGVSb290IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RbaW50ZXJuYWxIb2lzdGFibGVNYXJrZXJdIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5oYXNBdHRyaWJ1dGUoXCJpdGVtcHJvcFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoaG9pc3RhYmxlUm9vdCA9IHJvb3QuY3JlYXRlRWxlbWVudChmbGFncykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuaGVhZC5pbnNlcnRCZWZvcmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yKFwiaGVhZCA+IHRpdGxlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGhvaXN0YWJsZVJvb3QsIGZsYWdzLCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBmaW5pc2hlZFdvcms7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBob2lzdGFibGVSb290O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heWJlTm9kZXMgPSBnZXRIeWRyYXRhYmxlSG9pc3RhYmxlQ2FjaGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImhyZWZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgICAgICAgICAgICAgKS5nZXQoZmxhZ3MgKyAoY3VycmVudC5ocmVmIHx8IFwiXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXliZU5vZGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heWJlTm9kZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChob2lzdGFibGVSb290ID0gbWF5YmVOb2Rlc1tpXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuaHJlZiB8fCBcIlwiID09PSBjdXJyZW50LmhyZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuaHJlZikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5nZXRBdHRyaWJ1dGUoXCJyZWxcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5yZWwgPyBudWxsIDogY3VycmVudC5yZWwpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuZ2V0QXR0cmlidXRlKFwidGl0bGVcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQudGl0bGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5jcm9zc09yaWdpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuY3Jvc3NPcmlnaW4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVOb2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSByb290LmNyZWF0ZUVsZW1lbnQoZmxhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaG9pc3RhYmxlUm9vdCwgZmxhZ3MsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5oZWFkLmFwcGVuZENoaWxkKGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heWJlTm9kZXMgPSBnZXRIeWRyYXRhYmxlSG9pc3RhYmxlQ2FjaGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLmdldChmbGFncyArIChjdXJyZW50LmNvbnRlbnQgfHwgXCJcIikpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWF5YmVOb2Rlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGhvaXN0YWJsZVJvb3QgPSBtYXliZU5vZGVzW2ldKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIiArIGN1cnJlbnQuY29udGVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQubmFtZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5nZXRBdHRyaWJ1dGUoXCJwcm9wZXJ0eVwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50LnByb3BlcnR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5wcm9wZXJ0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5nZXRBdHRyaWJ1dGUoXCJodHRwLWVxdWl2XCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuaHR0cEVxdWl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5odHRwRXF1aXYpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuZ2V0QXR0cmlidXRlKFwiY2hhcnNldFwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50LmNoYXJTZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LmNoYXJTZXQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVOb2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSByb290LmNyZWF0ZUVsZW1lbnQoZmxhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaG9pc3RhYmxlUm9vdCwgZmxhZ3MsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5oZWFkLmFwcGVuZENoaWxkKGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0Tm9kZXNGb3JUeXBlIGVuY291bnRlcmVkIGEgdHlwZSBpdCBkaWQgbm90IGV4cGVjdDogXCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LidcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdFtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGZpbmlzaGVkV29yaztcbiAgICAgICAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShob2lzdGFibGVSb290KTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBob2lzdGFibGVSb290O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IGZsYWdzO1xuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgbW91bnRIb2lzdGFibGUoXG4gICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay50eXBlLFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IGFjcXVpcmVSZXNvdXJjZShcbiAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgICAgICAgICBmbGFncyxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgcm9vdCAhPT0gZmxhZ3NcbiAgICAgICAgICAgICAgICA/IChudWxsID09PSByb290XG4gICAgICAgICAgICAgICAgICAgID8gbnVsbCAhPT0gY3VycmVudC5zdGF0ZU5vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50LnN0YXRlTm9kZSksXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGN1cnJlbnQpKVxuICAgICAgICAgICAgICAgICAgICA6IHJvb3QuY291bnQtLSxcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IGZsYWdzXG4gICAgICAgICAgICAgICAgICAgID8gbW91bnRIb2lzdGFibGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IGFjcXVpcmVSZXNvdXJjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA6IG51bGwgPT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAgICAgICBjb21taXRIb3N0VXBkYXRlKFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybikpO1xuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgY29tbWl0SG9zdFVwZGF0ZShcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybikpO1xuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAzMikge1xuICAgICAgICAgICAgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaW5pc2hlZFdvcmssIHJlc2V0VGV4dENvbnRlbnQsIHJvb3QpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgbnVsbCAhPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAoKHJvb3QgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyksXG4gICAgICAgICAgICBjb21taXRIb3N0VXBkYXRlKFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiByb290XG4gICAgICAgICAgICApKTtcbiAgICAgICAgICBmbGFncyAmIDEwMjQgJiZcbiAgICAgICAgICAgICgobmVlZHNGb3JtUmVzZXQgPSAhMCksXG4gICAgICAgICAgICBcImZvcm1cIiAhPT0gZmluaXNoZWRXb3JrLnR5cGUgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuZXhwZWN0ZWQgaG9zdCBjb21wb25lbnQgdHlwZS4gRXhwZWN0ZWQgYSBmb3JtLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGlmIChmbGFncyAmIDQpIHtcbiAgICAgICAgICAgIGlmIChudWxsID09PSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoaXMgc2hvdWxkIGhhdmUgYSB0ZXh0IG5vZGUgaW5pdGlhbGl6ZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICBjdXJyZW50ID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IGZsYWdzO1xuICAgICAgICAgICAgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0VGV4dFVwZGF0ZSxcbiAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgZmxhZ3NcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgdGFnQ2FjaGVzID0gbnVsbDtcbiAgICAgICAgICBtYXliZU5vZGVzID0gY3VycmVudEhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBnZXRIb2lzdGFibGVSb290KHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gbWF5YmVOb2RlcztcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWRcbiAgICAgICAgICApXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0SHlkcmF0ZWRDb250YWluZXIsXG4gICAgICAgICAgICAgICAgcm9vdC5jb250YWluZXJJbmZvXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBuZWVkc0Zvcm1SZXNldCAmJlxuICAgICAgICAgICAgKChuZWVkc0Zvcm1SZXNldCA9ICExKSwgcmVjdXJzaXZlbHlSZXNldEZvcm1zKGZpbmlzaGVkV29yaykpO1xuICAgICAgICAgIHJvb3QuZWZmZWN0RHVyYXRpb24gKz0gcG9wTmVzdGVkRWZmZWN0RHVyYXRpb25zKGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgZmxhZ3MgPSBjdXJyZW50SG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IGdldEhvaXN0YWJsZVJvb3QoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICApO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IGZsYWdzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIGZsYWdzID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uICs9XG4gICAgICAgICAgICBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMoZmxhZ3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuY2hpbGQuZmxhZ3MgJiA4MTkyICYmXG4gICAgICAgICAgICAobnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpICE9PVxuICAgICAgICAgICAgICAobnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpICYmXG4gICAgICAgICAgICAoZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IG5vdyQxKCkpO1xuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgKChmbGFncyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICBudWxsICE9PSBmbGFncyAmJlxuICAgICAgICAgICAgICAoKGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgZmxhZ3MpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgaG9pc3RhYmxlUm9vdCA9IG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciB3YXNIaWRkZW4gPSBudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgICAgIHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4sXG4gICAgICAgICAgICBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID1cbiAgICAgICAgICAgIHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gfHwgaG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID1cbiAgICAgICAgICAgIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8IHdhc0hpZGRlbjtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgaWYgKGZsYWdzICYgODE5MilcbiAgICAgICAgICAgIGE6IGZvciAoXG4gICAgICAgICAgICAgIHJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLFxuICAgICAgICAgICAgICAgIHJvb3QuX3Zpc2liaWxpdHkgPSBob2lzdGFibGVSb290XG4gICAgICAgICAgICAgICAgICA/IHJvb3QuX3Zpc2liaWxpdHkgJiB+T2Zmc2NyZWVuVmlzaWJsZVxuICAgICAgICAgICAgICAgICAgOiByb290Ll92aXNpYmlsaXR5IHwgT2Zmc2NyZWVuVmlzaWJsZSxcbiAgICAgICAgICAgICAgICBob2lzdGFibGVSb290ICYmXG4gICAgICAgICAgICAgICAgICAobnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAgICAgICAgICAgICB3YXNIaWRkZW4gfHxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuIHx8XG4gICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKSksXG4gICAgICAgICAgICAgICAgY3VycmVudCA9IG51bGwsXG4gICAgICAgICAgICAgICAgcm9vdCA9IGZpbmlzaGVkV29yaztcbiAgICAgICAgICAgICAgO1xuXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKDUgPT09IHJvb3QudGFnIHx8IDI2ID09PSByb290LnRhZykge1xuICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICB3YXNIaWRkZW4gPSBjdXJyZW50ID0gcm9vdDtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIChtYXliZU5vZGVzID0gd2FzSGlkZGVuLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBydW5XaXRoRmliZXJJbkRFVih3YXNIaWRkZW4sIGhpZGVJbnN0YW5jZSwgbWF5YmVOb2RlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaGlkZUluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbi5zdGF0ZU5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuLm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKHdhc0hpZGRlbiwgd2FzSGlkZGVuLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmICg2ID09PSByb290LnRhZykge1xuICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICB3YXNIaWRkZW4gPSByb290O1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgKGkgPSB3YXNIaWRkZW4uc3RhdGVOb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJ1bldpdGhGaWJlckluREVWKHdhc0hpZGRlbiwgaGlkZVRleHRJbnN0YW5jZSwgaSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaGlkZVRleHRJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbi5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcih3YXNIaWRkZW4sIHdhc0hpZGRlbi5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgKCgyMiAhPT0gcm9vdC50YWcgJiYgMjMgIT09IHJvb3QudGFnKSB8fFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gcm9vdC5tZW1vaXplZFN0YXRlIHx8XG4gICAgICAgICAgICAgICAgICByb290ID09PSBmaW5pc2hlZFdvcmspICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcm9vdC5jaGlsZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByb290LmNoaWxkLnJldHVybiA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgcm9vdCA9IHJvb3QuY2hpbGQ7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJvb3QgPT09IGZpbmlzaGVkV29yaykgYnJlYWsgYTtcbiAgICAgICAgICAgICAgZm9yICg7IG51bGwgPT09IHJvb3Quc2libGluZzsgKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IHJvb3QucmV0dXJuIHx8IHJvb3QucmV0dXJuID09PSBmaW5pc2hlZFdvcmspXG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgPT09IHJvb3QgJiYgKGN1cnJlbnQgPSBudWxsKTtcbiAgICAgICAgICAgICAgICByb290ID0gcm9vdC5yZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY3VycmVudCA9PT0gcm9vdCAmJiAoY3VycmVudCA9IG51bGwpO1xuICAgICAgICAgICAgICByb290LnNpYmxpbmcucmV0dXJuID0gcm9vdC5yZXR1cm47XG4gICAgICAgICAgICAgIHJvb3QgPSByb290LnNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICgoY3VycmVudCA9IGZsYWdzLnJldHJ5UXVldWUpLFxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgKChmbGFncy5yZXRyeVF1ZXVlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIGN1cnJlbnQpKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgICgoZmxhZ3MgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAgICAgKChmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsKSxcbiAgICAgICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIGZsYWdzKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBpZiAoZmxhZ3MgJiAyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZmluaXNoZWRXb3JrLCBjb21taXRQbGFjZW1lbnQsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZmluaXNoZWRXb3JrLmZsYWdzICY9IC0zO1xuICAgICAgfVxuICAgICAgZmxhZ3MgJiA0MDk2ICYmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJj0gLTQwOTcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVJlc2V0Rm9ybXMocGFyZW50RmliZXIpIHtcbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI0KVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApIHtcbiAgICAgICAgICB2YXIgZmliZXIgPSBwYXJlbnRGaWJlcjtcbiAgICAgICAgICByZWN1cnNpdmVseVJlc2V0Rm9ybXMoZmliZXIpO1xuICAgICAgICAgIDUgPT09IGZpYmVyLnRhZyAmJiBmaWJlci5mbGFncyAmIDEwMjQgJiYgZmliZXIuc3RhdGVOb2RlLnJlc2V0KCk7XG4gICAgICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKHJvb3QsIHBhcmVudEZpYmVyKSB7XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgODc3MilcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICAgIGNvbW1pdExheW91dEVmZmVjdE9uRmliZXIocm9vdCwgcGFyZW50RmliZXIuYWx0ZXJuYXRlLCBwYXJlbnRGaWJlciksXG4gICAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspIHtcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgY29tbWl0SG9va0xheW91dFVubW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgIExheW91dFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHNhZmVseURldGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgJiZcbiAgICAgICAgICAgIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgcmVsZWFzZVNpbmdsZXRvbkluc3RhbmNlLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG51bGwgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMocGFyZW50RmliZXIpIHtcbiAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgZGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhwYXJlbnRGaWJlciksXG4gICAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIGN1cnJlbnQsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgKSB7XG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb21taXRIb29rTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmssIExheW91dCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY3VycmVudCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY3VycmVudC5jb21wb25lbnREaWRNb3VudCAmJlxuICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgY2FsbENvbXBvbmVudERpZE1vdW50SW5ERVYsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgY3VycmVudFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjdXJyZW50ID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdEhpZGRlbkNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiZcbiAgICAgICAgICAgIGZsYWdzICYgNjQgJiZcbiAgICAgICAgICAgIGNvbW1pdENsYXNzQ2FsbGJhY2tzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgY29tbWl0SG9zdFNpbmdsZXRvbkFjcXVpc2l0aW9uKGZpbmlzaGVkV29yayk7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7XG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCAmJlxuICAgICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICBjb21taXRIb3N0TW91bnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBpZiAoaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJiBmbGFncyAmIDQpIHtcbiAgICAgICAgICAgIGZsYWdzID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMuZWZmZWN0RHVyYXRpb24gKz1cbiAgICAgICAgICAgICAgYnViYmxlTmVzdGVkRWZmZWN0RHVyYXRpb25zKGZsYWdzKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjb21taXRQcm9maWxlcixcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICBjb21taXRTdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cy5lZmZlY3REdXJhdGlvblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7XG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgbnVsbCA9PT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICkge1xuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyA9XG4gICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiYgMCAhPT0gKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDg3NzIpO1xuICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICByZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIHBhcmVudEZpYmVyLmFsdGVybmF0ZSxcbiAgICAgICAgICBwYXJlbnRGaWJlcixcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICksXG4gICAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgcHJldmlvdXNDYWNoZSA9IG51bGw7XG4gICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgIChwcmV2aW91c0NhY2hlID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKTtcbiAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgIChjdXJyZW50ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpO1xuICAgICAgY3VycmVudCAhPT0gcHJldmlvdXNDYWNoZSAmJlxuICAgICAgICAobnVsbCAhPSBjdXJyZW50ICYmIHJldGFpbkNhY2hlKGN1cnJlbnQpLFxuICAgICAgICBudWxsICE9IHByZXZpb3VzQ2FjaGUgJiYgcmVsZWFzZUNhY2hlKHByZXZpb3VzQ2FjaGUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0Q2FjaGVQYXNzaXZlTW91bnRFZmZlY3QoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gICAgICBjdXJyZW50ID0gbnVsbDtcbiAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5hbHRlcm5hdGUgJiZcbiAgICAgICAgKGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGUpO1xuICAgICAgZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUuY2FjaGU7XG4gICAgICBmaW5pc2hlZFdvcmsgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgKHJldGFpbkNhY2hlKGZpbmlzaGVkV29yayksIG51bGwgIT0gY3VycmVudCAmJiByZWxlYXNlQ2FjaGUoY3VycmVudCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgIHJvb3QsXG4gICAgICBwYXJlbnRGaWJlcixcbiAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICApIHtcbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI1NilcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICAgIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIoXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgcGFyZW50RmliZXIsXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICkge1xuICAgICAgdmFyIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrLCBQYXNzaXZlIHwgSGFzRWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB2YXIgcHJldkVmZmVjdER1cmF0aW9uID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICAoKGNvbW1pdHRlZExhbmVzID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAgIChjb21taXR0ZWRMYW5lcyA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSksXG4gICAgICAgICAgICAoZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUuY2FjaGUpLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrICE9PSBjb21taXR0ZWRMYW5lcyAmJlxuICAgICAgICAgICAgICAocmV0YWluQ2FjaGUoZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICAgICAgbnVsbCAhPSBjb21taXR0ZWRMYW5lcyAmJiByZWxlYXNlQ2FjaGUoY29tbWl0dGVkTGFuZXMpKSk7XG4gICAgICAgICAgZmluaXNoZWRSb290LnBhc3NpdmVFZmZlY3REdXJhdGlvbiArPVxuICAgICAgICAgICAgcG9wTmVzdGVkRWZmZWN0RHVyYXRpb25zKHByZXZFZmZlY3REdXJhdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgaWYgKGZsYWdzICYgMjA0OCkge1xuICAgICAgICAgICAgZmxhZ3MgPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QucGFzc2l2ZUVmZmVjdER1cmF0aW9uICs9XG4gICAgICAgICAgICAgIGJ1YmJsZU5lc3RlZEVmZmVjdER1cmF0aW9ucyhmbGFncyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0UHJvZmlsZXJQb3N0Q29tbWl0SW1wbCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgICAgICAgICBjb21taXRTdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LnBhc3NpdmVFZmZlY3REdXJhdGlvblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHByZXZFZmZlY3REdXJhdGlvbiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgdmFyIF9jdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZTtcbiAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgPyBwcmV2RWZmZWN0RHVyYXRpb24uX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZFxuICAgICAgICAgICAgICA/IHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHByZXZFZmZlY3REdXJhdGlvbi5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkXG4gICAgICAgICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6ICgocHJldkVmZmVjdER1cmF0aW9uLl92aXNpYmlsaXR5IHw9XG4gICAgICAgICAgICAgICAgICBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCksXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgIDAgIT09IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgMTAyNTYpXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICBjb21taXRPZmZzY3JlZW5QYXNzaXZlTW91bnRFZmZlY3RzKF9jdXJyZW50LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICBjb21taXRDYWNoZVBhc3NpdmVNb3VudEVmZmVjdChmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICApIHtcbiAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgPVxuICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgIDAgIT09IChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI1Nik7XG4gICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgIHJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBwYXJlbnRGaWJlcixcbiAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICksXG4gICAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICApIHtcbiAgICAgIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgUGFzc2l2ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICA/IF9pbnN0YW5jZTIuX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZFxuICAgICAgICAgICAgICA/IHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VBdG9taWNQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogKChfaW5zdGFuY2UyLl92aXNpYmlsaXR5IHw9IE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkKSxcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgIGNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5hbHRlcm5hdGUsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7XG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICBjb21taXRDYWNoZVBhc3NpdmVNb3VudEVmZmVjdChmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290JGpzY29tcCQwLFxuICAgICAgcGFyZW50RmliZXJcbiAgICApIHtcbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI1NilcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKSB7XG4gICAgICAgICAgdmFyIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdCRqc2NvbXAkMCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayA9IHBhcmVudEZpYmVyLFxuICAgICAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgICAgICBjb21taXRPZmZzY3JlZW5QYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICAgICAgY29tbWl0Q2FjaGVQYXNzaXZlTW91bnRFZmZlY3QoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KHBhcmVudEZpYmVyKSB7XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgc3VzcGVuc2V5Q29tbWl0RmxhZylcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICAgIGFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXRPbkZpYmVyKHBhcmVudEZpYmVyKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihmaWJlcikge1xuICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgICAgIGZpYmVyLmZsYWdzICYgc3VzcGVuc2V5Q29tbWl0RmxhZyAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gZmliZXIubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgc3VzcGVuZFJlc291cmNlKFxuICAgICAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgICAgICAgZmliZXIubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHZhciBwcmV2aW91c0hvaXN0YWJsZVJvb3QgPSBjdXJyZW50SG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IGdldEhvaXN0YWJsZVJvb3QoXG4gICAgICAgICAgICBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IHByZXZpb3VzSG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBudWxsID09PSBmaWJlci5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAoKHByZXZpb3VzSG9pc3RhYmxlUm9vdCA9IGZpYmVyLmFsdGVybmF0ZSksXG4gICAgICAgICAgICBudWxsICE9PSBwcmV2aW91c0hvaXN0YWJsZVJvb3QgJiZcbiAgICAgICAgICAgIG51bGwgIT09IHByZXZpb3VzSG9pc3RhYmxlUm9vdC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICAgID8gKChwcmV2aW91c0hvaXN0YWJsZVJvb3QgPSBzdXNwZW5zZXlDb21taXRGbGFnKSxcbiAgICAgICAgICAgICAgICAoc3VzcGVuc2V5Q29tbWl0RmxhZyA9IDE2Nzc3MjE2KSxcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpLFxuICAgICAgICAgICAgICAgIChzdXNwZW5zZXlDb21taXRGbGFnID0gcHJldmlvdXNIb2lzdGFibGVSb290KSlcbiAgICAgICAgICAgICAgOiByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcikge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBwYXJlbnRGaWJlci5hbHRlcm5hdGU7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IHByZXZpb3VzRmliZXIgJiZcbiAgICAgICAgKChwYXJlbnRGaWJlciA9IHByZXZpb3VzRmliZXIuY2hpbGQpLCBudWxsICE9PSBwYXJlbnRGaWJlcilcbiAgICAgICkge1xuICAgICAgICBwcmV2aW91c0ZpYmVyLmNoaWxkID0gbnVsbDtcbiAgICAgICAgZG9cbiAgICAgICAgICAocHJldmlvdXNGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpLFxuICAgICAgICAgICAgKHBhcmVudEZpYmVyLnNpYmxpbmcgPSBudWxsKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlciA9IHByZXZpb3VzRmliZXIpO1xuICAgICAgICB3aGlsZSAobnVsbCAhPT0gcGFyZW50RmliZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gICAgICB2YXIgZGVsZXRpb25zID0gcGFyZW50RmliZXIuZGVsZXRpb25zO1xuICAgICAgaWYgKDAgIT09IChwYXJlbnRGaWJlci5mbGFncyAmIDE2KSkge1xuICAgICAgICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGRlbGV0aW9uc1tpXTtcbiAgICAgICAgICAgIG5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9iZWdpbihcbiAgICAgICAgICAgICAgY2hpbGRUb0RlbGV0ZSxcbiAgICAgICAgICAgICAgcGFyZW50RmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcik7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgMTAyNTYpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIocGFyZW50RmliZXIpLFxuICAgICAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVVbm1vdW50T25GaWJlcihmaW5pc2hlZFdvcmspIHtcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZpbmlzaGVkV29yay5mbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlVW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgICAgUGFzc2l2ZSB8IEhhc0VmZmVjdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHZhciBwcmV2RWZmZWN0RHVyYXRpb24gPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uICs9XG4gICAgICAgICAgICBwb3BOZXN0ZWRFZmZlY3REdXJhdGlvbnMocHJldkVmZmVjdER1cmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBwcmV2RWZmZWN0RHVyYXRpb24gPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uICs9XG4gICAgICAgICAgICBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMocHJldkVmZmVjdER1cmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBwcmV2RWZmZWN0RHVyYXRpb24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgcHJldkVmZmVjdER1cmF0aW9uLl92aXNpYmlsaXR5ICYgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQgJiZcbiAgICAgICAgICAobnVsbCA9PT0gZmluaXNoZWRXb3JrLnJldHVybiB8fCAxMyAhPT0gZmluaXNoZWRXb3JrLnJldHVybi50YWcpXG4gICAgICAgICAgICA/ICgocHJldkVmZmVjdER1cmF0aW9uLl92aXNpYmlsaXR5ICY9XG4gICAgICAgICAgICAgICAgfk9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkKSxcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspKVxuICAgICAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gICAgICB2YXIgZGVsZXRpb25zID0gcGFyZW50RmliZXIuZGVsZXRpb25zO1xuICAgICAgaWYgKDAgIT09IChwYXJlbnRGaWJlci5mbGFncyAmIDE2KSkge1xuICAgICAgICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGRlbGV0aW9uc1tpXTtcbiAgICAgICAgICAgIG5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9iZWdpbihcbiAgICAgICAgICAgICAgY2hpbGRUb0RlbGV0ZSxcbiAgICAgICAgICAgICAgcGFyZW50RmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcik7XG4gICAgICB9XG4gICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgIGRpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0KHBhcmVudEZpYmVyKSxcbiAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzY29ubmVjdFBhc3NpdmVFZmZlY3QoZmluaXNoZWRXb3JrKSB7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlVW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgUGFzc2l2ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgaW5zdGFuY2UuX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCAmJlxuICAgICAgICAgICAgKChpbnN0YW5jZS5fdmlzaWJpbGl0eSAmPSB+T2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQpLFxuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4oXG4gICAgICBkZWxldGVkU3VidHJlZVJvb3QsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgKSB7XG4gICAgICBmb3IgKDsgbnVsbCAhPT0gbmV4dEVmZmVjdDsgKSB7XG4gICAgICAgIHZhciBmaWJlciA9IG5leHRFZmZlY3QsXG4gICAgICAgICAgY3VycmVudCA9IGZpYmVyO1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnQudGFnKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlVW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgIFBhc3NpdmVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgICAgICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLFxuICAgICAgICAgICAgICBudWxsICE9IGN1cnJlbnQgJiYgcmV0YWluQ2FjaGUoY3VycmVudCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHJlbGVhc2VDYWNoZShjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGUpO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBmaWJlci5jaGlsZDtcbiAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIChjdXJyZW50LnJldHVybiA9IGZpYmVyKSwgKG5leHRFZmZlY3QgPSBjdXJyZW50KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGE6IGZvciAoZmliZXIgPSBkZWxldGVkU3VidHJlZVJvb3Q7IG51bGwgIT09IG5leHRFZmZlY3Q7ICkge1xuICAgICAgICAgICAgY3VycmVudCA9IG5leHRFZmZlY3Q7XG4gICAgICAgICAgICB2YXIgc2libGluZyA9IGN1cnJlbnQuc2libGluZyxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBjdXJyZW50LnJldHVybjtcbiAgICAgICAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGN1cnJlbnQpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IGZpYmVyKSB7XG4gICAgICAgICAgICAgIG5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG51bGwgIT09IHNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgc2libGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgICAgbmV4dEVmZmVjdCA9IHNpYmxpbmc7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0RWZmZWN0ID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBvbkNvbW1pdFJvb3QoKSB7XG4gICAgICBjb21taXRIb29rcy5mb3JFYWNoKGZ1bmN0aW9uIChjb21taXRIb29rKSB7XG4gICAgICAgIHJldHVybiBjb21taXRIb29rKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNDb25jdXJyZW50QWN0RW52aXJvbm1lbnQoKSB7XG4gICAgICB2YXIgaXNSZWFjdEFjdEVudmlyb25tZW50R2xvYmFsID1cbiAgICAgICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIElTX1JFQUNUX0FDVF9FTlZJUk9OTUVOVFxuICAgICAgICAgID8gSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UXG4gICAgICAgICAgOiB2b2lkIDA7XG4gICAgICBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWwgfHxcbiAgICAgICAgbnVsbCA9PT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgfHxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlRoZSBjdXJyZW50IHRlc3RpbmcgZW52aXJvbm1lbnQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBhY3QoLi4uKVwiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gaXNSZWFjdEFjdEVudmlyb25tZW50R2xvYmFsO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcikge1xuICAgICAgaWYgKFxuICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQgJiZcbiAgICAgICAgMCAhPT0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgLXdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzO1xuICAgICAgdmFyIHRyYW5zaXRpb24gPSBSZWFjdFNoYXJlZEludGVybmFscy5UO1xuICAgICAgcmV0dXJuIG51bGwgIT09IHRyYW5zaXRpb25cbiAgICAgICAgPyAodHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyB8fCAodHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKSksXG4gICAgICAgICAgdHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5hZGQoZmliZXIpLFxuICAgICAgICAgIChmaWJlciA9IGN1cnJlbnRFbnRhbmdsZWRMYW5lKSxcbiAgICAgICAgICAwICE9PSBmaWJlciA/IGZpYmVyIDogcmVxdWVzdFRyYW5zaXRpb25MYW5lKCkpXG4gICAgICAgIDogcmVzb2x2ZVVwZGF0ZVByaW9yaXR5KCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3REZWZlcnJlZExhbmUoKSB7XG4gICAgICAwID09PSB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUgPVxuICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIDUzNjg3MDkxMikgfHwgaXNIeWRyYXRpbmdcbiAgICAgICAgICAgID8gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKVxuICAgICAgICAgICAgOiA1MzY4NzA5MTIpO1xuICAgICAgdmFyIHN1c3BlbnNlSGFuZGxlciA9IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICBudWxsICE9PSBzdXNwZW5zZUhhbmRsZXIgJiYgKHN1c3BlbnNlSGFuZGxlci5mbGFncyB8PSAzMik7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSkge1xuICAgICAgaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJ1c2VJbnNlcnRpb25FZmZlY3QgbXVzdCBub3Qgc2NoZWR1bGUgdXBkYXRlcy5cIik7XG4gICAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgJiYgKGRpZFNjaGVkdWxlVXBkYXRlRHVyaW5nUGFzc2l2ZUVmZmVjdHMgPSAhMCk7XG4gICAgICBpZiAoXG4gICAgICAgIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiZcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uRGF0YSB8fFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uQWN0aW9uKSkgfHxcbiAgICAgICAgbnVsbCAhPT0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0XG4gICAgICApXG4gICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIDApLFxuICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAhMVxuICAgICAgICAgICk7XG4gICAgICBtYXJrUm9vdFVwZGF0ZWQkMShyb290LCBsYW5lKTtcbiAgICAgIGlmIChcbiAgICAgICAgMCAhPT0gKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAmJlxuICAgICAgICByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3RcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNSZW5kZXJpbmcpXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICByb290ID1cbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgJiYgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykpIHx8XG4gICAgICAgICAgICAgICAgXCJVbmtub3duXCI7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5oYXMocm9vdCkgfHxcbiAgICAgICAgICAgICAgICAoZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmFkZChyb290KSxcbiAgICAgICAgICAgICAgICAoZmliZXIgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIlVua25vd25cIiksXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHVwZGF0ZSBhIGNvbXBvbmVudCAoYCVzYCkgd2hpbGUgcmVuZGVyaW5nIGEgZGlmZmVyZW50IGNvbXBvbmVudCAoYCVzYCkuIFRvIGxvY2F0ZSB0aGUgYmFkIHNldFN0YXRlKCkgY2FsbCBpbnNpZGUgYCVzYCwgZm9sbG93IHRoZSBzdGFjayB0cmFjZSBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9zZXRzdGF0ZS1pbi1yZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgIHJvb3RcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyIHx8XG4gICAgICAgICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkNhbm5vdCB1cGRhdGUgZHVyaW5nIGFuIGV4aXN0aW5nIHN0YXRlIHRyYW5zaXRpb24gKHN1Y2ggYXMgd2l0aGluIGByZW5kZXJgKS4gUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuXCJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9ICEwKSk7XG4gICAgICAgICAgfVxuICAgICAgfSBlbHNlXG4gICAgICAgIGlzRGV2VG9vbHNQcmVzZW50ICYmIGFkZEZpYmVyVG9MYW5lc01hcChyb290LCBmaWJlciwgbGFuZSksXG4gICAgICAgICAgd2FybklmVXBkYXRlc05vdFdyYXBwZWRXaXRoQWN0REVWKGZpYmVyKSxcbiAgICAgICAgICByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiZcbiAgICAgICAgICAgICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpID09PSBOb0NvbnRleHQgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzIHw9IGxhbmUpLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSAmJlxuICAgICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVyZm9ybVdvcmtPblJvb3Qocm9vdCwgbGFuZXMsIGZvcmNlU3luYykge1xuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dClcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIik7XG4gICAgICB2YXIgc2hvdWxkVGltZVNsaWNlID1cbiAgICAgICAgICAoIWZvcmNlU3luYyAmJlxuICAgICAgICAgICAgMCA9PT0gKGxhbmVzICYgMTI0KSAmJlxuICAgICAgICAgICAgMCA9PT0gKGxhbmVzICYgcm9vdC5leHBpcmVkTGFuZXMpKSB8fFxuICAgICAgICAgIGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcocm9vdCwgbGFuZXMpLFxuICAgICAgICBleGl0U3RhdHVzID0gc2hvdWxkVGltZVNsaWNlXG4gICAgICAgICAgPyByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcylcbiAgICAgICAgICA6IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzLCAhMCksXG4gICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSBzaG91bGRUaW1lU2xpY2U7XG4gICAgICBkbyB7XG4gICAgICAgIGlmIChleGl0U3RhdHVzID09PSBSb290SW5Qcm9ncmVzcykge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nICYmXG4gICAgICAgICAgICAhc2hvdWxkVGltZVNsaWNlICYmXG4gICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgMCwgITEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcmNlU3luYyA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCAmJlxuICAgICAgICAgICAgIWlzUmVuZGVyQ29uc2lzdGVudFdpdGhFeHRlcm5hbFN0b3Jlcyhmb3JjZVN5bmMpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMsICExKTtcbiAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSAhMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSBsYW5lcztcbiAgICAgICAgICAgIGlmIChyb290LmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzICYgcmVuZGVyV2FzQ29uY3VycmVudClcbiAgICAgICAgICAgICAgdmFyIGVycm9yUmV0cnlMYW5lcyA9IDA7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIChlcnJvclJldHJ5TGFuZXMgPSByb290LnBlbmRpbmdMYW5lcyAmIC01MzY4NzA5MTMpLFxuICAgICAgICAgICAgICAgIChlcnJvclJldHJ5TGFuZXMgPVxuICAgICAgICAgICAgICAgICAgMCAhPT0gZXJyb3JSZXRyeUxhbmVzXG4gICAgICAgICAgICAgICAgICAgID8gZXJyb3JSZXRyeUxhbmVzXG4gICAgICAgICAgICAgICAgICAgIDogZXJyb3JSZXRyeUxhbmVzICYgNTM2ODcwOTEyXG4gICAgICAgICAgICAgICAgICAgICAgPyA1MzY4NzA5MTJcbiAgICAgICAgICAgICAgICAgICAgICA6IDApO1xuICAgICAgICAgICAgaWYgKDAgIT09IGVycm9yUmV0cnlMYW5lcykge1xuICAgICAgICAgICAgICBsYW5lcyA9IGVycm9yUmV0cnlMYW5lcztcbiAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSByb290O1xuICAgICAgICAgICAgICAgIHZhciBlcnJvclJldHJ5TGFuZXMkanNjb21wJDAgPSBlcnJvclJldHJ5TGFuZXM7XG4gICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycztcbiAgICAgICAgICAgICAgICB2YXIgd2FzUm9vdERlaHlkcmF0ZWQgPVxuICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1cy5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkO1xuICAgICAgICAgICAgICAgIHdhc1Jvb3REZWh5ZHJhdGVkICYmXG4gICAgICAgICAgICAgICAgICAocHJlcGFyZUZyZXNoU3RhY2soXG4gICAgICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yUmV0cnlMYW5lcyRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgKS5mbGFncyB8PSAyNTYpO1xuICAgICAgICAgICAgICAgIGVycm9yUmV0cnlMYW5lcyRqc2NvbXAkMCA9IHJlbmRlclJvb3RTeW5jKFxuICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIGVycm9yUmV0cnlMYW5lcyRqc2NvbXAkMCxcbiAgICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwICE9PSBSb290RXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgIXdhc1Jvb3REZWh5ZHJhdGVkXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1cy5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyB8PVxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzIHw9XG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBleGl0U3RhdHVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnM7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IGVycm9yUmV0cnlMYW5lcztcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGV4aXRTdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgKG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBleGl0U3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICAgIDogd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMucHVzaC5hcHBseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRTdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleGl0U3RhdHVzID0gZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSAhMTtcbiAgICAgICAgICAgICAgaWYgKGV4aXRTdGF0dXMgIT09IFJvb3RFcnJvcmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICAgICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIDApO1xuICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgbGFuZXMsIDAsICEwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICBzaG91bGRUaW1lU2xpY2UgPSByb290O1xuICAgICAgICAgICAgc3dpdGNoIChleGl0U3RhdHVzKSB7XG4gICAgICAgICAgICAgIGNhc2UgUm9vdEluUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgIGNhc2UgUm9vdEZhdGFsRXJyb3JlZDpcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlJvb3QgZGlkIG5vdCBjb21wbGV0ZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIik7XG4gICAgICAgICAgICAgIGNhc2UgUm9vdFN1c3BlbmRlZFdpdGhEZWxheTpcbiAgICAgICAgICAgICAgICBpZiAoKGxhbmVzICYgNDE5NDA0OCkgIT09IGxhbmVzKSBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBSb290U3VzcGVuZGVkQXRUaGVTaGVsbDpcbiAgICAgICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgICAhd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIFJvb3RFcnJvcmVkOlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBSb290U3VzcGVuZGVkOlxuICAgICAgICAgICAgICBjYXNlIFJvb3RDb21wbGV0ZWQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmtub3duIHJvb3QgZXhpdCBzdGF0dXMuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG51bGwgIT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlKVxuICAgICAgICAgICAgICBjb21taXRSb290KFxuICAgICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSxcbiAgICAgICAgICAgICAgICBmb3JjZVN5bmMsXG4gICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRJbmNsdWRlUmVjdXJzaXZlUmVuZGVyVXBkYXRlLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAobGFuZXMgJiA2MjkxNDU2MCkgPT09IGxhbmVzICYmXG4gICAgICAgICAgICAgICAgKChyZW5kZXJXYXNDb25jdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgK1xuICAgICAgICAgICAgICAgICAgRkFMTEJBQ0tfVEhST1RUTEVfTVMgLVxuICAgICAgICAgICAgICAgICAgbm93JDEoKSksXG4gICAgICAgICAgICAgICAgMTAgPCByZW5kZXJXYXNDb25jdXJyZW50KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgICAhd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoMCAhPT0gZ2V0TmV4dExhbmVzKHNob3VsZFRpbWVTbGljZSwgMCwgITApKSBicmVhayBhO1xuICAgICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZS50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KFxuICAgICAgICAgICAgICAgICAgY29tbWl0Um9vdFdoZW5SZWFkeS5iaW5kKFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzaG91bGRUaW1lU2xpY2UsXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlU3luYyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUsXG4gICAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzLFxuICAgICAgICAgICAgICAgICAgICBleGl0U3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICBUSFJPVFRMRURfQ09NTUlULFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJTdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbW1pdFJvb3RXaGVuUmVhZHkoXG4gICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLFxuICAgICAgICAgICAgICAgIGZvcmNlU3luYyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUsXG4gICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyxcbiAgICAgICAgICAgICAgICBleGl0U3RhdHVzLFxuICAgICAgICAgICAgICAgIElNTUVESUFURV9DT01NSVQsXG4gICAgICAgICAgICAgICAgcmVuZGVyU3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9IHdoaWxlICgxKTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0Um9vdFdoZW5SZWFkeShcbiAgICAgIHJvb3QsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICByZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgIHRyYW5zaXRpb25zLFxuICAgICAgZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlLFxuICAgICAgbGFuZXMsXG4gICAgICBzcGF3bmVkTGFuZSxcbiAgICAgIHVwZGF0ZWRMYW5lcyxcbiAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXMsXG4gICAgICBkaWRTa2lwU3VzcGVuZGVkU2libGluZ3MsXG4gICAgICBleGl0U3RhdHVzLFxuICAgICAgc3VzcGVuZGVkQ29tbWl0UmVhc29uLFxuICAgICAgY29tcGxldGVkUmVuZGVyU3RhcnRUaW1lLFxuICAgICAgY29tcGxldGVkUmVuZGVyRW5kVGltZVxuICAgICkge1xuICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICAgICAgc3VzcGVuZGVkQ29tbWl0UmVhc29uID0gZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncztcbiAgICAgIGlmIChcbiAgICAgICAgc3VzcGVuZGVkQ29tbWl0UmVhc29uICYgODE5MiB8fFxuICAgICAgICAxNjc4NTQwOCA9PT0gKHN1c3BlbmRlZENvbW1pdFJlYXNvbiAmIDE2Nzg1NDA4KVxuICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKChzdXNwZW5kZWRTdGF0ZSA9IHsgc3R5bGVzaGVldHM6IG51bGwsIGNvdW50OiAwLCB1bnN1c3BlbmQ6IG5vb3AgfSksXG4gICAgICAgICAgYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdE9uRmliZXIoZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICAoc3VzcGVuZGVkQ29tbWl0UmVhc29uID0gd2FpdEZvckNvbW1pdFRvQmVSZWFkeSgpKSxcbiAgICAgICAgICBudWxsICE9PSBzdXNwZW5kZWRDb21taXRSZWFzb24pXG4gICAgICAgICkge1xuICAgICAgICAgIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IHN1c3BlbmRlZENvbW1pdFJlYXNvbihcbiAgICAgICAgICAgIGNvbW1pdFJvb3QuYmluZChcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgICAgIHRyYW5zaXRpb25zLFxuICAgICAgICAgICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICAgICAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgICAgICAgICB1cGRhdGVkTGFuZXMsXG4gICAgICAgICAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXMsXG4gICAgICAgICAgICAgIGV4aXRTdGF0dXMsXG4gICAgICAgICAgICAgIFNVU1BFTkRFRF9DT01NSVQsXG4gICAgICAgICAgICAgIGNvbXBsZXRlZFJlbmRlclN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgY29tcGxldGVkUmVuZGVyRW5kVGltZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICBzcGF3bmVkTGFuZSxcbiAgICAgICAgICAgICFkaWRTa2lwU3VzcGVuZGVkU2libGluZ3NcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgY29tbWl0Um9vdChcbiAgICAgICAgcm9vdCxcbiAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICBsYW5lcyxcbiAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgIHRyYW5zaXRpb25zLFxuICAgICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgICB1cGRhdGVkTGFuZXMsXG4gICAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzUmVuZGVyQ29uc2lzdGVudFdpdGhFeHRlcm5hbFN0b3JlcyhmaW5pc2hlZFdvcmspIHtcbiAgICAgIGZvciAodmFyIG5vZGUgPSBmaW5pc2hlZFdvcms7IDsgKSB7XG4gICAgICAgIHZhciB0YWcgPSBub2RlLnRhZztcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgwID09PSB0YWcgfHwgMTEgPT09IHRhZyB8fCAxNSA9PT0gdGFnKSAmJlxuICAgICAgICAgIG5vZGUuZmxhZ3MgJiAxNjM4NCAmJlxuICAgICAgICAgICgodGFnID0gbm9kZS51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgbnVsbCAhPT0gdGFnICYmICgodGFnID0gdGFnLnN0b3JlcyksIG51bGwgIT09IHRhZykpXG4gICAgICAgIClcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoZWNrID0gdGFnW2ldLFxuICAgICAgICAgICAgICBnZXRTbmFwc2hvdCA9IGNoZWNrLmdldFNuYXBzaG90O1xuICAgICAgICAgICAgY2hlY2sgPSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmICghb2JqZWN0SXMoZ2V0U25hcHNob3QoKSwgY2hlY2spKSByZXR1cm4gITE7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB0YWcgPSBub2RlLmNoaWxkO1xuICAgICAgICBpZiAobm9kZS5zdWJ0cmVlRmxhZ3MgJiAxNjM4NCAmJiBudWxsICE9PSB0YWcpXG4gICAgICAgICAgKHRhZy5yZXR1cm4gPSBub2RlKSwgKG5vZGUgPSB0YWcpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSBicmVhaztcbiAgICAgICAgICBmb3IgKDsgbnVsbCA9PT0gbm9kZS5zaWJsaW5nOyApIHtcbiAgICAgICAgICAgIGlmIChudWxsID09PSBub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSByZXR1cm4gITA7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgcm9vdCxcbiAgICAgIHN1c3BlbmRlZExhbmVzLFxuICAgICAgc3Bhd25lZExhbmUsXG4gICAgICBkaWRBdHRlbXB0RW50aXJlVHJlZVxuICAgICkge1xuICAgICAgc3VzcGVuZGVkTGFuZXMgJj0gfndvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzO1xuICAgICAgc3VzcGVuZGVkTGFuZXMgJj0gfndvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzO1xuICAgICAgcm9vdC5zdXNwZW5kZWRMYW5lcyB8PSBzdXNwZW5kZWRMYW5lcztcbiAgICAgIHJvb3QucGluZ2VkTGFuZXMgJj0gfnN1c3BlbmRlZExhbmVzO1xuICAgICAgZGlkQXR0ZW1wdEVudGlyZVRyZWUgJiYgKHJvb3Qud2FybUxhbmVzIHw9IHN1c3BlbmRlZExhbmVzKTtcbiAgICAgIGRpZEF0dGVtcHRFbnRpcmVUcmVlID0gcm9vdC5leHBpcmF0aW9uVGltZXM7XG4gICAgICBmb3IgKHZhciBsYW5lcyA9IHN1c3BlbmRlZExhbmVzOyAwIDwgbGFuZXM7ICkge1xuICAgICAgICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKSxcbiAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgZGlkQXR0ZW1wdEVudGlyZVRyZWVbaW5kZXhdID0gLTE7XG4gICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgfVxuICAgICAgMCAhPT0gc3Bhd25lZExhbmUgJiZcbiAgICAgICAgbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIHN1c3BlbmRlZExhbmVzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmx1c2hTeW5jV29yayQxKCkge1xuICAgICAgcmV0dXJuIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dFxuICAgICAgICA/IChmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCgwLCAhMSksICExKVxuICAgICAgICA6ICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKSB7XG4gICAgICBpZiAobnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBOb3RTdXNwZW5kZWQpXG4gICAgICAgICAgdmFyIGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIChpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSxcbiAgICAgICAgICAgIHJlc2V0SG9va3NPblVud2luZChpbnRlcnJ1cHRlZFdvcmspLFxuICAgICAgICAgICAgKHRoZW5hYmxlU3RhdGUgPSBudWxsKSxcbiAgICAgICAgICAgICh0aGVuYWJsZUluZGV4Q291bnRlciA9IDApLFxuICAgICAgICAgICAgKGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgZm9yICg7IG51bGwgIT09IGludGVycnVwdGVkV29yazsgKVxuICAgICAgICAgIHVud2luZEludGVycnVwdGVkV29yayhpbnRlcnJ1cHRlZFdvcmsuYWx0ZXJuYXRlLCBpbnRlcnJ1cHRlZFdvcmspLFxuICAgICAgICAgICAgKGludGVycnVwdGVkV29yayA9IGludGVycnVwdGVkV29yay5yZXR1cm4pO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKSB7XG4gICAgICB2YXIgdGltZW91dEhhbmRsZSA9IHJvb3QudGltZW91dEhhbmRsZTtcbiAgICAgIHRpbWVvdXRIYW5kbGUgIT09IG5vVGltZW91dCAmJlxuICAgICAgICAoKHJvb3QudGltZW91dEhhbmRsZSA9IG5vVGltZW91dCksIGNhbmNlbFRpbWVvdXQodGltZW91dEhhbmRsZSkpO1xuICAgICAgdGltZW91dEhhbmRsZSA9IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdDtcbiAgICAgIG51bGwgIT09IHRpbWVvdXRIYW5kbGUgJiZcbiAgICAgICAgKChyb290LmNhbmNlbFBlbmRpbmdDb21taXQgPSBudWxsKSwgdGltZW91dEhhbmRsZSgpKTtcbiAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gdGltZW91dEhhbmRsZSA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKHJvb3QuY3VycmVudCwgbnVsbCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IGxhbmVzO1xuICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyA9ICExO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmcgPSBjaGVja0lmUm9vdElzUHJlcmVuZGVyaW5nKHJvb3QsIGxhbmVzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9ICExO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJblByb2dyZXNzO1xuICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzID1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzID1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID1cbiAgICAgICAgICAwO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzID1cbiAgICAgICAgbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUgPSAhMTtcbiAgICAgIDAgIT09IChsYW5lcyAmIDgpICYmIChsYW5lcyB8PSBsYW5lcyAmIDMyKTtcbiAgICAgIHZhciBhbGxFbnRhbmdsZWRMYW5lcyA9IHJvb3QuZW50YW5nbGVkTGFuZXM7XG4gICAgICBpZiAoMCAhPT0gYWxsRW50YW5nbGVkTGFuZXMpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgcm9vdCA9IHJvb3QuZW50YW5nbGVtZW50cywgYWxsRW50YW5nbGVkTGFuZXMgJj0gbGFuZXM7XG4gICAgICAgICAgMCA8IGFsbEVudGFuZ2xlZExhbmVzO1xuXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBpbmRleCA9IDMxIC0gY2x6MzIoYWxsRW50YW5nbGVkTGFuZXMpLFxuICAgICAgICAgICAgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICAgICAgbGFuZXMgfD0gcm9vdFtpbmRleF07XG4gICAgICAgICAgYWxsRW50YW5nbGVkTGFuZXMgJj0gfmxhbmU7XG4gICAgICAgIH1cbiAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gbGFuZXM7XG4gICAgICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7XG4gICAgICBsYW5lcyA9IGdldEN1cnJlbnRUaW1lKCk7XG4gICAgICAxZTMgPCBsYW5lcyAtIGxhc3RSZXNldFRpbWUgJiZcbiAgICAgICAgKChSZWFjdFNoYXJlZEludGVybmFscy5yZWNlbnRseUNyZWF0ZWRPd25lclN0YWNrcyA9IDApLFxuICAgICAgICAobGFzdFJlc2V0VGltZSA9IGxhbmVzKSk7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzKCk7XG4gICAgICByZXR1cm4gdGltZW91dEhhbmRsZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gbnVsbDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuICAgICAgaXNSZW5kZXJpbmcgPSAhMTtcbiAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgdGhyb3duVmFsdWUgPT09IFN1c3BlbnNlRXhjZXB0aW9uIHx8XG4gICAgICB0aHJvd25WYWx1ZSA9PT0gU3VzcGVuc2VBY3Rpb25FeGNlcHRpb25cbiAgICAgICAgPyAoKHRocm93blZhbHVlID0gZ2V0U3VzcGVuZGVkVGhlbmFibGUoKSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gU3VzcGVuZGVkT25JbW1lZGlhdGUpKVxuICAgICAgICA6IHRocm93blZhbHVlID09PSBTdXNwZW5zZXlDb21taXRFeGNlcHRpb25cbiAgICAgICAgICA/ICgodGhyb3duVmFsdWUgPSBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IFN1c3BlbmRlZE9uSW5zdGFuY2UpKVxuICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID1cbiAgICAgICAgICAgICAgdGhyb3duVmFsdWUgPT09IFNlbGVjdGl2ZUh5ZHJhdGlvbkV4Y2VwdGlvblxuICAgICAgICAgICAgICAgID8gU3VzcGVuZGVkT25IeWRyYXRpb25cbiAgICAgICAgICAgICAgICA6IG51bGwgIT09IHRocm93blZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiB0aHJvd25WYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0aHJvd25WYWx1ZS50aGVuXG4gICAgICAgICAgICAgICAgICA/IFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZVxuICAgICAgICAgICAgICAgICAgOiBTdXNwZW5kZWRPbkVycm9yKTtcbiAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSB0aHJvd25WYWx1ZTtcbiAgICAgIHZhciBlcnJvcmVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgaWYgKG51bGwgPT09IGVycm9yZWRXb3JrKVxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RGYXRhbEVycm9yZWQpLFxuICAgICAgICAgIGxvZ1VuY2F1Z2h0RXJyb3IoXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodGhyb3duVmFsdWUsIHJvb3QuY3VycmVudClcbiAgICAgICAgICApO1xuICAgICAgZWxzZVxuICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgIChlcnJvcmVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUgJiZcbiAgICAgICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRHVyYXRpb24oZXJyb3JlZFdvcmspLFxuICAgICAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCksXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pXG4gICAgICAgICkge1xuICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25FcnJvcjpcbiAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRFcnJvcmVkICYmXG4gICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudEVycm9yZWQoXG4gICAgICAgICAgICAgICAgZXJyb3JlZFdvcmssXG4gICAgICAgICAgICAgICAgdGhyb3duVmFsdWUsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EYXRhOlxuICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25BY3Rpb246XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkltbWVkaWF0ZTpcbiAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZTpcbiAgICAgICAgICBjYXNlIFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZTpcbiAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRTdXNwZW5kZWQgJiZcbiAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50U3VzcGVuZGVkKFxuICAgICAgICAgICAgICAgIGVycm9yZWRXb3JrLFxuICAgICAgICAgICAgICAgIHRocm93blZhbHVlLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaERpc3BhdGNoZXIoKSB7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgICAgIHJldHVybiBudWxsID09PSBwcmV2RGlzcGF0Y2hlciA/IENvbnRleHRPbmx5RGlzcGF0Y2hlciA6IHByZXZEaXNwYXRjaGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoQXN5bmNEaXNwYXRjaGVyKCkge1xuICAgICAgdmFyIHByZXZBc3luY0Rpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5BO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuQSA9IERlZmF1bHRBc3luY0Rpc3BhdGNoZXI7XG4gICAgICByZXR1cm4gcHJldkFzeW5jRGlzcGF0Y2hlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkV2l0aERlbGF5O1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzIHx8XG4gICAgICAgICgod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA0MTk0MDQ4KSAhPT1cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgICAgIG51bGwgIT09IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQpIHx8XG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZyA9ICEwKTtcbiAgICAgICgwID09PSAod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzICYgMTM0MjE3NzI3KSAmJlxuICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgJiAxMzQyMTc3MjcpKSB8fFxuICAgICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgfHxcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICExXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzLCBzaG91bGRZaWVsZEZvclByZXJlbmRlcmluZykge1xuICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCksXG4gICAgICAgIHByZXZBc3luY0Rpc3BhdGNoZXIgPSBwdXNoQXN5bmNEaXNwYXRjaGVyKCk7XG4gICAgICBpZiAoXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXNcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICB2YXIgbWVtb2l6ZWRVcGRhdGVycyA9IHJvb3QubWVtb2l6ZWRVcGRhdGVycztcbiAgICAgICAgICAwIDwgbWVtb2l6ZWRVcGRhdGVycy5zaXplICYmXG4gICAgICAgICAgICAocmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCkpO1xuICAgICAgICAgIG1vdmVQZW5kaW5nRmliZXJzVG9NZW1vaXplZChyb290LCBsYW5lcyk7XG4gICAgICAgIH1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGw7XG4gICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICAgIH1cbiAgICAgIG1hcmtSZW5kZXJTdGFydGVkKGxhbmVzKTtcbiAgICAgIGxhbmVzID0gITE7XG4gICAgICBtZW1vaXplZFVwZGF0ZXJzID0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgICAgIGE6IGRvXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gIT09IE5vdFN1c3BlbmRlZCAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciB1bml0T2ZXb3JrID0gd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHRocm93blZhbHVlID0gd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZTtcbiAgICAgICAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pIHtcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkh5ZHJhdGlvbjpcbiAgICAgICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKTtcbiAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzID0gUm9vdFN1c3BlbmRlZEF0VGhlU2hlbGw7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkltbWVkaWF0ZTpcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRhdGE6XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25BY3Rpb246XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlOlxuICAgICAgICAgICAgICAgIG51bGwgPT09IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQgJiYgKGxhbmVzID0gITApO1xuICAgICAgICAgICAgICAgIHZhciByZWFzb24gPSB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbjtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKHJvb3QsIHVuaXRPZldvcmssIHRocm93blZhbHVlLCByZWFzb24pO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHNob3VsZFlpZWxkRm9yUHJlcmVuZGVyaW5nICYmXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyA9IFJvb3RJblByb2dyZXNzO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgKHJlYXNvbiA9IHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZCksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSwgcmVhc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd29ya0xvb3BTeW5jKCk7XG4gICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyA9IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gY2F0Y2ggKHRocm93blZhbHVlJDgpIHtcbiAgICAgICAgICBoYW5kbGVUaHJvdyhyb290LCB0aHJvd25WYWx1ZSQ4KTtcbiAgICAgICAgfVxuICAgICAgd2hpbGUgKDEpO1xuICAgICAgbGFuZXMgJiYgcm9vdC5zaGVsbFN1c3BlbmRDb3VudGVyKys7XG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkEgPSBwcmV2QXN5bmNEaXNwYXRjaGVyO1xuICAgICAgbWFya1JlbmRlclN0b3BwZWQoKTtcbiAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzICYmXG4gICAgICAgICgod29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbCksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDApLFxuICAgICAgICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCkpO1xuICAgICAgcmV0dXJuIG1lbW9pemVkVXBkYXRlcnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdvcmtMb29wU3luYygpIHtcbiAgICAgIGZvciAoOyBudWxsICE9PSB3b3JrSW5Qcm9ncmVzczsgKSBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKSB7XG4gICAgICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKSxcbiAgICAgICAgcHJldkFzeW5jRGlzcGF0Y2hlciA9IHB1c2hBc3luY0Rpc3BhdGNoZXIoKTtcbiAgICAgIGlmIChcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICAgIHZhciBtZW1vaXplZFVwZGF0ZXJzID0gcm9vdC5tZW1vaXplZFVwZGF0ZXJzO1xuICAgICAgICAgIDAgPCBtZW1vaXplZFVwZGF0ZXJzLnNpemUgJiZcbiAgICAgICAgICAgIChyZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMuY2xlYXIoKSk7XG4gICAgICAgICAgbW92ZVBlbmRpbmdGaWJlcnNUb01lbW9pemVkKHJvb3QsIGxhbmVzKTtcbiAgICAgICAgfVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zID0gbnVsbDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IG5vdyQxKCkgKyBSRU5ERVJfVElNRU9VVF9NUztcbiAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nID0gY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhcbiAgICAgICAgICByb290LFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICBtYXJrUmVuZGVyU3RhcnRlZChsYW5lcyk7XG4gICAgICBhOiBkb1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICE9PSBOb3RTdXNwZW5kZWQgJiZcbiAgICAgICAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgKVxuICAgICAgICAgICAgYjogc3dpdGNoIChcbiAgICAgICAgICAgICAgKChsYW5lcyA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgKG1lbW9pemVkVXBkYXRlcnMgPSB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlKSxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkVycm9yOlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3AoXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLFxuICAgICAgICAgICAgICAgICAgU3VzcGVuZGVkT25FcnJvclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EYXRhOlxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uQWN0aW9uOlxuICAgICAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlUmVzb2x2ZWQobWVtb2l6ZWRVcGRhdGVycykpIHtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICByZXBsYXlTdXNwZW5kZWRVbml0T2ZXb3JrKGxhbmVzKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsYW5lcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiAhPT0gU3VzcGVuZGVkT25EYXRhICYmXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICE9PSBTdXNwZW5kZWRPbkFjdGlvbikgfHxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8XG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlKTtcbiAgICAgICAgICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMudGhlbihsYW5lcywgbGFuZXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbW1lZGlhdGU6XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWU7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkluc3RhbmNlOlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID1cbiAgICAgICAgICAgICAgICAgIFN1c3BlbmRlZE9uSW5zdGFuY2VBbmRSZWFkeVRvQ29udGludWU7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWU6XG4gICAgICAgICAgICAgICAgaXNUaGVuYWJsZVJlc29sdmVkKG1lbW9pemVkVXBkYXRlcnMpXG4gICAgICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQpLFxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICAgICAgICByZXBsYXlTdXNwZW5kZWRVbml0T2ZXb3JrKGxhbmVzKSlcbiAgICAgICAgICAgICAgICAgIDogKCh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZCksXG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3AoXG4gICAgICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZVxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkluc3RhbmNlQW5kUmVhZHlUb0NvbnRpbnVlOlxuICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgICAgIHZhciBob3N0RmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc291cmNlID8gcHJlbG9hZFJlc291cmNlKHJlc291cmNlKSA6IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc2libGluZyA9IGhvc3RGaWJlci5zaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBzaWJsaW5nKSB3b3JrSW5Qcm9ncmVzcyA9IHNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0dXJuRmliZXIgPSBob3N0RmliZXIucmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlVW5pdE9mV29yayhyZXR1cm5GaWJlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzID0gbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiVW5leHBlY3RlZCB0eXBlIG9mIGZpYmVyIHRyaWdnZXJlZCBhIHN1c3BlbnNleSBjb21taXQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChcbiAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMsXG4gICAgICAgICAgICAgICAgICBTdXNwZW5kZWRPbkluc3RhbmNlQW5kUmVhZHlUb0NvbnRpbnVlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2U6XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChcbiAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMsXG4gICAgICAgICAgICAgICAgICBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSHlkcmF0aW9uOlxuICAgICAgICAgICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkQXRUaGVTaGVsbDtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbmRlZFJlYXNvbi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWVcbiAgICAgICAgICAgID8gd29ya0xvb3BTeW5jKClcbiAgICAgICAgICAgIDogd29ya0xvb3BDb25jdXJyZW50QnlTY2hlZHVsZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBjYXRjaCAodGhyb3duVmFsdWUkOSkge1xuICAgICAgICAgIGhhbmRsZVRocm93KHJvb3QsIHRocm93blZhbHVlJDkpO1xuICAgICAgICB9XG4gICAgICB3aGlsZSAoMSk7XG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkEgPSBwcmV2QXN5bmNEaXNwYXRjaGVyO1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICAgICAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlcllpZWxkZWQgJiZcbiAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlcllpZWxkZWQoKSxcbiAgICAgICAgICBSb290SW5Qcm9ncmVzc1xuICAgICAgICApO1xuICAgICAgbWFya1JlbmRlclN0b3BwZWQoKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDA7XG4gICAgICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgICB9XG4gICAgZnVuY3Rpb24gd29ya0xvb3BDb25jdXJyZW50QnlTY2hlZHVsZXIoKSB7XG4gICAgICBmb3IgKDsgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MgJiYgIXNob3VsZFlpZWxkKCk7IClcbiAgICAgICAgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gICAgICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICAgICAgKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlXG4gICAgICAgID8gKHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKSxcbiAgICAgICAgICAoY3VycmVudCA9IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIGJlZ2luV29yayxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXNcbiAgICAgICAgICApKSxcbiAgICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZER1cmF0aW9uKHVuaXRPZldvcmspKVxuICAgICAgICA6IChjdXJyZW50ID0gcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgYmVnaW5Xb3JrLFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgICBlbnRhbmdsZWRSZW5kZXJMYW5lc1xuICAgICAgICAgICkpO1xuICAgICAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG4gICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgID8gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspXG4gICAgICAgIDogKHdvcmtJblByb2dyZXNzID0gY3VycmVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcGxheVN1c3BlbmRlZFVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAgICAgdmFyIG5leHQgPSBydW5XaXRoRmliZXJJbkRFVih1bml0T2ZXb3JrLCByZXBsYXlCZWdpbldvcmssIHVuaXRPZldvcmspO1xuICAgICAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG4gICAgICBudWxsID09PSBuZXh0ID8gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIDogKHdvcmtJblByb2dyZXNzID0gbmV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcGxheUJlZ2luV29yayh1bml0T2ZXb3JrKSB7XG4gICAgICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlLFxuICAgICAgICBpc1Byb2ZpbGluZ01vZGUgPSAodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGU7XG4gICAgICBpc1Byb2ZpbGluZ01vZGUgJiYgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgICAgc3dpdGNoICh1bml0T2ZXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgY3VycmVudCA9IHJlcGxheUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgICB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIHVuaXRPZldvcmsudHlwZSxcbiAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBjdXJyZW50ID0gcmVwbGF5RnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIHVuaXRPZldvcmsucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgdW5pdE9mV29yay50eXBlLnJlbmRlcixcbiAgICAgICAgICAgIHVuaXRPZldvcmsucmVmLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmVzZXRIb29rc09uVW53aW5kKHVuaXRPZldvcmspO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHVud2luZEludGVycnVwdGVkV29yayhjdXJyZW50LCB1bml0T2ZXb3JrKSxcbiAgICAgICAgICAgICh1bml0T2ZXb3JrID0gd29ya0luUHJvZ3Jlc3MgPVxuICAgICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzKHVuaXRPZldvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKSksXG4gICAgICAgICAgICAoY3VycmVudCA9IGJlZ2luV29yayhjdXJyZW50LCB1bml0T2ZXb3JrLCBlbnRhbmdsZWRSZW5kZXJMYW5lcykpO1xuICAgICAgfVxuICAgICAgaXNQcm9maWxpbmdNb2RlICYmXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRHVyYXRpb24odW5pdE9mV29yayk7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGhyb3dBbmRVbndpbmRXb3JrTG9vcChcbiAgICAgIHJvb3QsXG4gICAgICB1bml0T2ZXb3JrLFxuICAgICAgdGhyb3duVmFsdWUsXG4gICAgICBzdXNwZW5kZWRSZWFzb25cbiAgICApIHtcbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc09uVW53aW5kKHVuaXRPZldvcmspO1xuICAgICAgdGhlbmFibGVTdGF0ZSA9IG51bGw7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciA9IDA7XG4gICAgICB2YXIgcmV0dXJuRmliZXIgPSB1bml0T2ZXb3JrLnJldHVybjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgICB0aHJvd25WYWx1ZSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZDtcbiAgICAgICAgICBsb2dVbmNhdWdodEVycm9yKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHRocm93blZhbHVlLCByb290LmN1cnJlbnQpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAobnVsbCAhPT0gcmV0dXJuRmliZXIpIHRocm93ICgod29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlciksIGVycm9yKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RGYXRhbEVycm9yZWQ7XG4gICAgICAgIGxvZ1VuY2F1Z2h0RXJyb3IoXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih0aHJvd25WYWx1ZSwgcm9vdC5jdXJyZW50KVxuICAgICAgICApO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh1bml0T2ZXb3JrLmZsYWdzICYgMzI3NjgpIHtcbiAgICAgICAgaWYgKGlzSHlkcmF0aW5nIHx8IHN1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25FcnJvcikgcm9vdCA9ICEwO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZyB8fFxuICAgICAgICAgIDAgIT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIDUzNjg3MDkxMilcbiAgICAgICAgKVxuICAgICAgICAgIHJvb3QgPSAhMTtcbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3MgPSByb290ID0gITApLFxuICAgICAgICAgIHN1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25EYXRhIHx8XG4gICAgICAgICAgICBzdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uQWN0aW9uIHx8XG4gICAgICAgICAgICBzdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uSW1tZWRpYXRlIHx8XG4gICAgICAgICAgICBzdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZSlcbiAgICAgICAgKVxuICAgICAgICAgIChzdXNwZW5kZWRSZWFzb24gPSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50KSxcbiAgICAgICAgICAgIG51bGwgIT09IHN1c3BlbmRlZFJlYXNvbiAmJlxuICAgICAgICAgICAgICAxMyA9PT0gc3VzcGVuZGVkUmVhc29uLnRhZyAmJlxuICAgICAgICAgICAgICAoc3VzcGVuZGVkUmVhc29uLmZsYWdzIHw9IDE2Mzg0KTtcbiAgICAgICAgdW53aW5kVW5pdE9mV29yayh1bml0T2ZXb3JrLCByb290KTtcbiAgICAgIH0gZWxzZSBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gICAgICB2YXIgY29tcGxldGVkV29yayA9IHVuaXRPZldvcms7XG4gICAgICBkbyB7XG4gICAgICAgIGlmICgwICE9PSAoY29tcGxldGVkV29yay5mbGFncyAmIDMyNzY4KSkge1xuICAgICAgICAgIHVud2luZFVuaXRPZldvcmsoXG4gICAgICAgICAgICBjb21wbGV0ZWRXb3JrLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGN1cnJlbnQgPSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZTtcbiAgICAgICAgdW5pdE9mV29yayA9IGNvbXBsZXRlZFdvcmsucmV0dXJuO1xuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIoY29tcGxldGVkV29yayk7XG4gICAgICAgIGN1cnJlbnQgPSBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICBjb21wbGV0ZWRXb3JrLFxuICAgICAgICAgIGNvbXBsZXRlV29yayxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIGNvbXBsZXRlZFdvcmssXG4gICAgICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgICAgKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmRJbmNvbXBsZXRlRHVyYXRpb24oY29tcGxldGVkV29yayk7XG4gICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50O1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb21wbGV0ZWRXb3JrID0gY29tcGxldGVkV29yay5zaWJsaW5nO1xuICAgICAgICBpZiAobnVsbCAhPT0gY29tcGxldGVkV29yaykge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gY29tcGxldGVkV29yaztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcbiAgICAgIH0gd2hpbGUgKG51bGwgIT09IGNvbXBsZXRlZFdvcmspO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluUHJvZ3Jlc3MgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290Q29tcGxldGVkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW53aW5kVW5pdE9mV29yayh1bml0T2ZXb3JrLCBza2lwU2libGluZ3MpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgdmFyIG5leHQgPSB1bndpbmRXb3JrKHVuaXRPZldvcmsuYWx0ZXJuYXRlLCB1bml0T2ZXb3JrKTtcbiAgICAgICAgaWYgKG51bGwgIT09IG5leHQpIHtcbiAgICAgICAgICBuZXh0LmZsYWdzICY9IDMyNzY3O1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCh1bml0T2ZXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkSW5jb21wbGV0ZUR1cmF0aW9uKHVuaXRPZldvcmspO1xuICAgICAgICAgIG5leHQgPSB1bml0T2ZXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICAgIGZvciAodmFyIGNoaWxkID0gdW5pdE9mV29yay5jaGlsZDsgbnVsbCAhPT0gY2hpbGQ7IClcbiAgICAgICAgICAgIChuZXh0ICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uKSwgKGNoaWxkID0gY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgdW5pdE9mV29yay5hY3R1YWxEdXJhdGlvbiA9IG5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCA9IHVuaXRPZldvcmsucmV0dXJuO1xuICAgICAgICBudWxsICE9PSBuZXh0ICYmXG4gICAgICAgICAgKChuZXh0LmZsYWdzIHw9IDMyNzY4KSxcbiAgICAgICAgICAobmV4dC5zdWJ0cmVlRmxhZ3MgPSAwKSxcbiAgICAgICAgICAobmV4dC5kZWxldGlvbnMgPSBudWxsKSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhc2tpcFNpYmxpbmdzICYmXG4gICAgICAgICAgKCh1bml0T2ZXb3JrID0gdW5pdE9mV29yay5zaWJsaW5nKSwgbnVsbCAhPT0gdW5pdE9mV29yaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB1bml0T2ZXb3JrO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVuaXRPZldvcmsgPSBuZXh0O1xuICAgICAgfSB3aGlsZSAobnVsbCAhPT0gdW5pdE9mV29yayk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZEF0VGhlU2hlbGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFJvb3QoXG4gICAgICByb290LFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgbGFuZXMsXG4gICAgICByZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgIHRyYW5zaXRpb25zLFxuICAgICAgZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlLFxuICAgICAgc3Bhd25lZExhbmUsXG4gICAgICB1cGRhdGVkTGFuZXMsXG4gICAgICBzdXNwZW5kZWRSZXRyeUxhbmVzXG4gICAgKSB7XG4gICAgICByb290LmNhbmNlbFBlbmRpbmdDb21taXQgPSBudWxsO1xuICAgICAgZG8gZmx1c2hQZW5kaW5nRWZmZWN0cygpO1xuICAgICAgd2hpbGUgKHBlbmRpbmdFZmZlY3RzU3RhdHVzICE9PSBOT19QRU5ESU5HX0VGRkVDVFMpO1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZygpO1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MoKTtcbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpXG4gICAgICAgIHRocm93IEVycm9yKFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIpO1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21taXRTdGFydGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbW1pdFN0YXJ0ZWQobGFuZXMpO1xuICAgICAgaWYgKG51bGwgPT09IGZpbmlzaGVkV29yaykgbWFya0NvbW1pdFN0b3BwZWQoKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICAwID09PSBsYW5lcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImZpbmlzaGVkTGFuZXMgc2hvdWxkIG5vdCBiZSBlbXB0eSBkdXJpbmcgYSBjb21taXQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoZmluaXNoZWRXb3JrID09PSByb290LmN1cnJlbnQpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkNhbm5vdCBjb21taXQgdGhlIHNhbWUgdHJlZSBhcyBiZWZvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUgPVxuICAgICAgICAgIGZpbmlzaGVkV29yay5sYW5lcyB8IGZpbmlzaGVkV29yay5jaGlsZExhbmVzO1xuICAgICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUgfD0gY29uY3VycmVudGx5VXBkYXRlZExhbmVzO1xuICAgICAgICBtYXJrUm9vdEZpbmlzaGVkKFxuICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlLFxuICAgICAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgICAgIHVwZGF0ZWRMYW5lcyxcbiAgICAgICAgICBzdXNwZW5kZWRSZXRyeUxhbmVzXG4gICAgICAgICk7XG4gICAgICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJlxuICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSAwKSk7XG4gICAgICAgIHBlbmRpbmdGaW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzUm9vdCA9IHJvb3Q7XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzTGFuZXMgPSBsYW5lcztcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNSZW1haW5pbmdMYW5lcyA9IGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZTtcbiAgICAgICAgcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucyA9IHRyYW5zaXRpb25zO1xuICAgICAgICBwZW5kaW5nUmVjb3ZlcmFibGVFcnJvcnMgPSByZWNvdmVyYWJsZUVycm9ycztcbiAgICAgICAgMCAhPT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiAxMDI1NikgfHxcbiAgICAgICAgMCAhPT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDEwMjU2KVxuICAgICAgICAgID8gKChyb290LmNhbGxiYWNrTm9kZSA9IG51bGwpLFxuICAgICAgICAgICAgKHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IDApLFxuICAgICAgICAgICAgc2NoZWR1bGVDYWxsYmFjayQxKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cyghMCk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgOiAoKHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbCksIChyb290LmNhbGxiYWNrUHJpb3JpdHkgPSAwKSk7XG4gICAgICAgIGNvbW1pdFN0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgICByZWNvdmVyYWJsZUVycm9ycyA9IDAgIT09IChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAxMzg3OCk7XG4gICAgICAgIGlmICgwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDEzODc4KSB8fCByZWNvdmVyYWJsZUVycm9ycykge1xuICAgICAgICAgIHJlY292ZXJhYmxlRXJyb3JzID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVDtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgICAgICB0cmFuc2l0aW9ucyA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICAgICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICBzcGF3bmVkTGFuZSA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrLCBsYW5lcyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIChleGVjdXRpb25Db250ZXh0ID0gc3Bhd25lZExhbmUpLFxuICAgICAgICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHRyYW5zaXRpb25zKSxcbiAgICAgICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSByZWNvdmVyYWJsZUVycm9ycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzID0gUEVORElOR19NVVRBVElPTl9QSEFTRTtcbiAgICAgICAgZmx1c2hNdXRhdGlvbkVmZmVjdHMoKTtcbiAgICAgICAgZmx1c2hMYXlvdXRFZmZlY3RzKCk7XG4gICAgICAgIGZsdXNoU3Bhd25lZFdvcmsoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZmx1c2hNdXRhdGlvbkVmZmVjdHMoKSB7XG4gICAgICBpZiAocGVuZGluZ0VmZmVjdHNTdGF0dXMgPT09IFBFTkRJTkdfTVVUQVRJT05fUEhBU0UpIHtcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgPSBOT19QRU5ESU5HX0VGRkVDVFM7XG4gICAgICAgIHZhciByb290ID0gcGVuZGluZ0VmZmVjdHNSb290LFxuICAgICAgICAgIGZpbmlzaGVkV29yayA9IHBlbmRpbmdGaW5pc2hlZFdvcmssXG4gICAgICAgICAgbGFuZXMgPSBwZW5kaW5nRWZmZWN0c0xhbmVzLFxuICAgICAgICAgIHJvb3RNdXRhdGlvbkhhc0VmZmVjdCA9IDAgIT09IChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAxMzg3OCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDEzODc4KSB8fFxuICAgICAgICAgIHJvb3RNdXRhdGlvbkhhc0VmZmVjdFxuICAgICAgICApIHtcbiAgICAgICAgICByb290TXV0YXRpb25IYXNFZmZlY3QgPSBSZWFjdFNoYXJlZEludGVybmFscy5UO1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBudWxsO1xuICAgICAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgICAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gRGlzY3JldGVFdmVudFByaW9yaXR5O1xuICAgICAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpblByb2dyZXNzTGFuZXMgPSBsYW5lcztcbiAgICAgICAgICAgIGluUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgICAgICAgICAgIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIoZmluaXNoZWRXb3JrLCByb290KTtcbiAgICAgICAgICAgIGluUHJvZ3Jlc3NSb290ID0gaW5Qcm9ncmVzc0xhbmVzID0gbnVsbDtcbiAgICAgICAgICAgIGxhbmVzID0gc2VsZWN0aW9uSW5mb3JtYXRpb247XG4gICAgICAgICAgICB2YXIgY3VyRm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50RGVlcChyb290LmNvbnRhaW5lckluZm8pLFxuICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtID0gbGFuZXMuZm9jdXNlZEVsZW0sXG4gICAgICAgICAgICAgIHByaW9yU2VsZWN0aW9uUmFuZ2UgPSBsYW5lcy5zZWxlY3Rpb25SYW5nZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0gIT09IHByaW9yRm9jdXNlZEVsZW0gJiZcbiAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbSAmJlxuICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtLm93bmVyRG9jdW1lbnQgJiZcbiAgICAgICAgICAgICAgY29udGFpbnNOb2RlKFxuICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHByaW9yU2VsZWN0aW9uUmFuZ2UgJiZcbiAgICAgICAgICAgICAgICBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMocHJpb3JGb2N1c2VkRWxlbSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gcHJpb3JTZWxlY3Rpb25SYW5nZS5zdGFydCxcbiAgICAgICAgICAgICAgICAgIGVuZCA9IHByaW9yU2VsZWN0aW9uUmFuZ2UuZW5kO1xuICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gZW5kICYmIChlbmQgPSBzdGFydCk7XG4gICAgICAgICAgICAgICAgaWYgKFwic2VsZWN0aW9uU3RhcnRcIiBpbiBwcmlvckZvY3VzZWRFbGVtKVxuICAgICAgICAgICAgICAgICAgKHByaW9yRm9jdXNlZEVsZW0uc2VsZWN0aW9uU3RhcnQgPSBzdGFydCksXG4gICAgICAgICAgICAgICAgICAgIChwcmlvckZvY3VzZWRFbGVtLnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgICAgIGVuZCxcbiAgICAgICAgICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtLnZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHZhciBkb2MgPSBwcmlvckZvY3VzZWRFbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHdpbiA9IChkb2MgJiYgZG9jLmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG4gICAgICAgICAgICAgICAgICBpZiAod2luLmdldFNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHByaW9yRm9jdXNlZEVsZW0udGV4dENvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0JGpzY29tcCQwID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmlvclNlbGVjdGlvblJhbmdlLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBlbmQkanNjb21wJDAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwID09PSBwcmlvclNlbGVjdGlvblJhbmdlLmVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHN0YXJ0JGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogTWF0aC5taW4ocHJpb3JTZWxlY3Rpb25SYW5nZS5lbmQsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICFzZWxlY3Rpb24uZXh0ZW5kICYmXG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnQkanNjb21wJDAgPiBlbmQkanNjb21wJDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKGN1ckZvY3VzZWRFbGVtID0gZW5kJGpzY29tcCQwKSxcbiAgICAgICAgICAgICAgICAgICAgICAoZW5kJGpzY29tcCQwID0gc3RhcnQkanNjb21wJDApLFxuICAgICAgICAgICAgICAgICAgICAgIChzdGFydCRqc2NvbXAkMCA9IGN1ckZvY3VzZWRFbGVtKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TWFya2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgZW5kTWFya2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgKDEgIT09IHNlbGVjdGlvbi5yYW5nZUNvdW50IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSAhPT0gc3RhcnRNYXJrZXIubm9kZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCAhPT0gc3RhcnRNYXJrZXIub2Zmc2V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlICE9PSBlbmRNYXJrZXIubm9kZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0ICE9PSBlbmRNYXJrZXIub2Zmc2V0KVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydChzdGFydE1hcmtlci5ub2RlLCBzdGFydE1hcmtlci5vZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICBzdGFydCRqc2NvbXAkMCA+IGVuZCRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmV4dGVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChyYW5nZS5zZXRFbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkb2MgPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSBwcmlvckZvY3VzZWRFbGVtO1xuICAgICAgICAgICAgICAgIChzZWxlY3Rpb24gPSBzZWxlY3Rpb24ucGFyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDEgPT09IHNlbGVjdGlvbi5ub2RlVHlwZSAmJlxuICAgICAgICAgICAgICAgICAgZG9jLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBzZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHNlbGVjdGlvbi5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgICAgICAgICB0b3A6IHNlbGVjdGlvbi5zY3JvbGxUb3BcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcmlvckZvY3VzZWRFbGVtLmZvY3VzICYmXG4gICAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cygpO1xuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0gPSAwO1xuICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0gPCBkb2MubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0rK1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5mbyA9IGRvY1twcmlvckZvY3VzZWRFbGVtXTtcbiAgICAgICAgICAgICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsTGVmdCA9IGluZm8ubGVmdDtcbiAgICAgICAgICAgICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsVG9wID0gaW5mby50b3A7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9lbmFibGVkID0gISFldmVudHNFbmFibGVkO1xuICAgICAgICAgICAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBldmVudHNFbmFibGVkID0gbnVsbDtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dCksXG4gICAgICAgICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJldmlvdXNQcmlvcml0eSksXG4gICAgICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcm9vdE11dGF0aW9uSGFzRWZmZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrO1xuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IFBFTkRJTkdfTEFZT1VUX1BIQVNFO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaExheW91dEVmZmVjdHMoKSB7XG4gICAgICBpZiAocGVuZGluZ0VmZmVjdHNTdGF0dXMgPT09IFBFTkRJTkdfTEFZT1VUX1BIQVNFKSB7XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzID0gTk9fUEVORElOR19FRkZFQ1RTO1xuICAgICAgICB2YXIgcm9vdCA9IHBlbmRpbmdFZmZlY3RzUm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmsgPSBwZW5kaW5nRmluaXNoZWRXb3JrLFxuICAgICAgICAgIGxhbmVzID0gcGVuZGluZ0VmZmVjdHNMYW5lcyxcbiAgICAgICAgICByb290SGFzTGF5b3V0RWZmZWN0ID0gMCAhPT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDg3NzIpO1xuICAgICAgICBpZiAoMCAhPT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiA4NzcyKSB8fCByb290SGFzTGF5b3V0RWZmZWN0KSB7XG4gICAgICAgICAgcm9vdEhhc0xheW91dEVmZmVjdCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtMYXlvdXRFZmZlY3RzU3RhcnRlZCAmJlxuICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtMYXlvdXRFZmZlY3RzU3RhcnRlZChsYW5lcyksXG4gICAgICAgICAgICAgIChpblByb2dyZXNzTGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgICAgIChpblByb2dyZXNzUm9vdCA9IHJvb3QpLFxuICAgICAgICAgICAgICBjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyKFxuICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKGluUHJvZ3Jlc3NSb290ID0gaW5Qcm9ncmVzc0xhbmVzID0gbnVsbCksXG4gICAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrTGF5b3V0RWZmZWN0c1N0b3BwZWQgJiZcbiAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtMYXlvdXRFZmZlY3RzU3RvcHBlZCgpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0KSxcbiAgICAgICAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5KSxcbiAgICAgICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSByb290SGFzTGF5b3V0RWZmZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgPSBQRU5ESU5HX0FGVEVSX01VVEFUSU9OX1BIQVNFO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaFNwYXduZWRXb3JrKCkge1xuICAgICAgaWYgKFxuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9PT0gUEVORElOR19TUEFXTkVEX1dPUksgfHxcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgPT09IFBFTkRJTkdfQUZURVJfTVVUQVRJT05fUEhBU0VcbiAgICAgICkge1xuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IE5PX1BFTkRJTkdfRUZGRUNUUztcbiAgICAgICAgcmVxdWVzdFBhaW50KCk7XG4gICAgICAgIHZhciByb290ID0gcGVuZGluZ0VmZmVjdHNSb290LFxuICAgICAgICAgIGZpbmlzaGVkV29yayA9IHBlbmRpbmdGaW5pc2hlZFdvcmssXG4gICAgICAgICAgbGFuZXMgPSBwZW5kaW5nRWZmZWN0c0xhbmVzLFxuICAgICAgICAgIHJlY292ZXJhYmxlRXJyb3JzID0gcGVuZGluZ1JlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICAgIHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMgPVxuICAgICAgICAgICAgMCAhPT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiAxMDI1NikgfHxcbiAgICAgICAgICAgIDAgIT09IChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAxMDI1Nik7XG4gICAgICAgIHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHNcbiAgICAgICAgICA/IChwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IFBFTkRJTkdfUEFTU0lWRV9QSEFTRSlcbiAgICAgICAgICA6ICgocGVuZGluZ0VmZmVjdHNTdGF0dXMgPSBOT19QRU5ESU5HX0VGRkVDVFMpLFxuICAgICAgICAgICAgKHBlbmRpbmdGaW5pc2hlZFdvcmsgPSBwZW5kaW5nRWZmZWN0c1Jvb3QgPSBudWxsKSxcbiAgICAgICAgICAgIHJlbGVhc2VSb290UG9vbGVkQ2FjaGUocm9vdCwgcm9vdC5wZW5kaW5nTGFuZXMpLFxuICAgICAgICAgICAgKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDApLFxuICAgICAgICAgICAgKHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMgPSBudWxsKSk7XG4gICAgICAgIHZhciByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgICAwID09PSByZW1haW5pbmdMYW5lcyAmJiAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsKTtcbiAgICAgICAgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cyB8fCBjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYocm9vdCk7XG4gICAgICAgIHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMgPSBsYW5lc1RvRXZlbnRQcmlvcml0eShsYW5lcyk7XG4gICAgICAgIGZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmplY3RlZEhvb2sgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3RcbiAgICAgICAgKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgZGlkRXJyb3IgPSAxMjggPT09IChmaW5pc2hlZFdvcmsuY3VycmVudC5mbGFncyAmIDEyOCk7XG4gICAgICAgICAgICBzd2l0Y2ggKHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgICAgICAgY2FzZSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICAgICAgdmFyIHNjaGVkdWxlclByaW9yaXR5ID0gSW1tZWRpYXRlUHJpb3JpdHk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBEZWZhdWx0RXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IE5vcm1hbFByaW9yaXR5JDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgSWRsZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBJZGxlUHJpb3JpdHk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBOb3JtYWxQcmlvcml0eSQxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KFxuICAgICAgICAgICAgICByZW5kZXJlcklELFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5LFxuICAgICAgICAgICAgICBkaWRFcnJvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGhhc0xvZ2dlZEVycm9yIHx8XG4gICAgICAgICAgICAgICgoaGFzTG9nZ2VkRXJyb3IgPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsXG4gICAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIH1cbiAgICAgICAgaXNEZXZUb29sc1ByZXNlbnQgJiYgcm9vdC5tZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCk7XG4gICAgICAgIG9uQ29tbWl0Um9vdCgpO1xuICAgICAgICBpZiAobnVsbCAhPT0gcmVjb3ZlcmFibGVFcnJvcnMpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBvblJlY292ZXJhYmxlRXJyb3IgPSByb290Lm9uUmVjb3ZlcmFibGVFcnJvcjtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayA9IDA7XG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayA8IHJlY292ZXJhYmxlRXJyb3JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrKytcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YXIgcmVjb3ZlcmFibGVFcnJvciA9IHJlY292ZXJhYmxlRXJyb3JzW2ZpbmlzaGVkV29ya10sXG4gICAgICAgICAgICAgICAgZXJyb3JJbmZvID0gbWFrZUVycm9ySW5mbyhyZWNvdmVyYWJsZUVycm9yLnN0YWNrKTtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgcmVjb3ZlcmFibGVFcnJvci5zb3VyY2UsXG4gICAgICAgICAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIHJlY292ZXJhYmxlRXJyb3IudmFsdWUsXG4gICAgICAgICAgICAgICAgZXJyb3JJbmZvXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gZGlkRXJyb3IpLFxuICAgICAgICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHNjaGVkdWxlclByaW9yaXR5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgMCAhPT0gKHBlbmRpbmdFZmZlY3RzTGFuZXMgJiAzKSAmJiBmbHVzaFBlbmRpbmdFZmZlY3RzKCk7XG4gICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgcmVtYWluaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcbiAgICAgICAgMCAhPT0gKGxhbmVzICYgNDE5NDA5MCkgJiYgMCAhPT0gKHJlbWFpbmluZ0xhbmVzICYgNDIpXG4gICAgICAgICAgPyAoKG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9ICEwKSxcbiAgICAgICAgICAgIHJvb3QgPT09IHJvb3RXaXRoTmVzdGVkVXBkYXRlc1xuICAgICAgICAgICAgICA/IG5lc3RlZFVwZGF0ZUNvdW50KytcbiAgICAgICAgICAgICAgOiAoKG5lc3RlZFVwZGF0ZUNvdW50ID0gMCksIChyb290V2l0aE5lc3RlZFVwZGF0ZXMgPSByb290KSkpXG4gICAgICAgICAgOiAobmVzdGVkVXBkYXRlQ291bnQgPSAwKTtcbiAgICAgICAgZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoMCwgITEpO1xuICAgICAgICBtYXJrQ29tbWl0U3RvcHBlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtYWtlRXJyb3JJbmZvKGNvbXBvbmVudFN0YWNrKSB7XG4gICAgICBjb21wb25lbnRTdGFjayA9IHsgY29tcG9uZW50U3RhY2s6IGNvbXBvbmVudFN0YWNrIH07XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29tcG9uZW50U3RhY2ssIFwiZGlnZXN0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdZb3UgYXJlIGFjY2Vzc2luZyBcImRpZ2VzdFwiIGZyb20gdGhlIGVycm9ySW5mbyBvYmplY3QgcGFzc2VkIHRvIG9uUmVjb3ZlcmFibGVFcnJvci4gVGhpcyBwcm9wZXJ0eSBpcyBubyBsb25nZXIgcHJvdmlkZWQgYXMgcGFydCBvZiBlcnJvckluZm8gYnV0IGNhbiBiZSBhY2Nlc3NlZCBhcyBhIHByb3BlcnR5IG9mIHRoZSBFcnJvciBpbnN0YW5jZSBpdHNlbGYuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbXBvbmVudFN0YWNrO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxlYXNlUm9vdFBvb2xlZENhY2hlKHJvb3QsIHJlbWFpbmluZ0xhbmVzKSB7XG4gICAgICAwID09PSAocm9vdC5wb29sZWRDYWNoZUxhbmVzICY9IHJlbWFpbmluZ0xhbmVzKSAmJlxuICAgICAgICAoKHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wb29sZWRDYWNoZSksXG4gICAgICAgIG51bGwgIT0gcmVtYWluaW5nTGFuZXMgJiZcbiAgICAgICAgICAoKHJvb3QucG9vbGVkQ2FjaGUgPSBudWxsKSwgcmVsZWFzZUNhY2hlKHJlbWFpbmluZ0xhbmVzKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaFBlbmRpbmdFZmZlY3RzKHdhc0RlbGF5ZWRDb21taXQpIHtcbiAgICAgIGZsdXNoTXV0YXRpb25FZmZlY3RzKCk7XG4gICAgICBmbHVzaExheW91dEVmZmVjdHMoKTtcbiAgICAgIGZsdXNoU3Bhd25lZFdvcmsoKTtcbiAgICAgIHJldHVybiBmbHVzaFBhc3NpdmVFZmZlY3RzKHdhc0RlbGF5ZWRDb21taXQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzKCkge1xuICAgICAgaWYgKHBlbmRpbmdFZmZlY3RzU3RhdHVzICE9PSBQRU5ESU5HX1BBU1NJVkVfUEhBU0UpIHJldHVybiAhMTtcbiAgICAgIHZhciByb290ID0gcGVuZGluZ0VmZmVjdHNSb290LFxuICAgICAgICByZW1haW5pbmdMYW5lcyA9IHBlbmRpbmdFZmZlY3RzUmVtYWluaW5nTGFuZXM7XG4gICAgICBwZW5kaW5nRWZmZWN0c1JlbWFpbmluZ0xhbmVzID0gMDtcbiAgICAgIHZhciByZW5kZXJQcmlvcml0eSA9IGxhbmVzVG9FdmVudFByaW9yaXR5KHBlbmRpbmdFZmZlY3RzTGFuZXMpLFxuICAgICAgICBwcmlvcml0eSA9XG4gICAgICAgICAgMCA9PT0gRGVmYXVsdEV2ZW50UHJpb3JpdHkgfHwgRGVmYXVsdEV2ZW50UHJpb3JpdHkgPiByZW5kZXJQcmlvcml0eVxuICAgICAgICAgICAgPyBEZWZhdWx0RXZlbnRQcmlvcml0eVxuICAgICAgICAgICAgOiByZW5kZXJQcmlvcml0eTtcbiAgICAgIHJlbmRlclByaW9yaXR5ID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVDtcbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIHRyeSB7XG4gICAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmlvcml0eTtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICAgIHByaW9yaXR5ID0gcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucztcbiAgICAgICAgcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucyA9IG51bGw7XG4gICAgICAgIHZhciByb290JGpzY29tcCQwID0gcGVuZGluZ0VmZmVjdHNSb290LFxuICAgICAgICAgIGxhbmVzID0gcGVuZGluZ0VmZmVjdHNMYW5lcztcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgPSBOT19QRU5ESU5HX0VGRkVDVFM7XG4gICAgICAgIHBlbmRpbmdGaW5pc2hlZFdvcmsgPSBwZW5kaW5nRWZmZWN0c1Jvb3QgPSBudWxsO1xuICAgICAgICBwZW5kaW5nRWZmZWN0c0xhbmVzID0gMDtcbiAgICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkNhbm5vdCBmbHVzaCBwYXNzaXZlIGVmZmVjdHMgd2hpbGUgYWxyZWFkeSByZW5kZXJpbmcuXCIpO1xuICAgICAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSAhMDtcbiAgICAgICAgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9ICExO1xuICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1Bhc3NpdmVFZmZlY3RzU3RhcnRlZCAmJlxuICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1Bhc3NpdmVFZmZlY3RzU3RhcnRlZChsYW5lcyk7XG4gICAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKHJvb3QkanNjb21wJDAuY3VycmVudCk7XG4gICAgICAgIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIoXG4gICAgICAgICAgcm9vdCRqc2NvbXAkMCxcbiAgICAgICAgICByb290JGpzY29tcCQwLmN1cnJlbnQsXG4gICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgcHJpb3JpdHlcbiAgICAgICAgKTtcbiAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtQYXNzaXZlRWZmZWN0c1N0b3BwZWQgJiZcbiAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtQYXNzaXZlRWZmZWN0c1N0b3BwZWQoKTtcbiAgICAgICAgY29tbWl0RG91YmxlSW52b2tlRWZmZWN0c0luREVWKHJvb3QkanNjb21wJDApO1xuICAgICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKDAsICExKTtcbiAgICAgICAgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0c1xuICAgICAgICAgID8gcm9vdCRqc2NvbXAkMCA9PT0gcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlc1xuICAgICAgICAgICAgPyBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQrK1xuICAgICAgICAgICAgOiAoKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDApLFxuICAgICAgICAgICAgICAocm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IHJvb3QkanNjb21wJDApKVxuICAgICAgICAgIDogKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDApO1xuICAgICAgICBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzID0gaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gITE7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmplY3RlZEhvb2sgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2sub25Qb3N0Q29tbWl0RmliZXJSb290XG4gICAgICAgIClcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5qZWN0ZWRIb29rLm9uUG9zdENvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290JGpzY29tcCQwKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGhhc0xvZ2dlZEVycm9yIHx8XG4gICAgICAgICAgICAgICgoaGFzTG9nZ2VkRXJyb3IgPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsXG4gICAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIH1cbiAgICAgICAgdmFyIHN0YXRlTm9kZSA9IHJvb3QkanNjb21wJDAuY3VycmVudC5zdGF0ZU5vZGU7XG4gICAgICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICByZXR1cm4gITA7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcmVuZGVyUHJpb3JpdHkpLFxuICAgICAgICAgIHJlbGVhc2VSb290UG9vbGVkQ2FjaGUocm9vdCwgcmVtYWluaW5nTGFuZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChyb290RmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcikge1xuICAgICAgc291cmNlRmliZXIgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihlcnJvciwgc291cmNlRmliZXIpO1xuICAgICAgc291cmNlRmliZXIgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUocm9vdEZpYmVyLnN0YXRlTm9kZSwgc291cmNlRmliZXIsIDIpO1xuICAgICAgcm9vdEZpYmVyID0gZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHNvdXJjZUZpYmVyLCAyKTtcbiAgICAgIG51bGwgIT09IHJvb3RGaWJlciAmJlxuICAgICAgICAobWFya1Jvb3RVcGRhdGVkJDEocm9vdEZpYmVyLCAyKSwgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3RGaWJlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIGVycm9yXG4gICAgKSB7XG4gICAgICBpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSAhMTtcbiAgICAgIGlmICgzID09PSBzb3VyY2VGaWJlci50YWcpXG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGZvciAoOyBudWxsICE9PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yOyApIHtcbiAgICAgICAgICBpZiAoMyA9PT0gbmVhcmVzdE1vdW50ZWRBbmNlc3Rvci50YWcpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KFxuICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICBzb3VyY2VGaWJlcixcbiAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgxID09PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnRhZykge1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gbmVhcmVzdE1vdW50ZWRBbmNlc3Rvci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICB0eXBlb2YgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciB8fFxuICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggJiZcbiAgICAgICAgICAgICAgICAobnVsbCA9PT0gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgfHxcbiAgICAgICAgICAgICAgICAgICFsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5oYXMoaW5zdGFuY2UpKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBzb3VyY2VGaWJlciA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gICAgICAgICAgICAgIGVycm9yID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZSgyKTtcbiAgICAgICAgICAgICAgaW5zdGFuY2UgPSBlbnF1ZXVlVXBkYXRlKG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yLCAyKTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5zdGFuY2UgJiZcbiAgICAgICAgICAgICAgICAoaW5pdGlhbGl6ZUNsYXNzRXJyb3JVcGRhdGUoXG4gICAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUZpYmVyXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtYXJrUm9vdFVwZGF0ZWQkMShpbnN0YW5jZSwgMiksXG4gICAgICAgICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKGluc3RhbmNlKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciA9IG5lYXJlc3RNb3VudGVkQW5jZXN0b3IucmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnRlcm5hbCBSZWFjdCBlcnJvcjogQXR0ZW1wdGVkIHRvIGNhcHR1cmUgYSBjb21taXQgcGhhc2UgZXJyb3IgaW5zaWRlIGEgZGV0YWNoZWQgdHJlZS4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QuIFBvdGVudGlhbCBjYXVzZXMgaW5jbHVkZSBkZWxldGluZyB0aGUgc2FtZSBmaWJlciBtb3JlIHRoYW4gb25jZSwgY29tbWl0dGluZyBhbiBhbHJlYWR5LWZpbmlzaGVkIHRyZWUsIG9yIGFuIGluY29uc2lzdGVudCByZXR1cm4gcG9pbnRlci5cXG5cXG5FcnJvciBtZXNzYWdlOlxcblxcbiVzXCIsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCBsYW5lcykge1xuICAgICAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICAgICAgaWYgKG51bGwgPT09IHBpbmdDYWNoZSkge1xuICAgICAgICBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbiAgICAgICAgdmFyIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICAodGhyZWFkSURzID0gcGluZ0NhY2hlLmdldCh3YWtlYWJsZSkpLFxuICAgICAgICAgIHZvaWQgMCA9PT0gdGhyZWFkSURzICYmXG4gICAgICAgICAgICAoKHRocmVhZElEcyA9IG5ldyBTZXQoKSksIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcykpO1xuICAgICAgdGhyZWFkSURzLmhhcyhsYW5lcykgfHxcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgPSAhMCksXG4gICAgICAgIHRocmVhZElEcy5hZGQobGFuZXMpLFxuICAgICAgICAocGluZ0NhY2hlID0gcGluZ1N1c3BlbmRlZFJvb3QuYmluZChudWxsLCByb290LCB3YWtlYWJsZSwgbGFuZXMpKSxcbiAgICAgICAgaXNEZXZUb29sc1ByZXNlbnQgJiYgcmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCBsYW5lcyksXG4gICAgICAgIHdha2VhYmxlLnRoZW4ocGluZ0NhY2hlLCBwaW5nQ2FjaGUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGluZ1N1c3BlbmRlZFJvb3Qocm9vdCwgd2FrZWFibGUsIHBpbmdlZExhbmVzKSB7XG4gICAgICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG4gICAgICBudWxsICE9PSBwaW5nQ2FjaGUgJiYgcGluZ0NhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gICAgICByb290LnBpbmdlZExhbmVzIHw9IHJvb3Quc3VzcGVuZGVkTGFuZXMgJiBwaW5nZWRMYW5lcztcbiAgICAgIHJvb3Qud2FybUxhbmVzICY9IH5waW5nZWRMYW5lcztcbiAgICAgIGlzQ29uY3VycmVudEFjdEVudmlyb25tZW50KCkgJiZcbiAgICAgICAgbnVsbCA9PT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkEgc3VzcGVuZGVkIHJlc291cmNlIGZpbmlzaGVkIGxvYWRpbmcgaW5zaWRlIGEgdGVzdCwgYnV0IHRoZSBldmVudCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgcmVzb2x2ZXMgc3VzcGVuZGVkIGRhdGEgc2hvdWxkIGJlIHdyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG5hY3QoKCkgPT4ge1xcbiAgLyogZmluaXNoIGxvYWRpbmcgc3VzcGVuZGVkIGRhdGEgKi9cXG59KTtcXG4vKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcblRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgaW4gdGhlIGJyb3dzZXIuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0XCJcbiAgICAgICAgKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9PT0gcm9vdCAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiBwaW5nZWRMYW5lcykgPT09IHBpbmdlZExhbmVzICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5IHx8XG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNjI5MTQ1NjApID09PVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICBub3ckMSgpIC0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA8IEZBTExCQUNLX1RIUk9UVExFX01TKVxuICAgICAgICAgID8gKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSA9PT0gTm9Db250ZXh0ICYmXG4gICAgICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCAwKVxuICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzIHw9IHBpbmdlZExhbmVzKSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgPSAwKSk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpIHtcbiAgICAgIDAgPT09IHJldHJ5TGFuZSAmJiAocmV0cnlMYW5lID0gY2xhaW1OZXh0UmV0cnlMYW5lKCkpO1xuICAgICAgYm91bmRhcnlGaWJlciA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuICAgICAgbnVsbCAhPT0gYm91bmRhcnlGaWJlciAmJlxuICAgICAgICAobWFya1Jvb3RVcGRhdGVkJDEoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKSxcbiAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKGJvdW5kYXJ5RmliZXIpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmV0cnlEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeShib3VuZGFyeUZpYmVyKSB7XG4gICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGJvdW5kYXJ5RmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgcmV0cnlMYW5lID0gMDtcbiAgICAgIG51bGwgIT09IHN1c3BlbnNlU3RhdGUgJiYgKHJldHJ5TGFuZSA9IHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lKTtcbiAgICAgIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlUmV0cnlXYWtlYWJsZShib3VuZGFyeUZpYmVyLCB3YWtlYWJsZSkge1xuICAgICAgdmFyIHJldHJ5TGFuZSA9IDA7XG4gICAgICBzd2l0Y2ggKGJvdW5kYXJ5RmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgdmFyIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGJvdW5kYXJ5RmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBudWxsICE9PSBzdXNwZW5zZVN0YXRlICYmIChyZXRyeUxhbmUgPSBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZS5fcmV0cnlDYWNoZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiUGluZ2VkIHVua25vd24gc3VzcGVuc2UgYm91bmRhcnkgdHlwZS4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBudWxsICE9PSByZXRyeUNhY2hlICYmIHJldHJ5Q2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgICAgIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlQW5kRG91YmxlSW52b2tlRWZmZWN0c0luREVWKFxuICAgICAgcm9vdCRqc2NvbXAkMCxcbiAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgaXNJblN0cmljdE1vZGVcbiAgICApIHtcbiAgICAgIGlmICgwICE9PSAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgNjcxMTcwNTYpKVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApIHtcbiAgICAgICAgICB2YXIgcm9vdCA9IHJvb3QkanNjb21wJDAsXG4gICAgICAgICAgICBmaWJlciA9IHBhcmVudEZpYmVyLFxuICAgICAgICAgICAgaXNTdHJpY3RNb2RlRmliZXIgPSBmaWJlci50eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xuICAgICAgICAgIGlzU3RyaWN0TW9kZUZpYmVyID0gaXNJblN0cmljdE1vZGUgfHwgaXNTdHJpY3RNb2RlRmliZXI7XG4gICAgICAgICAgMjIgIT09IGZpYmVyLnRhZ1xuICAgICAgICAgICAgPyBmaWJlci5mbGFncyAmIDY3MTA4ODY0XG4gICAgICAgICAgICAgID8gaXNTdHJpY3RNb2RlRmliZXIgJiZcbiAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgZG91YmxlSW52b2tlRWZmZWN0c09uRmliZXIsXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICAgICAgICAoZmliZXIubW9kZSAmIE5vU3RyaWN0UGFzc2l2ZUVmZmVjdHNNb2RlKSA9PT0gTm9Nb2RlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VBbmREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYoXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICAgICAgICBpc1N0cmljdE1vZGVGaWJlclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbCA9PT0gZmliZXIubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICAoaXNTdHJpY3RNb2RlRmliZXIgJiYgZmliZXIuZmxhZ3MgJiA4MTkyXG4gICAgICAgICAgICAgICAgPyBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICAgICAgICAgIGRvdWJsZUludm9rZUVmZmVjdHNPbkZpYmVyLFxuICAgICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgICBmaWJlclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogZmliZXIuc3VidHJlZUZsYWdzICYgNjcxMDg4NjQgJiZcbiAgICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUFuZERvdWJsZUludm9rZUVmZmVjdHNJbkRFVixcbiAgICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICAgICAgICAgIGlzU3RyaWN0TW9kZUZpYmVyXG4gICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZG91YmxlSW52b2tlRWZmZWN0c09uRmliZXIocm9vdCwgZmliZXIpIHtcbiAgICAgIHZhciBzaG91bGREb3VibGVJbnZva2VQYXNzaXZlRWZmZWN0cyA9XG4gICAgICAgIDIgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzJdID8gYXJndW1lbnRzWzJdIDogITA7XG4gICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICB0cnkge1xuICAgICAgICBkaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpYmVyKSxcbiAgICAgICAgICBzaG91bGREb3VibGVJbnZva2VQYXNzaXZlRWZmZWN0cyAmJiBkaXNjb25uZWN0UGFzc2l2ZUVmZmVjdChmaWJlciksXG4gICAgICAgICAgcmVhcHBlYXJMYXlvdXRFZmZlY3RzKHJvb3QsIGZpYmVyLmFsdGVybmF0ZSwgZmliZXIsICExKSxcbiAgICAgICAgICBzaG91bGREb3VibGVJbnZva2VQYXNzaXZlRWZmZWN0cyAmJlxuICAgICAgICAgICAgcmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMocm9vdCwgZmliZXIsIDAsIG51bGwsICExLCAwKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0RG91YmxlSW52b2tlRWZmZWN0c0luREVWKHJvb3QpIHtcbiAgICAgIHZhciBkb3VibGVJbnZva2VFZmZlY3RzID0gITA7XG4gICAgICByb290LmN1cnJlbnQubW9kZSAmIChTdHJpY3RMZWdhY3lNb2RlIHwgU3RyaWN0RWZmZWN0c01vZGUpIHx8XG4gICAgICAgIChkb3VibGVJbnZva2VFZmZlY3RzID0gITEpO1xuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUFuZERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcm9vdC5jdXJyZW50LFxuICAgICAgICBkb3VibGVJbnZva2VFZmZlY3RzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAzID09PSB0YWcgfHxcbiAgICAgICAgICAxID09PSB0YWcgfHxcbiAgICAgICAgICAwID09PSB0YWcgfHxcbiAgICAgICAgICAxMSA9PT0gdGFnIHx8XG4gICAgICAgICAgMTQgPT09IHRhZyB8fFxuICAgICAgICAgIDE1ID09PSB0YWdcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGFnID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJSZWFjdENvbXBvbmVudFwiO1xuICAgICAgICAgIGlmIChudWxsICE9PSBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5oYXModGFnKSkgcmV0dXJuO1xuICAgICAgICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5hZGQodGFnKTtcbiAgICAgICAgICB9IGVsc2UgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW3RhZ10pO1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKGZpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkNhbid0IHBlcmZvcm0gYSBSZWFjdCBzdGF0ZSB1cGRhdGUgb24gYSBjb21wb25lbnQgdGhhdCBoYXNuJ3QgbW91bnRlZCB5ZXQuIFRoaXMgaW5kaWNhdGVzIHRoYXQgeW91IGhhdmUgYSBzaWRlLWVmZmVjdCBpbiB5b3VyIHJlbmRlciBmdW5jdGlvbiB0aGF0IGFzeW5jaHJvbm91c2x5IGxhdGVyIGNhbGxzIHRyaWVzIHRvIHVwZGF0ZSB0aGUgY29tcG9uZW50LiBNb3ZlIHRoaXMgd29yayB0byB1c2VFZmZlY3QgaW5zdGVhZC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIGxhbmVzKSB7XG4gICAgICBpc0RldlRvb2xzUHJlc2VudCAmJlxuICAgICAgICByb290Lm1lbW9pemVkVXBkYXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc2NoZWR1bGluZ0ZpYmVyKSB7XG4gICAgICAgICAgYWRkRmliZXJUb0xhbmVzTWFwKHJvb3QsIHNjaGVkdWxpbmdGaWJlciwgbGFuZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFjayQxKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgYWN0UXVldWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZTtcbiAgICAgIHJldHVybiBudWxsICE9PSBhY3RRdWV1ZVxuICAgICAgICA/IChhY3RRdWV1ZS5wdXNoKGNhbGxiYWNrKSwgZmFrZUFjdENhbGxiYWNrTm9kZSQxKVxuICAgICAgICA6IHNjaGVkdWxlQ2FsbGJhY2skMyhwcmlvcml0eUxldmVsLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5JZlVwZGF0ZXNOb3RXcmFwcGVkV2l0aEFjdERFVihmaWJlcikge1xuICAgICAgaXNDb25jdXJyZW50QWN0RW52aXJvbm1lbnQoKSAmJlxuICAgICAgICBudWxsID09PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSAmJlxuICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkFuIHVwZGF0ZSB0byAlcyBpbnNpZGUgYSB0ZXN0IHdhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG5XaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbmFjdCgoKSA9PiB7XFxuICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbn0pO1xcbi8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBpbiB0aGUgYnJvd3Nlci4gTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0LmRldi9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3RcIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KSB7XG4gICAgICByb290ICE9PSBsYXN0U2NoZWR1bGVkUm9vdCAmJlxuICAgICAgICBudWxsID09PSByb290Lm5leHQgJiZcbiAgICAgICAgKG51bGwgPT09IGxhc3RTY2hlZHVsZWRSb290XG4gICAgICAgICAgPyAoZmlyc3RTY2hlZHVsZWRSb290ID0gbGFzdFNjaGVkdWxlZFJvb3QgPSByb290KVxuICAgICAgICAgIDogKGxhc3RTY2hlZHVsZWRSb290ID0gbGFzdFNjaGVkdWxlZFJvb3QubmV4dCA9IHJvb3QpKTtcbiAgICAgIG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9ICEwO1xuICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWVcbiAgICAgICAgPyBkaWRTY2hlZHVsZU1pY3JvdGFza19hY3QgfHxcbiAgICAgICAgICAoKGRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCA9ICEwKSwgc2NoZWR1bGVJbW1lZGlhdGVSb290U2NoZWR1bGVUYXNrKCkpXG4gICAgICAgIDogZGlkU2NoZWR1bGVNaWNyb3Rhc2sgfHxcbiAgICAgICAgICAoKGRpZFNjaGVkdWxlTWljcm90YXNrID0gITApLCBzY2hlZHVsZUltbWVkaWF0ZVJvb3RTY2hlZHVsZVRhc2soKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKHN5bmNUcmFuc2l0aW9uTGFuZXMsIG9ubHlMZWdhY3kpIHtcbiAgICAgIGlmICghaXNGbHVzaGluZ1dvcmsgJiYgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrKSB7XG4gICAgICAgIGlzRmx1c2hpbmdXb3JrID0gITA7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICB2YXIgZGlkUGVyZm9ybVNvbWVXb3JrID0gITE7XG4gICAgICAgICAgZm9yICh2YXIgcm9vdCA9IGZpcnN0U2NoZWR1bGVkUm9vdDsgbnVsbCAhPT0gcm9vdDsgKSB7XG4gICAgICAgICAgICBpZiAoIW9ubHlMZWdhY3kpXG4gICAgICAgICAgICAgIGlmICgwICE9PSBzeW5jVHJhbnNpdGlvbkxhbmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgICAgICAgICAgIGlmICgwID09PSBwZW5kaW5nTGFuZXMpIHZhciBuZXh0TGFuZXMgPSAwO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzO1xuICAgICAgICAgICAgICAgICAgbmV4dExhbmVzID1cbiAgICAgICAgICAgICAgICAgICAgKDEgPDwgKDMxIC0gY2x6MzIoNDIgfCBzeW5jVHJhbnNpdGlvbkxhbmVzKSArIDEpKSAtIDE7XG4gICAgICAgICAgICAgICAgICBuZXh0TGFuZXMgJj0gcGVuZGluZ0xhbmVzICYgfihzdXNwZW5kZWRMYW5lcyAmIH5waW5nZWRMYW5lcyk7XG4gICAgICAgICAgICAgICAgICBuZXh0TGFuZXMgPVxuICAgICAgICAgICAgICAgICAgICBuZXh0TGFuZXMgJiAyMDEzMjY3NDFcbiAgICAgICAgICAgICAgICAgICAgICA/IChuZXh0TGFuZXMgJiAyMDEzMjY3NDEpIHwgMVxuICAgICAgICAgICAgICAgICAgICAgIDogbmV4dExhbmVzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5leHRMYW5lcyB8IDJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgMCAhPT0gbmV4dExhbmVzICYmXG4gICAgICAgICAgICAgICAgICAoKGRpZFBlcmZvcm1Tb21lV29yayA9ICEwKSxcbiAgICAgICAgICAgICAgICAgIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290LCBuZXh0TGFuZXMpKTtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgKG5leHRMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAgIChuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMoXG4gICAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IG5leHRMYW5lcyA6IDAsXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCB8fFxuICAgICAgICAgICAgICAgICAgICAgIHJvb3QudGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0XG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgIDAgPT09IChuZXh0TGFuZXMgJiAzKSB8fFxuICAgICAgICAgICAgICAgICAgICBjaGVja0lmUm9vdElzUHJlcmVuZGVyaW5nKHJvb3QsIG5leHRMYW5lcykgfHxcbiAgICAgICAgICAgICAgICAgICAgKChkaWRQZXJmb3JtU29tZVdvcmsgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290LCBuZXh0TGFuZXMpKTtcbiAgICAgICAgICAgIHJvb3QgPSByb290Lm5leHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChkaWRQZXJmb3JtU29tZVdvcmspO1xuICAgICAgICBpc0ZsdXNoaW5nV29yayA9ICExO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzUm9vdFNjaGVkdWxlSW5JbW1lZGlhdGVUYXNrKCkge1xuICAgICAgcHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzaygpIHtcbiAgICAgIG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9XG4gICAgICAgIGRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCA9XG4gICAgICAgIGRpZFNjaGVkdWxlTWljcm90YXNrID1cbiAgICAgICAgICAhMTtcbiAgICAgIHZhciBzeW5jVHJhbnNpdGlvbkxhbmVzID0gMDtcbiAgICAgIDAgIT09IGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lICYmXG4gICAgICAgIChzaG91bGRBdHRlbXB0RWFnZXJUcmFuc2l0aW9uKCkgJiZcbiAgICAgICAgICAoc3luY1RyYW5zaXRpb25MYW5lcyA9IGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lKSxcbiAgICAgICAgKGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID0gMCkpO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gbm93JDEoKSwgcHJldiA9IG51bGwsIHJvb3QgPSBmaXJzdFNjaGVkdWxlZFJvb3Q7XG4gICAgICAgIG51bGwgIT09IHJvb3Q7XG5cbiAgICAgICkge1xuICAgICAgICB2YXIgbmV4dCA9IHJvb3QubmV4dCxcbiAgICAgICAgICBuZXh0TGFuZXMgPSBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIGN1cnJlbnRUaW1lKTtcbiAgICAgICAgaWYgKDAgPT09IG5leHRMYW5lcylcbiAgICAgICAgICAocm9vdC5uZXh0ID0gbnVsbCksXG4gICAgICAgICAgICBudWxsID09PSBwcmV2ID8gKGZpcnN0U2NoZWR1bGVkUm9vdCA9IG5leHQpIDogKHByZXYubmV4dCA9IG5leHQpLFxuICAgICAgICAgICAgbnVsbCA9PT0gbmV4dCAmJiAobGFzdFNjaGVkdWxlZFJvb3QgPSBwcmV2KTtcbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgKChwcmV2ID0gcm9vdCksIDAgIT09IHN5bmNUcmFuc2l0aW9uTGFuZXMgfHwgMCAhPT0gKG5leHRMYW5lcyAmIDMpKVxuICAgICAgICApXG4gICAgICAgICAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gITA7XG4gICAgICAgIHJvb3QgPSBuZXh0O1xuICAgICAgfVxuICAgICAgZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoc3luY1RyYW5zaXRpb25MYW5lcywgITEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzLFxuICAgICAgICAgIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lcyxcbiAgICAgICAgICBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcyxcbiAgICAgICAgICBsYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgLTYyOTE0NTYxO1xuICAgICAgICAwIDwgbGFuZXM7XG5cbiAgICAgICkge1xuICAgICAgICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKSxcbiAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleCxcbiAgICAgICAgICBleHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lc1tpbmRleF07XG4gICAgICAgIGlmICgtMSA9PT0gZXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICBpZiAoMCA9PT0gKGxhbmUgJiBzdXNwZW5kZWRMYW5lcykgfHwgMCAhPT0gKGxhbmUgJiBwaW5nZWRMYW5lcykpXG4gICAgICAgICAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gY29tcHV0ZUV4cGlyYXRpb25UaW1lKGxhbmUsIGN1cnJlbnRUaW1lKTtcbiAgICAgICAgfSBlbHNlIGV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lICYmIChyb290LmV4cGlyZWRMYW5lcyB8PSBsYW5lKTtcbiAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICB9XG4gICAgICBjdXJyZW50VGltZSA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICAgIHN1c3BlbmRlZExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgICBzdXNwZW5kZWRMYW5lcyA9IGdldE5leHRMYW5lcyhcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcm9vdCA9PT0gY3VycmVudFRpbWUgPyBzdXNwZW5kZWRMYW5lcyA6IDAsXG4gICAgICAgIG51bGwgIT09IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCB8fCByb290LnRpbWVvdXRIYW5kbGUgIT09IG5vVGltZW91dFxuICAgICAgKTtcbiAgICAgIHBpbmdlZExhbmVzID0gcm9vdC5jYWxsYmFja05vZGU7XG4gICAgICBpZiAoXG4gICAgICAgIDAgPT09IHN1c3BlbmRlZExhbmVzIHx8XG4gICAgICAgIChyb290ID09PSBjdXJyZW50VGltZSAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25EYXRhIHx8XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25BY3Rpb24pKSB8fFxuICAgICAgICBudWxsICE9PSByb290LmNhbmNlbFBlbmRpbmdDb21taXRcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBudWxsICE9PSBwaW5nZWRMYW5lcyAmJiBjYW5jZWxDYWxsYmFjayhwaW5nZWRMYW5lcyksXG4gICAgICAgICAgKHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbCksXG4gICAgICAgICAgKHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IDApXG4gICAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIDAgPT09IChzdXNwZW5kZWRMYW5lcyAmIDMpIHx8XG4gICAgICAgIGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcocm9vdCwgc3VzcGVuZGVkTGFuZXMpXG4gICAgICApIHtcbiAgICAgICAgY3VycmVudFRpbWUgPSBzdXNwZW5kZWRMYW5lcyAmIC1zdXNwZW5kZWRMYW5lcztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGN1cnJlbnRUaW1lICE9PSByb290LmNhbGxiYWNrUHJpb3JpdHkgfHxcbiAgICAgICAgICAobnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgJiZcbiAgICAgICAgICAgIHBpbmdlZExhbmVzICE9PSBmYWtlQWN0Q2FsbGJhY2tOb2RlKVxuICAgICAgICApXG4gICAgICAgICAgY2FuY2VsQ2FsbGJhY2socGluZ2VkTGFuZXMpO1xuICAgICAgICBlbHNlIHJldHVybiBjdXJyZW50VGltZTtcbiAgICAgICAgc3dpdGNoIChsYW5lc1RvRXZlbnRQcmlvcml0eShzdXNwZW5kZWRMYW5lcykpIHtcbiAgICAgICAgICBjYXNlIERpc2NyZXRlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICBjYXNlIENvbnRpbnVvdXNFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgc3VzcGVuZGVkTGFuZXMgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgRGVmYXVsdEV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IE5vcm1hbFByaW9yaXR5JDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIElkbGVFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgc3VzcGVuZGVkTGFuZXMgPSBJZGxlUHJpb3JpdHk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgc3VzcGVuZGVkTGFuZXMgPSBOb3JtYWxQcmlvcml0eSQxO1xuICAgICAgICB9XG4gICAgICAgIHBpbmdlZExhbmVzID0gcGVyZm9ybVdvcmtPblJvb3RWaWFTY2hlZHVsZXJUYXNrLmJpbmQobnVsbCwgcm9vdCk7XG4gICAgICAgIG51bGwgIT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlXG4gICAgICAgICAgPyAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUucHVzaChwaW5nZWRMYW5lcyksXG4gICAgICAgICAgICAoc3VzcGVuZGVkTGFuZXMgPSBmYWtlQWN0Q2FsbGJhY2tOb2RlKSlcbiAgICAgICAgICA6IChzdXNwZW5kZWRMYW5lcyA9IHNjaGVkdWxlQ2FsbGJhY2skMyhzdXNwZW5kZWRMYW5lcywgcGluZ2VkTGFuZXMpKTtcbiAgICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gY3VycmVudFRpbWU7XG4gICAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gc3VzcGVuZGVkTGFuZXM7XG4gICAgICAgIHJldHVybiBjdXJyZW50VGltZTtcbiAgICAgIH1cbiAgICAgIG51bGwgIT09IHBpbmdlZExhbmVzICYmIGNhbmNlbENhbGxiYWNrKHBpbmdlZExhbmVzKTtcbiAgICAgIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IDI7XG4gICAgICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVyZm9ybVdvcmtPblJvb3RWaWFTY2hlZHVsZXJUYXNrKHJvb3QsIGRpZFRpbWVvdXQpIHtcbiAgICAgIG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9IGN1cnJlbnRVcGRhdGVJc05lc3RlZCA9ICExO1xuICAgICAgaWYgKFxuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyAhPT0gTk9fUEVORElOR19FRkZFQ1RTICYmXG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzICE9PSBQRU5ESU5HX1BBU1NJVkVfUEhBU0VcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIChyb290LmNhbGxiYWNrTm9kZSA9IG51bGwpLCAocm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMCksIG51bGw7XG4gICAgICB2YXIgb3JpZ2luYWxDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTtcbiAgICAgIGlmIChmbHVzaFBlbmRpbmdFZmZlY3RzKCEwKSAmJiByb290LmNhbGxiYWNrTm9kZSAhPT0gb3JpZ2luYWxDYWxsYmFja05vZGUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwID1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyRqc2NvbXAkMCA9IGdldE5leHRMYW5lcyhcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290XG4gICAgICAgICAgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyRqc2NvbXAkMFxuICAgICAgICAgIDogMCxcbiAgICAgICAgbnVsbCAhPT0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0IHx8IHJvb3QudGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0XG4gICAgICApO1xuICAgICAgaWYgKDAgPT09IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwKSByZXR1cm4gbnVsbDtcbiAgICAgIHBlcmZvcm1Xb3JrT25Sb290KFxuICAgICAgICByb290LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyRqc2NvbXAkMCxcbiAgICAgICAgZGlkVGltZW91dFxuICAgICAgKTtcbiAgICAgIHNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2socm9vdCwgbm93JDEoKSk7XG4gICAgICByZXR1cm4gbnVsbCAhPSByb290LmNhbGxiYWNrTm9kZSAmJlxuICAgICAgICByb290LmNhbGxiYWNrTm9kZSA9PT0gb3JpZ2luYWxDYWxsYmFja05vZGVcbiAgICAgICAgPyBwZXJmb3JtV29ya09uUm9vdFZpYVNjaGVkdWxlclRhc2suYmluZChudWxsLCByb290KVxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290LCBsYW5lcykge1xuICAgICAgaWYgKGZsdXNoUGVuZGluZ0VmZmVjdHMoKSkgcmV0dXJuIG51bGw7XG4gICAgICBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgPSBuZXN0ZWRVcGRhdGVTY2hlZHVsZWQ7XG4gICAgICBuZXN0ZWRVcGRhdGVTY2hlZHVsZWQgPSAhMTtcbiAgICAgIHBlcmZvcm1Xb3JrT25Sb290KHJvb3QsIGxhbmVzLCAhMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbmNlbENhbGxiYWNrKGNhbGxiYWNrTm9kZSkge1xuICAgICAgY2FsbGJhY2tOb2RlICE9PSBmYWtlQWN0Q2FsbGJhY2tOb2RlICYmXG4gICAgICAgIG51bGwgIT09IGNhbGxiYWNrTm9kZSAmJlxuICAgICAgICBjYW5jZWxDYWxsYmFjayQxKGNhbGxiYWNrTm9kZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlSW1tZWRpYXRlUm9vdFNjaGVkdWxlVGFzaygpIHtcbiAgICAgIG51bGwgIT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlICYmXG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzaygpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0XG4gICAgICAgICAgPyBzY2hlZHVsZUNhbGxiYWNrJDMoXG4gICAgICAgICAgICAgIEltbWVkaWF0ZVByaW9yaXR5LFxuICAgICAgICAgICAgICBwcm9jZXNzUm9vdFNjaGVkdWxlSW5JbW1lZGlhdGVUYXNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBwcm9jZXNzUm9vdFNjaGVkdWxlSW5NaWNyb3Rhc2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1ZXN0VHJhbnNpdGlvbkxhbmUoKSB7XG4gICAgICAwID09PSBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSAmJlxuICAgICAgICAoY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgPSBjbGFpbU5leHRUcmFuc2l0aW9uTGFuZSgpKTtcbiAgICAgIHJldHVybiBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29lcmNlRm9ybUFjdGlvblByb3AoYWN0aW9uUHJvcCkge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsID09IGFjdGlvblByb3AgfHxcbiAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIGFjdGlvblByb3AgfHxcbiAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiBhY3Rpb25Qcm9wXG4gICAgICApXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGFjdGlvblByb3ApIHJldHVybiBhY3Rpb25Qcm9wO1xuICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihhY3Rpb25Qcm9wLCBcImFjdGlvblwiKTtcbiAgICAgIHJldHVybiBzYW5pdGl6ZVVSTChcIlwiICsgYWN0aW9uUHJvcCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZvcm1EYXRhV2l0aFN1Ym1pdHRlcihmb3JtLCBzdWJtaXR0ZXIpIHtcbiAgICAgIHZhciB0ZW1wID0gc3VibWl0dGVyLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgdGVtcC5uYW1lID0gc3VibWl0dGVyLm5hbWU7XG4gICAgICB0ZW1wLnZhbHVlID0gc3VibWl0dGVyLnZhbHVlO1xuICAgICAgZm9ybS5pZCAmJiB0ZW1wLnNldEF0dHJpYnV0ZShcImZvcm1cIiwgZm9ybS5pZCk7XG4gICAgICBzdWJtaXR0ZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGVtcCwgc3VibWl0dGVyKTtcbiAgICAgIGZvcm0gPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgICB0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGVtcCk7XG4gICAgICByZXR1cm4gZm9ybTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQxKFxuICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIG1heWJlVGFyZ2V0SW5zdCxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzdWJtaXRcIiA9PT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgIG1heWJlVGFyZ2V0SW5zdCAmJlxuICAgICAgICBtYXliZVRhcmdldEluc3Quc3RhdGVOb2RlID09PSBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgKSB7XG4gICAgICAgIHZhciBhY3Rpb24gPSBjb2VyY2VGb3JtQWN0aW9uUHJvcChcbiAgICAgICAgICAgIChuYXRpdmVFdmVudFRhcmdldFtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsKS5hY3Rpb25cbiAgICAgICAgICApLFxuICAgICAgICAgIHN1Ym1pdHRlciA9IG5hdGl2ZUV2ZW50LnN1Ym1pdHRlcjtcbiAgICAgICAgc3VibWl0dGVyICYmXG4gICAgICAgICAgKChkb21FdmVudE5hbWUgPSAoZG9tRXZlbnROYW1lID0gc3VibWl0dGVyW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGwpXG4gICAgICAgICAgICA/IGNvZXJjZUZvcm1BY3Rpb25Qcm9wKGRvbUV2ZW50TmFtZS5mb3JtQWN0aW9uKVxuICAgICAgICAgICAgOiBzdWJtaXR0ZXIuZ2V0QXR0cmlidXRlKFwiZm9ybUFjdGlvblwiKSksXG4gICAgICAgICAgbnVsbCAhPT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgICAgICAoKGFjdGlvbiA9IGRvbUV2ZW50TmFtZSksIChzdWJtaXR0ZXIgPSBudWxsKSkpO1xuICAgICAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoXG4gICAgICAgICAgXCJhY3Rpb25cIixcbiAgICAgICAgICBcImFjdGlvblwiLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgKTtcbiAgICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgbGlzdGVuZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICAgICAgICBsaXN0ZW5lcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoMCAhPT0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1EYXRhID0gc3VibWl0dGVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNyZWF0ZUZvcm1EYXRhV2l0aFN1Ym1pdHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgRm9ybURhdGEobmF0aXZlRXZlbnRUYXJnZXQpLFxuICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmc6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IG5hdGl2ZUV2ZW50VGFyZ2V0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZShwZW5kaW5nU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICBzdGFydEhvc3RUcmFuc2l0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIG1heWJlVGFyZ2V0SW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYWN0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgIChldmVudC5wcmV2ZW50RGVmYXVsdCgpLFxuICAgICAgICAgICAgICAgICAgICAoZm9ybURhdGEgPSBzdWJtaXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgICA/IGNyZWF0ZUZvcm1EYXRhV2l0aFN1Ym1pdHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogbmV3IEZvcm1EYXRhKG5hdGl2ZUV2ZW50VGFyZ2V0KSksXG4gICAgICAgICAgICAgICAgICAgIChwZW5kaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVuZGluZzogITAsXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBuYXRpdmVFdmVudFRhcmdldC5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5mcmVlemUocGVuZGluZ1N0YXRlKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRIb3N0VHJhbnNpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBtYXliZVRhcmdldEluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YVxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY3VycmVudFRhcmdldDogbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlcG9ydEdsb2JhbEVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKSB7XG4gICAgICBldmVudFN5c3RlbUZsYWdzID0gMCAhPT0gKGV2ZW50U3lzdGVtRmxhZ3MgJiA0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hRdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgX2Rpc3BhdGNoUXVldWUkaSA9IGRpc3BhdGNoUXVldWVbaV07XG4gICAgICAgIGE6IHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNJbnN0YW5jZSA9IHZvaWQgMCxcbiAgICAgICAgICAgIGV2ZW50ID0gX2Rpc3BhdGNoUXVldWUkaS5ldmVudDtcbiAgICAgICAgICBfZGlzcGF0Y2hRdWV1ZSRpID0gX2Rpc3BhdGNoUXVldWUkaS5saXN0ZW5lcnM7XG4gICAgICAgICAgaWYgKGV2ZW50U3lzdGVtRmxhZ3MpXG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICB2YXIgaSRqc2NvbXAkMCA9IF9kaXNwYXRjaFF1ZXVlJGkubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgMCA8PSBpJGpzY29tcCQwO1xuICAgICAgICAgICAgICBpJGpzY29tcCQwLS1cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBfZGlzcGF0Y2hRdWV1ZSRpW2kkanNjb21wJDBdLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkubGlzdGVuZXI7XG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKVxuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIG51bGwgIT09IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgPyBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVEaXNwYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIF9kaXNwYXRjaExpc3RlbmVycyRpLCBjdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGkkanNjb21wJDAgPSAwO1xuICAgICAgICAgICAgICBpJGpzY29tcCQwIDwgX2Rpc3BhdGNoUXVldWUkaS5sZW5ndGg7XG4gICAgICAgICAgICAgIGkkanNjb21wJDArK1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpID0gX2Rpc3BhdGNoUXVldWUkaVtpJGpzY29tcCQwXTtcbiAgICAgICAgICAgICAgaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkubGlzdGVuZXI7XG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKVxuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIG51bGwgIT09IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgPyBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVEaXNwYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIF9kaXNwYXRjaExpc3RlbmVycyRpLCBjdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRFbGVtZW50KSB7XG4gICAgICBub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkgfHxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnRGlkIG5vdCBleHBlY3QgYSBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCkgY2FsbCBmb3IgXCIlc1wiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLFxuICAgICAgICAgIGRvbUV2ZW50TmFtZVxuICAgICAgICApO1xuICAgICAgdmFyIGxpc3RlbmVyU2V0ID0gdGFyZ2V0RWxlbWVudFtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldO1xuICAgICAgdm9pZCAwID09PSBsaXN0ZW5lclNldCAmJlxuICAgICAgICAobGlzdGVuZXJTZXQgPSB0YXJnZXRFbGVtZW50W2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV0gPSBuZXcgU2V0KCkpO1xuICAgICAgdmFyIGxpc3RlbmVyU2V0S2V5ID0gZG9tRXZlbnROYW1lICsgXCJfX2J1YmJsZVwiO1xuICAgICAgbGlzdGVuZXJTZXQuaGFzKGxpc3RlbmVyU2V0S2V5KSB8fFxuICAgICAgICAoYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0RWxlbWVudCwgZG9tRXZlbnROYW1lLCAyLCAhMSksXG4gICAgICAgIGxpc3RlbmVyU2V0LmFkZChsaXN0ZW5lclNldEtleSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciwgdGFyZ2V0KSB7XG4gICAgICBub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkgJiZcbiAgICAgICAgIWlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnRGlkIG5vdCBleHBlY3QgYSBsaXN0ZW5Ub05hdGl2ZUV2ZW50KCkgY2FsbCBmb3IgXCIlc1wiIGluIHRoZSBidWJibGUgcGhhc2UuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicsXG4gICAgICAgICAgZG9tRXZlbnROYW1lXG4gICAgICAgICk7XG4gICAgICB2YXIgZXZlbnRTeXN0ZW1GbGFncyA9IDA7XG4gICAgICBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyICYmIChldmVudFN5c3RlbUZsYWdzIHw9IDQpO1xuICAgICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhyb290Q29udGFpbmVyRWxlbWVudCkge1xuICAgICAgaWYgKCFyb290Q29udGFpbmVyRWxlbWVudFtsaXN0ZW5pbmdNYXJrZXJdKSB7XG4gICAgICAgIHJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0gPSAhMDtcbiAgICAgICAgYWxsTmF0aXZlRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICAgIFwic2VsZWN0aW9uY2hhbmdlXCIgIT09IGRvbUV2ZW50TmFtZSAmJlxuICAgICAgICAgICAgKG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSB8fFxuICAgICAgICAgICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgITEsIHJvb3RDb250YWluZXJFbGVtZW50KSxcbiAgICAgICAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCAhMCwgcm9vdENvbnRhaW5lckVsZW1lbnQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBvd25lckRvY3VtZW50ID1cbiAgICAgICAgICA5ID09PSByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZVxuICAgICAgICAgICAgPyByb290Q29udGFpbmVyRWxlbWVudFxuICAgICAgICAgICAgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICBudWxsID09PSBvd25lckRvY3VtZW50IHx8XG4gICAgICAgICAgb3duZXJEb2N1bWVudFtsaXN0ZW5pbmdNYXJrZXJdIHx8XG4gICAgICAgICAgKChvd25lckRvY3VtZW50W2xpc3RlbmluZ01hcmtlcl0gPSAhMCksXG4gICAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChcInNlbGVjdGlvbmNoYW5nZVwiLCAhMSwgb3duZXJEb2N1bWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcihcbiAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKGdldEV2ZW50UHJpb3JpdHkoZG9tRXZlbnROYW1lKSkge1xuICAgICAgICBjYXNlIERpc2NyZXRlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICB2YXIgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbnRpbnVvdXNFdmVudFByaW9yaXR5OlxuICAgICAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoQ29udGludW91c0V2ZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoRXZlbnQ7XG4gICAgICB9XG4gICAgICBldmVudFN5c3RlbUZsYWdzID0gbGlzdGVuZXJXcmFwcGVyLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgdGFyZ2V0Q29udGFpbmVyXG4gICAgICApO1xuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gdm9pZCAwO1xuICAgICAgIXBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkIHx8XG4gICAgICAgIChcInRvdWNoc3RhcnRcIiAhPT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgICAgXCJ0b3VjaG1vdmVcIiAhPT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgICAgXCJ3aGVlbFwiICE9PSBkb21FdmVudE5hbWUpIHx8XG4gICAgICAgIChsaXN0ZW5lcldyYXBwZXIgPSAhMCk7XG4gICAgICBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyXG4gICAgICAgID8gdm9pZCAwICE9PSBsaXN0ZW5lcldyYXBwZXJcbiAgICAgICAgICA/IHRhcmdldENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywge1xuICAgICAgICAgICAgICBjYXB0dXJlOiAhMCxcbiAgICAgICAgICAgICAgcGFzc2l2ZTogbGlzdGVuZXJXcmFwcGVyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogdGFyZ2V0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCAhMClcbiAgICAgICAgOiB2b2lkIDAgIT09IGxpc3RlbmVyV3JhcHBlclxuICAgICAgICAgID8gdGFyZ2V0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB7XG4gICAgICAgICAgICAgIHBhc3NpdmU6IGxpc3RlbmVyV3JhcHBlclxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHRhcmdldENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICAgICExXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oXG4gICAgICBkb21FdmVudE5hbWUsXG4gICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICB0YXJnZXRJbnN0JGpzY29tcCQwLFxuICAgICAgdGFyZ2V0Q29udGFpbmVyXG4gICAgKSB7XG4gICAgICB2YXIgYW5jZXN0b3JJbnN0ID0gdGFyZ2V0SW5zdCRqc2NvbXAkMDtcbiAgICAgIGlmIChcbiAgICAgICAgMCA9PT0gKGV2ZW50U3lzdGVtRmxhZ3MgJiAxKSAmJlxuICAgICAgICAwID09PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDIpICYmXG4gICAgICAgIG51bGwgIT09IHRhcmdldEluc3QkanNjb21wJDBcbiAgICAgIClcbiAgICAgICAgYTogZm9yICg7Oykge1xuICAgICAgICAgIGlmIChudWxsID09PSB0YXJnZXRJbnN0JGpzY29tcCQwKSByZXR1cm47XG4gICAgICAgICAgdmFyIG5vZGVUYWcgPSB0YXJnZXRJbnN0JGpzY29tcCQwLnRhZztcbiAgICAgICAgICBpZiAoMyA9PT0gbm9kZVRhZyB8fCA0ID09PSBub2RlVGFnKSB7XG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGFyZ2V0SW5zdCRqc2NvbXAkMC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGlmIChjb250YWluZXIgPT09IHRhcmdldENvbnRhaW5lcikgYnJlYWs7XG4gICAgICAgICAgICBpZiAoNCA9PT0gbm9kZVRhZylcbiAgICAgICAgICAgICAgZm9yIChub2RlVGFnID0gdGFyZ2V0SW5zdCRqc2NvbXAkMC5yZXR1cm47IG51bGwgIT09IG5vZGVUYWc7ICkge1xuICAgICAgICAgICAgICAgIHZhciBncmFuZFRhZyA9IG5vZGVUYWcudGFnO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICgzID09PSBncmFuZFRhZyB8fCA0ID09PSBncmFuZFRhZykgJiZcbiAgICAgICAgICAgICAgICAgIG5vZGVUYWcuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09IHRhcmdldENvbnRhaW5lclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBub2RlVGFnID0gbm9kZVRhZy5yZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoOyBudWxsICE9PSBjb250YWluZXI7ICkge1xuICAgICAgICAgICAgICBub2RlVGFnID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgPT09IG5vZGVUYWcpIHJldHVybjtcbiAgICAgICAgICAgICAgZ3JhbmRUYWcgPSBub2RlVGFnLnRhZztcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIDUgPT09IGdyYW5kVGFnIHx8XG4gICAgICAgICAgICAgICAgNiA9PT0gZ3JhbmRUYWcgfHxcbiAgICAgICAgICAgICAgICAyNiA9PT0gZ3JhbmRUYWcgfHxcbiAgICAgICAgICAgICAgICAyNyA9PT0gZ3JhbmRUYWdcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0SW5zdCRqc2NvbXAkMCA9IGFuY2VzdG9ySW5zdCA9IG5vZGVUYWc7XG4gICAgICAgICAgICAgICAgY29udGludWUgYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGFyZ2V0SW5zdCRqc2NvbXAkMCA9IHRhcmdldEluc3QkanNjb21wJDAucmV0dXJuO1xuICAgICAgICB9XG4gICAgICBiYXRjaGVkVXBkYXRlcyQxKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHRhcmdldEluc3QgPSBhbmNlc3Rvckluc3QsXG4gICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCksXG4gICAgICAgICAgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICAgICAgICBhOiB7XG4gICAgICAgICAgdmFyIHJlYWN0TmFtZSA9IHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLmdldChkb21FdmVudE5hbWUpO1xuICAgICAgICAgIGlmICh2b2lkIDAgIT09IHJlYWN0TmFtZSkge1xuICAgICAgICAgICAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0V2ZW50LFxuICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSA9IGRvbUV2ZW50TmFtZTtcbiAgICAgICAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgICAgICAgICAgIGlmICgwID09PSBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY2FzZSBcImtleWRvd25cIjpcbiAgICAgICAgICAgICAgY2FzZSBcImtleXVwXCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljS2V5Ym9hcmRFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcImZvY3VzaW5cIjpcbiAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSA9IFwiZm9jdXNcIjtcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiZm9jdXNvdXRcIjpcbiAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSA9IFwiYmx1clwiO1xuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJiZWZvcmVibHVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJhZnRlcmJsdXJcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiY2xpY2tcIjpcbiAgICAgICAgICAgICAgICBpZiAoMiA9PT0gbmF0aXZlRXZlbnQuYnV0dG9uKSBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIFwiYXV4Y2xpY2tcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRibGNsaWNrXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJtb3VzZWRvd25cIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm1vdXNlbW92ZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwibW91c2V1cFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibW91c2VvdXRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm1vdXNlb3ZlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwiY29udGV4dG1lbnVcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiZHJhZ1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiZHJhZ2VuZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZHJhZ2VudGVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnZXhpdFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZHJhZ2xlYXZlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnb3ZlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZHJhZ3N0YXJ0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcm9wXCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRHJhZ0V2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwidG91Y2hjYW5jZWxcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInRvdWNoZW5kXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJ0b3VjaG1vdmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInRvdWNoc3RhcnRcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIEFOSU1BVElPTl9FTkQ6XG4gICAgICAgICAgICAgIGNhc2UgQU5JTUFUSU9OX0lURVJBVElPTjpcbiAgICAgICAgICAgICAgY2FzZSBBTklNQVRJT05fU1RBUlQ6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQW5pbWF0aW9uRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgVFJBTlNJVElPTl9FTkQ6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVHJhbnNpdGlvbkV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwic2Nyb2xsXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzY3JvbGxlbmRcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNVSUV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwid2hlZWxcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiY29weVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiY3V0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwYXN0ZVwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiZ290cG9pbnRlcmNhcHR1cmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImxvc3Rwb2ludGVyY2FwdHVyZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwicG9pbnRlcmNhbmNlbFwiOlxuICAgICAgICAgICAgICBjYXNlIFwicG9pbnRlcmRvd25cIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBvaW50ZXJtb3ZlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwb2ludGVyb3V0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwb2ludGVyb3ZlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwicG9pbnRlcnVwXCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwidG9nZ2xlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJiZWZvcmV0b2dnbGVcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUb2dnbGVFdmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbkNhcHR1cmVQaGFzZSA9IDAgIT09IChldmVudFN5c3RlbUZsYWdzICYgNCksXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVUYXJnZXRPbmx5ID1cbiAgICAgICAgICAgICAgICAhaW5DYXB0dXJlUGhhc2UgJiZcbiAgICAgICAgICAgICAgICAoXCJzY3JvbGxcIiA9PT0gZG9tRXZlbnROYW1lIHx8IFwic2Nyb2xsZW5kXCIgPT09IGRvbUV2ZW50TmFtZSksXG4gICAgICAgICAgICAgIHJlYWN0RXZlbnROYW1lID0gaW5DYXB0dXJlUGhhc2VcbiAgICAgICAgICAgICAgICA/IG51bGwgIT09IHJlYWN0TmFtZVxuICAgICAgICAgICAgICAgICAgPyByZWFjdE5hbWUgKyBcIkNhcHR1cmVcIlxuICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgOiByZWFjdE5hbWU7XG4gICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gdGFyZ2V0SW5zdCwgbGFzdEhvc3RDb21wb25lbnQ7XG4gICAgICAgICAgICAgIG51bGwgIT09IGluc3RhbmNlO1xuXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSBfaW5zdGFuY2UyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgX2luc3RhbmNlMiA9IF9pbnN0YW5jZTIudGFnO1xuICAgICAgICAgICAgICAoNSAhPT0gX2luc3RhbmNlMiAmJiAyNiAhPT0gX2luc3RhbmNlMiAmJiAyNyAhPT0gX2luc3RhbmNlMikgfHxcbiAgICAgICAgICAgICAgICBudWxsID09PSBsYXN0SG9zdENvbXBvbmVudCB8fFxuICAgICAgICAgICAgICAgIG51bGwgPT09IHJlYWN0RXZlbnROYW1lIHx8XG4gICAgICAgICAgICAgICAgKChfaW5zdGFuY2UyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlYWN0RXZlbnROYW1lKSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPSBfaW5zdGFuY2UyICYmXG4gICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKFxuICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZTIsXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgIGlmIChhY2N1bXVsYXRlVGFyZ2V0T25seSkgYnJlYWs7XG4gICAgICAgICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgMCA8IGluQ2FwdHVyZVBoYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAoKHJlYWN0TmFtZSA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IoXG4gICAgICAgICAgICAgICAgcmVhY3ROYW1lLFxuICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IHJlYWN0TmFtZSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnM6IGluQ2FwdHVyZVBoYXNlXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKDAgPT09IChldmVudFN5c3RlbUZsYWdzICYgNykpIHtcbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICByZWFjdE5hbWUgPVxuICAgICAgICAgICAgICBcIm1vdXNlb3ZlclwiID09PSBkb21FdmVudE5hbWUgfHwgXCJwb2ludGVyb3ZlclwiID09PSBkb21FdmVudE5hbWU7XG4gICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPVxuICAgICAgICAgICAgICBcIm1vdXNlb3V0XCIgPT09IGRvbUV2ZW50TmFtZSB8fCBcInBvaW50ZXJvdXRcIiA9PT0gZG9tRXZlbnROYW1lO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICByZWFjdE5hbWUgJiZcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQgIT09IGN1cnJlbnRSZXBsYXlpbmdFdmVudCAmJlxuICAgICAgICAgICAgICAocmVhY3RFdmVudFR5cGUgPVxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQuZnJvbUVsZW1lbnQpICYmXG4gICAgICAgICAgICAgIChnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShyZWFjdEV2ZW50VHlwZSkgfHxcbiAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIGlmIChTeW50aGV0aWNFdmVudEN0b3IgfHwgcmVhY3ROYW1lKSB7XG4gICAgICAgICAgICAgIHJlYWN0TmFtZSA9XG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXQud2luZG93ID09PSBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICAgICAgPyBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICAgICAgOiAocmVhY3ROYW1lID0gbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudClcbiAgICAgICAgICAgICAgICAgICAgPyByZWFjdE5hbWUuZGVmYXVsdFZpZXcgfHwgcmVhY3ROYW1lLnBhcmVudFdpbmRvd1xuICAgICAgICAgICAgICAgICAgICA6IHdpbmRvdztcbiAgICAgICAgICAgICAgaWYgKFN5bnRoZXRpY0V2ZW50Q3Rvcikge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICgocmVhY3RFdmVudFR5cGUgPVxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnRvRWxlbWVudCksXG4gICAgICAgICAgICAgICAgICAoU3ludGhldGljRXZlbnRDdG9yID0gdGFyZ2V0SW5zdCksXG4gICAgICAgICAgICAgICAgICAocmVhY3RFdmVudFR5cGUgPSByZWFjdEV2ZW50VHlwZVxuICAgICAgICAgICAgICAgICAgICA/IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJlYWN0RXZlbnRUeXBlKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwpLFxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcmVhY3RFdmVudFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKChhY2N1bXVsYXRlVGFyZ2V0T25seSA9XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihyZWFjdEV2ZW50VHlwZSkpLFxuICAgICAgICAgICAgICAgICAgICAoaW5DYXB0dXJlUGhhc2UgPSByZWFjdEV2ZW50VHlwZS50YWcpLFxuICAgICAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSAhPT0gYWNjdW11bGF0ZVRhcmdldE9ubHkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoNSAhPT0gaW5DYXB0dXJlUGhhc2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDI3ICE9PSBpbkNhcHR1cmVQaGFzZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgNiAhPT0gaW5DYXB0dXJlUGhhc2UpKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZSAoU3ludGhldGljRXZlbnRDdG9yID0gbnVsbCksIChyZWFjdEV2ZW50VHlwZSA9IHRhcmdldEluc3QpO1xuICAgICAgICAgICAgICBpZiAoU3ludGhldGljRXZlbnRDdG9yICE9PSByZWFjdEV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UyID0gXCJvbk1vdXNlTGVhdmVcIjtcbiAgICAgICAgICAgICAgICByZWFjdEV2ZW50TmFtZSA9IFwib25Nb3VzZUVudGVyXCI7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBcIm1vdXNlXCI7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgXCJwb2ludGVyb3V0XCIgPT09IGRvbUV2ZW50TmFtZSB8fFxuICAgICAgICAgICAgICAgICAgXCJwb2ludGVyb3ZlclwiID09PSBkb21FdmVudE5hbWVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAoaW5DYXB0dXJlUGhhc2UgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQpLFxuICAgICAgICAgICAgICAgICAgICAoX2luc3RhbmNlMiA9IFwib25Qb2ludGVyTGVhdmVcIiksXG4gICAgICAgICAgICAgICAgICAgIChyZWFjdEV2ZW50TmFtZSA9IFwib25Qb2ludGVyRW50ZXJcIiksXG4gICAgICAgICAgICAgICAgICAgIChpbnN0YW5jZSA9IFwicG9pbnRlclwiKTtcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRlVGFyZ2V0T25seSA9XG4gICAgICAgICAgICAgICAgICBudWxsID09IFN5bnRoZXRpY0V2ZW50Q3RvclxuICAgICAgICAgICAgICAgICAgICA/IHJlYWN0TmFtZVxuICAgICAgICAgICAgICAgICAgICA6IGdldE5vZGVGcm9tSW5zdGFuY2UoU3ludGhldGljRXZlbnRDdG9yKTtcbiAgICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudCA9XG4gICAgICAgICAgICAgICAgICBudWxsID09IHJlYWN0RXZlbnRUeXBlXG4gICAgICAgICAgICAgICAgICAgID8gcmVhY3ROYW1lXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0Tm9kZUZyb21JbnN0YW5jZShyZWFjdEV2ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgcmVhY3ROYW1lID0gbmV3IGluQ2FwdHVyZVBoYXNlKFxuICAgICAgICAgICAgICAgICAgX2luc3RhbmNlMixcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlICsgXCJsZWF2ZVwiLFxuICAgICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yLFxuICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmVhY3ROYW1lLnRhcmdldCA9IGFjY3VtdWxhdGVUYXJnZXRPbmx5O1xuICAgICAgICAgICAgICAgIHJlYWN0TmFtZS5yZWxhdGVkVGFyZ2V0ID0gbGFzdEhvc3RDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgX2luc3RhbmNlMiA9IG51bGw7XG4gICAgICAgICAgICAgICAgZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpID09PSB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgICAgICAgICAoKGluQ2FwdHVyZVBoYXNlID0gbmV3IGluQ2FwdHVyZVBoYXNlKFxuICAgICAgICAgICAgICAgICAgICByZWFjdEV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgKyBcImVudGVyXCIsXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgKGluQ2FwdHVyZVBoYXNlLnRhcmdldCA9IGxhc3RIb3N0Q29tcG9uZW50KSxcbiAgICAgICAgICAgICAgICAgIChpbkNhcHR1cmVQaGFzZS5yZWxhdGVkVGFyZ2V0ID0gYWNjdW11bGF0ZVRhcmdldE9ubHkpLFxuICAgICAgICAgICAgICAgICAgKF9pbnN0YW5jZTIgPSBpbkNhcHR1cmVQaGFzZSkpO1xuICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVUYXJnZXRPbmx5ID0gX2luc3RhbmNlMjtcbiAgICAgICAgICAgICAgICBpZiAoU3ludGhldGljRXZlbnRDdG9yICYmIHJlYWN0RXZlbnRUeXBlKVxuICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSA9IFN5bnRoZXRpY0V2ZW50Q3RvcjtcbiAgICAgICAgICAgICAgICAgICAgcmVhY3RFdmVudE5hbWUgPSByZWFjdEV2ZW50VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID0gaW5DYXB0dXJlUGhhc2U7XG4gICAgICAgICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSBnZXRQYXJlbnQobGFzdEhvc3RDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSsrO1xuICAgICAgICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlMiA9IHJlYWN0RXZlbnROYW1lO1xuICAgICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZTI7XG4gICAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlMiA9IGdldFBhcmVudChfaW5zdGFuY2UyKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQrKztcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IDAgPCBpbnN0YW5jZSAtIGxhc3RIb3N0Q29tcG9uZW50OyApXG4gICAgICAgICAgICAgICAgICAgICAgKGluQ2FwdHVyZVBoYXNlID0gZ2V0UGFyZW50KGluQ2FwdHVyZVBoYXNlKSksIGluc3RhbmNlLS07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyAwIDwgbGFzdEhvc3RDb21wb25lbnQgLSBpbnN0YW5jZTsgKVxuICAgICAgICAgICAgICAgICAgICAgIChyZWFjdEV2ZW50TmFtZSA9IGdldFBhcmVudChyZWFjdEV2ZW50TmFtZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQtLTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGluc3RhbmNlLS07ICkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID09PSByZWFjdEV2ZW50TmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgIT09IHJlYWN0RXZlbnROYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID09PSByZWFjdEV2ZW50TmFtZS5hbHRlcm5hdGUpXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSA9IGdldFBhcmVudChpbkNhcHR1cmVQaGFzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3RFdmVudE5hbWUgPSBnZXRQYXJlbnQocmVhY3RFdmVudE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGluQ2FwdHVyZVBoYXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBudWxsICE9PSBTeW50aGV0aWNFdmVudEN0b3IgJiZcbiAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yLFxuICAgICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSxcbiAgICAgICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcmVhY3RFdmVudFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGFjY3VtdWxhdGVUYXJnZXRPbmx5ICYmXG4gICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlVGFyZ2V0T25seSxcbiAgICAgICAgICAgICAgICAgICAgcmVhY3RFdmVudFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlLFxuICAgICAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICByZWFjdE5hbWUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcbiAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9XG4gICAgICAgICAgICAgIHJlYWN0TmFtZS5ub2RlTmFtZSAmJiByZWFjdE5hbWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgXCJzZWxlY3RcIiA9PT0gU3ludGhldGljRXZlbnRDdG9yIHx8XG4gICAgICAgICAgICAgIChcImlucHV0XCIgPT09IFN5bnRoZXRpY0V2ZW50Q3RvciAmJiBcImZpbGVcIiA9PT0gcmVhY3ROYW1lLnR5cGUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHZhciBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVGV4dElucHV0RWxlbWVudChyZWFjdE5hbWUpKVxuICAgICAgICAgICAgICBpZiAoaXNJbnB1dEV2ZW50U3VwcG9ydGVkKVxuICAgICAgICAgICAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudDtcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgICAgICAgICAgIHZhciBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgKFN5bnRoZXRpY0V2ZW50Q3RvciA9IHJlYWN0TmFtZS5ub2RlTmFtZSksXG4gICAgICAgICAgICAgICAgIVN5bnRoZXRpY0V2ZW50Q3RvciB8fFxuICAgICAgICAgICAgICAgIFwiaW5wdXRcIiAhPT0gU3ludGhldGljRXZlbnRDdG9yLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgICAgICAgICAoXCJjaGVja2JveFwiICE9PSByZWFjdE5hbWUudHlwZSAmJiBcInJhZGlvXCIgIT09IHJlYWN0TmFtZS50eXBlKVxuICAgICAgICAgICAgICAgICAgPyB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tRWxlbWVudCh0YXJnZXRJbnN0LmVsZW1lbnRUeXBlKSAmJlxuICAgICAgICAgICAgICAgICAgICAoZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQpXG4gICAgICAgICAgICAgICAgICA6IChnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgJiZcbiAgICAgICAgICAgICAgKGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICAgICAgICBnZXRUYXJnZXRJbnN0RnVuYyxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFuZGxlRXZlbnRGdW5jICYmXG4gICAgICAgICAgICAgIGhhbmRsZUV2ZW50RnVuYyhkb21FdmVudE5hbWUsIHJlYWN0TmFtZSwgdGFyZ2V0SW5zdCk7XG4gICAgICAgICAgICBcImZvY3Vzb3V0XCIgPT09IGRvbUV2ZW50TmFtZSAmJlxuICAgICAgICAgICAgICB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgICAgIFwibnVtYmVyXCIgPT09IHJlYWN0TmFtZS50eXBlICYmXG4gICAgICAgICAgICAgIG51bGwgIT0gdGFyZ2V0SW5zdC5tZW1vaXplZFByb3BzLnZhbHVlICYmXG4gICAgICAgICAgICAgIHNldERlZmF1bHRWYWx1ZShyZWFjdE5hbWUsIFwibnVtYmVyXCIsIHJlYWN0TmFtZS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IHRhcmdldEluc3RcbiAgICAgICAgICAgID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KVxuICAgICAgICAgICAgOiB3aW5kb3c7XG4gICAgICAgICAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJmb2N1c2luXCI6XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpc1RleHRJbnB1dEVsZW1lbnQoaGFuZGxlRXZlbnRGdW5jKSB8fFxuICAgICAgICAgICAgICAgIFwidHJ1ZVwiID09PSBoYW5kbGVFdmVudEZ1bmMuY29udGVudEVkaXRhYmxlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAoYWN0aXZlRWxlbWVudCA9IGhhbmRsZUV2ZW50RnVuYyksXG4gICAgICAgICAgICAgICAgICAoYWN0aXZlRWxlbWVudEluc3QgPSB0YXJnZXRJbnN0KSxcbiAgICAgICAgICAgICAgICAgIChsYXN0U2VsZWN0aW9uID0gbnVsbCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImZvY3Vzb3V0XCI6XG4gICAgICAgICAgICAgIGxhc3RTZWxlY3Rpb24gPSBhY3RpdmVFbGVtZW50SW5zdCA9IGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtb3VzZWRvd25cIjpcbiAgICAgICAgICAgICAgbW91c2VEb3duID0gITA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNvbnRleHRtZW51XCI6XG4gICAgICAgICAgICBjYXNlIFwibW91c2V1cFwiOlxuICAgICAgICAgICAgY2FzZSBcImRyYWdlbmRcIjpcbiAgICAgICAgICAgICAgbW91c2VEb3duID0gITE7XG4gICAgICAgICAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic2VsZWN0aW9uY2hhbmdlXCI6XG4gICAgICAgICAgICAgIGlmIChza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQpIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImtleWRvd25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJrZXl1cFwiOlxuICAgICAgICAgICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChcbiAgICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBmYWxsYmFja0RhdGE7XG4gICAgICAgICAgaWYgKGNhblVzZUNvbXBvc2l0aW9uRXZlbnQpXG4gICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uc3RhcnRcIjpcbiAgICAgICAgICAgICAgICAgIHZhciBldmVudFR5cGUgPSBcIm9uQ29tcG9zaXRpb25TdGFydFwiO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpcbiAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9IFwib25Db21wb3NpdGlvbkVuZFwiO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29tcG9zaXRpb251cGRhdGVcIjpcbiAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9IFwib25Db21wb3NpdGlvblVwZGF0ZVwiO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBldmVudFR5cGUgPSB2b2lkIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaXNDb21wb3NpbmdcbiAgICAgICAgICAgICAgPyBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkgJiZcbiAgICAgICAgICAgICAgICAoZXZlbnRUeXBlID0gXCJvbkNvbXBvc2l0aW9uRW5kXCIpXG4gICAgICAgICAgICAgIDogXCJrZXlkb3duXCIgPT09IGRvbUV2ZW50TmFtZSAmJlxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmtleUNvZGUgPT09IFNUQVJUX0tFWUNPREUgJiZcbiAgICAgICAgICAgICAgICAoZXZlbnRUeXBlID0gXCJvbkNvbXBvc2l0aW9uU3RhcnRcIik7XG4gICAgICAgICAgZXZlbnRUeXBlICYmXG4gICAgICAgICAgICAodXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiZcbiAgICAgICAgICAgICAgXCJrb1wiICE9PSBuYXRpdmVFdmVudC5sb2NhbGUgJiZcbiAgICAgICAgICAgICAgKGlzQ29tcG9zaW5nIHx8IFwib25Db21wb3NpdGlvblN0YXJ0XCIgIT09IGV2ZW50VHlwZVxuICAgICAgICAgICAgICAgID8gXCJvbkNvbXBvc2l0aW9uRW5kXCIgPT09IGV2ZW50VHlwZSAmJlxuICAgICAgICAgICAgICAgICAgaXNDb21wb3NpbmcgJiZcbiAgICAgICAgICAgICAgICAgIChmYWxsYmFja0RhdGEgPSBnZXREYXRhKCkpXG4gICAgICAgICAgICAgICAgOiAoKHJvb3QgPSBuYXRpdmVFdmVudFRhcmdldCksXG4gICAgICAgICAgICAgICAgICAoc3RhcnRUZXh0ID0gXCJ2YWx1ZVwiIGluIHJvb3QgPyByb290LnZhbHVlIDogcm9vdC50ZXh0Q29udGVudCksXG4gICAgICAgICAgICAgICAgICAoaXNDb21wb3NpbmcgPSAhMCkpKSxcbiAgICAgICAgICAgIChoYW5kbGVFdmVudEZ1bmMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoXG4gICAgICAgICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgICAgICAgIGV2ZW50VHlwZVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAwIDwgaGFuZGxlRXZlbnRGdW5jLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAoKGV2ZW50VHlwZSA9IG5ldyBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50KFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgIGxpc3RlbmVyczogaGFuZGxlRXZlbnRGdW5jXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBmYWxsYmFja0RhdGFcbiAgICAgICAgICAgICAgICA/IChldmVudFR5cGUuZGF0YSA9IGZhbGxiYWNrRGF0YSlcbiAgICAgICAgICAgICAgICA6ICgoZmFsbGJhY2tEYXRhID0gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkpLFxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZmFsbGJhY2tEYXRhICYmIChldmVudFR5cGUuZGF0YSA9IGZhbGxiYWNrRGF0YSkpKSk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGZhbGxiYWNrRGF0YSA9IGNhblVzZVRleHRJbnB1dEV2ZW50XG4gICAgICAgICAgICAgID8gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KVxuICAgICAgICAgICAgICA6IGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSlcbiAgICAgICAgICApXG4gICAgICAgICAgICAoZXZlbnRUeXBlID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKFxuICAgICAgICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICAgICAgICBcIm9uQmVmb3JlSW5wdXRcIlxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIDAgPCBldmVudFR5cGUubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgKChoYW5kbGVFdmVudEZ1bmMgPSBuZXcgU3ludGhldGljSW5wdXRFdmVudChcbiAgICAgICAgICAgICAgICAgIFwib25CZWZvcmVJbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgXCJiZWZvcmVpbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgZXZlbnQ6IGhhbmRsZUV2ZW50RnVuYyxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyczogZXZlbnRUeXBlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKGhhbmRsZUV2ZW50RnVuYy5kYXRhID0gZmFsbGJhY2tEYXRhKSk7XG4gICAgICAgICAgZXh0cmFjdEV2ZW50cyQxKFxuICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgY2FwdHVyZU5hbWUgPSByZWFjdE5hbWUgKyBcIkNhcHR1cmVcIiwgbGlzdGVuZXJzID0gW107XG4gICAgICAgIG51bGwgIT09IHRhcmdldEZpYmVyO1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTMgPSB0YXJnZXRGaWJlcixcbiAgICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UzLnN0YXRlTm9kZTtcbiAgICAgICAgX2luc3RhbmNlMyA9IF9pbnN0YW5jZTMudGFnO1xuICAgICAgICAoNSAhPT0gX2luc3RhbmNlMyAmJiAyNiAhPT0gX2luc3RhbmNlMyAmJiAyNyAhPT0gX2luc3RhbmNlMykgfHxcbiAgICAgICAgICBudWxsID09PSBzdGF0ZU5vZGUgfHxcbiAgICAgICAgICAoKF9pbnN0YW5jZTMgPSBnZXRMaXN0ZW5lcih0YXJnZXRGaWJlciwgY2FwdHVyZU5hbWUpKSxcbiAgICAgICAgICBudWxsICE9IF9pbnN0YW5jZTMgJiZcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KFxuICAgICAgICAgICAgICBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKHRhcmdldEZpYmVyLCBfaW5zdGFuY2UzLCBzdGF0ZU5vZGUpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIChfaW5zdGFuY2UzID0gZ2V0TGlzdGVuZXIodGFyZ2V0RmliZXIsIHJlYWN0TmFtZSkpLFxuICAgICAgICAgIG51bGwgIT0gX2luc3RhbmNlMyAmJlxuICAgICAgICAgICAgbGlzdGVuZXJzLnB1c2goXG4gICAgICAgICAgICAgIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIodGFyZ2V0RmliZXIsIF9pbnN0YW5jZTMsIHN0YXRlTm9kZSlcbiAgICAgICAgICAgICkpO1xuICAgICAgICBpZiAoMyA9PT0gdGFyZ2V0RmliZXIudGFnKSByZXR1cm4gbGlzdGVuZXJzO1xuICAgICAgICB0YXJnZXRGaWJlciA9IHRhcmdldEZpYmVyLnJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgICAgIGlmIChudWxsID09PSBpbnN0KSByZXR1cm4gbnVsbDtcbiAgICAgIGRvIGluc3QgPSBpbnN0LnJldHVybjtcbiAgICAgIHdoaWxlIChpbnN0ICYmIDUgIT09IGluc3QudGFnICYmIDI3ICE9PSBpbnN0LnRhZyk7XG4gICAgICByZXR1cm4gaW5zdCA/IGluc3QgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KFxuICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgIGV2ZW50LFxuICAgICAgdGFyZ2V0LFxuICAgICAgY29tbW9uLFxuICAgICAgaW5DYXB0dXJlUGhhc2VcbiAgICApIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID0gZXZlbnQuX3JlYWN0TmFtZSwgbGlzdGVuZXJzID0gW107XG4gICAgICAgIG51bGwgIT09IHRhcmdldCAmJiB0YXJnZXQgIT09IGNvbW1vbjtcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBfaW5zdGFuY2U0ID0gdGFyZ2V0LFxuICAgICAgICAgIGFsdGVybmF0ZSA9IF9pbnN0YW5jZTQuYWx0ZXJuYXRlLFxuICAgICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTQuc3RhdGVOb2RlO1xuICAgICAgICBfaW5zdGFuY2U0ID0gX2luc3RhbmNlNC50YWc7XG4gICAgICAgIGlmIChudWxsICE9PSBhbHRlcm5hdGUgJiYgYWx0ZXJuYXRlID09PSBjb21tb24pIGJyZWFrO1xuICAgICAgICAoNSAhPT0gX2luc3RhbmNlNCAmJiAyNiAhPT0gX2luc3RhbmNlNCAmJiAyNyAhPT0gX2luc3RhbmNlNCkgfHxcbiAgICAgICAgICBudWxsID09PSBzdGF0ZU5vZGUgfHxcbiAgICAgICAgICAoKGFsdGVybmF0ZSA9IHN0YXRlTm9kZSksXG4gICAgICAgICAgaW5DYXB0dXJlUGhhc2VcbiAgICAgICAgICAgID8gKChzdGF0ZU5vZGUgPSBnZXRMaXN0ZW5lcih0YXJnZXQsIHJlZ2lzdHJhdGlvbk5hbWUpKSxcbiAgICAgICAgICAgICAgbnVsbCAhPSBzdGF0ZU5vZGUgJiZcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIodGFyZ2V0LCBzdGF0ZU5vZGUsIGFsdGVybmF0ZSlcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgOiBpbkNhcHR1cmVQaGFzZSB8fFxuICAgICAgICAgICAgICAoKHN0YXRlTm9kZSA9IGdldExpc3RlbmVyKHRhcmdldCwgcmVnaXN0cmF0aW9uTmFtZSkpLFxuICAgICAgICAgICAgICBudWxsICE9IHN0YXRlTm9kZSAmJlxuICAgICAgICAgICAgICAgIGxpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcih0YXJnZXQsIHN0YXRlTm9kZSwgYWx0ZXJuYXRlKVxuICAgICAgICAgICAgICAgICkpKTtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnJldHVybjtcbiAgICAgIH1cbiAgICAgIDAgIT09IGxpc3RlbmVycy5sZW5ndGggJiZcbiAgICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHsgZXZlbnQ6IGV2ZW50LCBsaXN0ZW5lcnM6IGxpc3RlbmVycyB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0eXBlLCBwcm9wcykge1xuICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMpO1xuICAgICAgKFwiaW5wdXRcIiAhPT0gdHlwZSAmJiBcInRleHRhcmVhXCIgIT09IHR5cGUgJiYgXCJzZWxlY3RcIiAhPT0gdHlwZSkgfHxcbiAgICAgICAgbnVsbCA9PSBwcm9wcyB8fFxuICAgICAgICBudWxsICE9PSBwcm9wcy52YWx1ZSB8fFxuICAgICAgICBkaWRXYXJuVmFsdWVOdWxsIHx8XG4gICAgICAgICgoZGlkV2FyblZhbHVlTnVsbCA9ICEwKSxcbiAgICAgICAgXCJzZWxlY3RcIiA9PT0gdHlwZSAmJiBwcm9wcy5tdWx0aXBsZVxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuIENvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IGFycmF5IHdoZW4gYG11bHRpcGxlYCBpcyBzZXQgdG8gYHRydWVgIHRvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLlwiLFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImB2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgc3RyaW5nIHRvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLlwiLFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICApKTtcbiAgICAgIHZhciBldmVudFJlZ2lzdHJ5ID0ge1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzOiByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzOiBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzXG4gICAgICB9O1xuICAgICAgaXNDdXN0b21FbGVtZW50KHR5cGUpIHx8XG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwcm9wcy5pcyB8fFxuICAgICAgICB3YXJuVW5rbm93blByb3BlcnRpZXModHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpO1xuICAgICAgcHJvcHMuY29udGVudEVkaXRhYmxlICYmXG4gICAgICAgICFwcm9wcy5zdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgJiZcbiAgICAgICAgbnVsbCAhPSBwcm9wcy5jaGlsZHJlbiAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJlbmAgbWFuYWdlZCBieSBSZWFjdC4gSXQgaXMgbm93IHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gZ3VhcmFudGVlIHRoYXQgbm9uZSBvZiB0aG9zZSBub2RlcyBhcmUgdW5leHBlY3RlZGx5IG1vZGlmaWVkIG9yIGR1cGxpY2F0ZWQuIFRoaXMgaXMgcHJvYmFibHkgbm90IGludGVudGlvbmFsLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgIHByb3BOYW1lLFxuICAgICAgc2VydmVyVmFsdWUsXG4gICAgICBjbGllbnRWYWx1ZSxcbiAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgKSB7XG4gICAgICBzZXJ2ZXJWYWx1ZSAhPT0gY2xpZW50VmFsdWUgJiZcbiAgICAgICAgKChjbGllbnRWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRWYWx1ZSkpLFxuICAgICAgICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVmFsdWUpICE9PSBjbGllbnRWYWx1ZSAmJlxuICAgICAgICAgIChzZXJ2ZXJEaWZmZXJlbmNlc1twcm9wTmFtZV0gPSBzZXJ2ZXJWYWx1ZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzKFxuICAgICAgZG9tRWxlbWVudCxcbiAgICAgIGF0dHJpYnV0ZU5hbWVzLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIGF0dHJpYnV0ZU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNbZ2V0UHJvcE5hbWVGcm9tQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKV0gPVxuICAgICAgICAgIFwic3R5bGVcIiA9PT0gYXR0cmlidXRlTmFtZVxuICAgICAgICAgICAgPyBnZXRTdHlsZXNPYmplY3RGcm9tRWxlbWVudChkb21FbGVtZW50KVxuICAgICAgICAgICAgOiBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHtcbiAgICAgICExID09PSBsaXN0ZW5lclxuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYGZhbHNlYC5cXG5cXG5JZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgcGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuXCIsXG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lLFxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSxcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWVcbiAgICAgICAgICApXG4gICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGAlc2AgdHlwZS5cIixcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgICAgICAgICB0eXBlb2YgbGlzdGVuZXJcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub3JtYWxpemVIVE1MKHBhcmVudCwgaHRtbCkge1xuICAgICAgcGFyZW50ID1cbiAgICAgICAgcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSF9OQU1FU1BBQ0UgfHxcbiAgICAgICAgcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRVxuICAgICAgICAgID8gcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgICAgICBwYXJlbnQubmFtZXNwYWNlVVJJLFxuICAgICAgICAgICAgICBwYXJlbnQudGFnTmFtZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChwYXJlbnQudGFnTmFtZSk7XG4gICAgICBwYXJlbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIHJldHVybiBwYXJlbnQuaW5uZXJIVE1MO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUobWFya3VwKSB7XG4gICAgICB3aWxsQ29lcmNpb25UaHJvdyhtYXJrdXApICYmXG4gICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIEhUTUwgbWFya3VwIHVzZXMgYSB2YWx1ZSBvZiB1bnN1cHBvcnRlZCB0eXBlICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICB0eXBlTmFtZShtYXJrdXApXG4gICAgICAgICksXG4gICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbihtYXJrdXApKTtcbiAgICAgIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG1hcmt1cCA/IG1hcmt1cCA6IFwiXCIgKyBtYXJrdXApXG4gICAgICAgIC5yZXBsYWNlKE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCwgXCJcXG5cIilcbiAgICAgICAgLnJlcGxhY2UoTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYLCBcIlwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tGb3JVbm1hdGNoZWRUZXh0KHNlcnZlclRleHQsIGNsaWVudFRleHQpIHtcbiAgICAgIGNsaWVudFRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VGV4dCk7XG4gICAgICByZXR1cm4gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclRleHQpID09PSBjbGllbnRUZXh0XG4gICAgICAgID8gITBcbiAgICAgICAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9vcCQxKCkge31cbiAgICBmdW5jdGlvbiBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywga2V5LCB2YWx1ZSwgcHJvcHMsIHByZXZWYWx1ZSkge1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB2YWx1ZSlcbiAgICAgICAgICAgIHZhbGlkYXRlVGV4dE5lc3RpbmcodmFsdWUsIHRhZywgITEpLFxuICAgICAgICAgICAgICBcImJvZHlcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICAgICAgKFwidGV4dGFyZWFcIiA9PT0gdGFnICYmIFwiXCIgPT09IHZhbHVlKSB8fFxuICAgICAgICAgICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIHZhbHVlKTtcbiAgICAgICAgICBlbHNlIGlmIChcIm51bWJlclwiID09PSB0eXBlb2YgdmFsdWUgfHwgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIHZhbHVlKVxuICAgICAgICAgICAgdmFsaWRhdGVUZXh0TmVzdGluZyhcIlwiICsgdmFsdWUsIHRhZywgITEpLFxuICAgICAgICAgICAgICBcImJvZHlcIiAhPT0gdGFnICYmIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjbGFzc05hbWVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlKGRvbUVsZW1lbnQsIFwiY2xhc3NcIiwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidGFiSW5kZXhcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlKGRvbUVsZW1lbnQsIFwidGFiaW5kZXhcIiwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGlyXCI6XG4gICAgICAgIGNhc2UgXCJyb2xlXCI6XG4gICAgICAgIGNhc2UgXCJ2aWV3Qm94XCI6XG4gICAgICAgIGNhc2UgXCJ3aWR0aFwiOlxuICAgICAgICBjYXNlIFwiaGVpZ2h0XCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JLbm93bkF0dHJpYnV0ZShkb21FbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgdmFsdWUsIHByZXZWYWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkYXRhXCI6XG4gICAgICAgICAgaWYgKFwib2JqZWN0XCIgIT09IHRhZykge1xuICAgICAgICAgICAgc2V0VmFsdWVGb3JLbm93bkF0dHJpYnV0ZShkb21FbGVtZW50LCBcImRhdGFcIiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3JjXCI6XG4gICAgICAgIGNhc2UgXCJocmVmXCI6XG4gICAgICAgICAgaWYgKFwiXCIgPT09IHZhbHVlICYmIChcImFcIiAhPT0gdGFnIHx8IFwiaHJlZlwiICE9PSBrZXkpKSB7XG4gICAgICAgICAgICBcInNyY1wiID09PSBrZXlcbiAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgJ0FuIGVtcHR5IHN0cmluZyAoXCJcIikgd2FzIHBhc3NlZCB0byB0aGUgJXMgYXR0cmlidXRlLiBUaGlzIG1heSBjYXVzZSB0aGUgYnJvd3NlciB0byBkb3dubG9hZCB0aGUgd2hvbGUgcGFnZSBhZ2FpbiBvdmVyIHRoZSBuZXR3b3JrLiBUbyBmaXggdGhpcywgZWl0aGVyIGRvIG5vdCByZW5kZXIgdGhlIGVsZW1lbnQgYXQgYWxsIG9yIHBhc3MgbnVsbCB0byAlcyBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN0cmluZy4nLFxuICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAnQW4gZW1wdHkgc3RyaW5nIChcIlwiKSB3YXMgcGFzc2VkIHRvIHRoZSAlcyBhdHRyaWJ1dGUuIFRvIGZpeCB0aGlzLCBlaXRoZXIgZG8gbm90IHJlbmRlciB0aGUgZWxlbWVudCBhdCBhbGwgb3IgcGFzcyBudWxsIHRvICVzIGluc3RlYWQgb2YgYW4gZW1wdHkgc3RyaW5nLicsXG4gICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBudWxsID09IHZhbHVlIHx8XG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSk7XG4gICAgICAgICAgdmFsdWUgPSBzYW5pdGl6ZVVSTChcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYWN0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJmb3JtQWN0aW9uXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZm9ybVwiID09PSB0YWdcbiAgICAgICAgICAgICAgPyBcImZvcm1BY3Rpb25cIiA9PT0ga2V5XG4gICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIllvdSBjYW4gb25seSBwYXNzIHRoZSBmb3JtQWN0aW9uIHByb3AgdG8gPGlucHV0PiBvciA8YnV0dG9uPi4gVXNlIHRoZSBhY3Rpb24gcHJvcCBvbiA8Zm9ybT4uXCJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAoKG51bGwgPT0gcHJvcHMuZW5jVHlwZSAmJiBudWxsID09IHByb3BzLm1ldGhvZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25NZXRob2QgfHxcbiAgICAgICAgICAgICAgICAgICAgKChkaWRXYXJuRm9ybUFjdGlvbk1ldGhvZCA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGEgZW5jVHlwZSBvciBtZXRob2QgZm9yIGEgZm9ybSB0aGF0IHNwZWNpZmllcyBhIGZ1bmN0aW9uIGFzIHRoZSBhY3Rpb24uIFJlYWN0IHByb3ZpZGVzIHRob3NlIGF1dG9tYXRpY2FsbHkuIFRoZXkgd2lsbCBnZXQgb3ZlcnJpZGRlbi5cIlxuICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgPT0gcHJvcHMudGFyZ2V0IHx8XG4gICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVGFyZ2V0IHx8XG4gICAgICAgICAgICAgICAgICAgICgoZGlkV2FybkZvcm1BY3Rpb25UYXJnZXQgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3Qgc3BlY2lmeSBhIHRhcmdldCBmb3IgYSBmb3JtIHRoYXQgc3BlY2lmaWVzIGEgZnVuY3Rpb24gYXMgdGhlIGFjdGlvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIHdpbmRvdy5cIlxuICAgICAgICAgICAgICAgICAgICApKSlcbiAgICAgICAgICAgICAgOiBcImlucHV0XCIgPT09IHRhZyB8fCBcImJ1dHRvblwiID09PSB0YWdcbiAgICAgICAgICAgICAgICA/IFwiYWN0aW9uXCIgPT09IGtleVxuICAgICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiWW91IGNhbiBvbmx5IHBhc3MgdGhlIGFjdGlvbiBwcm9wIHRvIDxmb3JtPi4gVXNlIHRoZSBmb3JtQWN0aW9uIHByb3Agb24gPGlucHV0PiBvciA8YnV0dG9uPi5cIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IFwiaW5wdXRcIiAhPT0gdGFnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgXCJzdWJtaXRcIiA9PT0gcHJvcHMudHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgIFwiaW1hZ2VcIiA9PT0gcHJvcHMudHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVHlwZVxuICAgICAgICAgICAgICAgICAgICA/IFwiYnV0dG9uXCIgIT09IHRhZyB8fFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwgPT0gcHJvcHMudHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgIFwic3VibWl0XCIgPT09IHByb3BzLnR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBkaWRXYXJuRm9ybUFjdGlvblR5cGVcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBwcm9wcy5uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uTmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRpZFdhcm5Gb3JtQWN0aW9uTmFtZSA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2Fubm90IHNwZWNpZnkgYSBcIm5hbWVcIiBwcm9wIGZvciBhIGJ1dHRvbiB0aGF0IHNwZWNpZmllcyBhIGZ1bmN0aW9uIGFzIGEgZm9ybUFjdGlvbi4gUmVhY3QgbmVlZHMgaXQgdG8gZW5jb2RlIHdoaWNoIGFjdGlvbiBzaG91bGQgYmUgaW52b2tlZC4gSXQgd2lsbCBnZXQgb3ZlcnJpZGRlbi4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gcHJvcHMuZm9ybUVuY1R5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA9PSBwcm9wcy5mb3JtTWV0aG9kKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRXYXJuRm9ybUFjdGlvbk1ldGhvZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRpZFdhcm5Gb3JtQWN0aW9uTWV0aG9kID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHNwZWNpZnkgYSBmb3JtRW5jVHlwZSBvciBmb3JtTWV0aG9kIGZvciBhIGJ1dHRvbiB0aGF0IHNwZWNpZmllcyBhIGZ1bmN0aW9uIGFzIGEgZm9ybUFjdGlvbi4gUmVhY3QgcHJvdmlkZXMgdGhvc2UgYXV0b21hdGljYWxseS4gVGhleSB3aWxsIGdldCBvdmVycmlkZGVuLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA9PSBwcm9wcy5mb3JtVGFyZ2V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVGFyZ2V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgoZGlkV2FybkZvcm1BY3Rpb25UYXJnZXQgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3Qgc3BlY2lmeSBhIGZvcm1UYXJnZXQgZm9yIGEgYnV0dG9uIHRoYXQgc3BlY2lmaWVzIGEgZnVuY3Rpb24gYXMgYSBmb3JtQWN0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgd2luZG93LlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpKVxuICAgICAgICAgICAgICAgICAgICAgIDogKChkaWRXYXJuRm9ybUFjdGlvblR5cGUgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnQSBidXR0b24gY2FuIG9ubHkgc3BlY2lmeSBhIGZvcm1BY3Rpb24gYWxvbmcgd2l0aCB0eXBlPVwic3VibWl0XCIgb3Igbm8gdHlwZS4nXG4gICAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICA6ICgoZGlkV2FybkZvcm1BY3Rpb25UeXBlID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnQW4gaW5wdXQgY2FuIG9ubHkgc3BlY2lmeSBhIGZvcm1BY3Rpb24gYWxvbmcgd2l0aCB0eXBlPVwic3VibWl0XCIgb3IgdHlwZT1cImltYWdlXCIuJ1xuICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgOiBcImFjdGlvblwiID09PSBrZXlcbiAgICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIllvdSBjYW4gb25seSBwYXNzIHRoZSBhY3Rpb24gcHJvcCB0byA8Zm9ybT4uXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiWW91IGNhbiBvbmx5IHBhc3MgdGhlIGZvcm1BY3Rpb24gcHJvcCB0byA8aW5wdXQ+IG9yIDxidXR0b24+LlwiXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignQSBSZWFjdCBmb3JtIHdhcyB1bmV4cGVjdGVkbHkgc3VibWl0dGVkLiBJZiB5b3UgY2FsbGVkIGZvcm0uc3VibWl0KCkgbWFudWFsbHksIGNvbnNpZGVyIHVzaW5nIGZvcm0ucmVxdWVzdFN1Ym1pdCgpIGluc3RlYWQuIElmIHlvdVxcXFwncmUgdHJ5aW5nIHRvIHVzZSBldmVudC5zdG9wUHJvcGFnYXRpb24oKSBpbiBhIHN1Ym1pdCBldmVudCBoYW5kbGVyLCBjb25zaWRlciBhbHNvIGNhbGxpbmcgZXZlbnQucHJldmVudERlZmF1bHQoKS4nKVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcmV2VmFsdWUgJiZcbiAgICAgICAgICAgICAgKFwiZm9ybUFjdGlvblwiID09PSBrZXlcbiAgICAgICAgICAgICAgICA/IChcImlucHV0XCIgIT09IHRhZyAmJlxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgXCJuYW1lXCIsIHByb3BzLm5hbWUsIHByb3BzLCBudWxsKSxcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgXCJmb3JtRW5jVHlwZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5mb3JtRW5jVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9ybU1ldGhvZFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5mb3JtTWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgXCJmb3JtVGFyZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmZvcm1UYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgIDogKHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgXCJlbmNUeXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmVuY1R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIFwibWV0aG9kXCIsIHByb3BzLm1ldGhvZCwgcHJvcHMsIG51bGwpLFxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcy50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApKSk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSk7XG4gICAgICAgICAgdmFsdWUgPSBzYW5pdGl6ZVVSTChcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib25DbGlja1wiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIoa2V5LCB2YWx1ZSksXG4gICAgICAgICAgICAoZG9tRWxlbWVudC5vbmNsaWNrID0gbm9vcCQxKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvblNjcm9sbFwiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIoa2V5LCB2YWx1ZSksXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsXCIsIGRvbUVsZW1lbnQpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9uU2Nyb2xsRW5kXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKSxcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJzY3JvbGxlbmRcIiwgZG9tRWxlbWVudCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICBpZiAobnVsbCAhPSB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgIT09IHR5cGVvZiB2YWx1ZSB8fCAhKFwiX19odG1sXCIgaW4gdmFsdWUpKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcImBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBpbiB0aGUgZm9ybSBge19faHRtbDogLi4ufWAuIFBsZWFzZSB2aXNpdCBodHRwczovL3JlYWN0LmRldi9saW5rL2Rhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBrZXkgPSB2YWx1ZS5fX2h0bWw7XG4gICAgICAgICAgICBpZiAobnVsbCAhPSBrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT0gcHJvcHMuY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkNhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZG9tRWxlbWVudC5pbm5lckhUTUwgPSBrZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICBkb21FbGVtZW50Lm11bHRpcGxlID1cbiAgICAgICAgICAgIHZhbHVlICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmIFwic3ltYm9sXCIgIT09IHR5cGVvZiB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm11dGVkXCI6XG4gICAgICAgICAgZG9tRWxlbWVudC5tdXRlZCA9XG4gICAgICAgICAgICB2YWx1ZSAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJiBcInN5bWJvbFwiICE9PSB0eXBlb2YgdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIjpcbiAgICAgICAgY2FzZSBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiOlxuICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgIGNhc2UgXCJkZWZhdWx0Q2hlY2tlZFwiOlxuICAgICAgICBjYXNlIFwiaW5uZXJIVE1MXCI6XG4gICAgICAgIGNhc2UgXCJyZWZcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImF1dG9Gb2N1c1wiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieGxpbmtIcmVmXCI6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJ4bGluazpocmVmXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSk7XG4gICAgICAgICAga2V5ID0gc2FuaXRpemVVUkwoXCJcIiArIHZhbHVlKTtcbiAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZU5TKHhsaW5rTmFtZXNwYWNlLCBcInhsaW5rOmhyZWZcIiwga2V5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNvbnRlbnRFZGl0YWJsZVwiOlxuICAgICAgICBjYXNlIFwic3BlbGxDaGVja1wiOlxuICAgICAgICBjYXNlIFwiZHJhZ2dhYmxlXCI6XG4gICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICBjYXNlIFwiYXV0b1JldmVyc2VcIjpcbiAgICAgICAgY2FzZSBcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIjpcbiAgICAgICAgY2FzZSBcImZvY3VzYWJsZVwiOlxuICAgICAgICBjYXNlIFwicHJlc2VydmVBbHBoYVwiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiB2YWx1ZVxuICAgICAgICAgICAgPyAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiICsgdmFsdWUpKVxuICAgICAgICAgICAgOiBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5lcnRcIjpcbiAgICAgICAgICBcIlwiICE9PSB2YWx1ZSB8fFxuICAgICAgICAgICAgZGlkV2FybkZvck5ld0Jvb2xlYW5Qcm9wc1dpdGhFbXB0eVZhbHVlW2tleV0gfHxcbiAgICAgICAgICAgICgoZGlkV2FybkZvck5ld0Jvb2xlYW5Qcm9wc1dpdGhFbXB0eVZhbHVlW2tleV0gPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIGVtcHR5IHN0cmluZyBmb3IgYSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiBUaGlzIHdpbGwgdHJlYXQgdGhlIGF0dHJpYnV0ZSBhcyBpZiBpdCB3ZXJlIGZhbHNlLiBFaXRoZXIgcGFzcyBgZmFsc2VgIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLCBvciBwYXNzIGB0cnVlYCBpZiB5b3UgdXNlZCBhbiBlbXB0eSBzdHJpbmcgaW4gZWFybGllciB2ZXJzaW9ucyBvZiBSZWFjdCB0byBpbmRpY2F0ZSB0aGlzIGF0dHJpYnV0ZSBpcyB0cnVlLlwiLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICkpO1xuICAgICAgICBjYXNlIFwiYWxsb3dGdWxsU2NyZWVuXCI6XG4gICAgICAgIGNhc2UgXCJhc3luY1wiOlxuICAgICAgICBjYXNlIFwiYXV0b1BsYXlcIjpcbiAgICAgICAgY2FzZSBcImNvbnRyb2xzXCI6XG4gICAgICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICAgIGNhc2UgXCJkZWZlclwiOlxuICAgICAgICBjYXNlIFwiZGlzYWJsZWRcIjpcbiAgICAgICAgY2FzZSBcImRpc2FibGVQaWN0dXJlSW5QaWN0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJkaXNhYmxlUmVtb3RlUGxheWJhY2tcIjpcbiAgICAgICAgY2FzZSBcImZvcm1Ob1ZhbGlkYXRlXCI6XG4gICAgICAgIGNhc2UgXCJoaWRkZW5cIjpcbiAgICAgICAgY2FzZSBcImxvb3BcIjpcbiAgICAgICAgY2FzZSBcIm5vTW9kdWxlXCI6XG4gICAgICAgIGNhc2UgXCJub1ZhbGlkYXRlXCI6XG4gICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgIGNhc2UgXCJwbGF5c0lubGluZVwiOlxuICAgICAgICBjYXNlIFwicmVhZE9ubHlcIjpcbiAgICAgICAgY2FzZSBcInJlcXVpcmVkXCI6XG4gICAgICAgIGNhc2UgXCJyZXZlcnNlZFwiOlxuICAgICAgICBjYXNlIFwic2NvcGVkXCI6XG4gICAgICAgIGNhc2UgXCJzZWFtbGVzc1wiOlxuICAgICAgICBjYXNlIFwiaXRlbVNjb3BlXCI6XG4gICAgICAgICAgdmFsdWUgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiYgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgICA/IGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIilcbiAgICAgICAgICAgIDogZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNhcHR1cmVcIjpcbiAgICAgICAgY2FzZSBcImRvd25sb2FkXCI6XG4gICAgICAgICAgITAgPT09IHZhbHVlXG4gICAgICAgICAgICA/IGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIilcbiAgICAgICAgICAgIDogITEgIT09IHZhbHVlICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgICAgID8gKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSksXG4gICAgICAgICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSkpXG4gICAgICAgICAgICAgIDogZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNvbHNcIjpcbiAgICAgICAgY2FzZSBcInJvd3NcIjpcbiAgICAgICAgY2FzZSBcInNpemVcIjpcbiAgICAgICAgY2FzZSBcInNwYW5cIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAhaXNOYU4odmFsdWUpICYmXG4gICAgICAgICAgMSA8PSB2YWx1ZVxuICAgICAgICAgICAgPyAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSkpXG4gICAgICAgICAgICA6IGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyb3dTcGFuXCI6XG4gICAgICAgIGNhc2UgXCJzdGFydFwiOlxuICAgICAgICAgIG51bGwgPT0gdmFsdWUgfHxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgIGlzTmFOKHZhbHVlKVxuICAgICAgICAgICAgPyBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpXG4gICAgICAgICAgICA6IChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBrZXkpLFxuICAgICAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJwb3BvdmVyXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImJlZm9yZXRvZ2dsZVwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwidG9nZ2xlXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIHNldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIFwicG9wb3ZlclwiLCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bGlua0FjdHVhdGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeGxpbmtOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhsaW5rOmFjdHVhdGVcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhsaW5rQXJjcm9sZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bGlua05hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieGxpbms6YXJjcm9sZVwiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieGxpbmtSb2xlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhsaW5rTmFtZXNwYWNlLFxuICAgICAgICAgICAgXCJ4bGluazpyb2xlXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bGlua1Nob3dcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeGxpbmtOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhsaW5rOnNob3dcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhsaW5rVGl0bGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeGxpbmtOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhsaW5rOnRpdGxlXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bGlua1R5cGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeGxpbmtOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhsaW5rOnR5cGVcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhtbEJhc2VcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeG1sTmFtZXNwYWNlLFxuICAgICAgICAgICAgXCJ4bWw6YmFzZVwiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieG1sTGFuZ1wiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bWxOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhtbDpsYW5nXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bWxTcGFjZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bWxOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhtbDpzcGFjZVwiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaXNcIjpcbiAgICAgICAgICBudWxsICE9IHByZXZWYWx1ZSAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJ0Nhbm5vdCB1cGRhdGUgdGhlIFwiaXNcIiBwcm9wIGFmdGVyIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgXCJpc1wiLCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbm5lclRleHRcIjpcbiAgICAgICAgY2FzZSBcInRleHRDb250ZW50XCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJwb3BvdmVyVGFyZ2V0XCI6XG4gICAgICAgICAgZGlkV2FyblBvcG92ZXJUYXJnZXRPYmplY3QgfHxcbiAgICAgICAgICAgIG51bGwgPT0gdmFsdWUgfHxcbiAgICAgICAgICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgKChkaWRXYXJuUG9wb3ZlclRhcmdldE9iamVjdCA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiVGhlIGBwb3BvdmVyVGFyZ2V0YCBwcm9wIGV4cGVjdHMgdGhlIElEIG9mIGFuIEVsZW1lbnQgYXMgYSBzdHJpbmcuIFJlY2VpdmVkICVzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICApKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAhKDIgPCBrZXkubGVuZ3RoKSB8fFxuICAgICAgICAgIChcIm9cIiAhPT0ga2V5WzBdICYmIFwiT1wiICE9PSBrZXlbMF0pIHx8XG4gICAgICAgICAgKFwiblwiICE9PSBrZXlbMV0gJiYgXCJOXCIgIT09IGtleVsxXSlcbiAgICAgICAgICAgID8gKChrZXkgPSBnZXRBdHRyaWJ1dGVBbGlhcyhrZXkpKSxcbiAgICAgICAgICAgICAgc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwga2V5LCB2YWx1ZSkpXG4gICAgICAgICAgICA6IHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0UHJvcE9uQ3VzdG9tRWxlbWVudChcbiAgICAgIGRvbUVsZW1lbnQsXG4gICAgICB0YWcsXG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICAgIHByb3BzLFxuICAgICAgcHJldlZhbHVlXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCB2YWx1ZSwgcHJldlZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgaWYgKG51bGwgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChcIm9iamVjdFwiICE9PSB0eXBlb2YgdmFsdWUgfHwgIShcIl9faHRtbFwiIGluIHZhbHVlKSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiBQbGVhc2UgdmlzaXQgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9kYW5nZXJvdXNseS1zZXQtaW5uZXItaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAga2V5ID0gdmFsdWUuX19odG1sO1xuICAgICAgICAgICAgaWYgKG51bGwgIT0ga2V5KSB7XG4gICAgICAgICAgICAgIGlmIChudWxsICE9IHByb3BzLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJDYW4gb25seSBzZXQgb25lIG9mIGBjaGlsZHJlbmAgb3IgYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQuaW5uZXJIVE1MID0ga2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgICA/IHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIHZhbHVlKVxuICAgICAgICAgICAgOiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlIHx8IFwiYmlnaW50XCIgPT09IHR5cGVvZiB2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgXCJcIiArIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9uU2Nyb2xsXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKSxcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJzY3JvbGxcIiwgZG9tRWxlbWVudCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib25TY3JvbGxFbmRcIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInNjcm9sbGVuZFwiLCBkb21FbGVtZW50KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvbkNsaWNrXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKSxcbiAgICAgICAgICAgIChkb21FbGVtZW50Lm9uY2xpY2sgPSBub29wJDEpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOlxuICAgICAgICBjYXNlIFwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCI6XG4gICAgICAgIGNhc2UgXCJpbm5lckhUTUxcIjpcbiAgICAgICAgY2FzZSBcInJlZlwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5uZXJUZXh0XCI6XG4gICAgICAgIGNhc2UgXCJ0ZXh0Q29udGVudFwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBcIm9cIiA9PT0ga2V5WzBdICYmXG4gICAgICAgICAgICAgICAgXCJuXCIgPT09IGtleVsxXSAmJlxuICAgICAgICAgICAgICAgICgocHJvcHMgPSBrZXkuZW5kc1dpdGgoXCJDYXB0dXJlXCIpKSxcbiAgICAgICAgICAgICAgICAodGFnID0ga2V5LnNsaWNlKDIsIHByb3BzID8ga2V5Lmxlbmd0aCAtIDcgOiB2b2lkIDApKSxcbiAgICAgICAgICAgICAgICAocHJldlZhbHVlID0gZG9tRWxlbWVudFtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgICAocHJldlZhbHVlID0gbnVsbCAhPSBwcmV2VmFsdWUgPyBwcmV2VmFsdWVba2V5XSA6IG51bGwpLFxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByZXZWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRhZywgcHJldlZhbHVlLCBwcm9wcyksXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHByZXZWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAoa2V5IGluIGRvbUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgPyAoZG9tRWxlbWVudFtrZXldID0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgOiBkb21FbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KSk7XG4gICAgICAgICAgICAgICAgZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRhZywgdmFsdWUsIHByb3BzKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGtleSBpbiBkb21FbGVtZW50XG4gICAgICAgICAgICAgICAgPyAoZG9tRWxlbWVudFtrZXldID0gdmFsdWUpXG4gICAgICAgICAgICAgICAgOiAhMCA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICAgID8gZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiKVxuICAgICAgICAgICAgICAgICAgOiBzZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0SW5pdGlhbFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCBwcm9wcykge1xuICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIHByb3BzKTtcbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgXCJkaXZcIjpcbiAgICAgICAgY2FzZSBcInNwYW5cIjpcbiAgICAgICAgY2FzZSBcInN2Z1wiOlxuICAgICAgICBjYXNlIFwicGF0aFwiOlxuICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICBjYXNlIFwiZ1wiOlxuICAgICAgICBjYXNlIFwicFwiOlxuICAgICAgICBjYXNlIFwibGlcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImltZ1wiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJlcnJvclwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwibG9hZFwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICB2YXIgaGFzU3JjID0gITEsXG4gICAgICAgICAgICBoYXNTcmNTZXQgPSAhMSxcbiAgICAgICAgICAgIHByb3BLZXk7XG4gICAgICAgICAgZm9yIChwcm9wS2V5IGluIHByb3BzKVxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wS2V5XTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT0gcHJvcFZhbHVlKVxuICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcEtleSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInNyY1wiOlxuICAgICAgICAgICAgICAgICAgICBoYXNTcmMgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwic3JjU2V0XCI6XG4gICAgICAgICAgICAgICAgICAgIGhhc1NyY1NldCA9ICEwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgcHJvcEtleSwgcHJvcFZhbHVlLCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIGhhc1NyY1NldCAmJlxuICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIFwic3JjU2V0XCIsIHByb3BzLnNyY1NldCwgcHJvcHMsIG51bGwpO1xuICAgICAgICAgIGhhc1NyYyAmJiBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgXCJzcmNcIiwgcHJvcHMuc3JjLCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKFwiaW5wdXRcIiwgcHJvcHMpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSAocHJvcEtleSA9IHByb3BWYWx1ZSA9IGhhc1NyY1NldCA9IG51bGwpLFxuICAgICAgICAgICAgY2hlY2tlZCA9IG51bGwsXG4gICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCA9IG51bGw7XG4gICAgICAgICAgZm9yIChoYXNTcmMgaW4gcHJvcHMpXG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoaGFzU3JjKSkge1xuICAgICAgICAgICAgICB2YXIgX3Byb3BWYWx1ZSA9IHByb3BzW2hhc1NyY107XG4gICAgICAgICAgICAgIGlmIChudWxsICE9IF9wcm9wVmFsdWUpXG4gICAgICAgICAgICAgICAgc3dpdGNoIChoYXNTcmMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJuYW1lXCI6XG4gICAgICAgICAgICAgICAgICAgIGhhc1NyY1NldCA9IF9wcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInR5cGVcIjpcbiAgICAgICAgICAgICAgICAgICAgcHJvcFZhbHVlID0gX3Byb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gX3Byb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdENoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQgPSBfcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gX3Byb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IF9wcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gX3Byb3BWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBoYXNTcmMsIF9wcm9wVmFsdWUsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgdmFsaWRhdGVJbnB1dFByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgICAgICBpbml0SW5wdXQoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIGNoZWNrZWQsXG4gICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgIHByb3BWYWx1ZSxcbiAgICAgICAgICAgIGhhc1NyY1NldCxcbiAgICAgICAgICAgICExXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKFwic2VsZWN0XCIsIHByb3BzKTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiaW52YWxpZFwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBoYXNTcmMgPSBwcm9wVmFsdWUgPSBwcm9wS2V5ID0gbnVsbDtcbiAgICAgICAgICBmb3IgKGhhc1NyY1NldCBpbiBwcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkoaGFzU3JjU2V0KSAmJlxuICAgICAgICAgICAgICAoKGRlZmF1bHRWYWx1ZSA9IHByb3BzW2hhc1NyY1NldF0pLCBudWxsICE9IGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChoYXNTcmNTZXQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIHByb3BLZXkgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBwcm9wVmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgICAgIGhhc1NyYyA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBoYXNTcmNTZXQsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB2YWxpZGF0ZVNlbGVjdFByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgICAgICB0YWcgPSBwcm9wS2V5O1xuICAgICAgICAgIHByb3BzID0gcHJvcFZhbHVlO1xuICAgICAgICAgIGRvbUVsZW1lbnQubXVsdGlwbGUgPSAhIWhhc1NyYztcbiAgICAgICAgICBudWxsICE9IHRhZ1xuICAgICAgICAgICAgPyB1cGRhdGVPcHRpb25zKGRvbUVsZW1lbnQsICEhaGFzU3JjLCB0YWcsICExKVxuICAgICAgICAgICAgOiBudWxsICE9IHByb3BzICYmIHVwZGF0ZU9wdGlvbnMoZG9tRWxlbWVudCwgISFoYXNTcmMsIHByb3BzLCAhMCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKFwidGV4dGFyZWFcIiwgcHJvcHMpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIHByb3BLZXkgPSBoYXNTcmNTZXQgPSBoYXNTcmMgPSBudWxsO1xuICAgICAgICAgIGZvciAocHJvcFZhbHVlIGluIHByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wVmFsdWUpICYmXG4gICAgICAgICAgICAgICgoZGVmYXVsdFZhbHVlID0gcHJvcHNbcHJvcFZhbHVlXSksIG51bGwgIT0gZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgaGFzU3JjID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgaGFzU3JjU2V0ID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBkZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBkb2VzIG5vdCBtYWtlIHNlbnNlIG9uIDx0ZXh0YXJlYT4uXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIHByb3BWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHZhbGlkYXRlVGV4dGFyZWFQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICAgICAgaW5pdFRleHRhcmVhKGRvbUVsZW1lbnQsIGhhc1NyYywgaGFzU3JjU2V0LCBwcm9wS2V5KTtcbiAgICAgICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJvcHRpb25cIjpcbiAgICAgICAgICB2YWxpZGF0ZU9wdGlvblByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgICAgICBmb3IgKGNoZWNrZWQgaW4gcHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KGNoZWNrZWQpICYmXG4gICAgICAgICAgICAgICgoaGFzU3JjID0gcHJvcHNbY2hlY2tlZF0pLCBudWxsICE9IGhhc1NyYylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICAgICAgaGFzU3JjICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGhhc1NyYyAmJlxuICAgICAgICAgICAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgaGFzU3JjO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBjaGVja2VkLCBoYXNTcmMsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcImRpYWxvZ1wiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJiZWZvcmV0b2dnbGVcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInRvZ2dsZVwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiY2FuY2VsXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJjbG9zZVwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImlmcmFtZVwiOlxuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImxvYWRcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ2aWRlb1wiOlxuICAgICAgICBjYXNlIFwiYXVkaW9cIjpcbiAgICAgICAgICBmb3IgKGhhc1NyYyA9IDA7IGhhc1NyYyA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGhhc1NyYysrKVxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChtZWRpYUV2ZW50VHlwZXNbaGFzU3JjXSwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJlcnJvclwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwibG9hZFwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRldGFpbHNcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwidG9nZ2xlXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZW1iZWRcIjpcbiAgICAgICAgY2FzZSBcInNvdXJjZVwiOlxuICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJlcnJvclwiLCBkb21FbGVtZW50KSxcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICBjYXNlIFwiYXJlYVwiOlxuICAgICAgICBjYXNlIFwiYmFzZVwiOlxuICAgICAgICBjYXNlIFwiYnJcIjpcbiAgICAgICAgY2FzZSBcImNvbFwiOlxuICAgICAgICBjYXNlIFwiaHJcIjpcbiAgICAgICAgY2FzZSBcImtleWdlblwiOlxuICAgICAgICBjYXNlIFwibWV0YVwiOlxuICAgICAgICBjYXNlIFwicGFyYW1cIjpcbiAgICAgICAgY2FzZSBcInRyYWNrXCI6XG4gICAgICAgIGNhc2UgXCJ3YnJcIjpcbiAgICAgICAgY2FzZSBcIm1lbnVpdGVtXCI6XG4gICAgICAgICAgZm9yIChkZWZhdWx0Q2hlY2tlZCBpbiBwcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkoZGVmYXVsdENoZWNrZWQpICYmXG4gICAgICAgICAgICAgICgoaGFzU3JjID0gcHJvcHNbZGVmYXVsdENoZWNrZWRdKSwgbnVsbCAhPSBoYXNTcmMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAoZGVmYXVsdENoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICB0YWcgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBkZWZhdWx0Q2hlY2tlZCwgaGFzU3JjLCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGlzQ3VzdG9tRWxlbWVudCh0YWcpKSB7XG4gICAgICAgICAgICBmb3IgKF9wcm9wVmFsdWUgaW4gcHJvcHMpXG4gICAgICAgICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KF9wcm9wVmFsdWUpICYmXG4gICAgICAgICAgICAgICAgKChoYXNTcmMgPSBwcm9wc1tfcHJvcFZhbHVlXSksXG4gICAgICAgICAgICAgICAgdm9pZCAwICE9PSBoYXNTcmMgJiZcbiAgICAgICAgICAgICAgICAgIHNldFByb3BPbkN1c3RvbUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgaGFzU3JjLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgdm9pZCAwXG4gICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGRlZmF1bHRWYWx1ZSBpbiBwcm9wcylcbiAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkoZGVmYXVsdFZhbHVlKSAmJlxuICAgICAgICAgICgoaGFzU3JjID0gcHJvcHNbZGVmYXVsdFZhbHVlXSksXG4gICAgICAgICAgbnVsbCAhPSBoYXNTcmMgJiZcbiAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBkZWZhdWx0VmFsdWUsIGhhc1NyYywgcHJvcHMsIG51bGwpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIGxhc3RQcm9wcywgbmV4dFByb3BzKSB7XG4gICAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgbmV4dFByb3BzKTtcbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgXCJkaXZcIjpcbiAgICAgICAgY2FzZSBcInNwYW5cIjpcbiAgICAgICAgY2FzZSBcInN2Z1wiOlxuICAgICAgICBjYXNlIFwicGF0aFwiOlxuICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICBjYXNlIFwiZ1wiOlxuICAgICAgICBjYXNlIFwicFwiOlxuICAgICAgICBjYXNlIFwibGlcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgICAgdmFyIG5hbWUgPSBudWxsLFxuICAgICAgICAgICAgdHlwZSA9IG51bGwsXG4gICAgICAgICAgICB2YWx1ZSA9IG51bGwsXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBudWxsLFxuICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZSA9IG51bGwsXG4gICAgICAgICAgICBjaGVja2VkID0gbnVsbCxcbiAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkID0gbnVsbDtcbiAgICAgICAgICBmb3IgKHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgICAgICAgICB2YXIgbGFzdFByb3AgPSBsYXN0UHJvcHNbcHJvcEtleV07XG4gICAgICAgICAgICBpZiAobGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpICYmIG51bGwgIT0gbGFzdFByb3ApXG4gICAgICAgICAgICAgIHN3aXRjaCAocHJvcEtleSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIGxhc3REZWZhdWx0VmFsdWUgPSBsYXN0UHJvcDtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8XG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0UHJvcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAodmFyIF9wcm9wS2V5OCBpbiBuZXh0UHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBwcm9wS2V5ID0gbmV4dFByb3BzW19wcm9wS2V5OF07XG4gICAgICAgICAgICBsYXN0UHJvcCA9IGxhc3RQcm9wc1tfcHJvcEtleThdO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXk4KSAmJlxuICAgICAgICAgICAgICAobnVsbCAhPSBwcm9wS2V5IHx8IG51bGwgIT0gbGFzdFByb3ApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAoX3Byb3BLZXk4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInR5cGVcIjpcbiAgICAgICAgICAgICAgICAgIHR5cGUgPSBwcm9wS2V5O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm5hbWVcIjpcbiAgICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wS2V5O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSBwcm9wS2V5O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRDaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCA9IHByb3BLZXk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gcHJvcEtleTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHByb3BLZXk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9IHByb3BLZXkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgcHJvcEtleSAhPT0gbGFzdFByb3AgJiZcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgICBfcHJvcEtleTgsXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdFByb3BcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0YWcgPVxuICAgICAgICAgICAgXCJjaGVja2JveFwiID09PSBsYXN0UHJvcHMudHlwZSB8fCBcInJhZGlvXCIgPT09IGxhc3RQcm9wcy50eXBlXG4gICAgICAgICAgICAgID8gbnVsbCAhPSBsYXN0UHJvcHMuY2hlY2tlZFxuICAgICAgICAgICAgICA6IG51bGwgIT0gbGFzdFByb3BzLnZhbHVlO1xuICAgICAgICAgIG5leHRQcm9wcyA9XG4gICAgICAgICAgICBcImNoZWNrYm94XCIgPT09IG5leHRQcm9wcy50eXBlIHx8IFwicmFkaW9cIiA9PT0gbmV4dFByb3BzLnR5cGVcbiAgICAgICAgICAgICAgPyBudWxsICE9IG5leHRQcm9wcy5jaGVja2VkXG4gICAgICAgICAgICAgIDogbnVsbCAhPSBuZXh0UHJvcHMudmFsdWU7XG4gICAgICAgICAgdGFnIHx8XG4gICAgICAgICAgICAhbmV4dFByb3BzIHx8XG4gICAgICAgICAgICBkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkIHx8XG4gICAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhbiB1bmNvbnRyb2xsZWQgaW5wdXQgdG8gYmUgY29udHJvbGxlZC4gVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIHVuZGVmaW5lZCB0byBhIGRlZmluZWQgdmFsdWUsIHdoaWNoIHNob3VsZCBub3QgaGFwcGVuLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0IGVsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9ICEwKSk7XG4gICAgICAgICAgIXRhZyB8fFxuICAgICAgICAgICAgbmV4dFByb3BzIHx8XG4gICAgICAgICAgICBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkIHx8XG4gICAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhIGNvbnRyb2xsZWQgaW5wdXQgdG8gYmUgdW5jb250cm9sbGVkLiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gYSBkZWZpbmVkIHRvIHVuZGVmaW5lZCwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gITApKTtcbiAgICAgICAgICB1cGRhdGVJbnB1dChcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIGxhc3REZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICBjaGVja2VkLFxuICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgcHJvcEtleSA9IHZhbHVlID0gZGVmYXVsdFZhbHVlID0gX3Byb3BLZXk4ID0gbnVsbDtcbiAgICAgICAgICBmb3IgKHR5cGUgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKGxhc3REZWZhdWx0VmFsdWUgPSBsYXN0UHJvcHNbdHlwZV0pLFxuICAgICAgICAgICAgICBsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkodHlwZSkgJiYgbnVsbCAhPSBsYXN0RGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICAgICAgcHJvcEtleSA9IGxhc3REZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSB8fFxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChuYW1lIGluIG5leHRQcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKCh0eXBlID0gbmV4dFByb3BzW25hbWVdKSxcbiAgICAgICAgICAgICAgKGxhc3REZWZhdWx0VmFsdWUgPSBsYXN0UHJvcHNbbmFtZV0pLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICAgICAgICAobnVsbCAhPSB0eXBlIHx8IG51bGwgIT0gbGFzdERlZmF1bHRWYWx1ZSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4ID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gdHlwZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgdHlwZSAhPT0gbGFzdERlZmF1bHRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgbmV4dFByb3BzID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgIHRhZyA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RQcm9wcyA9IHByb3BLZXk7XG4gICAgICAgICAgbnVsbCAhPSBfcHJvcEtleThcbiAgICAgICAgICAgID8gdXBkYXRlT3B0aW9ucyhkb21FbGVtZW50LCAhIXRhZywgX3Byb3BLZXk4LCAhMSlcbiAgICAgICAgICAgIDogISFsYXN0UHJvcHMgIT09ICEhdGFnICYmXG4gICAgICAgICAgICAgIChudWxsICE9IG5leHRQcm9wc1xuICAgICAgICAgICAgICAgID8gdXBkYXRlT3B0aW9ucyhkb21FbGVtZW50LCAhIXRhZywgbmV4dFByb3BzLCAhMClcbiAgICAgICAgICAgICAgICA6IHVwZGF0ZU9wdGlvbnMoZG9tRWxlbWVudCwgISF0YWcsIHRhZyA/IFtdIDogXCJcIiwgITEpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICAgIHByb3BLZXkgPSBfcHJvcEtleTggPSBudWxsO1xuICAgICAgICAgIGZvciAoZGVmYXVsdFZhbHVlIGluIGxhc3RQcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKChuYW1lID0gbGFzdFByb3BzW2RlZmF1bHRWYWx1ZV0pLFxuICAgICAgICAgICAgICBsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoZGVmYXVsdFZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT0gbmFtZSAmJlxuICAgICAgICAgICAgICAgICFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoZGVmYXVsdFZhbHVlKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBkZWZhdWx0VmFsdWUsIG51bGwsIG5leHRQcm9wcywgbmFtZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhbHVlIGluIG5leHRQcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKChuYW1lID0gbmV4dFByb3BzW3ZhbHVlXSksXG4gICAgICAgICAgICAgICh0eXBlID0gbGFzdFByb3BzW3ZhbHVlXSksXG4gICAgICAgICAgICAgIG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkgJiYgKG51bGwgIT0gbmFtZSB8fCBudWxsICE9IHR5cGUpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBfcHJvcEtleTggPSBuYW1lO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgcHJvcEtleSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gbmFtZSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi5cIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIG5hbWUgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIHZhbHVlLCBuYW1lLCBuZXh0UHJvcHMsIHR5cGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgdXBkYXRlVGV4dGFyZWEoZG9tRWxlbWVudCwgX3Byb3BLZXk4LCBwcm9wS2V5KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJvcHRpb25cIjpcbiAgICAgICAgICBmb3IgKHZhciBfcHJvcEtleTEzIGluIGxhc3RQcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKChfcHJvcEtleTggPSBsYXN0UHJvcHNbX3Byb3BLZXkxM10pLFxuICAgICAgICAgICAgICBsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxMykgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9IF9wcm9wS2V5OCAmJlxuICAgICAgICAgICAgICAgICFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxMykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAoX3Byb3BLZXkxMykge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC5zZWxlY3RlZCA9ICExO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXkxMyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleThcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxhc3REZWZhdWx0VmFsdWUgaW4gbmV4dFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKF9wcm9wS2V5OCA9IG5leHRQcm9wc1tsYXN0RGVmYXVsdFZhbHVlXSksXG4gICAgICAgICAgICAgIChwcm9wS2V5ID0gbGFzdFByb3BzW2xhc3REZWZhdWx0VmFsdWVdKSxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KGxhc3REZWZhdWx0VmFsdWUpICYmXG4gICAgICAgICAgICAgICAgX3Byb3BLZXk4ICE9PSBwcm9wS2V5ICYmXG4gICAgICAgICAgICAgICAgKG51bGwgIT0gX3Byb3BLZXk4IHx8IG51bGwgIT0gcHJvcEtleSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAobGFzdERlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC5zZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfcHJvcEtleTggJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIF9wcm9wS2V5ODtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIGxhc3REZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwiaW1nXCI6XG4gICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgIGNhc2UgXCJhcmVhXCI6XG4gICAgICAgIGNhc2UgXCJiYXNlXCI6XG4gICAgICAgIGNhc2UgXCJiclwiOlxuICAgICAgICBjYXNlIFwiY29sXCI6XG4gICAgICAgIGNhc2UgXCJlbWJlZFwiOlxuICAgICAgICBjYXNlIFwiaHJcIjpcbiAgICAgICAgY2FzZSBcImtleWdlblwiOlxuICAgICAgICBjYXNlIFwibWV0YVwiOlxuICAgICAgICBjYXNlIFwicGFyYW1cIjpcbiAgICAgICAgY2FzZSBcInNvdXJjZVwiOlxuICAgICAgICBjYXNlIFwidHJhY2tcIjpcbiAgICAgICAgY2FzZSBcIndiclwiOlxuICAgICAgICBjYXNlIFwibWVudWl0ZW1cIjpcbiAgICAgICAgICBmb3IgKHZhciBfcHJvcEtleTE1IGluIGxhc3RQcm9wcylcbiAgICAgICAgICAgIChfcHJvcEtleTggPSBsYXN0UHJvcHNbX3Byb3BLZXkxNV0pLFxuICAgICAgICAgICAgICBsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxNSkgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9IF9wcm9wS2V5OCAmJlxuICAgICAgICAgICAgICAgICFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxNSkgJiZcbiAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgIF9wcm9wS2V5MTUsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICBmb3IgKGNoZWNrZWQgaW4gbmV4dFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKF9wcm9wS2V5OCA9IG5leHRQcm9wc1tjaGVja2VkXSksXG4gICAgICAgICAgICAgIChwcm9wS2V5ID0gbGFzdFByb3BzW2NoZWNrZWRdKSxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KGNoZWNrZWQpICYmXG4gICAgICAgICAgICAgICAgX3Byb3BLZXk4ICE9PSBwcm9wS2V5ICYmXG4gICAgICAgICAgICAgICAgKG51bGwgIT0gX3Byb3BLZXk4IHx8IG51bGwgIT0gcHJvcEtleSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAoY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gX3Byb3BLZXk4KVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICB0YWcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4LFxuICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGlzQ3VzdG9tRWxlbWVudCh0YWcpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBfcHJvcEtleTE3IGluIGxhc3RQcm9wcylcbiAgICAgICAgICAgICAgKF9wcm9wS2V5OCA9IGxhc3RQcm9wc1tfcHJvcEtleTE3XSksXG4gICAgICAgICAgICAgICAgbGFzdFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTcpICYmXG4gICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IF9wcm9wS2V5OCAmJlxuICAgICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTE3KSAmJlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcE9uQ3VzdG9tRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleTE3LFxuICAgICAgICAgICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChkZWZhdWx0Q2hlY2tlZCBpbiBuZXh0UHJvcHMpXG4gICAgICAgICAgICAgIChfcHJvcEtleTggPSBuZXh0UHJvcHNbZGVmYXVsdENoZWNrZWRdKSxcbiAgICAgICAgICAgICAgICAocHJvcEtleSA9IGxhc3RQcm9wc1tkZWZhdWx0Q2hlY2tlZF0pLFxuICAgICAgICAgICAgICAgICFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoZGVmYXVsdENoZWNrZWQpIHx8XG4gICAgICAgICAgICAgICAgICBfcHJvcEtleTggPT09IHByb3BLZXkgfHxcbiAgICAgICAgICAgICAgICAgICh2b2lkIDAgPT09IF9wcm9wS2V5OCAmJiB2b2lkIDAgPT09IHByb3BLZXkpIHx8XG4gICAgICAgICAgICAgICAgICBzZXRQcm9wT25DdXN0b21FbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleTgsXG4gICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBfcHJvcEtleTE5IGluIGxhc3RQcm9wcylcbiAgICAgICAgKF9wcm9wS2V5OCA9IGxhc3RQcm9wc1tfcHJvcEtleTE5XSksXG4gICAgICAgICAgbGFzdFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTkpICYmXG4gICAgICAgICAgICBudWxsICE9IF9wcm9wS2V5OCAmJlxuICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTE5KSAmJlxuICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIF9wcm9wS2V5MTksIG51bGwsIG5leHRQcm9wcywgX3Byb3BLZXk4KTtcbiAgICAgIGZvciAobGFzdFByb3AgaW4gbmV4dFByb3BzKVxuICAgICAgICAoX3Byb3BLZXk4ID0gbmV4dFByb3BzW2xhc3RQcm9wXSksXG4gICAgICAgICAgKHByb3BLZXkgPSBsYXN0UHJvcHNbbGFzdFByb3BdKSxcbiAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KGxhc3RQcm9wKSB8fFxuICAgICAgICAgICAgX3Byb3BLZXk4ID09PSBwcm9wS2V5IHx8XG4gICAgICAgICAgICAobnVsbCA9PSBfcHJvcEtleTggJiYgbnVsbCA9PSBwcm9wS2V5KSB8fFxuICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGxhc3RQcm9wLCBfcHJvcEtleTgsIG5leHRQcm9wcywgcHJvcEtleSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFByb3BOYW1lRnJvbUF0dHJpYnV0ZU5hbWUoYXR0ck5hbWUpIHtcbiAgICAgIHN3aXRjaCAoYXR0ck5hbWUpIHtcbiAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgcmV0dXJuIFwiY2xhc3NOYW1lXCI7XG4gICAgICAgIGNhc2UgXCJmb3JcIjpcbiAgICAgICAgICByZXR1cm4gXCJodG1sRm9yXCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGF0dHJOYW1lO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdHlsZXNPYmplY3RGcm9tRWxlbWVudChkb21FbGVtZW50KSB7XG4gICAgICB2YXIgc2VydmVyVmFsdWVJbk9iamVjdEZvcm0gPSB7fTtcbiAgICAgIGRvbUVsZW1lbnQgPSBkb21FbGVtZW50LnN0eWxlO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21FbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzdHlsZU5hbWUgPSBkb21FbGVtZW50W2ldO1xuICAgICAgICBzZXJ2ZXJWYWx1ZUluT2JqZWN0Rm9ybVtzdHlsZU5hbWVdID1cbiAgICAgICAgICBkb21FbGVtZW50LmdldFByb3BlcnR5VmFsdWUoc3R5bGVOYW1lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXJ2ZXJWYWx1ZUluT2JqZWN0Rm9ybTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlmZkh5ZHJhdGVkU3R5bGVzKGRvbUVsZW1lbnQsIHZhbHVlJGpzY29tcCQwLCBzZXJ2ZXJEaWZmZXJlbmNlcykge1xuICAgICAgaWYgKG51bGwgIT0gdmFsdWUkanNjb21wJDAgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHZhbHVlJGpzY29tcCQwKVxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVGhlIGBzdHlsZWAgcHJvcCBleHBlY3RzIGEgbWFwcGluZyBmcm9tIHN0eWxlIHByb3BlcnRpZXMgdG8gdmFsdWVzLCBub3QgYSBzdHJpbmcuIEZvciBleGFtcGxlLCBzdHlsZT17e21hcmdpblJpZ2h0OiBzcGFjaW5nICsgJ2VtJ319IHdoZW4gdXNpbmcgSlNYLlwiXG4gICAgICAgICk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGNsaWVudFZhbHVlO1xuICAgICAgICB2YXIgZGVsaW1pdGVyID0gKGNsaWVudFZhbHVlID0gXCJcIiksXG4gICAgICAgICAgc3R5bGVOYW1lO1xuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiB2YWx1ZSRqc2NvbXAkMClcbiAgICAgICAgICBpZiAodmFsdWUkanNjb21wJDAuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWUkanNjb21wJDBbc3R5bGVOYW1lXTtcbiAgICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgXCJib29sZWFuXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICBcIlwiICE9PSB2YWx1ZSAmJlxuICAgICAgICAgICAgICAoMCA9PT0gc3R5bGVOYW1lLmluZGV4T2YoXCItLVwiKVxuICAgICAgICAgICAgICAgID8gKGNoZWNrQ1NTUHJvcGVydHlTdHJpbmdDb2VyY2lvbih2YWx1ZSwgc3R5bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAgIChjbGllbnRWYWx1ZSArPVxuICAgICAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgKyBzdHlsZU5hbWUgKyBcIjpcIiArIChcIlwiICsgdmFsdWUpLnRyaW0oKSkpXG4gICAgICAgICAgICAgICAgOiBcIm51bWJlclwiICE9PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgMCA9PT0gdmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgdW5pdGxlc3NOdW1iZXJzLmhhcyhzdHlsZU5hbWUpXG4gICAgICAgICAgICAgICAgICA/IChjaGVja0NTU1Byb3BlcnR5U3RyaW5nQ29lcmNpb24odmFsdWUsIHN0eWxlTmFtZSksXG4gICAgICAgICAgICAgICAgICAgIChjbGllbnRWYWx1ZSArPVxuICAgICAgICAgICAgICAgICAgICAgIGRlbGltaXRlciArXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSh1cHBlcmNhc2VQYXR0ZXJuLCBcIi0kMVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKG1zUGF0dGVybiQxLCBcIi1tcy1cIikgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICAgICAgICAgICAgICAoXCJcIiArIHZhbHVlKS50cmltKCkpKVxuICAgICAgICAgICAgICAgICAgOiAoY2xpZW50VmFsdWUgKz1cbiAgICAgICAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgK1xuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UodXBwZXJjYXNlUGF0dGVybiwgXCItJDFcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShtc1BhdHRlcm4kMSwgXCItbXMtXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgK1xuICAgICAgICAgICAgICAgICAgICAgIFwicHhcIiksXG4gICAgICAgICAgICAgIChkZWxpbWl0ZXIgPSBcIjtcIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgY2xpZW50VmFsdWUgPSBjbGllbnRWYWx1ZSB8fCBudWxsO1xuICAgICAgICB2YWx1ZSRqc2NvbXAkMCA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgICAgIHZhbHVlJGpzY29tcCQwICE9PSBjbGllbnRWYWx1ZSAmJlxuICAgICAgICAgICgoY2xpZW50VmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VmFsdWUpKSxcbiAgICAgICAgICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUodmFsdWUkanNjb21wJDApICE9PSBjbGllbnRWYWx1ZSAmJlxuICAgICAgICAgICAgKHNlcnZlckRpZmZlcmVuY2VzLnN0eWxlID0gZ2V0U3R5bGVzT2JqZWN0RnJvbUVsZW1lbnQoZG9tRWxlbWVudCkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgIGRvbUVsZW1lbnQsXG4gICAgICBwcm9wS2V5LFxuICAgICAgYXR0cmlidXRlTmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBkb21FbGVtZW50ID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBpZiAobnVsbCA9PT0gZG9tRWxlbWVudClcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG51bGwgIT0gdmFsdWUpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgcHJvcEtleSksXG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQgPT09IFwiXCIgKyB2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgZG9tRWxlbWVudCwgdmFsdWUsIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHlkcmF0ZUJvb2xlYW5BdHRyaWJ1dGUoXG4gICAgICBkb21FbGVtZW50LFxuICAgICAgcHJvcEtleSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgKSB7XG4gICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgaWYgKG51bGwgPT09IGRvbUVsZW1lbnQpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgICAgfSBlbHNlXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh2YWx1ZSkgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgZG9tRWxlbWVudCwgdmFsdWUsIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHlkcmF0ZUJvb2xlYW5pc2hBdHRyaWJ1dGUoXG4gICAgICBkb21FbGVtZW50LFxuICAgICAgcHJvcEtleSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgKSB7XG4gICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgaWYgKG51bGwgPT09IGRvbUVsZW1lbnQpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgZWxzZSBpZiAobnVsbCAhPSB2YWx1ZSlcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgYXR0cmlidXRlTmFtZSksXG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQgPT09IFwiXCIgKyB2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgZG9tRWxlbWVudCwgdmFsdWUsIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHlkcmF0ZU51bWVyaWNBdHRyaWJ1dGUoXG4gICAgICBkb21FbGVtZW50LFxuICAgICAgcHJvcEtleSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgKSB7XG4gICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgaWYgKG51bGwgPT09IGRvbUVsZW1lbnQpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG51bGwgIT0gdmFsdWUpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhaXNOYU4odmFsdWUpICYmXG4gICAgICAgICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBwcm9wS2V5KSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudCA9PT0gXCJcIiArIHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBkb21FbGVtZW50LCB2YWx1ZSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoeWRyYXRlU2FuaXRpemVkQXR0cmlidXRlKFxuICAgICAgZG9tRWxlbWVudCxcbiAgICAgIHByb3BLZXksXG4gICAgICBhdHRyaWJ1dGVOYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICkge1xuICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGRvbUVsZW1lbnQgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGlmIChudWxsID09PSBkb21FbGVtZW50KVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgZWxzZSBpZiAobnVsbCAhPSB2YWx1ZSlcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBwcm9wS2V5KSxcbiAgICAgICAgICAgICAgKGF0dHJpYnV0ZU5hbWUgPSBzYW5pdGl6ZVVSTChcIlwiICsgdmFsdWUpKSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudCA9PT0gYXR0cmlidXRlTmFtZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgZG9tRWxlbWVudCwgdmFsdWUsIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHByb3BzLCBob3N0Q29udGV4dCkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIHNlcnZlckRpZmZlcmVuY2VzID0ge30sXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzID0gbmV3IFNldCgpLFxuICAgICAgICAgIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmF0dHJpYnV0ZXMsXG4gICAgICAgICAgaSA9IDA7XG4gICAgICAgIGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDtcbiAgICAgICAgaSsrXG4gICAgICApXG4gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlc1tpXS5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuYWRkKGF0dHJpYnV0ZXNbaV0ubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIGlmIChpc0N1c3RvbUVsZW1lbnQodGFnKSlcbiAgICAgICAgZm9yICh2YXIgcHJvcEtleSBpbiBwcm9wcykge1xuICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvcHNbcHJvcEtleV07XG4gICAgICAgICAgICBpZiAobnVsbCAhPSB2YWx1ZSlcbiAgICAgICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKCEwICE9PSBwcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpXG4gICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICAgICAgKFwic3RyaW5nXCIgIT09IHR5cGVvZiB2YWx1ZSAmJiBcIm51bWJlclwiICE9PSB0eXBlb2YgdmFsdWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGlsZHJlblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC50ZXh0Q29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0Q2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcImlubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcInJlZlwiOlxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPyB2YWx1ZS5fX2h0bWwgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKHZhbHVlID0gbm9ybWFsaXplSFRNTChkb21FbGVtZW50LCB2YWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHByb3BLZXkpO1xuICAgICAgICAgICAgICAgICAgICBkaWZmSHlkcmF0ZWRTdHlsZXMoZG9tRWxlbWVudCwgdmFsdWUsIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwib2Zmc2V0UGFyZW50XCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwib2Zmc2V0VG9wXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwib2Zmc2V0TGVmdFwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm9mZnNldFdpZHRoXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwib2Zmc2V0SGVpZ2h0XCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiaXNDb250ZW50RWRpdGFibGVcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvdXRlclRleHRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvdXRlckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiQXNzaWdubWVudCB0byByZWFkLW9ubHkgcHJvcGVydHkgd2lsbCByZXN1bHQgaW4gYSBuby1vcDogYCVzYFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiY2xhc3NOYW1lXCI6XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJjbGFzc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IGdldFZhbHVlRm9yQXR0cmlidXRlT25DdXN0b21Db21wb25lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NOYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGhvc3RDb250ZXh0LmNvbnRleHQgPT09IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZSAmJlxuICAgICAgICAgICAgICAgICAgICBcInN2Z1wiICE9PSB0YWcgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJtYXRoXCIgIT09IHRhZ1xuICAgICAgICAgICAgICAgICAgICAgID8gZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICAgICAgICAgOiBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHByb3BLZXkpLFxuICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJ1dGVzID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGVPbkN1c3RvbUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgICAgZm9yICh2YWx1ZSBpbiBwcm9wcylcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICgocHJvcEtleSA9IHByb3BzW3ZhbHVlXSksIG51bGwgIT0gcHJvcEtleSlcbiAgICAgICAgICApXG4gICAgICAgICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIodmFsdWUsIHByb3BLZXkpO1xuICAgICAgICAgICAgZWxzZSBpZiAoITAgIT09IHByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZylcbiAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgICAgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wS2V5ICYmXG4gICAgICAgICAgICAgICAgICAgIFwibnVtYmVyXCIgIT09IHR5cGVvZiBwcm9wS2V5KSB8fFxuICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgXCJjaGlsZHJlblwiLFxuICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQudGV4dENvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdENoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiaW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInJlZlwiOlxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gcHJvcEtleSA/IHByb3BLZXkuX19odG1sIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgbnVsbCAhPSBwcm9wS2V5ICYmXG4gICAgICAgICAgICAgICAgICAgICgocHJvcEtleSA9IG5vcm1hbGl6ZUhUTUwoZG9tRWxlbWVudCwgcHJvcEtleSkpLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICE9PSBwcm9wS2V5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgKHNlcnZlckRpZmZlcmVuY2VzW3ZhbHVlXSA9IHsgX19odG1sOiBhdHRyaWJ1dGVzIH0pKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjbGFzc05hbWVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwidGFiSW5kZXhcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInRhYmluZGV4XCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgZGlmZkh5ZHJhdGVkU3R5bGVzKGRvbUVsZW1lbnQsIHByb3BLZXksIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50Lm11bHRpcGxlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtdXRlZFwiOlxuICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50Lm11dGVkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhdXRvRm9jdXNcIjpcbiAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJhdXRvZm9jdXNcIik7XG4gICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LmF1dG9mb2N1cyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGF0YVwiOlxuICAgICAgICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgIT09IHRhZykge1xuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFwic3JjXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImhyZWZcIjpcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICBcIlwiICE9PSBwcm9wS2V5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgKFwiYVwiID09PSB0YWcgJiYgXCJocmVmXCIgPT09IHZhbHVlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgIChcIm9iamVjdFwiID09PSB0YWcgJiYgXCJkYXRhXCIgPT09IHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgXCJzcmNcIiA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdBbiBlbXB0eSBzdHJpbmcgKFwiXCIpIHdhcyBwYXNzZWQgdG8gdGhlICVzIGF0dHJpYnV0ZS4gVGhpcyBtYXkgY2F1c2UgdGhlIGJyb3dzZXIgdG8gZG93bmxvYWQgdGhlIHdob2xlIHBhZ2UgYWdhaW4gb3ZlciB0aGUgbmV0d29yay4gVG8gZml4IHRoaXMsIGVpdGhlciBkbyBub3QgcmVuZGVyIHRoZSBlbGVtZW50IGF0IGFsbCBvciBwYXNzIG51bGwgdG8gJXMgaW5zdGVhZCBvZiBhbiBlbXB0eSBzdHJpbmcuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnQW4gZW1wdHkgc3RyaW5nIChcIlwiKSB3YXMgcGFzc2VkIHRvIHRoZSAlcyBhdHRyaWJ1dGUuIFRvIGZpeCB0aGlzLCBlaXRoZXIgZG8gbm90IHJlbmRlciB0aGUgZWxlbWVudCBhdCBhbGwgb3IgcGFzcyBudWxsIHRvICVzIGluc3RlYWQgb2YgYW4gZW1wdHkgc3RyaW5nLicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlU2FuaXRpemVkQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYWN0aW9uXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImZvcm1BY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcHJvcEtleSkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgICAgICBcImZvcm1BY3Rpb25cIiA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICA/IChleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwibmFtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJmb3JtZW5jdHlwZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJmb3JtbWV0aG9kXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcImZvcm10YXJnZXRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgOiAoZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcImVuY3R5cGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwibWV0aG9kXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcInRhcmdldFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzID09PSBFWFBFQ1RFRF9GT1JNX0FDVElPTl9VUkwpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZVNhbml0aXplZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieGxpbmtIcmVmXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlU2FuaXRpemVkQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bGluazpocmVmXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29udGVudEVkaXRhYmxlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQm9vbGVhbmlzaEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwiY29udGVudGVkaXRhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3BlbGxDaGVja1wiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUJvb2xlYW5pc2hBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInNwZWxsY2hlY2tcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkcmFnZ2FibGVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiYXV0b1JldmVyc2VcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJmb2N1c2FibGVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwicHJlc2VydmVBbHBoYVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUJvb2xlYW5pc2hBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhbGxvd0Z1bGxTY3JlZW5cIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiYXN5bmNcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiYXV0b1BsYXlcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29udHJvbHNcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZlclwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlUGljdHVyZUluUGljdHVyZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlUmVtb3RlUGxheWJhY2tcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZm9ybU5vVmFsaWRhdGVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiaGlkZGVuXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImxvb3BcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwibm9Nb2R1bGVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwibm9WYWxpZGF0ZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInBsYXlzSW5saW5lXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInJlYWRPbmx5XCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInJlcXVpcmVkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInJldmVyc2VkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjb3BlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzZWFtbGVzc1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJpdGVtU2NvcGVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVCb29sZWFuQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjYXB0dXJlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRvd25sb2FkXCI6XG4gICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBkb21FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IChhdHRyaWJ1dGVzID0gdmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwID0gc2VydmVyRGlmZmVyZW5jZXM7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGkpXG4gICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgcHJvcEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoITEgPT09IHByb3BLZXkpIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChudWxsICE9IHByb3BLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgcHJvcEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEwID09PSBwcm9wS2V5ICYmIFwiXCIgPT09IGkpIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHByb3BLZXksIGF0dHJpYnV0ZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPT09IFwiXCIgKyBwcm9wS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbHNcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwicm93c1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzaXplXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInNwYW5cIjpcbiAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGRvbUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwID0gc2VydmVyRGlmZmVyZW5jZXM7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGkpXG4gICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgcHJvcEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKHByb3BLZXkpIHx8IDEgPiBwcm9wS2V5KSBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobnVsbCAhPSBwcm9wS2V5KVxuICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShpc05hTihwcm9wS2V5KSB8fCAxID4gcHJvcEtleSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihwcm9wS2V5LCBhdHRyaWJ1dGVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID09PSBcIlwiICsgcHJvcEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyb3dTcGFuXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlTnVtZXJpY0F0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwicm93c3BhblwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0YXJ0XCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlTnVtZXJpY0F0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhIZWlnaHRcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcIngtaGVpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieGxpbmtBY3R1YXRlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bGluazphY3R1YXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieGxpbmtBcmNyb2xlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bGluazphcmNyb2xlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieGxpbmtSb2xlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bGluazpyb2xlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieGxpbmtTaG93XCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bGluazpzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieGxpbmtUaXRsZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6dGl0bGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua1R5cGVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOnR5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bWxCYXNlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bWw6YmFzZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhtbExhbmdcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhtbDpsYW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieG1sU3BhY2VcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhtbDpzcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImluZXJ0XCI6XG4gICAgICAgICAgICAgICAgICBcIlwiICE9PSBwcm9wS2V5IHx8XG4gICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JOZXdCb29sZWFuUHJvcHNXaXRoRW1wdHlWYWx1ZVt2YWx1ZV0gfHxcbiAgICAgICAgICAgICAgICAgICAgKChkaWRXYXJuRm9yTmV3Qm9vbGVhblByb3BzV2l0aEVtcHR5VmFsdWVbdmFsdWVdID0gITApLFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gZW1wdHkgc3RyaW5nIGZvciBhIGJvb2xlYW4gYXR0cmlidXRlIGAlc2AuIFRoaXMgd2lsbCB0cmVhdCB0aGUgYXR0cmlidXRlIGFzIGlmIGl0IHdlcmUgZmFsc2UuIEVpdGhlciBwYXNzIGBmYWxzZWAgdG8gc2lsZW5jZSB0aGlzIHdhcm5pbmcsIG9yIHBhc3MgYHRydWVgIGlmIHlvdSB1c2VkIGFuIGVtcHR5IHN0cmluZyBpbiBlYXJsaWVyIHZlcnNpb25zIG9mIFJlYWN0IHRvIGluZGljYXRlIHRoaXMgYXR0cmlidXRlIGlzIHRydWUuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQm9vbGVhbkF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgISgyIDwgdmFsdWUubGVuZ3RoKSB8fFxuICAgICAgICAgICAgICAgICAgICAoXCJvXCIgIT09IHZhbHVlWzBdICYmIFwiT1wiICE9PSB2YWx1ZVswXSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKFwiblwiICE9PSB2YWx1ZVsxXSAmJiBcIk5cIiAhPT0gdmFsdWVbMV0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGdldEF0dHJpYnV0ZUFsaWFzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9ICExO1xuICAgICAgICAgICAgICAgICAgICBob3N0Q29udGV4dC5jb250ZXh0ID09PSBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmUgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzdmdcIiAhPT0gdGFnICYmXG4gICAgICAgICAgICAgICAgICAgIFwibWF0aFwiICE9PSB0YWdcbiAgICAgICAgICAgICAgICAgICAgICA/IGV4dHJhQXR0cmlidXRlcy5kZWxldGUoaS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICAgICAgICAgIDogKChhdHRyaWJ1dGVOYW1lID0gdmFsdWUudG9Mb3dlckNhc2UoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAoYXR0cmlidXRlTmFtZSA9IHBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHBvc3NpYmxlU3RhbmRhcmROYW1lc1thdHRyaWJ1dGVOYW1lXSB8fCBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCksXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBhdHRyaWJ1dGVOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgIT09IHZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgoYXR0cmlidXRlcyA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGkpKTtcbiAgICAgICAgICAgICAgICAgICAgYTogaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICgoYXR0cmlidXRlTmFtZSA9IGRvbUVsZW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgIChzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMCA9IGkpLFxuICAgICAgICAgICAgICAgICAgICAgIChpID0gcHJvcEtleSksXG4gICAgICAgICAgICAgICAgICAgICAgaXNBdHRyaWJ1dGVOYW1lU2FmZShzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMCkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lLmhhc0F0dHJpYnV0ZShzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMClcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAoYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUuZ2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA9IGF0dHJpYnV0ZU5hbWUgPT09IFwiXCIgKyBpID8gaSA6IGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhdHRyaWJ1dGVOYW1lID0gc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsIDUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1cIiAhPT0gYXR0cmlidXRlTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtXCIgIT09IGF0dHJpYnV0ZU5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB2b2lkIDAgPT09IGkgPyB2b2lkIDAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgMCA8IGV4dHJhQXR0cmlidXRlcy5zaXplICYmXG4gICAgICAgICEwICE9PSBwcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgJiZcbiAgICAgICAgd2FybkZvckV4dHJhQXR0cmlidXRlcyhkb21FbGVtZW50LCBleHRyYUF0dHJpYnV0ZXMsIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICAgIHJldHVybiAwID09PSBPYmplY3Qua2V5cyhzZXJ2ZXJEaWZmZXJlbmNlcykubGVuZ3RoXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHNlcnZlckRpZmZlcmVuY2VzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9wTmFtZXNMaXN0Sm9pbihsaXN0LCBjb21iaW5hdG9yKSB7XG4gICAgICBzd2l0Y2ggKGxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBsaXN0WzBdO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIGxpc3RbMF0gKyBcIiBcIiArIGNvbWJpbmF0b3IgKyBcIiBcIiArIGxpc3RbMV07XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGxpc3Quc2xpY2UoMCwgLTEpLmpvaW4oXCIsIFwiKSArXG4gICAgICAgICAgICBcIiwgXCIgK1xuICAgICAgICAgICAgY29tYmluYXRvciArXG4gICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICBsaXN0W2xpc3QubGVuZ3RoIC0gMV1cbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgIHJldHVybiA5ID09PSByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZVxuICAgICAgICA/IHJvb3RDb250YWluZXJFbGVtZW50XG4gICAgICAgIDogcm9vdENvbnRhaW5lckVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0T3duSG9zdENvbnRleHQobmFtZXNwYWNlVVJJKSB7XG4gICAgICBzd2l0Y2ggKG5hbWVzcGFjZVVSSSkge1xuICAgICAgICBjYXNlIFNWR19OQU1FU1BBQ0U6XG4gICAgICAgICAgcmV0dXJuIEhvc3RDb250ZXh0TmFtZXNwYWNlU3ZnO1xuICAgICAgICBjYXNlIE1BVEhfTkFNRVNQQUNFOlxuICAgICAgICAgIHJldHVybiBIb3N0Q29udGV4dE5hbWVzcGFjZU1hdGg7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q2hpbGRIb3N0Q29udGV4dFByb2QocGFyZW50TmFtZXNwYWNlLCB0eXBlKSB7XG4gICAgICBpZiAocGFyZW50TmFtZXNwYWNlID09PSBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmUpXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJzdmdcIjpcbiAgICAgICAgICAgIHJldHVybiBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZztcbiAgICAgICAgICBjYXNlIFwibWF0aFwiOlxuICAgICAgICAgICAgcmV0dXJuIEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZTtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmVudE5hbWVzcGFjZSA9PT0gSG9zdENvbnRleHROYW1lc3BhY2VTdmcgJiZcbiAgICAgICAgXCJmb3JlaWduT2JqZWN0XCIgPT09IHR5cGVcbiAgICAgICAgPyBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmVcbiAgICAgICAgOiBwYXJlbnROYW1lc3BhY2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIHByb3BzKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBcInRleHRhcmVhXCIgPT09IHR5cGUgfHxcbiAgICAgICAgXCJub3NjcmlwdFwiID09PSB0eXBlIHx8XG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiB8fFxuICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gfHxcbiAgICAgICAgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIHByb3BzLmNoaWxkcmVuIHx8XG4gICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgJiZcbiAgICAgICAgICBudWxsICE9PSBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAmJlxuICAgICAgICAgIG51bGwgIT0gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkQXR0ZW1wdEVhZ2VyVHJhbnNpdGlvbigpIHtcbiAgICAgIHZhciBldmVudCA9IHdpbmRvdy5ldmVudDtcbiAgICAgIGlmIChldmVudCAmJiBcInBvcHN0YXRlXCIgPT09IGV2ZW50LnR5cGUpIHtcbiAgICAgICAgaWYgKGV2ZW50ID09PSBjdXJyZW50UG9wc3RhdGVUcmFuc2l0aW9uRXZlbnQpIHJldHVybiAhMTtcbiAgICAgICAgY3VycmVudFBvcHN0YXRlVHJhbnNpdGlvbkV2ZW50ID0gZXZlbnQ7XG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRQb3BzdGF0ZVRyYW5zaXRpb25FdmVudCA9IG51bGw7XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUVycm9ySW5OZXh0VGljayhlcnJvcikge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdE1vdW50KGRvbUVsZW1lbnQsIHR5cGUsIG5ld1Byb3BzKSB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcImJ1dHRvblwiOlxuICAgICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgICBuZXdQcm9wcy5hdXRvRm9jdXMgJiYgZG9tRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW1nXCI6XG4gICAgICAgICAgbmV3UHJvcHMuc3JjXG4gICAgICAgICAgICA/IChkb21FbGVtZW50LnNyYyA9IG5ld1Byb3BzLnNyYylcbiAgICAgICAgICAgIDogbmV3UHJvcHMuc3JjU2V0ICYmIChkb21FbGVtZW50LnNyY3NldCA9IG5ld1Byb3BzLnNyY1NldCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFVwZGF0ZShkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpIHtcbiAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbiAgICAgIGRvbUVsZW1lbnRbaW50ZXJuYWxQcm9wc0tleV0gPSBuZXdQcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXRUZXh0Q29udGVudChkb21FbGVtZW50KSB7XG4gICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBcIlwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgICAgIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSBuZXdUZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1NpbmdsZXRvblNjb3BlKHR5cGUpIHtcbiAgICAgIHJldHVybiBcImhlYWRcIiA9PT0gdHlwZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gICAgICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gICAgICAoOSA9PT0gY29udGFpbmVyLm5vZGVUeXBlXG4gICAgICAgID8gY29udGFpbmVyLmJvZHlcbiAgICAgICAgOiBcIkhUTUxcIiA9PT0gY29udGFpbmVyLm5vZGVOYW1lXG4gICAgICAgICAgPyBjb250YWluZXIub3duZXJEb2N1bWVudC5ib2R5XG4gICAgICAgICAgOiBjb250YWluZXJcbiAgICAgICkucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbGVhclN1c3BlbnNlQm91bmRhcnkocGFyZW50SW5zdGFuY2UsIHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgICAgIHZhciBub2RlID0gc3VzcGVuc2VJbnN0YW5jZSxcbiAgICAgICAgcG9zc2libGVQcmVhbWJsZUNvbnRyaWJ1dGlvbiA9IDAsXG4gICAgICAgIGRlcHRoID0gMDtcbiAgICAgIGRvIHtcbiAgICAgICAgdmFyIG5leHROb2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgcGFyZW50SW5zdGFuY2UucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICAgIGlmIChuZXh0Tm9kZSAmJiA4ID09PSBuZXh0Tm9kZS5ub2RlVHlwZSlcbiAgICAgICAgICBpZiAoKChub2RlID0gbmV4dE5vZGUuZGF0YSksIG5vZGUgPT09IFNVU1BFTlNFX0VORF9EQVRBKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAwIDwgcG9zc2libGVQcmVhbWJsZUNvbnRyaWJ1dGlvbiAmJlxuICAgICAgICAgICAgICA4ID4gcG9zc2libGVQcmVhbWJsZUNvbnRyaWJ1dGlvblxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIG5vZGUgPSBwb3NzaWJsZVByZWFtYmxlQ29udHJpYnV0aW9uO1xuICAgICAgICAgICAgICB2YXIgb3duZXJEb2N1bWVudCA9IHBhcmVudEluc3RhbmNlLm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICAgIG5vZGUgJiBQUkVBTUJMRV9DT05UUklCVVRJT05fSFRNTCAmJlxuICAgICAgICAgICAgICAgIHJlbGVhc2VTaW5nbGV0b25JbnN0YW5jZShvd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgICAgICAgICAgIG5vZGUgJiBQUkVBTUJMRV9DT05UUklCVVRJT05fQk9EWSAmJlxuICAgICAgICAgICAgICAgIHJlbGVhc2VTaW5nbGV0b25JbnN0YW5jZShvd25lckRvY3VtZW50LmJvZHkpO1xuICAgICAgICAgICAgICBpZiAobm9kZSAmIFBSRUFNQkxFX0NPTlRSSUJVVElPTl9IRUFEKVxuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICBub2RlID0gb3duZXJEb2N1bWVudC5oZWFkLFxuICAgICAgICAgICAgICAgICAgICByZWxlYXNlU2luZ2xldG9uSW5zdGFuY2Uobm9kZSksXG4gICAgICAgICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgICBvd25lckRvY3VtZW50O1xuXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbmV4dE5vZGUkanNjb21wJDAgPSBvd25lckRvY3VtZW50Lm5leHRTaWJsaW5nLFxuICAgICAgICAgICAgICAgICAgICBub2RlTmFtZSA9IG93bmVyRG9jdW1lbnQubm9kZU5hbWU7XG4gICAgICAgICAgICAgICAgICBvd25lckRvY3VtZW50W2ludGVybmFsSG9pc3RhYmxlTWFya2VyXSB8fFxuICAgICAgICAgICAgICAgICAgICBcIlNDUklQVFwiID09PSBub2RlTmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICBcIlNUWUxFXCIgPT09IG5vZGVOYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIChcIkxJTktcIiA9PT0gbm9kZU5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICBcInN0eWxlc2hlZXRcIiA9PT0gb3duZXJEb2N1bWVudC5yZWwudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChvd25lckRvY3VtZW50KTtcbiAgICAgICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQgPSBuZXh0Tm9kZSRqc2NvbXAkMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoMCA9PT0gZGVwdGgpIHtcbiAgICAgICAgICAgICAgcGFyZW50SW5zdGFuY2UucmVtb3ZlQ2hpbGQobmV4dE5vZGUpO1xuICAgICAgICAgICAgICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgbm9kZSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgbm9kZSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBub2RlID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBXG4gICAgICAgICAgICAgID8gZGVwdGgrK1xuICAgICAgICAgICAgICA6IChwb3NzaWJsZVByZWFtYmxlQ29udHJpYnV0aW9uID0gbm9kZS5jaGFyQ29kZUF0KDApIC0gNDgpO1xuICAgICAgICBlbHNlIHBvc3NpYmxlUHJlYW1ibGVDb250cmlidXRpb24gPSAwO1xuICAgICAgICBub2RlID0gbmV4dE5vZGU7XG4gICAgICB9IHdoaWxlIChub2RlKTtcbiAgICAgIHJldHJ5SWZCbG9ja2VkT24oc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhpZGVJbnN0YW5jZShpbnN0YW5jZSkge1xuICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5zdHlsZTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLnNldFByb3BlcnR5XG4gICAgICAgID8gaW5zdGFuY2Uuc2V0UHJvcGVydHkoXCJkaXNwbGF5XCIsIFwibm9uZVwiLCBcImltcG9ydGFudFwiKVxuICAgICAgICA6IChpbnN0YW5jZS5kaXNwbGF5ID0gXCJub25lXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSkge1xuICAgICAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVuaGlkZUluc3RhbmNlKGluc3RhbmNlLCBwcm9wcykge1xuICAgICAgcHJvcHMgPSBwcm9wc1tTVFlMRV07XG4gICAgICBwcm9wcyA9XG4gICAgICAgIHZvaWQgMCAhPT0gcHJvcHMgJiYgbnVsbCAhPT0gcHJvcHMgJiYgcHJvcHMuaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5XCIpXG4gICAgICAgICAgPyBwcm9wcy5kaXNwbGF5XG4gICAgICAgICAgOiBudWxsO1xuICAgICAgaW5zdGFuY2Uuc3R5bGUuZGlzcGxheSA9XG4gICAgICAgIG51bGwgPT0gcHJvcHMgfHwgXCJib29sZWFuXCIgPT09IHR5cGVvZiBwcm9wcyA/IFwiXCIgOiAoXCJcIiArIHByb3BzKS50cmltKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVuaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgICAgIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSB0ZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lclNwYXJpbmdseShjb250YWluZXIpIHtcbiAgICAgIHZhciBuZXh0Tm9kZSA9IGNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgbmV4dE5vZGUgJiYgMTAgPT09IG5leHROb2RlLm5vZGVUeXBlICYmIChuZXh0Tm9kZSA9IG5leHROb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgIGZvciAoOyBuZXh0Tm9kZTsgKSB7XG4gICAgICAgIHZhciBub2RlID0gbmV4dE5vZGU7XG4gICAgICAgIG5leHROb2RlID0gbmV4dE5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgIHN3aXRjaCAobm9kZS5ub2RlTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJIVE1MXCI6XG4gICAgICAgICAgY2FzZSBcIkhFQURcIjpcbiAgICAgICAgICBjYXNlIFwiQk9EWVwiOlxuICAgICAgICAgICAgY2xlYXJDb250YWluZXJTcGFyaW5nbHkobm9kZSk7XG4gICAgICAgICAgICBkZXRhY2hEZWxldGVkSW5zdGFuY2Uobm9kZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICBjYXNlIFwiU0NSSVBUXCI6XG4gICAgICAgICAgY2FzZSBcIlNUWUxFXCI6XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICBjYXNlIFwiTElOS1wiOlxuICAgICAgICAgICAgaWYgKFwic3R5bGVzaGVldFwiID09PSBub2RlLnJlbC50b0xvd2VyQ2FzZSgpKSBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbkh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIGluUm9vdE9yU2luZ2xldG9uKSB7XG4gICAgICBmb3IgKDsgMSA9PT0gaW5zdGFuY2Uubm9kZVR5cGU7ICkge1xuICAgICAgICB2YXIgYW55UHJvcHMgPSBwcm9wcztcbiAgICAgICAgaWYgKGluc3RhbmNlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IHR5cGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpblJvb3RPclNpbmdsZXRvbiAmJlxuICAgICAgICAgICAgKFwiSU5QVVRcIiAhPT0gaW5zdGFuY2Uubm9kZU5hbWUgfHwgXCJoaWRkZW5cIiAhPT0gaW5zdGFuY2UudHlwZSlcbiAgICAgICAgICApXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghaW5Sb290T3JTaW5nbGV0b24pXG4gICAgICAgICAgaWYgKFwiaW5wdXRcIiA9PT0gdHlwZSAmJiBcImhpZGRlblwiID09PSBpbnN0YW5jZS50eXBlKSB7XG4gICAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKGFueVByb3BzLm5hbWUsIFwibmFtZVwiKTtcbiAgICAgICAgICAgIHZhciBuYW1lID0gbnVsbCA9PSBhbnlQcm9wcy5uYW1lID8gbnVsbCA6IFwiXCIgKyBhbnlQcm9wcy5uYW1lO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBcImhpZGRlblwiID09PSBhbnlQcm9wcy50eXBlICYmXG4gICAgICAgICAgICAgIGluc3RhbmNlLmdldEF0dHJpYnV0ZShcIm5hbWVcIikgPT09IG5hbWVcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIGVsc2UgaWYgKCFpbnN0YW5jZVtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0pXG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwibWV0YVwiOlxuICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlLmhhc0F0dHJpYnV0ZShcIml0ZW1wcm9wXCIpKSBicmVhaztcbiAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgbmFtZSA9IGluc3RhbmNlLmdldEF0dHJpYnV0ZShcInJlbFwiKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIFwic3R5bGVzaGVldFwiID09PSBuYW1lICYmXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaGFzQXR0cmlidXRlKFwiZGF0YS1wcmVjZWRlbmNlXCIpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgbmFtZSAhPT0gYW55UHJvcHMucmVsIHx8XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSAhPT1cbiAgICAgICAgICAgICAgICAgIChudWxsID09IGFueVByb3BzLmhyZWYgfHwgXCJcIiA9PT0gYW55UHJvcHMuaHJlZlxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiBhbnlQcm9wcy5ocmVmKSB8fFxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmdldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIpICE9PVxuICAgICAgICAgICAgICAgICAgKG51bGwgPT0gYW55UHJvcHMuY3Jvc3NPcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogYW55UHJvcHMuY3Jvc3NPcmlnaW4pIHx8XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwidGl0bGVcIikgIT09XG4gICAgICAgICAgICAgICAgICAobnVsbCA9PSBhbnlQcm9wcy50aXRsZSA/IG51bGwgOiBhbnlQcm9wcy50aXRsZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLmhhc0F0dHJpYnV0ZShcImRhdGEtcHJlY2VkZW5jZVwiKSkgYnJlYWs7XG4gICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgICAgbmFtZSA9IGluc3RhbmNlLmdldEF0dHJpYnV0ZShcInNyY1wiKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChuYW1lICE9PSAobnVsbCA9PSBhbnlQcm9wcy5zcmMgPyBudWxsIDogYW55UHJvcHMuc3JjKSB8fFxuICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSAhPT1cbiAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gYW55UHJvcHMudHlwZSA/IG51bGwgOiBhbnlQcm9wcy50eXBlKSB8fFxuICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIikgIT09XG4gICAgICAgICAgICAgICAgICAgIChudWxsID09IGFueVByb3BzLmNyb3NzT3JpZ2luXG4gICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgOiBhbnlQcm9wcy5jcm9zc09yaWdpbikpICYmXG4gICAgICAgICAgICAgICAgbmFtZSAmJlxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmhhc0F0dHJpYnV0ZShcImFzeW5jXCIpICYmXG4gICAgICAgICAgICAgICAgIWluc3RhbmNlLmhhc0F0dHJpYnV0ZShcIml0ZW1wcm9wXCIpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShpbnN0YW5jZS5uZXh0U2libGluZyk7XG4gICAgICAgIGlmIChudWxsID09PSBpbnN0YW5jZSkgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShpbnN0YW5jZSwgdGV4dCwgaW5Sb290T3JTaW5nbGV0b24pIHtcbiAgICAgIGlmIChcIlwiID09PSB0ZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgIGZvciAoOyAzICE9PSBpbnN0YW5jZS5ub2RlVHlwZTsgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoMSAhPT0gaW5zdGFuY2Uubm9kZVR5cGUgfHxcbiAgICAgICAgICAgIFwiSU5QVVRcIiAhPT0gaW5zdGFuY2Uubm9kZU5hbWUgfHxcbiAgICAgICAgICAgIFwiaGlkZGVuXCIgIT09IGluc3RhbmNlLnR5cGUpICYmXG4gICAgICAgICAgIWluUm9vdE9yU2luZ2xldG9uXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShpbnN0YW5jZS5uZXh0U2libGluZyk7XG4gICAgICAgIGlmIChudWxsID09PSBpbnN0YW5jZSkgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGluc3RhbmNlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8XG4gICAgICAgIChpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgJiZcbiAgICAgICAgICBpbnN0YW5jZS5vd25lckRvY3VtZW50LnJlYWR5U3RhdGUgPT09IERPQ1VNRU5UX1JFQURZX1NUQVRFX0NPTVBMRVRFKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJTdXNwZW5zZUluc3RhbmNlUmV0cnkoaW5zdGFuY2UsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGluc3RhbmNlLm93bmVyRG9jdW1lbnQ7XG4gICAgICBpZiAoXG4gICAgICAgIGluc3RhbmNlLmRhdGEgIT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSB8fFxuICAgICAgICBvd25lckRvY3VtZW50LnJlYWR5U3RhdGUgPT09IERPQ1VNRU5UX1JFQURZX1NUQVRFX0NPTVBMRVRFXG4gICAgICApXG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgb3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICAgIG93bmVyRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgbGlzdGVuZXIpO1xuICAgICAgICBpbnN0YW5jZS5fcmVhY3RSZXRyeSA9IGxpc3RlbmVyO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZShub2RlKSB7XG4gICAgICBmb3IgKDsgbnVsbCAhPSBub2RlOyBub2RlID0gbm9kZS5uZXh0U2libGluZykge1xuICAgICAgICB2YXIgbm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlO1xuICAgICAgICBpZiAoMSA9PT0gbm9kZVR5cGUgfHwgMyA9PT0gbm9kZVR5cGUpIGJyZWFrO1xuICAgICAgICBpZiAoOCA9PT0gbm9kZVR5cGUpIHtcbiAgICAgICAgICBub2RlVHlwZSA9IG5vZGUuZGF0YTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBub2RlVHlwZSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIG5vZGVUeXBlID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIG5vZGVUeXBlID09PSBGT1JNX1NUQVRFX0lTX01BVENISU5HIHx8XG4gICAgICAgICAgICBub2RlVHlwZSA9PT0gRk9STV9TVEFURV9JU19OT1RfTUFUQ0hJTkdcbiAgICAgICAgICApXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBpZiAobm9kZVR5cGUgPT09IFNVU1BFTlNFX0VORF9EQVRBKSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlSHlkcmF0YWJsZUluc3RhbmNlRm9yRGV2V2FybmluZ3MoaW5zdGFuY2UpIHtcbiAgICAgIGlmICgxID09PSBpbnN0YW5jZS5ub2RlVHlwZSkge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXBfY29uc3QgPSBpbnN0YW5jZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMgPSB7fSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBpbnN0YW5jZS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoO1xuICAgICAgICAgIGkrK1xuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJpYnV0ZXNbaV07XG4gICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNbZ2V0UHJvcE5hbWVGcm9tQXR0cmlidXRlTmFtZShhdHRyLm5hbWUpXSA9XG4gICAgICAgICAgICBcInN0eWxlXCIgPT09IGF0dHIubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgID8gZ2V0U3R5bGVzT2JqZWN0RnJvbUVsZW1lbnQoaW5zdGFuY2UpXG4gICAgICAgICAgICAgIDogYXR0ci52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB0eXBlOiBKU0NvbXBpbGVyX3RlbXBfY29uc3QsIHByb3BzOiBzZXJ2ZXJEaWZmZXJlbmNlcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIDggPT09IGluc3RhbmNlLm5vZGVUeXBlXG4gICAgICAgID8geyB0eXBlOiBcIlN1c3BlbnNlXCIsIHByb3BzOiB7fSB9XG4gICAgICAgIDogaW5zdGFuY2Uubm9kZVZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaWZmSHlkcmF0ZWRUZXh0Rm9yRGV2V2FybmluZ3ModGV4dEluc3RhbmNlLCB0ZXh0LCBwYXJlbnRQcm9wcykge1xuICAgICAgcmV0dXJuIG51bGwgPT09IHBhcmVudFByb3BzIHx8XG4gICAgICAgICEwICE9PSBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklOR11cbiAgICAgICAgPyAodGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9PT0gdGV4dFxuICAgICAgICAgICAgPyAodGV4dEluc3RhbmNlID0gbnVsbClcbiAgICAgICAgICAgIDogKCh0ZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHRleHQpKSxcbiAgICAgICAgICAgICAgKHRleHRJbnN0YW5jZSA9XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHRleHRJbnN0YW5jZS5ub2RlVmFsdWUpID09PVxuICAgICAgICAgICAgICAgIHRleHRcbiAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgOiB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlKSksXG4gICAgICAgICAgdGV4dEluc3RhbmNlKVxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICAgICAgc3VzcGVuc2VJbnN0YW5jZSA9IHN1c3BlbnNlSW5zdGFuY2UubmV4dFNpYmxpbmc7XG4gICAgICBmb3IgKHZhciBkZXB0aCA9IDA7IHN1c3BlbnNlSW5zdGFuY2U7ICkge1xuICAgICAgICBpZiAoOCA9PT0gc3VzcGVuc2VJbnN0YW5jZS5ub2RlVHlwZSkge1xuICAgICAgICAgIHZhciBkYXRhID0gc3VzcGVuc2VJbnN0YW5jZS5kYXRhO1xuICAgICAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICAgICAgaWYgKDAgPT09IGRlcHRoKVxuICAgICAgICAgICAgICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUoc3VzcGVuc2VJbnN0YW5jZS5uZXh0U2libGluZyk7XG4gICAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgKGRhdGEgIT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgJiZcbiAgICAgICAgICAgICAgZGF0YSAhPT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSAmJlxuICAgICAgICAgICAgICBkYXRhICE9PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHx8XG4gICAgICAgICAgICAgIGRlcHRoKys7XG4gICAgICAgIH1cbiAgICAgICAgc3VzcGVuc2VJbnN0YW5jZSA9IHN1c3BlbnNlSW5zdGFuY2UubmV4dFNpYmxpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXRJbnN0YW5jZSkge1xuICAgICAgdGFyZ2V0SW5zdGFuY2UgPSB0YXJnZXRJbnN0YW5jZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICBmb3IgKHZhciBkZXB0aCA9IDA7IHRhcmdldEluc3RhbmNlOyApIHtcbiAgICAgICAgaWYgKDggPT09IHRhcmdldEluc3RhbmNlLm5vZGVUeXBlKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSB0YXJnZXRJbnN0YW5jZS5kYXRhO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKDAgPT09IGRlcHRoKSByZXR1cm4gdGFyZ2V0SW5zdGFuY2U7XG4gICAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICAgIH0gZWxzZSBkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSAmJiBkZXB0aCsrO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldEluc3RhbmNlID0gdGFyZ2V0SW5zdGFuY2UucHJldmlvdXNTaWJsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICAgICAgcmV0cnlJZkJsb2NrZWRPbihjb250YWluZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICAgICAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVNpbmdsZXRvbkluc3RhbmNlKFxuICAgICAgdHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgcm9vdENvbnRhaW5lckluc3RhbmNlLFxuICAgICAgaG9zdENvbnRleHQsXG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmdEZXZcbiAgICApIHtcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZ0RldiAmJlxuICAgICAgICB2YWxpZGF0ZURPTU5lc3RpbmcodHlwZSwgaG9zdENvbnRleHQuYW5jZXN0b3JJbmZvKTtcbiAgICAgIHByb3BzID0gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcImh0bWxcIjpcbiAgICAgICAgICB0eXBlID0gcHJvcHMuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAgIGlmICghdHlwZSlcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0IGV4cGVjdGVkIGFuIDxodG1sPiBlbGVtZW50IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHRvIGV4aXN0IGluIHRoZSBEb2N1bWVudCBidXQgb25lIHdhcyBub3QgZm91bmQuIFJlYWN0IG5ldmVyIHJlbW92ZXMgdGhlIGRvY3VtZW50RWxlbWVudCBmb3IgYW55IERvY3VtZW50IGl0IHJlbmRlcnMgaW50byBzbyB0aGUgY2F1c2UgaXMgbGlrZWx5IGluIHNvbWUgb3RoZXIgc2NyaXB0IHJ1bm5pbmcgb24gdGhpcyBwYWdlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICBjYXNlIFwiaGVhZFwiOlxuICAgICAgICAgIHR5cGUgPSBwcm9wcy5oZWFkO1xuICAgICAgICAgIGlmICghdHlwZSlcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0IGV4cGVjdGVkIGEgPGhlYWQ+IGVsZW1lbnQgKGRvY3VtZW50LmhlYWQpIHRvIGV4aXN0IGluIHRoZSBEb2N1bWVudCBidXQgb25lIHdhcyBub3QgZm91bmQuIFJlYWN0IG5ldmVyIHJlbW92ZXMgdGhlIGhlYWQgZm9yIGFueSBEb2N1bWVudCBpdCByZW5kZXJzIGludG8gc28gdGhlIGNhdXNlIGlzIGxpa2VseSBpbiBzb21lIG90aGVyIHNjcmlwdCBydW5uaW5nIG9uIHRoaXMgcGFnZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgY2FzZSBcImJvZHlcIjpcbiAgICAgICAgICB0eXBlID0gcHJvcHMuYm9keTtcbiAgICAgICAgICBpZiAoIXR5cGUpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdCBleHBlY3RlZCBhIDxib2R5PiBlbGVtZW50IChkb2N1bWVudC5ib2R5KSB0byBleGlzdCBpbiB0aGUgRG9jdW1lbnQgYnV0IG9uZSB3YXMgbm90IGZvdW5kLiBSZWFjdCBuZXZlciByZW1vdmVzIHRoZSBib2R5IGZvciBhbnkgRG9jdW1lbnQgaXQgcmVuZGVycyBpbnRvIHNvIHRoZSBjYXVzZSBpcyBsaWtlbHkgaW4gc29tZSBvdGhlciBzY3JpcHQgcnVubmluZyBvbiB0aGlzIHBhZ2UuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcInJlc29sdmVTaW5nbGV0b25JbnN0YW5jZSB3YXMgY2FsbGVkIHdpdGggYW4gZWxlbWVudCB0eXBlIHRoYXQgaXMgbm90IHN1cHBvcnRlZC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFjcXVpcmVTaW5nbGV0b25JbnN0YW5jZShcbiAgICAgIHR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlLFxuICAgICAgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICAhaW5zdGFuY2VbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gJiZcbiAgICAgICAgZ2V0SW5zdGFuY2VGcm9tTm9kZShpbnN0YW5jZSlcbiAgICAgICkge1xuICAgICAgICB2YXIgdGFnTmFtZSA9IGluc3RhbmNlLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIllvdSBhcmUgbW91bnRpbmcgYSBuZXcgJXMgY29tcG9uZW50IHdoZW4gYSBwcmV2aW91cyBvbmUgaGFzIG5vdCBmaXJzdCB1bm1vdW50ZWQuIEl0IGlzIGFuIGVycm9yIHRvIHJlbmRlciBtb3JlIHRoYW4gb25lICVzIGNvbXBvbmVudCBhdCBhIHRpbWUgYW5kIGF0dHJpYnV0ZXMgYW5kIGNoaWxkcmVuIG9mIHRoZXNlIGNvbXBvbmVudHMgd2lsbCBsaWtlbHkgZmFpbCBpbiB1bnByZWRpY3RhYmxlIHdheXMuIFBsZWFzZSBvbmx5IHJlbmRlciBhIHNpbmdsZSBpbnN0YW5jZSBvZiA8JXM+IGFuZCBpZiB5b3UgbmVlZCB0byBtb3VudCBhIG5ldyBvbmUsIGVuc3VyZSBhbnkgcHJldmlvdXMgb25lcyBoYXZlIHVubW91bnRlZCBmaXJzdC5cIixcbiAgICAgICAgICB0YWdOYW1lLFxuICAgICAgICAgIHRhZ05hbWUsXG4gICAgICAgICAgdGFnTmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJodG1sXCI6XG4gICAgICAgIGNhc2UgXCJoZWFkXCI6XG4gICAgICAgIGNhc2UgXCJib2R5XCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiYWNxdWlyZVNpbmdsZXRvbkluc3RhbmNlIHdhcyBjYWxsZWQgd2l0aCBhbiBlbGVtZW50IHR5cGUgdGhhdCBpcyBub3Qgc3VwcG9ydGVkLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZvciAodGFnTmFtZSA9IGluc3RhbmNlLmF0dHJpYnV0ZXM7IHRhZ05hbWUubGVuZ3RoOyApXG4gICAgICAgIGluc3RhbmNlLnJlbW92ZUF0dHJpYnV0ZU5vZGUodGFnTmFtZVswXSk7XG4gICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhpbnN0YW5jZSwgdHlwZSwgcHJvcHMpO1xuICAgICAgaW5zdGFuY2VbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBpbnRlcm5hbEluc3RhbmNlSGFuZGxlO1xuICAgICAgaW5zdGFuY2VbaW50ZXJuYWxQcm9wc0tleV0gPSBwcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsZWFzZVNpbmdsZXRvbkluc3RhbmNlKGluc3RhbmNlKSB7XG4gICAgICBmb3IgKHZhciBhdHRyaWJ1dGVzID0gaW5zdGFuY2UuYXR0cmlidXRlczsgYXR0cmlidXRlcy5sZW5ndGg7IClcbiAgICAgICAgaW5zdGFuY2UucmVtb3ZlQXR0cmlidXRlTm9kZShhdHRyaWJ1dGVzWzBdKTtcbiAgICAgIGRldGFjaERlbGV0ZWRJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEhvaXN0YWJsZVJvb3QoY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGFpbmVyLmdldFJvb3ROb2RlXG4gICAgICAgID8gY29udGFpbmVyLmdldFJvb3ROb2RlKClcbiAgICAgICAgOiA5ID09PSBjb250YWluZXIubm9kZVR5cGVcbiAgICAgICAgICA/IGNvbnRhaW5lclxuICAgICAgICAgIDogY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZWNvbm5lY3RBcyhyZWwsIGhyZWYsIGNyb3NzT3JpZ2luKSB7XG4gICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICAgICAgaWYgKG93bmVyRG9jdW1lbnQgJiYgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiYgaHJlZikge1xuICAgICAgICB2YXIgbGltaXRlZEVzY2FwZWRIcmVmID1cbiAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGhyZWYpO1xuICAgICAgICBsaW1pdGVkRXNjYXBlZEhyZWYgPVxuICAgICAgICAgICdsaW5rW3JlbD1cIicgKyByZWwgKyAnXCJdW2hyZWY9XCInICsgbGltaXRlZEVzY2FwZWRIcmVmICsgJ1wiXSc7XG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBjcm9zc09yaWdpbiAmJlxuICAgICAgICAgIChsaW1pdGVkRXNjYXBlZEhyZWYgKz0gJ1tjcm9zc29yaWdpbj1cIicgKyBjcm9zc09yaWdpbiArICdcIl0nKTtcbiAgICAgICAgcHJlY29ubmVjdHNTZXQuaGFzKGxpbWl0ZWRFc2NhcGVkSHJlZikgfHxcbiAgICAgICAgICAocHJlY29ubmVjdHNTZXQuYWRkKGxpbWl0ZWRFc2NhcGVkSHJlZiksXG4gICAgICAgICAgKHJlbCA9IHsgcmVsOiByZWwsIGNyb3NzT3JpZ2luOiBjcm9zc09yaWdpbiwgaHJlZjogaHJlZiB9KSxcbiAgICAgICAgICBudWxsID09PSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobGltaXRlZEVzY2FwZWRIcmVmKSAmJlxuICAgICAgICAgICAgKChocmVmID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSksXG4gICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhocmVmLCBcImxpbmtcIiwgcmVsKSxcbiAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaHJlZiksXG4gICAgICAgICAgICBvd25lckRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaHJlZikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UmVzb3VyY2UodHlwZSwgY3VycmVudFByb3BzLCBwZW5kaW5nUHJvcHMsIGN1cnJlbnRSZXNvdXJjZSkge1xuICAgICAgdmFyIHJlc291cmNlUm9vdCA9IChyZXNvdXJjZVJvb3QgPSByb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KVxuICAgICAgICA/IGdldEhvaXN0YWJsZVJvb3QocmVzb3VyY2VSb290KVxuICAgICAgICA6IG51bGw7XG4gICAgICBpZiAoIXJlc291cmNlUm9vdClcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ1wicmVzb3VyY2VSb290XCIgd2FzIGV4cGVjdGVkIHRvIGV4aXN0LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LidcbiAgICAgICAgKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwibWV0YVwiOlxuICAgICAgICBjYXNlIFwidGl0bGVcIjpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwZW5kaW5nUHJvcHMucHJlY2VkZW5jZSAmJlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcy5ocmVmXG4gICAgICAgICAgICA/ICgocGVuZGluZ1Byb3BzID0gZ2V0U3R5bGVLZXkocGVuZGluZ1Byb3BzLmhyZWYpKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnRQcm9wcyA9XG4gICAgICAgICAgICAgICAgZ2V0UmVzb3VyY2VzRnJvbVJvb3QocmVzb3VyY2VSb290KS5ob2lzdGFibGVTdHlsZXMpLFxuICAgICAgICAgICAgICAoY3VycmVudFJlc291cmNlID0gY3VycmVudFByb3BzLmdldChwZW5kaW5nUHJvcHMpKSxcbiAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlIHx8XG4gICAgICAgICAgICAgICAgKChjdXJyZW50UmVzb3VyY2UgPSB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInN0eWxlXCIsXG4gICAgICAgICAgICAgICAgICBpbnN0YW5jZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICAgICAgc3RhdGU6IG51bGxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjdXJyZW50UHJvcHMuc2V0KHBlbmRpbmdQcm9wcywgY3VycmVudFJlc291cmNlKSksXG4gICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZSlcbiAgICAgICAgICAgIDogeyB0eXBlOiBcInZvaWRcIiwgaW5zdGFuY2U6IG51bGwsIGNvdW50OiAwLCBzdGF0ZTogbnVsbCB9O1xuICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFwic3R5bGVzaGVldFwiID09PSBwZW5kaW5nUHJvcHMucmVsICYmXG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcGVuZGluZ1Byb3BzLmhyZWYgJiZcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwZW5kaW5nUHJvcHMucHJlY2VkZW5jZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdHlwZSA9IGdldFN0eWxlS2V5KHBlbmRpbmdQcm9wcy5ocmVmKTtcbiAgICAgICAgICAgIHZhciBfc3R5bGVzID0gZ2V0UmVzb3VyY2VzRnJvbVJvb3QocmVzb3VyY2VSb290KS5ob2lzdGFibGVTdHlsZXMsXG4gICAgICAgICAgICAgIF9yZXNvdXJjZSA9IF9zdHlsZXMuZ2V0KHR5cGUpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhX3Jlc291cmNlICYmXG4gICAgICAgICAgICAgICgocmVzb3VyY2VSb290ID0gcmVzb3VyY2VSb290Lm93bmVyRG9jdW1lbnQgfHwgcmVzb3VyY2VSb290KSxcbiAgICAgICAgICAgICAgKF9yZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0eWxlc2hlZXRcIixcbiAgICAgICAgICAgICAgICBpbnN0YW5jZTogbnVsbCxcbiAgICAgICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgICAgICBzdGF0ZTogeyBsb2FkaW5nOiBOb3RMb2FkZWQsIHByZWxvYWQ6IG51bGwgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX3N0eWxlcy5zZXQodHlwZSwgX3Jlc291cmNlKSxcbiAgICAgICAgICAgICAgKF9zdHlsZXMgPSByZXNvdXJjZVJvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICBnZXRTdHlsZXNoZWV0U2VsZWN0b3JGcm9tS2V5KHR5cGUpXG4gICAgICAgICAgICAgICkpICYmXG4gICAgICAgICAgICAgICAgIV9zdHlsZXMuX3AgJiZcbiAgICAgICAgICAgICAgICAoKF9yZXNvdXJjZS5pbnN0YW5jZSA9IF9zdHlsZXMpLFxuICAgICAgICAgICAgICAgIChfcmVzb3VyY2Uuc3RhdGUubG9hZGluZyA9IExvYWRlZCB8IEluc2VydGVkKSksXG4gICAgICAgICAgICAgICFwcmVsb2FkUHJvcHNNYXAuaGFzKHR5cGUpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhciBwcmVsb2FkUHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgcmVsOiBcInByZWxvYWRcIixcbiAgICAgICAgICAgICAgICBhczogXCJzdHlsZVwiLFxuICAgICAgICAgICAgICAgIGhyZWY6IHBlbmRpbmdQcm9wcy5ocmVmLFxuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBwZW5kaW5nUHJvcHMuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OiBwZW5kaW5nUHJvcHMuaW50ZWdyaXR5LFxuICAgICAgICAgICAgICAgIG1lZGlhOiBwZW5kaW5nUHJvcHMubWVkaWEsXG4gICAgICAgICAgICAgICAgaHJlZkxhbmc6IHBlbmRpbmdQcm9wcy5ocmVmTGFuZyxcbiAgICAgICAgICAgICAgICByZWZlcnJlclBvbGljeTogcGVuZGluZ1Byb3BzLnJlZmVycmVyUG9saWN5XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHByZWxvYWRQcm9wc01hcC5zZXQodHlwZSwgcHJlbG9hZFByb3BzKTtcbiAgICAgICAgICAgICAgX3N0eWxlcyB8fFxuICAgICAgICAgICAgICAgIHByZWxvYWRTdHlsZXNoZWV0KFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VSb290LFxuICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgIHByZWxvYWRQcm9wcyxcbiAgICAgICAgICAgICAgICAgIF9yZXNvdXJjZS5zdGF0ZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3VycmVudFByb3BzICYmIG51bGwgPT09IGN1cnJlbnRSZXNvdXJjZSlcbiAgICAgICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgICAgICgocGVuZGluZ1Byb3BzID1cbiAgICAgICAgICAgICAgICAgIFwiXFxuXFxuICAtIFwiICtcbiAgICAgICAgICAgICAgICAgIGRlc2NyaWJlTGlua0ZvclJlc291cmNlRXJyb3JERVYoY3VycmVudFByb3BzKSArXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgKyBcIiArXG4gICAgICAgICAgICAgICAgICBkZXNjcmliZUxpbmtGb3JSZXNvdXJjZUVycm9yREVWKHBlbmRpbmdQcm9wcykpLFxuICAgICAgICAgICAgICAgIEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCA8bGluaz4gbm90IHRvIHVwZGF0ZSB0byBiZSB1cGRhdGVkIHRvIGEgc3R5bGVzaGVldCB3aXRoIHByZWNlZGVuY2UuIENoZWNrIHRoZSBgcmVsYCwgYGhyZWZgLCBhbmQgYHByZWNlZGVuY2VgIHByb3BzIG9mIHRoaXMgY29tcG9uZW50LiBBbHRlcm5hdGl2ZWx5LCBjaGVjayB3aGV0aGVyIHR3byBkaWZmZXJlbnQgPGxpbms+IGNvbXBvbmVudHMgcmVuZGVyIGluIHRoZSBzYW1lIHNsb3Qgb3Igc2hhcmUgdGhlIHNhbWUga2V5LlwiICtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1Byb3BzXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBfcmVzb3VyY2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjdXJyZW50UHJvcHMgJiYgbnVsbCAhPT0gY3VycmVudFJlc291cmNlKVxuICAgICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgICAoKHBlbmRpbmdQcm9wcyA9XG4gICAgICAgICAgICAgICAgXCJcXG5cXG4gIC0gXCIgK1xuICAgICAgICAgICAgICAgIGRlc2NyaWJlTGlua0ZvclJlc291cmNlRXJyb3JERVYoY3VycmVudFByb3BzKSArXG4gICAgICAgICAgICAgICAgXCJcXG4gICsgXCIgK1xuICAgICAgICAgICAgICAgIGRlc2NyaWJlTGlua0ZvclJlc291cmNlRXJyb3JERVYocGVuZGluZ1Byb3BzKSksXG4gICAgICAgICAgICAgIEVycm9yKFxuICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgc3R5bGVzaGVldCB3aXRoIHByZWNlZGVuY2UgdG8gbm90IGJlIHVwZGF0ZWQgdG8gYSBkaWZmZXJlbnQga2luZCBvZiA8bGluaz4uIENoZWNrIHRoZSBgcmVsYCwgYGhyZWZgLCBhbmQgYHByZWNlZGVuY2VgIHByb3BzIG9mIHRoaXMgY29tcG9uZW50LiBBbHRlcm5hdGl2ZWx5LCBjaGVjayB3aGV0aGVyIHR3byBkaWZmZXJlbnQgPGxpbms+IGNvbXBvbmVudHMgcmVuZGVyIGluIHRoZSBzYW1lIHNsb3Qgb3Igc2hhcmUgdGhlIHNhbWUga2V5LlwiICtcbiAgICAgICAgICAgICAgICAgIHBlbmRpbmdQcm9wc1xuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoY3VycmVudFByb3BzID0gcGVuZGluZ1Byb3BzLmFzeW5jKSxcbiAgICAgICAgICAgIChwZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHMuc3JjKSxcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwZW5kaW5nUHJvcHMgJiZcbiAgICAgICAgICAgIGN1cnJlbnRQcm9wcyAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY3VycmVudFByb3BzICYmXG4gICAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgY3VycmVudFByb3BzXG4gICAgICAgICAgICAgID8gKChwZW5kaW5nUHJvcHMgPSBnZXRTY3JpcHRLZXkocGVuZGluZ1Byb3BzKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRQcm9wcyA9XG4gICAgICAgICAgICAgICAgICBnZXRSZXNvdXJjZXNGcm9tUm9vdChyZXNvdXJjZVJvb3QpLmhvaXN0YWJsZVNjcmlwdHMpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50UmVzb3VyY2UgPSBjdXJyZW50UHJvcHMuZ2V0KHBlbmRpbmdQcm9wcykpLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZSB8fFxuICAgICAgICAgICAgICAgICAgKChjdXJyZW50UmVzb3VyY2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IG51bGxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgY3VycmVudFByb3BzLnNldChwZW5kaW5nUHJvcHMsIGN1cnJlbnRSZXNvdXJjZSkpLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZSlcbiAgICAgICAgICAgICAgOiB7IHR5cGU6IFwidm9pZFwiLCBpbnN0YW5jZTogbnVsbCwgY291bnQ6IDAsIHN0YXRlOiBudWxsIH1cbiAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgJ2dldFJlc291cmNlIGVuY291bnRlcmVkIGEgdHlwZSBpdCBkaWQgbm90IGV4cGVjdDogXCInICtcbiAgICAgICAgICAgICAgdHlwZSArXG4gICAgICAgICAgICAgICdcIi4gdGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVMaW5rRm9yUmVzb3VyY2VFcnJvckRFVihwcm9wcykge1xuICAgICAgdmFyIGRlc2NyaWJlZFByb3BzID0gMCxcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIjxsaW5rXCI7XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMucmVsXG4gICAgICAgID8gKGRlc2NyaWJlZFByb3BzKyssIChkZXNjcmlwdGlvbiArPSAnIHJlbD1cIicgKyBwcm9wcy5yZWwgKyAnXCInKSlcbiAgICAgICAgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBcInJlbFwiKSAmJlxuICAgICAgICAgIChkZXNjcmliZWRQcm9wcysrLFxuICAgICAgICAgIChkZXNjcmlwdGlvbiArPVxuICAgICAgICAgICAgJyByZWw9XCInICtcbiAgICAgICAgICAgIChudWxsID09PSBwcm9wcy5yZWwgPyBcIm51bGxcIiA6IFwiaW52YWxpZCB0eXBlIFwiICsgdHlwZW9mIHByb3BzLnJlbCkgK1xuICAgICAgICAgICAgJ1wiJykpO1xuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHByb3BzLmhyZWZcbiAgICAgICAgPyAoZGVzY3JpYmVkUHJvcHMrKywgKGRlc2NyaXB0aW9uICs9ICcgaHJlZj1cIicgKyBwcm9wcy5ocmVmICsgJ1wiJykpXG4gICAgICAgIDogaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywgXCJocmVmXCIpICYmXG4gICAgICAgICAgKGRlc2NyaWJlZFByb3BzKyssXG4gICAgICAgICAgKGRlc2NyaXB0aW9uICs9XG4gICAgICAgICAgICAnIGhyZWY9XCInICtcbiAgICAgICAgICAgIChudWxsID09PSBwcm9wcy5ocmVmXG4gICAgICAgICAgICAgID8gXCJudWxsXCJcbiAgICAgICAgICAgICAgOiBcImludmFsaWQgdHlwZSBcIiArIHR5cGVvZiBwcm9wcy5ocmVmKSArXG4gICAgICAgICAgICAnXCInKSk7XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMucHJlY2VkZW5jZVxuICAgICAgICA/IChkZXNjcmliZWRQcm9wcysrLFxuICAgICAgICAgIChkZXNjcmlwdGlvbiArPSAnIHByZWNlZGVuY2U9XCInICsgcHJvcHMucHJlY2VkZW5jZSArICdcIicpKVxuICAgICAgICA6IGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIFwicHJlY2VkZW5jZVwiKSAmJlxuICAgICAgICAgIChkZXNjcmliZWRQcm9wcysrLFxuICAgICAgICAgIChkZXNjcmlwdGlvbiArPVxuICAgICAgICAgICAgXCIgcHJlY2VkZW5jZT17XCIgK1xuICAgICAgICAgICAgKG51bGwgPT09IHByb3BzLnByZWNlZGVuY2VcbiAgICAgICAgICAgICAgPyBcIm51bGxcIlxuICAgICAgICAgICAgICA6IFwiaW52YWxpZCB0eXBlIFwiICsgdHlwZW9mIHByb3BzLnByZWNlZGVuY2UpICtcbiAgICAgICAgICAgIFwifVwiKSk7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm9wcykubGVuZ3RoID4gZGVzY3JpYmVkUHJvcHMgJiZcbiAgICAgICAgKGRlc2NyaXB0aW9uICs9IFwiIC4uLlwiKTtcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvbiArIFwiIC8+XCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN0eWxlS2V5KGhyZWYpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICdocmVmPVwiJyArIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoaHJlZikgKyAnXCInXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdHlsZXNoZWV0U2VsZWN0b3JGcm9tS2V5KGtleSkge1xuICAgICAgcmV0dXJuICdsaW5rW3JlbD1cInN0eWxlc2hlZXRcIl1bJyArIGtleSArIFwiXVwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdHlsZXNoZWV0UHJvcHNGcm9tUmF3UHJvcHMocmF3UHJvcHMpIHtcbiAgICAgIHJldHVybiBhc3NpZ24oe30sIHJhd1Byb3BzLCB7XG4gICAgICAgIFwiZGF0YS1wcmVjZWRlbmNlXCI6IHJhd1Byb3BzLnByZWNlZGVuY2UsXG4gICAgICAgIHByZWNlZGVuY2U6IG51bGxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcmVsb2FkU3R5bGVzaGVldChvd25lckRvY3VtZW50LCBrZXksIHByZWxvYWRQcm9wcywgc3RhdGUpIHtcbiAgICAgIG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJ2xpbmtbcmVsPVwicHJlbG9hZFwiXVthcz1cInN0eWxlXCJdWycgKyBrZXkgKyBcIl1cIlxuICAgICAgKVxuICAgICAgICA/IChzdGF0ZS5sb2FkaW5nID0gTG9hZGVkKVxuICAgICAgICA6ICgoa2V5ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSksXG4gICAgICAgICAgKHN0YXRlLnByZWxvYWQgPSBrZXkpLFxuICAgICAgICAgIGtleS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKHN0YXRlLmxvYWRpbmcgfD0gTG9hZGVkKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBrZXkuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoc3RhdGUubG9hZGluZyB8PSBFcnJvcmVkKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhrZXksIFwibGlua1wiLCBwcmVsb2FkUHJvcHMpLFxuICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoa2V5KSxcbiAgICAgICAgICBvd25lckRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoa2V5KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFNjcmlwdEtleShzcmMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICdbc3JjPVwiJyArIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoc3JjKSArICdcIl0nXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoa2V5KSB7XG4gICAgICByZXR1cm4gXCJzY3JpcHRbYXN5bmNdXCIgKyBrZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFjcXVpcmVSZXNvdXJjZShob2lzdGFibGVSb290LCByZXNvdXJjZSwgcHJvcHMpIHtcbiAgICAgIHJlc291cmNlLmNvdW50Kys7XG4gICAgICBpZiAobnVsbCA9PT0gcmVzb3VyY2UuaW5zdGFuY2UpXG4gICAgICAgIHN3aXRjaCAocmVzb3VyY2UudHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gaG9pc3RhYmxlUm9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAnc3R5bGVbZGF0YS1ocmVmfj1cIicgK1xuICAgICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMocHJvcHMuaHJlZikgK1xuICAgICAgICAgICAgICAgICdcIl0nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChyZXNvdXJjZS5pbnN0YW5jZSA9IGluc3RhbmNlKSxcbiAgICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGluc3RhbmNlKSxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIHN0eWxlUHJvcHMgPSBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIFwiZGF0YS1ocmVmXCI6IHByb3BzLmhyZWYsXG4gICAgICAgICAgICAgIFwiZGF0YS1wcmVjZWRlbmNlXCI6IHByb3BzLnByZWNlZGVuY2UsXG4gICAgICAgICAgICAgIGhyZWY6IG51bGwsXG4gICAgICAgICAgICAgIHByZWNlZGVuY2U6IG51bGxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5zdGFuY2UgPSAoXG4gICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3Qub3duZXJEb2N1bWVudCB8fCBob2lzdGFibGVSb290XG4gICAgICAgICAgICApLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaW5zdGFuY2UsIFwic3R5bGVcIiwgc3R5bGVQcm9wcyk7XG4gICAgICAgICAgICBpbnNlcnRTdHlsZXNoZWV0KGluc3RhbmNlLCBwcm9wcy5wcmVjZWRlbmNlLCBob2lzdGFibGVSb290KTtcbiAgICAgICAgICAgIHJldHVybiAocmVzb3VyY2UuaW5zdGFuY2UgPSBpbnN0YW5jZSk7XG4gICAgICAgICAgY2FzZSBcInN0eWxlc2hlZXRcIjpcbiAgICAgICAgICAgIHN0eWxlUHJvcHMgPSBnZXRTdHlsZUtleShwcm9wcy5ocmVmKTtcbiAgICAgICAgICAgIHZhciBfaW5zdGFuY2UgPSBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkoc3R5bGVQcm9wcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoX2luc3RhbmNlKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nIHw9IEluc2VydGVkKSxcbiAgICAgICAgICAgICAgICAocmVzb3VyY2UuaW5zdGFuY2UgPSBfaW5zdGFuY2UpLFxuICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoX2luc3RhbmNlKSxcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2VcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGluc3RhbmNlID0gc3R5bGVzaGVldFByb3BzRnJvbVJhd1Byb3BzKHByb3BzKTtcbiAgICAgICAgICAgIChzdHlsZVByb3BzID0gcHJlbG9hZFByb3BzTWFwLmdldChzdHlsZVByb3BzKSkgJiZcbiAgICAgICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTdHlsZXNoZWV0KGluc3RhbmNlLCBzdHlsZVByb3BzKTtcbiAgICAgICAgICAgIF9pbnN0YW5jZSA9IChcbiAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3RcbiAgICAgICAgICAgICkuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG4gICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKF9pbnN0YW5jZSk7XG4gICAgICAgICAgICB2YXIgbGlua0luc3RhbmNlID0gX2luc3RhbmNlO1xuICAgICAgICAgICAgbGlua0luc3RhbmNlLl9wID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICBsaW5rSW5zdGFuY2Uub25sb2FkID0gcmVzb2x2ZTtcbiAgICAgICAgICAgICAgbGlua0luc3RhbmNlLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKF9pbnN0YW5jZSwgXCJsaW5rXCIsIGluc3RhbmNlKTtcbiAgICAgICAgICAgIHJlc291cmNlLnN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQ7XG4gICAgICAgICAgICBpbnNlcnRTdHlsZXNoZWV0KF9pbnN0YW5jZSwgcHJvcHMucHJlY2VkZW5jZSwgaG9pc3RhYmxlUm9vdCk7XG4gICAgICAgICAgICByZXR1cm4gKHJlc291cmNlLmluc3RhbmNlID0gX2luc3RhbmNlKTtcbiAgICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgICBfaW5zdGFuY2UgPSBnZXRTY3JpcHRLZXkocHJvcHMuc3JjKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKHN0eWxlUHJvcHMgPSBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KF9pbnN0YW5jZSlcbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAocmVzb3VyY2UuaW5zdGFuY2UgPSBzdHlsZVByb3BzKSxcbiAgICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKHN0eWxlUHJvcHMpLFxuICAgICAgICAgICAgICAgIHN0eWxlUHJvcHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGluc3RhbmNlID0gcHJvcHM7XG4gICAgICAgICAgICBpZiAoKHN0eWxlUHJvcHMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KF9pbnN0YW5jZSkpKVxuICAgICAgICAgICAgICAoaW5zdGFuY2UgPSBhc3NpZ24oe30sIHByb3BzKSksXG4gICAgICAgICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTY3JpcHQoaW5zdGFuY2UsIHN0eWxlUHJvcHMpO1xuICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCA9IGhvaXN0YWJsZVJvb3Qub3duZXJEb2N1bWVudCB8fCBob2lzdGFibGVSb290O1xuICAgICAgICAgICAgc3R5bGVQcm9wcyA9IGhvaXN0YWJsZVJvb3QuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoc3R5bGVQcm9wcyk7XG4gICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhzdHlsZVByb3BzLCBcImxpbmtcIiwgaW5zdGFuY2UpO1xuICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlUHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIChyZXNvdXJjZS5pbnN0YW5jZSA9IHN0eWxlUHJvcHMpO1xuICAgICAgICAgIGNhc2UgXCJ2b2lkXCI6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICdhY3F1aXJlUmVzb3VyY2UgZW5jb3VudGVyZWQgYSByZXNvdXJjZSB0eXBlIGl0IGRpZCBub3QgZXhwZWN0OiBcIicgK1xuICAgICAgICAgICAgICAgIHJlc291cmNlLnR5cGUgK1xuICAgICAgICAgICAgICAgICdcIi4gdGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICBlbHNlXG4gICAgICAgIFwic3R5bGVzaGVldFwiID09PSByZXNvdXJjZS50eXBlICYmXG4gICAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBJbnNlcnRlZCkgPT09IE5vdExvYWRlZCAmJlxuICAgICAgICAgICgoaW5zdGFuY2UgPSByZXNvdXJjZS5pbnN0YW5jZSksXG4gICAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQpLFxuICAgICAgICAgIGluc2VydFN0eWxlc2hlZXQoaW5zdGFuY2UsIHByb3BzLnByZWNlZGVuY2UsIGhvaXN0YWJsZVJvb3QpKTtcbiAgICAgIHJldHVybiByZXNvdXJjZS5pbnN0YW5jZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5zZXJ0U3R5bGVzaGVldChpbnN0YW5jZSwgcHJlY2VkZW5jZSwgcm9vdCkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIG5vZGVzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgJ2xpbmtbcmVsPVwic3R5bGVzaGVldFwiXVtkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV0nXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsYXN0ID0gbm9kZXMubGVuZ3RoID8gbm9kZXNbbm9kZXMubGVuZ3RoIC0gMV0gOiBudWxsLFxuICAgICAgICAgIHByaW9yID0gbGFzdCxcbiAgICAgICAgICBpID0gMDtcbiAgICAgICAgaSA8IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgaSsrXG4gICAgICApIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgaWYgKG5vZGUuZGF0YXNldC5wcmVjZWRlbmNlID09PSBwcmVjZWRlbmNlKSBwcmlvciA9IG5vZGU7XG4gICAgICAgIGVsc2UgaWYgKHByaW9yICE9PSBsYXN0KSBicmVhaztcbiAgICAgIH1cbiAgICAgIHByaW9yXG4gICAgICAgID8gcHJpb3IucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaW5zdGFuY2UsIHByaW9yLm5leHRTaWJsaW5nKVxuICAgICAgICA6ICgocHJlY2VkZW5jZSA9IDkgPT09IHJvb3Qubm9kZVR5cGUgPyByb290LmhlYWQgOiByb290KSxcbiAgICAgICAgICBwcmVjZWRlbmNlLmluc2VydEJlZm9yZShpbnN0YW5jZSwgcHJlY2VkZW5jZS5maXJzdENoaWxkKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkb3B0UHJlbG9hZFByb3BzRm9yU3R5bGVzaGVldChzdHlsZXNoZWV0UHJvcHMsIHByZWxvYWRQcm9wcykge1xuICAgICAgbnVsbCA9PSBzdHlsZXNoZWV0UHJvcHMuY3Jvc3NPcmlnaW4gJiZcbiAgICAgICAgKHN0eWxlc2hlZXRQcm9wcy5jcm9zc09yaWdpbiA9IHByZWxvYWRQcm9wcy5jcm9zc09yaWdpbik7XG4gICAgICBudWxsID09IHN0eWxlc2hlZXRQcm9wcy5yZWZlcnJlclBvbGljeSAmJlxuICAgICAgICAoc3R5bGVzaGVldFByb3BzLnJlZmVycmVyUG9saWN5ID0gcHJlbG9hZFByb3BzLnJlZmVycmVyUG9saWN5KTtcbiAgICAgIG51bGwgPT0gc3R5bGVzaGVldFByb3BzLnRpdGxlICYmXG4gICAgICAgIChzdHlsZXNoZWV0UHJvcHMudGl0bGUgPSBwcmVsb2FkUHJvcHMudGl0bGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZG9wdFByZWxvYWRQcm9wc0ZvclNjcmlwdChzY3JpcHRQcm9wcywgcHJlbG9hZFByb3BzKSB7XG4gICAgICBudWxsID09IHNjcmlwdFByb3BzLmNyb3NzT3JpZ2luICYmXG4gICAgICAgIChzY3JpcHRQcm9wcy5jcm9zc09yaWdpbiA9IHByZWxvYWRQcm9wcy5jcm9zc09yaWdpbik7XG4gICAgICBudWxsID09IHNjcmlwdFByb3BzLnJlZmVycmVyUG9saWN5ICYmXG4gICAgICAgIChzY3JpcHRQcm9wcy5yZWZlcnJlclBvbGljeSA9IHByZWxvYWRQcm9wcy5yZWZlcnJlclBvbGljeSk7XG4gICAgICBudWxsID09IHNjcmlwdFByb3BzLmludGVncml0eSAmJlxuICAgICAgICAoc2NyaXB0UHJvcHMuaW50ZWdyaXR5ID0gcHJlbG9hZFByb3BzLmludGVncml0eSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEh5ZHJhdGFibGVIb2lzdGFibGVDYWNoZSh0eXBlLCBrZXlBdHRyaWJ1dGUsIG93bmVyRG9jdW1lbnQpIHtcbiAgICAgIGlmIChudWxsID09PSB0YWdDYWNoZXMpIHtcbiAgICAgICAgdmFyIGNhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICB2YXIgY2FjaGVzID0gKHRhZ0NhY2hlcyA9IG5ldyBNYXAoKSk7XG4gICAgICAgIGNhY2hlcy5zZXQob3duZXJEb2N1bWVudCwgY2FjaGUpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIChjYWNoZXMgPSB0YWdDYWNoZXMpLFxuICAgICAgICAgIChjYWNoZSA9IGNhY2hlcy5nZXQob3duZXJEb2N1bWVudCkpLFxuICAgICAgICAgIGNhY2hlIHx8ICgoY2FjaGUgPSBuZXcgTWFwKCkpLCBjYWNoZXMuc2V0KG93bmVyRG9jdW1lbnQsIGNhY2hlKSk7XG4gICAgICBpZiAoY2FjaGUuaGFzKHR5cGUpKSByZXR1cm4gY2FjaGU7XG4gICAgICBjYWNoZS5zZXQodHlwZSwgbnVsbCk7XG4gICAgICBvd25lckRvY3VtZW50ID0gb3duZXJEb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0eXBlKTtcbiAgICAgIGZvciAoY2FjaGVzID0gMDsgY2FjaGVzIDwgb3duZXJEb2N1bWVudC5sZW5ndGg7IGNhY2hlcysrKSB7XG4gICAgICAgIHZhciBub2RlID0gb3duZXJEb2N1bWVudFtjYWNoZXNdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIG5vZGVbaW50ZXJuYWxIb2lzdGFibGVNYXJrZXJdIHx8XG4gICAgICAgICAgICBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldIHx8XG4gICAgICAgICAgICAoXCJsaW5rXCIgPT09IHR5cGUgJiYgXCJzdHlsZXNoZWV0XCIgPT09IG5vZGUuZ2V0QXR0cmlidXRlKFwicmVsXCIpKVxuICAgICAgICAgICkgJiZcbiAgICAgICAgICBub2RlLm5hbWVzcGFjZVVSSSAhPT0gU1ZHX05BTUVTUEFDRVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgbm9kZUtleSA9IG5vZGUuZ2V0QXR0cmlidXRlKGtleUF0dHJpYnV0ZSkgfHwgXCJcIjtcbiAgICAgICAgICBub2RlS2V5ID0gdHlwZSArIG5vZGVLZXk7XG4gICAgICAgICAgdmFyIGV4aXN0aW5nID0gY2FjaGUuZ2V0KG5vZGVLZXkpO1xuICAgICAgICAgIGV4aXN0aW5nID8gZXhpc3RpbmcucHVzaChub2RlKSA6IGNhY2hlLnNldChub2RlS2V5LCBbbm9kZV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FjaGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50SG9pc3RhYmxlKGhvaXN0YWJsZVJvb3QsIHR5cGUsIGluc3RhbmNlKSB7XG4gICAgICBob2lzdGFibGVSb290ID0gaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3Q7XG4gICAgICBob2lzdGFibGVSb290LmhlYWQuaW5zZXJ0QmVmb3JlKFxuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgXCJ0aXRsZVwiID09PSB0eXBlID8gaG9pc3RhYmxlUm9vdC5xdWVyeVNlbGVjdG9yKFwiaGVhZCA+IHRpdGxlXCIpIDogbnVsbFxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNIb3N0SG9pc3RhYmxlVHlwZSh0eXBlLCBwcm9wcywgaG9zdENvbnRleHQpIHtcbiAgICAgIHZhciBvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQgPVxuICAgICAgICAhaG9zdENvbnRleHQuYW5jZXN0b3JJbmZvLmNvbnRhaW5lclRhZ0luU2NvcGU7XG4gICAgICBpZiAoXG4gICAgICAgIGhvc3RDb250ZXh0LmNvbnRleHQgPT09IEhvc3RDb250ZXh0TmFtZXNwYWNlU3ZnIHx8XG4gICAgICAgIG51bGwgIT0gcHJvcHMuaXRlbVByb3BcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAhb3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0IHx8XG4gICAgICAgICAgICBudWxsID09IHByb3BzLml0ZW1Qcm9wIHx8XG4gICAgICAgICAgICAoXCJtZXRhXCIgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgXCJ0aXRsZVwiICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgIFwic3R5bGVcIiAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICBcImxpbmtcIiAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICBcInNjcmlwdFwiICE9PSB0eXBlKSB8fFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJDYW5ub3QgcmVuZGVyIGEgPCVzPiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IGlmIGl0IGhhcyBhbiBgaXRlbVByb3BgIHByb3AuIGBpdGVtUHJvcGAgc3VnZ2VzdHMgdGhlIHRhZyBiZWxvbmdzIHRvIGFuIGBpdGVtU2NvcGVgIHdoaWNoIGNhbiBhcHBlYXIgYW55d2hlcmUgaW4gdGhlIERPTS4gSWYgeW91IHdlcmUgaW50ZW5kaW5nIGZvciBSZWFjdCB0byBob2lzdCB0aGlzIDwlcz4gcmVtb3ZlIHRoZSBgaXRlbVByb3BgIHByb3AuIE90aGVyd2lzZSwgdHJ5IG1vdmluZyB0aGlzIHRhZyBpbnRvIHRoZSA8aGVhZD4gb3IgPGJvZHk+IG9mIHRoZSBEb2N1bWVudC5cIixcbiAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAhMVxuICAgICAgICApO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgIGNhc2UgXCJ0aXRsZVwiOlxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BzLnByZWNlZGVuY2UgfHxcbiAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5ocmVmIHx8XG4gICAgICAgICAgICBcIlwiID09PSBwcm9wcy5ocmVmXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnQ2Fubm90IHJlbmRlciBhIDxzdHlsZT4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudCB3aXRob3V0IGtub3dpbmcgaXRzIHByZWNlZGVuY2UgYW5kIGEgdW5pcXVlIGhyZWYga2V5LiBSZWFjdCBjYW4gaG9pc3QgYW5kIGRlZHVwbGljYXRlIDxzdHlsZT4gdGFncyBpZiB5b3UgcHJvdmlkZSBhIGBwcmVjZWRlbmNlYCBwcm9wIGFsb25nIHdpdGggYW4gYGhyZWZgIHByb3AgdGhhdCBkb2VzIG5vdCBjb25mbGljdCB3aXRoIHRoZSBgaHJlZmAgdmFsdWVzIHVzZWQgaW4gYW55IG90aGVyIGhvaXN0ZWQgPHN0eWxlPiBvciA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgLi4uPiB0YWdzLiAgTm90ZSB0aGF0IGhvaXN0aW5nIDxzdHlsZT4gdGFncyBpcyBjb25zaWRlcmVkIGFuIGFkdmFuY2VkIGZlYXR1cmUgdGhhdCBtb3N0IHdpbGwgbm90IHVzZSBkaXJlY3RseS4gQ29uc2lkZXIgbW92aW5nIHRoZSA8c3R5bGU+IHRhZyB0byB0aGUgPGhlYWQ+IG9yIGNvbnNpZGVyIGFkZGluZyBhIGBwcmVjZWRlbmNlPVwiZGVmYXVsdFwiYCBhbmQgYGhyZWY9XCJzb21lIHVuaXF1ZSByZXNvdXJjZSBpZGVudGlmaWVyXCJgLidcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BzLnJlbCB8fFxuICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BzLmhyZWYgfHxcbiAgICAgICAgICAgIFwiXCIgPT09IHByb3BzLmhyZWYgfHxcbiAgICAgICAgICAgIHByb3BzLm9uTG9hZCB8fFxuICAgICAgICAgICAgcHJvcHMub25FcnJvclxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBcInN0eWxlc2hlZXRcIiA9PT0gcHJvcHMucmVsICYmXG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwcm9wcy5wcmVjZWRlbmNlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdHlwZSA9IHByb3BzLmhyZWY7XG4gICAgICAgICAgICAgIHZhciBvbkVycm9yID0gcHJvcHMub25FcnJvcixcbiAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkO1xuICAgICAgICAgICAgICBob3N0Q29udGV4dCA9IFtdO1xuICAgICAgICAgICAgICBwcm9wcy5vbkxvYWQgJiYgaG9zdENvbnRleHQucHVzaChcImBvbkxvYWRgXCIpO1xuICAgICAgICAgICAgICBvbkVycm9yICYmIGhvc3RDb250ZXh0LnB1c2goXCJgb25FcnJvcmBcIik7XG4gICAgICAgICAgICAgIG51bGwgIT0gZGlzYWJsZWQgJiYgaG9zdENvbnRleHQucHVzaChcImBkaXNhYmxlZGBcIik7XG4gICAgICAgICAgICAgIG9uRXJyb3IgPSBwcm9wTmFtZXNMaXN0Sm9pbihob3N0Q29udGV4dCwgXCJhbmRcIik7XG4gICAgICAgICAgICAgIG9uRXJyb3IgKz0gMSA9PT0gaG9zdENvbnRleHQubGVuZ3RoID8gXCIgcHJvcFwiIDogXCIgcHJvcHNcIjtcbiAgICAgICAgICAgICAgZGlzYWJsZWQgPVxuICAgICAgICAgICAgICAgIDEgPT09IGhvc3RDb250ZXh0Lmxlbmd0aCA/IFwiYW4gXCIgKyBvbkVycm9yIDogXCJ0aGUgXCIgKyBvbkVycm9yO1xuICAgICAgICAgICAgICBob3N0Q29udGV4dC5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgJ1JlYWN0IGVuY291bnRlcmVkIGEgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIlc1wiIC4uLiAvPiB3aXRoIGEgYHByZWNlZGVuY2VgIHByb3AgdGhhdCBhbHNvIGluY2x1ZGVkICVzLiBUaGUgcHJlc2VuY2Ugb2YgbG9hZGluZyBhbmQgZXJyb3IgaGFuZGxlcnMgaW5kaWNhdGVzIGFuIGludGVudCB0byBtYW5hZ2UgdGhlIHN0eWxlc2hlZXQgbG9hZGluZyBzdGF0ZSBmcm9tIHlvdXIgZnJvbSB5b3VyIENvbXBvbmVudCBjb2RlIGFuZCBSZWFjdCB3aWxsIG5vdCBob2lzdCBvciBkZWR1cGxpY2F0ZSB0aGlzIHN0eWxlc2hlZXQuIElmIHlvdXIgaW50ZW50IHdhcyB0byBoYXZlIFJlYWN0IGhvaXN0IGFuZCBkZWR1cGxjaWF0ZSB0aGlzIHN0eWxlc2hlZXQgdXNpbmcgdGhlIGBwcmVjZWRlbmNlYCBwcm9wIHJlbW92ZSB0aGUgJXMsIG90aGVyd2lzZSByZW1vdmUgdGhlIGBwcmVjZWRlbmNlYCBwcm9wLicsXG4gICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICBvbkVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCAmJlxuICAgICAgICAgICAgICAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BzLnJlbCB8fFxuICAgICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMuaHJlZiB8fFxuICAgICAgICAgICAgICBcIlwiID09PSBwcm9wcy5ocmVmXG4gICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCByZW5kZXIgYSA8bGluaz4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudCB3aXRob3V0IGEgYHJlbGAgYW5kIGBocmVmYCBwcm9wLiBUcnkgYWRkaW5nIGEgYHJlbGAgYW5kL29yIGBocmVmYCBwcm9wIHRvIHRoaXMgPGxpbms+IG9yIG1vdmluZyB0aGUgbGluayBpbnRvIHRoZSA8aGVhZD4gdGFnXCJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IChwcm9wcy5vbkVycm9yIHx8IHByb3BzLm9uTG9hZCkgJiZcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHJlbmRlciBhIDxsaW5rPiB3aXRoIG9uTG9hZCBvciBvbkVycm9yIGxpc3RlbmVycyBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50LiBUcnkgcmVtb3Zpbmcgb25Mb2FkPXsuLi59IGFuZCBvbkVycm9yPXsuLi59IG9yIG1vdmluZyBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcgb3Igc29tZXdoZXJlIGluIHRoZSA8Ym9keT4uXCJcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN3aXRjaCAocHJvcHMucmVsKSB7XG4gICAgICAgICAgICBjYXNlIFwic3R5bGVzaGVldFwiOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICh0eXBlID0gcHJvcHMucHJlY2VkZW5jZSksXG4gICAgICAgICAgICAgICAgKHByb3BzID0gcHJvcHMuZGlzYWJsZWQpLFxuICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgICAgICAgICAgICBvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQgJiZcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdDYW5ub3QgcmVuZGVyIGEgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIC8+IG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQgd2l0aG91dCBrbm93aW5nIGl0cyBwcmVjZWRlbmNlLiBDb25zaWRlciBhZGRpbmcgcHJlY2VkZW5jZT1cImRlZmF1bHRcIiBvciBtb3ZpbmcgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnLidcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUgJiYgbnVsbCA9PSBwcm9wc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgICAgIHR5cGUgPVxuICAgICAgICAgICAgcHJvcHMuYXN5bmMgJiZcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHByb3BzLmFzeW5jICYmXG4gICAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgcHJvcHMuYXN5bmM7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXR5cGUgfHxcbiAgICAgICAgICAgIHByb3BzLm9uTG9hZCB8fFxuICAgICAgICAgICAgcHJvcHMub25FcnJvciB8fFxuICAgICAgICAgICAgIXByb3BzLnNyYyB8fFxuICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BzLnNyY1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgb3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0ICYmXG4gICAgICAgICAgICAgICh0eXBlXG4gICAgICAgICAgICAgICAgPyBwcm9wcy5vbkxvYWQgfHwgcHJvcHMub25FcnJvclxuICAgICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHJlbmRlciBhIDxzY3JpcHQ+IHdpdGggb25Mb2FkIG9yIG9uRXJyb3IgbGlzdGVuZXJzIG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQuIFRyeSByZW1vdmluZyBvbkxvYWQ9ey4uLn0gYW5kIG9uRXJyb3I9ey4uLn0gb3IgbW92aW5nIGl0IGludG8gdGhlIHJvb3QgPGhlYWQ+IHRhZyBvciBzb21ld2hlcmUgaW4gdGhlIDxib2R5Pi5cIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgcmVuZGVyIGEgPHNjcmlwdD4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudCB3aXRob3V0IGBhc3luYz17dHJ1ZX1gIGFuZCBhIG5vbi1lbXB0eSBgc3JjYCBwcm9wLiBFbnN1cmUgdGhlcmUgaXMgYSB2YWxpZCBgc3JjYCBhbmQgZWl0aGVyIG1ha2UgdGhlIHNjcmlwdCBhc3luYyBvciBtb3ZlIGl0IGludG8gdGhlIHJvb3QgPGhlYWQ+IHRhZyBvciBzb21ld2hlcmUgaW4gdGhlIDxib2R5Pi5cIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnQ2Fubm90IHJlbmRlciBhIHN5bmMgb3IgZGVmZXIgPHNjcmlwdD4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudCB3aXRob3V0IGtub3dpbmcgaXRzIG9yZGVyLiBUcnkgYWRkaW5nIGFzeW5jPVwiXCIgb3IgbW92aW5nIGl0IGludG8gdGhlIHJvb3QgPGhlYWQ+IHRhZy4nXG4gICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIGNhc2UgXCJub3NjcmlwdFwiOlxuICAgICAgICBjYXNlIFwidGVtcGxhdGVcIjpcbiAgICAgICAgICBvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiQ2Fubm90IHJlbmRlciA8JXM+IG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQuIFRyeSBtb3ZpbmcgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnLlwiLFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcmVsb2FkUmVzb3VyY2UocmVzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcInN0eWxlc2hlZXRcIiA9PT0gcmVzb3VyY2UudHlwZSAmJlxuICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyAmIFNldHRsZWQpID09PSBOb3RMb2FkZWRcbiAgICAgICAgPyAhMVxuICAgICAgICA6ICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub29wKCkge31cbiAgICBmdW5jdGlvbiBzdXNwZW5kUmVzb3VyY2UoaG9pc3RhYmxlUm9vdCwgcmVzb3VyY2UsIHByb3BzKSB7XG4gICAgICBpZiAobnVsbCA9PT0gc3VzcGVuZGVkU3RhdGUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgRXJyb3I6IHN1c3BlbmRlZFN0YXRlIG51bGwgd2hlbiBpdCB3YXMgZXhwZWN0ZWQgdG8gZXhpc3RzLiBQbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBSZWFjdCBidWcuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBzdGF0ZSA9IHN1c3BlbmRlZFN0YXRlO1xuICAgICAgaWYgKFxuICAgICAgICBcInN0eWxlc2hlZXRcIiA9PT0gcmVzb3VyY2UudHlwZSAmJlxuICAgICAgICAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BzLm1lZGlhIHx8XG4gICAgICAgICAgITEgIT09IG1hdGNoTWVkaWEocHJvcHMubWVkaWEpLm1hdGNoZXMpICYmXG4gICAgICAgIChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgSW5zZXJ0ZWQpID09PSBOb3RMb2FkZWRcbiAgICAgICkge1xuICAgICAgICBpZiAobnVsbCA9PT0gcmVzb3VyY2UuaW5zdGFuY2UpIHtcbiAgICAgICAgICB2YXIga2V5ID0gZ2V0U3R5bGVLZXkocHJvcHMuaHJlZiksXG4gICAgICAgICAgICBpbnN0YW5jZSA9IGhvaXN0YWJsZVJvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShrZXkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCA9IGluc3RhbmNlLl9wO1xuICAgICAgICAgICAgbnVsbCAhPT0gaG9pc3RhYmxlUm9vdCAmJlxuICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgaG9pc3RhYmxlUm9vdCAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBob2lzdGFibGVSb290LnRoZW4gJiZcbiAgICAgICAgICAgICAgKHN0YXRlLmNvdW50KyssXG4gICAgICAgICAgICAgIChzdGF0ZSA9IG9uVW5zdXNwZW5kLmJpbmQoc3RhdGUpKSxcbiAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC50aGVuKHN0YXRlLCBzdGF0ZSkpO1xuICAgICAgICAgICAgcmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZDtcbiAgICAgICAgICAgIHJlc291cmNlLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGluc3RhbmNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5zdGFuY2UgPSBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICBwcm9wcyA9IHN0eWxlc2hlZXRQcm9wc0Zyb21SYXdQcm9wcyhwcm9wcyk7XG4gICAgICAgICAgKGtleSA9IHByZWxvYWRQcm9wc01hcC5nZXQoa2V5KSkgJiZcbiAgICAgICAgICAgIGFkb3B0UHJlbG9hZFByb3BzRm9yU3R5bGVzaGVldChwcm9wcywga2V5KTtcbiAgICAgICAgICBpbnN0YW5jZSA9IGluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICAgICAgICAgIHZhciBsaW5rSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgICBsaW5rSW5zdGFuY2UuX3AgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBsaW5rSW5zdGFuY2Uub25sb2FkID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIGxpbmtJbnN0YW5jZS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGluc3RhbmNlLCBcImxpbmtcIiwgcHJvcHMpO1xuICAgICAgICAgIHJlc291cmNlLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgbnVsbCA9PT0gc3RhdGUuc3R5bGVzaGVldHMgJiYgKHN0YXRlLnN0eWxlc2hlZXRzID0gbmV3IE1hcCgpKTtcbiAgICAgICAgc3RhdGUuc3R5bGVzaGVldHMuc2V0KHJlc291cmNlLCBob2lzdGFibGVSb290KTtcbiAgICAgICAgKGhvaXN0YWJsZVJvb3QgPSByZXNvdXJjZS5zdGF0ZS5wcmVsb2FkKSAmJlxuICAgICAgICAgIChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgU2V0dGxlZCkgPT09IE5vdExvYWRlZCAmJlxuICAgICAgICAgIChzdGF0ZS5jb3VudCsrLFxuICAgICAgICAgIChyZXNvdXJjZSA9IG9uVW5zdXNwZW5kLmJpbmQoc3RhdGUpKSxcbiAgICAgICAgICBob2lzdGFibGVSb290LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc291cmNlKSxcbiAgICAgICAgICBob2lzdGFibGVSb290LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZXNvdXJjZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB3YWl0Rm9yQ29tbWl0VG9CZVJlYWR5KCkge1xuICAgICAgaWYgKG51bGwgPT09IHN1c3BlbmRlZFN0YXRlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkludGVybmFsIFJlYWN0IEVycm9yOiBzdXNwZW5kZWRTdGF0ZSBudWxsIHdoZW4gaXQgd2FzIGV4cGVjdGVkIHRvIGV4aXN0cy4gUGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgUmVhY3QgYnVnLlwiXG4gICAgICAgICk7XG4gICAgICB2YXIgc3RhdGUgPSBzdXNwZW5kZWRTdGF0ZTtcbiAgICAgIHN0YXRlLnN0eWxlc2hlZXRzICYmXG4gICAgICAgIDAgPT09IHN0YXRlLmNvdW50ICYmXG4gICAgICAgIGluc2VydFN1c3BlbmRlZFN0eWxlc2hlZXRzKHN0YXRlLCBzdGF0ZS5zdHlsZXNoZWV0cyk7XG4gICAgICByZXR1cm4gMCA8IHN0YXRlLmNvdW50XG4gICAgICAgID8gZnVuY3Rpb24gKGNvbW1pdCkge1xuICAgICAgICAgICAgdmFyIHN0eWxlc2hlZXRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBzdGF0ZS5zdHlsZXNoZWV0cyAmJlxuICAgICAgICAgICAgICAgIGluc2VydFN1c3BlbmRlZFN0eWxlc2hlZXRzKHN0YXRlLCBzdGF0ZS5zdHlsZXNoZWV0cyk7XG4gICAgICAgICAgICAgIGlmIChzdGF0ZS51bnN1c3BlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgdW5zdXNwZW5kID0gc3RhdGUudW5zdXNwZW5kO1xuICAgICAgICAgICAgICAgIHN0YXRlLnVuc3VzcGVuZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdW5zdXNwZW5kKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDZlNCk7XG4gICAgICAgICAgICBzdGF0ZS51bnN1c3BlbmQgPSBjb21taXQ7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBzdGF0ZS51bnN1c3BlbmQgPSBudWxsO1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoc3R5bGVzaGVldFRpbWVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uVW5zdXNwZW5kKCkge1xuICAgICAgdGhpcy5jb3VudC0tO1xuICAgICAgaWYgKDAgPT09IHRoaXMuY291bnQpXG4gICAgICAgIGlmICh0aGlzLnN0eWxlc2hlZXRzKVxuICAgICAgICAgIGluc2VydFN1c3BlbmRlZFN0eWxlc2hlZXRzKHRoaXMsIHRoaXMuc3R5bGVzaGVldHMpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnVuc3VzcGVuZCkge1xuICAgICAgICAgIHZhciB1bnN1c3BlbmQgPSB0aGlzLnVuc3VzcGVuZDtcbiAgICAgICAgICB0aGlzLnVuc3VzcGVuZCA9IG51bGw7XG4gICAgICAgICAgdW5zdXNwZW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5zZXJ0U3VzcGVuZGVkU3R5bGVzaGVldHMoc3RhdGUsIHJlc291cmNlcykge1xuICAgICAgc3RhdGUuc3R5bGVzaGVldHMgPSBudWxsO1xuICAgICAgbnVsbCAhPT0gc3RhdGUudW5zdXNwZW5kICYmXG4gICAgICAgIChzdGF0ZS5jb3VudCsrLFxuICAgICAgICAocHJlY2VkZW5jZXNCeVJvb3QgPSBuZXcgTWFwKCkpLFxuICAgICAgICByZXNvdXJjZXMuZm9yRWFjaChpbnNlcnRTdHlsZXNoZWV0SW50b1Jvb3QsIHN0YXRlKSxcbiAgICAgICAgKHByZWNlZGVuY2VzQnlSb290ID0gbnVsbCksXG4gICAgICAgIG9uVW5zdXNwZW5kLmNhbGwoc3RhdGUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5zZXJ0U3R5bGVzaGVldEludG9Sb290KHJvb3QsIHJlc291cmNlKSB7XG4gICAgICBpZiAoIShyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgSW5zZXJ0ZWQpKSB7XG4gICAgICAgIHZhciBwcmVjZWRlbmNlcyA9IHByZWNlZGVuY2VzQnlSb290LmdldChyb290KTtcbiAgICAgICAgaWYgKHByZWNlZGVuY2VzKSB2YXIgbGFzdCA9IHByZWNlZGVuY2VzLmdldChMQVNUX1BSRUNFREVOQ0UpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBwcmVjZWRlbmNlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICBwcmVjZWRlbmNlc0J5Um9vdC5zZXQocm9vdCwgcHJlY2VkZW5jZXMpO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICB2YXIgbm9kZXMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgXCJsaW5rW2RhdGEtcHJlY2VkZW5jZV0sc3R5bGVbZGF0YS1wcmVjZWRlbmNlXVwiXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICAgICAgaSA8IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgXCJMSU5LXCIgPT09IG5vZGUubm9kZU5hbWUgfHxcbiAgICAgICAgICAgICAgXCJub3QgYWxsXCIgIT09IG5vZGUuZ2V0QXR0cmlidXRlKFwibWVkaWFcIilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcHJlY2VkZW5jZXMuc2V0KG5vZGUuZGF0YXNldC5wcmVjZWRlbmNlLCBub2RlKSwgKGxhc3QgPSBub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGFzdCAmJiBwcmVjZWRlbmNlcy5zZXQoTEFTVF9QUkVDRURFTkNFLCBsYXN0KTtcbiAgICAgICAgfVxuICAgICAgICBub2RlcyA9IHJlc291cmNlLmluc3RhbmNlO1xuICAgICAgICBub2RlID0gbm9kZXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1wcmVjZWRlbmNlXCIpO1xuICAgICAgICBpID0gcHJlY2VkZW5jZXMuZ2V0KG5vZGUpIHx8IGxhc3Q7XG4gICAgICAgIGkgPT09IGxhc3QgJiYgcHJlY2VkZW5jZXMuc2V0KExBU1RfUFJFQ0VERU5DRSwgbm9kZXMpO1xuICAgICAgICBwcmVjZWRlbmNlcy5zZXQobm9kZSwgbm9kZXMpO1xuICAgICAgICB0aGlzLmNvdW50Kys7XG4gICAgICAgIGxhc3QgPSBvblVuc3VzcGVuZC5iaW5kKHRoaXMpO1xuICAgICAgICBub2Rlcy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBsYXN0KTtcbiAgICAgICAgbm9kZXMuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGxhc3QpO1xuICAgICAgICBpXG4gICAgICAgICAgPyBpLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGVzLCBpLm5leHRTaWJsaW5nKVxuICAgICAgICAgIDogKChyb290ID0gOSA9PT0gcm9vdC5ub2RlVHlwZSA/IHJvb3QuaGVhZCA6IHJvb3QpLFxuICAgICAgICAgICAgcm9vdC5pbnNlcnRCZWZvcmUobm9kZXMsIHJvb3QuZmlyc3RDaGlsZCkpO1xuICAgICAgICByZXNvdXJjZS5zdGF0ZS5sb2FkaW5nIHw9IEluc2VydGVkO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBGaWJlclJvb3ROb2RlKFxuICAgICAgY29udGFpbmVySW5mbyxcbiAgICAgIHRhZyxcbiAgICAgIGh5ZHJhdGUsXG4gICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgb25VbmNhdWdodEVycm9yLFxuICAgICAgb25DYXVnaHRFcnJvcixcbiAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgIGZvcm1TdGF0ZVxuICAgICkge1xuICAgICAgdGhpcy50YWcgPSAxO1xuICAgICAgdGhpcy5jb250YWluZXJJbmZvID0gY29udGFpbmVySW5mbztcbiAgICAgIHRoaXMucGluZ0NhY2hlID0gdGhpcy5jdXJyZW50ID0gdGhpcy5wZW5kaW5nQ2hpbGRyZW4gPSBudWxsO1xuICAgICAgdGhpcy50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICAgICAgdGhpcy5jYWxsYmFja05vZGUgPVxuICAgICAgICB0aGlzLm5leHQgPVxuICAgICAgICB0aGlzLnBlbmRpbmdDb250ZXh0ID1cbiAgICAgICAgdGhpcy5jb250ZXh0ID1cbiAgICAgICAgdGhpcy5jYW5jZWxQZW5kaW5nQ29tbWl0ID1cbiAgICAgICAgICBudWxsO1xuICAgICAgdGhpcy5jYWxsYmFja1ByaW9yaXR5ID0gMDtcbiAgICAgIHRoaXMuZXhwaXJhdGlvblRpbWVzID0gY3JlYXRlTGFuZU1hcCgtMSk7XG4gICAgICB0aGlzLmVudGFuZ2xlZExhbmVzID1cbiAgICAgICAgdGhpcy5zaGVsbFN1c3BlbmRDb3VudGVyID1cbiAgICAgICAgdGhpcy5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyA9XG4gICAgICAgIHRoaXMuZXhwaXJlZExhbmVzID1cbiAgICAgICAgdGhpcy53YXJtTGFuZXMgPVxuICAgICAgICB0aGlzLnBpbmdlZExhbmVzID1cbiAgICAgICAgdGhpcy5zdXNwZW5kZWRMYW5lcyA9XG4gICAgICAgIHRoaXMucGVuZGluZ0xhbmVzID1cbiAgICAgICAgICAwO1xuICAgICAgdGhpcy5lbnRhbmdsZW1lbnRzID0gY3JlYXRlTGFuZU1hcCgwKTtcbiAgICAgIHRoaXMuaGlkZGVuVXBkYXRlcyA9IGNyZWF0ZUxhbmVNYXAobnVsbCk7XG4gICAgICB0aGlzLmlkZW50aWZpZXJQcmVmaXggPSBpZGVudGlmaWVyUHJlZml4O1xuICAgICAgdGhpcy5vblVuY2F1Z2h0RXJyb3IgPSBvblVuY2F1Z2h0RXJyb3I7XG4gICAgICB0aGlzLm9uQ2F1Z2h0RXJyb3IgPSBvbkNhdWdodEVycm9yO1xuICAgICAgdGhpcy5vblJlY292ZXJhYmxlRXJyb3IgPSBvblJlY292ZXJhYmxlRXJyb3I7XG4gICAgICB0aGlzLnBvb2xlZENhY2hlID0gbnVsbDtcbiAgICAgIHRoaXMucG9vbGVkQ2FjaGVMYW5lcyA9IDA7XG4gICAgICB0aGlzLmZvcm1TdGF0ZSA9IGZvcm1TdGF0ZTtcbiAgICAgIHRoaXMuaW5jb21wbGV0ZVRyYW5zaXRpb25zID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSB0aGlzLmVmZmVjdER1cmF0aW9uID0gLTA7XG4gICAgICB0aGlzLm1lbW9pemVkVXBkYXRlcnMgPSBuZXcgU2V0KCk7XG4gICAgICBjb250YWluZXJJbmZvID0gdGhpcy5wZW5kaW5nVXBkYXRlcnNMYW5lTWFwID0gW107XG4gICAgICBmb3IgKHRhZyA9IDA7IDMxID4gdGFnOyB0YWcrKykgY29udGFpbmVySW5mby5wdXNoKG5ldyBTZXQoKSk7XG4gICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gaHlkcmF0ZSA/IFwiaHlkcmF0ZVJvb3QoKVwiIDogXCJjcmVhdGVSb290KClcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJSb290KFxuICAgICAgY29udGFpbmVySW5mbyxcbiAgICAgIHRhZyxcbiAgICAgIGh5ZHJhdGUsXG4gICAgICBpbml0aWFsQ2hpbGRyZW4sXG4gICAgICBoeWRyYXRpb25DYWxsYmFja3MsXG4gICAgICBpc1N0cmljdE1vZGUsXG4gICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgb25VbmNhdWdodEVycm9yLFxuICAgICAgb25DYXVnaHRFcnJvcixcbiAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgIHRyYW5zaXRpb25DYWxsYmFja3MsXG4gICAgICBmb3JtU3RhdGVcbiAgICApIHtcbiAgICAgIGNvbnRhaW5lckluZm8gPSBuZXcgRmliZXJSb290Tm9kZShcbiAgICAgICAgY29udGFpbmVySW5mbyxcbiAgICAgICAgdGFnLFxuICAgICAgICBoeWRyYXRlLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgICBvblVuY2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uQ2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgICAgZm9ybVN0YXRlXG4gICAgICApO1xuICAgICAgdGFnID0gQ29uY3VycmVudE1vZGU7XG4gICAgICAhMCA9PT0gaXNTdHJpY3RNb2RlICYmICh0YWcgfD0gU3RyaWN0TGVnYWN5TW9kZSB8IFN0cmljdEVmZmVjdHNNb2RlKTtcbiAgICAgIGlzRGV2VG9vbHNQcmVzZW50ICYmICh0YWcgfD0gUHJvZmlsZU1vZGUpO1xuICAgICAgaXNTdHJpY3RNb2RlID0gY3JlYXRlRmliZXIoMywgbnVsbCwgbnVsbCwgdGFnKTtcbiAgICAgIGNvbnRhaW5lckluZm8uY3VycmVudCA9IGlzU3RyaWN0TW9kZTtcbiAgICAgIGlzU3RyaWN0TW9kZS5zdGF0ZU5vZGUgPSBjb250YWluZXJJbmZvO1xuICAgICAgdGFnID0gY3JlYXRlQ2FjaGUoKTtcbiAgICAgIHJldGFpbkNhY2hlKHRhZyk7XG4gICAgICBjb250YWluZXJJbmZvLnBvb2xlZENhY2hlID0gdGFnO1xuICAgICAgcmV0YWluQ2FjaGUodGFnKTtcbiAgICAgIGlzU3RyaWN0TW9kZS5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgICBlbGVtZW50OiBpbml0aWFsQ2hpbGRyZW4sXG4gICAgICAgIGlzRGVoeWRyYXRlZDogaHlkcmF0ZSxcbiAgICAgICAgY2FjaGU6IHRhZ1xuICAgICAgfTtcbiAgICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZShpc1N0cmljdE1vZGUpO1xuICAgICAgcmV0dXJuIGNvbnRhaW5lckluZm87XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCkge1xuICAgICAgaWYgKCFwYXJlbnRDb21wb25lbnQpIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICBwYXJlbnRDb21wb25lbnQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICByZXR1cm4gcGFyZW50Q29tcG9uZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVDb250YWluZXJJbXBsKFxuICAgICAgcm9vdEZpYmVyLFxuICAgICAgbGFuZSxcbiAgICAgIGVsZW1lbnQsXG4gICAgICBjb250YWluZXIsXG4gICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICBjYWxsYmFja1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBpbmplY3RlZEhvb2sgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3RcbiAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdChyZW5kZXJlcklELCBjb250YWluZXIsIGVsZW1lbnQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciB8fFxuICAgICAgICAgICAgKChoYXNMb2dnZWRFcnJvciA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlc1wiLFxuICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclNjaGVkdWxlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTY2hlZHVsZWQobGFuZSk7XG4gICAgICBwYXJlbnRDb21wb25lbnQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpO1xuICAgICAgbnVsbCA9PT0gY29udGFpbmVyLmNvbnRleHRcbiAgICAgICAgPyAoY29udGFpbmVyLmNvbnRleHQgPSBwYXJlbnRDb21wb25lbnQpXG4gICAgICAgIDogKGNvbnRhaW5lci5wZW5kaW5nQ29udGV4dCA9IHBhcmVudENvbXBvbmVudCk7XG4gICAgICBpc1JlbmRlcmluZyAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICFkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzICYmXG4gICAgICAgICgoZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9ICEwKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyB0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyBub3QgYWxsb3dlZC4gSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy5cIixcbiAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGN1cnJlbnQpIHx8IFwiVW5rbm93blwiXG4gICAgICAgICkpO1xuICAgICAgY29udGFpbmVyID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgY29udGFpbmVyLnBheWxvYWQgPSB7IGVsZW1lbnQ6IGVsZW1lbnQgfTtcbiAgICAgIGNhbGxiYWNrID0gdm9pZCAwID09PSBjYWxsYmFjayA/IG51bGwgOiBjYWxsYmFjaztcbiAgICAgIG51bGwgIT09IGNhbGxiYWNrICYmXG4gICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjYWxsYmFjayAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICksXG4gICAgICAgIChjb250YWluZXIuY2FsbGJhY2sgPSBjYWxsYmFjaykpO1xuICAgICAgZWxlbWVudCA9IGVucXVldWVVcGRhdGUocm9vdEZpYmVyLCBjb250YWluZXIsIGxhbmUpO1xuICAgICAgbnVsbCAhPT0gZWxlbWVudCAmJlxuICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGVsZW1lbnQsIHJvb3RGaWJlciwgbGFuZSksXG4gICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMoZWxlbWVudCwgcm9vdEZpYmVyLCBsYW5lKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgICAgIGZpYmVyID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBmaWJlciAmJiBudWxsICE9PSBmaWJlci5kZWh5ZHJhdGVkKSB7XG4gICAgICAgIHZhciBhID0gZmliZXIucmV0cnlMYW5lO1xuICAgICAgICBmaWJlci5yZXRyeUxhbmUgPSAwICE9PSBhICYmIGEgPCByZXRyeUxhbmUgPyBhIDogcmV0cnlMYW5lO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgcmV0cnlMYW5lKSB7XG4gICAgICBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKTtcbiAgICAgIChmaWJlciA9IGZpYmVyLmFsdGVybmF0ZSkgJiYgbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGZpYmVyKSB7XG4gICAgICBpZiAoMTMgPT09IGZpYmVyLnRhZykge1xuICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgNjcxMDg4NjQpO1xuICAgICAgICBudWxsICE9PSByb290ICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgNjcxMDg4NjQpO1xuICAgICAgICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgNjcxMDg4NjQpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scygpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRMYW5lTGFiZWxNYXAoKSB7XG4gICAgICBmb3IgKHZhciBtYXAgPSBuZXcgTWFwKCksIGxhbmUgPSAxLCBpbmRleCA9IDA7IDMxID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIGxhYmVsID0gZ2V0TGFiZWxGb3JMYW5lKGxhbmUpO1xuICAgICAgICBtYXAuc2V0KGxhbmUsIGxhYmVsKTtcbiAgICAgICAgbGFuZSAqPSAyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50KFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKSB7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdFNoYXJlZEludGVybmFscy5UO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICB0cnkge1xuICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IERpc2NyZXRlRXZlbnRQcmlvcml0eSksXG4gICAgICAgICAgZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5KSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZUcmFuc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hDb250aW51b3VzRXZlbnQoXG4gICAgICBkb21FdmVudE5hbWUsXG4gICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIHRyeSB7XG4gICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gQ29udGludW91c0V2ZW50UHJpb3JpdHkpLFxuICAgICAgICAgIGRpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJldmlvdXNQcmlvcml0eSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoXG4gICAgICBkb21FdmVudE5hbWUsXG4gICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApIHtcbiAgICAgIGlmIChfZW5hYmxlZCkge1xuICAgICAgICB2YXIgYmxvY2tlZE9uID0gZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudChuYXRpdmVFdmVudCk7XG4gICAgICAgIGlmIChudWxsID09PSBibG9ja2VkT24pXG4gICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgcmV0dXJuX3RhcmdldEluc3QsXG4gICAgICAgICAgICB0YXJnZXRDb250YWluZXJcbiAgICAgICAgICApLFxuICAgICAgICAgICAgY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgcXVldWVJZkNvbnRpbnVvdXNFdmVudChcbiAgICAgICAgICAgIGJsb2NrZWRPbixcbiAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgIG5hdGl2ZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAoY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSxcbiAgICAgICAgICBldmVudFN5c3RlbUZsYWdzICYgNCAmJlxuICAgICAgICAgICAgLTEgPCBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMuaW5kZXhPZihkb21FdmVudE5hbWUpKVxuICAgICAgICApIHtcbiAgICAgICAgICBmb3IgKDsgbnVsbCAhPT0gYmxvY2tlZE9uOyApIHtcbiAgICAgICAgICAgIHZhciBmaWJlciA9IGdldEluc3RhbmNlRnJvbU5vZGUoYmxvY2tlZE9uKTtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBmaWJlcilcbiAgICAgICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICBmaWJlciA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWJlci5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGZpYmVyLnBlbmRpbmdMYW5lcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgwICE9PSBsYW5lcykge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciByb290ID0gZmliZXI7XG4gICAgICAgICAgICAgICAgICAgICAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gMjtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gMjsgbGFuZXM7ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSAxIDw8ICgzMSAtIGNsejMyKGxhbmVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByb290LmVudGFuZ2xlbWVudHNbMV0gfD0gbGFuZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQoZmliZXIpO1xuICAgICAgICAgICAgICAgICAgICAgIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBOb0NvbnRleHQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5vdyQxKCkgKyBSRU5ERVJfVElNRU9VVF9NUyksXG4gICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCgwLCAhMSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgKHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcm9vdCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIDIpLFxuICAgICAgICAgICAgICAgICAgICBmbHVzaFN5bmNXb3JrJDEoKSxcbiAgICAgICAgICAgICAgICAgICAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIDIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWJlciA9IGZpbmRJbnN0YW5jZUJsb2NraW5nRXZlbnQobmF0aXZlRXZlbnQpO1xuICAgICAgICAgICAgbnVsbCA9PT0gZmliZXIgJiZcbiAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKFxuICAgICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgIHJldHVybl90YXJnZXRJbnN0LFxuICAgICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGZpYmVyID09PSBibG9ja2VkT24pIGJyZWFrO1xuICAgICAgICAgICAgYmxvY2tlZE9uID0gZmliZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIG51bGwgIT09IGJsb2NrZWRPbiAmJiBuYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRhcmdldENvbnRhaW5lclxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRJbnN0YW5jZUJsb2NraW5nRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgICAgIG5hdGl2ZUV2ZW50ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpO1xuICAgICAgcmV0dXJuIGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEluc3RhbmNlQmxvY2tpbmdUYXJnZXQodGFyZ2V0Tm9kZSkge1xuICAgICAgcmV0dXJuX3RhcmdldEluc3QgPSBudWxsO1xuICAgICAgdGFyZ2V0Tm9kZSA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpO1xuICAgICAgaWYgKG51bGwgIT09IHRhcmdldE5vZGUpIHtcbiAgICAgICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXROb2RlKTtcbiAgICAgICAgaWYgKG51bGwgPT09IG5lYXJlc3RNb3VudGVkKSB0YXJnZXROb2RlID0gbnVsbDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcbiAgICAgICAgICBpZiAoMTMgPT09IHRhZykge1xuICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IHRhcmdldE5vZGUpIHJldHVybiB0YXJnZXROb2RlO1xuICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIGlmICgzID09PSB0YWcpIHtcbiAgICAgICAgICAgIGlmIChuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClcbiAgICAgICAgICAgICAgcmV0dXJuIDMgPT09IG5lYXJlc3RNb3VudGVkLnRhZ1xuICAgICAgICAgICAgICAgID8gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICB0YXJnZXROb2RlID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2UgbmVhcmVzdE1vdW50ZWQgIT09IHRhcmdldE5vZGUgJiYgKHRhcmdldE5vZGUgPSBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuX3RhcmdldEluc3QgPSB0YXJnZXROb2RlO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEV2ZW50UHJpb3JpdHkoZG9tRXZlbnROYW1lKSB7XG4gICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICBjYXNlIFwiYmVmb3JldG9nZ2xlXCI6XG4gICAgICAgIGNhc2UgXCJjYW5jZWxcIjpcbiAgICAgICAgY2FzZSBcImNsaWNrXCI6XG4gICAgICAgIGNhc2UgXCJjbG9zZVwiOlxuICAgICAgICBjYXNlIFwiY29udGV4dG1lbnVcIjpcbiAgICAgICAgY2FzZSBcImNvcHlcIjpcbiAgICAgICAgY2FzZSBcImN1dFwiOlxuICAgICAgICBjYXNlIFwiYXV4Y2xpY2tcIjpcbiAgICAgICAgY2FzZSBcImRibGNsaWNrXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnZW5kXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnc3RhcnRcIjpcbiAgICAgICAgY2FzZSBcImRyb3BcIjpcbiAgICAgICAgY2FzZSBcImZvY3VzaW5cIjpcbiAgICAgICAgY2FzZSBcImZvY3Vzb3V0XCI6XG4gICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICBjYXNlIFwiaW52YWxpZFwiOlxuICAgICAgICBjYXNlIFwia2V5ZG93blwiOlxuICAgICAgICBjYXNlIFwia2V5cHJlc3NcIjpcbiAgICAgICAgY2FzZSBcImtleXVwXCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZWRvd25cIjpcbiAgICAgICAgY2FzZSBcIm1vdXNldXBcIjpcbiAgICAgICAgY2FzZSBcInBhc3RlXCI6XG4gICAgICAgIGNhc2UgXCJwYXVzZVwiOlxuICAgICAgICBjYXNlIFwicGxheVwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcmNhbmNlbFwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcmRvd25cIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJ1cFwiOlxuICAgICAgICBjYXNlIFwicmF0ZWNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwicmVzZXRcIjpcbiAgICAgICAgY2FzZSBcInJlc2l6ZVwiOlxuICAgICAgICBjYXNlIFwic2Vla2VkXCI6XG4gICAgICAgIGNhc2UgXCJzdWJtaXRcIjpcbiAgICAgICAgY2FzZSBcInRvZ2dsZVwiOlxuICAgICAgICBjYXNlIFwidG91Y2hjYW5jZWxcIjpcbiAgICAgICAgY2FzZSBcInRvdWNoZW5kXCI6XG4gICAgICAgIGNhc2UgXCJ0b3VjaHN0YXJ0XCI6XG4gICAgICAgIGNhc2UgXCJ2b2x1bWVjaGFuZ2VcIjpcbiAgICAgICAgY2FzZSBcImNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwic2VsZWN0aW9uY2hhbmdlXCI6XG4gICAgICAgIGNhc2UgXCJ0ZXh0SW5wdXRcIjpcbiAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uc3RhcnRcIjpcbiAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6XG4gICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbnVwZGF0ZVwiOlxuICAgICAgICBjYXNlIFwiYmVmb3JlYmx1clwiOlxuICAgICAgICBjYXNlIFwiYWZ0ZXJibHVyXCI6XG4gICAgICAgIGNhc2UgXCJiZWZvcmVpbnB1dFwiOlxuICAgICAgICBjYXNlIFwiYmx1clwiOlxuICAgICAgICBjYXNlIFwiZnVsbHNjcmVlbmNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwiZm9jdXNcIjpcbiAgICAgICAgY2FzZSBcImhhc2hjaGFuZ2VcIjpcbiAgICAgICAgY2FzZSBcInBvcHN0YXRlXCI6XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgY2FzZSBcInNlbGVjdHN0YXJ0XCI6XG4gICAgICAgICAgcmV0dXJuIERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgY2FzZSBcImRyYWdcIjpcbiAgICAgICAgY2FzZSBcImRyYWdlbnRlclwiOlxuICAgICAgICBjYXNlIFwiZHJhZ2V4aXRcIjpcbiAgICAgICAgY2FzZSBcImRyYWdsZWF2ZVwiOlxuICAgICAgICBjYXNlIFwiZHJhZ292ZXJcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlbW92ZVwiOlxuICAgICAgICBjYXNlIFwibW91c2VvdXRcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlb3ZlclwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcm1vdmVcIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdXRcIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdmVyXCI6XG4gICAgICAgIGNhc2UgXCJzY3JvbGxcIjpcbiAgICAgICAgY2FzZSBcInRvdWNobW92ZVwiOlxuICAgICAgICBjYXNlIFwid2hlZWxcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlZW50ZXJcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlbGVhdmVcIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJlbnRlclwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcmxlYXZlXCI6XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVvdXNFdmVudFByaW9yaXR5O1xuICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgIHN3aXRjaCAoZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSkge1xuICAgICAgICAgICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgICAgICAgICAgcmV0dXJuIERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICAgICAgICAgIHJldHVybiBDb250aW51b3VzRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICAgIGNhc2UgTm9ybWFsUHJpb3JpdHkkMTpcbiAgICAgICAgICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXZlbnRQcmlvcml0eTtcbiAgICAgICAgICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgICAgICAgICByZXR1cm4gSWRsZUV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gRGVmYXVsdEV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBEZWZhdWx0RXZlbnRQcmlvcml0eTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgICBjYXNlIFwiZm9jdXNvdXRcIjpcbiAgICAgICAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkcmFnZW50ZXJcIjpcbiAgICAgICAgY2FzZSBcImRyYWdsZWF2ZVwiOlxuICAgICAgICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibW91c2VvdmVyXCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZW91dFwiOlxuICAgICAgICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdmVyXCI6XG4gICAgICAgIGNhc2UgXCJwb2ludGVyb3V0XCI6XG4gICAgICAgICAgcXVldWVkUG9pbnRlcnMuZGVsZXRlKG5hdGl2ZUV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwibG9zdHBvaW50ZXJjYXB0dXJlXCI6XG4gICAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmRlbGV0ZShuYXRpdmVFdmVudC5wb2ludGVySWQpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgZXhpc3RpbmdRdWV1ZWRFdmVudCxcbiAgICAgIGJsb2NrZWRPbixcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsID09PSBleGlzdGluZ1F1ZXVlZEV2ZW50IHx8XG4gICAgICAgIGV4aXN0aW5nUXVldWVkRXZlbnQubmF0aXZlRXZlbnQgIT09IG5hdGl2ZUV2ZW50XG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGV4aXN0aW5nUXVldWVkRXZlbnQgPSB7XG4gICAgICAgICAgICBibG9ja2VkT246IGJsb2NrZWRPbixcbiAgICAgICAgICAgIGRvbUV2ZW50TmFtZTogZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFnczogZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcnM6IFt0YXJnZXRDb250YWluZXJdXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbnVsbCAhPT0gYmxvY2tlZE9uICYmXG4gICAgICAgICAgICAoKGJsb2NrZWRPbiA9IGdldEluc3RhbmNlRnJvbU5vZGUoYmxvY2tlZE9uKSksXG4gICAgICAgICAgICBudWxsICE9PSBibG9ja2VkT24gJiYgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oYmxvY2tlZE9uKSksXG4gICAgICAgICAgZXhpc3RpbmdRdWV1ZWRFdmVudFxuICAgICAgICApO1xuICAgICAgZXhpc3RpbmdRdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzIHw9IGV2ZW50U3lzdGVtRmxhZ3M7XG4gICAgICBibG9ja2VkT24gPSBleGlzdGluZ1F1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG4gICAgICBudWxsICE9PSB0YXJnZXRDb250YWluZXIgJiZcbiAgICAgICAgLTEgPT09IGJsb2NrZWRPbi5pbmRleE9mKHRhcmdldENvbnRhaW5lcikgJiZcbiAgICAgICAgYmxvY2tlZE9uLnB1c2godGFyZ2V0Q29udGFpbmVyKTtcbiAgICAgIHJldHVybiBleGlzdGluZ1F1ZXVlZEV2ZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBxdWV1ZUlmQ29udGludW91c0V2ZW50KFxuICAgICAgYmxvY2tlZE9uLFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocXVldWVkRm9jdXMgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgICAgICAgICBxdWV1ZWRGb2N1cyxcbiAgICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiZHJhZ2VudGVyXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChxdWV1ZWREcmFnID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChcbiAgICAgICAgICAgICAgcXVldWVkRHJhZyxcbiAgICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwibW91c2VvdmVyXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChxdWV1ZWRNb3VzZSA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoXG4gICAgICAgICAgICAgIHF1ZXVlZE1vdXNlLFxuICAgICAgICAgICAgICBibG9ja2VkT24sXG4gICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJwb2ludGVyb3ZlclwiOlxuICAgICAgICAgIHZhciBwb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgICAgcXVldWVkUG9pbnRlcnMuc2V0KFxuICAgICAgICAgICAgcG9pbnRlcklkLFxuICAgICAgICAgICAgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChcbiAgICAgICAgICAgICAgcXVldWVkUG9pbnRlcnMuZ2V0KHBvaW50ZXJJZCkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChwb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQpLFxuICAgICAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLnNldChcbiAgICAgICAgICAgICAgcG9pbnRlcklkLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgICAgICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5nZXQocG9pbnRlcklkKSB8fCBudWxsLFxuICAgICAgICAgICAgICAgIGJsb2NrZWRPbixcbiAgICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICEwXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCkge1xuICAgICAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShxdWV1ZWRUYXJnZXQudGFyZ2V0KTtcbiAgICAgIGlmIChudWxsICE9PSB0YXJnZXRJbnN0KSB7XG4gICAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0SW5zdCk7XG4gICAgICAgIGlmIChudWxsICE9PSBuZWFyZXN0TW91bnRlZClcbiAgICAgICAgICBpZiAoKCh0YXJnZXRJbnN0ID0gbmVhcmVzdE1vdW50ZWQudGFnKSwgMTMgPT09IHRhcmdldEluc3QpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgodGFyZ2V0SW5zdCA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gdGFyZ2V0SW5zdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgICAgICAgcnVuV2l0aFByaW9yaXR5KHF1ZXVlZFRhcmdldC5wcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICgxMyA9PT0gbmVhcmVzdE1vdW50ZWQudGFnKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgICAgICAgICAgIGxhbmUgPSBnZXRCdW1wZWRMYW5lRm9ySHlkcmF0aW9uQnlMYW5lKGxhbmUpO1xuICAgICAgICAgICAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoXG4gICAgICAgICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkLFxuICAgICAgICAgICAgICAgICAgICBsYW5lXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcm9vdCAmJlxuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgbmVhcmVzdE1vdW50ZWQsIGxhbmUpO1xuICAgICAgICAgICAgICAgICAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQobmVhcmVzdE1vdW50ZWQsIGxhbmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgMyA9PT0gdGFyZ2V0SW5zdCAmJlxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPVxuICAgICAgICAgICAgICAzID09PSBuZWFyZXN0TW91bnRlZC50YWdcbiAgICAgICAgICAgICAgICA/IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEV2ZW50KSB7XG4gICAgICBpZiAobnVsbCAhPT0gcXVldWVkRXZlbnQuYmxvY2tlZE9uKSByZXR1cm4gITE7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IHF1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG4gICAgICAgIDAgPCB0YXJnZXRDb250YWluZXJzLmxlbmd0aDtcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBuZXh0QmxvY2tlZE9uID0gZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudChxdWV1ZWRFdmVudC5uYXRpdmVFdmVudCk7XG4gICAgICAgIGlmIChudWxsID09PSBuZXh0QmxvY2tlZE9uKSB7XG4gICAgICAgICAgbmV4dEJsb2NrZWRPbiA9IHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50O1xuICAgICAgICAgIHZhciBuYXRpdmVFdmVudENsb25lID0gbmV3IG5leHRCbG9ja2VkT24uY29uc3RydWN0b3IoXG4gICAgICAgICAgICAgIG5leHRCbG9ja2VkT24udHlwZSxcbiAgICAgICAgICAgICAgbmV4dEJsb2NrZWRPblxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGV2ZW50ID0gbmF0aXZlRXZlbnRDbG9uZTtcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50UmVwbGF5aW5nRXZlbnQgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiRXhwZWN0ZWQgY3VycmVudGx5IHJlcGxheWluZyBldmVudCB0byBiZSBudWxsLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGN1cnJlbnRSZXBsYXlpbmdFdmVudCA9IGV2ZW50O1xuICAgICAgICAgIG5leHRCbG9ja2VkT24udGFyZ2V0LmRpc3BhdGNoRXZlbnQobmF0aXZlRXZlbnRDbG9uZSk7XG4gICAgICAgICAgbnVsbCA9PT0gY3VycmVudFJlcGxheWluZ0V2ZW50ICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkIGN1cnJlbnRseSByZXBsYXlpbmcgZXZlbnQgdG8gbm90IGJlIG51bGwuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY3VycmVudFJlcGxheWluZ0V2ZW50ID0gbnVsbDtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0YXJnZXRDb250YWluZXJzID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShuZXh0QmxvY2tlZE9uKSksXG4gICAgICAgICAgICBudWxsICE9PSB0YXJnZXRDb250YWluZXJzICYmXG4gICAgICAgICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKHRhcmdldENvbnRhaW5lcnMpLFxuICAgICAgICAgICAgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT24pLFxuICAgICAgICAgICAgITFcbiAgICAgICAgICApO1xuICAgICAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcChxdWV1ZWRFdmVudCwga2V5LCBtYXApIHtcbiAgICAgIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpICYmIG1hcC5kZWxldGUoa2V5KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVwbGF5VW5ibG9ja2VkRXZlbnRzKCkge1xuICAgICAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9ICExO1xuICAgICAgbnVsbCAhPT0gcXVldWVkRm9jdXMgJiZcbiAgICAgICAgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRGb2N1cykgJiZcbiAgICAgICAgKHF1ZXVlZEZvY3VzID0gbnVsbCk7XG4gICAgICBudWxsICE9PSBxdWV1ZWREcmFnICYmXG4gICAgICAgIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRHJhZykgJiZcbiAgICAgICAgKHF1ZXVlZERyYWcgPSBudWxsKTtcbiAgICAgIG51bGwgIT09IHF1ZXVlZE1vdXNlICYmXG4gICAgICAgIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkTW91c2UpICYmXG4gICAgICAgIChxdWV1ZWRNb3VzZSA9IG51bGwpO1xuICAgICAgcXVldWVkUG9pbnRlcnMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xuICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmZvckVhY2goYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpIHtcbiAgICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkICYmXG4gICAgICAgICgocXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbCksXG4gICAgICAgIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgfHxcbiAgICAgICAgICAoKGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSAhMCksXG4gICAgICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soXG4gICAgICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gICAgICAgICAgICByZXBsYXlVbmJsb2NrZWRFdmVudHNcbiAgICAgICAgICApKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlUmVwbGF5UXVldWVJZk5lZWRlZChmb3JtUmVwbGF5aW5nUXVldWUpIHtcbiAgICAgIGxhc3RTY2hlZHVsZWRSZXBsYXlRdWV1ZSAhPT0gZm9ybVJlcGxheWluZ1F1ZXVlICYmXG4gICAgICAgICgobGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlID0gZm9ybVJlcGxheWluZ1F1ZXVlKSxcbiAgICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soXG4gICAgICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RTY2hlZHVsZWRSZXBsYXlRdWV1ZSA9PT0gZm9ybVJlcGxheWluZ1F1ZXVlICYmXG4gICAgICAgICAgICAgIChsYXN0U2NoZWR1bGVkUmVwbGF5UXVldWUgPSBudWxsKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybVJlcGxheWluZ1F1ZXVlLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgICAgICAgIHZhciBmb3JtID0gZm9ybVJlcGxheWluZ1F1ZXVlW2ldLFxuICAgICAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uID0gZm9ybVJlcGxheWluZ1F1ZXVlW2kgKyAxXSxcbiAgICAgICAgICAgICAgICBmb3JtRGF0YSA9IGZvcm1SZXBsYXlpbmdRdWV1ZVtpICsgMl07XG4gICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBzdWJtaXR0ZXJPckFjdGlvbilcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBudWxsID09PSBmaW5kSW5zdGFuY2VCbG9ja2luZ1RhcmdldChzdWJtaXR0ZXJPckFjdGlvbiB8fCBmb3JtKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGVsc2UgYnJlYWs7XG4gICAgICAgICAgICAgIHZhciBmb3JtSW5zdCA9IGdldEluc3RhbmNlRnJvbU5vZGUoZm9ybSk7XG4gICAgICAgICAgICAgIG51bGwgIT09IGZvcm1JbnN0ICYmXG4gICAgICAgICAgICAgICAgKGZvcm1SZXBsYXlpbmdRdWV1ZS5zcGxpY2UoaSwgMyksXG4gICAgICAgICAgICAgICAgKGkgLT0gMyksXG4gICAgICAgICAgICAgICAgKGZvcm0gPSB7XG4gICAgICAgICAgICAgICAgICBwZW5kaW5nOiAhMCxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGZvcm1EYXRhLFxuICAgICAgICAgICAgICAgICAgbWV0aG9kOiBmb3JtLm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgIGFjdGlvbjogc3VibWl0dGVyT3JBY3Rpb25cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGZvcm0pLFxuICAgICAgICAgICAgICAgIHN0YXJ0SG9zdFRyYW5zaXRpb24oXG4gICAgICAgICAgICAgICAgICBmb3JtSW5zdCxcbiAgICAgICAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICAgICAgICBzdWJtaXR0ZXJPckFjdGlvbixcbiAgICAgICAgICAgICAgICAgIGZvcm1EYXRhXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmV0cnlJZkJsb2NrZWRPbih1bmJsb2NrZWQpIHtcbiAgICAgIGZ1bmN0aW9uIHVuYmxvY2socXVldWVkRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKTtcbiAgICAgIH1cbiAgICAgIG51bGwgIT09IHF1ZXVlZEZvY3VzICYmXG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRGb2N1cywgdW5ibG9ja2VkKTtcbiAgICAgIG51bGwgIT09IHF1ZXVlZERyYWcgJiYgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZERyYWcsIHVuYmxvY2tlZCk7XG4gICAgICBudWxsICE9PSBxdWV1ZWRNb3VzZSAmJlxuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkTW91c2UsIHVuYmxvY2tlZCk7XG4gICAgICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKHVuYmxvY2spO1xuICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmZvckVhY2godW5ibG9jayk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcXVldWVkVGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzW2ldO1xuICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQgJiYgKHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBudWxsKTtcbiAgICAgIH1cbiAgICAgIGZvciAoXG4gICAgICAgIDtcbiAgICAgICAgMCA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGggJiZcbiAgICAgICAgKChpID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzWzBdKSwgbnVsbCA9PT0gaS5ibG9ja2VkT24pO1xuXG4gICAgICApXG4gICAgICAgIGF0dGVtcHRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldChpKSxcbiAgICAgICAgICBudWxsID09PSBpLmJsb2NrZWRPbiAmJiBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMuc2hpZnQoKTtcbiAgICAgIGkgPSAodW5ibG9ja2VkLm93bmVyRG9jdW1lbnQgfHwgdW5ibG9ja2VkKS4kJHJlYWN0Rm9ybVJlcGxheTtcbiAgICAgIGlmIChudWxsICE9IGkpXG4gICAgICAgIGZvciAocXVldWVkVGFyZ2V0ID0gMDsgcXVldWVkVGFyZ2V0IDwgaS5sZW5ndGg7IHF1ZXVlZFRhcmdldCArPSAzKSB7XG4gICAgICAgICAgdmFyIGZvcm0gPSBpW3F1ZXVlZFRhcmdldF0sXG4gICAgICAgICAgICBzdWJtaXR0ZXJPckFjdGlvbiA9IGlbcXVldWVkVGFyZ2V0ICsgMV0sXG4gICAgICAgICAgICBmb3JtUHJvcHMgPSBmb3JtW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHN1Ym1pdHRlck9yQWN0aW9uKVxuICAgICAgICAgICAgZm9ybVByb3BzIHx8IHNjaGVkdWxlUmVwbGF5UXVldWVJZk5lZWRlZChpKTtcbiAgICAgICAgICBlbHNlIGlmIChmb3JtUHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBhY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzdWJtaXR0ZXJPckFjdGlvbiAmJlxuICAgICAgICAgICAgICBzdWJtaXR0ZXJPckFjdGlvbi5oYXNBdHRyaWJ1dGUoXCJmb3JtQWN0aW9uXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoKGZvcm0gPSBzdWJtaXR0ZXJPckFjdGlvbiksXG4gICAgICAgICAgICAgICAgKGZvcm1Qcm9wcyA9IHN1Ym1pdHRlck9yQWN0aW9uW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGwpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgYWN0aW9uID0gZm9ybVByb3BzLmZvcm1BY3Rpb247XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBmaW5kSW5zdGFuY2VCbG9ja2luZ1RhcmdldChmb3JtKSkgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgYWN0aW9uID0gZm9ybVByb3BzLmFjdGlvbjtcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGFjdGlvblxuICAgICAgICAgICAgICA/IChpW3F1ZXVlZFRhcmdldCArIDFdID0gYWN0aW9uKVxuICAgICAgICAgICAgICA6IChpLnNwbGljZShxdWV1ZWRUYXJnZXQsIDMpLCAocXVldWVkVGFyZ2V0IC09IDMpKTtcbiAgICAgICAgICAgIHNjaGVkdWxlUmVwbGF5UXVldWVJZk5lZWRlZChpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gUmVhY3RET01Sb290KGludGVybmFsUm9vdCkge1xuICAgICAgdGhpcy5faW50ZXJuYWxSb290ID0gaW50ZXJuYWxSb290O1xuICAgIH1cbiAgICBmdW5jdGlvbiBSZWFjdERPTUh5ZHJhdGlvblJvb3QoaW50ZXJuYWxSb290KSB7XG4gICAgICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBpbnRlcm5hbFJvb3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5JZlJlYWN0RE9NQ29udGFpbmVySW5ERVYoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXJbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gJiZcbiAgICAgICAgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIllvdSBhcmUgY2FsbGluZyBSZWFjdERPTUNsaWVudC5jcmVhdGVSb290KCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSBwYXNzZWQgdG8gUmVhY3RET00ucmVuZGVyKCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJZb3UgYXJlIGNhbGxpbmcgUmVhY3RET01DbGllbnQuY3JlYXRlUm9vdCgpIG9uIGEgY29udGFpbmVyIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBwYXNzZWQgdG8gY3JlYXRlUm9vdCgpIGJlZm9yZS4gSW5zdGVhZCwgY2FsbCByb290LnJlbmRlcigpIG9uIHRoZSBleGlzdGluZyByb290IGluc3RlYWQgaWYgeW91IHdhbnQgdG8gdXBkYXRlIGl0LlwiXG4gICAgICAgICAgICApKTtcbiAgICB9XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydCAmJlxuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydChFcnJvcigpKTtcbiAgICB2YXIgU2NoZWR1bGVyID0gcmVxdWlyZShcInNjaGVkdWxlclwiKSxcbiAgICAgIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpLFxuICAgICAgUmVhY3RET00gPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpLFxuICAgICAgYXNzaWduID0gT2JqZWN0LmFzc2lnbixcbiAgICAgIFJFQUNUX0xFR0FDWV9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSxcbiAgICAgIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxcbiAgICAgIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxcbiAgICAgIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gICAgICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuICAgICAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSxcbiAgICAgIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIiksXG4gICAgICBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICAgICAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gICAgICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICAgICAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gICAgICBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTtcbiAgICBTeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik7XG4gICAgdmFyIFJFQUNUX0FDVElWSVRZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuYWN0aXZpdHlcIik7XG4gICAgU3ltYm9sLmZvcihcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIik7XG4gICAgU3ltYm9sLmZvcihcInJlYWN0LnRyYWNpbmdfbWFya2VyXCIpO1xuICAgIHZhciBSRUFDVF9NRU1PX0NBQ0hFX1NFTlRJTkVMID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIik7XG4gICAgU3ltYm9sLmZvcihcInJlYWN0LnZpZXdfdHJhbnNpdGlvblwiKTtcbiAgICB2YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yLFxuICAgICAgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5LFxuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPVxuICAgICAgICBSZWFjdC5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUsXG4gICAgICBSZWFjdERPTVNoYXJlZEludGVybmFscyA9XG4gICAgICAgIFJlYWN0RE9NLl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxcbiAgICAgIE5vdFBlbmRpbmcgPSBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgcGVuZGluZzogITEsXG4gICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgIG1ldGhvZDogbnVsbCxcbiAgICAgICAgYWN0aW9uOiBudWxsXG4gICAgICB9KSxcbiAgICAgIHZhbHVlU3RhY2sgPSBbXTtcbiAgICB2YXIgZmliZXJTdGFjayA9IFtdO1xuICAgIHZhciBpbmRleCRqc2NvbXAkMCA9IC0xLFxuICAgICAgY29udGV4dFN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgY29udGV4dEZpYmVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCksXG4gICAgICByb290SW5zdGFuY2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIGhvc3RUcmFuc2l0aW9uUHJvdmlkZXJDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCksXG4gICAgICBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gICAgICBzY2hlZHVsZUNhbGxiYWNrJDMgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgICAgIGNhbmNlbENhbGxiYWNrJDEgPSBTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssXG4gICAgICBzaG91bGRZaWVsZCA9IFNjaGVkdWxlci51bnN0YWJsZV9zaG91bGRZaWVsZCxcbiAgICAgIHJlcXVlc3RQYWludCA9IFNjaGVkdWxlci51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsXG4gICAgICBub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3csXG4gICAgICBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IFNjaGVkdWxlci51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxcbiAgICAgIEltbWVkaWF0ZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LFxuICAgICAgVXNlckJsb2NraW5nUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgICBOb3JtYWxQcmlvcml0eSQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgICAgTG93UHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTG93UHJpb3JpdHksXG4gICAgICBJZGxlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSWRsZVByaW9yaXR5LFxuICAgICAgbG9nJDEgPSBTY2hlZHVsZXIubG9nLFxuICAgICAgdW5zdGFibGVfc2V0RGlzYWJsZVlpZWxkVmFsdWUgPSBTY2hlZHVsZXIudW5zdGFibGVfc2V0RGlzYWJsZVlpZWxkVmFsdWUsXG4gICAgICByZW5kZXJlcklEID0gbnVsbCxcbiAgICAgIGluamVjdGVkSG9vayA9IG51bGwsXG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzID0gbnVsbCxcbiAgICAgIGhhc0xvZ2dlZEVycm9yID0gITEsXG4gICAgICBpc0RldlRvb2xzUHJlc2VudCA9IFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18sXG4gICAgICBjbHozMiA9IE1hdGguY2x6MzIgPyBNYXRoLmNsejMyIDogY2x6MzJGYWxsYmFjayxcbiAgICAgIGxvZyA9IE1hdGgubG9nLFxuICAgICAgTE4yID0gTWF0aC5MTjIsXG4gICAgICBuZXh0VHJhbnNpdGlvbkxhbmUgPSAyNTYsXG4gICAgICBuZXh0UmV0cnlMYW5lID0gNDE5NDMwNCxcbiAgICAgIERpc2NyZXRlRXZlbnRQcmlvcml0eSA9IDIsXG4gICAgICBDb250aW51b3VzRXZlbnRQcmlvcml0eSA9IDgsXG4gICAgICBEZWZhdWx0RXZlbnRQcmlvcml0eSA9IDMyLFxuICAgICAgSWRsZUV2ZW50UHJpb3JpdHkgPSAyNjg0MzU0NTYsXG4gICAgICByYW5kb21LZXkgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxcbiAgICAgIGludGVybmFsSW5zdGFuY2VLZXkgPSBcIl9fcmVhY3RGaWJlciRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsUHJvcHNLZXkgPSBcIl9fcmVhY3RQcm9wcyRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXkgPSBcIl9fcmVhY3RDb250YWluZXIkXCIgKyByYW5kb21LZXksXG4gICAgICBpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXkgPSBcIl9fcmVhY3RFdmVudHMkXCIgKyByYW5kb21LZXksXG4gICAgICBpbnRlcm5hbEV2ZW50SGFuZGxlckxpc3RlbmVyc0tleSA9IFwiX19yZWFjdExpc3RlbmVycyRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsRXZlbnRIYW5kbGVzU2V0S2V5ID0gXCJfX3JlYWN0SGFuZGxlcyRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsUm9vdE5vZGVSZXNvdXJjZXNLZXkgPSBcIl9fcmVhY3RSZXNvdXJjZXMkXCIgKyByYW5kb21LZXksXG4gICAgICBpbnRlcm5hbEhvaXN0YWJsZU1hcmtlciA9IFwiX19yZWFjdE1hcmtlciRcIiArIHJhbmRvbUtleSxcbiAgICAgIGFsbE5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoKSxcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSB7fSxcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSB7fSxcbiAgICAgIGhhc1JlYWRPbmx5VmFsdWUgPSB7XG4gICAgICAgIGJ1dHRvbjogITAsXG4gICAgICAgIGNoZWNrYm94OiAhMCxcbiAgICAgICAgaW1hZ2U6ICEwLFxuICAgICAgICBoaWRkZW46ICEwLFxuICAgICAgICByYWRpbzogITAsXG4gICAgICAgIHJlc2V0OiAhMCxcbiAgICAgICAgc3VibWl0OiAhMFxuICAgICAgfSxcbiAgICAgIFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYID0gUmVnRXhwKFxuICAgICAgICBcIl5bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRF1bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXSokXCJcbiAgICAgICksXG4gICAgICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlID0ge30sXG4gICAgICB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fSxcbiAgICAgIGRpc2FibGVkRGVwdGggPSAwLFxuICAgICAgcHJldkxvZyxcbiAgICAgIHByZXZJbmZvLFxuICAgICAgcHJldldhcm4sXG4gICAgICBwcmV2RXJyb3IsXG4gICAgICBwcmV2R3JvdXAsXG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQsXG4gICAgICBwcmV2R3JvdXBFbmQ7XG4gICAgZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gITA7XG4gICAgdmFyIHByZWZpeCxcbiAgICAgIHN1ZmZpeCxcbiAgICAgIHJlZW50cnkgPSAhMTtcbiAgICB2YXIgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyAoXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrTWFwID8gV2Vha01hcCA6IE1hcFxuICAgICkoKTtcbiAgICB2YXIgY3VycmVudCA9IG51bGwsXG4gICAgICBpc1JlbmRlcmluZyA9ICExLFxuICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3Rlc1JlZ2V4ID0gL1tcXG5cIlxcXFxdL2csXG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSA9ICExLFxuICAgICAgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCA9ICExLFxuICAgICAgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSAhMSxcbiAgICAgIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSAhMSxcbiAgICAgIGRpZFdhcm5JbnZhbGlkSW5uZXJIVE1MID0gITE7XG4gICAgdmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9ICExO1xuICAgIHZhciB2YWx1ZVByb3BOYW1lcyA9IFtcInZhbHVlXCIsIFwiZGVmYXVsdFZhbHVlXCJdLFxuICAgICAgZGlkV2FyblZhbERlZmF1bHRWYWwgPSAhMSxcbiAgICAgIG5lZWRzRXNjYXBpbmcgPSAvW1wiJyY8PlxcblxcdF18Xlxcc3xcXHMkLyxcbiAgICAgIHNwZWNpYWxUYWdzID1cbiAgICAgICAgXCJhZGRyZXNzIGFwcGxldCBhcmVhIGFydGljbGUgYXNpZGUgYmFzZSBiYXNlZm9udCBiZ3NvdW5kIGJsb2NrcXVvdGUgYm9keSBiciBidXR0b24gY2FwdGlvbiBjZW50ZXIgY29sIGNvbGdyb3VwIGRkIGRldGFpbHMgZGlyIGRpdiBkbCBkdCBlbWJlZCBmaWVsZHNldCBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgZm9ybSBmcmFtZSBmcmFtZXNldCBoMSBoMiBoMyBoNCBoNSBoNiBoZWFkIGhlYWRlciBoZ3JvdXAgaHIgaHRtbCBpZnJhbWUgaW1nIGlucHV0IGlzaW5kZXggbGkgbGluayBsaXN0aW5nIG1haW4gbWFycXVlZSBtZW51IG1lbnVpdGVtIG1ldGEgbmF2IG5vZW1iZWQgbm9mcmFtZXMgbm9zY3JpcHQgb2JqZWN0IG9sIHAgcGFyYW0gcGxhaW50ZXh0IHByZSBzY3JpcHQgc2VjdGlvbiBzZWxlY3Qgc291cmNlIHN0eWxlIHN1bW1hcnkgdGFibGUgdGJvZHkgdGQgdGVtcGxhdGUgdGV4dGFyZWEgdGZvb3QgdGggdGhlYWQgdGl0bGUgdHIgdHJhY2sgdWwgd2JyIHhtcFwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICBpblNjb3BlVGFncyA9XG4gICAgICAgIFwiYXBwbGV0IGNhcHRpb24gaHRtbCB0YWJsZSB0ZCB0aCBtYXJxdWVlIG9iamVjdCB0ZW1wbGF0ZSBmb3JlaWduT2JqZWN0IGRlc2MgdGl0bGVcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApLFxuICAgICAgYnV0dG9uU2NvcGVUYWdzID0gaW5TY29wZVRhZ3MuY29uY2F0KFtcImJ1dHRvblwiXSksXG4gICAgICBpbXBsaWVkRW5kVGFncyA9IFwiZGQgZHQgbGkgb3B0aW9uIG9wdGdyb3VwIHAgcnAgcnRcIi5zcGxpdChcIiBcIiksXG4gICAgICBlbXB0eUFuY2VzdG9ySW5mb0RldiA9IHtcbiAgICAgICAgY3VycmVudDogbnVsbCxcbiAgICAgICAgZm9ybVRhZzogbnVsbCxcbiAgICAgICAgYVRhZ0luU2NvcGU6IG51bGwsXG4gICAgICAgIGJ1dHRvblRhZ0luU2NvcGU6IG51bGwsXG4gICAgICAgIG5vYnJUYWdJblNjb3BlOiBudWxsLFxuICAgICAgICBwVGFnSW5CdXR0b25TY29wZTogbnVsbCxcbiAgICAgICAgbGlzdEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbCxcbiAgICAgICAgZGxJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgICAgIGNvbnRhaW5lclRhZ0luU2NvcGU6IG51bGwsXG4gICAgICAgIGltcGxpY2l0Um9vdFNjb3BlOiAhMVxuICAgICAgfSxcbiAgICAgIGRpZFdhcm4gPSB7fSxcbiAgICAgIHNob3J0aGFuZFRvTG9uZ2hhbmQgPSB7XG4gICAgICAgIGFuaW1hdGlvbjpcbiAgICAgICAgICBcImFuaW1hdGlvbkRlbGF5IGFuaW1hdGlvbkRpcmVjdGlvbiBhbmltYXRpb25EdXJhdGlvbiBhbmltYXRpb25GaWxsTW9kZSBhbmltYXRpb25JdGVyYXRpb25Db3VudCBhbmltYXRpb25OYW1lIGFuaW1hdGlvblBsYXlTdGF0ZSBhbmltYXRpb25UaW1pbmdGdW5jdGlvblwiLnNwbGl0KFxuICAgICAgICAgICAgXCIgXCJcbiAgICAgICAgICApLFxuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIFwiYmFja2dyb3VuZEF0dGFjaG1lbnQgYmFja2dyb3VuZENsaXAgYmFja2dyb3VuZENvbG9yIGJhY2tncm91bmRJbWFnZSBiYWNrZ3JvdW5kT3JpZ2luIGJhY2tncm91bmRQb3NpdGlvblggYmFja2dyb3VuZFBvc2l0aW9uWSBiYWNrZ3JvdW5kUmVwZWF0IGJhY2tncm91bmRTaXplXCIuc3BsaXQoXG4gICAgICAgICAgICBcIiBcIlxuICAgICAgICAgICksXG4gICAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogW1wiYmFja2dyb3VuZFBvc2l0aW9uWFwiLCBcImJhY2tncm91bmRQb3NpdGlvbllcIl0sXG4gICAgICAgIGJvcmRlcjpcbiAgICAgICAgICBcImJvcmRlckJvdHRvbUNvbG9yIGJvcmRlckJvdHRvbVN0eWxlIGJvcmRlckJvdHRvbVdpZHRoIGJvcmRlckltYWdlT3V0c2V0IGJvcmRlckltYWdlUmVwZWF0IGJvcmRlckltYWdlU2xpY2UgYm9yZGVySW1hZ2VTb3VyY2UgYm9yZGVySW1hZ2VXaWR0aCBib3JkZXJMZWZ0Q29sb3IgYm9yZGVyTGVmdFN0eWxlIGJvcmRlckxlZnRXaWR0aCBib3JkZXJSaWdodENvbG9yIGJvcmRlclJpZ2h0U3R5bGUgYm9yZGVyUmlnaHRXaWR0aCBib3JkZXJUb3BDb2xvciBib3JkZXJUb3BTdHlsZSBib3JkZXJUb3BXaWR0aFwiLnNwbGl0KFxuICAgICAgICAgICAgXCIgXCJcbiAgICAgICAgICApLFxuICAgICAgICBib3JkZXJCbG9ja0VuZDogW1xuICAgICAgICAgIFwiYm9yZGVyQmxvY2tFbmRDb2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVyQmxvY2tFbmRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVyQmxvY2tFbmRXaWR0aFwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlckJsb2NrU3RhcnQ6IFtcbiAgICAgICAgICBcImJvcmRlckJsb2NrU3RhcnRDb2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVyQmxvY2tTdGFydFN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJCbG9ja1N0YXJ0V2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJCb3R0b206IFtcbiAgICAgICAgICBcImJvcmRlckJvdHRvbUNvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21TdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVyQm90dG9tV2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJDb2xvcjogW1xuICAgICAgICAgIFwiYm9yZGVyQm90dG9tQ29sb3JcIixcbiAgICAgICAgICBcImJvcmRlckxlZnRDb2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVyUmlnaHRDb2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVyVG9wQ29sb3JcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJJbWFnZTogW1xuICAgICAgICAgIFwiYm9yZGVySW1hZ2VPdXRzZXRcIixcbiAgICAgICAgICBcImJvcmRlckltYWdlUmVwZWF0XCIsXG4gICAgICAgICAgXCJib3JkZXJJbWFnZVNsaWNlXCIsXG4gICAgICAgICAgXCJib3JkZXJJbWFnZVNvdXJjZVwiLFxuICAgICAgICAgIFwiYm9yZGVySW1hZ2VXaWR0aFwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlcklubGluZUVuZDogW1xuICAgICAgICAgIFwiYm9yZGVySW5saW5lRW5kQ29sb3JcIixcbiAgICAgICAgICBcImJvcmRlcklubGluZUVuZFN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJJbmxpbmVFbmRXaWR0aFwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlcklubGluZVN0YXJ0OiBbXG4gICAgICAgICAgXCJib3JkZXJJbmxpbmVTdGFydENvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJJbmxpbmVTdGFydFN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJJbmxpbmVTdGFydFdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVyTGVmdDogW1wiYm9yZGVyTGVmdENvbG9yXCIsIFwiYm9yZGVyTGVmdFN0eWxlXCIsIFwiYm9yZGVyTGVmdFdpZHRoXCJdLFxuICAgICAgICBib3JkZXJSYWRpdXM6IFtcbiAgICAgICAgICBcImJvcmRlckJvdHRvbUxlZnRSYWRpdXNcIixcbiAgICAgICAgICBcImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzXCIsXG4gICAgICAgICAgXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXG4gICAgICAgICAgXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlclJpZ2h0OiBbXG4gICAgICAgICAgXCJib3JkZXJSaWdodENvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJSaWdodFN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJSaWdodFdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVyU3R5bGU6IFtcbiAgICAgICAgICBcImJvcmRlckJvdHRvbVN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJMZWZ0U3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlclJpZ2h0U3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlclRvcFN0eWxlXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVyVG9wOiBbXCJib3JkZXJUb3BDb2xvclwiLCBcImJvcmRlclRvcFN0eWxlXCIsIFwiYm9yZGVyVG9wV2lkdGhcIl0sXG4gICAgICAgIGJvcmRlcldpZHRoOiBbXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21XaWR0aFwiLFxuICAgICAgICAgIFwiYm9yZGVyTGVmdFdpZHRoXCIsXG4gICAgICAgICAgXCJib3JkZXJSaWdodFdpZHRoXCIsXG4gICAgICAgICAgXCJib3JkZXJUb3BXaWR0aFwiXG4gICAgICAgIF0sXG4gICAgICAgIGNvbHVtblJ1bGU6IFtcImNvbHVtblJ1bGVDb2xvclwiLCBcImNvbHVtblJ1bGVTdHlsZVwiLCBcImNvbHVtblJ1bGVXaWR0aFwiXSxcbiAgICAgICAgY29sdW1uczogW1wiY29sdW1uQ291bnRcIiwgXCJjb2x1bW5XaWR0aFwiXSxcbiAgICAgICAgZmxleDogW1wiZmxleEJhc2lzXCIsIFwiZmxleEdyb3dcIiwgXCJmbGV4U2hyaW5rXCJdLFxuICAgICAgICBmbGV4RmxvdzogW1wiZmxleERpcmVjdGlvblwiLCBcImZsZXhXcmFwXCJdLFxuICAgICAgICBmb250OiBcImZvbnRGYW1pbHkgZm9udEZlYXR1cmVTZXR0aW5ncyBmb250S2VybmluZyBmb250TGFuZ3VhZ2VPdmVycmlkZSBmb250U2l6ZSBmb250U2l6ZUFkanVzdCBmb250U3RyZXRjaCBmb250U3R5bGUgZm9udFZhcmlhbnQgZm9udFZhcmlhbnRBbHRlcm5hdGVzIGZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudEVhc3RBc2lhbiBmb250VmFyaWFudExpZ2F0dXJlcyBmb250VmFyaWFudE51bWVyaWMgZm9udFZhcmlhbnRQb3NpdGlvbiBmb250V2VpZ2h0IGxpbmVIZWlnaHRcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApLFxuICAgICAgICBmb250VmFyaWFudDpcbiAgICAgICAgICBcImZvbnRWYXJpYW50QWx0ZXJuYXRlcyBmb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRFYXN0QXNpYW4gZm9udFZhcmlhbnRMaWdhdHVyZXMgZm9udFZhcmlhbnROdW1lcmljIGZvbnRWYXJpYW50UG9zaXRpb25cIi5zcGxpdChcbiAgICAgICAgICAgIFwiIFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgZ2FwOiBbXCJjb2x1bW5HYXBcIiwgXCJyb3dHYXBcIl0sXG4gICAgICAgIGdyaWQ6IFwiZ3JpZEF1dG9Db2x1bW5zIGdyaWRBdXRvRmxvdyBncmlkQXV0b1Jvd3MgZ3JpZFRlbXBsYXRlQXJlYXMgZ3JpZFRlbXBsYXRlQ29sdW1ucyBncmlkVGVtcGxhdGVSb3dzXCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKSxcbiAgICAgICAgZ3JpZEFyZWE6IFtcbiAgICAgICAgICBcImdyaWRDb2x1bW5FbmRcIixcbiAgICAgICAgICBcImdyaWRDb2x1bW5TdGFydFwiLFxuICAgICAgICAgIFwiZ3JpZFJvd0VuZFwiLFxuICAgICAgICAgIFwiZ3JpZFJvd1N0YXJ0XCJcbiAgICAgICAgXSxcbiAgICAgICAgZ3JpZENvbHVtbjogW1wiZ3JpZENvbHVtbkVuZFwiLCBcImdyaWRDb2x1bW5TdGFydFwiXSxcbiAgICAgICAgZ3JpZENvbHVtbkdhcDogW1wiY29sdW1uR2FwXCJdLFxuICAgICAgICBncmlkR2FwOiBbXCJjb2x1bW5HYXBcIiwgXCJyb3dHYXBcIl0sXG4gICAgICAgIGdyaWRSb3c6IFtcImdyaWRSb3dFbmRcIiwgXCJncmlkUm93U3RhcnRcIl0sXG4gICAgICAgIGdyaWRSb3dHYXA6IFtcInJvd0dhcFwiXSxcbiAgICAgICAgZ3JpZFRlbXBsYXRlOiBbXG4gICAgICAgICAgXCJncmlkVGVtcGxhdGVBcmVhc1wiLFxuICAgICAgICAgIFwiZ3JpZFRlbXBsYXRlQ29sdW1uc1wiLFxuICAgICAgICAgIFwiZ3JpZFRlbXBsYXRlUm93c1wiXG4gICAgICAgIF0sXG4gICAgICAgIGxpc3RTdHlsZTogW1wibGlzdFN0eWxlSW1hZ2VcIiwgXCJsaXN0U3R5bGVQb3NpdGlvblwiLCBcImxpc3RTdHlsZVR5cGVcIl0sXG4gICAgICAgIG1hcmdpbjogW1wibWFyZ2luQm90dG9tXCIsIFwibWFyZ2luTGVmdFwiLCBcIm1hcmdpblJpZ2h0XCIsIFwibWFyZ2luVG9wXCJdLFxuICAgICAgICBtYXJrZXI6IFtcIm1hcmtlckVuZFwiLCBcIm1hcmtlck1pZFwiLCBcIm1hcmtlclN0YXJ0XCJdLFxuICAgICAgICBtYXNrOiBcIm1hc2tDbGlwIG1hc2tDb21wb3NpdGUgbWFza0ltYWdlIG1hc2tNb2RlIG1hc2tPcmlnaW4gbWFza1Bvc2l0aW9uWCBtYXNrUG9zaXRpb25ZIG1hc2tSZXBlYXQgbWFza1NpemVcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApLFxuICAgICAgICBtYXNrUG9zaXRpb246IFtcIm1hc2tQb3NpdGlvblhcIiwgXCJtYXNrUG9zaXRpb25ZXCJdLFxuICAgICAgICBvdXRsaW5lOiBbXCJvdXRsaW5lQ29sb3JcIiwgXCJvdXRsaW5lU3R5bGVcIiwgXCJvdXRsaW5lV2lkdGhcIl0sXG4gICAgICAgIG92ZXJmbG93OiBbXCJvdmVyZmxvd1hcIiwgXCJvdmVyZmxvd1lcIl0sXG4gICAgICAgIHBhZGRpbmc6IFtcInBhZGRpbmdCb3R0b21cIiwgXCJwYWRkaW5nTGVmdFwiLCBcInBhZGRpbmdSaWdodFwiLCBcInBhZGRpbmdUb3BcIl0sXG4gICAgICAgIHBsYWNlQ29udGVudDogW1wiYWxpZ25Db250ZW50XCIsIFwianVzdGlmeUNvbnRlbnRcIl0sXG4gICAgICAgIHBsYWNlSXRlbXM6IFtcImFsaWduSXRlbXNcIiwgXCJqdXN0aWZ5SXRlbXNcIl0sXG4gICAgICAgIHBsYWNlU2VsZjogW1wiYWxpZ25TZWxmXCIsIFwianVzdGlmeVNlbGZcIl0sXG4gICAgICAgIHRleHREZWNvcmF0aW9uOiBbXG4gICAgICAgICAgXCJ0ZXh0RGVjb3JhdGlvbkNvbG9yXCIsXG4gICAgICAgICAgXCJ0ZXh0RGVjb3JhdGlvbkxpbmVcIixcbiAgICAgICAgICBcInRleHREZWNvcmF0aW9uU3R5bGVcIlxuICAgICAgICBdLFxuICAgICAgICB0ZXh0RW1waGFzaXM6IFtcInRleHRFbXBoYXNpc0NvbG9yXCIsIFwidGV4dEVtcGhhc2lzU3R5bGVcIl0sXG4gICAgICAgIHRyYW5zaXRpb246IFtcbiAgICAgICAgICBcInRyYW5zaXRpb25EZWxheVwiLFxuICAgICAgICAgIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsXG4gICAgICAgICAgXCJ0cmFuc2l0aW9uUHJvcGVydHlcIixcbiAgICAgICAgICBcInRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblwiXG4gICAgICAgIF0sXG4gICAgICAgIHdvcmRXcmFwOiBbXCJvdmVyZmxvd1dyYXBcIl1cbiAgICAgIH0sXG4gICAgICB1cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZyxcbiAgICAgIG1zUGF0dGVybiQxID0gL15tcy0vLFxuICAgICAgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14oPzp3ZWJraXR8bW96fG8pW0EtWl0vLFxuICAgICAgbXNQYXR0ZXJuID0gL14tbXMtLyxcbiAgICAgIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nLFxuICAgICAgYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuID0gLztcXHMqJC8sXG4gICAgICB3YXJuZWRTdHlsZU5hbWVzID0ge30sXG4gICAgICB3YXJuZWRTdHlsZVZhbHVlcyA9IHt9LFxuICAgICAgd2FybmVkRm9yTmFOVmFsdWUgPSAhMSxcbiAgICAgIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSAhMSxcbiAgICAgIHVuaXRsZXNzTnVtYmVycyA9IG5ldyBTZXQoXG4gICAgICAgIFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgYXNwZWN0UmF0aW8gYm9yZGVySW1hZ2VPdXRzZXQgYm9yZGVySW1hZ2VTbGljZSBib3JkZXJJbWFnZVdpZHRoIGJveEZsZXggYm94RmxleEdyb3VwIGJveE9yZGluYWxHcm91cCBjb2x1bW5Db3VudCBjb2x1bW5zIGZsZXggZmxleEdyb3cgZmxleFBvc2l0aXZlIGZsZXhTaHJpbmsgZmxleE5lZ2F0aXZlIGZsZXhPcmRlciBncmlkQXJlYSBncmlkUm93IGdyaWRSb3dFbmQgZ3JpZFJvd1NwYW4gZ3JpZFJvd1N0YXJ0IGdyaWRDb2x1bW4gZ3JpZENvbHVtbkVuZCBncmlkQ29sdW1uU3BhbiBncmlkQ29sdW1uU3RhcnQgZm9udFdlaWdodCBsaW5lQ2xhbXAgbGluZUhlaWdodCBvcGFjaXR5IG9yZGVyIG9ycGhhbnMgc2NhbGUgdGFiU2l6ZSB3aWRvd3MgekluZGV4IHpvb20gZmlsbE9wYWNpdHkgZmxvb2RPcGFjaXR5IHN0b3BPcGFjaXR5IHN0cm9rZURhc2hhcnJheSBzdHJva2VEYXNob2Zmc2V0IHN0cm9rZU1pdGVybGltaXQgc3Ryb2tlT3BhY2l0eSBzdHJva2VXaWR0aCBNb3pBbmltYXRpb25JdGVyYXRpb25Db3VudCBNb3pCb3hGbGV4IE1vekJveEZsZXhHcm91cCBNb3pMaW5lQ2xhbXAgbXNBbmltYXRpb25JdGVyYXRpb25Db3VudCBtc0ZsZXggbXNab29tIG1zRmxleEdyb3cgbXNGbGV4TmVnYXRpdmUgbXNGbGV4T3JkZXIgbXNGbGV4UG9zaXRpdmUgbXNGbGV4U2hyaW5rIG1zR3JpZENvbHVtbiBtc0dyaWRDb2x1bW5TcGFuIG1zR3JpZFJvdyBtc0dyaWRSb3dTcGFuIFdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IFdlYmtpdEJveEZsZXggV2ViS2l0Qm94RmxleEdyb3VwIFdlYmtpdEJveE9yZGluYWxHcm91cCBXZWJraXRDb2x1bW5Db3VudCBXZWJraXRDb2x1bW5zIFdlYmtpdEZsZXggV2Via2l0RmxleEdyb3cgV2Via2l0RmxleFBvc2l0aXZlIFdlYmtpdEZsZXhTaHJpbmsgV2Via2l0TGluZUNsYW1wXCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIE1BVEhfTkFNRVNQQUNFID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIsXG4gICAgICBTVkdfTkFNRVNQQUNFID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgYWxpYXNlcyA9IG5ldyBNYXAoW1xuICAgICAgICBbXCJhY2NlcHRDaGFyc2V0XCIsIFwiYWNjZXB0LWNoYXJzZXRcIl0sXG4gICAgICAgIFtcImh0bWxGb3JcIiwgXCJmb3JcIl0sXG4gICAgICAgIFtcImh0dHBFcXVpdlwiLCBcImh0dHAtZXF1aXZcIl0sXG4gICAgICAgIFtcImNyb3NzT3JpZ2luXCIsIFwiY3Jvc3NvcmlnaW5cIl0sXG4gICAgICAgIFtcImFjY2VudEhlaWdodFwiLCBcImFjY2VudC1oZWlnaHRcIl0sXG4gICAgICAgIFtcImFsaWdubWVudEJhc2VsaW5lXCIsIFwiYWxpZ25tZW50LWJhc2VsaW5lXCJdLFxuICAgICAgICBbXCJhcmFiaWNGb3JtXCIsIFwiYXJhYmljLWZvcm1cIl0sXG4gICAgICAgIFtcImJhc2VsaW5lU2hpZnRcIiwgXCJiYXNlbGluZS1zaGlmdFwiXSxcbiAgICAgICAgW1wiY2FwSGVpZ2h0XCIsIFwiY2FwLWhlaWdodFwiXSxcbiAgICAgICAgW1wiY2xpcFBhdGhcIiwgXCJjbGlwLXBhdGhcIl0sXG4gICAgICAgIFtcImNsaXBSdWxlXCIsIFwiY2xpcC1ydWxlXCJdLFxuICAgICAgICBbXCJjb2xvckludGVycG9sYXRpb25cIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uXCJdLFxuICAgICAgICBbXCJjb2xvckludGVycG9sYXRpb25GaWx0ZXJzXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCJdLFxuICAgICAgICBbXCJjb2xvclByb2ZpbGVcIiwgXCJjb2xvci1wcm9maWxlXCJdLFxuICAgICAgICBbXCJjb2xvclJlbmRlcmluZ1wiLCBcImNvbG9yLXJlbmRlcmluZ1wiXSxcbiAgICAgICAgW1wiZG9taW5hbnRCYXNlbGluZVwiLCBcImRvbWluYW50LWJhc2VsaW5lXCJdLFxuICAgICAgICBbXCJlbmFibGVCYWNrZ3JvdW5kXCIsIFwiZW5hYmxlLWJhY2tncm91bmRcIl0sXG4gICAgICAgIFtcImZpbGxPcGFjaXR5XCIsIFwiZmlsbC1vcGFjaXR5XCJdLFxuICAgICAgICBbXCJmaWxsUnVsZVwiLCBcImZpbGwtcnVsZVwiXSxcbiAgICAgICAgW1wiZmxvb2RDb2xvclwiLCBcImZsb29kLWNvbG9yXCJdLFxuICAgICAgICBbXCJmbG9vZE9wYWNpdHlcIiwgXCJmbG9vZC1vcGFjaXR5XCJdLFxuICAgICAgICBbXCJmb250RmFtaWx5XCIsIFwiZm9udC1mYW1pbHlcIl0sXG4gICAgICAgIFtcImZvbnRTaXplXCIsIFwiZm9udC1zaXplXCJdLFxuICAgICAgICBbXCJmb250U2l6ZUFkanVzdFwiLCBcImZvbnQtc2l6ZS1hZGp1c3RcIl0sXG4gICAgICAgIFtcImZvbnRTdHJldGNoXCIsIFwiZm9udC1zdHJldGNoXCJdLFxuICAgICAgICBbXCJmb250U3R5bGVcIiwgXCJmb250LXN0eWxlXCJdLFxuICAgICAgICBbXCJmb250VmFyaWFudFwiLCBcImZvbnQtdmFyaWFudFwiXSxcbiAgICAgICAgW1wiZm9udFdlaWdodFwiLCBcImZvbnQtd2VpZ2h0XCJdLFxuICAgICAgICBbXCJnbHlwaE5hbWVcIiwgXCJnbHlwaC1uYW1lXCJdLFxuICAgICAgICBbXCJnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbFwiLCBcImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWxcIl0sXG4gICAgICAgIFtcImdseXBoT3JpZW50YXRpb25WZXJ0aWNhbFwiLCBcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCJdLFxuICAgICAgICBbXCJob3JpekFkdlhcIiwgXCJob3Jpei1hZHYteFwiXSxcbiAgICAgICAgW1wiaG9yaXpPcmlnaW5YXCIsIFwiaG9yaXotb3JpZ2luLXhcIl0sXG4gICAgICAgIFtcImltYWdlUmVuZGVyaW5nXCIsIFwiaW1hZ2UtcmVuZGVyaW5nXCJdLFxuICAgICAgICBbXCJsZXR0ZXJTcGFjaW5nXCIsIFwibGV0dGVyLXNwYWNpbmdcIl0sXG4gICAgICAgIFtcImxpZ2h0aW5nQ29sb3JcIiwgXCJsaWdodGluZy1jb2xvclwiXSxcbiAgICAgICAgW1wibWFya2VyRW5kXCIsIFwibWFya2VyLWVuZFwiXSxcbiAgICAgICAgW1wibWFya2VyTWlkXCIsIFwibWFya2VyLW1pZFwiXSxcbiAgICAgICAgW1wibWFya2VyU3RhcnRcIiwgXCJtYXJrZXItc3RhcnRcIl0sXG4gICAgICAgIFtcIm92ZXJsaW5lUG9zaXRpb25cIiwgXCJvdmVybGluZS1wb3NpdGlvblwiXSxcbiAgICAgICAgW1wib3ZlcmxpbmVUaGlja25lc3NcIiwgXCJvdmVybGluZS10aGlja25lc3NcIl0sXG4gICAgICAgIFtcInBhaW50T3JkZXJcIiwgXCJwYWludC1vcmRlclwiXSxcbiAgICAgICAgW1wicGFub3NlLTFcIiwgXCJwYW5vc2UtMVwiXSxcbiAgICAgICAgW1wicG9pbnRlckV2ZW50c1wiLCBcInBvaW50ZXItZXZlbnRzXCJdLFxuICAgICAgICBbXCJyZW5kZXJpbmdJbnRlbnRcIiwgXCJyZW5kZXJpbmctaW50ZW50XCJdLFxuICAgICAgICBbXCJzaGFwZVJlbmRlcmluZ1wiLCBcInNoYXBlLXJlbmRlcmluZ1wiXSxcbiAgICAgICAgW1wic3RvcENvbG9yXCIsIFwic3RvcC1jb2xvclwiXSxcbiAgICAgICAgW1wic3RvcE9wYWNpdHlcIiwgXCJzdG9wLW9wYWNpdHlcIl0sXG4gICAgICAgIFtcInN0cmlrZXRocm91Z2hQb3NpdGlvblwiLCBcInN0cmlrZXRocm91Z2gtcG9zaXRpb25cIl0sXG4gICAgICAgIFtcInN0cmlrZXRocm91Z2hUaGlja25lc3NcIiwgXCJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzc1wiXSxcbiAgICAgICAgW1wic3Ryb2tlRGFzaGFycmF5XCIsIFwic3Ryb2tlLWRhc2hhcnJheVwiXSxcbiAgICAgICAgW1wic3Ryb2tlRGFzaG9mZnNldFwiLCBcInN0cm9rZS1kYXNob2Zmc2V0XCJdLFxuICAgICAgICBbXCJzdHJva2VMaW5lY2FwXCIsIFwic3Ryb2tlLWxpbmVjYXBcIl0sXG4gICAgICAgIFtcInN0cm9rZUxpbmVqb2luXCIsIFwic3Ryb2tlLWxpbmVqb2luXCJdLFxuICAgICAgICBbXCJzdHJva2VNaXRlcmxpbWl0XCIsIFwic3Ryb2tlLW1pdGVybGltaXRcIl0sXG4gICAgICAgIFtcInN0cm9rZU9wYWNpdHlcIiwgXCJzdHJva2Utb3BhY2l0eVwiXSxcbiAgICAgICAgW1wic3Ryb2tlV2lkdGhcIiwgXCJzdHJva2Utd2lkdGhcIl0sXG4gICAgICAgIFtcInRleHRBbmNob3JcIiwgXCJ0ZXh0LWFuY2hvclwiXSxcbiAgICAgICAgW1widGV4dERlY29yYXRpb25cIiwgXCJ0ZXh0LWRlY29yYXRpb25cIl0sXG4gICAgICAgIFtcInRleHRSZW5kZXJpbmdcIiwgXCJ0ZXh0LXJlbmRlcmluZ1wiXSxcbiAgICAgICAgW1widHJhbnNmb3JtT3JpZ2luXCIsIFwidHJhbnNmb3JtLW9yaWdpblwiXSxcbiAgICAgICAgW1widW5kZXJsaW5lUG9zaXRpb25cIiwgXCJ1bmRlcmxpbmUtcG9zaXRpb25cIl0sXG4gICAgICAgIFtcInVuZGVybGluZVRoaWNrbmVzc1wiLCBcInVuZGVybGluZS10aGlja25lc3NcIl0sXG4gICAgICAgIFtcInVuaWNvZGVCaWRpXCIsIFwidW5pY29kZS1iaWRpXCJdLFxuICAgICAgICBbXCJ1bmljb2RlUmFuZ2VcIiwgXCJ1bmljb2RlLXJhbmdlXCJdLFxuICAgICAgICBbXCJ1bml0c1BlckVtXCIsIFwidW5pdHMtcGVyLWVtXCJdLFxuICAgICAgICBbXCJ2QWxwaGFiZXRpY1wiLCBcInYtYWxwaGFiZXRpY1wiXSxcbiAgICAgICAgW1widkhhbmdpbmdcIiwgXCJ2LWhhbmdpbmdcIl0sXG4gICAgICAgIFtcInZJZGVvZ3JhcGhpY1wiLCBcInYtaWRlb2dyYXBoaWNcIl0sXG4gICAgICAgIFtcInZNYXRoZW1hdGljYWxcIiwgXCJ2LW1hdGhlbWF0aWNhbFwiXSxcbiAgICAgICAgW1widmVjdG9yRWZmZWN0XCIsIFwidmVjdG9yLWVmZmVjdFwiXSxcbiAgICAgICAgW1widmVydEFkdllcIiwgXCJ2ZXJ0LWFkdi15XCJdLFxuICAgICAgICBbXCJ2ZXJ0T3JpZ2luWFwiLCBcInZlcnQtb3JpZ2luLXhcIl0sXG4gICAgICAgIFtcInZlcnRPcmlnaW5ZXCIsIFwidmVydC1vcmlnaW4teVwiXSxcbiAgICAgICAgW1wid29yZFNwYWNpbmdcIiwgXCJ3b3JkLXNwYWNpbmdcIl0sXG4gICAgICAgIFtcIndyaXRpbmdNb2RlXCIsIFwid3JpdGluZy1tb2RlXCJdLFxuICAgICAgICBbXCJ4bWxuc1hsaW5rXCIsIFwieG1sbnM6eGxpbmtcIl0sXG4gICAgICAgIFtcInhIZWlnaHRcIiwgXCJ4LWhlaWdodFwiXVxuICAgICAgXSksXG4gICAgICBwb3NzaWJsZVN0YW5kYXJkTmFtZXMgPSB7XG4gICAgICAgIGFjY2VwdDogXCJhY2NlcHRcIixcbiAgICAgICAgYWNjZXB0Y2hhcnNldDogXCJhY2NlcHRDaGFyc2V0XCIsXG4gICAgICAgIFwiYWNjZXB0LWNoYXJzZXRcIjogXCJhY2NlcHRDaGFyc2V0XCIsXG4gICAgICAgIGFjY2Vzc2tleTogXCJhY2Nlc3NLZXlcIixcbiAgICAgICAgYWN0aW9uOiBcImFjdGlvblwiLFxuICAgICAgICBhbGxvd2Z1bGxzY3JlZW46IFwiYWxsb3dGdWxsU2NyZWVuXCIsXG4gICAgICAgIGFsdDogXCJhbHRcIixcbiAgICAgICAgYXM6IFwiYXNcIixcbiAgICAgICAgYXN5bmM6IFwiYXN5bmNcIixcbiAgICAgICAgYXV0b2NhcGl0YWxpemU6IFwiYXV0b0NhcGl0YWxpemVcIixcbiAgICAgICAgYXV0b2NvbXBsZXRlOiBcImF1dG9Db21wbGV0ZVwiLFxuICAgICAgICBhdXRvY29ycmVjdDogXCJhdXRvQ29ycmVjdFwiLFxuICAgICAgICBhdXRvZm9jdXM6IFwiYXV0b0ZvY3VzXCIsXG4gICAgICAgIGF1dG9wbGF5OiBcImF1dG9QbGF5XCIsXG4gICAgICAgIGF1dG9zYXZlOiBcImF1dG9TYXZlXCIsXG4gICAgICAgIGNhcHR1cmU6IFwiY2FwdHVyZVwiLFxuICAgICAgICBjZWxscGFkZGluZzogXCJjZWxsUGFkZGluZ1wiLFxuICAgICAgICBjZWxsc3BhY2luZzogXCJjZWxsU3BhY2luZ1wiLFxuICAgICAgICBjaGFsbGVuZ2U6IFwiY2hhbGxlbmdlXCIsXG4gICAgICAgIGNoYXJzZXQ6IFwiY2hhclNldFwiLFxuICAgICAgICBjaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICAgICAgY2hpbGRyZW46IFwiY2hpbGRyZW5cIixcbiAgICAgICAgY2l0ZTogXCJjaXRlXCIsXG4gICAgICAgIGNsYXNzOiBcImNsYXNzTmFtZVwiLFxuICAgICAgICBjbGFzc2lkOiBcImNsYXNzSURcIixcbiAgICAgICAgY2xhc3NuYW1lOiBcImNsYXNzTmFtZVwiLFxuICAgICAgICBjb2xzOiBcImNvbHNcIixcbiAgICAgICAgY29sc3BhbjogXCJjb2xTcGFuXCIsXG4gICAgICAgIGNvbnRlbnQ6IFwiY29udGVudFwiLFxuICAgICAgICBjb250ZW50ZWRpdGFibGU6IFwiY29udGVudEVkaXRhYmxlXCIsXG4gICAgICAgIGNvbnRleHRtZW51OiBcImNvbnRleHRNZW51XCIsXG4gICAgICAgIGNvbnRyb2xzOiBcImNvbnRyb2xzXCIsXG4gICAgICAgIGNvbnRyb2xzbGlzdDogXCJjb250cm9sc0xpc3RcIixcbiAgICAgICAgY29vcmRzOiBcImNvb3Jkc1wiLFxuICAgICAgICBjcm9zc29yaWdpbjogXCJjcm9zc09yaWdpblwiLFxuICAgICAgICBkYW5nZXJvdXNseXNldGlubmVyaHRtbDogXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiLFxuICAgICAgICBkYXRhOiBcImRhdGFcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiZGF0ZVRpbWVcIixcbiAgICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICAgIGRlZmF1bHRjaGVja2VkOiBcImRlZmF1bHRDaGVja2VkXCIsXG4gICAgICAgIGRlZmF1bHR2YWx1ZTogXCJkZWZhdWx0VmFsdWVcIixcbiAgICAgICAgZGVmZXI6IFwiZGVmZXJcIixcbiAgICAgICAgZGlyOiBcImRpclwiLFxuICAgICAgICBkaXNhYmxlZDogXCJkaXNhYmxlZFwiLFxuICAgICAgICBkaXNhYmxlcGljdHVyZWlucGljdHVyZTogXCJkaXNhYmxlUGljdHVyZUluUGljdHVyZVwiLFxuICAgICAgICBkaXNhYmxlcmVtb3RlcGxheWJhY2s6IFwiZGlzYWJsZVJlbW90ZVBsYXliYWNrXCIsXG4gICAgICAgIGRvd25sb2FkOiBcImRvd25sb2FkXCIsXG4gICAgICAgIGRyYWdnYWJsZTogXCJkcmFnZ2FibGVcIixcbiAgICAgICAgZW5jdHlwZTogXCJlbmNUeXBlXCIsXG4gICAgICAgIGVudGVya2V5aGludDogXCJlbnRlcktleUhpbnRcIixcbiAgICAgICAgZmV0Y2hwcmlvcml0eTogXCJmZXRjaFByaW9yaXR5XCIsXG4gICAgICAgIGZvcjogXCJodG1sRm9yXCIsXG4gICAgICAgIGZvcm06IFwiZm9ybVwiLFxuICAgICAgICBmb3JtbWV0aG9kOiBcImZvcm1NZXRob2RcIixcbiAgICAgICAgZm9ybWFjdGlvbjogXCJmb3JtQWN0aW9uXCIsXG4gICAgICAgIGZvcm1lbmN0eXBlOiBcImZvcm1FbmNUeXBlXCIsXG4gICAgICAgIGZvcm1ub3ZhbGlkYXRlOiBcImZvcm1Ob1ZhbGlkYXRlXCIsXG4gICAgICAgIGZvcm10YXJnZXQ6IFwiZm9ybVRhcmdldFwiLFxuICAgICAgICBmcmFtZWJvcmRlcjogXCJmcmFtZUJvcmRlclwiLFxuICAgICAgICBoZWFkZXJzOiBcImhlYWRlcnNcIixcbiAgICAgICAgaGVpZ2h0OiBcImhlaWdodFwiLFxuICAgICAgICBoaWRkZW46IFwiaGlkZGVuXCIsXG4gICAgICAgIGhpZ2g6IFwiaGlnaFwiLFxuICAgICAgICBocmVmOiBcImhyZWZcIixcbiAgICAgICAgaHJlZmxhbmc6IFwiaHJlZkxhbmdcIixcbiAgICAgICAgaHRtbGZvcjogXCJodG1sRm9yXCIsXG4gICAgICAgIGh0dHBlcXVpdjogXCJodHRwRXF1aXZcIixcbiAgICAgICAgXCJodHRwLWVxdWl2XCI6IFwiaHR0cEVxdWl2XCIsXG4gICAgICAgIGljb246IFwiaWNvblwiLFxuICAgICAgICBpZDogXCJpZFwiLFxuICAgICAgICBpbWFnZXNpemVzOiBcImltYWdlU2l6ZXNcIixcbiAgICAgICAgaW1hZ2VzcmNzZXQ6IFwiaW1hZ2VTcmNTZXRcIixcbiAgICAgICAgaW5lcnQ6IFwiaW5lcnRcIixcbiAgICAgICAgaW5uZXJodG1sOiBcImlubmVySFRNTFwiLFxuICAgICAgICBpbnB1dG1vZGU6IFwiaW5wdXRNb2RlXCIsXG4gICAgICAgIGludGVncml0eTogXCJpbnRlZ3JpdHlcIixcbiAgICAgICAgaXM6IFwiaXNcIixcbiAgICAgICAgaXRlbWlkOiBcIml0ZW1JRFwiLFxuICAgICAgICBpdGVtcHJvcDogXCJpdGVtUHJvcFwiLFxuICAgICAgICBpdGVtcmVmOiBcIml0ZW1SZWZcIixcbiAgICAgICAgaXRlbXNjb3BlOiBcIml0ZW1TY29wZVwiLFxuICAgICAgICBpdGVtdHlwZTogXCJpdGVtVHlwZVwiLFxuICAgICAgICBrZXlwYXJhbXM6IFwia2V5UGFyYW1zXCIsXG4gICAgICAgIGtleXR5cGU6IFwia2V5VHlwZVwiLFxuICAgICAgICBraW5kOiBcImtpbmRcIixcbiAgICAgICAgbGFiZWw6IFwibGFiZWxcIixcbiAgICAgICAgbGFuZzogXCJsYW5nXCIsXG4gICAgICAgIGxpc3Q6IFwibGlzdFwiLFxuICAgICAgICBsb29wOiBcImxvb3BcIixcbiAgICAgICAgbG93OiBcImxvd1wiLFxuICAgICAgICBtYW5pZmVzdDogXCJtYW5pZmVzdFwiLFxuICAgICAgICBtYXJnaW53aWR0aDogXCJtYXJnaW5XaWR0aFwiLFxuICAgICAgICBtYXJnaW5oZWlnaHQ6IFwibWFyZ2luSGVpZ2h0XCIsXG4gICAgICAgIG1heDogXCJtYXhcIixcbiAgICAgICAgbWF4bGVuZ3RoOiBcIm1heExlbmd0aFwiLFxuICAgICAgICBtZWRpYTogXCJtZWRpYVwiLFxuICAgICAgICBtZWRpYWdyb3VwOiBcIm1lZGlhR3JvdXBcIixcbiAgICAgICAgbWV0aG9kOiBcIm1ldGhvZFwiLFxuICAgICAgICBtaW46IFwibWluXCIsXG4gICAgICAgIG1pbmxlbmd0aDogXCJtaW5MZW5ndGhcIixcbiAgICAgICAgbXVsdGlwbGU6IFwibXVsdGlwbGVcIixcbiAgICAgICAgbXV0ZWQ6IFwibXV0ZWRcIixcbiAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgIG5vbW9kdWxlOiBcIm5vTW9kdWxlXCIsXG4gICAgICAgIG5vbmNlOiBcIm5vbmNlXCIsXG4gICAgICAgIG5vdmFsaWRhdGU6IFwibm9WYWxpZGF0ZVwiLFxuICAgICAgICBvcGVuOiBcIm9wZW5cIixcbiAgICAgICAgb3B0aW11bTogXCJvcHRpbXVtXCIsXG4gICAgICAgIHBhdHRlcm46IFwicGF0dGVyblwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJwbGFjZWhvbGRlclwiLFxuICAgICAgICBwbGF5c2lubGluZTogXCJwbGF5c0lubGluZVwiLFxuICAgICAgICBwb3N0ZXI6IFwicG9zdGVyXCIsXG4gICAgICAgIHByZWxvYWQ6IFwicHJlbG9hZFwiLFxuICAgICAgICBwcm9maWxlOiBcInByb2ZpbGVcIixcbiAgICAgICAgcmFkaW9ncm91cDogXCJyYWRpb0dyb3VwXCIsXG4gICAgICAgIHJlYWRvbmx5OiBcInJlYWRPbmx5XCIsXG4gICAgICAgIHJlZmVycmVycG9saWN5OiBcInJlZmVycmVyUG9saWN5XCIsXG4gICAgICAgIHJlbDogXCJyZWxcIixcbiAgICAgICAgcmVxdWlyZWQ6IFwicmVxdWlyZWRcIixcbiAgICAgICAgcmV2ZXJzZWQ6IFwicmV2ZXJzZWRcIixcbiAgICAgICAgcm9sZTogXCJyb2xlXCIsXG4gICAgICAgIHJvd3M6IFwicm93c1wiLFxuICAgICAgICByb3dzcGFuOiBcInJvd1NwYW5cIixcbiAgICAgICAgc2FuZGJveDogXCJzYW5kYm94XCIsXG4gICAgICAgIHNjb3BlOiBcInNjb3BlXCIsXG4gICAgICAgIHNjb3BlZDogXCJzY29wZWRcIixcbiAgICAgICAgc2Nyb2xsaW5nOiBcInNjcm9sbGluZ1wiLFxuICAgICAgICBzZWFtbGVzczogXCJzZWFtbGVzc1wiLFxuICAgICAgICBzZWxlY3RlZDogXCJzZWxlY3RlZFwiLFxuICAgICAgICBzaGFwZTogXCJzaGFwZVwiLFxuICAgICAgICBzaXplOiBcInNpemVcIixcbiAgICAgICAgc2l6ZXM6IFwic2l6ZXNcIixcbiAgICAgICAgc3BhbjogXCJzcGFuXCIsXG4gICAgICAgIHNwZWxsY2hlY2s6IFwic3BlbGxDaGVja1wiLFxuICAgICAgICBzcmM6IFwic3JjXCIsXG4gICAgICAgIHNyY2RvYzogXCJzcmNEb2NcIixcbiAgICAgICAgc3JjbGFuZzogXCJzcmNMYW5nXCIsXG4gICAgICAgIHNyY3NldDogXCJzcmNTZXRcIixcbiAgICAgICAgc3RhcnQ6IFwic3RhcnRcIixcbiAgICAgICAgc3RlcDogXCJzdGVwXCIsXG4gICAgICAgIHN0eWxlOiBcInN0eWxlXCIsXG4gICAgICAgIHN1bW1hcnk6IFwic3VtbWFyeVwiLFxuICAgICAgICB0YWJpbmRleDogXCJ0YWJJbmRleFwiLFxuICAgICAgICB0YXJnZXQ6IFwidGFyZ2V0XCIsXG4gICAgICAgIHRpdGxlOiBcInRpdGxlXCIsXG4gICAgICAgIHR5cGU6IFwidHlwZVwiLFxuICAgICAgICB1c2VtYXA6IFwidXNlTWFwXCIsXG4gICAgICAgIHZhbHVlOiBcInZhbHVlXCIsXG4gICAgICAgIHdpZHRoOiBcIndpZHRoXCIsXG4gICAgICAgIHdtb2RlOiBcIndtb2RlXCIsXG4gICAgICAgIHdyYXA6IFwid3JhcFwiLFxuICAgICAgICBhYm91dDogXCJhYm91dFwiLFxuICAgICAgICBhY2NlbnRoZWlnaHQ6IFwiYWNjZW50SGVpZ2h0XCIsXG4gICAgICAgIFwiYWNjZW50LWhlaWdodFwiOiBcImFjY2VudEhlaWdodFwiLFxuICAgICAgICBhY2N1bXVsYXRlOiBcImFjY3VtdWxhdGVcIixcbiAgICAgICAgYWRkaXRpdmU6IFwiYWRkaXRpdmVcIixcbiAgICAgICAgYWxpZ25tZW50YmFzZWxpbmU6IFwiYWxpZ25tZW50QmFzZWxpbmVcIixcbiAgICAgICAgXCJhbGlnbm1lbnQtYmFzZWxpbmVcIjogXCJhbGlnbm1lbnRCYXNlbGluZVwiLFxuICAgICAgICBhbGxvd3Jlb3JkZXI6IFwiYWxsb3dSZW9yZGVyXCIsXG4gICAgICAgIGFscGhhYmV0aWM6IFwiYWxwaGFiZXRpY1wiLFxuICAgICAgICBhbXBsaXR1ZGU6IFwiYW1wbGl0dWRlXCIsXG4gICAgICAgIGFyYWJpY2Zvcm06IFwiYXJhYmljRm9ybVwiLFxuICAgICAgICBcImFyYWJpYy1mb3JtXCI6IFwiYXJhYmljRm9ybVwiLFxuICAgICAgICBhc2NlbnQ6IFwiYXNjZW50XCIsXG4gICAgICAgIGF0dHJpYnV0ZW5hbWU6IFwiYXR0cmlidXRlTmFtZVwiLFxuICAgICAgICBhdHRyaWJ1dGV0eXBlOiBcImF0dHJpYnV0ZVR5cGVcIixcbiAgICAgICAgYXV0b3JldmVyc2U6IFwiYXV0b1JldmVyc2VcIixcbiAgICAgICAgYXppbXV0aDogXCJhemltdXRoXCIsXG4gICAgICAgIGJhc2VmcmVxdWVuY3k6IFwiYmFzZUZyZXF1ZW5jeVwiLFxuICAgICAgICBiYXNlbGluZXNoaWZ0OiBcImJhc2VsaW5lU2hpZnRcIixcbiAgICAgICAgXCJiYXNlbGluZS1zaGlmdFwiOiBcImJhc2VsaW5lU2hpZnRcIixcbiAgICAgICAgYmFzZXByb2ZpbGU6IFwiYmFzZVByb2ZpbGVcIixcbiAgICAgICAgYmJveDogXCJiYm94XCIsXG4gICAgICAgIGJlZ2luOiBcImJlZ2luXCIsXG4gICAgICAgIGJpYXM6IFwiYmlhc1wiLFxuICAgICAgICBieTogXCJieVwiLFxuICAgICAgICBjYWxjbW9kZTogXCJjYWxjTW9kZVwiLFxuICAgICAgICBjYXBoZWlnaHQ6IFwiY2FwSGVpZ2h0XCIsXG4gICAgICAgIFwiY2FwLWhlaWdodFwiOiBcImNhcEhlaWdodFwiLFxuICAgICAgICBjbGlwOiBcImNsaXBcIixcbiAgICAgICAgY2xpcHBhdGg6IFwiY2xpcFBhdGhcIixcbiAgICAgICAgXCJjbGlwLXBhdGhcIjogXCJjbGlwUGF0aFwiLFxuICAgICAgICBjbGlwcGF0aHVuaXRzOiBcImNsaXBQYXRoVW5pdHNcIixcbiAgICAgICAgY2xpcHJ1bGU6IFwiY2xpcFJ1bGVcIixcbiAgICAgICAgXCJjbGlwLXJ1bGVcIjogXCJjbGlwUnVsZVwiLFxuICAgICAgICBjb2xvcjogXCJjb2xvclwiLFxuICAgICAgICBjb2xvcmludGVycG9sYXRpb246IFwiY29sb3JJbnRlcnBvbGF0aW9uXCIsXG4gICAgICAgIFwiY29sb3ItaW50ZXJwb2xhdGlvblwiOiBcImNvbG9ySW50ZXJwb2xhdGlvblwiLFxuICAgICAgICBjb2xvcmludGVycG9sYXRpb25maWx0ZXJzOiBcImNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnNcIixcbiAgICAgICAgXCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnNcIjogXCJjb2xvckludGVycG9sYXRpb25GaWx0ZXJzXCIsXG4gICAgICAgIGNvbG9ycHJvZmlsZTogXCJjb2xvclByb2ZpbGVcIixcbiAgICAgICAgXCJjb2xvci1wcm9maWxlXCI6IFwiY29sb3JQcm9maWxlXCIsXG4gICAgICAgIGNvbG9ycmVuZGVyaW5nOiBcImNvbG9yUmVuZGVyaW5nXCIsXG4gICAgICAgIFwiY29sb3ItcmVuZGVyaW5nXCI6IFwiY29sb3JSZW5kZXJpbmdcIixcbiAgICAgICAgY29udGVudHNjcmlwdHR5cGU6IFwiY29udGVudFNjcmlwdFR5cGVcIixcbiAgICAgICAgY29udGVudHN0eWxldHlwZTogXCJjb250ZW50U3R5bGVUeXBlXCIsXG4gICAgICAgIGN1cnNvcjogXCJjdXJzb3JcIixcbiAgICAgICAgY3g6IFwiY3hcIixcbiAgICAgICAgY3k6IFwiY3lcIixcbiAgICAgICAgZDogXCJkXCIsXG4gICAgICAgIGRhdGF0eXBlOiBcImRhdGF0eXBlXCIsXG4gICAgICAgIGRlY2VsZXJhdGU6IFwiZGVjZWxlcmF0ZVwiLFxuICAgICAgICBkZXNjZW50OiBcImRlc2NlbnRcIixcbiAgICAgICAgZGlmZnVzZWNvbnN0YW50OiBcImRpZmZ1c2VDb25zdGFudFwiLFxuICAgICAgICBkaXJlY3Rpb246IFwiZGlyZWN0aW9uXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiZGlzcGxheVwiLFxuICAgICAgICBkaXZpc29yOiBcImRpdmlzb3JcIixcbiAgICAgICAgZG9taW5hbnRiYXNlbGluZTogXCJkb21pbmFudEJhc2VsaW5lXCIsXG4gICAgICAgIFwiZG9taW5hbnQtYmFzZWxpbmVcIjogXCJkb21pbmFudEJhc2VsaW5lXCIsXG4gICAgICAgIGR1cjogXCJkdXJcIixcbiAgICAgICAgZHg6IFwiZHhcIixcbiAgICAgICAgZHk6IFwiZHlcIixcbiAgICAgICAgZWRnZW1vZGU6IFwiZWRnZU1vZGVcIixcbiAgICAgICAgZWxldmF0aW9uOiBcImVsZXZhdGlvblwiLFxuICAgICAgICBlbmFibGViYWNrZ3JvdW5kOiBcImVuYWJsZUJhY2tncm91bmRcIixcbiAgICAgICAgXCJlbmFibGUtYmFja2dyb3VuZFwiOiBcImVuYWJsZUJhY2tncm91bmRcIixcbiAgICAgICAgZW5kOiBcImVuZFwiLFxuICAgICAgICBleHBvbmVudDogXCJleHBvbmVudFwiLFxuICAgICAgICBleHRlcm5hbHJlc291cmNlc3JlcXVpcmVkOiBcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIixcbiAgICAgICAgZmlsbDogXCJmaWxsXCIsXG4gICAgICAgIGZpbGxvcGFjaXR5OiBcImZpbGxPcGFjaXR5XCIsXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCI6IFwiZmlsbE9wYWNpdHlcIixcbiAgICAgICAgZmlsbHJ1bGU6IFwiZmlsbFJ1bGVcIixcbiAgICAgICAgXCJmaWxsLXJ1bGVcIjogXCJmaWxsUnVsZVwiLFxuICAgICAgICBmaWx0ZXI6IFwiZmlsdGVyXCIsXG4gICAgICAgIGZpbHRlcnJlczogXCJmaWx0ZXJSZXNcIixcbiAgICAgICAgZmlsdGVydW5pdHM6IFwiZmlsdGVyVW5pdHNcIixcbiAgICAgICAgZmxvb2RvcGFjaXR5OiBcImZsb29kT3BhY2l0eVwiLFxuICAgICAgICBcImZsb29kLW9wYWNpdHlcIjogXCJmbG9vZE9wYWNpdHlcIixcbiAgICAgICAgZmxvb2Rjb2xvcjogXCJmbG9vZENvbG9yXCIsXG4gICAgICAgIFwiZmxvb2QtY29sb3JcIjogXCJmbG9vZENvbG9yXCIsXG4gICAgICAgIGZvY3VzYWJsZTogXCJmb2N1c2FibGVcIixcbiAgICAgICAgZm9udGZhbWlseTogXCJmb250RmFtaWx5XCIsXG4gICAgICAgIFwiZm9udC1mYW1pbHlcIjogXCJmb250RmFtaWx5XCIsXG4gICAgICAgIGZvbnRzaXplOiBcImZvbnRTaXplXCIsXG4gICAgICAgIFwiZm9udC1zaXplXCI6IFwiZm9udFNpemVcIixcbiAgICAgICAgZm9udHNpemVhZGp1c3Q6IFwiZm9udFNpemVBZGp1c3RcIixcbiAgICAgICAgXCJmb250LXNpemUtYWRqdXN0XCI6IFwiZm9udFNpemVBZGp1c3RcIixcbiAgICAgICAgZm9udHN0cmV0Y2g6IFwiZm9udFN0cmV0Y2hcIixcbiAgICAgICAgXCJmb250LXN0cmV0Y2hcIjogXCJmb250U3RyZXRjaFwiLFxuICAgICAgICBmb250c3R5bGU6IFwiZm9udFN0eWxlXCIsXG4gICAgICAgIFwiZm9udC1zdHlsZVwiOiBcImZvbnRTdHlsZVwiLFxuICAgICAgICBmb250dmFyaWFudDogXCJmb250VmFyaWFudFwiLFxuICAgICAgICBcImZvbnQtdmFyaWFudFwiOiBcImZvbnRWYXJpYW50XCIsXG4gICAgICAgIGZvbnR3ZWlnaHQ6IFwiZm9udFdlaWdodFwiLFxuICAgICAgICBcImZvbnQtd2VpZ2h0XCI6IFwiZm9udFdlaWdodFwiLFxuICAgICAgICBmb3JtYXQ6IFwiZm9ybWF0XCIsXG4gICAgICAgIGZyb206IFwiZnJvbVwiLFxuICAgICAgICBmeDogXCJmeFwiLFxuICAgICAgICBmeTogXCJmeVwiLFxuICAgICAgICBnMTogXCJnMVwiLFxuICAgICAgICBnMjogXCJnMlwiLFxuICAgICAgICBnbHlwaG5hbWU6IFwiZ2x5cGhOYW1lXCIsXG4gICAgICAgIFwiZ2x5cGgtbmFtZVwiOiBcImdseXBoTmFtZVwiLFxuICAgICAgICBnbHlwaG9yaWVudGF0aW9uaG9yaXpvbnRhbDogXCJnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbFwiLFxuICAgICAgICBcImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWxcIjogXCJnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbFwiLFxuICAgICAgICBnbHlwaG9yaWVudGF0aW9udmVydGljYWw6IFwiZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsXCIsXG4gICAgICAgIFwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWxcIjogXCJnbHlwaE9yaWVudGF0aW9uVmVydGljYWxcIixcbiAgICAgICAgZ2x5cGhyZWY6IFwiZ2x5cGhSZWZcIixcbiAgICAgICAgZ3JhZGllbnR0cmFuc2Zvcm06IFwiZ3JhZGllbnRUcmFuc2Zvcm1cIixcbiAgICAgICAgZ3JhZGllbnR1bml0czogXCJncmFkaWVudFVuaXRzXCIsXG4gICAgICAgIGhhbmdpbmc6IFwiaGFuZ2luZ1wiLFxuICAgICAgICBob3JpemFkdng6IFwiaG9yaXpBZHZYXCIsXG4gICAgICAgIFwiaG9yaXotYWR2LXhcIjogXCJob3JpekFkdlhcIixcbiAgICAgICAgaG9yaXpvcmlnaW54OiBcImhvcml6T3JpZ2luWFwiLFxuICAgICAgICBcImhvcml6LW9yaWdpbi14XCI6IFwiaG9yaXpPcmlnaW5YXCIsXG4gICAgICAgIGlkZW9ncmFwaGljOiBcImlkZW9ncmFwaGljXCIsXG4gICAgICAgIGltYWdlcmVuZGVyaW5nOiBcImltYWdlUmVuZGVyaW5nXCIsXG4gICAgICAgIFwiaW1hZ2UtcmVuZGVyaW5nXCI6IFwiaW1hZ2VSZW5kZXJpbmdcIixcbiAgICAgICAgaW4yOiBcImluMlwiLFxuICAgICAgICBpbjogXCJpblwiLFxuICAgICAgICBpbmxpc3Q6IFwiaW5saXN0XCIsXG4gICAgICAgIGludGVyY2VwdDogXCJpbnRlcmNlcHRcIixcbiAgICAgICAgazE6IFwiazFcIixcbiAgICAgICAgazI6IFwiazJcIixcbiAgICAgICAgazM6IFwiazNcIixcbiAgICAgICAgazQ6IFwiazRcIixcbiAgICAgICAgazogXCJrXCIsXG4gICAgICAgIGtlcm5lbG1hdHJpeDogXCJrZXJuZWxNYXRyaXhcIixcbiAgICAgICAga2VybmVsdW5pdGxlbmd0aDogXCJrZXJuZWxVbml0TGVuZ3RoXCIsXG4gICAgICAgIGtlcm5pbmc6IFwia2VybmluZ1wiLFxuICAgICAgICBrZXlwb2ludHM6IFwia2V5UG9pbnRzXCIsXG4gICAgICAgIGtleXNwbGluZXM6IFwia2V5U3BsaW5lc1wiLFxuICAgICAgICBrZXl0aW1lczogXCJrZXlUaW1lc1wiLFxuICAgICAgICBsZW5ndGhhZGp1c3Q6IFwibGVuZ3RoQWRqdXN0XCIsXG4gICAgICAgIGxldHRlcnNwYWNpbmc6IFwibGV0dGVyU3BhY2luZ1wiLFxuICAgICAgICBcImxldHRlci1zcGFjaW5nXCI6IFwibGV0dGVyU3BhY2luZ1wiLFxuICAgICAgICBsaWdodGluZ2NvbG9yOiBcImxpZ2h0aW5nQ29sb3JcIixcbiAgICAgICAgXCJsaWdodGluZy1jb2xvclwiOiBcImxpZ2h0aW5nQ29sb3JcIixcbiAgICAgICAgbGltaXRpbmdjb25lYW5nbGU6IFwibGltaXRpbmdDb25lQW5nbGVcIixcbiAgICAgICAgbG9jYWw6IFwibG9jYWxcIixcbiAgICAgICAgbWFya2VyZW5kOiBcIm1hcmtlckVuZFwiLFxuICAgICAgICBcIm1hcmtlci1lbmRcIjogXCJtYXJrZXJFbmRcIixcbiAgICAgICAgbWFya2VyaGVpZ2h0OiBcIm1hcmtlckhlaWdodFwiLFxuICAgICAgICBtYXJrZXJtaWQ6IFwibWFya2VyTWlkXCIsXG4gICAgICAgIFwibWFya2VyLW1pZFwiOiBcIm1hcmtlck1pZFwiLFxuICAgICAgICBtYXJrZXJzdGFydDogXCJtYXJrZXJTdGFydFwiLFxuICAgICAgICBcIm1hcmtlci1zdGFydFwiOiBcIm1hcmtlclN0YXJ0XCIsXG4gICAgICAgIG1hcmtlcnVuaXRzOiBcIm1hcmtlclVuaXRzXCIsXG4gICAgICAgIG1hcmtlcndpZHRoOiBcIm1hcmtlcldpZHRoXCIsXG4gICAgICAgIG1hc2s6IFwibWFza1wiLFxuICAgICAgICBtYXNrY29udGVudHVuaXRzOiBcIm1hc2tDb250ZW50VW5pdHNcIixcbiAgICAgICAgbWFza3VuaXRzOiBcIm1hc2tVbml0c1wiLFxuICAgICAgICBtYXRoZW1hdGljYWw6IFwibWF0aGVtYXRpY2FsXCIsXG4gICAgICAgIG1vZGU6IFwibW9kZVwiLFxuICAgICAgICBudW1vY3RhdmVzOiBcIm51bU9jdGF2ZXNcIixcbiAgICAgICAgb2Zmc2V0OiBcIm9mZnNldFwiLFxuICAgICAgICBvcGFjaXR5OiBcIm9wYWNpdHlcIixcbiAgICAgICAgb3BlcmF0b3I6IFwib3BlcmF0b3JcIixcbiAgICAgICAgb3JkZXI6IFwib3JkZXJcIixcbiAgICAgICAgb3JpZW50OiBcIm9yaWVudFwiLFxuICAgICAgICBvcmllbnRhdGlvbjogXCJvcmllbnRhdGlvblwiLFxuICAgICAgICBvcmlnaW46IFwib3JpZ2luXCIsXG4gICAgICAgIG92ZXJmbG93OiBcIm92ZXJmbG93XCIsXG4gICAgICAgIG92ZXJsaW5lcG9zaXRpb246IFwib3ZlcmxpbmVQb3NpdGlvblwiLFxuICAgICAgICBcIm92ZXJsaW5lLXBvc2l0aW9uXCI6IFwib3ZlcmxpbmVQb3NpdGlvblwiLFxuICAgICAgICBvdmVybGluZXRoaWNrbmVzczogXCJvdmVybGluZVRoaWNrbmVzc1wiLFxuICAgICAgICBcIm92ZXJsaW5lLXRoaWNrbmVzc1wiOiBcIm92ZXJsaW5lVGhpY2tuZXNzXCIsXG4gICAgICAgIHBhaW50b3JkZXI6IFwicGFpbnRPcmRlclwiLFxuICAgICAgICBcInBhaW50LW9yZGVyXCI6IFwicGFpbnRPcmRlclwiLFxuICAgICAgICBwYW5vc2UxOiBcInBhbm9zZTFcIixcbiAgICAgICAgXCJwYW5vc2UtMVwiOiBcInBhbm9zZTFcIixcbiAgICAgICAgcGF0aGxlbmd0aDogXCJwYXRoTGVuZ3RoXCIsXG4gICAgICAgIHBhdHRlcm5jb250ZW50dW5pdHM6IFwicGF0dGVybkNvbnRlbnRVbml0c1wiLFxuICAgICAgICBwYXR0ZXJudHJhbnNmb3JtOiBcInBhdHRlcm5UcmFuc2Zvcm1cIixcbiAgICAgICAgcGF0dGVybnVuaXRzOiBcInBhdHRlcm5Vbml0c1wiLFxuICAgICAgICBwb2ludGVyZXZlbnRzOiBcInBvaW50ZXJFdmVudHNcIixcbiAgICAgICAgXCJwb2ludGVyLWV2ZW50c1wiOiBcInBvaW50ZXJFdmVudHNcIixcbiAgICAgICAgcG9pbnRzOiBcInBvaW50c1wiLFxuICAgICAgICBwb2ludHNhdHg6IFwicG9pbnRzQXRYXCIsXG4gICAgICAgIHBvaW50c2F0eTogXCJwb2ludHNBdFlcIixcbiAgICAgICAgcG9pbnRzYXR6OiBcInBvaW50c0F0WlwiLFxuICAgICAgICBwb3BvdmVyOiBcInBvcG92ZXJcIixcbiAgICAgICAgcG9wb3ZlcnRhcmdldDogXCJwb3BvdmVyVGFyZ2V0XCIsXG4gICAgICAgIHBvcG92ZXJ0YXJnZXRhY3Rpb246IFwicG9wb3ZlclRhcmdldEFjdGlvblwiLFxuICAgICAgICBwcmVmaXg6IFwicHJlZml4XCIsXG4gICAgICAgIHByZXNlcnZlYWxwaGE6IFwicHJlc2VydmVBbHBoYVwiLFxuICAgICAgICBwcmVzZXJ2ZWFzcGVjdHJhdGlvOiBcInByZXNlcnZlQXNwZWN0UmF0aW9cIixcbiAgICAgICAgcHJpbWl0aXZldW5pdHM6IFwicHJpbWl0aXZlVW5pdHNcIixcbiAgICAgICAgcHJvcGVydHk6IFwicHJvcGVydHlcIixcbiAgICAgICAgcjogXCJyXCIsXG4gICAgICAgIHJhZGl1czogXCJyYWRpdXNcIixcbiAgICAgICAgcmVmeDogXCJyZWZYXCIsXG4gICAgICAgIHJlZnk6IFwicmVmWVwiLFxuICAgICAgICByZW5kZXJpbmdpbnRlbnQ6IFwicmVuZGVyaW5nSW50ZW50XCIsXG4gICAgICAgIFwicmVuZGVyaW5nLWludGVudFwiOiBcInJlbmRlcmluZ0ludGVudFwiLFxuICAgICAgICByZXBlYXRjb3VudDogXCJyZXBlYXRDb3VudFwiLFxuICAgICAgICByZXBlYXRkdXI6IFwicmVwZWF0RHVyXCIsXG4gICAgICAgIHJlcXVpcmVkZXh0ZW5zaW9uczogXCJyZXF1aXJlZEV4dGVuc2lvbnNcIixcbiAgICAgICAgcmVxdWlyZWRmZWF0dXJlczogXCJyZXF1aXJlZEZlYXR1cmVzXCIsXG4gICAgICAgIHJlc291cmNlOiBcInJlc291cmNlXCIsXG4gICAgICAgIHJlc3RhcnQ6IFwicmVzdGFydFwiLFxuICAgICAgICByZXN1bHQ6IFwicmVzdWx0XCIsXG4gICAgICAgIHJlc3VsdHM6IFwicmVzdWx0c1wiLFxuICAgICAgICByb3RhdGU6IFwicm90YXRlXCIsXG4gICAgICAgIHJ4OiBcInJ4XCIsXG4gICAgICAgIHJ5OiBcInJ5XCIsXG4gICAgICAgIHNjYWxlOiBcInNjYWxlXCIsXG4gICAgICAgIHNlY3VyaXR5OiBcInNlY3VyaXR5XCIsXG4gICAgICAgIHNlZWQ6IFwic2VlZFwiLFxuICAgICAgICBzaGFwZXJlbmRlcmluZzogXCJzaGFwZVJlbmRlcmluZ1wiLFxuICAgICAgICBcInNoYXBlLXJlbmRlcmluZ1wiOiBcInNoYXBlUmVuZGVyaW5nXCIsXG4gICAgICAgIHNsb3BlOiBcInNsb3BlXCIsXG4gICAgICAgIHNwYWNpbmc6IFwic3BhY2luZ1wiLFxuICAgICAgICBzcGVjdWxhcmNvbnN0YW50OiBcInNwZWN1bGFyQ29uc3RhbnRcIixcbiAgICAgICAgc3BlY3VsYXJleHBvbmVudDogXCJzcGVjdWxhckV4cG9uZW50XCIsXG4gICAgICAgIHNwZWVkOiBcInNwZWVkXCIsXG4gICAgICAgIHNwcmVhZG1ldGhvZDogXCJzcHJlYWRNZXRob2RcIixcbiAgICAgICAgc3RhcnRvZmZzZXQ6IFwic3RhcnRPZmZzZXRcIixcbiAgICAgICAgc3RkZGV2aWF0aW9uOiBcInN0ZERldmlhdGlvblwiLFxuICAgICAgICBzdGVtaDogXCJzdGVtaFwiLFxuICAgICAgICBzdGVtdjogXCJzdGVtdlwiLFxuICAgICAgICBzdGl0Y2h0aWxlczogXCJzdGl0Y2hUaWxlc1wiLFxuICAgICAgICBzdG9wY29sb3I6IFwic3RvcENvbG9yXCIsXG4gICAgICAgIFwic3RvcC1jb2xvclwiOiBcInN0b3BDb2xvclwiLFxuICAgICAgICBzdG9wb3BhY2l0eTogXCJzdG9wT3BhY2l0eVwiLFxuICAgICAgICBcInN0b3Atb3BhY2l0eVwiOiBcInN0b3BPcGFjaXR5XCIsXG4gICAgICAgIHN0cmlrZXRocm91Z2hwb3NpdGlvbjogXCJzdHJpa2V0aHJvdWdoUG9zaXRpb25cIixcbiAgICAgICAgXCJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uXCI6IFwic3RyaWtldGhyb3VnaFBvc2l0aW9uXCIsXG4gICAgICAgIHN0cmlrZXRocm91Z2h0aGlja25lc3M6IFwic3RyaWtldGhyb3VnaFRoaWNrbmVzc1wiLFxuICAgICAgICBcInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzXCI6IFwic3RyaWtldGhyb3VnaFRoaWNrbmVzc1wiLFxuICAgICAgICBzdHJpbmc6IFwic3RyaW5nXCIsXG4gICAgICAgIHN0cm9rZTogXCJzdHJva2VcIixcbiAgICAgICAgc3Ryb2tlZGFzaGFycmF5OiBcInN0cm9rZURhc2hhcnJheVwiLFxuICAgICAgICBcInN0cm9rZS1kYXNoYXJyYXlcIjogXCJzdHJva2VEYXNoYXJyYXlcIixcbiAgICAgICAgc3Ryb2tlZGFzaG9mZnNldDogXCJzdHJva2VEYXNob2Zmc2V0XCIsXG4gICAgICAgIFwic3Ryb2tlLWRhc2hvZmZzZXRcIjogXCJzdHJva2VEYXNob2Zmc2V0XCIsXG4gICAgICAgIHN0cm9rZWxpbmVjYXA6IFwic3Ryb2tlTGluZWNhcFwiLFxuICAgICAgICBcInN0cm9rZS1saW5lY2FwXCI6IFwic3Ryb2tlTGluZWNhcFwiLFxuICAgICAgICBzdHJva2VsaW5lam9pbjogXCJzdHJva2VMaW5lam9pblwiLFxuICAgICAgICBcInN0cm9rZS1saW5lam9pblwiOiBcInN0cm9rZUxpbmVqb2luXCIsXG4gICAgICAgIHN0cm9rZW1pdGVybGltaXQ6IFwic3Ryb2tlTWl0ZXJsaW1pdFwiLFxuICAgICAgICBcInN0cm9rZS1taXRlcmxpbWl0XCI6IFwic3Ryb2tlTWl0ZXJsaW1pdFwiLFxuICAgICAgICBzdHJva2V3aWR0aDogXCJzdHJva2VXaWR0aFwiLFxuICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcInN0cm9rZVdpZHRoXCIsXG4gICAgICAgIHN0cm9rZW9wYWNpdHk6IFwic3Ryb2tlT3BhY2l0eVwiLFxuICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCI6IFwic3Ryb2tlT3BhY2l0eVwiLFxuICAgICAgICBzdXBwcmVzc2NvbnRlbnRlZGl0YWJsZXdhcm5pbmc6IFwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIsXG4gICAgICAgIHN1cHByZXNzaHlkcmF0aW9ud2FybmluZzogXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIixcbiAgICAgICAgc3VyZmFjZXNjYWxlOiBcInN1cmZhY2VTY2FsZVwiLFxuICAgICAgICBzeXN0ZW1sYW5ndWFnZTogXCJzeXN0ZW1MYW5ndWFnZVwiLFxuICAgICAgICB0YWJsZXZhbHVlczogXCJ0YWJsZVZhbHVlc1wiLFxuICAgICAgICB0YXJnZXR4OiBcInRhcmdldFhcIixcbiAgICAgICAgdGFyZ2V0eTogXCJ0YXJnZXRZXCIsXG4gICAgICAgIHRleHRhbmNob3I6IFwidGV4dEFuY2hvclwiLFxuICAgICAgICBcInRleHQtYW5jaG9yXCI6IFwidGV4dEFuY2hvclwiLFxuICAgICAgICB0ZXh0ZGVjb3JhdGlvbjogXCJ0ZXh0RGVjb3JhdGlvblwiLFxuICAgICAgICBcInRleHQtZGVjb3JhdGlvblwiOiBcInRleHREZWNvcmF0aW9uXCIsXG4gICAgICAgIHRleHRsZW5ndGg6IFwidGV4dExlbmd0aFwiLFxuICAgICAgICB0ZXh0cmVuZGVyaW5nOiBcInRleHRSZW5kZXJpbmdcIixcbiAgICAgICAgXCJ0ZXh0LXJlbmRlcmluZ1wiOiBcInRleHRSZW5kZXJpbmdcIixcbiAgICAgICAgdG86IFwidG9cIixcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zZm9ybVwiLFxuICAgICAgICB0cmFuc2Zvcm1vcmlnaW46IFwidHJhbnNmb3JtT3JpZ2luXCIsXG4gICAgICAgIFwidHJhbnNmb3JtLW9yaWdpblwiOiBcInRyYW5zZm9ybU9yaWdpblwiLFxuICAgICAgICB0eXBlb2Y6IFwidHlwZW9mXCIsXG4gICAgICAgIHUxOiBcInUxXCIsXG4gICAgICAgIHUyOiBcInUyXCIsXG4gICAgICAgIHVuZGVybGluZXBvc2l0aW9uOiBcInVuZGVybGluZVBvc2l0aW9uXCIsXG4gICAgICAgIFwidW5kZXJsaW5lLXBvc2l0aW9uXCI6IFwidW5kZXJsaW5lUG9zaXRpb25cIixcbiAgICAgICAgdW5kZXJsaW5ldGhpY2tuZXNzOiBcInVuZGVybGluZVRoaWNrbmVzc1wiLFxuICAgICAgICBcInVuZGVybGluZS10aGlja25lc3NcIjogXCJ1bmRlcmxpbmVUaGlja25lc3NcIixcbiAgICAgICAgdW5pY29kZTogXCJ1bmljb2RlXCIsXG4gICAgICAgIHVuaWNvZGViaWRpOiBcInVuaWNvZGVCaWRpXCIsXG4gICAgICAgIFwidW5pY29kZS1iaWRpXCI6IFwidW5pY29kZUJpZGlcIixcbiAgICAgICAgdW5pY29kZXJhbmdlOiBcInVuaWNvZGVSYW5nZVwiLFxuICAgICAgICBcInVuaWNvZGUtcmFuZ2VcIjogXCJ1bmljb2RlUmFuZ2VcIixcbiAgICAgICAgdW5pdHNwZXJlbTogXCJ1bml0c1BlckVtXCIsXG4gICAgICAgIFwidW5pdHMtcGVyLWVtXCI6IFwidW5pdHNQZXJFbVwiLFxuICAgICAgICB1bnNlbGVjdGFibGU6IFwidW5zZWxlY3RhYmxlXCIsXG4gICAgICAgIHZhbHBoYWJldGljOiBcInZBbHBoYWJldGljXCIsXG4gICAgICAgIFwidi1hbHBoYWJldGljXCI6IFwidkFscGhhYmV0aWNcIixcbiAgICAgICAgdmFsdWVzOiBcInZhbHVlc1wiLFxuICAgICAgICB2ZWN0b3JlZmZlY3Q6IFwidmVjdG9yRWZmZWN0XCIsXG4gICAgICAgIFwidmVjdG9yLWVmZmVjdFwiOiBcInZlY3RvckVmZmVjdFwiLFxuICAgICAgICB2ZXJzaW9uOiBcInZlcnNpb25cIixcbiAgICAgICAgdmVydGFkdnk6IFwidmVydEFkdllcIixcbiAgICAgICAgXCJ2ZXJ0LWFkdi15XCI6IFwidmVydEFkdllcIixcbiAgICAgICAgdmVydG9yaWdpbng6IFwidmVydE9yaWdpblhcIixcbiAgICAgICAgXCJ2ZXJ0LW9yaWdpbi14XCI6IFwidmVydE9yaWdpblhcIixcbiAgICAgICAgdmVydG9yaWdpbnk6IFwidmVydE9yaWdpbllcIixcbiAgICAgICAgXCJ2ZXJ0LW9yaWdpbi15XCI6IFwidmVydE9yaWdpbllcIixcbiAgICAgICAgdmhhbmdpbmc6IFwidkhhbmdpbmdcIixcbiAgICAgICAgXCJ2LWhhbmdpbmdcIjogXCJ2SGFuZ2luZ1wiLFxuICAgICAgICB2aWRlb2dyYXBoaWM6IFwidklkZW9ncmFwaGljXCIsXG4gICAgICAgIFwidi1pZGVvZ3JhcGhpY1wiOiBcInZJZGVvZ3JhcGhpY1wiLFxuICAgICAgICB2aWV3Ym94OiBcInZpZXdCb3hcIixcbiAgICAgICAgdmlld3RhcmdldDogXCJ2aWV3VGFyZ2V0XCIsXG4gICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJpbGl0eVwiLFxuICAgICAgICB2bWF0aGVtYXRpY2FsOiBcInZNYXRoZW1hdGljYWxcIixcbiAgICAgICAgXCJ2LW1hdGhlbWF0aWNhbFwiOiBcInZNYXRoZW1hdGljYWxcIixcbiAgICAgICAgdm9jYWI6IFwidm9jYWJcIixcbiAgICAgICAgd2lkdGhzOiBcIndpZHRoc1wiLFxuICAgICAgICB3b3Jkc3BhY2luZzogXCJ3b3JkU3BhY2luZ1wiLFxuICAgICAgICBcIndvcmQtc3BhY2luZ1wiOiBcIndvcmRTcGFjaW5nXCIsXG4gICAgICAgIHdyaXRpbmdtb2RlOiBcIndyaXRpbmdNb2RlXCIsXG4gICAgICAgIFwid3JpdGluZy1tb2RlXCI6IFwid3JpdGluZ01vZGVcIixcbiAgICAgICAgeDE6IFwieDFcIixcbiAgICAgICAgeDI6IFwieDJcIixcbiAgICAgICAgeDogXCJ4XCIsXG4gICAgICAgIHhjaGFubmVsc2VsZWN0b3I6IFwieENoYW5uZWxTZWxlY3RvclwiLFxuICAgICAgICB4aGVpZ2h0OiBcInhIZWlnaHRcIixcbiAgICAgICAgXCJ4LWhlaWdodFwiOiBcInhIZWlnaHRcIixcbiAgICAgICAgeGxpbmthY3R1YXRlOiBcInhsaW5rQWN0dWF0ZVwiLFxuICAgICAgICBcInhsaW5rOmFjdHVhdGVcIjogXCJ4bGlua0FjdHVhdGVcIixcbiAgICAgICAgeGxpbmthcmNyb2xlOiBcInhsaW5rQXJjcm9sZVwiLFxuICAgICAgICBcInhsaW5rOmFyY3JvbGVcIjogXCJ4bGlua0FyY3JvbGVcIixcbiAgICAgICAgeGxpbmtocmVmOiBcInhsaW5rSHJlZlwiLFxuICAgICAgICBcInhsaW5rOmhyZWZcIjogXCJ4bGlua0hyZWZcIixcbiAgICAgICAgeGxpbmtyb2xlOiBcInhsaW5rUm9sZVwiLFxuICAgICAgICBcInhsaW5rOnJvbGVcIjogXCJ4bGlua1JvbGVcIixcbiAgICAgICAgeGxpbmtzaG93OiBcInhsaW5rU2hvd1wiLFxuICAgICAgICBcInhsaW5rOnNob3dcIjogXCJ4bGlua1Nob3dcIixcbiAgICAgICAgeGxpbmt0aXRsZTogXCJ4bGlua1RpdGxlXCIsXG4gICAgICAgIFwieGxpbms6dGl0bGVcIjogXCJ4bGlua1RpdGxlXCIsXG4gICAgICAgIHhsaW5rdHlwZTogXCJ4bGlua1R5cGVcIixcbiAgICAgICAgXCJ4bGluazp0eXBlXCI6IFwieGxpbmtUeXBlXCIsXG4gICAgICAgIHhtbGJhc2U6IFwieG1sQmFzZVwiLFxuICAgICAgICBcInhtbDpiYXNlXCI6IFwieG1sQmFzZVwiLFxuICAgICAgICB4bWxsYW5nOiBcInhtbExhbmdcIixcbiAgICAgICAgXCJ4bWw6bGFuZ1wiOiBcInhtbExhbmdcIixcbiAgICAgICAgeG1sbnM6IFwieG1sbnNcIixcbiAgICAgICAgXCJ4bWw6c3BhY2VcIjogXCJ4bWxTcGFjZVwiLFxuICAgICAgICB4bWxuc3hsaW5rOiBcInhtbG5zWGxpbmtcIixcbiAgICAgICAgXCJ4bWxuczp4bGlua1wiOiBcInhtbG5zWGxpbmtcIixcbiAgICAgICAgeG1sc3BhY2U6IFwieG1sU3BhY2VcIixcbiAgICAgICAgeTE6IFwieTFcIixcbiAgICAgICAgeTI6IFwieTJcIixcbiAgICAgICAgeTogXCJ5XCIsXG4gICAgICAgIHljaGFubmVsc2VsZWN0b3I6IFwieUNoYW5uZWxTZWxlY3RvclwiLFxuICAgICAgICB6OiBcInpcIixcbiAgICAgICAgem9vbWFuZHBhbjogXCJ6b29tQW5kUGFuXCJcbiAgICAgIH0sXG4gICAgICBhcmlhUHJvcGVydGllcyA9IHtcbiAgICAgICAgXCJhcmlhLWN1cnJlbnRcIjogMCxcbiAgICAgICAgXCJhcmlhLWRlc2NyaXB0aW9uXCI6IDAsXG4gICAgICAgIFwiYXJpYS1kZXRhaWxzXCI6IDAsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiAwLFxuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IDAsXG4gICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1rZXlzaG9ydGN1dHNcIjogMCxcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IDAsXG4gICAgICAgIFwiYXJpYS1yb2xlZGVzY3JpcHRpb25cIjogMCxcbiAgICAgICAgXCJhcmlhLWF1dG9jb21wbGV0ZVwiOiAwLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiAwLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogMCxcbiAgICAgICAgXCJhcmlhLWhhc3BvcHVwXCI6IDAsXG4gICAgICAgIFwiYXJpYS1sZXZlbFwiOiAwLFxuICAgICAgICBcImFyaWEtbW9kYWxcIjogMCxcbiAgICAgICAgXCJhcmlhLW11bHRpbGluZVwiOiAwLFxuICAgICAgICBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCI6IDAsXG4gICAgICAgIFwiYXJpYS1vcmllbnRhdGlvblwiOiAwLFxuICAgICAgICBcImFyaWEtcGxhY2Vob2xkZXJcIjogMCxcbiAgICAgICAgXCJhcmlhLXByZXNzZWRcIjogMCxcbiAgICAgICAgXCJhcmlhLXJlYWRvbmx5XCI6IDAsXG4gICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiAwLFxuICAgICAgICBcImFyaWEtc2VsZWN0ZWRcIjogMCxcbiAgICAgICAgXCJhcmlhLXNvcnRcIjogMCxcbiAgICAgICAgXCJhcmlhLXZhbHVlbWF4XCI6IDAsXG4gICAgICAgIFwiYXJpYS12YWx1ZW1pblwiOiAwLFxuICAgICAgICBcImFyaWEtdmFsdWVub3dcIjogMCxcbiAgICAgICAgXCJhcmlhLXZhbHVldGV4dFwiOiAwLFxuICAgICAgICBcImFyaWEtYXRvbWljXCI6IDAsXG4gICAgICAgIFwiYXJpYS1idXN5XCI6IDAsXG4gICAgICAgIFwiYXJpYS1saXZlXCI6IDAsXG4gICAgICAgIFwiYXJpYS1yZWxldmFudFwiOiAwLFxuICAgICAgICBcImFyaWEtZHJvcGVmZmVjdFwiOiAwLFxuICAgICAgICBcImFyaWEtZ3JhYmJlZFwiOiAwLFxuICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiAwLFxuICAgICAgICBcImFyaWEtY29sY291bnRcIjogMCxcbiAgICAgICAgXCJhcmlhLWNvbGluZGV4XCI6IDAsXG4gICAgICAgIFwiYXJpYS1jb2xzcGFuXCI6IDAsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiAwLFxuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogMCxcbiAgICAgICAgXCJhcmlhLWVycm9ybWVzc2FnZVwiOiAwLFxuICAgICAgICBcImFyaWEtZmxvd3RvXCI6IDAsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IDAsXG4gICAgICAgIFwiYXJpYS1vd25zXCI6IDAsXG4gICAgICAgIFwiYXJpYS1wb3NpbnNldFwiOiAwLFxuICAgICAgICBcImFyaWEtcm93Y291bnRcIjogMCxcbiAgICAgICAgXCJhcmlhLXJvd2luZGV4XCI6IDAsXG4gICAgICAgIFwiYXJpYS1yb3dzcGFuXCI6IDAsXG4gICAgICAgIFwiYXJpYS1zZXRzaXplXCI6IDBcbiAgICAgIH0sXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDEgPSB7fSxcbiAgICAgIHJBUklBJDEgPSBSZWdFeHAoXG4gICAgICAgIFwiXihhcmlhKS1bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXSokXCJcbiAgICAgICksXG4gICAgICByQVJJQUNhbWVsJDEgPSBSZWdFeHAoXG4gICAgICAgIFwiXihhcmlhKVtBLVpdWzpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MF0qJFwiXG4gICAgICApLFxuICAgICAgZGlkV2FyblZhbHVlTnVsbCA9ICExLFxuICAgICAgd2FybmVkUHJvcGVydGllcyA9IHt9LFxuICAgICAgRVZFTlRfTkFNRV9SRUdFWCA9IC9eb24uLyxcbiAgICAgIElOVkFMSURfRVZFTlRfTkFNRV9SRUdFWCA9IC9eb25bXkEtWl0vLFxuICAgICAgckFSSUEgPSBSZWdFeHAoXG4gICAgICAgIFwiXihhcmlhKS1bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXSokXCJcbiAgICAgICksXG4gICAgICByQVJJQUNhbWVsID0gUmVnRXhwKFxuICAgICAgICBcIl4oYXJpYSlbQS1aXVs6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBdKiRcIlxuICAgICAgKSxcbiAgICAgIGlzSmF2YVNjcmlwdFByb3RvY29sID1cbiAgICAgICAgL15bXFx1MDAwMC1cXHUwMDFGIF0qaltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSp2W1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnNbXFxyXFxuXFx0XSpjW1xcclxcblxcdF0qcltcXHJcXG5cXHRdKmlbXFxyXFxuXFx0XSpwW1xcclxcblxcdF0qdFtcXHJcXG5cXHRdKjovaSxcbiAgICAgIGN1cnJlbnRSZXBsYXlpbmdFdmVudCA9IG51bGwsXG4gICAgICByZXN0b3JlVGFyZ2V0ID0gbnVsbCxcbiAgICAgIHJlc3RvcmVRdWV1ZSA9IG51bGwsXG4gICAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9ICExLFxuICAgICAgY2FuVXNlRE9NID0gIShcbiAgICAgICAgXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHdpbmRvdyB8fFxuICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2Ygd2luZG93LmRvY3VtZW50IHx8XG4gICAgICAgIFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICAgICAgKSxcbiAgICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gITE7XG4gICAgaWYgKGNhblVzZURPTSlcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBvcHRpb25zJGpzY29tcCQwID0ge307XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRpb25zJGpzY29tcCQwLCBcInBhc3NpdmVcIiwge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSAhMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIiwgb3B0aW9ucyRqc2NvbXAkMCwgb3B0aW9ucyRqc2NvbXAkMCk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLCBvcHRpb25zJGpzY29tcCQwLCBvcHRpb25zJGpzY29tcCQwKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSAhMTtcbiAgICAgIH1cbiAgICB2YXIgcm9vdCA9IG51bGwsXG4gICAgICBzdGFydFRleHQgPSBudWxsLFxuICAgICAgZmFsbGJhY2tUZXh0ID0gbnVsbCxcbiAgICAgIEV2ZW50SW50ZXJmYWNlID0ge1xuICAgICAgICBldmVudFBoYXNlOiAwLFxuICAgICAgICBidWJibGVzOiAwLFxuICAgICAgICBjYW5jZWxhYmxlOiAwLFxuICAgICAgICB0aW1lU3RhbXA6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDogMCxcbiAgICAgICAgaXNUcnVzdGVkOiAwXG4gICAgICB9LFxuICAgICAgU3ludGhldGljRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChFdmVudEludGVyZmFjZSksXG4gICAgICBVSUV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwgeyB2aWV3OiAwLCBkZXRhaWw6IDAgfSksXG4gICAgICBTeW50aGV0aWNVSUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVUlFdmVudEludGVyZmFjZSksXG4gICAgICBsYXN0TW92ZW1lbnRYLFxuICAgICAgbGFzdE1vdmVtZW50WSxcbiAgICAgIGxhc3RNb3VzZUV2ZW50LFxuICAgICAgTW91c2VFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICAgICAgICBzY3JlZW5YOiAwLFxuICAgICAgICBzY3JlZW5ZOiAwLFxuICAgICAgICBjbGllbnRYOiAwLFxuICAgICAgICBjbGllbnRZOiAwLFxuICAgICAgICBwYWdlWDogMCxcbiAgICAgICAgcGFnZVk6IDAsXG4gICAgICAgIGN0cmxLZXk6IDAsXG4gICAgICAgIHNoaWZ0S2V5OiAwLFxuICAgICAgICBhbHRLZXk6IDAsXG4gICAgICAgIG1ldGFLZXk6IDAsXG4gICAgICAgIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgICAgICAgYnV0dG9uOiAwLFxuICAgICAgICBidXR0b25zOiAwLFxuICAgICAgICByZWxhdGVkVGFyZ2V0OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gdm9pZCAwID09PSBldmVudC5yZWxhdGVkVGFyZ2V0XG4gICAgICAgICAgICA/IGV2ZW50LmZyb21FbGVtZW50ID09PSBldmVudC5zcmNFbGVtZW50XG4gICAgICAgICAgICAgID8gZXZlbnQudG9FbGVtZW50XG4gICAgICAgICAgICAgIDogZXZlbnQuZnJvbUVsZW1lbnRcbiAgICAgICAgICAgIDogZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICAgICAgfSxcbiAgICAgICAgbW92ZW1lbnRYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoXCJtb3ZlbWVudFhcIiBpbiBldmVudCkgcmV0dXJuIGV2ZW50Lm1vdmVtZW50WDtcbiAgICAgICAgICBldmVudCAhPT0gbGFzdE1vdXNlRXZlbnQgJiZcbiAgICAgICAgICAgIChsYXN0TW91c2VFdmVudCAmJiBcIm1vdXNlbW92ZVwiID09PSBldmVudC50eXBlXG4gICAgICAgICAgICAgID8gKChsYXN0TW92ZW1lbnRYID0gZXZlbnQuc2NyZWVuWCAtIGxhc3RNb3VzZUV2ZW50LnNjcmVlblgpLFxuICAgICAgICAgICAgICAgIChsYXN0TW92ZW1lbnRZID0gZXZlbnQuc2NyZWVuWSAtIGxhc3RNb3VzZUV2ZW50LnNjcmVlblkpKVxuICAgICAgICAgICAgICA6IChsYXN0TW92ZW1lbnRZID0gbGFzdE1vdmVtZW50WCA9IDApLFxuICAgICAgICAgICAgKGxhc3RNb3VzZUV2ZW50ID0gZXZlbnQpKTtcbiAgICAgICAgICByZXR1cm4gbGFzdE1vdmVtZW50WDtcbiAgICAgICAgfSxcbiAgICAgICAgbW92ZW1lbnRZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gXCJtb3ZlbWVudFlcIiBpbiBldmVudCA/IGV2ZW50Lm1vdmVtZW50WSA6IGxhc3RNb3ZlbWVudFk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljTW91c2VFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KE1vdXNlRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgRHJhZ0V2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7IGRhdGFUcmFuc2ZlcjogMCB9KSxcbiAgICAgIFN5bnRoZXRpY0RyYWdFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KERyYWdFdmVudEludGVyZmFjZSksXG4gICAgICBGb2N1c0V2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7IHJlbGF0ZWRUYXJnZXQ6IDAgfSksXG4gICAgICBTeW50aGV0aWNGb2N1c0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRm9jdXNFdmVudEludGVyZmFjZSksXG4gICAgICBBbmltYXRpb25FdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgYW5pbWF0aW9uTmFtZTogMCxcbiAgICAgICAgZWxhcHNlZFRpbWU6IDAsXG4gICAgICAgIHBzZXVkb0VsZW1lbnQ6IDBcbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljQW5pbWF0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChBbmltYXRpb25FdmVudEludGVyZmFjZSksXG4gICAgICBDbGlwYm9hcmRFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgY2xpcGJvYXJkRGF0YTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwiY2xpcGJvYXJkRGF0YVwiIGluIGV2ZW50XG4gICAgICAgICAgICA/IGV2ZW50LmNsaXBib2FyZERhdGFcbiAgICAgICAgICAgIDogd2luZG93LmNsaXBib2FyZERhdGE7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDbGlwYm9hcmRFdmVudEludGVyZmFjZSksXG4gICAgICBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwgeyBkYXRhOiAwIH0pLFxuICAgICAgU3ludGhldGljQ29tcG9zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFxuICAgICAgICBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlXG4gICAgICApLFxuICAgICAgU3ludGhldGljSW5wdXRFdmVudCA9IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQsXG4gICAgICBub3JtYWxpemVLZXkgPSB7XG4gICAgICAgIEVzYzogXCJFc2NhcGVcIixcbiAgICAgICAgU3BhY2ViYXI6IFwiIFwiLFxuICAgICAgICBMZWZ0OiBcIkFycm93TGVmdFwiLFxuICAgICAgICBVcDogXCJBcnJvd1VwXCIsXG4gICAgICAgIFJpZ2h0OiBcIkFycm93UmlnaHRcIixcbiAgICAgICAgRG93bjogXCJBcnJvd0Rvd25cIixcbiAgICAgICAgRGVsOiBcIkRlbGV0ZVwiLFxuICAgICAgICBXaW46IFwiT1NcIixcbiAgICAgICAgTWVudTogXCJDb250ZXh0TWVudVwiLFxuICAgICAgICBBcHBzOiBcIkNvbnRleHRNZW51XCIsXG4gICAgICAgIFNjcm9sbDogXCJTY3JvbGxMb2NrXCIsXG4gICAgICAgIE1velByaW50YWJsZUtleTogXCJVbmlkZW50aWZpZWRcIlxuICAgICAgfSxcbiAgICAgIHRyYW5zbGF0ZVRvS2V5ID0ge1xuICAgICAgICA4OiBcIkJhY2tzcGFjZVwiLFxuICAgICAgICA5OiBcIlRhYlwiLFxuICAgICAgICAxMjogXCJDbGVhclwiLFxuICAgICAgICAxMzogXCJFbnRlclwiLFxuICAgICAgICAxNjogXCJTaGlmdFwiLFxuICAgICAgICAxNzogXCJDb250cm9sXCIsXG4gICAgICAgIDE4OiBcIkFsdFwiLFxuICAgICAgICAxOTogXCJQYXVzZVwiLFxuICAgICAgICAyMDogXCJDYXBzTG9ja1wiLFxuICAgICAgICAyNzogXCJFc2NhcGVcIixcbiAgICAgICAgMzI6IFwiIFwiLFxuICAgICAgICAzMzogXCJQYWdlVXBcIixcbiAgICAgICAgMzQ6IFwiUGFnZURvd25cIixcbiAgICAgICAgMzU6IFwiRW5kXCIsXG4gICAgICAgIDM2OiBcIkhvbWVcIixcbiAgICAgICAgMzc6IFwiQXJyb3dMZWZ0XCIsXG4gICAgICAgIDM4OiBcIkFycm93VXBcIixcbiAgICAgICAgMzk6IFwiQXJyb3dSaWdodFwiLFxuICAgICAgICA0MDogXCJBcnJvd0Rvd25cIixcbiAgICAgICAgNDU6IFwiSW5zZXJ0XCIsXG4gICAgICAgIDQ2OiBcIkRlbGV0ZVwiLFxuICAgICAgICAxMTI6IFwiRjFcIixcbiAgICAgICAgMTEzOiBcIkYyXCIsXG4gICAgICAgIDExNDogXCJGM1wiLFxuICAgICAgICAxMTU6IFwiRjRcIixcbiAgICAgICAgMTE2OiBcIkY1XCIsXG4gICAgICAgIDExNzogXCJGNlwiLFxuICAgICAgICAxMTg6IFwiRjdcIixcbiAgICAgICAgMTE5OiBcIkY4XCIsXG4gICAgICAgIDEyMDogXCJGOVwiLFxuICAgICAgICAxMjE6IFwiRjEwXCIsXG4gICAgICAgIDEyMjogXCJGMTFcIixcbiAgICAgICAgMTIzOiBcIkYxMlwiLFxuICAgICAgICAxNDQ6IFwiTnVtTG9ja1wiLFxuICAgICAgICAxNDU6IFwiU2Nyb2xsTG9ja1wiLFxuICAgICAgICAyMjQ6IFwiTWV0YVwiXG4gICAgICB9LFxuICAgICAgbW9kaWZpZXJLZXlUb1Byb3AgPSB7XG4gICAgICAgIEFsdDogXCJhbHRLZXlcIixcbiAgICAgICAgQ29udHJvbDogXCJjdHJsS2V5XCIsXG4gICAgICAgIE1ldGE6IFwibWV0YUtleVwiLFxuICAgICAgICBTaGlmdDogXCJzaGlmdEtleVwiXG4gICAgICB9LFxuICAgICAgS2V5Ym9hcmRFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICAgICAgICBrZXk6IGZ1bmN0aW9uIChuYXRpdmVFdmVudCkge1xuICAgICAgICAgIGlmIChuYXRpdmVFdmVudC5rZXkpIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBub3JtYWxpemVLZXlbbmF0aXZlRXZlbnQua2V5XSB8fCBuYXRpdmVFdmVudC5rZXk7XG4gICAgICAgICAgICBpZiAoXCJVbmlkZW50aWZpZWRcIiAhPT0ga2V5KSByZXR1cm4ga2V5O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCJrZXlwcmVzc1wiID09PSBuYXRpdmVFdmVudC50eXBlXG4gICAgICAgICAgICA/ICgobmF0aXZlRXZlbnQgPSBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSksXG4gICAgICAgICAgICAgIDEzID09PSBuYXRpdmVFdmVudCA/IFwiRW50ZXJcIiA6IFN0cmluZy5mcm9tQ2hhckNvZGUobmF0aXZlRXZlbnQpKVxuICAgICAgICAgICAgOiBcImtleWRvd25cIiA9PT0gbmF0aXZlRXZlbnQudHlwZSB8fCBcImtleXVwXCIgPT09IG5hdGl2ZUV2ZW50LnR5cGVcbiAgICAgICAgICAgICAgPyB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCBcIlVuaWRlbnRpZmllZFwiXG4gICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgfSxcbiAgICAgICAgY29kZTogMCxcbiAgICAgICAgbG9jYXRpb246IDAsXG4gICAgICAgIGN0cmxLZXk6IDAsXG4gICAgICAgIHNoaWZ0S2V5OiAwLFxuICAgICAgICBhbHRLZXk6IDAsXG4gICAgICAgIG1ldGFLZXk6IDAsXG4gICAgICAgIHJlcGVhdDogMCxcbiAgICAgICAgbG9jYWxlOiAwLFxuICAgICAgICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gICAgICAgIGNoYXJDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gXCJrZXlwcmVzc1wiID09PSBldmVudC50eXBlID8gZ2V0RXZlbnRDaGFyQ29kZShldmVudCkgOiAwO1xuICAgICAgICB9LFxuICAgICAgICBrZXlDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gXCJrZXlkb3duXCIgPT09IGV2ZW50LnR5cGUgfHwgXCJrZXl1cFwiID09PSBldmVudC50eXBlXG4gICAgICAgICAgICA/IGV2ZW50LmtleUNvZGVcbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgfSxcbiAgICAgICAgd2hpY2g6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBcImtleXByZXNzXCIgPT09IGV2ZW50LnR5cGVcbiAgICAgICAgICAgID8gZ2V0RXZlbnRDaGFyQ29kZShldmVudClcbiAgICAgICAgICAgIDogXCJrZXlkb3duXCIgPT09IGV2ZW50LnR5cGUgfHwgXCJrZXl1cFwiID09PSBldmVudC50eXBlXG4gICAgICAgICAgICAgID8gZXZlbnQua2V5Q29kZVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljS2V5Ym9hcmRFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEtleWJvYXJkRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgUG9pbnRlckV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIHBvaW50ZXJJZDogMCxcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgcHJlc3N1cmU6IDAsXG4gICAgICAgIHRhbmdlbnRpYWxQcmVzc3VyZTogMCxcbiAgICAgICAgdGlsdFg6IDAsXG4gICAgICAgIHRpbHRZOiAwLFxuICAgICAgICB0d2lzdDogMCxcbiAgICAgICAgcG9pbnRlclR5cGU6IDAsXG4gICAgICAgIGlzUHJpbWFyeTogMFxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNQb2ludGVyRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChQb2ludGVyRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgVG91Y2hFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICAgICAgICB0b3VjaGVzOiAwLFxuICAgICAgICB0YXJnZXRUb3VjaGVzOiAwLFxuICAgICAgICBjaGFuZ2VkVG91Y2hlczogMCxcbiAgICAgICAgYWx0S2V5OiAwLFxuICAgICAgICBtZXRhS2V5OiAwLFxuICAgICAgICBjdHJsS2V5OiAwLFxuICAgICAgICBzaGlmdEtleTogMCxcbiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlXG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY1RvdWNoRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUb3VjaEV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIFRyYW5zaXRpb25FdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiAwLFxuICAgICAgICBlbGFwc2VkVGltZTogMCxcbiAgICAgICAgcHNldWRvRWxlbWVudDogMFxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgV2hlZWxFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICAgICAgICBkZWx0YVg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBcImRlbHRhWFwiIGluIGV2ZW50XG4gICAgICAgICAgICA/IGV2ZW50LmRlbHRhWFxuICAgICAgICAgICAgOiBcIndoZWVsRGVsdGFYXCIgaW4gZXZlbnRcbiAgICAgICAgICAgICAgPyAtZXZlbnQud2hlZWxEZWx0YVhcbiAgICAgICAgICAgICAgOiAwO1xuICAgICAgICB9LFxuICAgICAgICBkZWx0YVk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBcImRlbHRhWVwiIGluIGV2ZW50XG4gICAgICAgICAgICA/IGV2ZW50LmRlbHRhWVxuICAgICAgICAgICAgOiBcIndoZWVsRGVsdGFZXCIgaW4gZXZlbnRcbiAgICAgICAgICAgICAgPyAtZXZlbnQud2hlZWxEZWx0YVlcbiAgICAgICAgICAgICAgOiBcIndoZWVsRGVsdGFcIiBpbiBldmVudFxuICAgICAgICAgICAgICAgID8gLWV2ZW50LndoZWVsRGVsdGFcbiAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGRlbHRhWjogMCxcbiAgICAgICAgZGVsdGFNb2RlOiAwXG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY1doZWVsRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChXaGVlbEV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIFRvZ2dsZUV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICAgICAgICBuZXdTdGF0ZTogMCxcbiAgICAgICAgb2xkU3RhdGU6IDBcbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljVG9nZ2xlRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUb2dnbGVFdmVudEludGVyZmFjZSksXG4gICAgICBFTkRfS0VZQ09ERVMgPSBbOSwgMTMsIDI3LCAzMl0sXG4gICAgICBTVEFSVF9LRVlDT0RFID0gMjI5LFxuICAgICAgY2FuVXNlQ29tcG9zaXRpb25FdmVudCA9IGNhblVzZURPTSAmJiBcIkNvbXBvc2l0aW9uRXZlbnRcIiBpbiB3aW5kb3csXG4gICAgICBkb2N1bWVudE1vZGUgPSBudWxsO1xuICAgIGNhblVzZURPTSAmJlxuICAgICAgXCJkb2N1bWVudE1vZGVcIiBpbiBkb2N1bWVudCAmJlxuICAgICAgKGRvY3VtZW50TW9kZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZSk7XG4gICAgdmFyIGNhblVzZVRleHRJbnB1dEV2ZW50ID1cbiAgICAgICAgY2FuVXNlRE9NICYmIFwiVGV4dEV2ZW50XCIgaW4gd2luZG93ICYmICFkb2N1bWVudE1vZGUsXG4gICAgICB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA9XG4gICAgICAgIGNhblVzZURPTSAmJlxuICAgICAgICAoIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgfHxcbiAgICAgICAgICAoZG9jdW1lbnRNb2RlICYmIDggPCBkb2N1bWVudE1vZGUgJiYgMTEgPj0gZG9jdW1lbnRNb2RlKSksXG4gICAgICBTUEFDRUJBUl9DT0RFID0gMzIsXG4gICAgICBTUEFDRUJBUl9DSEFSID0gU3RyaW5nLmZyb21DaGFyQ29kZShTUEFDRUJBUl9DT0RFKSxcbiAgICAgIGhhc1NwYWNlS2V5cHJlc3MgPSAhMSxcbiAgICAgIGlzQ29tcG9zaW5nID0gITEsXG4gICAgICBzdXBwb3J0ZWRJbnB1dFR5cGVzID0ge1xuICAgICAgICBjb2xvcjogITAsXG4gICAgICAgIGRhdGU6ICEwLFxuICAgICAgICBkYXRldGltZTogITAsXG4gICAgICAgIFwiZGF0ZXRpbWUtbG9jYWxcIjogITAsXG4gICAgICAgIGVtYWlsOiAhMCxcbiAgICAgICAgbW9udGg6ICEwLFxuICAgICAgICBudW1iZXI6ICEwLFxuICAgICAgICBwYXNzd29yZDogITAsXG4gICAgICAgIHJhbmdlOiAhMCxcbiAgICAgICAgc2VhcmNoOiAhMCxcbiAgICAgICAgdGVsOiAhMCxcbiAgICAgICAgdGV4dDogITAsXG4gICAgICAgIHRpbWU6ICEwLFxuICAgICAgICB1cmw6ICEwLFxuICAgICAgICB3ZWVrOiAhMFxuICAgICAgfSxcbiAgICAgIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGwsXG4gICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbCxcbiAgICAgIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9ICExO1xuICAgIGNhblVzZURPTSAmJlxuICAgICAgKGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9XG4gICAgICAgIGlzRXZlbnRTdXBwb3J0ZWQoXCJpbnB1dFwiKSAmJlxuICAgICAgICAoIWRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCA5IDwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSk7XG4gICAgdmFyIG9iamVjdElzID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgT2JqZWN0LmlzID8gT2JqZWN0LmlzIDogaXMsXG4gICAgICBza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQgPVxuICAgICAgICBjYW5Vc2VET00gJiYgXCJkb2N1bWVudE1vZGVcIiBpbiBkb2N1bWVudCAmJiAxMSA+PSBkb2N1bWVudC5kb2N1bWVudE1vZGUsXG4gICAgICBhY3RpdmVFbGVtZW50ID0gbnVsbCxcbiAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbCxcbiAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsLFxuICAgICAgbW91c2VEb3duID0gITEsXG4gICAgICB2ZW5kb3JQcmVmaXhlcyA9IHtcbiAgICAgICAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKFwiQW5pbWF0aW9uXCIsIFwiQW5pbWF0aW9uRW5kXCIpLFxuICAgICAgICBhbmltYXRpb25pdGVyYXRpb246IG1ha2VQcmVmaXhNYXAoXCJBbmltYXRpb25cIiwgXCJBbmltYXRpb25JdGVyYXRpb25cIiksXG4gICAgICAgIGFuaW1hdGlvbnN0YXJ0OiBtYWtlUHJlZml4TWFwKFwiQW5pbWF0aW9uXCIsIFwiQW5pbWF0aW9uU3RhcnRcIiksXG4gICAgICAgIHRyYW5zaXRpb25ydW46IG1ha2VQcmVmaXhNYXAoXCJUcmFuc2l0aW9uXCIsIFwiVHJhbnNpdGlvblJ1blwiKSxcbiAgICAgICAgdHJhbnNpdGlvbnN0YXJ0OiBtYWtlUHJlZml4TWFwKFwiVHJhbnNpdGlvblwiLCBcIlRyYW5zaXRpb25TdGFydFwiKSxcbiAgICAgICAgdHJhbnNpdGlvbmNhbmNlbDogbWFrZVByZWZpeE1hcChcIlRyYW5zaXRpb25cIiwgXCJUcmFuc2l0aW9uQ2FuY2VsXCIpLFxuICAgICAgICB0cmFuc2l0aW9uZW5kOiBtYWtlUHJlZml4TWFwKFwiVHJhbnNpdGlvblwiLCBcIlRyYW5zaXRpb25FbmRcIilcbiAgICAgIH0sXG4gICAgICBwcmVmaXhlZEV2ZW50TmFtZXMgPSB7fSxcbiAgICAgIHN0eWxlID0ge307XG4gICAgY2FuVXNlRE9NICYmXG4gICAgICAoKHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZSksXG4gICAgICBcIkFuaW1hdGlvbkV2ZW50XCIgaW4gd2luZG93IHx8XG4gICAgICAgIChkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbixcbiAgICAgICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sXG4gICAgICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLFxuICAgICAgXCJUcmFuc2l0aW9uRXZlbnRcIiBpbiB3aW5kb3cgfHxcbiAgICAgICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7XG4gICAgdmFyIEFOSU1BVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShcImFuaW1hdGlvbmVuZFwiKSxcbiAgICAgIEFOSU1BVElPTl9JVEVSQVRJT04gPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShcImFuaW1hdGlvbml0ZXJhdGlvblwiKSxcbiAgICAgIEFOSU1BVElPTl9TVEFSVCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwiYW5pbWF0aW9uc3RhcnRcIiksXG4gICAgICBUUkFOU0lUSU9OX1JVTiA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwidHJhbnNpdGlvbnJ1blwiKSxcbiAgICAgIFRSQU5TSVRJT05fU1RBUlQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShcInRyYW5zaXRpb25zdGFydFwiKSxcbiAgICAgIFRSQU5TSVRJT05fQ0FOQ0VMID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJ0cmFuc2l0aW9uY2FuY2VsXCIpLFxuICAgICAgVFJBTlNJVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShcInRyYW5zaXRpb25lbmRcIiksXG4gICAgICB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcyA9IG5ldyBNYXAoKSxcbiAgICAgIHNpbXBsZUV2ZW50UGx1Z2luRXZlbnRzID1cbiAgICAgICAgXCJhYm9ydCBhdXhDbGljayBiZWZvcmVUb2dnbGUgY2FuY2VsIGNhblBsYXkgY2FuUGxheVRocm91Z2ggY2xpY2sgY2xvc2UgY29udGV4dE1lbnUgY29weSBjdXQgZHJhZyBkcmFnRW5kIGRyYWdFbnRlciBkcmFnRXhpdCBkcmFnTGVhdmUgZHJhZ092ZXIgZHJhZ1N0YXJ0IGRyb3AgZHVyYXRpb25DaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgZ290UG9pbnRlckNhcHR1cmUgaW5wdXQgaW52YWxpZCBrZXlEb3duIGtleVByZXNzIGtleVVwIGxvYWQgbG9hZGVkRGF0YSBsb2FkZWRNZXRhZGF0YSBsb2FkU3RhcnQgbG9zdFBvaW50ZXJDYXB0dXJlIG1vdXNlRG93biBtb3VzZU1vdmUgbW91c2VPdXQgbW91c2VPdmVyIG1vdXNlVXAgcGFzdGUgcGF1c2UgcGxheSBwbGF5aW5nIHBvaW50ZXJDYW5jZWwgcG9pbnRlckRvd24gcG9pbnRlck1vdmUgcG9pbnRlck91dCBwb2ludGVyT3ZlciBwb2ludGVyVXAgcHJvZ3Jlc3MgcmF0ZUNoYW5nZSByZXNldCByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdWJtaXQgc3VzcGVuZCB0aW1lVXBkYXRlIHRvdWNoQ2FuY2VsIHRvdWNoRW5kIHRvdWNoU3RhcnQgdm9sdW1lQ2hhbmdlIHNjcm9sbCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWxcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApO1xuICAgIHNpbXBsZUV2ZW50UGx1Z2luRXZlbnRzLnB1c2goXCJzY3JvbGxFbmRcIik7XG4gICAgdmFyIENhcHR1cmVkU3RhY2tzID0gbmV3IFdlYWtNYXAoKSxcbiAgICAgIE9mZnNjcmVlblZpc2libGUgPSAxLFxuICAgICAgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQgPSAyLFxuICAgICAgY29uY3VycmVudFF1ZXVlcyA9IFtdLFxuICAgICAgY29uY3VycmVudFF1ZXVlc0luZGV4ID0gMCxcbiAgICAgIGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyA9IDAsXG4gICAgICBlbXB0eUNvbnRleHRPYmplY3QgPSB7fTtcbiAgICBPYmplY3QuZnJlZXplKGVtcHR5Q29udGV4dE9iamVjdCk7XG4gICAgdmFyIHJlc29sdmVGYW1pbHkgPSBudWxsLFxuICAgICAgZmFpbGVkQm91bmRhcmllcyA9IG51bGwsXG4gICAgICBOb01vZGUgPSAwLFxuICAgICAgQ29uY3VycmVudE1vZGUgPSAxLFxuICAgICAgUHJvZmlsZU1vZGUgPSAyLFxuICAgICAgU3RyaWN0TGVnYWN5TW9kZSA9IDgsXG4gICAgICBTdHJpY3RFZmZlY3RzTW9kZSA9IDE2LFxuICAgICAgTm9TdHJpY3RQYXNzaXZlRWZmZWN0c01vZGUgPSA2NDtcbiAgICB2YXIgaGFzQmFkTWFwUG9seWZpbGwgPSAhMTtcbiAgICB0cnkge1xuICAgICAgdmFyIG5vbkV4dGVuc2libGVPYmplY3QgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pO1xuICAgICAgbmV3IE1hcChbW25vbkV4dGVuc2libGVPYmplY3QsIG51bGxdXSk7XG4gICAgICBuZXcgU2V0KFtub25FeHRlbnNpYmxlT2JqZWN0XSk7XG4gICAgfSBjYXRjaCAoZSQzKSB7XG4gICAgICBoYXNCYWRNYXBQb2x5ZmlsbCA9ICEwO1xuICAgIH1cbiAgICB2YXIgZm9ya1N0YWNrID0gW10sXG4gICAgICBmb3JrU3RhY2tJbmRleCA9IDAsXG4gICAgICB0cmVlRm9ya1Byb3ZpZGVyID0gbnVsbCxcbiAgICAgIHRyZWVGb3JrQ291bnQgPSAwLFxuICAgICAgaWRTdGFjayA9IFtdLFxuICAgICAgaWRTdGFja0luZGV4ID0gMCxcbiAgICAgIHRyZWVDb250ZXh0UHJvdmlkZXIgPSBudWxsLFxuICAgICAgdHJlZUNvbnRleHRJZCA9IDEsXG4gICAgICB0cmVlQ29udGV4dE92ZXJmbG93ID0gXCJcIixcbiAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbCxcbiAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsLFxuICAgICAgaXNIeWRyYXRpbmcgPSAhMSxcbiAgICAgIGRpZFN1c3BlbmRPckVycm9yREVWID0gITEsXG4gICAgICBoeWRyYXRpb25EaWZmUm9vdERFViA9IG51bGwsXG4gICAgICBoeWRyYXRpb25FcnJvcnMgPSBudWxsLFxuICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dCA9ICExLFxuICAgICAgSHlkcmF0aW9uTWlzbWF0Y2hFeGNlcHRpb24gPSBFcnJvcihcbiAgICAgICAgXCJIeWRyYXRpb24gTWlzbWF0Y2ggRXhjZXB0aW9uOiBUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IsIGFuZCBzaG91bGQgbm90IGxlYWsgaW50byB1c2Vyc3BhY2UuIElmIHlvdSdyZSBzZWVpbmcgdGhpcywgaXQncyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICksXG4gICAgICBsYXN0UmVzZXRUaW1lID0gMDtcbiAgICBpZiAoXG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcGVyZm9ybWFuY2UgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHBlcmZvcm1hbmNlLm5vd1xuICAgICkge1xuICAgICAgdmFyIGxvY2FsUGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTtcbiAgICAgIHZhciBnZXRDdXJyZW50VGltZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsUGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbG9jYWxEYXRlID0gRGF0ZTtcbiAgICAgIGdldEN1cnJlbnRUaW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIHZhbHVlQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xuICAgIHZhciByZW5kZXJlckN1cnNvckRFViA9IGNyZWF0ZUN1cnNvcihudWxsKTtcbiAgICB2YXIgcmVuZGVyZXJTaWdpbCA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbCxcbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGwsXG4gICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gITEsXG4gICAgICBBYm9ydENvbnRyb2xsZXJMb2NhbCA9XG4gICAgICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgICA/IEFib3J0Q29udHJvbGxlclxuICAgICAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgbGlzdGVuZXJzID0gW10sXG4gICAgICAgICAgICAgICAgc2lnbmFsID0gKHRoaXMuc2lnbmFsID0ge1xuICAgICAgICAgICAgICAgICAgYWJvcnRlZDogITEsXG4gICAgICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNpZ25hbC5hYm9ydGVkID0gITA7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICBzY2hlZHVsZUNhbGxiYWNrJDIgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgICAgIE5vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgICAgQ2FjaGVDb250ZXh0ID0ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgICAgICBDb25zdW1lcjogbnVsbCxcbiAgICAgICAgUHJvdmlkZXI6IG51bGwsXG4gICAgICAgIF9jdXJyZW50VmFsdWU6IG51bGwsXG4gICAgICAgIF9jdXJyZW50VmFsdWUyOiBudWxsLFxuICAgICAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgICAgIF9jdXJyZW50UmVuZGVyZXI6IG51bGwsXG4gICAgICAgIF9jdXJyZW50UmVuZGVyZXIyOiBudWxsXG4gICAgICB9LFxuICAgICAgbm93ID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdyxcbiAgICAgIHJlbmRlclN0YXJ0VGltZSA9IC0wLFxuICAgICAgY29tbWl0U3RhcnRUaW1lID0gLTAsXG4gICAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xLjEsXG4gICAgICBwcm9maWxlckVmZmVjdER1cmF0aW9uID0gLTAsXG4gICAgICBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgPSAhMSxcbiAgICAgIG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9ICExLFxuICAgICAgY3VycmVudEVudGFuZ2xlZExpc3RlbmVycyA9IG51bGwsXG4gICAgICBjdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50ID0gMCxcbiAgICAgIGN1cnJlbnRFbnRhbmdsZWRMYW5lID0gMCxcbiAgICAgIGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSA9IG51bGwsXG4gICAgICBwcmV2T25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlMgPSBmdW5jdGlvbiAodHJhbnNpdGlvbiwgcmV0dXJuVmFsdWUpIHtcbiAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgICBudWxsICE9PSByZXR1cm5WYWx1ZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZS50aGVuICYmXG4gICAgICAgIGVudGFuZ2xlQXN5bmNBY3Rpb24odHJhbnNpdGlvbiwgcmV0dXJuVmFsdWUpO1xuICAgICAgbnVsbCAhPT0gcHJldk9uU3RhcnRUcmFuc2l0aW9uRmluaXNoICYmXG4gICAgICAgIHByZXZPblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCh0cmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgfTtcbiAgICB2YXIgcmVzdW1lZENhY2hlID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MgPSB7XG4gICAgICAgIHJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgICByZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKCkge30sXG4gICAgICAgIGZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgICBkaXNjYXJkUGVuZGluZ1dhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fVxuICAgICAgfSxcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdLFxuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdLFxuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdLFxuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXSxcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXSxcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW10sXG4gICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzID0gbmV3IFNldCgpO1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKFxuICAgICAgZmliZXIsXG4gICAgICBpbnN0YW5jZVxuICAgICkge1xuICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5oYXMoZmliZXIudHlwZSkgfHxcbiAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICEwICE9PSBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAmJlxuICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKSxcbiAgICAgICAgZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKSxcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgICEwICE9PVxuICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICYmXG4gICAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKSxcbiAgICAgICAgZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpLFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgITAgIT09IGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAmJlxuICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlciksXG4gICAgICAgIGZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKSk7XG4gICAgfTtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIDAgPCBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoICYmXG4gICAgICAgIChwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgfSksXG4gICAgICAgIChwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXSkpO1xuICAgICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIDAgPCBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCAmJlxuICAgICAgICAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgfSksXG4gICAgICAgIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW10pKTtcbiAgICAgIHZhciBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICAwIDwgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggJiZcbiAgICAgICAgKHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICAgIH0pLFxuICAgICAgICAocGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdKSk7XG4gICAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIDAgPCBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggJiZcbiAgICAgICAgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goXG4gICAgICAgICAgZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW10pKTtcbiAgICAgIHZhciBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICAwIDwgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggJiZcbiAgICAgICAgKHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuYWRkKFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICAgIH0pLFxuICAgICAgICAocGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdKSk7XG4gICAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIDAgPCBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggJiZcbiAgICAgICAgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgfSksXG4gICAgICAgIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdKSk7XG4gICAgICBpZiAoMCA8IFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplKSB7XG4gICAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lc1xuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbiogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAwIDwgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplICYmXG4gICAgICAgICgoc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhcbiAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzXG4gICAgICAgICkpLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4qIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuKiBJZiB5b3UncmUgdXBkYXRpbmcgc3RhdGUgd2hlbmV2ZXIgcHJvcHMgY2hhbmdlLCByZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIG1lbW9pemF0aW9uIHRlY2huaXF1ZXMgb3IgbW92ZSBpdCB0byBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0LmRldi9saW5rL2Rlcml2ZWQtc3RhdGVcXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICApKTtcbiAgICAgIDAgPCBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgJiZcbiAgICAgICAgKChzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXNcbiAgICAgICAgKSksXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbiogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICApKTtcbiAgICAgIDAgPCBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplICYmXG4gICAgICAgICgoc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcykpLFxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJjb21wb25lbnRXaWxsTW91bnQgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuKiBSZW5hbWUgY29tcG9uZW50V2lsbE1vdW50IHRvIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgdG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biBgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICApKTtcbiAgICAgIDAgPCBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuc2l6ZSAmJlxuICAgICAgICAoKHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoXG4gICAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzXG4gICAgICAgICkpLFxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbiogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4qIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvZGVyaXZlZC1zdGF0ZVxcbiogUmVuYW1lIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biBgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICApKTtcbiAgICAgIDAgPCBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSAmJlxuICAgICAgICAoKHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKSksXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcImNvbXBvbmVudFdpbGxVcGRhdGUgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbiogUmVuYW1lIGNvbXBvbmVudFdpbGxVcGRhdGUgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgdG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biBgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICApKTtcbiAgICB9O1xuICAgIHZhciBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCksXG4gICAgICBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0ID0gbmV3IFNldCgpO1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKFxuICAgICAgZmliZXIsXG4gICAgICBpbnN0YW5jZVxuICAgICkge1xuICAgICAgdmFyIHN0cmljdFJvb3QgPSBudWxsO1xuICAgICAgZm9yICh2YXIgbm9kZSA9IGZpYmVyOyBudWxsICE9PSBub2RlOyApXG4gICAgICAgIG5vZGUubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiYgKHN0cmljdFJvb3QgPSBub2RlKSxcbiAgICAgICAgICAobm9kZSA9IG5vZGUucmV0dXJuKTtcbiAgICAgIG51bGwgPT09IHN0cmljdFJvb3RcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBmaW5kIGEgU3RyaWN0TW9kZSBjb21wb25lbnQgaW4gYSBzdHJpY3QgbW9kZSB0cmVlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKVxuICAgICAgICA6ICFkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmhhcyhmaWJlci50eXBlKSAmJlxuICAgICAgICAgICgobm9kZSA9IHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5nZXQoc3RyaWN0Um9vdCkpLFxuICAgICAgICAgIG51bGwgIT0gZmliZXIudHlwZS5jb250ZXh0VHlwZXMgfHxcbiAgICAgICAgICAgIG51bGwgIT0gZmliZXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyB8fFxuICAgICAgICAgICAgKG51bGwgIT09IGluc3RhbmNlICYmXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCkpICYmXG4gICAgICAgICAgKHZvaWQgMCA9PT0gbm9kZSAmJlxuICAgICAgICAgICAgKChub2RlID0gW10pLCBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuc2V0KHN0cmljdFJvb3QsIG5vZGUpKSxcbiAgICAgICAgICBub2RlLnB1c2goZmliZXIpKTtcbiAgICB9O1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZm9yRWFjaChmdW5jdGlvbiAoZmliZXJBcnJheSkge1xuICAgICAgICBpZiAoMCAhPT0gZmliZXJBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZmlyc3RGaWJlciA9IGZpYmVyQXJyYXlbMF0sXG4gICAgICAgICAgICB1bmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICBmaWJlckFycmF5LmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgICB1bmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIik7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyh1bmlxdWVOYW1lcyk7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZmlyc3RGaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJMZWdhY3kgY29udGV4dCBBUEkgaGFzIGJlZW4gZGV0ZWN0ZWQgd2l0aGluIGEgc3RyaWN0LW1vZGUgdHJlZS5cXG5cXG5UaGUgb2xkIEFQSSB3aWxsIGJlIHN1cHBvcnRlZCBpbiBhbGwgMTYueCByZWxlYXNlcywgYnV0IGFwcGxpY2F0aW9ucyB1c2luZyBpdCBzaG91bGQgbWlncmF0ZSB0byB0aGUgbmV3IHZlcnNpb24uXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzXFxuXFxuTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9sZWdhY3ktY29udGV4dFwiLFxuICAgICAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTtcbiAgICB9O1xuICAgIHZhciBTdXNwZW5zZUV4Y2VwdGlvbiA9IEVycm9yKFxuICAgICAgICBcIlN1c3BlbnNlIEV4Y2VwdGlvbjogVGhpcyBpcyBub3QgYSByZWFsIGVycm9yISBJdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBgdXNlYCB0byBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgcmVuZGVyLiBZb3UgbXVzdCBlaXRoZXIgcmV0aHJvdyBpdCBpbW1lZGlhdGVseSwgb3IgbW92ZSB0aGUgYHVzZWAgY2FsbCBvdXRzaWRlIG9mIHRoZSBgdHJ5L2NhdGNoYCBibG9jay4gQ2FwdHVyaW5nIHdpdGhvdXQgcmV0aHJvd2luZyB3aWxsIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci5cXG5cXG5UbyBoYW5kbGUgYXN5bmMgZXJyb3JzLCB3cmFwIHlvdXIgY29tcG9uZW50IGluIGFuIGVycm9yIGJvdW5kYXJ5LCBvciBjYWxsIHRoZSBwcm9taXNlJ3MgYC5jYXRjaGAgbWV0aG9kIGFuZCBwYXNzIHRoZSByZXN1bHQgdG8gYHVzZWAuXCJcbiAgICAgICksXG4gICAgICBTdXNwZW5zZXlDb21taXRFeGNlcHRpb24gPSBFcnJvcihcbiAgICAgICAgXCJTdXNwZW5zZSBFeGNlcHRpb246IFRoaXMgaXMgbm90IGEgcmVhbCBlcnJvciwgYW5kIHNob3VsZCBub3QgbGVhayBpbnRvIHVzZXJzcGFjZS4gSWYgeW91J3JlIHNlZWluZyB0aGlzLCBpdCdzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgKSxcbiAgICAgIFN1c3BlbnNlQWN0aW9uRXhjZXB0aW9uID0gRXJyb3IoXG4gICAgICAgIFwiU3VzcGVuc2UgRXhjZXB0aW9uOiBUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IhIEl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIGB1c2VBY3Rpb25TdGF0ZWAgdG8gaW50ZXJydXB0IHRoZSBjdXJyZW50IHJlbmRlci4gWW91IG11c3QgZWl0aGVyIHJldGhyb3cgaXQgaW1tZWRpYXRlbHksIG9yIG1vdmUgdGhlIGB1c2VBY3Rpb25TdGF0ZWAgY2FsbCBvdXRzaWRlIG9mIHRoZSBgdHJ5L2NhdGNoYCBibG9jay4gQ2FwdHVyaW5nIHdpdGhvdXQgcmV0aHJvd2luZyB3aWxsIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci5cXG5cXG5UbyBoYW5kbGUgYXN5bmMgZXJyb3JzLCB3cmFwIHlvdXIgY29tcG9uZW50IGluIGFuIGVycm9yIGJvdW5kYXJ5LlwiXG4gICAgICApLFxuICAgICAgbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlID0ge1xuICAgICAgICB0aGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdJbnRlcm5hbCBSZWFjdCBlcnJvcjogQSBsaXN0ZW5lciB3YXMgdW5leHBlY3RlZGx5IGF0dGFjaGVkIHRvIGEgXCJub29wXCIgdGhlbmFibGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3VzcGVuZGVkVGhlbmFibGUgPSBudWxsLFxuICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVYgPSAhMSxcbiAgICAgIE5vRmxhZ3MgPSAwLFxuICAgICAgSGFzRWZmZWN0ID0gMSxcbiAgICAgIEluc2VydGlvbiA9IDIsXG4gICAgICBMYXlvdXQgPSA0LFxuICAgICAgUGFzc2l2ZSA9IDgsXG4gICAgICBVcGRhdGVTdGF0ZSA9IDAsXG4gICAgICBSZXBsYWNlU3RhdGUgPSAxLFxuICAgICAgRm9yY2VVcGRhdGUgPSAyLFxuICAgICAgQ2FwdHVyZVVwZGF0ZSA9IDMsXG4gICAgICBoYXNGb3JjZVVwZGF0ZSA9ICExO1xuICAgIHZhciBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gITE7XG4gICAgdmFyIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gICAgdmFyIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSAhMSxcbiAgICAgIGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCksXG4gICAgICBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IgPSBjcmVhdGVDdXJzb3IoMCksXG4gICAgICBkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdDtcbiAgICB2YXIgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRVc2VXcmFwcGVkSW5UcnlDYXRjaCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dFVzZUZvcm1TdGF0ZSA9IG5ldyBTZXQoKTtcbiAgICB2YXIgcmVuZGVyTGFuZXMgPSAwLFxuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsLFxuICAgICAgY3VycmVudEhvb2sgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbCxcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSAhMSxcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9ICExLFxuICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgPSAhMSxcbiAgICAgIGxvY2FsSWRDb3VudGVyID0gMCxcbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwLFxuICAgICAgdGhlbmFibGVTdGF0ZSQxID0gbnVsbCxcbiAgICAgIGdsb2JhbENsaWVudElkQ291bnRlciA9IDAsXG4gICAgICBSRV9SRU5ERVJfTElNSVQgPSAyNSxcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbCxcbiAgICAgIGhvb2tUeXBlc0RldiA9IG51bGwsXG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xLFxuICAgICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSAhMSxcbiAgICAgIENvbnRleHRPbmx5RGlzcGF0Y2hlciA9IHtcbiAgICAgICAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICAgICAgICB1c2U6IHVzZSxcbiAgICAgICAgdXNlQ2FsbGJhY2s6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlQ29udGV4dDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VMYXlvdXRFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZU1lbW86IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlUmVkdWNlcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VSZWY6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlRGVidWdWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VEZWZlcnJlZFZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZVRyYW5zaXRpb246IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlSWQ6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlRm9ybVN0YXRlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZUFjdGlvblN0YXRlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZU9wdGltaXN0aWM6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlTWVtb0NhY2hlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZUNhY2hlUmVmcmVzaDogdGhyb3dJbnZhbGlkSG9va0Vycm9yXG4gICAgICB9LFxuICAgICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbCxcbiAgICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSBudWxsLFxuICAgICAgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGwsXG4gICAgICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsLFxuICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGwsXG4gICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGwsXG4gICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcbiAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZTogdXNlLFxuICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBjcmVhdGVEZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoY3JlYXRlRGVwcyk7XG4gICAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGNyZWF0ZURlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW1wZXJhdGl2ZUhhbmRsZVwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICAgIG1vdW50RWZmZWN0SW1wbCg0LCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VMYXlvdXRFZmZlY3RcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIH0sXG4gICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVmZXJyZWRWYWx1ZVwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFN5bmNFeHRlcm5hbFN0b3JlKFxuICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRJZCgpO1xuICAgICAgfSxcbiAgICAgIHVzZUZvcm1TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbiwgaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VGb3JtU3RhdGVcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgd2Fybk9uVXNlRm9ybVN0YXRlSW5EZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50QWN0aW9uU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGUpO1xuICAgICAgfSxcbiAgICAgIHVzZUFjdGlvblN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUFjdGlvblN0YXRlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEFjdGlvblN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0sXG4gICAgICB1c2VPcHRpbWlzdGljOiBmdW5jdGlvbiAocGFzc3Rocm91Z2gpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50T3B0aW1pc3RpYyhwYXNzdGhyb3VnaCk7XG4gICAgICB9LFxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzLFxuICAgICAgdXNlTWVtb0NhY2hlOiB1c2VNZW1vQ2FjaGUsXG4gICAgICB1c2VDYWNoZVJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhY2hlUmVmcmVzaFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRSZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0ge1xuICAgICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2U6IHVzZSxcbiAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhbGxiYWNrXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGNyZWF0ZURlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgY3JlYXRlRGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgbW91bnRFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIH0sXG4gICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVmZXJyZWRWYWx1ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFN5bmNFeHRlcm5hbFN0b3JlKFxuICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50SWQoKTtcbiAgICAgIH0sXG4gICAgICB1c2VBY3Rpb25TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbiwgaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VBY3Rpb25TdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50QWN0aW9uU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGUpO1xuICAgICAgfSxcbiAgICAgIHVzZUZvcm1TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbiwgaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VGb3JtU3RhdGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHdhcm5PblVzZUZvcm1TdGF0ZUluRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEFjdGlvblN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0sXG4gICAgICB1c2VPcHRpbWlzdGljOiBmdW5jdGlvbiAocGFzc3Rocm91Z2gpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudE9wdGltaXN0aWMocGFzc3Rocm91Z2gpO1xuICAgICAgfSxcbiAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOiB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cyxcbiAgICAgIHVzZU1lbW9DYWNoZTogdXNlTWVtb0NhY2hlLFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZTogdXNlLFxuICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGNyZWF0ZURlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdXBkYXRlRWZmZWN0SW1wbCgyMDQ4LCBQYXNzaXZlLCBjcmVhdGUsIGNyZWF0ZURlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW1wZXJhdGl2ZUhhbmRsZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VMYXlvdXRFZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKDQsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VNZW1vXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH0sXG4gICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIH0sXG4gICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVmZXJyZWRWYWx1ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlVHJhbnNpdGlvblwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9LFxuICAgICAgdXNlRm9ybVN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VGb3JtU3RhdGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHdhcm5PblVzZUZvcm1TdGF0ZUluRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHVzZUFjdGlvblN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VBY3Rpb25TdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUFjdGlvblN0YXRlKGFjdGlvbik7XG4gICAgICB9LFxuICAgICAgdXNlT3B0aW1pc3RpYzogZnVuY3Rpb24gKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VPcHRpbWlzdGljXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgICB9LFxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzLFxuICAgICAgdXNlTWVtb0NhY2hlOiB1c2VNZW1vQ2FjaGUsXG4gICAgICB1c2VDYWNoZVJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhY2hlUmVmcmVzaFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG4gICAgfTtcbiAgICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSB7XG4gICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZTogdXNlLFxuICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGNyZWF0ZURlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdXBkYXRlRWZmZWN0SW1wbCgyMDQ4LCBQYXNzaXZlLCBjcmVhdGUsIGNyZWF0ZURlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW1wZXJhdGl2ZUhhbmRsZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VMYXlvdXRFZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKDQsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VNZW1vXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH0sXG4gICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB9LFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlVHJhbnNpdGlvblwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH0sXG4gICAgICB1c2VGb3JtU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgd2Fybk9uVXNlRm9ybVN0YXRlSW5EZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICAgIH0sXG4gICAgICB1c2VBY3Rpb25TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQWN0aW9uU3RhdGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZXJlbmRlckFjdGlvblN0YXRlKGFjdGlvbik7XG4gICAgICB9LFxuICAgICAgdXNlT3B0aW1pc3RpYzogZnVuY3Rpb24gKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VPcHRpbWlzdGljXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICAgIH0sXG4gICAgICB1c2VIb3N0VHJhbnNpdGlvblN0YXR1czogdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMsXG4gICAgICB1c2VNZW1vQ2FjaGU6IHVzZU1lbW9DYWNoZSxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2U6IGZ1bmN0aW9uICh1c2FibGUpIHtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHJldHVybiB1c2UodXNhYmxlKTtcbiAgICAgIH0sXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBjcmVhdGVEZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGNyZWF0ZURlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW1wZXJhdGl2ZUhhbmRsZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIG1vdW50RWZmZWN0SW1wbCg0LCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VMYXlvdXRFZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB9LFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlVHJhbnNpdGlvblwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgICB9LFxuICAgICAgdXNlRm9ybVN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50QWN0aW9uU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGUpO1xuICAgICAgfSxcbiAgICAgIHVzZUFjdGlvblN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUFjdGlvblN0YXRlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgICB9LFxuICAgICAgdXNlT3B0aW1pc3RpYzogZnVuY3Rpb24gKHBhc3N0aHJvdWdoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VPcHRpbWlzdGljXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRPcHRpbWlzdGljKHBhc3N0aHJvdWdoKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vQ2FjaGU6IGZ1bmN0aW9uIChzaXplKSB7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICByZXR1cm4gdXNlTWVtb0NhY2hlKHNpemUpO1xuICAgICAgfSxcbiAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOiB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cyxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiBmdW5jdGlvbiAodXNhYmxlKSB7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICByZXR1cm4gdXNlKHVzYWJsZSk7XG4gICAgICB9LFxuICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgY3JlYXRlRGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdXBkYXRlRWZmZWN0SW1wbCgyMDQ4LCBQYXNzaXZlLCBjcmVhdGUsIGNyZWF0ZURlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW1wZXJhdGl2ZUhhbmRsZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKDQsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VNZW1vXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH0sXG4gICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlVHJhbnNpdGlvblwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9LFxuICAgICAgdXNlRm9ybVN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VGb3JtU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICAgIH0sXG4gICAgICB1c2VBY3Rpb25TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQWN0aW9uU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICAgIH0sXG4gICAgICB1c2VPcHRpbWlzdGljOiBmdW5jdGlvbiAocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgICB9LFxuICAgICAgdXNlTWVtb0NhY2hlOiBmdW5jdGlvbiAoc2l6ZSkge1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHVzZU1lbW9DYWNoZShzaXplKTtcbiAgICAgIH0sXG4gICAgICB1c2VIb3N0VHJhbnNpdGlvblN0YXR1czogdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMsXG4gICAgICB1c2VDYWNoZVJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhY2hlUmVmcmVzaFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG4gICAgfTtcbiAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiBmdW5jdGlvbiAodXNhYmxlKSB7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICByZXR1cm4gdXNlKHVzYWJsZSk7XG4gICAgICB9LFxuICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgY3JlYXRlRGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdXBkYXRlRWZmZWN0SW1wbCgyMDQ4LCBQYXNzaXZlLCBjcmVhdGUsIGNyZWF0ZURlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW1wZXJhdGl2ZUhhbmRsZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKDQsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VNZW1vXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWY6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWJ1Z1ZhbHVlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIH0sXG4gICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVmZXJyZWRWYWx1ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlVHJhbnNpdGlvblwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZXJlbmRlclRyYW5zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH0sXG4gICAgICB1c2VGb3JtU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZXJlbmRlckFjdGlvblN0YXRlKGFjdGlvbik7XG4gICAgICB9LFxuICAgICAgdXNlQWN0aW9uU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUFjdGlvblN0YXRlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICAgIH0sXG4gICAgICB1c2VPcHRpbWlzdGljOiBmdW5jdGlvbiAocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vQ2FjaGU6IGZ1bmN0aW9uIChzaXplKSB7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICByZXR1cm4gdXNlTWVtb0NhY2hlKHNpemUpO1xuICAgICAgfSxcbiAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOiB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cyxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBjYWxsQ29tcG9uZW50ID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnKSB7XG4gICAgICAgICAgdmFyIHdhc1JlbmRlcmluZyA9IGlzUmVuZGVyaW5nO1xuICAgICAgICAgIGlzUmVuZGVyaW5nID0gITA7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlzUmVuZGVyaW5nID0gd2FzUmVuZGVyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbGxDb21wb25lbnRJbkRFViA9XG4gICAgICAgIGNhbGxDb21wb25lbnRbXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIl0uYmluZChjYWxsQ29tcG9uZW50KSxcbiAgICAgIGNhbGxSZW5kZXIgPSB7XG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCI6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICAgIHZhciB3YXNSZW5kZXJpbmcgPSBpc1JlbmRlcmluZztcbiAgICAgICAgICBpc1JlbmRlcmluZyA9ICEwO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVuZGVyKCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlzUmVuZGVyaW5nID0gd2FzUmVuZGVyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbGxSZW5kZXJJbkRFViA9IGNhbGxSZW5kZXJbXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIl0uYmluZChjYWxsUmVuZGVyKSxcbiAgICAgIGNhbGxDb21wb25lbnREaWRNb3VudCA9IHtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIjogZnVuY3Rpb24gKGZpbmlzaGVkV29yaywgaW5zdGFuY2UpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENvbXBvbmVudERpZE1vdW50SW5ERVYgPSBjYWxsQ29tcG9uZW50RGlkTW91bnRbXG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJcbiAgICAgIF0uYmluZChjYWxsQ29tcG9uZW50RGlkTW91bnQpLFxuICAgICAgY2FsbENvbXBvbmVudERpZFVwZGF0ZSA9IHtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIjogZnVuY3Rpb24gKFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgcHJldlN0YXRlLFxuICAgICAgICAgIHNuYXBzaG90XG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENvbXBvbmVudERpZFVwZGF0ZUluREVWID0gY2FsbENvbXBvbmVudERpZFVwZGF0ZVtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIlxuICAgICAgXS5iaW5kKGNhbGxDb21wb25lbnREaWRVcGRhdGUpLFxuICAgICAgY2FsbENvbXBvbmVudERpZENhdGNoID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoaW5zdGFuY2UsIGVycm9ySW5mbykge1xuICAgICAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaChlcnJvckluZm8udmFsdWUsIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrOiBudWxsICE9PSBzdGFjayA/IHN0YWNrIDogXCJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENvbXBvbmVudERpZENhdGNoSW5ERVYgPSBjYWxsQ29tcG9uZW50RGlkQ2F0Y2hbXG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJcbiAgICAgIF0uYmluZChjYWxsQ29tcG9uZW50RGlkQ2F0Y2gpLFxuICAgICAgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50ID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50SW5ERVYgPSBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRbXG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJcbiAgICAgIF0uYmluZChjYWxsQ29tcG9uZW50V2lsbFVubW91bnQpLFxuICAgICAgY2FsbENyZWF0ZSA9IHtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIjogZnVuY3Rpb24gKGVmZmVjdCkge1xuICAgICAgICAgIG51bGwgIT0gZWZmZWN0LnJlc291cmNlS2luZCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCBvbmx5IFNpbXBsZUVmZmVjdHMgd2hlbiBlbmFibGVVc2VFZmZlY3RDUlVET3ZlcmxvYWQgaXMgZGlzYWJsZWQsIGdvdCAlc1wiLFxuICAgICAgICAgICAgICBlZmZlY3QucmVzb3VyY2VLaW5kXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICAgICAgICAgIGVmZmVjdCA9IGVmZmVjdC5pbnN0O1xuICAgICAgICAgIGNyZWF0ZSA9IGNyZWF0ZSgpO1xuICAgICAgICAgIHJldHVybiAoZWZmZWN0LmRlc3Ryb3kgPSBjcmVhdGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENyZWF0ZUluREVWID0gY2FsbENyZWF0ZVtcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiXS5iaW5kKGNhbGxDcmVhdGUpLFxuICAgICAgY2FsbERlc3Ryb3kgPSB7XG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCI6IGZ1bmN0aW9uIChcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgZGVzdHJveVxuICAgICAgICApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbERlc3Ryb3lJbkRFViA9XG4gICAgICAgIGNhbGxEZXN0cm95W1wicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJdLmJpbmQoY2FsbERlc3Ryb3kpLFxuICAgICAgY2FsbExhenlJbml0ID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAobGF6eSkge1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eS5faW5pdDtcbiAgICAgICAgICByZXR1cm4gaW5pdChsYXp5Ll9wYXlsb2FkKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbGxMYXp5SW5pdEluREVWID1cbiAgICAgICAgY2FsbExhenlJbml0W1wicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJdLmJpbmQoY2FsbExhenlJbml0KSxcbiAgICAgIHRoZW5hYmxlU3RhdGUgPSBudWxsLFxuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwLFxuICAgICAgY3VycmVudERlYnVnSW5mbyA9IG51bGwsXG4gICAgICBkaWRXYXJuQWJvdXRNYXBzO1xuICAgIHZhciBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gKGRpZFdhcm5BYm91dE1hcHMgPSAhMSk7XG4gICAgdmFyIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuICAgIHZhciBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmcgPSB7fTtcbiAgICB2YXIgb3duZXJIYXNTeW1ib2xUeXBlV2FybmluZyA9IHt9O1xuICAgIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKHJldHVybkZpYmVyLCB3b3JrSW5Qcm9ncmVzcywgY2hpbGQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCAhPT0gY2hpbGQgJiZcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGNoaWxkICYmXG4gICAgICAgIGNoaWxkLl9zdG9yZSAmJlxuICAgICAgICAoKCFjaGlsZC5fc3RvcmUudmFsaWRhdGVkICYmIG51bGwgPT0gY2hpbGQua2V5KSB8fFxuICAgICAgICAgIDIgPT09IGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQpXG4gICAgICApIHtcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgIT09IHR5cGVvZiBjaGlsZC5fc3RvcmUpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0IENvbXBvbmVudCBpbiB3YXJuRm9yTWlzc2luZ0tleSBzaG91bGQgaGF2ZSBhIF9zdG9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgPSAxO1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIocmV0dXJuRmliZXIpLFxuICAgICAgICAgIGNvbXBvbmVudEtleSA9IGNvbXBvbmVudE5hbWUgfHwgXCJudWxsXCI7XG4gICAgICAgIGlmICghb3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudEtleV0pIHtcbiAgICAgICAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50S2V5XSA9ICEwO1xuICAgICAgICAgIGNoaWxkID0gY2hpbGQuX293bmVyO1xuICAgICAgICAgIHJldHVybkZpYmVyID0gcmV0dXJuRmliZXIuX2RlYnVnT3duZXI7XG4gICAgICAgICAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBcIlwiO1xuICAgICAgICAgIHJldHVybkZpYmVyICYmXG4gICAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgcmV0dXJuRmliZXIudGFnICYmXG4gICAgICAgICAgICAoY29tcG9uZW50S2V5ID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihyZXR1cm5GaWJlcikpICYmXG4gICAgICAgICAgICAoY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9XG4gICAgICAgICAgICAgIFwiXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYFwiICsgY29tcG9uZW50S2V5ICsgXCJgLlwiKTtcbiAgICAgICAgICBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvIHx8XG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSAmJlxuICAgICAgICAgICAgICAoY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9XG4gICAgICAgICAgICAgICAgXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArXG4gICAgICAgICAgICAgICAgY29tcG9uZW50TmFtZSArXG4gICAgICAgICAgICAgICAgXCI+LlwiKSk7XG4gICAgICAgICAgdmFyIGNoaWxkT3duZXJBcHBlbmRpeCA9IFwiXCI7XG4gICAgICAgICAgbnVsbCAhPSBjaGlsZCAmJlxuICAgICAgICAgICAgcmV0dXJuRmliZXIgIT09IGNoaWxkICYmXG4gICAgICAgICAgICAoKGNvbXBvbmVudE5hbWUgPSBudWxsKSxcbiAgICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBjaGlsZC50YWdcbiAgICAgICAgICAgICAgPyAoY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoY2hpbGQpKVxuICAgICAgICAgICAgICA6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBjaGlsZC5uYW1lICYmIChjb21wb25lbnROYW1lID0gY2hpbGQubmFtZSksXG4gICAgICAgICAgICBjb21wb25lbnROYW1lICYmXG4gICAgICAgICAgICAgIChjaGlsZE93bmVyQXBwZW5kaXggPVxuICAgICAgICAgICAgICAgIFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgY29tcG9uZW50TmFtZSArIFwiLlwiKSk7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYod29ya0luUHJvZ3Jlc3MsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyxcbiAgICAgICAgICAgICAgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyxcbiAgICAgICAgICAgICAgY2hpbGRPd25lckFwcGVuZGl4XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgcmVjb25jaWxlQ2hpbGRGaWJlcnMgPSBjcmVhdGVDaGlsZFJlY29uY2lsZXIoITApLFxuICAgICAgbW91bnRDaGlsZEZpYmVycyA9IGNyZWF0ZUNoaWxkUmVjb25jaWxlcighMSksXG4gICAgICBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIHNoZWxsQm91bmRhcnkgPSBudWxsLFxuICAgICAgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgPSAxLFxuICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrID0gMixcbiAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoMCksXG4gICAgICBmYWtlSW50ZXJuYWxJbnN0YW5jZSA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZSA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZXMkMSA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0Q2hpbGRDb250ZXh0VHlwZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZSA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrID0gbmV3IFNldCgpO1xuICAgIE9iamVjdC5mcmVlemUoZmFrZUludGVybmFsSW5zdGFuY2UpO1xuICAgIHZhciBjbGFzc0NvbXBvbmVudFVwZGF0ZXIgPSB7XG4gICAgICAgIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaW5zdCA9IGluc3QuX3JlYWN0SW50ZXJuYWxzO1xuICAgICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoaW5zdCksXG4gICAgICAgICAgICB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICAgICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuICAgICAgICAgIHZvaWQgMCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgIG51bGwgIT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICAod2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrKSwgKHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrKSk7XG4gICAgICAgICAgcGF5bG9hZCA9IGVucXVldWVVcGRhdGUoaW5zdCwgdXBkYXRlLCBsYW5lKTtcbiAgICAgICAgICBudWxsICE9PSBwYXlsb2FkICYmXG4gICAgICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHBheWxvYWQsIGluc3QsIGxhbmUpLFxuICAgICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhwYXlsb2FkLCBpbnN0LCBsYW5lKSk7XG4gICAgICAgICAgbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGluc3QsIGxhbmUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICAgICAgICBpbnN0ID0gaW5zdC5fcmVhY3RJbnRlcm5hbHM7XG4gICAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShpbnN0KSxcbiAgICAgICAgICAgIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgICAgICB1cGRhdGUudGFnID0gUmVwbGFjZVN0YXRlO1xuICAgICAgICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcbiAgICAgICAgICB2b2lkIDAgIT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICBudWxsICE9PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgKHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjayksICh1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaykpO1xuICAgICAgICAgIHBheWxvYWQgPSBlbnF1ZXVlVXBkYXRlKGluc3QsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICAgICAgbnVsbCAhPT0gcGF5bG9hZCAmJlxuICAgICAgICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihwYXlsb2FkLCBpbnN0LCBsYW5lKSxcbiAgICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocGF5bG9hZCwgaW5zdCwgbGFuZSkpO1xuICAgICAgICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChpbnN0LCBsYW5lKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAoaW5zdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICBpbnN0ID0gaW5zdC5fcmVhY3RJbnRlcm5hbHM7XG4gICAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShpbnN0KSxcbiAgICAgICAgICAgIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG4gICAgICAgICAgdm9pZCAwICE9PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgICh3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2spLCAodXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2spKTtcbiAgICAgICAgICBjYWxsYmFjayA9IGVucXVldWVVcGRhdGUoaW5zdCwgdXBkYXRlLCBsYW5lKTtcbiAgICAgICAgICBudWxsICE9PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihjYWxsYmFjaywgaW5zdCwgbGFuZSksXG4gICAgICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKGNhbGxiYWNrLCBpbnN0LCBsYW5lKSk7XG4gICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrRm9yY2VVcGRhdGVTY2hlZHVsZWQgJiZcbiAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0ZvcmNlVXBkYXRlU2NoZWR1bGVkKGluc3QsIGxhbmUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVwb3J0R2xvYmFsRXJyb3IgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXBvcnRFcnJvclxuICAgICAgICAgID8gcmVwb3J0RXJyb3JcbiAgICAgICAgICA6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHdpbmRvdyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHdpbmRvdy5FcnJvckV2ZW50XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBldmVudCA9IG5ldyB3aW5kb3cuRXJyb3JFdmVudChcImVycm9yXCIsIHtcbiAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6ICEwLFxuICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogITAsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICA/IFN0cmluZyhlcnJvci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpKSByZXR1cm47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHByb2Nlc3MgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcm9jZXNzLmVtaXRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25cIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0sXG4gICAgICBjb21wb25lbnROYW1lID0gbnVsbCxcbiAgICAgIGVycm9yQm91bmRhcnlOYW1lID0gbnVsbCxcbiAgICAgIFNlbGVjdGl2ZUh5ZHJhdGlvbkV4Y2VwdGlvbiA9IEVycm9yKFxuICAgICAgICBcIlRoaXMgaXMgbm90IGEgcmVhbCBlcnJvci4gSXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgUmVhY3QncyBzZWxlY3RpdmUgaHlkcmF0aW9uIGZlYXR1cmUuIElmIHRoaXMgbGVha3MgaW50byB1c2Vyc3BhY2UsIGl0J3MgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApLFxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9ICExO1xuICAgIHZhciBkaWRXYXJuQWJvdXRCYWRDbGFzcyA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgICB2YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVzID0ge307XG4gICAgdmFyIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgICB2YXIgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9ICExO1xuICAgIHZhciBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlciA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucyA9IHt9O1xuICAgIHZhciBTVVNQRU5ERURfTUFSS0VSID0ge1xuICAgICAgICBkZWh5ZHJhdGVkOiBudWxsLFxuICAgICAgICB0cmVlQ29udGV4dDogbnVsbCxcbiAgICAgICAgcmV0cnlMYW5lOiAwLFxuICAgICAgICBoeWRyYXRpb25FcnJvcnM6IG51bGxcbiAgICAgIH0sXG4gICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9ICExLFxuICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBudWxsO1xuICAgIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbmV3IFNldCgpO1xuICAgIHZhciBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSAhMSxcbiAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSAhMSxcbiAgICAgIG5lZWRzRm9ybVJlc2V0ID0gITEsXG4gICAgICBQb3NzaWJseVdlYWtTZXQgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrU2V0ID8gV2Vha1NldCA6IFNldCxcbiAgICAgIG5leHRFZmZlY3QgPSBudWxsLFxuICAgICAgaW5Qcm9ncmVzc0xhbmVzID0gbnVsbCxcbiAgICAgIGluUHJvZ3Jlc3NSb290ID0gbnVsbCxcbiAgICAgIGhvc3RQYXJlbnQgPSBudWxsLFxuICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gITEsXG4gICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IG51bGwsXG4gICAgICBzdXNwZW5zZXlDb21taXRGbGFnID0gODE5MixcbiAgICAgIERlZmF1bHRBc3luY0Rpc3BhdGNoZXIgPSB7XG4gICAgICAgIGdldENhY2hlRm9yVHlwZTogZnVuY3Rpb24gKHJlc291cmNlVHlwZSkge1xuICAgICAgICAgIHZhciBjYWNoZSA9IHJlYWRDb250ZXh0KENhY2hlQ29udGV4dCksXG4gICAgICAgICAgICBjYWNoZUZvclR5cGUgPSBjYWNoZS5kYXRhLmdldChyZXNvdXJjZVR5cGUpO1xuICAgICAgICAgIHZvaWQgMCA9PT0gY2FjaGVGb3JUeXBlICYmXG4gICAgICAgICAgICAoKGNhY2hlRm9yVHlwZSA9IHJlc291cmNlVHlwZSgpKSxcbiAgICAgICAgICAgIGNhY2hlLmRhdGEuc2V0KHJlc291cmNlVHlwZSwgY2FjaGVGb3JUeXBlKSk7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlRm9yVHlwZTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0T3duZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU3ltYm9sICYmIFN5bWJvbC5mb3IpIHtcbiAgICAgIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3IuY29tcG9uZW50XCIpO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3IuaGFzX3BzZXVkb19jbGFzc1wiKTtcbiAgICAgIHN5bWJvbEZvcihcInNlbGVjdG9yLnJvbGVcIik7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci50ZXN0X2lkXCIpO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3IudGV4dFwiKTtcbiAgICB9XG4gICAgdmFyIGNvbW1pdEhvb2tzID0gW10sXG4gICAgICBQb3NzaWJseVdlYWtNYXAgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrTWFwID8gV2Vha01hcCA6IE1hcCxcbiAgICAgIE5vQ29udGV4dCA9IDAsXG4gICAgICBSZW5kZXJDb250ZXh0ID0gMixcbiAgICAgIENvbW1pdENvbnRleHQgPSA0LFxuICAgICAgUm9vdEluUHJvZ3Jlc3MgPSAwLFxuICAgICAgUm9vdEZhdGFsRXJyb3JlZCA9IDEsXG4gICAgICBSb290RXJyb3JlZCA9IDIsXG4gICAgICBSb290U3VzcGVuZGVkID0gMyxcbiAgICAgIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgPSA0LFxuICAgICAgUm9vdFN1c3BlbmRlZEF0VGhlU2hlbGwgPSA2LFxuICAgICAgUm9vdENvbXBsZXRlZCA9IDUsXG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gTm9Db250ZXh0LFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbCxcbiAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gMCxcbiAgICAgIE5vdFN1c3BlbmRlZCA9IDAsXG4gICAgICBTdXNwZW5kZWRPbkVycm9yID0gMSxcbiAgICAgIFN1c3BlbmRlZE9uRGF0YSA9IDIsXG4gICAgICBTdXNwZW5kZWRPbkltbWVkaWF0ZSA9IDMsXG4gICAgICBTdXNwZW5kZWRPbkluc3RhbmNlID0gNCxcbiAgICAgIFN1c3BlbmRlZE9uSW5zdGFuY2VBbmRSZWFkeVRvQ29udGludWUgPSA1LFxuICAgICAgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlID0gNixcbiAgICAgIFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZSA9IDcsXG4gICAgICBTdXNwZW5kZWRPbkh5ZHJhdGlvbiA9IDgsXG4gICAgICBTdXNwZW5kZWRPbkFjdGlvbiA9IDksXG4gICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZCxcbiAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzID0gITEsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZyA9ICExLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkQXR0YWNoUGluZ0xpc3RlbmVyID0gITEsXG4gICAgICBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluUHJvZ3Jlc3MsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPSAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUgPSAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzID0gMCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkSW5jbHVkZVJlY3Vyc2l2ZVJlbmRlclVwZGF0ZSA9ICExLFxuICAgICAgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IDAsXG4gICAgICBGQUxMQkFDS19USFJPVFRMRV9NUyA9IDMwMCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBJbmZpbml0eSxcbiAgICAgIFJFTkRFUl9USU1FT1VUX01TID0gNTAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGwsXG4gICAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGwsXG4gICAgICBJTU1FRElBVEVfQ09NTUlUID0gMCxcbiAgICAgIFNVU1BFTkRFRF9DT01NSVQgPSAxLFxuICAgICAgVEhST1RUTEVEX0NPTU1JVCA9IDIsXG4gICAgICBOT19QRU5ESU5HX0VGRkVDVFMgPSAwLFxuICAgICAgUEVORElOR19NVVRBVElPTl9QSEFTRSA9IDEsXG4gICAgICBQRU5ESU5HX0xBWU9VVF9QSEFTRSA9IDIsXG4gICAgICBQRU5ESU5HX0FGVEVSX01VVEFUSU9OX1BIQVNFID0gMyxcbiAgICAgIFBFTkRJTkdfU1BBV05FRF9XT1JLID0gNCxcbiAgICAgIFBFTkRJTkdfUEFTU0lWRV9QSEFTRSA9IDUsXG4gICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IDAsXG4gICAgICBwZW5kaW5nRWZmZWN0c1Jvb3QgPSBudWxsLFxuICAgICAgcGVuZGluZ0ZpbmlzaGVkV29yayA9IG51bGwsXG4gICAgICBwZW5kaW5nRWZmZWN0c0xhbmVzID0gMCxcbiAgICAgIHBlbmRpbmdFZmZlY3RzUmVtYWluaW5nTGFuZXMgPSAwLFxuICAgICAgcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucyA9IG51bGwsXG4gICAgICBwZW5kaW5nUmVjb3ZlcmFibGVFcnJvcnMgPSBudWxsLFxuICAgICAgTkVTVEVEX1VQREFURV9MSU1JVCA9IDUwLFxuICAgICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwLFxuICAgICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbCxcbiAgICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9ICExLFxuICAgICAgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9ICExLFxuICAgICAgTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUID0gNTAsXG4gICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwLFxuICAgICAgcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGwsXG4gICAgICBpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSAhMSxcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBudWxsLFxuICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSAhMTtcbiAgICB2YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICAgIHZhciBmYWtlQWN0Q2FsbGJhY2tOb2RlJDEgPSB7fSxcbiAgICAgIGZpcnN0U2NoZWR1bGVkUm9vdCA9IG51bGwsXG4gICAgICBsYXN0U2NoZWR1bGVkUm9vdCA9IG51bGwsXG4gICAgICBkaWRTY2hlZHVsZU1pY3JvdGFzayA9ICExLFxuICAgICAgZGlkU2NoZWR1bGVNaWNyb3Rhc2tfYWN0ID0gITEsXG4gICAgICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSAhMSxcbiAgICAgIGlzRmx1c2hpbmdXb3JrID0gITEsXG4gICAgICBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IDAsXG4gICAgICBmYWtlQWN0Q2FsbGJhY2tOb2RlID0ge307XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2ltcGxlRXZlbnRQbHVnaW5FdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9IHNpbXBsZUV2ZW50UGx1Z2luRXZlbnRzW2ldLFxuICAgICAgICAgIGRvbUV2ZW50TmFtZSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBldmVudE5hbWUgPSBldmVudE5hbWVbMF0udG9VcHBlckNhc2UoKSArIGV2ZW50TmFtZS5zbGljZSgxKTtcbiAgICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChkb21FdmVudE5hbWUsIFwib25cIiArIGV2ZW50TmFtZSk7XG4gICAgICB9XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KEFOSU1BVElPTl9FTkQsIFwib25BbmltYXRpb25FbmRcIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KEFOSU1BVElPTl9JVEVSQVRJT04sIFwib25BbmltYXRpb25JdGVyYXRpb25cIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KEFOSU1BVElPTl9TVEFSVCwgXCJvbkFuaW1hdGlvblN0YXJ0XCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChcImRibGNsaWNrXCIsIFwib25Eb3VibGVDbGlja1wiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoXCJmb2N1c2luXCIsIFwib25Gb2N1c1wiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoXCJmb2N1c291dFwiLCBcIm9uQmx1clwiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoVFJBTlNJVElPTl9SVU4sIFwib25UcmFuc2l0aW9uUnVuXCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChUUkFOU0lUSU9OX1NUQVJULCBcIm9uVHJhbnNpdGlvblN0YXJ0XCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChUUkFOU0lUSU9OX0NBTkNFTCwgXCJvblRyYW5zaXRpb25DYW5jZWxcIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KFRSQU5TSVRJT05fRU5ELCBcIm9uVHJhbnNpdGlvbkVuZFwiKTtcbiAgICB9KSgpO1xuICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvbk1vdXNlRW50ZXJcIiwgW1wibW91c2VvdXRcIiwgXCJtb3VzZW92ZXJcIl0pO1xuICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvbk1vdXNlTGVhdmVcIiwgW1wibW91c2VvdXRcIiwgXCJtb3VzZW92ZXJcIl0pO1xuICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvblBvaW50ZXJFbnRlclwiLCBbXCJwb2ludGVyb3V0XCIsIFwicG9pbnRlcm92ZXJcIl0pO1xuICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvblBvaW50ZXJMZWF2ZVwiLCBbXCJwb2ludGVyb3V0XCIsIFwicG9pbnRlcm92ZXJcIl0pO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25DaGFuZ2VcIixcbiAgICAgIFwiY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcbiAgICAgICAgXCIgXCJcbiAgICAgIClcbiAgICApO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25TZWxlY3RcIixcbiAgICAgIFwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlXCIuc3BsaXQoXG4gICAgICAgIFwiIFwiXG4gICAgICApXG4gICAgKTtcbiAgICByZWdpc3RlclR3b1BoYXNlRXZlbnQoXCJvbkJlZm9yZUlucHV0XCIsIFtcbiAgICAgIFwiY29tcG9zaXRpb25lbmRcIixcbiAgICAgIFwia2V5cHJlc3NcIixcbiAgICAgIFwidGV4dElucHV0XCIsXG4gICAgICBcInBhc3RlXCJcbiAgICBdKTtcbiAgICByZWdpc3RlclR3b1BoYXNlRXZlbnQoXG4gICAgICBcIm9uQ29tcG9zaXRpb25FbmRcIixcbiAgICAgIFwiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIilcbiAgICApO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25Db21wb3NpdGlvblN0YXJ0XCIsXG4gICAgICBcImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIilcbiAgICApO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25Db21wb3NpdGlvblVwZGF0ZVwiLFxuICAgICAgXCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKVxuICAgICk7XG4gICAgdmFyIG1lZGlhRXZlbnRUeXBlcyA9XG4gICAgICAgIFwiYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmdcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApLFxuICAgICAgbm9uRGVsZWdhdGVkRXZlbnRzID0gbmV3IFNldChcbiAgICAgICAgXCJiZWZvcmV0b2dnbGUgY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgc2Nyb2xsZW5kIHRvZ2dsZVwiXG4gICAgICAgICAgLnNwbGl0KFwiIFwiKVxuICAgICAgICAgIC5jb25jYXQobWVkaWFFdmVudFR5cGVzKVxuICAgICAgKSxcbiAgICAgIGxpc3RlbmluZ01hcmtlciA9IFwiX3JlYWN0TGlzdGVuaW5nXCIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxcbiAgICAgIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSAhMSxcbiAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSAhMSxcbiAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVHlwZSA9ICExLFxuICAgICAgZGlkV2FybkZvcm1BY3Rpb25OYW1lID0gITEsXG4gICAgICBkaWRXYXJuRm9ybUFjdGlvblRhcmdldCA9ICExLFxuICAgICAgZGlkV2FybkZvcm1BY3Rpb25NZXRob2QgPSAhMSxcbiAgICAgIGRpZFdhcm5Qb3BvdmVyVGFyZ2V0T2JqZWN0ID0gITE7XG4gICAgdmFyIGRpZFdhcm5Gb3JOZXdCb29sZWFuUHJvcHNXaXRoRW1wdHlWYWx1ZSA9IHt9O1xuICAgIHZhciBOT1JNQUxJWkVfTkVXTElORVNfUkVHRVggPSAvXFxyXFxuPy9nLFxuICAgICAgTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYID0gL1xcdTAwMDB8XFx1RkZGRC9nLFxuICAgICAgeGxpbmtOYW1lc3BhY2UgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICAgIHhtbE5hbWVzcGFjZSA9IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXG4gICAgICBFWFBFQ1RFRF9GT1JNX0FDVElPTl9VUkwgPVxuICAgICAgICBcImphdmFzY3JpcHQ6dGhyb3cgbmV3IEVycm9yKCdSZWFjdCBmb3JtIHVuZXhwZWN0ZWRseSBzdWJtaXR0ZWQuJylcIixcbiAgICAgIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HID0gXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIixcbiAgICAgIFNVU1BFTlNFX1NUQVJUX0RBVEEgPSBcIiRcIixcbiAgICAgIFNVU1BFTlNFX0VORF9EQVRBID0gXCIvJFwiLFxuICAgICAgU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBID0gXCIkP1wiLFxuICAgICAgU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSA9IFwiJCFcIixcbiAgICAgIFBSRUFNQkxFX0NPTlRSSUJVVElPTl9IVE1MID0gMSxcbiAgICAgIFBSRUFNQkxFX0NPTlRSSUJVVElPTl9CT0RZID0gMixcbiAgICAgIFBSRUFNQkxFX0NPTlRSSUJVVElPTl9IRUFEID0gNCxcbiAgICAgIEZPUk1fU1RBVEVfSVNfTUFUQ0hJTkcgPSBcIkYhXCIsXG4gICAgICBGT1JNX1NUQVRFX0lTX05PVF9NQVRDSElORyA9IFwiRlwiLFxuICAgICAgRE9DVU1FTlRfUkVBRFlfU1RBVEVfQ09NUExFVEUgPSBcImNvbXBsZXRlXCIsXG4gICAgICBTVFlMRSA9IFwic3R5bGVcIixcbiAgICAgIEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZSA9IDAsXG4gICAgICBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZyA9IDEsXG4gICAgICBIb3N0Q29udGV4dE5hbWVzcGFjZU1hdGggPSAyLFxuICAgICAgZXZlbnRzRW5hYmxlZCA9IG51bGwsXG4gICAgICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IG51bGwsXG4gICAgICB3YXJuZWRVbmtub3duVGFncyA9IHsgZGlhbG9nOiAhMCwgd2VidmlldzogITAgfSxcbiAgICAgIGN1cnJlbnRQb3BzdGF0ZVRyYW5zaXRpb25FdmVudCA9IG51bGwsXG4gICAgICBzY2hlZHVsZVRpbWVvdXQgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBzZXRUaW1lb3V0ID8gc2V0VGltZW91dCA6IHZvaWQgMCxcbiAgICAgIGNhbmNlbFRpbWVvdXQgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjbGVhclRpbWVvdXQgPyBjbGVhclRpbWVvdXQgOiB2b2lkIDAsXG4gICAgICBub1RpbWVvdXQgPSAtMSxcbiAgICAgIGxvY2FsUHJvbWlzZSA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFByb21pc2UgPyBQcm9taXNlIDogdm9pZCAwLFxuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2sgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBxdWV1ZU1pY3JvdGFza1xuICAgICAgICAgID8gcXVldWVNaWNyb3Rhc2tcbiAgICAgICAgICA6IFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBsb2NhbFByb21pc2VcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUHJvbWlzZVxuICAgICAgICAgICAgICAgICAgLnJlc29sdmUobnVsbClcbiAgICAgICAgICAgICAgICAgIC50aGVuKGNhbGxiYWNrKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGhhbmRsZUVycm9ySW5OZXh0VGljayk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogc2NoZWR1bGVUaW1lb3V0LFxuICAgICAgcHJldmlvdXNIeWRyYXRhYmxlT25FbnRlcmluZ1Njb3BlZFNpbmdsZXRvbiA9IG51bGwsXG4gICAgICBOb3RMb2FkZWQgPSAwLFxuICAgICAgTG9hZGVkID0gMSxcbiAgICAgIEVycm9yZWQgPSAyLFxuICAgICAgU2V0dGxlZCA9IDMsXG4gICAgICBJbnNlcnRlZCA9IDQsXG4gICAgICBwcmVsb2FkUHJvcHNNYXAgPSBuZXcgTWFwKCksXG4gICAgICBwcmVjb25uZWN0c1NldCA9IG5ldyBTZXQoKSxcbiAgICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLmQ7XG4gICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMuZCA9IHtcbiAgICAgIGY6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzV2FzUmVuZGVyaW5nID0gcHJldmlvdXNEaXNwYXRjaGVyLmYoKSxcbiAgICAgICAgICB3YXNSZW5kZXJpbmcgPSBmbHVzaFN5bmNXb3JrJDEoKTtcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzV2FzUmVuZGVyaW5nIHx8IHdhc1JlbmRlcmluZztcbiAgICAgIH0sXG4gICAgICByOiBmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgICB2YXIgZm9ybUluc3QgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKGZvcm0pO1xuICAgICAgICBudWxsICE9PSBmb3JtSW5zdCAmJiA1ID09PSBmb3JtSW5zdC50YWcgJiYgXCJmb3JtXCIgPT09IGZvcm1JbnN0LnR5cGVcbiAgICAgICAgICA/IHJlcXVlc3RGb3JtUmVzZXQkMShmb3JtSW5zdClcbiAgICAgICAgICA6IHByZXZpb3VzRGlzcGF0Y2hlci5yKGZvcm0pO1xuICAgICAgfSxcbiAgICAgIEQ6IGZ1bmN0aW9uIChocmVmKSB7XG4gICAgICAgIHByZXZpb3VzRGlzcGF0Y2hlci5EKGhyZWYpO1xuICAgICAgICBwcmVjb25uZWN0QXMoXCJkbnMtcHJlZmV0Y2hcIiwgaHJlZiwgbnVsbCk7XG4gICAgICB9LFxuICAgICAgQzogZnVuY3Rpb24gKGhyZWYsIGNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHByZXZpb3VzRGlzcGF0Y2hlci5DKGhyZWYsIGNyb3NzT3JpZ2luKTtcbiAgICAgICAgcHJlY29ubmVjdEFzKFwicHJlY29ubmVjdFwiLCBocmVmLCBjcm9zc09yaWdpbik7XG4gICAgICB9LFxuICAgICAgTDogZnVuY3Rpb24gKGhyZWYsIGFzLCBvcHRpb25zKSB7XG4gICAgICAgIHByZXZpb3VzRGlzcGF0Y2hlci5MKGhyZWYsIGFzLCBvcHRpb25zKTtcbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxEb2N1bWVudDtcbiAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQgJiYgaHJlZiAmJiBhcykge1xuICAgICAgICAgIHZhciBwcmVsb2FkU2VsZWN0b3IgPVxuICAgICAgICAgICAgJ2xpbmtbcmVsPVwicHJlbG9hZFwiXVthcz1cIicgK1xuICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhhcykgK1xuICAgICAgICAgICAgJ1wiXSc7XG4gICAgICAgICAgXCJpbWFnZVwiID09PSBhc1xuICAgICAgICAgICAgPyBvcHRpb25zICYmIG9wdGlvbnMuaW1hZ2VTcmNTZXRcbiAgICAgICAgICAgICAgPyAoKHByZWxvYWRTZWxlY3RvciArPVxuICAgICAgICAgICAgICAgICAgJ1tpbWFnZXNyY3NldD1cIicgK1xuICAgICAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5pbWFnZVNyY1NldFxuICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAnXCJdJyksXG4gICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW1hZ2VTaXplcyAmJlxuICAgICAgICAgICAgICAgICAgKHByZWxvYWRTZWxlY3RvciArPVxuICAgICAgICAgICAgICAgICAgICAnW2ltYWdlc2l6ZXM9XCInICtcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmltYWdlU2l6ZXNcbiAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICdcIl0nKSlcbiAgICAgICAgICAgICAgOiAocHJlbG9hZFNlbGVjdG9yICs9XG4gICAgICAgICAgICAgICAgICAnW2hyZWY9XCInICtcbiAgICAgICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoaHJlZikgK1xuICAgICAgICAgICAgICAgICAgJ1wiXScpXG4gICAgICAgICAgICA6IChwcmVsb2FkU2VsZWN0b3IgKz1cbiAgICAgICAgICAgICAgICAnW2hyZWY9XCInICtcbiAgICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGhyZWYpICtcbiAgICAgICAgICAgICAgICAnXCJdJyk7XG4gICAgICAgICAgdmFyIGtleSA9IHByZWxvYWRTZWxlY3RvcjtcbiAgICAgICAgICBzd2l0Y2ggKGFzKSB7XG4gICAgICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICAgICAga2V5ID0gZ2V0U3R5bGVLZXkoaHJlZik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgICAgICAgICBrZXkgPSBnZXRTY3JpcHRLZXkoaHJlZik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByZWxvYWRQcm9wc01hcC5oYXMoa2V5KSB8fFxuICAgICAgICAgICAgKChocmVmID0gYXNzaWduKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVsOiBcInByZWxvYWRcIixcbiAgICAgICAgICAgICAgICBocmVmOlxuICAgICAgICAgICAgICAgICAgXCJpbWFnZVwiID09PSBhcyAmJiBvcHRpb25zICYmIG9wdGlvbnMuaW1hZ2VTcmNTZXRcbiAgICAgICAgICAgICAgICAgICAgPyB2b2lkIDBcbiAgICAgICAgICAgICAgICAgICAgOiBocmVmLFxuICAgICAgICAgICAgICAgIGFzOiBhc1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHByZWxvYWRQcm9wc01hcC5zZXQoa2V5LCBocmVmKSxcbiAgICAgICAgICAgIG51bGwgIT09IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihwcmVsb2FkU2VsZWN0b3IpIHx8XG4gICAgICAgICAgICAgIChcInN0eWxlXCIgPT09IGFzICYmXG4gICAgICAgICAgICAgICAgb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShrZXkpXG4gICAgICAgICAgICAgICAgKSkgfHxcbiAgICAgICAgICAgICAgKFwic2NyaXB0XCIgPT09IGFzICYmXG4gICAgICAgICAgICAgICAgb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShrZXkpKSkgfHxcbiAgICAgICAgICAgICAgKChhcyA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIikpLFxuICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhhcywgXCJsaW5rXCIsIGhyZWYpLFxuICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGFzKSxcbiAgICAgICAgICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGFzKSkpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbTogZnVuY3Rpb24gKGhyZWYsIG9wdGlvbnMpIHtcbiAgICAgICAgcHJldmlvdXNEaXNwYXRjaGVyLm0oaHJlZiwgb3B0aW9ucyk7XG4gICAgICAgIHZhciBvd25lckRvY3VtZW50ID0gZ2xvYmFsRG9jdW1lbnQ7XG4gICAgICAgIGlmIChvd25lckRvY3VtZW50ICYmIGhyZWYpIHtcbiAgICAgICAgICB2YXIgYXMgPVxuICAgICAgICAgICAgICBvcHRpb25zICYmIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzID8gb3B0aW9ucy5hcyA6IFwic2NyaXB0XCIsXG4gICAgICAgICAgICBwcmVsb2FkU2VsZWN0b3IgPVxuICAgICAgICAgICAgICAnbGlua1tyZWw9XCJtb2R1bGVwcmVsb2FkXCJdW2FzPVwiJyArXG4gICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoYXMpICtcbiAgICAgICAgICAgICAgJ1wiXVtocmVmPVwiJyArXG4gICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoaHJlZikgK1xuICAgICAgICAgICAgICAnXCJdJyxcbiAgICAgICAgICAgIGtleSA9IHByZWxvYWRTZWxlY3RvcjtcbiAgICAgICAgICBzd2l0Y2ggKGFzKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXVkaW93b3JrbGV0XCI6XG4gICAgICAgICAgICBjYXNlIFwicGFpbnR3b3JrbGV0XCI6XG4gICAgICAgICAgICBjYXNlIFwic2VydmljZXdvcmtlclwiOlxuICAgICAgICAgICAgY2FzZSBcInNoYXJlZHdvcmtlclwiOlxuICAgICAgICAgICAgY2FzZSBcIndvcmtlclwiOlxuICAgICAgICAgICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgICAgICAgICBrZXkgPSBnZXRTY3JpcHRLZXkoaHJlZik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFwcmVsb2FkUHJvcHNNYXAuaGFzKGtleSkgJiZcbiAgICAgICAgICAgICgoaHJlZiA9IGFzc2lnbih7IHJlbDogXCJtb2R1bGVwcmVsb2FkXCIsIGhyZWY6IGhyZWYgfSwgb3B0aW9ucykpLFxuICAgICAgICAgICAgcHJlbG9hZFByb3BzTWFwLnNldChrZXksIGhyZWYpLFxuICAgICAgICAgICAgbnVsbCA9PT0gb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKHByZWxvYWRTZWxlY3RvcikpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGFzKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJhdWRpb3dvcmtsZXRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBhaW50d29ya2xldFwiOlxuICAgICAgICAgICAgICBjYXNlIFwic2VydmljZXdvcmtlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwic2hhcmVkd29ya2VyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJ3b3JrZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgICAgICAgICAgIGlmIChvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSkpKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXMgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoYXMsIFwibGlua1wiLCBocmVmKTtcbiAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoYXMpO1xuICAgICAgICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGFzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBYOiBmdW5jdGlvbiAoc3JjLCBvcHRpb25zKSB7XG4gICAgICAgIHByZXZpb3VzRGlzcGF0Y2hlci5YKHNyYywgb3B0aW9ucyk7XG4gICAgICAgIHZhciBvd25lckRvY3VtZW50ID0gZ2xvYmFsRG9jdW1lbnQ7XG4gICAgICAgIGlmIChvd25lckRvY3VtZW50ICYmIHNyYykge1xuICAgICAgICAgIHZhciBzY3JpcHRzID0gZ2V0UmVzb3VyY2VzRnJvbVJvb3Qob3duZXJEb2N1bWVudCkuaG9pc3RhYmxlU2NyaXB0cyxcbiAgICAgICAgICAgIGtleSA9IGdldFNjcmlwdEtleShzcmMpLFxuICAgICAgICAgICAgcmVzb3VyY2UgPSBzY3JpcHRzLmdldChrZXkpO1xuICAgICAgICAgIHJlc291cmNlIHx8XG4gICAgICAgICAgICAoKHJlc291cmNlID0gb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICBnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoa2V5KVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICByZXNvdXJjZSB8fFxuICAgICAgICAgICAgICAoKHNyYyA9IGFzc2lnbih7IHNyYzogc3JjLCBhc3luYzogITAgfSwgb3B0aW9ucykpLFxuICAgICAgICAgICAgICAob3B0aW9ucyA9IHByZWxvYWRQcm9wc01hcC5nZXQoa2V5KSkgJiZcbiAgICAgICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclNjcmlwdChzcmMsIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAocmVzb3VyY2UgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpLFxuICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKHJlc291cmNlKSxcbiAgICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMocmVzb3VyY2UsIFwibGlua1wiLCBzcmMpLFxuICAgICAgICAgICAgICBvd25lckRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocmVzb3VyY2UpKSxcbiAgICAgICAgICAgIChyZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzY3JpcHRcIixcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IHJlc291cmNlLFxuICAgICAgICAgICAgICBjb3VudDogMSxcbiAgICAgICAgICAgICAgc3RhdGU6IG51bGxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2NyaXB0cy5zZXQoa2V5LCByZXNvdXJjZSkpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgUzogZnVuY3Rpb24gKGhyZWYsIHByZWNlZGVuY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcHJldmlvdXNEaXNwYXRjaGVyLlMoaHJlZiwgcHJlY2VkZW5jZSwgb3B0aW9ucyk7XG4gICAgICAgIHZhciBvd25lckRvY3VtZW50ID0gZ2xvYmFsRG9jdW1lbnQ7XG4gICAgICAgIGlmIChvd25lckRvY3VtZW50ICYmIGhyZWYpIHtcbiAgICAgICAgICB2YXIgc3R5bGVzID0gZ2V0UmVzb3VyY2VzRnJvbVJvb3Qob3duZXJEb2N1bWVudCkuaG9pc3RhYmxlU3R5bGVzLFxuICAgICAgICAgICAga2V5ID0gZ2V0U3R5bGVLZXkoaHJlZik7XG4gICAgICAgICAgcHJlY2VkZW5jZSA9IHByZWNlZGVuY2UgfHwgXCJkZWZhdWx0XCI7XG4gICAgICAgICAgdmFyIHJlc291cmNlID0gc3R5bGVzLmdldChrZXkpO1xuICAgICAgICAgIGlmICghcmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHsgbG9hZGluZzogTm90TG9hZGVkLCBwcmVsb2FkOiBudWxsIH07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICBnZXRTdHlsZXNoZWV0U2VsZWN0b3JGcm9tS2V5KGtleSlcbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3RhdGUubG9hZGluZyA9IExvYWRlZCB8IEluc2VydGVkO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGhyZWYgPSBhc3NpZ24oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcmVsOiBcInN0eWxlc2hlZXRcIixcbiAgICAgICAgICAgICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgICAgICAgICAgICBcImRhdGEtcHJlY2VkZW5jZVwiOiBwcmVjZWRlbmNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIChvcHRpb25zID0gcHJlbG9hZFByb3BzTWFwLmdldChrZXkpKSAmJlxuICAgICAgICAgICAgICAgIGFkb3B0UHJlbG9hZFByb3BzRm9yU3R5bGVzaGVldChocmVmLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgdmFyIGxpbmsgPSAocmVzb3VyY2UgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKTtcbiAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShsaW5rKTtcbiAgICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMobGluaywgXCJsaW5rXCIsIGhyZWYpO1xuICAgICAgICAgICAgICBsaW5rLl9wID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIGxpbmsub25sb2FkID0gcmVzb2x2ZTtcbiAgICAgICAgICAgICAgICBsaW5rLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5sb2FkaW5nIHw9IExvYWRlZDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5sb2FkaW5nIHw9IEVycm9yZWQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBzdGF0ZS5sb2FkaW5nIHw9IEluc2VydGVkO1xuICAgICAgICAgICAgICBpbnNlcnRTdHlsZXNoZWV0KHJlc291cmNlLCBwcmVjZWRlbmNlLCBvd25lckRvY3VtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc291cmNlID0ge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0eWxlc2hlZXRcIixcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IHJlc291cmNlLFxuICAgICAgICAgICAgICBjb3VudDogMSxcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc3R5bGVzLnNldChrZXksIHJlc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBNOiBmdW5jdGlvbiAoc3JjLCBvcHRpb25zKSB7XG4gICAgICAgIHByZXZpb3VzRGlzcGF0Y2hlci5NKHNyYywgb3B0aW9ucyk7XG4gICAgICAgIHZhciBvd25lckRvY3VtZW50ID0gZ2xvYmFsRG9jdW1lbnQ7XG4gICAgICAgIGlmIChvd25lckRvY3VtZW50ICYmIHNyYykge1xuICAgICAgICAgIHZhciBzY3JpcHRzID0gZ2V0UmVzb3VyY2VzRnJvbVJvb3Qob3duZXJEb2N1bWVudCkuaG9pc3RhYmxlU2NyaXB0cyxcbiAgICAgICAgICAgIGtleSA9IGdldFNjcmlwdEtleShzcmMpLFxuICAgICAgICAgICAgcmVzb3VyY2UgPSBzY3JpcHRzLmdldChrZXkpO1xuICAgICAgICAgIHJlc291cmNlIHx8XG4gICAgICAgICAgICAoKHJlc291cmNlID0gb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICBnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoa2V5KVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICByZXNvdXJjZSB8fFxuICAgICAgICAgICAgICAoKHNyYyA9IGFzc2lnbih7IHNyYzogc3JjLCBhc3luYzogITAsIHR5cGU6IFwibW9kdWxlXCIgfSwgb3B0aW9ucykpLFxuICAgICAgICAgICAgICAob3B0aW9ucyA9IHByZWxvYWRQcm9wc01hcC5nZXQoa2V5KSkgJiZcbiAgICAgICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclNjcmlwdChzcmMsIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAocmVzb3VyY2UgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpLFxuICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKHJlc291cmNlKSxcbiAgICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMocmVzb3VyY2UsIFwibGlua1wiLCBzcmMpLFxuICAgICAgICAgICAgICBvd25lckRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocmVzb3VyY2UpKSxcbiAgICAgICAgICAgIChyZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzY3JpcHRcIixcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IHJlc291cmNlLFxuICAgICAgICAgICAgICBjb3VudDogMSxcbiAgICAgICAgICAgICAgc3RhdGU6IG51bGxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2NyaXB0cy5zZXQoa2V5LCByZXNvdXJjZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgZ2xvYmFsRG9jdW1lbnQgPSBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgZG9jdW1lbnQgPyBudWxsIDogZG9jdW1lbnQsXG4gICAgICB0YWdDYWNoZXMgPSBudWxsLFxuICAgICAgc3VzcGVuZGVkU3RhdGUgPSBudWxsLFxuICAgICAgTEFTVF9QUkVDRURFTkNFID0gbnVsbCxcbiAgICAgIHByZWNlZGVuY2VzQnlSb290ID0gbnVsbCxcbiAgICAgIE5vdFBlbmRpbmdUcmFuc2l0aW9uID0gTm90UGVuZGluZyxcbiAgICAgIEhvc3RUcmFuc2l0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgICAgUHJvdmlkZXI6IG51bGwsXG4gICAgICAgIENvbnN1bWVyOiBudWxsLFxuICAgICAgICBfY3VycmVudFZhbHVlOiBOb3RQZW5kaW5nVHJhbnNpdGlvbixcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTI6IE5vdFBlbmRpbmdUcmFuc2l0aW9uLFxuICAgICAgICBfdGhyZWFkQ291bnQ6IDBcbiAgICAgIH0sXG4gICAgICBiYWRnZUZvcm1hdCA9IFwiJWMlcyVjIFwiLFxuICAgICAgYmFkZ2VTdHlsZSA9XG4gICAgICAgIFwiYmFja2dyb3VuZDogI2U2ZTZlNjtiYWNrZ3JvdW5kOiBsaWdodC1kYXJrKHJnYmEoMCwwLDAsMC4xKSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI1KSk7Y29sb3I6ICMwMDAwMDA7Y29sb3I6IGxpZ2h0LWRhcmsoIzAwMDAwMCwgI2ZmZmZmZik7Ym9yZGVyLXJhZGl1czogMnB4XCIsXG4gICAgICByZXNldFN0eWxlID0gXCJcIixcbiAgICAgIHBhZCA9IFwiIFwiLFxuICAgICAgYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuICAgIHZhciBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gITE7XG4gICAgdmFyIG92ZXJyaWRlSG9va1N0YXRlID0gbnVsbCxcbiAgICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IG51bGwsXG4gICAgICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBudWxsLFxuICAgICAgb3ZlcnJpZGVQcm9wcyA9IG51bGwsXG4gICAgICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IG51bGwsXG4gICAgICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IG51bGwsXG4gICAgICBzY2hlZHVsZVVwZGF0ZSA9IG51bGwsXG4gICAgICBzZXRFcnJvckhhbmRsZXIgPSBudWxsLFxuICAgICAgc2V0U3VzcGVuc2VIYW5kbGVyID0gbnVsbDtcbiAgICBvdmVycmlkZUhvb2tTdGF0ZSA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgsIHZhbHVlKSB7XG4gICAgICBpZCA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG4gICAgICBudWxsICE9PSBpZCAmJlxuICAgICAgICAoKHBhdGggPSBjb3B5V2l0aFNldEltcGwoaWQubWVtb2l6ZWRTdGF0ZSwgcGF0aCwgMCwgdmFsdWUpKSxcbiAgICAgICAgKGlkLm1lbW9pemVkU3RhdGUgPSBwYXRoKSxcbiAgICAgICAgKGlkLmJhc2VTdGF0ZSA9IHBhdGgpLFxuICAgICAgICAoZmliZXIubWVtb2l6ZWRQcm9wcyA9IGFzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcykpLFxuICAgICAgICAocGF0aCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMikpLFxuICAgICAgICBudWxsICE9PSBwYXRoICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihwYXRoLCBmaWJlciwgMikpO1xuICAgIH07XG4gICAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCkge1xuICAgICAgaWQgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuICAgICAgbnVsbCAhPT0gaWQgJiZcbiAgICAgICAgKChwYXRoID0gY29weVdpdGhEZWxldGVJbXBsKGlkLm1lbW9pemVkU3RhdGUsIHBhdGgsIDApKSxcbiAgICAgICAgKGlkLm1lbW9pemVkU3RhdGUgPSBwYXRoKSxcbiAgICAgICAgKGlkLmJhc2VTdGF0ZSA9IHBhdGgpLFxuICAgICAgICAoZmliZXIubWVtb2l6ZWRQcm9wcyA9IGFzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcykpLFxuICAgICAgICAocGF0aCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMikpLFxuICAgICAgICBudWxsICE9PSBwYXRoICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihwYXRoLCBmaWJlciwgMikpO1xuICAgIH07XG4gICAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgICAgaWQgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuICAgICAgbnVsbCAhPT0gaWQgJiZcbiAgICAgICAgKChvbGRQYXRoID0gY29weVdpdGhSZW5hbWUoaWQubWVtb2l6ZWRTdGF0ZSwgb2xkUGF0aCwgbmV3UGF0aCkpLFxuICAgICAgICAoaWQubWVtb2l6ZWRTdGF0ZSA9IG9sZFBhdGgpLFxuICAgICAgICAoaWQuYmFzZVN0YXRlID0gb2xkUGF0aCksXG4gICAgICAgIChmaWJlci5tZW1vaXplZFByb3BzID0gYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKSksXG4gICAgICAgIChvbGRQYXRoID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKSksXG4gICAgICAgIG51bGwgIT09IG9sZFBhdGggJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKG9sZFBhdGgsIGZpYmVyLCAyKSk7XG4gICAgfTtcbiAgICBvdmVycmlkZVByb3BzID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoLCB2YWx1ZSkge1xuICAgICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhTZXRJbXBsKGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgsIDAsIHZhbHVlKTtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZSAmJiAoZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcyk7XG4gICAgICBwYXRoID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgIG51bGwgIT09IHBhdGggJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHBhdGgsIGZpYmVyLCAyKTtcbiAgICB9O1xuICAgIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoKSB7XG4gICAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aERlbGV0ZUltcGwoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCwgMCk7XG4gICAgICBmaWJlci5hbHRlcm5hdGUgJiYgKGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHMpO1xuICAgICAgcGF0aCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMik7XG4gICAgICBudWxsICE9PSBwYXRoICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihwYXRoLCBmaWJlciwgMik7XG4gICAgfTtcbiAgICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhSZW5hbWUoXG4gICAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMsXG4gICAgICAgIG9sZFBhdGgsXG4gICAgICAgIG5ld1BhdGhcbiAgICAgICk7XG4gICAgICBmaWJlci5hbHRlcm5hdGUgJiYgKGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHMpO1xuICAgICAgb2xkUGF0aCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMik7XG4gICAgICBudWxsICE9PSBvbGRQYXRoICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihvbGRQYXRoLCBmaWJlciwgMik7XG4gICAgfTtcbiAgICBzY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpO1xuICAgICAgbnVsbCAhPT0gcm9vdCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIDIpO1xuICAgIH07XG4gICAgc2V0RXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKG5ld1Nob3VsZEVycm9ySW1wbCkge1xuICAgICAgc2hvdWxkRXJyb3JJbXBsID0gbmV3U2hvdWxkRXJyb3JJbXBsO1xuICAgIH07XG4gICAgc2V0U3VzcGVuc2VIYW5kbGVyID0gZnVuY3Rpb24gKG5ld1Nob3VsZFN1c3BlbmRJbXBsKSB7XG4gICAgICBzaG91bGRTdXNwZW5kSW1wbCA9IG5ld1Nob3VsZFN1c3BlbmRJbXBsO1xuICAgIH07XG4gICAgdmFyIF9lbmFibGVkID0gITAsXG4gICAgICByZXR1cm5fdGFyZ2V0SW5zdCA9IG51bGwsXG4gICAgICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gITEsXG4gICAgICBxdWV1ZWRGb2N1cyA9IG51bGwsXG4gICAgICBxdWV1ZWREcmFnID0gbnVsbCxcbiAgICAgIHF1ZXVlZE1vdXNlID0gbnVsbCxcbiAgICAgIHF1ZXVlZFBvaW50ZXJzID0gbmV3IE1hcCgpLFxuICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzID0gbmV3IE1hcCgpLFxuICAgICAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzID0gW10sXG4gICAgICBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMgPVxuICAgICAgICBcIm1vdXNlZG93biBtb3VzZXVwIHRvdWNoY2FuY2VsIHRvdWNoZW5kIHRvdWNoc3RhcnQgYXV4Y2xpY2sgZGJsY2xpY2sgcG9pbnRlcmNhbmNlbCBwb2ludGVyZG93biBwb2ludGVydXAgZHJhZ2VuZCBkcmFnc3RhcnQgZHJvcCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgaW5wdXQgdGV4dElucHV0IGNvcHkgY3V0IHBhc3RlIGNsaWNrIGNoYW5nZSBjb250ZXh0bWVudSByZXNldFwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICBsYXN0U2NoZWR1bGVkUmVwbGF5UXVldWUgPSBudWxsO1xuICAgIFJlYWN0RE9NSHlkcmF0aW9uUm9vdC5wcm90b3R5cGUucmVuZGVyID0gUmVhY3RET01Sb290LnByb3RvdHlwZS5yZW5kZXIgPVxuICAgICAgZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgICAgIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuICAgICAgICBpZiAobnVsbCA9PT0gcm9vdCkgdGhyb3cgRXJyb3IoXCJDYW5ub3QgdXBkYXRlIGFuIHVubW91bnRlZCByb290LlwiKTtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGFyZ3NbMV1cbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogaXNWYWxpZENvbnRhaW5lcihhcmdzWzFdKVxuICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiWW91IHBhc3NlZCBhIGNvbnRhaW5lciB0byB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHJvb3QucmVuZGVyKC4uLikuIFlvdSBkb24ndCBuZWVkIHRvIHBhc3MgaXQgYWdhaW4gc2luY2UgeW91IGFscmVhZHkgcGFzc2VkIGl0IHRvIGNyZWF0ZSB0aGUgcm9vdC5cIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBhcmdzWzFdICYmXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJZb3UgcGFzc2VkIGEgc2Vjb25kIGFyZ3VtZW50IHRvIHJvb3QucmVuZGVyKC4uLikgYnV0IGl0IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgYXJncyA9IGNoaWxkcmVuO1xuICAgICAgICB2YXIgY3VycmVudCA9IHJvb3QuY3VycmVudCxcbiAgICAgICAgICBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoY3VycmVudCk7XG4gICAgICAgIHVwZGF0ZUNvbnRhaW5lckltcGwoY3VycmVudCwgbGFuZSwgYXJncywgcm9vdCwgbnVsbCwgbnVsbCk7XG4gICAgICB9O1xuICAgIFJlYWN0RE9NSHlkcmF0aW9uUm9vdC5wcm90b3R5cGUudW5tb3VudCA9IFJlYWN0RE9NUm9vdC5wcm90b3R5cGUudW5tb3VudCA9XG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhcmdzWzBdICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiZG9lcyBub3Qgc3VwcG9ydCBhIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGFyZ3MgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG4gICAgICAgIGlmIChudWxsICE9PSBhcmdzKSB7XG4gICAgICAgICAgdGhpcy5faW50ZXJuYWxSb290ID0gbnVsbDtcbiAgICAgICAgICB2YXIgY29udGFpbmVyID0gYXJncy5jb250YWluZXJJbmZvO1xuICAgICAgICAgIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJBdHRlbXB0ZWQgdG8gc3luY2hyb25vdXNseSB1bm1vdW50IGEgcm9vdCB3aGlsZSBSZWFjdCB3YXMgYWxyZWFkeSByZW5kZXJpbmcuIFJlYWN0IGNhbm5vdCBmaW5pc2ggdW5tb3VudGluZyB0aGUgcm9vdCB1bnRpbCB0aGUgY3VycmVudCByZW5kZXIgaGFzIGNvbXBsZXRlZCwgd2hpY2ggbWF5IGxlYWQgdG8gYSByYWNlIGNvbmRpdGlvbi5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB1cGRhdGVDb250YWluZXJJbXBsKGFyZ3MuY3VycmVudCwgMiwgbnVsbCwgYXJncywgbnVsbCwgbnVsbCk7XG4gICAgICAgICAgZmx1c2hTeW5jV29yayQxKCk7XG4gICAgICAgICAgY29udGFpbmVyW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBSZWFjdERPTUh5ZHJhdGlvblJvb3QucHJvdG90eXBlLnVuc3RhYmxlX3NjaGVkdWxlSHlkcmF0aW9uID0gZnVuY3Rpb24gKFxuICAgICAgdGFyZ2V0XG4gICAgKSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHZhciB1cGRhdGVQcmlvcml0eSA9IHJlc29sdmVVcGRhdGVQcmlvcml0eSgpO1xuICAgICAgICB0YXJnZXQgPSB7IGJsb2NrZWRPbjogbnVsbCwgdGFyZ2V0OiB0YXJnZXQsIHByaW9yaXR5OiB1cGRhdGVQcmlvcml0eSB9O1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICBpIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCAmJlxuICAgICAgICAgIDAgIT09IHVwZGF0ZVByaW9yaXR5ICYmXG4gICAgICAgICAgdXBkYXRlUHJpb3JpdHkgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbaV0ucHJpb3JpdHk7XG4gICAgICAgICAgaSsrXG4gICAgICAgICk7XG4gICAgICAgIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5zcGxpY2UoaSwgMCwgdGFyZ2V0KTtcbiAgICAgICAgMCA9PT0gaSAmJiBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQodGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaXNvbW9ycGhpY1JlYWN0UGFja2FnZVZlcnNpb24gPSBSZWFjdC52ZXJzaW9uO1xuICAgICAgaWYgKFwiMTkuMS4wXCIgIT09IGlzb21vcnBoaWNSZWFjdFBhY2thZ2VWZXJzaW9uKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnSW5jb21wYXRpYmxlIFJlYWN0IHZlcnNpb25zOiBUaGUgXCJyZWFjdFwiIGFuZCBcInJlYWN0LWRvbVwiIHBhY2thZ2VzIG11c3QgaGF2ZSB0aGUgZXhhY3Qgc2FtZSB2ZXJzaW9uLiBJbnN0ZWFkIGdvdDpcXG4gIC0gcmVhY3Q6ICAgICAgJyArXG4gICAgICAgICAgICAoaXNvbW9ycGhpY1JlYWN0UGFja2FnZVZlcnNpb24gK1xuICAgICAgICAgICAgICBcIlxcbiAgLSByZWFjdC1kb206ICAxOS4xLjBcXG5MZWFybiBtb3JlOiBodHRwczovL3JlYWN0LmRldi93YXJuaW5ncy92ZXJzaW9uLW1pc21hdGNoXCIpXG4gICAgICAgICk7XG4gICAgfSkoKTtcbiAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgTWFwICYmXG4gICAgICBudWxsICE9IE1hcC5wcm90b3R5cGUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIE1hcC5wcm90b3R5cGUuZm9yRWFjaCAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU2V0ICYmXG4gICAgICBudWxsICE9IFNldC5wcm90b3R5cGUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFNldC5wcm90b3R5cGUuY2xlYXIgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFNldC5wcm90b3R5cGUuZm9yRWFjaCkgfHxcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiUmVhY3QgZGVwZW5kcyBvbiBNYXAgYW5kIFNldCBidWlsdC1pbiB0eXBlcy4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSBwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9yZWFjdC1wb2x5ZmlsbHNcIlxuICAgICAgKTtcbiAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5maW5kRE9NTm9kZSA9IGZ1bmN0aW9uIChjb21wb25lbnRPckVsZW1lbnQpIHtcbiAgICAgIHZhciBmaWJlciA9IGNvbXBvbmVudE9yRWxlbWVudC5fcmVhY3RJbnRlcm5hbHM7XG4gICAgICBpZiAodm9pZCAwID09PSBmaWJlcikge1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29tcG9uZW50T3JFbGVtZW50LnJlbmRlcilcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICAgIGNvbXBvbmVudE9yRWxlbWVudCA9IE9iamVjdC5rZXlzKGNvbXBvbmVudE9yRWxlbWVudCkuam9pbihcIixcIik7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiQXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgYSBSZWFjdENvbXBvbmVudC4gS2V5czogXCIgK1xuICAgICAgICAgICAgY29tcG9uZW50T3JFbGVtZW50XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb21wb25lbnRPckVsZW1lbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChmaWJlcik7XG4gICAgICBjb21wb25lbnRPckVsZW1lbnQgPVxuICAgICAgICBudWxsICE9PSBjb21wb25lbnRPckVsZW1lbnRcbiAgICAgICAgICA/IGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChjb21wb25lbnRPckVsZW1lbnQpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgY29tcG9uZW50T3JFbGVtZW50ID1cbiAgICAgICAgbnVsbCA9PT0gY29tcG9uZW50T3JFbGVtZW50ID8gbnVsbCA6IGNvbXBvbmVudE9yRWxlbWVudC5zdGF0ZU5vZGU7XG4gICAgICByZXR1cm4gY29tcG9uZW50T3JFbGVtZW50O1xuICAgIH07XG4gICAgaWYgKFxuICAgICAgIShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnRlcm5hbHMgPSB7XG4gICAgICAgICAgYnVuZGxlVHlwZTogMSxcbiAgICAgICAgICB2ZXJzaW9uOiBcIjE5LjEuMFwiLFxuICAgICAgICAgIHJlbmRlcmVyUGFja2FnZU5hbWU6IFwicmVhY3QtZG9tXCIsXG4gICAgICAgICAgY3VycmVudERpc3BhdGNoZXJSZWY6IFJlYWN0U2hhcmVkSW50ZXJuYWxzLFxuICAgICAgICAgIHJlY29uY2lsZXJWZXJzaW9uOiBcIjE5LjEuMFwiXG4gICAgICAgIH07XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZUhvb2tTdGF0ZSA9IG92ZXJyaWRlSG9va1N0YXRlO1xuICAgICAgICBpbnRlcm5hbHMub3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoO1xuICAgICAgICBpbnRlcm5hbHMub3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoO1xuICAgICAgICBpbnRlcm5hbHMub3ZlcnJpZGVQcm9wcyA9IG92ZXJyaWRlUHJvcHM7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoO1xuICAgICAgICBpbnRlcm5hbHMub3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBvdmVycmlkZVByb3BzUmVuYW1lUGF0aDtcbiAgICAgICAgaW50ZXJuYWxzLnNjaGVkdWxlVXBkYXRlID0gc2NoZWR1bGVVcGRhdGU7XG4gICAgICAgIGludGVybmFscy5zZXRFcnJvckhhbmRsZXIgPSBzZXRFcnJvckhhbmRsZXI7XG4gICAgICAgIGludGVybmFscy5zZXRTdXNwZW5zZUhhbmRsZXIgPSBzZXRTdXNwZW5zZUhhbmRsZXI7XG4gICAgICAgIGludGVybmFscy5zY2hlZHVsZVJlZnJlc2ggPSBzY2hlZHVsZVJlZnJlc2g7XG4gICAgICAgIGludGVybmFscy5zY2hlZHVsZVJvb3QgPSBzY2hlZHVsZVJvb3Q7XG4gICAgICAgIGludGVybmFscy5zZXRSZWZyZXNoSGFuZGxlciA9IHNldFJlZnJlc2hIYW5kbGVyO1xuICAgICAgICBpbnRlcm5hbHMuZ2V0Q3VycmVudEZpYmVyID0gZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHM7XG4gICAgICAgIGludGVybmFscy5nZXRMYW5lTGFiZWxNYXAgPSBnZXRMYW5lTGFiZWxNYXA7XG4gICAgICAgIGludGVybmFscy5pbmplY3RQcm9maWxpbmdIb29rcyA9IGluamVjdFByb2ZpbGluZ0hvb2tzO1xuICAgICAgICByZXR1cm4gaW5qZWN0SW50ZXJuYWxzKGludGVybmFscyk7XG4gICAgICB9KSgpICYmXG4gICAgICBjYW5Vc2VET00gJiZcbiAgICAgIHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmICYmXG4gICAgICAoKC0xIDwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiQ2hyb21lXCIpICYmXG4gICAgICAgIC0xID09PSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJFZGdlXCIpKSB8fFxuICAgICAgICAtMSA8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIkZpcmVmb3hcIikpXG4gICAgKSB7XG4gICAgICB2YXIgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7XG4gICAgICAvXihodHRwcz98ZmlsZSk6JC8udGVzdChwcm90b2NvbCkgJiZcbiAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgIFwiJWNEb3dubG9hZCB0aGUgUmVhY3QgRGV2VG9vbHMgZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcmVhY3QtZGV2dG9vbHNcIiArXG4gICAgICAgICAgICAoXCJmaWxlOlwiID09PSBwcm90b2NvbFxuICAgICAgICAgICAgICA/IFwiXFxuWW91IG1pZ2h0IG5lZWQgdG8gdXNlIGEgbG9jYWwgSFRUUCBzZXJ2ZXIgKGluc3RlYWQgb2YgZmlsZTovLyk6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcmVhY3QtZGV2dG9vbHMtZmFxXCJcbiAgICAgICAgICAgICAgOiBcIlwiKSxcbiAgICAgICAgICBcImZvbnQtd2VpZ2h0OmJvbGRcIlxuICAgICAgICApO1xuICAgIH1cbiAgICBleHBvcnRzLmNyZWF0ZVJvb3QgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiKTtcbiAgICAgIHdhcm5JZlJlYWN0RE9NQ29udGFpbmVySW5ERVYoY29udGFpbmVyKTtcbiAgICAgIHZhciBpc1N0cmljdE1vZGUgPSAhMSxcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCA9IFwiXCIsXG4gICAgICAgIG9uVW5jYXVnaHRFcnJvciA9IGRlZmF1bHRPblVuY2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uQ2F1Z2h0RXJyb3IgPSBkZWZhdWx0T25DYXVnaHRFcnJvcixcbiAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yID0gZGVmYXVsdE9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgICAgdHJhbnNpdGlvbkNhbGxiYWNrcyA9IG51bGw7XG4gICAgICBudWxsICE9PSBvcHRpb25zICYmXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucyAmJlxuICAgICAgICAob3B0aW9ucy5oeWRyYXRlXG4gICAgICAgICAgPyBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIFwiaHlkcmF0ZSB0aHJvdWdoIGNyZWF0ZVJvb3QgaXMgZGVwcmVjYXRlZC4gVXNlIFJlYWN0RE9NQ2xpZW50Lmh5ZHJhdGVSb290KGNvbnRhaW5lciwgPEFwcCAvPikgaW5zdGVhZC5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiZcbiAgICAgICAgICAgIG51bGwgIT09IG9wdGlvbnMgJiZcbiAgICAgICAgICAgIG9wdGlvbnMuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJZb3UgcGFzc2VkIGEgSlNYIGVsZW1lbnQgdG8gY3JlYXRlUm9vdC4gWW91IHByb2JhYmx5IG1lYW50IHRvIGNhbGwgcm9vdC5yZW5kZXIgaW5zdGVhZC4gRXhhbXBsZSB1c2FnZTpcXG5cXG4gIGxldCByb290ID0gY3JlYXRlUm9vdChkb21Db250YWluZXIpO1xcbiAgcm9vdC5yZW5kZXIoPEFwcCAvPik7XCJcbiAgICAgICAgICAgICksXG4gICAgICAgICEwID09PSBvcHRpb25zLnVuc3RhYmxlX3N0cmljdE1vZGUgJiYgKGlzU3RyaWN0TW9kZSA9ICEwKSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLmlkZW50aWZpZXJQcmVmaXggJiZcbiAgICAgICAgICAoaWRlbnRpZmllclByZWZpeCA9IG9wdGlvbnMuaWRlbnRpZmllclByZWZpeCksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5vblVuY2F1Z2h0RXJyb3IgJiZcbiAgICAgICAgICAob25VbmNhdWdodEVycm9yID0gb3B0aW9ucy5vblVuY2F1Z2h0RXJyb3IpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMub25DYXVnaHRFcnJvciAmJlxuICAgICAgICAgIChvbkNhdWdodEVycm9yID0gb3B0aW9ucy5vbkNhdWdodEVycm9yKSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLm9uUmVjb3ZlcmFibGVFcnJvciAmJlxuICAgICAgICAgIChvblJlY292ZXJhYmxlRXJyb3IgPSBvcHRpb25zLm9uUmVjb3ZlcmFibGVFcnJvciksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy51bnN0YWJsZV90cmFuc2l0aW9uQ2FsbGJhY2tzICYmXG4gICAgICAgICAgKHRyYW5zaXRpb25DYWxsYmFja3MgPSBvcHRpb25zLnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3MpKTtcbiAgICAgIG9wdGlvbnMgPSBjcmVhdGVGaWJlclJvb3QoXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgMSxcbiAgICAgICAgITEsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGlzU3RyaWN0TW9kZSxcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCxcbiAgICAgICAgb25VbmNhdWdodEVycm9yLFxuICAgICAgICBvbkNhdWdodEVycm9yLFxuICAgICAgICBvblJlY292ZXJhYmxlRXJyb3IsXG4gICAgICAgIHRyYW5zaXRpb25DYWxsYmFja3MsXG4gICAgICAgIG51bGxcbiAgICAgICk7XG4gICAgICBjb250YWluZXJbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBvcHRpb25zLmN1cnJlbnQ7XG4gICAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhjb250YWluZXIpO1xuICAgICAgcmV0dXJuIG5ldyBSZWFjdERPTVJvb3Qob3B0aW9ucyk7XG4gICAgfTtcbiAgICBleHBvcnRzLmh5ZHJhdGVSb290ID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgaW5pdGlhbENoaWxkcmVuLCBvcHRpb25zKSB7XG4gICAgICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiKTtcbiAgICAgIHdhcm5JZlJlYWN0RE9NQ29udGFpbmVySW5ERVYoY29udGFpbmVyKTtcbiAgICAgIHZvaWQgMCA9PT0gaW5pdGlhbENoaWxkcmVuICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJNdXN0IHByb3ZpZGUgaW5pdGlhbCBjaGlsZHJlbiBhcyBzZWNvbmQgYXJndW1lbnQgdG8gaHlkcmF0ZVJvb3QuIEV4YW1wbGUgdXNhZ2U6IGh5ZHJhdGVSb290KGRvbUNvbnRhaW5lciwgPEFwcCAvPilcIlxuICAgICAgICApO1xuICAgICAgdmFyIGlzU3RyaWN0TW9kZSA9ICExLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4ID0gXCJcIixcbiAgICAgICAgb25VbmNhdWdodEVycm9yID0gZGVmYXVsdE9uVW5jYXVnaHRFcnJvcixcbiAgICAgICAgb25DYXVnaHRFcnJvciA9IGRlZmF1bHRPbkNhdWdodEVycm9yLFxuICAgICAgICBvblJlY292ZXJhYmxlRXJyb3IgPSBkZWZhdWx0T25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICB0cmFuc2l0aW9uQ2FsbGJhY2tzID0gbnVsbCxcbiAgICAgICAgZm9ybVN0YXRlID0gbnVsbDtcbiAgICAgIG51bGwgIT09IG9wdGlvbnMgJiZcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zICYmXG4gICAgICAgICghMCA9PT0gb3B0aW9ucy51bnN0YWJsZV9zdHJpY3RNb2RlICYmIChpc1N0cmljdE1vZGUgPSAhMCksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5pZGVudGlmaWVyUHJlZml4ICYmXG4gICAgICAgICAgKGlkZW50aWZpZXJQcmVmaXggPSBvcHRpb25zLmlkZW50aWZpZXJQcmVmaXgpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMub25VbmNhdWdodEVycm9yICYmXG4gICAgICAgICAgKG9uVW5jYXVnaHRFcnJvciA9IG9wdGlvbnMub25VbmNhdWdodEVycm9yKSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLm9uQ2F1Z2h0RXJyb3IgJiZcbiAgICAgICAgICAob25DYXVnaHRFcnJvciA9IG9wdGlvbnMub25DYXVnaHRFcnJvciksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5vblJlY292ZXJhYmxlRXJyb3IgJiZcbiAgICAgICAgICAob25SZWNvdmVyYWJsZUVycm9yID0gb3B0aW9ucy5vblJlY292ZXJhYmxlRXJyb3IpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMudW5zdGFibGVfdHJhbnNpdGlvbkNhbGxiYWNrcyAmJlxuICAgICAgICAgICh0cmFuc2l0aW9uQ2FsbGJhY2tzID0gb3B0aW9ucy51bnN0YWJsZV90cmFuc2l0aW9uQ2FsbGJhY2tzKSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLmZvcm1TdGF0ZSAmJiAoZm9ybVN0YXRlID0gb3B0aW9ucy5mb3JtU3RhdGUpKTtcbiAgICAgIGluaXRpYWxDaGlsZHJlbiA9IGNyZWF0ZUZpYmVyUm9vdChcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAxLFxuICAgICAgICAhMCxcbiAgICAgICAgaW5pdGlhbENoaWxkcmVuLFxuICAgICAgICBudWxsICE9IG9wdGlvbnMgPyBvcHRpb25zIDogbnVsbCxcbiAgICAgICAgaXNTdHJpY3RNb2RlLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgICBvblVuY2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uQ2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgICAgdHJhbnNpdGlvbkNhbGxiYWNrcyxcbiAgICAgICAgZm9ybVN0YXRlXG4gICAgICApO1xuICAgICAgaW5pdGlhbENoaWxkcmVuLmNvbnRleHQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShudWxsKTtcbiAgICAgIG9wdGlvbnMgPSBpbml0aWFsQ2hpbGRyZW4uY3VycmVudDtcbiAgICAgIGlzU3RyaWN0TW9kZSA9IHJlcXVlc3RVcGRhdGVMYW5lKG9wdGlvbnMpO1xuICAgICAgaXNTdHJpY3RNb2RlID0gZ2V0QnVtcGVkTGFuZUZvckh5ZHJhdGlvbkJ5TGFuZShpc1N0cmljdE1vZGUpO1xuICAgICAgaWRlbnRpZmllclByZWZpeCA9IGNyZWF0ZVVwZGF0ZShpc1N0cmljdE1vZGUpO1xuICAgICAgaWRlbnRpZmllclByZWZpeC5jYWxsYmFjayA9IG51bGw7XG4gICAgICBlbnF1ZXVlVXBkYXRlKG9wdGlvbnMsIGlkZW50aWZpZXJQcmVmaXgsIGlzU3RyaWN0TW9kZSk7XG4gICAgICBvcHRpb25zID0gaXNTdHJpY3RNb2RlO1xuICAgICAgaW5pdGlhbENoaWxkcmVuLmN1cnJlbnQubGFuZXMgPSBvcHRpb25zO1xuICAgICAgbWFya1Jvb3RVcGRhdGVkJDEoaW5pdGlhbENoaWxkcmVuLCBvcHRpb25zKTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChpbml0aWFsQ2hpbGRyZW4pO1xuICAgICAgY29udGFpbmVyW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gaW5pdGlhbENoaWxkcmVuLmN1cnJlbnQ7XG4gICAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhjb250YWluZXIpO1xuICAgICAgcmV0dXJuIG5ldyBSZWFjdERPTUh5ZHJhdGlvblJvb3QoaW5pdGlhbENoaWxkcmVuKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudmVyc2lvbiA9IFwiMTkuMS4wXCI7XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AoRXJyb3IoKSk7XG4gIH0pKCk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/cjs/react-dom-client.development.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/cjs/react-dom.development.js":
/*!**************************************************************************************************************!*\
!*** ./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/cjs/react-dom.development.js ***!
\**************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/**\n * @license React\n * react-dom.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 function noop() {}\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n try {\n testStringCoercion(key);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n JSCompiler_inline_result &&\n (console.error(\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n key[Symbol.toStringTag]) ||\n key.constructor.name ||\n \"Object\"\n ),\n testStringCoercion(key));\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n }\n function getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n }\n function getValueDescriptorExpectingObjectForWarning(thing) {\n return null === thing\n ? \"`null`\"\n : void 0 === thing\n ? \"`undefined`\"\n : \"\" === thing\n ? \"an empty string\"\n : 'something with type \"' + typeof thing + '\"';\n }\n function getValueDescriptorExpectingEnumForWarning(thing) {\n return null === thing\n ? \"`null`\"\n : void 0 === thing\n ? \"`undefined`\"\n : \"\" === thing\n ? \"an empty string\"\n : \"string\" === typeof thing\n ? JSON.stringify(thing)\n : \"number\" === typeof thing\n ? \"`\" + thing + \"`\"\n : 'something with type \"' + typeof thing + '\"';\n }\n function resolveDispatcher() {\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;\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = __webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"),\n Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(\n \"Invalid form element. requestFormReset must be passed a form that was rendered by React.\"\n );\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n (\"function\" === typeof Map &&\n null != Map.prototype &&\n \"function\" === typeof Map.prototype.forEach &&\n \"function\" === typeof Set &&\n null != Set.prototype &&\n \"function\" === typeof Set.prototype.clear &&\n \"function\" === typeof Set.prototype.forEach) ||\n console.error(\n \"React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\"\n );\n exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\n exports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(\"Target container is not a DOM element.\");\n return createPortal$1(children, container, null, key);\n };\n exports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn))\n return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f() &&\n console.error(\n \"flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.\"\n );\n }\n };\n exports.preconnect = function (href, options) {\n \"string\" === typeof href && href\n ? null != options && \"object\" !== typeof options\n ? console.error(\n \"ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : null != options &&\n \"string\" !== typeof options.crossOrigin &&\n console.error(\n \"ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.\",\n getValueDescriptorExpectingObjectForWarning(options.crossOrigin)\n )\n : console.error(\n \"ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n };\n exports.prefetchDNS = function (href) {\n if (\"string\" !== typeof href || !href)\n console.error(\n \"ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n else if (1 < arguments.length) {\n var options = arguments[1];\n \"object\" === typeof options && options.hasOwnProperty(\"crossOrigin\")\n ? console.error(\n \"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : console.error(\n \"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.\",\n getValueDescriptorExpectingEnumForWarning(options)\n );\n }\n \"string\" === typeof href && Internals.d.D(href);\n };\n exports.preinit = function (href, options) {\n \"string\" === typeof href && href\n ? null == options || \"object\" !== typeof options\n ? console.error(\n \"ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : \"style\" !== options.as &&\n \"script\" !== options.as &&\n console.error(\n 'ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are \"style\" and \"script\".',\n getValueDescriptorExpectingEnumForWarning(options.as)\n )\n : console.error(\n \"ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n if (\n \"string\" === typeof href &&\n options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence\n ? options.precedence\n : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n };\n exports.preinitModule = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n void 0 !== options && \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : options &&\n \"as\" in options &&\n \"script\" !== options.as &&\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingEnumForWarning(options.as) +\n \".\");\n if (encountered)\n console.error(\n \"ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s\",\n encountered\n );\n else\n switch (\n ((encountered =\n options && \"string\" === typeof options.as ? options.as : \"script\"),\n encountered)\n ) {\n case \"script\":\n break;\n default:\n (encountered =\n getValueDescriptorExpectingEnumForWarning(encountered)),\n console.error(\n 'ReactDOM.preinitModule(): Currently the only supported \"as\" type for this function is \"script\" but received \"%s\" instead. This warning was generated for `href` \"%s\". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)',\n encountered,\n href\n );\n }\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as)\n (encountered = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n )),\n Internals.d.M(href, {\n crossOrigin: encountered,\n integrity:\n \"string\" === typeof options.integrity\n ? options.integrity\n : void 0,\n nonce:\n \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n } else null == options && Internals.d.M(href);\n };\n exports.preload = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n null == options || \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : (\"string\" === typeof options.as && options.as) ||\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options.as) +\n \".\");\n encountered &&\n console.error(\n 'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel=\"preload\" as=\"...\" />` tag.%s',\n encountered\n );\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n encountered = options.as;\n var crossOrigin = getCrossOriginStringAs(\n encountered,\n options.crossOrigin\n );\n Internals.d.L(href, encountered, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet\n ? options.imageSrcSet\n : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes\n ? options.imageSizes\n : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n };\n exports.preloadModule = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n void 0 !== options && \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : options &&\n \"as\" in options &&\n \"string\" !== typeof options.as &&\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options.as) +\n \".\");\n encountered &&\n console.error(\n 'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel=\"modulepreload\" as=\"...\" />` tag.%s',\n encountered\n );\n \"string\" === typeof href &&\n (options\n ? ((encountered = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n )),\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: encountered,\n integrity:\n \"string\" === typeof options.integrity\n ? options.integrity\n : void 0\n }))\n : Internals.d.m(href));\n };\n exports.requestFormReset = function (form) {\n Internals.d.r(form);\n };\n exports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n };\n exports.useFormState = function (action, initialState, permalink) {\n return resolveDispatcher().useFormState(action, initialState, permalink);\n };\n exports.useFormStatus = function () {\n return resolveDispatcher().useHostTransitionStatus();\n };\n exports.version = \"19.1.0\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2IsS0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsZ0dBQU87QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksb0VBQW9FO0FBQ3hFO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksaUJBQWlCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksa0JBQWtCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxtQkFBbUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsSUFBSSxxQkFBcUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsVUFBVTtBQUNWO0FBQ0EsSUFBSSxlQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxJQUFJLHFCQUFxQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLElBQUksd0JBQXdCO0FBQzVCO0FBQ0E7QUFDQSxJQUFJLCtCQUErQjtBQUNuQztBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEI7QUFDQTtBQUNBLElBQUkscUJBQXFCO0FBQ3pCO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCIgKyB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lckluZm8sIGltcGxlbWVudGF0aW9uKSB7XG4gICAgICB2YXIga2V5ID1cbiAgICAgICAgMyA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbM10gPyBhcmd1bWVudHNbM10gOiBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKGtleSk7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITA7XG4gICAgICB9XG4gICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgJiZcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTeW1ib2wgJiZcbiAgICAgICAgICAgIFN5bWJvbC50b1N0cmluZ1RhZyAmJlxuICAgICAgICAgICAga2V5W1N5bWJvbC50b1N0cmluZ1RhZ10pIHx8XG4gICAgICAgICAgICBrZXkuY29uc3RydWN0b3IubmFtZSB8fFxuICAgICAgICAgICAgXCJPYmplY3RcIlxuICAgICAgICApLFxuICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24oa2V5KSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfUE9SVEFMX1RZUEUsXG4gICAgICAgIGtleTogbnVsbCA9PSBrZXkgPyBudWxsIDogXCJcIiArIGtleSxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgICBjb250YWluZXJJbmZvOiBjb250YWluZXJJbmZvLFxuICAgICAgICBpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb25cbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENyb3NzT3JpZ2luU3RyaW5nQXMoYXMsIGlucHV0KSB7XG4gICAgICBpZiAoXCJmb250XCIgPT09IGFzKSByZXR1cm4gXCJcIjtcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgaW5wdXQpXG4gICAgICAgIHJldHVybiBcInVzZS1jcmVkZW50aWFsc1wiID09PSBpbnB1dCA/IGlucHV0IDogXCJcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyh0aGluZykge1xuICAgICAgcmV0dXJuIG51bGwgPT09IHRoaW5nXG4gICAgICAgID8gXCJgbnVsbGBcIlxuICAgICAgICA6IHZvaWQgMCA9PT0gdGhpbmdcbiAgICAgICAgICA/IFwiYHVuZGVmaW5lZGBcIlxuICAgICAgICAgIDogXCJcIiA9PT0gdGhpbmdcbiAgICAgICAgICAgID8gXCJhbiBlbXB0eSBzdHJpbmdcIlxuICAgICAgICAgICAgOiAnc29tZXRoaW5nIHdpdGggdHlwZSBcIicgKyB0eXBlb2YgdGhpbmcgKyAnXCInO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyh0aGluZykge1xuICAgICAgcmV0dXJuIG51bGwgPT09IHRoaW5nXG4gICAgICAgID8gXCJgbnVsbGBcIlxuICAgICAgICA6IHZvaWQgMCA9PT0gdGhpbmdcbiAgICAgICAgICA/IFwiYHVuZGVmaW5lZGBcIlxuICAgICAgICAgIDogXCJcIiA9PT0gdGhpbmdcbiAgICAgICAgICAgID8gXCJhbiBlbXB0eSBzdHJpbmdcIlxuICAgICAgICAgICAgOiBcInN0cmluZ1wiID09PSB0eXBlb2YgdGhpbmdcbiAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh0aGluZylcbiAgICAgICAgICAgICAgOiBcIm51bWJlclwiID09PSB0eXBlb2YgdGhpbmdcbiAgICAgICAgICAgICAgICA/IFwiYFwiICsgdGhpbmcgKyBcImBcIlxuICAgICAgICAgICAgICAgIDogJ3NvbWV0aGluZyB3aXRoIHR5cGUgXCInICsgdHlwZW9mIHRoaW5nICsgJ1wiJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICBudWxsID09PSBkaXNwYXRjaGVyICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyO1xuICAgIH1cbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KEVycm9yKCkpO1xuICAgIHZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSxcbiAgICAgIEludGVybmFscyA9IHtcbiAgICAgICAgZDoge1xuICAgICAgICAgIGY6IG5vb3AsXG4gICAgICAgICAgcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBmb3JtIGVsZW1lbnQuIHJlcXVlc3RGb3JtUmVzZXQgbXVzdCBiZSBwYXNzZWQgYSBmb3JtIHRoYXQgd2FzIHJlbmRlcmVkIGJ5IFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgRDogbm9vcCxcbiAgICAgICAgICBDOiBub29wLFxuICAgICAgICAgIEw6IG5vb3AsXG4gICAgICAgICAgbTogbm9vcCxcbiAgICAgICAgICBYOiBub29wLFxuICAgICAgICAgIFM6IG5vb3AsXG4gICAgICAgICAgTTogbm9vcFxuICAgICAgICB9LFxuICAgICAgICBwOiAwLFxuICAgICAgICBmaW5kRE9NTm9kZTogbnVsbFxuICAgICAgfSxcbiAgICAgIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3QuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFO1xuICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBNYXAgJiZcbiAgICAgIG51bGwgIT0gTWFwLnByb3RvdHlwZSAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgTWFwLnByb3RvdHlwZS5mb3JFYWNoICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTZXQgJiZcbiAgICAgIG51bGwgIT0gU2V0LnByb3RvdHlwZSAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU2V0LnByb3RvdHlwZS5jbGVhciAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU2V0LnByb3RvdHlwZS5mb3JFYWNoKSB8fFxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJSZWFjdCBkZXBlbmRzIG9uIE1hcCBhbmQgU2V0IGJ1aWx0LWluIHR5cGVzLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzXCJcbiAgICAgICk7XG4gICAgZXhwb3J0cy5fX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUgPVxuICAgICAgSW50ZXJuYWxzO1xuICAgIGV4cG9ydHMuY3JlYXRlUG9ydGFsID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBjb250YWluZXIpIHtcbiAgICAgIHZhciBrZXkgPVxuICAgICAgICAyIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG4gICAgICBpZiAoXG4gICAgICAgICFjb250YWluZXIgfHxcbiAgICAgICAgKDEgIT09IGNvbnRhaW5lci5ub2RlVHlwZSAmJlxuICAgICAgICAgIDkgIT09IGNvbnRhaW5lci5ub2RlVHlwZSAmJlxuICAgICAgICAgIDExICE9PSBjb250YWluZXIubm9kZVR5cGUpXG4gICAgICApXG4gICAgICAgIHRocm93IEVycm9yKFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIik7XG4gICAgICByZXR1cm4gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lciwgbnVsbCwga2V5KTtcbiAgICB9O1xuICAgIGV4cG9ydHMuZmx1c2hTeW5jID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICB2YXIgcHJldmlvdXNUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCxcbiAgICAgICAgcHJldmlvdXNVcGRhdGVQcmlvcml0eSA9IEludGVybmFscy5wO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCgoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGwpLCAoSW50ZXJuYWxzLnAgPSAyKSwgZm4pKVxuICAgICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2aW91c1RyYW5zaXRpb24pLFxuICAgICAgICAgIChJbnRlcm5hbHMucCA9IHByZXZpb3VzVXBkYXRlUHJpb3JpdHkpLFxuICAgICAgICAgIEludGVybmFscy5kLmYoKSAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmbHVzaFN5bmMgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIGxpZmVjeWNsZSBtZXRob2QuIFJlYWN0IGNhbm5vdCBmbHVzaCB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLiBDb25zaWRlciBtb3ZpbmcgdGhpcyBjYWxsIHRvIGEgc2NoZWR1bGVyIHRhc2sgb3IgbWljcm8gdGFzay5cIlxuICAgICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGV4cG9ydHMucHJlY29ubmVjdCA9IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBocmVmXG4gICAgICAgID8gbnVsbCAhPSBvcHRpb25zICYmIFwib2JqZWN0XCIgIT09IHR5cGVvZiBvcHRpb25zXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0RE9NLnByZWNvbm5lY3QoKTogRXhwZWN0ZWQgdGhlIGBvcHRpb25zYCBhcmd1bWVudCAoc2Vjb25kKSB0byBiZSBhbiBvYmplY3QgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuIFRoZSBvbmx5IHN1cHBvcnRlZCBvcHRpb24gYXQgdGhpcyB0aW1lIGlzIGBjcm9zc09yaWdpbmAgd2hpY2ggYWNjZXB0cyBhIHN0cmluZy5cIixcbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucylcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IG51bGwgIT0gb3B0aW9ucyAmJlxuICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIG9wdGlvbnMuY3Jvc3NPcmlnaW4gJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3RET00ucHJlY29ubmVjdCgpOiBFeHBlY3RlZCB0aGUgYGNyb3NzT3JpZ2luYCBvcHRpb24gKHNlY29uZCBhcmd1bWVudCkgdG8gYmUgYSBzdHJpbmcgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuIFRyeSByZW1vdmluZyB0aGlzIG9wdGlvbiBvciBwYXNzaW5nIGEgc3RyaW5nIHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucy5jcm9zc09yaWdpbilcbiAgICAgICAgICAgIClcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVjb25uZWN0KCk6IEV4cGVjdGVkIHRoZSBgaHJlZmAgYXJndW1lbnQgKGZpcnN0KSB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpXG4gICAgICAgICAgKTtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmXG4gICAgICAgIChvcHRpb25zXG4gICAgICAgICAgPyAoKG9wdGlvbnMgPSBvcHRpb25zLmNyb3NzT3JpZ2luKSxcbiAgICAgICAgICAgIChvcHRpb25zID1cbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnNcbiAgICAgICAgICAgICAgICA/IFwidXNlLWNyZWRlbnRpYWxzXCIgPT09IG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgID8gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgOiB2b2lkIDApKVxuICAgICAgICAgIDogKG9wdGlvbnMgPSBudWxsKSxcbiAgICAgICAgSW50ZXJuYWxzLmQuQyhocmVmLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnByZWZldGNoRE5TID0gZnVuY3Rpb24gKGhyZWYpIHtcbiAgICAgIGlmIChcInN0cmluZ1wiICE9PSB0eXBlb2YgaHJlZiB8fCAhaHJlZilcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlJlYWN0RE9NLnByZWZldGNoRE5TKCk6IEV4cGVjdGVkIHRoZSBgaHJlZmAgYXJndW1lbnQgKGZpcnN0KSB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuXCIsXG4gICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhocmVmKVxuICAgICAgICApO1xuICAgICAgZWxzZSBpZiAoMSA8IGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHNbMV07XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoXCJjcm9zc09yaWdpblwiKVxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVmZXRjaEROUygpOiBFeHBlY3RlZCBvbmx5IG9uZSBhcmd1bWVudCwgYGhyZWZgLCBidXQgZW5jb3VudGVyZWQgJXMgYXMgYSBzZWNvbmQgYXJndW1lbnQgaW5zdGVhZC4gVGhpcyBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIG9wdGlvbnMgYW5kIGlzIGN1cnJlbnRseSBkaXNhbGxvd2VkLiBJdCBsb29rcyBsaWtlIHRoZSB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gc2V0IGEgY3Jvc3NPcmlnaW4gcHJvcGVydHkgZm9yIHRoaXMgRE5TIGxvb2t1cCBoaW50LiBCcm93c2VycyBkbyBub3QgcGVyZm9ybSBETlMgcXVlcmllcyB1c2luZyBDT1JTIGFuZCBzZXR0aW5nIHRoaXMgYXR0cmlidXRlIG9uIHRoZSByZXNvdXJjZSBoaW50IGhhcyBubyBlZmZlY3QuIFRyeSBjYWxsaW5nIFJlYWN0RE9NLnByZWZldGNoRE5TKCkgd2l0aCBqdXN0IGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwgYGhyZWZgLlwiLFxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVmZXRjaEROUygpOiBFeHBlY3RlZCBvbmx5IG9uZSBhcmd1bWVudCwgYGhyZWZgLCBidXQgZW5jb3VudGVyZWQgJXMgYXMgYSBzZWNvbmQgYXJndW1lbnQgaW5zdGVhZC4gVGhpcyBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIG9wdGlvbnMgYW5kIGlzIGN1cnJlbnRseSBkaXNhbGxvd2VkLiBUcnkgY2FsbGluZyBSZWFjdERPTS5wcmVmZXRjaEROUygpIHdpdGgganVzdCBhIHNpbmdsZSBzdHJpbmcgYXJndW1lbnQsIGBocmVmYC5cIixcbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucylcbiAgICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBJbnRlcm5hbHMuZC5EKGhyZWYpO1xuICAgIH07XG4gICAgZXhwb3J0cy5wcmVpbml0ID0gZnVuY3Rpb24gKGhyZWYsIG9wdGlvbnMpIHtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIGhyZWZcbiAgICAgICAgPyBudWxsID09IG9wdGlvbnMgfHwgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9wdGlvbnNcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3RET00ucHJlaW5pdCgpOiBFeHBlY3RlZCB0aGUgYG9wdGlvbnNgIGFyZ3VtZW50IChzZWNvbmQpIHRvIGJlIGFuIG9iamVjdCB3aXRoIGFuIGBhc2AgcHJvcGVydHkgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiByZXNvdXJjZSB0byBiZSBwcmVpbml0aWFsaXplZCBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucylcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFwic3R5bGVcIiAhPT0gb3B0aW9ucy5hcyAmJlxuICAgICAgICAgICAgXCJzY3JpcHRcIiAhPT0gb3B0aW9ucy5hcyAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJ1JlYWN0RE9NLnByZWluaXQoKTogRXhwZWN0ZWQgdGhlIGBhc2AgcHJvcGVydHkgaW4gdGhlIGBvcHRpb25zYCBhcmd1bWVudCAoc2Vjb25kKSB0byBjb250YWluIGEgdmFsaWQgdmFsdWUgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiByZXNvdXJjZSB0byBiZSBwcmVpbml0aWFsaXplZCBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC4gVmFsaWQgdmFsdWVzIGZvciBgYXNgIGFyZSBcInN0eWxlXCIgYW5kIFwic2NyaXB0XCIuJyxcbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucy5hcylcbiAgICAgICAgICAgIClcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVpbml0KCk6IEV4cGVjdGVkIHRoZSBgaHJlZmAgYXJndW1lbnQgKGZpcnN0KSB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpXG4gICAgICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiZcbiAgICAgICAgb3B0aW9ucyAmJlxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5hc1xuICAgICAgKSB7XG4gICAgICAgIHZhciBhcyA9IG9wdGlvbnMuYXMsXG4gICAgICAgICAgY3Jvc3NPcmlnaW4gPSBnZXRDcm9zc09yaWdpblN0cmluZ0FzKGFzLCBvcHRpb25zLmNyb3NzT3JpZ2luKSxcbiAgICAgICAgICBpbnRlZ3JpdHkgPVxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW50ZWdyaXR5ID8gb3B0aW9ucy5pbnRlZ3JpdHkgOiB2b2lkIDAsXG4gICAgICAgICAgZmV0Y2hQcmlvcml0eSA9XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5mZXRjaFByaW9yaXR5XG4gICAgICAgICAgICAgID8gb3B0aW9ucy5mZXRjaFByaW9yaXR5XG4gICAgICAgICAgICAgIDogdm9pZCAwO1xuICAgICAgICBcInN0eWxlXCIgPT09IGFzXG4gICAgICAgICAgPyBJbnRlcm5hbHMuZC5TKFxuICAgICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5wcmVjZWRlbmNlXG4gICAgICAgICAgICAgICAgPyBvcHRpb25zLnByZWNlZGVuY2VcbiAgICAgICAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBjcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IGludGVncml0eSxcbiAgICAgICAgICAgICAgICBmZXRjaFByaW9yaXR5OiBmZXRjaFByaW9yaXR5XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFwic2NyaXB0XCIgPT09IGFzICYmXG4gICAgICAgICAgICBJbnRlcm5hbHMuZC5YKGhyZWYsIHtcbiAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IGNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICBpbnRlZ3JpdHk6IGludGVncml0eSxcbiAgICAgICAgICAgICAgZmV0Y2hQcmlvcml0eTogZmV0Y2hQcmlvcml0eSxcbiAgICAgICAgICAgICAgbm9uY2U6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLm5vbmNlID8gb3B0aW9ucy5ub25jZSA6IHZvaWQgMFxuICAgICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnByZWluaXRNb2R1bGUgPSBmdW5jdGlvbiAoaHJlZiwgb3B0aW9ucykge1xuICAgICAgdmFyIGVuY291bnRlcmVkID0gXCJcIjtcbiAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBocmVmKSB8fFxuICAgICAgICAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICBcIiBUaGUgYGhyZWZgIGFyZ3VtZW50IGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhocmVmKSArXG4gICAgICAgICAgXCIuXCIpO1xuICAgICAgdm9pZCAwICE9PSBvcHRpb25zICYmIFwib2JqZWN0XCIgIT09IHR5cGVvZiBvcHRpb25zXG4gICAgICAgID8gKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgICBcIiBUaGUgYG9wdGlvbnNgIGFyZ3VtZW50IGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKG9wdGlvbnMpICtcbiAgICAgICAgICAgIFwiLlwiKVxuICAgICAgICA6IG9wdGlvbnMgJiZcbiAgICAgICAgICBcImFzXCIgaW4gb3B0aW9ucyAmJlxuICAgICAgICAgIFwic2NyaXB0XCIgIT09IG9wdGlvbnMuYXMgJiZcbiAgICAgICAgICAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICAgIFwiIFRoZSBgYXNgIG9wdGlvbiBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucy5hcykgK1xuICAgICAgICAgICAgXCIuXCIpO1xuICAgICAgaWYgKGVuY291bnRlcmVkKVxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiUmVhY3RET00ucHJlaW5pdE1vZHVsZSgpOiBFeHBlY3RlZCB1cCB0byB0d28gYXJndW1lbnRzLCBhIG5vbi1lbXB0eSBgaHJlZmAgc3RyaW5nIGFuZCwgb3B0aW9uYWxseSwgYW4gYG9wdGlvbnNgIG9iamVjdCB3aXRoIGEgdmFsaWQgYGFzYCBwcm9wZXJ0eS4lc1wiLFxuICAgICAgICAgIGVuY291bnRlcmVkXG4gICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHN3aXRjaCAoXG4gICAgICAgICAgKChlbmNvdW50ZXJlZCA9XG4gICAgICAgICAgICBvcHRpb25zICYmIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzID8gb3B0aW9ucy5hcyA6IFwic2NyaXB0XCIpLFxuICAgICAgICAgIGVuY291bnRlcmVkKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgKGVuY291bnRlcmVkID1cbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcoZW5jb3VudGVyZWQpKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnUmVhY3RET00ucHJlaW5pdE1vZHVsZSgpOiBDdXJyZW50bHkgdGhlIG9ubHkgc3VwcG9ydGVkIFwiYXNcIiB0eXBlIGZvciB0aGlzIGZ1bmN0aW9uIGlzIFwic2NyaXB0XCIgYnV0IHJlY2VpdmVkIFwiJXNcIiBpbnN0ZWFkLiBUaGlzIHdhcm5pbmcgd2FzIGdlbmVyYXRlZCBmb3IgYGhyZWZgIFwiJXNcIi4gSW4gdGhlIGZ1dHVyZSBvdGhlciBtb2R1bGUgdHlwZXMgd2lsbCBiZSBzdXBwb3J0ZWQsIGFsaWduaW5nIHdpdGggdGhlIGltcG9ydC1hdHRyaWJ1dGVzIHByb3Bvc2FsLiBMZWFybiBtb3JlIGhlcmU6IChodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pbXBvcnQtYXR0cmlidXRlcyknLFxuICAgICAgICAgICAgICAgIGVuY291bnRlcmVkLFxuICAgICAgICAgICAgICAgIGhyZWZcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmKVxuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiYgbnVsbCAhPT0gb3B0aW9ucykge1xuICAgICAgICAgIGlmIChudWxsID09IG9wdGlvbnMuYXMgfHwgXCJzY3JpcHRcIiA9PT0gb3B0aW9ucy5hcylcbiAgICAgICAgICAgIChlbmNvdW50ZXJlZCA9IGdldENyb3NzT3JpZ2luU3RyaW5nQXMoXG4gICAgICAgICAgICAgIG9wdGlvbnMuYXMsXG4gICAgICAgICAgICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5cbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBJbnRlcm5hbHMuZC5NKGhyZWYsIHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogZW5jb3VudGVyZWQsXG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OlxuICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW50ZWdyaXR5XG4gICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5pbnRlZ3JpdHlcbiAgICAgICAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgbm9uY2U6XG4gICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5ub25jZSA/IG9wdGlvbnMubm9uY2UgOiB2b2lkIDBcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBudWxsID09IG9wdGlvbnMgJiYgSW50ZXJuYWxzLmQuTShocmVmKTtcbiAgICB9O1xuICAgIGV4cG9ydHMucHJlbG9hZCA9IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gICAgICB2YXIgZW5jb3VudGVyZWQgPSBcIlwiO1xuICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIGhyZWYpIHx8XG4gICAgICAgIChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgIFwiIFRoZSBgaHJlZmAgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpICtcbiAgICAgICAgICBcIi5cIik7XG4gICAgICBudWxsID09IG9wdGlvbnMgfHwgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9wdGlvbnNcbiAgICAgICAgPyAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICAgIFwiIFRoZSBgb3B0aW9uc2AgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucykgK1xuICAgICAgICAgICAgXCIuXCIpXG4gICAgICAgIDogKFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzICYmIG9wdGlvbnMuYXMpIHx8XG4gICAgICAgICAgKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgICBcIiBUaGUgYGFzYCBvcHRpb24gZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucy5hcykgK1xuICAgICAgICAgICAgXCIuXCIpO1xuICAgICAgZW5jb3VudGVyZWQgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnUmVhY3RET00ucHJlbG9hZCgpOiBFeHBlY3RlZCB0d28gYXJndW1lbnRzLCBhIG5vbi1lbXB0eSBgaHJlZmAgc3RyaW5nIGFuZCBhbiBgb3B0aW9uc2Agb2JqZWN0IHdpdGggYW4gYGFzYCBwcm9wZXJ0eSB2YWxpZCBmb3IgYSBgPGxpbmsgcmVsPVwicHJlbG9hZFwiIGFzPVwiLi4uXCIgLz5gIHRhZy4lcycsXG4gICAgICAgICAgZW5jb3VudGVyZWRcbiAgICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiZcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiZcbiAgICAgICAgbnVsbCAhPT0gb3B0aW9ucyAmJlxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5hc1xuICAgICAgKSB7XG4gICAgICAgIGVuY291bnRlcmVkID0gb3B0aW9ucy5hcztcbiAgICAgICAgdmFyIGNyb3NzT3JpZ2luID0gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhcbiAgICAgICAgICBlbmNvdW50ZXJlZCxcbiAgICAgICAgICBvcHRpb25zLmNyb3NzT3JpZ2luXG4gICAgICAgICk7XG4gICAgICAgIEludGVybmFscy5kLkwoaHJlZiwgZW5jb3VudGVyZWQsIHtcbiAgICAgICAgICBjcm9zc09yaWdpbjogY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgaW50ZWdyaXR5OlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW50ZWdyaXR5ID8gb3B0aW9ucy5pbnRlZ3JpdHkgOiB2b2lkIDAsXG4gICAgICAgICAgbm9uY2U6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLm5vbmNlID8gb3B0aW9ucy5ub25jZSA6IHZvaWQgMCxcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy50eXBlID8gb3B0aW9ucy50eXBlIDogdm9pZCAwLFxuICAgICAgICAgIGZldGNoUHJpb3JpdHk6XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5mZXRjaFByaW9yaXR5XG4gICAgICAgICAgICAgID8gb3B0aW9ucy5mZXRjaFByaW9yaXR5XG4gICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgIHJlZmVycmVyUG9saWN5OlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMucmVmZXJyZXJQb2xpY3lcbiAgICAgICAgICAgICAgPyBvcHRpb25zLnJlZmVycmVyUG9saWN5XG4gICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgIGltYWdlU3JjU2V0OlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW1hZ2VTcmNTZXRcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmltYWdlU3JjU2V0XG4gICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgIGltYWdlU2l6ZXM6XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbWFnZVNpemVzXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5pbWFnZVNpemVzXG4gICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgIG1lZGlhOiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5tZWRpYSA/IG9wdGlvbnMubWVkaWEgOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnByZWxvYWRNb2R1bGUgPSBmdW5jdGlvbiAoaHJlZiwgb3B0aW9ucykge1xuICAgICAgdmFyIGVuY291bnRlcmVkID0gXCJcIjtcbiAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBocmVmKSB8fFxuICAgICAgICAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICBcIiBUaGUgYGhyZWZgIGFyZ3VtZW50IGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhocmVmKSArXG4gICAgICAgICAgXCIuXCIpO1xuICAgICAgdm9pZCAwICE9PSBvcHRpb25zICYmIFwib2JqZWN0XCIgIT09IHR5cGVvZiBvcHRpb25zXG4gICAgICAgID8gKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgICBcIiBUaGUgYG9wdGlvbnNgIGFyZ3VtZW50IGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKG9wdGlvbnMpICtcbiAgICAgICAgICAgIFwiLlwiKVxuICAgICAgICA6IG9wdGlvbnMgJiZcbiAgICAgICAgICBcImFzXCIgaW4gb3B0aW9ucyAmJlxuICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBvcHRpb25zLmFzICYmXG4gICAgICAgICAgKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgICBcIiBUaGUgYGFzYCBvcHRpb24gZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucy5hcykgK1xuICAgICAgICAgICAgXCIuXCIpO1xuICAgICAgZW5jb3VudGVyZWQgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnUmVhY3RET00ucHJlbG9hZE1vZHVsZSgpOiBFeHBlY3RlZCB0d28gYXJndW1lbnRzLCBhIG5vbi1lbXB0eSBgaHJlZmAgc3RyaW5nIGFuZCwgb3B0aW9uYWxseSwgYW4gYG9wdGlvbnNgIG9iamVjdCB3aXRoIGFuIGBhc2AgcHJvcGVydHkgdmFsaWQgZm9yIGEgYDxsaW5rIHJlbD1cIm1vZHVsZXByZWxvYWRcIiBhcz1cIi4uLlwiIC8+YCB0YWcuJXMnLFxuICAgICAgICAgIGVuY291bnRlcmVkXG4gICAgICAgICk7XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJlxuICAgICAgICAob3B0aW9uc1xuICAgICAgICAgID8gKChlbmNvdW50ZXJlZCA9IGdldENyb3NzT3JpZ2luU3RyaW5nQXMoXG4gICAgICAgICAgICAgIG9wdGlvbnMuYXMsXG4gICAgICAgICAgICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5cbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgSW50ZXJuYWxzLmQubShocmVmLCB7XG4gICAgICAgICAgICAgIGFzOlxuICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzICYmIFwic2NyaXB0XCIgIT09IG9wdGlvbnMuYXNcbiAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5hc1xuICAgICAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBlbmNvdW50ZXJlZCxcbiAgICAgICAgICAgICAgaW50ZWdyaXR5OlxuICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmludGVncml0eVxuICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmludGVncml0eVxuICAgICAgICAgICAgICAgICAgOiB2b2lkIDBcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIDogSW50ZXJuYWxzLmQubShocmVmKSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnJlcXVlc3RGb3JtUmVzZXQgPSBmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgSW50ZXJuYWxzLmQucihmb3JtKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgPSBmdW5jdGlvbiAoZm4sIGEpIHtcbiAgICAgIHJldHVybiBmbihhKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlRm9ybVN0YXRlID0gZnVuY3Rpb24gKGFjdGlvbiwgaW5pdGlhbFN0YXRlLCBwZXJtYWxpbmspIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUZvcm1TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSwgcGVybWFsaW5rKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlRm9ybVN0YXR1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzKCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnZlcnNpb24gPSBcIjE5LjEuMFwiO1xuICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcCAmJlxuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wKEVycm9yKCkpO1xuICB9KSgpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/cjs/react-dom.development.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/client.js":
/*!*******************************************************************************************!*\
!*** ./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/client.js ***!
\*******************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (true) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom-client.development.js */ \"(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/cjs/react-dom-client.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2NsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLEtBQXFDLEVBQUUsRUFLMUMsQ0FBQztBQUNGLEVBQUUsc05BQWlFO0FBQ25FIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2NsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNoZWNrRENFKCkge1xuICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gIGlmIChcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJyB8fFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkXG4gICAgLy8gaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBvbmx5IGluIGRldmVsb3BtZW50LlxuICAgIC8vIFRoZXJlZm9yZSBpZiB0aGUgYnJhbmNoIGlzIHN0aWxsIGhlcmUsIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3YXNuJ3RcbiAgICAvLyBwcm9wZXJseSBhcHBsaWVkLlxuICAgIC8vIERvbid0IGNoYW5nZSB0aGUgbWVzc2FnZS4gUmVhY3QgRGV2VG9vbHMgcmVsaWVzIG9uIGl0LiBBbHNvIG1ha2Ugc3VyZVxuICAgIC8vIHRoaXMgbWVzc2FnZSBkb2Vzbid0IG9jY3VyIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGNhdXNlXG4gICAgLy8gYSBmYWxzZSBwb3NpdGl2ZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ15fXicpO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvZGUgYWJvdmUgaGFzIGJlZW4gZGVhZCBjb2RlIGVsaW1pbmF0ZWQgKERDRSdkKS5cbiAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoY2hlY2tEQ0UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEZXZUb29scyBzaG91bGRuJ3QgY3Jhc2ggUmVhY3QsIG5vIG1hdHRlciB3aGF0LlxuICAgIC8vIFdlIHNob3VsZCBzdGlsbCByZXBvcnQgaW4gY2FzZSB3ZSBicmVhayB0aGlzIGNvZGUuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIERDRSBjaGVjayBzaG91bGQgaGFwcGVuIGJlZm9yZSBSZWFjdERPTSBidW5kbGUgZXhlY3V0ZXMgc28gdGhhdFxuICAvLyBEZXZUb29scyBjYW4gcmVwb3J0IGJhZCBtaW5pZmljYXRpb24gZHVyaW5nIGluamVjdGlvbi5cbiAgY2hlY2tEQ0UoKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20tY2xpZW50LnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLWNsaWVudC5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/client.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/index.js":
/*!******************************************************************************************!*\
!*** ./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/index.js ***!
\******************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (true) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ \"(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/cjs/react-dom.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1kb21AMTkuMS4wX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksS0FBcUMsRUFBRSxFQUsxQyxDQUFDO0FBQ0YsRUFBRSx3TUFBMEQ7QUFDNUQiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LWRvbUAxOS4xLjBfcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBjaGVja0RDRSgpIHtcbiAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuICBpZiAoXG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZFxuICAgIC8vIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgY29uZGl0aW9uIGlzIHRydWUgb25seSBpbiBkZXZlbG9wbWVudC5cbiAgICAvLyBUaGVyZWZvcmUgaWYgdGhlIGJyYW5jaCBpcyBzdGlsbCBoZXJlLCBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2Fzbid0XG4gICAgLy8gcHJvcGVybHkgYXBwbGllZC5cbiAgICAvLyBEb24ndCBjaGFuZ2UgdGhlIG1lc3NhZ2UuIFJlYWN0IERldlRvb2xzIHJlbGllcyBvbiBpdC4gQWxzbyBtYWtlIHN1cmVcbiAgICAvLyB0aGlzIG1lc3NhZ2UgZG9lc24ndCBvY2N1ciBlbHNld2hlcmUgaW4gdGhpcyBmdW5jdGlvbiwgb3IgaXQgd2lsbCBjYXVzZVxuICAgIC8vIGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdeX14nKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb2RlIGFib3ZlIGhhcyBiZWVuIGRlYWQgY29kZSBlbGltaW5hdGVkIChEQ0UnZCkuXG4gICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGNoZWNrRENFKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRGV2VG9vbHMgc2hvdWxkbid0IGNyYXNoIFJlYWN0LCBubyBtYXR0ZXIgd2hhdC5cbiAgICAvLyBXZSBzaG91bGQgc3RpbGwgcmVwb3J0IGluIGNhc2Ugd2UgYnJlYWsgdGhpcyBjb2RlLlxuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBEQ0UgY2hlY2sgc2hvdWxkIGhhcHBlbiBiZWZvcmUgUmVhY3RET00gYnVuZGxlIGV4ZWN1dGVzIHNvIHRoYXRcbiAgLy8gRGV2VG9vbHMgY2FuIHJlcG9ydCBiYWQgbWluaWZpY2F0aW9uIGR1cmluZyBpbmplY3Rpb24uXG4gIGNoZWNrRENFKCk7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/index.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react-jsx-runtime.development.js":
/*!*************************************************************************************************!*\
!*** ./node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react-jsx-runtime.development.js ***!
\*************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-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 function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = __webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n \"react-stack-bottom-frame\": function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React[\"react-stack-bottom-frame\"].bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCwrQ0FBK0MsNkJBQTZCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsZ0JBQWdCLGdEQUFnRDtBQUNoRSxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0EsZ0NBQWdDLGtDQUFrQyxPQUFPO0FBQ3pFO0FBQ0EsZ0dBQWdHLFNBQVMsVUFBVSxzRkFBc0YsYUFBYSxVQUFVLFVBQVU7QUFDMU87QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxnR0FBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksZ0JBQWdCO0FBQ3BCLElBQUksV0FBVztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksWUFBWTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgcmV0dXJuIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0VcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgICBjYXNlIFJFQUNUX0FDVElWSVRZX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiQWN0aXZpdHlcIjtcbiAgICAgIH1cbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHR5cGUudGFnICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgdHlwZS4kJHR5cGVvZilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlLmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLlByb3ZpZGVyXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLkNvbnN1bWVyXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgdmFyIGlubmVyVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB0eXBlIHx8XG4gICAgICAgICAgICAgICgodHlwZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCBcIlwiKSxcbiAgICAgICAgICAgICAgKHR5cGUgPSBcIlwiICE9PSB0eXBlID8gXCJGb3J3YXJkUmVmKFwiICsgdHlwZSArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpKTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGlubmVyVHlwZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbCksXG4gICAgICAgICAgICAgIG51bGwgIT09IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgID8gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgOiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIk1lbW9cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIGlubmVyVHlwZSA9IHR5cGUuX3BheWxvYWQ7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5faW5pdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZShpbm5lclR5cGUpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITA7XG4gICAgICB9XG4gICAgICBpZiAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGNvbnNvbGU7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXBfY29uc3QgPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQuZXJyb3I7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDAgPVxuICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTeW1ib2wgJiZcbiAgICAgICAgICAgIFN5bWJvbC50b1N0cmluZ1RhZyAmJlxuICAgICAgICAgICAgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkgfHxcbiAgICAgICAgICB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8XG4gICAgICAgICAgXCJPYmplY3RcIjtcbiAgICAgICAgSlNDb21waWxlcl90ZW1wX2NvbnN0LmNhbGwoXG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LFxuICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhc2tOYW1lKHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSByZXR1cm4gXCI8PlwiO1xuICAgICAgaWYgKFxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRVxuICAgICAgKVxuICAgICAgICByZXR1cm4gXCI8Li4uPlwiO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICAgIHJldHVybiBuYW1lID8gXCI8XCIgKyBuYW1lICsgXCI+XCIgOiBcIjwuLi4+XCI7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHJldHVybiBcIjwuLi4+XCI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE93bmVyKCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5BO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGRpc3BhdGNoZXIgPyBudWxsIDogZGlzcGF0Y2hlci5nZXRPd25lcigpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBVbmtub3duT3duZXIoKSB7XG4gICAgICByZXR1cm4gRXJyb3IoXCJyZWFjdC1zdGFjay10b3AtZnJhbWVcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBcImtleVwiKSkge1xuICAgICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsIFwia2V5XCIpLmdldDtcbiAgICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2b2lkIDAgIT09IGNvbmZpZy5rZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICAgICAgZnVuY3Rpb24gd2FybkFib3V0QWNjZXNzaW5nS2V5KCkge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biB8fFxuICAgICAgICAgICgoc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSAhMCksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSB2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50IHByb3AuIChodHRwczovL3JlYWN0LmRldi9saW5rL3NwZWNpYWwtcHJvcHMpXCIsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZVxuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgICAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gITA7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsIFwia2V5XCIsIHtcbiAgICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZygpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHRoaXMudHlwZSk7XG4gICAgICBkaWRXYXJuQWJvdXRFbGVtZW50UmVmW2NvbXBvbmVudE5hbWVdIHx8XG4gICAgICAgICgoZGlkV2FybkFib3V0RWxlbWVudFJlZltjb21wb25lbnROYW1lXSA9ICEwKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkFjY2Vzc2luZyBlbGVtZW50LnJlZiB3YXMgcmVtb3ZlZCBpbiBSZWFjdCAxOS4gcmVmIGlzIG5vdyBhIHJlZ3VsYXIgcHJvcC4gSXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIEpTWCBFbGVtZW50IHR5cGUgaW4gYSBmdXR1cmUgcmVsZWFzZS5cIlxuICAgICAgICApKTtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSB0aGlzLnByb3BzLnJlZjtcbiAgICAgIHJldHVybiB2b2lkIDAgIT09IGNvbXBvbmVudE5hbWUgPyBjb21wb25lbnROYW1lIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gUmVhY3RFbGVtZW50KFxuICAgICAgdHlwZSxcbiAgICAgIGtleSxcbiAgICAgIHNlbGYsXG4gICAgICBzb3VyY2UsXG4gICAgICBvd25lcixcbiAgICAgIHByb3BzLFxuICAgICAgZGVidWdTdGFjayxcbiAgICAgIGRlYnVnVGFza1xuICAgICkge1xuICAgICAgc2VsZiA9IHByb3BzLnJlZjtcbiAgICAgIHR5cGUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgIF9vd25lcjogb3duZXJcbiAgICAgIH07XG4gICAgICBudWxsICE9PSAodm9pZCAwICE9PSBzZWxmID8gc2VsZiA6IG51bGwpXG4gICAgICAgID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgZ2V0OiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgIH0pXG4gICAgICAgIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHsgZW51bWVyYWJsZTogITEsIHZhbHVlOiBudWxsIH0pO1xuICAgICAgdHlwZS5fc3RvcmUgPSB7fTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLl9zdG9yZSwgXCJ2YWxpZGF0ZWRcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogMFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdJbmZvXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwiX2RlYnVnU3RhY2tcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogZGVidWdTdGFja1xuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdUYXNrXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IGRlYnVnVGFza1xuICAgICAgfSk7XG4gICAgICBPYmplY3QuZnJlZXplICYmIChPYmplY3QuZnJlZXplKHR5cGUucHJvcHMpLCBPYmplY3QuZnJlZXplKHR5cGUpKTtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBqc3hERVZJbXBsKFxuICAgICAgdHlwZSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIG1heWJlS2V5LFxuICAgICAgaXNTdGF0aWNDaGlsZHJlbixcbiAgICAgIHNvdXJjZSxcbiAgICAgIHNlbGYsXG4gICAgICBkZWJ1Z1N0YWNrLFxuICAgICAgZGVidWdUYXNrXG4gICAgKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBjb25maWcuY2hpbGRyZW47XG4gICAgICBpZiAodm9pZCAwICE9PSBjaGlsZHJlbilcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pXG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgaXNTdGF0aWNDaGlsZHJlbiA9IDA7XG4gICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4gPCBjaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4rK1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbltpc1N0YXRpY0NoaWxkcmVuXSk7XG4gICAgICAgICAgICBPYmplY3QuZnJlZXplICYmIE9iamVjdC5mcmVlemUoY2hpbGRyZW4pO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdC5qc3g6IFN0YXRpYyBjaGlsZHJlbiBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LiBZb3UgYXJlIGxpa2VseSBleHBsaWNpdGx5IGNhbGxpbmcgUmVhY3QuanN4cyBvciBSZWFjdC5qc3hERVYuIFVzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIGVsc2UgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW4pO1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBcImtleVwiKSkge1xuICAgICAgICBjaGlsZHJlbiA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjb25maWcpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgICAgIHJldHVybiBcImtleVwiICE9PSBrO1xuICAgICAgICB9KTtcbiAgICAgICAgaXNTdGF0aWNDaGlsZHJlbiA9XG4gICAgICAgICAgMCA8IGtleXMubGVuZ3RoXG4gICAgICAgICAgICA/IFwie2tleTogc29tZUtleSwgXCIgKyBrZXlzLmpvaW4oXCI6IC4uLiwgXCIpICsgXCI6IC4uLn1cIlxuICAgICAgICAgICAgOiBcIntrZXk6IHNvbWVLZXl9XCI7XG4gICAgICAgIGRpZFdhcm5BYm91dEtleVNwcmVhZFtjaGlsZHJlbiArIGlzU3RhdGljQ2hpbGRyZW5dIHx8XG4gICAgICAgICAgKChrZXlzID1cbiAgICAgICAgICAgIDAgPCBrZXlzLmxlbmd0aCA/IFwie1wiICsga2V5cy5qb2luKFwiOiAuLi4sIFwiKSArIFwiOiAuLi59XCIgOiBcInt9XCIpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnQSBwcm9wcyBvYmplY3QgY29udGFpbmluZyBhIFwia2V5XCIgcHJvcCBpcyBiZWluZyBzcHJlYWQgaW50byBKU1g6XFxuICBsZXQgcHJvcHMgPSAlcztcXG4gIDwlcyB7Li4ucHJvcHN9IC8+XFxuUmVhY3Qga2V5cyBtdXN0IGJlIHBhc3NlZCBkaXJlY3RseSB0byBKU1ggd2l0aG91dCB1c2luZyBzcHJlYWQ6XFxuICBsZXQgcHJvcHMgPSAlcztcXG4gIDwlcyBrZXk9e3NvbWVLZXl9IHsuLi5wcm9wc30gLz4nLFxuICAgICAgICAgICAgaXNTdGF0aWNDaGlsZHJlbixcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZGlkV2FybkFib3V0S2V5U3ByZWFkW2NoaWxkcmVuICsgaXNTdGF0aWNDaGlsZHJlbl0gPSAhMCkpO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW4gPSBudWxsO1xuICAgICAgdm9pZCAwICE9PSBtYXliZUtleSAmJlxuICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihtYXliZUtleSksIChjaGlsZHJlbiA9IFwiXCIgKyBtYXliZUtleSkpO1xuICAgICAgaGFzVmFsaWRLZXkoY29uZmlnKSAmJlxuICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KSwgKGNoaWxkcmVuID0gXCJcIiArIGNvbmZpZy5rZXkpKTtcbiAgICAgIGlmIChcImtleVwiIGluIGNvbmZpZykge1xuICAgICAgICBtYXliZUtleSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBjb25maWcpXG4gICAgICAgICAgXCJrZXlcIiAhPT0gcHJvcE5hbWUgJiYgKG1heWJlS2V5W3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV0pO1xuICAgICAgfSBlbHNlIG1heWJlS2V5ID0gY29uZmlnO1xuICAgICAgY2hpbGRyZW4gJiZcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIoXG4gICAgICAgICAgbWF5YmVLZXksXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZVxuICAgICAgICAgICAgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBcIlVua25vd25cIlxuICAgICAgICAgICAgOiB0eXBlXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gUmVhY3RFbGVtZW50KFxuICAgICAgICB0eXBlLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgc2VsZixcbiAgICAgICAgc291cmNlLFxuICAgICAgICBnZXRPd25lcigpLFxuICAgICAgICBtYXliZUtleSxcbiAgICAgICAgZGVidWdTdGFjayxcbiAgICAgICAgZGVidWdUYXNrXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlKSB7XG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygbm9kZSAmJlxuICAgICAgICBudWxsICE9PSBub2RlICYmXG4gICAgICAgIG5vZGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSAmJlxuICAgICAgICBub2RlLl9zdG9yZSAmJlxuICAgICAgICAobm9kZS5fc3RvcmUudmFsaWRhdGVkID0gMSk7XG4gICAgfVxuICAgIHZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSxcbiAgICAgIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxcbiAgICAgIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxcbiAgICAgIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gICAgICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuICAgICAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTtcbiAgICBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik7XG4gICAgdmFyIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29uc3VtZXJcIiksXG4gICAgICBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxcbiAgICAgIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksXG4gICAgICBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxcbiAgICAgIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLFxuICAgICAgUkVBQ1RfQUNUSVZJVFlfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5hY3Rpdml0eVwiKSxcbiAgICAgIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKSxcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3QuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgICAgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5LFxuICAgICAgY3JlYXRlVGFzayA9IGNvbnNvbGUuY3JlYXRlVGFza1xuICAgICAgICA/IGNvbnNvbGUuY3JlYXRlVGFza1xuICAgICAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH07XG4gICAgUmVhY3QgPSB7XG4gICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoY2FsbFN0YWNrRm9yRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxTdGFja0ZvckVycm9yKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd247XG4gICAgdmFyIGRpZFdhcm5BYm91dEVsZW1lbnRSZWYgPSB7fTtcbiAgICB2YXIgdW5rbm93bk93bmVyRGVidWdTdGFjayA9IFJlYWN0W1wicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJdLmJpbmQoXG4gICAgICBSZWFjdCxcbiAgICAgIFVua25vd25Pd25lclxuICAgICkoKTtcbiAgICB2YXIgdW5rbm93bk93bmVyRGVidWdUYXNrID0gY3JlYXRlVGFzayhnZXRUYXNrTmFtZShVbmtub3duT3duZXIpKTtcbiAgICB2YXIgZGlkV2FybkFib3V0S2V5U3ByZWFkID0ge307XG4gICAgZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG4gICAgZXhwb3J0cy5qc3ggPSBmdW5jdGlvbiAodHlwZSwgY29uZmlnLCBtYXliZUtleSwgc291cmNlLCBzZWxmKSB7XG4gICAgICB2YXIgdHJhY2tBY3R1YWxPd25lciA9XG4gICAgICAgIDFlNCA+IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnJlY2VudGx5Q3JlYXRlZE93bmVyU3RhY2tzKys7XG4gICAgICByZXR1cm4ganN4REVWSW1wbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBtYXliZUtleSxcbiAgICAgICAgITEsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc2VsZixcbiAgICAgICAgdHJhY2tBY3R1YWxPd25lclxuICAgICAgICAgID8gRXJyb3IoXCJyZWFjdC1zdGFjay10b3AtZnJhbWVcIilcbiAgICAgICAgICA6IHVua25vd25Pd25lckRlYnVnU3RhY2ssXG4gICAgICAgIHRyYWNrQWN0dWFsT3duZXIgPyBjcmVhdGVUYXNrKGdldFRhc2tOYW1lKHR5cGUpKSA6IHVua25vd25Pd25lckRlYnVnVGFza1xuICAgICAgKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuanN4cyA9IGZ1bmN0aW9uICh0eXBlLCBjb25maWcsIG1heWJlS2V5LCBzb3VyY2UsIHNlbGYpIHtcbiAgICAgIHZhciB0cmFja0FjdHVhbE93bmVyID1cbiAgICAgICAgMWU0ID4gUmVhY3RTaGFyZWRJbnRlcm5hbHMucmVjZW50bHlDcmVhdGVkT3duZXJTdGFja3MrKztcbiAgICAgIHJldHVybiBqc3hERVZJbXBsKFxuICAgICAgICB0eXBlLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIG1heWJlS2V5LFxuICAgICAgICAhMCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzZWxmLFxuICAgICAgICB0cmFja0FjdHVhbE93bmVyXG4gICAgICAgICAgPyBFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKVxuICAgICAgICAgIDogdW5rbm93bk93bmVyRGVidWdTdGFjayxcbiAgICAgICAgdHJhY2tBY3R1YWxPd25lciA/IGNyZWF0ZVRhc2soZ2V0VGFza05hbWUodHlwZSkpIDogdW5rbm93bk93bmVyRGVidWdUYXNrXG4gICAgICApO1xuICAgIH07XG4gIH0pKCk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react-jsx-runtime.development.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.development.js":
/*!*************************************************************************************!*\
!*** ./node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.development.js ***!
\*************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/* module decorator */ module = __webpack_require__.nmd(module);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/polyfills/process.js\");\n/**\n * @license React\n * react.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 function defineDeprecationWarning(methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n console.warn(\n \"%s(...) is deprecated in plain JavaScript React classes. %s\",\n info[0],\n info[1]\n );\n }\n });\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function warnNoop(publicInstance, callerName) {\n publicInstance =\n ((publicInstance = publicInstance.constructor) &&\n (publicInstance.displayName || publicInstance.name)) ||\n \"ReactClass\";\n var warningKey = publicInstance + \".\" + callerName;\n didWarnStateUpdateForUnmountedComponent[warningKey] ||\n (console.error(\n \"Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.\",\n callerName,\n publicInstance\n ),\n (didWarnStateUpdateForUnmountedComponent[warningKey] = !0));\n }\n function Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function ComponentDummy() {}\n function PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function cloneAndReplaceKey(oldElement, newKey) {\n newKey = ReactElement(\n oldElement.type,\n newKey,\n void 0,\n void 0,\n oldElement._owner,\n oldElement.props,\n oldElement._debugStack,\n oldElement._debugTask\n );\n oldElement._store &&\n (newKey._store.validated = oldElement._store.validated);\n return newKey;\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n function escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n }\n function getElementKey(element, index) {\n return \"object\" === typeof element &&\n null !== element &&\n null != element.key\n ? (checkKeyStringCoercion(element.key), escape(\"\" + element.key))\n : index.toString(36);\n }\n function noop$1() {}\n function resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop$1, noop$1)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"),\n (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n }\n function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback) {\n invokeCallback = children;\n callback = callback(invokeCallback);\n var childKey =\n \"\" === nameSoFar ? \".\" + getElementKey(invokeCallback, 0) : nameSoFar;\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != childKey &&\n (escapedPrefix =\n childKey.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (null != callback.key &&\n ((invokeCallback && invokeCallback.key === callback.key) ||\n checkKeyStringCoercion(callback.key)),\n (escapedPrefix = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (invokeCallback && invokeCallback.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n childKey\n )),\n \"\" !== nameSoFar &&\n null != invokeCallback &&\n isValidElement(invokeCallback) &&\n null == invokeCallback.key &&\n invokeCallback._store &&\n !invokeCallback._store.validated &&\n (escapedPrefix._store.validated = 2),\n (callback = escapedPrefix)),\n array.push(callback));\n return 1;\n }\n invokeCallback = 0;\n childKey = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = childKey + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n i === children.entries &&\n (didWarnAboutMaps ||\n console.warn(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0)),\n children = i.call(children),\n i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = childKey + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n }\n function mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n }\n function lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status)\n return (\n (ctor = payload._result),\n void 0 === ctor &&\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\\n\\nDid you accidentally put curly braces around the import?\",\n ctor\n ),\n \"default\" in ctor ||\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\",\n ctor\n ),\n ctor.default\n );\n throw payload._result;\n }\n function resolveDispatcher() {\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;\n }\n function noop() {}\n function enqueueTask(task) {\n if (null === enqueueTaskImpl)\n try {\n var requireString = (\"require\" + Math.random()).slice(0, 7);\n enqueueTaskImpl = (module && module[requireString]).call(\n module,\n \"timers\"\n ).setImmediate;\n } catch (_err) {\n enqueueTaskImpl = function (callback) {\n !1 === didWarnAboutMessageChannel &&\n ((didWarnAboutMessageChannel = !0),\n \"undefined\" === typeof MessageChannel &&\n console.error(\n \"This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.\"\n ));\n var channel = new MessageChannel();\n channel.port1.onmessage = callback;\n channel.port2.postMessage(void 0);\n };\n }\n return enqueueTaskImpl(task);\n }\n function aggregateErrors(errors) {\n return 1 < errors.length && \"function\" === typeof AggregateError\n ? new AggregateError(errors)\n : errors[0];\n }\n function popActScope(prevActQueue, prevActScopeDepth) {\n prevActScopeDepth !== actScopeDepth - 1 &&\n console.error(\n \"You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. \"\n );\n actScopeDepth = prevActScopeDepth;\n }\n function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n var queue = ReactSharedInternals.actQueue;\n if (null !== queue)\n if (0 !== queue.length)\n try {\n flushActQueue(queue);\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n });\n return;\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n else ReactSharedInternals.actQueue = null;\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(queue))\n : resolve(returnValue);\n }\n function flushActQueue(queue) {\n if (!isFlushing) {\n isFlushing = !0;\n var i = 0;\n try {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n do {\n ReactSharedInternals.didUsePromise = !1;\n var continuation = callback(!1);\n if (null !== continuation) {\n if (ReactSharedInternals.didUsePromise) {\n queue[i] = callback;\n queue.splice(0, i);\n return;\n }\n callback = continuation;\n } else break;\n } while (1);\n }\n queue.length = 0;\n } catch (error) {\n queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);\n } finally {\n isFlushing = !1;\n }\n }\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n didWarnStateUpdateForUnmountedComponent = {},\n ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function (publicInstance) {\n warnNoop(publicInstance, \"forceUpdate\");\n },\n enqueueReplaceState: function (publicInstance) {\n warnNoop(publicInstance, \"replaceState\");\n },\n enqueueSetState: function (publicInstance) {\n warnNoop(publicInstance, \"setState\");\n }\n },\n assign = Object.assign,\n emptyObject = {};\n Object.freeze(emptyObject);\n Component.prototype.isReactComponent = {};\n Component.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n };\n Component.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n };\n var deprecatedAPIs = {\n isMounted: [\n \"isMounted\",\n \"Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks.\"\n ],\n replaceState: [\n \"replaceState\",\n \"Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236).\"\n ]\n },\n fnName;\n for (fnName in deprecatedAPIs)\n deprecatedAPIs.hasOwnProperty(fnName) &&\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n ComponentDummy.prototype = Component.prototype;\n deprecatedAPIs = PureComponent.prototype = new ComponentDummy();\n deprecatedAPIs.constructor = PureComponent;\n assign(deprecatedAPIs, Component.prototype);\n deprecatedAPIs.isPureReactComponent = !0;\n var isArrayImpl = Array.isArray,\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals = {\n H: null,\n A: null,\n T: null,\n S: null,\n V: null,\n actQueue: null,\n isBatchingLegacy: !1,\n didScheduleLegacyUpdate: !1,\n didUsePromise: !1,\n thrownErrors: [],\n getCurrentStack: null,\n recentlyCreatedOwnerStacks: 0\n },\n hasOwnProperty = Object.prototype.hasOwnProperty,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n deprecatedAPIs = {\n \"react-stack-bottom-frame\": function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = deprecatedAPIs[\n \"react-stack-bottom-frame\"\n ].bind(deprecatedAPIs, UnknownOwner)();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutMaps = !1,\n userProvidedKeyEscapeRegex = /\\/+/g,\n reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n didWarnAboutMessageChannel = !1,\n enqueueTaskImpl = null,\n actScopeDepth = 0,\n didWarnNoAwaitAct = !1,\n isFlushing = !1,\n queueSeveralMicrotasks =\n \"function\" === typeof queueMicrotask\n ? function (callback) {\n queueMicrotask(function () {\n return queueMicrotask(callback);\n });\n }\n : enqueueTask;\n deprecatedAPIs = Object.freeze({\n __proto__: null,\n c: function (size) {\n return resolveDispatcher().useMemoCache(size);\n }\n });\n exports.Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\n exports.Component = Component;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.PureComponent = PureComponent;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\n exports.__COMPILER_RUNTIME = deprecatedAPIs;\n exports.act = function (callback) {\n var prevActQueue = ReactSharedInternals.actQueue,\n prevActScopeDepth = actScopeDepth;\n actScopeDepth++;\n var queue = (ReactSharedInternals.actQueue =\n null !== prevActQueue ? prevActQueue : []),\n didAwaitActCall = !1;\n try {\n var result = callback();\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n (popActScope(prevActQueue, prevActScopeDepth),\n (callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n if (\n null !== result &&\n \"object\" === typeof result &&\n \"function\" === typeof result.then\n ) {\n var thenable = result;\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);\"\n ));\n });\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n thenable.then(\n function (returnValue) {\n popActScope(prevActQueue, prevActScopeDepth);\n if (0 === prevActScopeDepth) {\n try {\n flushActQueue(queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue,\n resolve,\n reject\n );\n });\n } catch (error$0) {\n ReactSharedInternals.thrownErrors.push(error$0);\n }\n if (0 < ReactSharedInternals.thrownErrors.length) {\n var _thrownError = aggregateErrors(\n ReactSharedInternals.thrownErrors\n );\n ReactSharedInternals.thrownErrors.length = 0;\n reject(_thrownError);\n }\n } else resolve(returnValue);\n },\n function (error) {\n popActScope(prevActQueue, prevActScopeDepth);\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((error = aggregateErrors(\n ReactSharedInternals.thrownErrors\n )),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(error))\n : reject(error);\n }\n );\n }\n };\n }\n var returnValue$jscomp$0 = result;\n popActScope(prevActQueue, prevActScopeDepth);\n 0 === prevActScopeDepth &&\n (flushActQueue(queue),\n 0 !== queue.length &&\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\\n\\nawait act(() => ...)\"\n ));\n }),\n (ReactSharedInternals.actQueue = null));\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n 0 === prevActScopeDepth\n ? ((ReactSharedInternals.actQueue = queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue$jscomp$0,\n resolve,\n reject\n );\n }))\n : resolve(returnValue$jscomp$0);\n }\n };\n };\n exports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n };\n exports.captureOwnerStack = function () {\n var getCurrentStack = ReactSharedInternals.getCurrentStack;\n return null === getCurrentStack ? null : getCurrentStack();\n };\n exports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" +\n element +\n \".\"\n );\n var props = assign({}, element.props),\n key = element.key,\n owner = element._owner;\n if (null != config) {\n var JSCompiler_inline_result;\n a: {\n if (\n hasOwnProperty.call(config, \"ref\") &&\n (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(\n config,\n \"ref\"\n ).get) &&\n JSCompiler_inline_result.isReactWarning\n ) {\n JSCompiler_inline_result = !1;\n break a;\n }\n JSCompiler_inline_result = void 0 !== config.ref;\n }\n JSCompiler_inline_result && (owner = getOwner());\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (key = \"\" + config.key));\n for (propName in config)\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n }\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n JSCompiler_inline_result = Array(propName);\n for (var i = 0; i < propName; i++)\n JSCompiler_inline_result[i] = arguments[i + 2];\n props.children = JSCompiler_inline_result;\n }\n props = ReactElement(\n element.type,\n key,\n void 0,\n void 0,\n owner,\n props,\n element._debugStack,\n element._debugTask\n );\n for (key = 2; key < arguments.length; key++)\n (owner = arguments[key]),\n isValidElement(owner) && owner._store && (owner._store.validated = 1);\n return props;\n };\n exports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n defaultValue._currentRenderer = null;\n defaultValue._currentRenderer2 = null;\n return defaultValue;\n };\n exports.createElement = function (type, config, children) {\n for (var i = 2; i < arguments.length; i++) {\n var node = arguments[i];\n isValidElement(node) && node._store && (node._store.validated = 1);\n }\n i = {};\n node = null;\n if (null != config)\n for (propName in (didWarnAboutOldJSXRuntime ||\n !(\"__self\" in config) ||\n \"key\" in config ||\n ((didWarnAboutOldJSXRuntime = !0),\n console.warn(\n \"Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform\"\n )),\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (node = \"\" + config.key)),\n config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (i[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) i.children = children;\n else if (1 < childrenLength) {\n for (\n var childArray = Array(childrenLength), _i = 0;\n _i < childrenLength;\n _i++\n )\n childArray[_i] = arguments[_i + 2];\n Object.freeze && Object.freeze(childArray);\n i.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === i[propName] && (i[propName] = childrenLength[propName]);\n node &&\n defineKeyPropWarningGetter(\n i,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return ReactElement(\n type,\n node,\n void 0,\n void 0,\n getOwner(),\n i,\n propName ? Error(\"react-stack-top-frame\") : unknownOwnerDebugStack,\n propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.createRef = function () {\n var refObject = { current: null };\n Object.seal(refObject);\n return refObject;\n };\n exports.forwardRef = function (render) {\n null != render && render.$$typeof === REACT_MEMO_TYPE\n ? console.error(\n \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).\"\n )\n : \"function\" !== typeof render\n ? console.error(\n \"forwardRef requires a render function but was given %s.\",\n null === render ? \"null\" : typeof render\n )\n : 0 !== render.length &&\n 2 !== render.length &&\n console.error(\n \"forwardRef render functions accept exactly two parameters: props and ref. %s\",\n 1 === render.length\n ? \"Did you forget to use the ref parameter?\"\n : \"Any additional parameter will be undefined.\"\n );\n null != render &&\n null != render.defaultProps &&\n console.error(\n \"forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?\"\n );\n var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render },\n ownName;\n Object.defineProperty(elementType, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n render.name ||\n render.displayName ||\n (Object.defineProperty(render, \"name\", { value: name }),\n (render.displayName = name));\n }\n });\n return elementType;\n };\n exports.isValidElement = isValidElement;\n exports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n };\n exports.memo = function (type, compare) {\n null == type &&\n console.error(\n \"memo: The first argument must be a component. Instead received: %s\",\n null === type ? \"null\" : typeof type\n );\n compare = {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n var ownName;\n Object.defineProperty(compare, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n type.name ||\n type.displayName ||\n (Object.defineProperty(type, \"name\", { value: name }),\n (type.displayName = name));\n }\n });\n return compare;\n };\n exports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n currentTransition._updatedFibers = new Set();\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((scope = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < scope &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n )),\n (ReactSharedInternals.T = prevTransition);\n }\n };\n exports.unstable_useCacheRefresh = function () {\n return resolveDispatcher().useCacheRefresh();\n };\n exports.use = function (usable) {\n return resolveDispatcher().use(usable);\n };\n exports.useActionState = function (action, initialState, permalink) {\n return resolveDispatcher().useActionState(\n action,\n initialState,\n permalink\n );\n };\n exports.useCallback = function (callback, deps) {\n return resolveDispatcher().useCallback(callback, deps);\n };\n exports.useContext = function (Context) {\n var dispatcher = resolveDispatcher();\n Context.$$typeof === REACT_CONSUMER_TYPE &&\n console.error(\n \"Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?\"\n );\n return dispatcher.useContext(Context);\n };\n exports.useDebugValue = function (value, formatterFn) {\n return resolveDispatcher().useDebugValue(value, formatterFn);\n };\n exports.useDeferredValue = function (value, initialValue) {\n return resolveDispatcher().useDeferredValue(value, initialValue);\n };\n exports.useEffect = function (create, createDeps, update) {\n null == create &&\n console.warn(\n \"React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n var dispatcher = resolveDispatcher();\n if (\"function\" === typeof update)\n throw Error(\n \"useEffect CRUD overload is not enabled in this build of React.\"\n );\n return dispatcher.useEffect(create, createDeps);\n };\n exports.useId = function () {\n return resolveDispatcher().useId();\n };\n exports.useImperativeHandle = function (ref, create, deps) {\n return resolveDispatcher().useImperativeHandle(ref, create, deps);\n };\n exports.useInsertionEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useInsertionEffect(create, deps);\n };\n exports.useLayoutEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useLayoutEffect(create, deps);\n };\n exports.useMemo = function (create, deps) {\n return resolveDispatcher().useMemo(create, deps);\n };\n exports.useOptimistic = function (passthrough, reducer) {\n return resolveDispatcher().useOptimistic(passthrough, reducer);\n };\n exports.useReducer = function (reducer, initialArg, init) {\n return resolveDispatcher().useReducer(reducer, initialArg, init);\n };\n exports.useRef = function (initialValue) {\n return resolveDispatcher().useRef(initialValue);\n };\n exports.useState = function (initialState) {\n return resolveDispatcher().useState(initialState);\n };\n exports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n return resolveDispatcher().useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n };\n exports.useTransition = function () {\n return resolveDispatcher().useTransition();\n };\n exports.version = \"19.1.0\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTtBQUNiLEtBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvTUFBb007QUFDcE07QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLCtDQUErQyw2QkFBNkI7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMseUNBQXlDO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QSxJQUFJLGNBQWM7QUFDbEI7QUFDQTtBQUNBLElBQUksZ0JBQWdCO0FBQ3BCO0FBQ0E7QUFDQSxJQUFJLDRCQUE0QjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUkscUJBQXFCO0FBQ3pCO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcobWV0aG9kTmFtZSwgaW5mbykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbXBvbmVudC5wcm90b3R5cGUsIG1ldGhvZE5hbWUsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCIlcyguLi4pIGlzIGRlcHJlY2F0ZWQgaW4gcGxhaW4gSmF2YVNjcmlwdCBSZWFjdCBjbGFzc2VzLiAlc1wiLFxuICAgICAgICAgICAgaW5mb1swXSxcbiAgICAgICAgICAgIGluZm9bMV1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gbWF5YmVJdGVyYWJsZSB8fCBcIm9iamVjdFwiICE9PSB0eXBlb2YgbWF5YmVJdGVyYWJsZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBtYXliZUl0ZXJhYmxlID1cbiAgICAgICAgKE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgICAgIG1heWJlSXRlcmFibGVbXCJAQGl0ZXJhdG9yXCJdO1xuICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG1heWJlSXRlcmFibGUgPyBtYXliZUl0ZXJhYmxlIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHtcbiAgICAgIHB1YmxpY0luc3RhbmNlID1cbiAgICAgICAgKChwdWJsaWNJbnN0YW5jZSA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yKSAmJlxuICAgICAgICAgIChwdWJsaWNJbnN0YW5jZS5kaXNwbGF5TmFtZSB8fCBwdWJsaWNJbnN0YW5jZS5uYW1lKSkgfHxcbiAgICAgICAgXCJSZWFjdENsYXNzXCI7XG4gICAgICB2YXIgd2FybmluZ0tleSA9IHB1YmxpY0luc3RhbmNlICsgXCIuXCIgKyBjYWxsZXJOYW1lO1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldIHx8XG4gICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQ2FuJ3QgY2FsbCAlcyBvbiBhIGNvbXBvbmVudCB0aGF0IGlzIG5vdCB5ZXQgbW91bnRlZC4gVGhpcyBpcyBhIG5vLW9wLCBidXQgaXQgbWlnaHQgaW5kaWNhdGUgYSBidWcgaW4geW91ciBhcHBsaWNhdGlvbi4gSW5zdGVhZCwgYXNzaWduIHRvIGB0aGlzLnN0YXRlYCBkaXJlY3RseSBvciBkZWZpbmUgYSBgc3RhdGUgPSB7fTtgIGNsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC5cIixcbiAgICAgICAgICBjYWxsZXJOYW1lLFxuICAgICAgICAgIHB1YmxpY0luc3RhbmNlXG4gICAgICAgICksXG4gICAgICAgIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gPSAhMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgICAgIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIENvbXBvbmVudER1bW15KCkge31cbiAgICBmdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gICAgICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITA7XG4gICAgICB9XG4gICAgICBpZiAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGNvbnNvbGU7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXBfY29uc3QgPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQuZXJyb3I7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDAgPVxuICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTeW1ib2wgJiZcbiAgICAgICAgICAgIFN5bWJvbC50b1N0cmluZ1RhZyAmJlxuICAgICAgICAgICAgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkgfHxcbiAgICAgICAgICB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8XG4gICAgICAgICAgXCJPYmplY3RcIjtcbiAgICAgICAgSlNDb21waWxlcl90ZW1wX2NvbnN0LmNhbGwoXG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LFxuICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB7XG4gICAgICBpZiAobnVsbCA9PSB0eXBlKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICByZXR1cm4gdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIHR5cGU7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIkZyYWdtZW50XCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJQcm9maWxlclwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3RyaWN0TW9kZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfQUNUSVZJVFlfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJBY3Rpdml0eVwiO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgIChcIm51bWJlclwiID09PSB0eXBlb2YgdHlwZS50YWcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlLiQkdHlwZW9mKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIFwiUG9ydGFsXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuUHJvdmlkZXJcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlNVTUVSX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGUuX2NvbnRleHQuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuQ29uc3VtZXJcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICB2YXIgaW5uZXJUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIHR5cGUgfHxcbiAgICAgICAgICAgICAgKCh0eXBlID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8IFwiXCIpLFxuICAgICAgICAgICAgICAodHlwZSA9IFwiXCIgIT09IHR5cGUgPyBcIkZvcndhcmRSZWYoXCIgKyB0eXBlICsgXCIpXCIgOiBcIkZvcndhcmRSZWZcIikpO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoaW5uZXJUeXBlID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgPyBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiTWVtb1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgaW5uZXJUeXBlID0gdHlwZS5fcGF5bG9hZDtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLl9pbml0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKGlubmVyVHlwZSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhc2tOYW1lKHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSByZXR1cm4gXCI8PlwiO1xuICAgICAgaWYgKFxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRVxuICAgICAgKVxuICAgICAgICByZXR1cm4gXCI8Li4uPlwiO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICAgIHJldHVybiBuYW1lID8gXCI8XCIgKyBuYW1lICsgXCI+XCIgOiBcIjwuLi4+XCI7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHJldHVybiBcIjwuLi4+XCI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE93bmVyKCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5BO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGRpc3BhdGNoZXIgPyBudWxsIDogZGlzcGF0Y2hlci5nZXRPd25lcigpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBVbmtub3duT3duZXIoKSB7XG4gICAgICByZXR1cm4gRXJyb3IoXCJyZWFjdC1zdGFjay10b3AtZnJhbWVcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBcImtleVwiKSkge1xuICAgICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsIFwia2V5XCIpLmdldDtcbiAgICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2b2lkIDAgIT09IGNvbmZpZy5rZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICAgICAgZnVuY3Rpb24gd2FybkFib3V0QWNjZXNzaW5nS2V5KCkge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biB8fFxuICAgICAgICAgICgoc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSAhMCksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSB2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50IHByb3AuIChodHRwczovL3JlYWN0LmRldi9saW5rL3NwZWNpYWwtcHJvcHMpXCIsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZVxuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgICAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gITA7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsIFwia2V5XCIsIHtcbiAgICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZygpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHRoaXMudHlwZSk7XG4gICAgICBkaWRXYXJuQWJvdXRFbGVtZW50UmVmW2NvbXBvbmVudE5hbWVdIHx8XG4gICAgICAgICgoZGlkV2FybkFib3V0RWxlbWVudFJlZltjb21wb25lbnROYW1lXSA9ICEwKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkFjY2Vzc2luZyBlbGVtZW50LnJlZiB3YXMgcmVtb3ZlZCBpbiBSZWFjdCAxOS4gcmVmIGlzIG5vdyBhIHJlZ3VsYXIgcHJvcC4gSXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIEpTWCBFbGVtZW50IHR5cGUgaW4gYSBmdXR1cmUgcmVsZWFzZS5cIlxuICAgICAgICApKTtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSB0aGlzLnByb3BzLnJlZjtcbiAgICAgIHJldHVybiB2b2lkIDAgIT09IGNvbXBvbmVudE5hbWUgPyBjb21wb25lbnROYW1lIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gUmVhY3RFbGVtZW50KFxuICAgICAgdHlwZSxcbiAgICAgIGtleSxcbiAgICAgIHNlbGYsXG4gICAgICBzb3VyY2UsXG4gICAgICBvd25lcixcbiAgICAgIHByb3BzLFxuICAgICAgZGVidWdTdGFjayxcbiAgICAgIGRlYnVnVGFza1xuICAgICkge1xuICAgICAgc2VsZiA9IHByb3BzLnJlZjtcbiAgICAgIHR5cGUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgIF9vd25lcjogb3duZXJcbiAgICAgIH07XG4gICAgICBudWxsICE9PSAodm9pZCAwICE9PSBzZWxmID8gc2VsZiA6IG51bGwpXG4gICAgICAgID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgZ2V0OiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgIH0pXG4gICAgICAgIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHsgZW51bWVyYWJsZTogITEsIHZhbHVlOiBudWxsIH0pO1xuICAgICAgdHlwZS5fc3RvcmUgPSB7fTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLl9zdG9yZSwgXCJ2YWxpZGF0ZWRcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogMFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdJbmZvXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwiX2RlYnVnU3RhY2tcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogZGVidWdTdGFja1xuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdUYXNrXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IGRlYnVnVGFza1xuICAgICAgfSk7XG4gICAgICBPYmplY3QuZnJlZXplICYmIChPYmplY3QuZnJlZXplKHR5cGUucHJvcHMpLCBPYmplY3QuZnJlZXplKHR5cGUpKTtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbG9uZUFuZFJlcGxhY2VLZXkob2xkRWxlbWVudCwgbmV3S2V5KSB7XG4gICAgICBuZXdLZXkgPSBSZWFjdEVsZW1lbnQoXG4gICAgICAgIG9sZEVsZW1lbnQudHlwZSxcbiAgICAgICAgbmV3S2V5LFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgb2xkRWxlbWVudC5fb3duZXIsXG4gICAgICAgIG9sZEVsZW1lbnQucHJvcHMsXG4gICAgICAgIG9sZEVsZW1lbnQuX2RlYnVnU3RhY2ssXG4gICAgICAgIG9sZEVsZW1lbnQuX2RlYnVnVGFza1xuICAgICAgKTtcbiAgICAgIG9sZEVsZW1lbnQuX3N0b3JlICYmXG4gICAgICAgIChuZXdLZXkuX3N0b3JlLnZhbGlkYXRlZCA9IG9sZEVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCk7XG4gICAgICByZXR1cm4gbmV3S2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvYmplY3QgJiZcbiAgICAgICAgbnVsbCAhPT0gb2JqZWN0ICYmXG4gICAgICAgIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gICAgICB2YXIgZXNjYXBlckxvb2t1cCA9IHsgXCI9XCI6IFwiPTBcIiwgXCI6XCI6IFwiPTJcIiB9O1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgXCIkXCIgK1xuICAgICAgICBrZXkucmVwbGFjZSgvWz06XS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFbGVtZW50S2V5KGVsZW1lbnQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gXCJvYmplY3RcIiA9PT0gdHlwZW9mIGVsZW1lbnQgJiZcbiAgICAgICAgbnVsbCAhPT0gZWxlbWVudCAmJlxuICAgICAgICBudWxsICE9IGVsZW1lbnQua2V5XG4gICAgICAgID8gKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oZWxlbWVudC5rZXkpLCBlc2NhcGUoXCJcIiArIGVsZW1lbnQua2V5KSlcbiAgICAgICAgOiBpbmRleC50b1N0cmluZygzNik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vb3AkMSgpIHt9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVRoZW5hYmxlKHRoZW5hYmxlKSB7XG4gICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHRoZW5hYmxlLnZhbHVlO1xuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgdGhlbmFibGUuc3RhdHVzXG4gICAgICAgICAgICAgID8gdGhlbmFibGUudGhlbihub29wJDEsIG5vb3AkMSlcbiAgICAgICAgICAgICAgOiAoKHRoZW5hYmxlLnN0YXR1cyA9IFwicGVuZGluZ1wiKSxcbiAgICAgICAgICAgICAgICB0aGVuYWJsZS50aGVuKFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGZ1bGZpbGxlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKHRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICh0aGVuYWJsZS52YWx1ZSA9IGZ1bGZpbGxlZFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKHRoZW5hYmxlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgKHRoZW5hYmxlLnJlYXNvbiA9IGVycm9yKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICB0aGVuYWJsZS5zdGF0dXMpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgICAgIHJldHVybiB0aGVuYWJsZS52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgdGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcEludG9BcnJheShjaGlsZHJlbiwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5hbWVTb0ZhciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT09IHR5cGUgfHwgXCJib29sZWFuXCIgPT09IHR5cGUpIGNoaWxkcmVuID0gbnVsbDtcbiAgICAgIHZhciBpbnZva2VDYWxsYmFjayA9ICExO1xuICAgICAgaWYgKG51bGwgPT09IGNoaWxkcmVuKSBpbnZva2VDYWxsYmFjayA9ICEwO1xuICAgICAgZWxzZVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBzd2l0Y2ggKGNoaWxkcmVuLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAoaW52b2tlQ2FsbGJhY2sgPSBjaGlsZHJlbi5faW5pdCksXG4gICAgICAgICAgICAgICAgICBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrKGNoaWxkcmVuLl9wYXlsb2FkKSxcbiAgICAgICAgICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSBjaGlsZHJlbjtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayhpbnZva2VDYWxsYmFjayk7XG4gICAgICAgIHZhciBjaGlsZEtleSA9XG4gICAgICAgICAgXCJcIiA9PT0gbmFtZVNvRmFyID8gXCIuXCIgKyBnZXRFbGVtZW50S2V5KGludm9rZUNhbGxiYWNrLCAwKSA6IG5hbWVTb0ZhcjtcbiAgICAgICAgaXNBcnJheUltcGwoY2FsbGJhY2spXG4gICAgICAgICAgPyAoKGVzY2FwZWRQcmVmaXggPSBcIlwiKSxcbiAgICAgICAgICAgIG51bGwgIT0gY2hpbGRLZXkgJiZcbiAgICAgICAgICAgICAgKGVzY2FwZWRQcmVmaXggPVxuICAgICAgICAgICAgICAgIGNoaWxkS2V5LnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsIFwiJCYvXCIpICsgXCIvXCIpLFxuICAgICAgICAgICAgbWFwSW50b0FycmF5KGNhbGxiYWNrLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgXCJcIiwgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICA6IG51bGwgIT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgIChpc1ZhbGlkRWxlbWVudChjYWxsYmFjaykgJiZcbiAgICAgICAgICAgICAgKG51bGwgIT0gY2FsbGJhY2sua2V5ICYmXG4gICAgICAgICAgICAgICAgKChpbnZva2VDYWxsYmFjayAmJiBpbnZva2VDYWxsYmFjay5rZXkgPT09IGNhbGxiYWNrLmtleSkgfHxcbiAgICAgICAgICAgICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY2FsbGJhY2sua2V5KSksXG4gICAgICAgICAgICAgIChlc2NhcGVkUHJlZml4ID0gY2xvbmVBbmRSZXBsYWNlS2V5KFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXggK1xuICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY2FsbGJhY2sua2V5IHx8XG4gICAgICAgICAgICAgICAgICAoaW52b2tlQ2FsbGJhY2sgJiYgaW52b2tlQ2FsbGJhY2sua2V5ID09PSBjYWxsYmFjay5rZXkpXG4gICAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgICA6IChcIlwiICsgY2FsbGJhY2sua2V5KS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiQmL1wiXG4gICAgICAgICAgICAgICAgICAgICAgKSArIFwiL1wiKSArXG4gICAgICAgICAgICAgICAgICBjaGlsZEtleVxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgXCJcIiAhPT0gbmFtZVNvRmFyICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPSBpbnZva2VDYWxsYmFjayAmJlxuICAgICAgICAgICAgICAgIGlzVmFsaWRFbGVtZW50KGludm9rZUNhbGxiYWNrKSAmJlxuICAgICAgICAgICAgICAgIG51bGwgPT0gaW52b2tlQ2FsbGJhY2sua2V5ICYmXG4gICAgICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2suX3N0b3JlICYmXG4gICAgICAgICAgICAgICAgIWludm9rZUNhbGxiYWNrLl9zdG9yZS52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAoZXNjYXBlZFByZWZpeC5fc3RvcmUudmFsaWRhdGVkID0gMiksXG4gICAgICAgICAgICAgIChjYWxsYmFjayA9IGVzY2FwZWRQcmVmaXgpKSxcbiAgICAgICAgICAgIGFycmF5LnB1c2goY2FsbGJhY2spKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBpbnZva2VDYWxsYmFjayA9IDA7XG4gICAgICBjaGlsZEtleSA9IFwiXCIgPT09IG5hbWVTb0ZhciA/IFwiLlwiIDogbmFtZVNvRmFyICsgXCI6XCI7XG4gICAgICBpZiAoaXNBcnJheUltcGwoY2hpbGRyZW4pKVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIChuYW1lU29GYXIgPSBjaGlsZHJlbltpXSksXG4gICAgICAgICAgICAodHlwZSA9IGNoaWxkS2V5ICsgZ2V0RWxlbWVudEtleShuYW1lU29GYXIsIGkpKSxcbiAgICAgICAgICAgIChpbnZva2VDYWxsYmFjayArPSBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICApKTtcbiAgICAgIGVsc2UgaWYgKCgoaSA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pKSwgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaSkpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgaSA9PT0gY2hpbGRyZW4uZW50cmllcyAmJlxuICAgICAgICAgICAgKGRpZFdhcm5BYm91dE1hcHMgfHxcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIFwiVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLlwiXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZGlkV2FybkFib3V0TWFwcyA9ICEwKSksXG4gICAgICAgICAgICBjaGlsZHJlbiA9IGkuY2FsbChjaGlsZHJlbiksXG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAhKG5hbWVTb0ZhciA9IGNoaWxkcmVuLm5leHQoKSkuZG9uZTtcblxuICAgICAgICApXG4gICAgICAgICAgKG5hbWVTb0ZhciA9IG5hbWVTb0Zhci52YWx1ZSksXG4gICAgICAgICAgICAodHlwZSA9IGNoaWxkS2V5ICsgZ2V0RWxlbWVudEtleShuYW1lU29GYXIsIGkrKykpLFxuICAgICAgICAgICAgKGludm9rZUNhbGxiYWNrICs9IG1hcEludG9BcnJheShcbiAgICAgICAgICAgICAgbmFtZVNvRmFyLFxuICAgICAgICAgICAgICBhcnJheSxcbiAgICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICkpO1xuICAgICAgZWxzZSBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZSkge1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY2hpbGRyZW4udGhlbilcbiAgICAgICAgICByZXR1cm4gbWFwSW50b0FycmF5KFxuICAgICAgICAgICAgcmVzb2x2ZVRoZW5hYmxlKGNoaWxkcmVuKSxcbiAgICAgICAgICAgIGFycmF5LFxuICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgKTtcbiAgICAgICAgYXJyYXkgPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgK1xuICAgICAgICAgICAgKFwiW29iamVjdCBPYmplY3RdXCIgPT09IGFycmF5XG4gICAgICAgICAgICAgID8gXCJvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKFwiLCBcIikgKyBcIn1cIlxuICAgICAgICAgICAgICA6IGFycmF5KSArXG4gICAgICAgICAgICBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29udGV4dCkge1xuICAgICAgaWYgKG51bGwgPT0gY2hpbGRyZW4pIHJldHVybiBjaGlsZHJlbjtcbiAgICAgIHZhciByZXN1bHQgPSBbXSxcbiAgICAgICAgY291bnQgPSAwO1xuICAgICAgbWFwSW50b0FycmF5KGNoaWxkcmVuLCByZXN1bHQsIFwiXCIsIFwiXCIsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBjb3VudCsrKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGF6eUluaXRpYWxpemVyKHBheWxvYWQpIHtcbiAgICAgIGlmICgtMSA9PT0gcGF5bG9hZC5fc3RhdHVzKSB7XG4gICAgICAgIHZhciBjdG9yID0gcGF5bG9hZC5fcmVzdWx0O1xuICAgICAgICBjdG9yID0gY3RvcigpO1xuICAgICAgICBjdG9yLnRoZW4oXG4gICAgICAgICAgZnVuY3Rpb24gKG1vZHVsZU9iamVjdCkge1xuICAgICAgICAgICAgaWYgKDAgPT09IHBheWxvYWQuX3N0YXR1cyB8fCAtMSA9PT0gcGF5bG9hZC5fc3RhdHVzKVxuICAgICAgICAgICAgICAocGF5bG9hZC5fc3RhdHVzID0gMSksIChwYXlsb2FkLl9yZXN1bHQgPSBtb2R1bGVPYmplY3QpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gcGF5bG9hZC5fc3RhdHVzIHx8IC0xID09PSBwYXlsb2FkLl9zdGF0dXMpXG4gICAgICAgICAgICAgIChwYXlsb2FkLl9zdGF0dXMgPSAyKSwgKHBheWxvYWQuX3Jlc3VsdCA9IGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIC0xID09PSBwYXlsb2FkLl9zdGF0dXMgJiZcbiAgICAgICAgICAoKHBheWxvYWQuX3N0YXR1cyA9IDApLCAocGF5bG9hZC5fcmVzdWx0ID0gY3RvcikpO1xuICAgICAgfVxuICAgICAgaWYgKDEgPT09IHBheWxvYWQuX3N0YXR1cylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoY3RvciA9IHBheWxvYWQuX3Jlc3VsdCksXG4gICAgICAgICAgdm9pZCAwID09PSBjdG9yICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImxhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcG9ydCgnLi9NeUNvbXBvbmVudCcpKVxcblxcbkRpZCB5b3UgYWNjaWRlbnRhbGx5IHB1dCBjdXJseSBicmFjZXMgYXJvdW5kIHRoZSBpbXBvcnQ/XCIsXG4gICAgICAgICAgICAgIGN0b3JcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXCJkZWZhdWx0XCIgaW4gY3RvciB8fFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXBvcnQoKSBjYWxsLiBJbnN0ZWFkIHJlY2VpdmVkOiAlc1xcblxcbllvdXIgY29kZSBzaG91bGQgbG9vayBsaWtlOiBcXG4gIGNvbnN0IE15Q29tcG9uZW50ID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4vTXlDb21wb25lbnQnKSlcIixcbiAgICAgICAgICAgICAgY3RvclxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBjdG9yLmRlZmF1bHRcbiAgICAgICAgKTtcbiAgICAgIHRocm93IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICBudWxsID09PSBkaXNwYXRjaGVyICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub29wKCkge31cbiAgICBmdW5jdGlvbiBlbnF1ZXVlVGFzayh0YXNrKSB7XG4gICAgICBpZiAobnVsbCA9PT0gZW5xdWV1ZVRhc2tJbXBsKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciByZXF1aXJlU3RyaW5nID0gKFwicmVxdWlyZVwiICsgTWF0aC5yYW5kb20oKSkuc2xpY2UoMCwgNyk7XG4gICAgICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gKG1vZHVsZSAmJiBtb2R1bGVbcmVxdWlyZVN0cmluZ10pLmNhbGwoXG4gICAgICAgICAgICBtb2R1bGUsXG4gICAgICAgICAgICBcInRpbWVyc1wiXG4gICAgICAgICAgKS5zZXRJbW1lZGlhdGU7XG4gICAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgICBlbnF1ZXVlVGFza0ltcGwgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICExID09PSBkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCAmJlxuICAgICAgICAgICAgICAoKGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID0gITApLFxuICAgICAgICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgJiZcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJUaGlzIGJyb3dzZXIgZG9lcyBub3QgaGF2ZSBhIE1lc3NhZ2VDaGFubmVsIGltcGxlbWVudGF0aW9uLCBzbyBlbnF1ZXVpbmcgdGFza3MgdmlhIGF3YWl0IGFjdChhc3luYyAoKSA9PiAuLi4pIHdpbGwgZmFpbC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3VlcyBpZiB5b3UgZW5jb3VudGVyIHRoaXMgd2FybmluZy5cIlxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gY2FsbGJhY2s7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKHZvaWQgMCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIGVucXVldWVUYXNrSW1wbCh0YXNrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWdncmVnYXRlRXJyb3JzKGVycm9ycykge1xuICAgICAgcmV0dXJuIDEgPCBlcnJvcnMubGVuZ3RoICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yXG4gICAgICAgID8gbmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycylcbiAgICAgICAgOiBlcnJvcnNbMF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpIHtcbiAgICAgIHByZXZBY3RTY29wZURlcHRoICE9PSBhY3RTY29wZURlcHRoIC0gMSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiWW91IHNlZW0gdG8gaGF2ZSBvdmVybGFwcGluZyBhY3QoKSBjYWxscywgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBCZSBzdXJlIHRvIGF3YWl0IHByZXZpb3VzIGFjdCgpIGNhbGxzIGJlZm9yZSBtYWtpbmcgYSBuZXcgb25lLiBcIlxuICAgICAgICApO1xuICAgICAgYWN0U2NvcGVEZXB0aCA9IHByZXZBY3RTY29wZURlcHRoO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBxdWV1ZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlO1xuICAgICAgaWYgKG51bGwgIT09IHF1ZXVlKVxuICAgICAgICBpZiAoMCAhPT0gcXVldWUubGVuZ3RoKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmbHVzaEFjdFF1ZXVlKHF1ZXVlKTtcbiAgICAgICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSA9IG51bGw7XG4gICAgICAwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aFxuICAgICAgICA/ICgocXVldWUgPSBhZ2dyZWdhdGVFcnJvcnMoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwKSxcbiAgICAgICAgICByZWplY3QocXVldWUpKVxuICAgICAgICA6IHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaEFjdFF1ZXVlKHF1ZXVlKSB7XG4gICAgICBpZiAoIWlzRmx1c2hpbmcpIHtcbiAgICAgICAgaXNGbHVzaGluZyA9ICEwO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICg7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmRpZFVzZVByb21pc2UgPSAhMTtcbiAgICAgICAgICAgICAgdmFyIGNvbnRpbnVhdGlvbiA9IGNhbGxiYWNrKCExKTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT09IGNvbnRpbnVhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdFNoYXJlZEludGVybmFscy5kaWRVc2VQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICBxdWV1ZVtpXSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgcXVldWUuc3BsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGNvbnRpbnVhdGlvbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrO1xuICAgICAgICAgICAgfSB3aGlsZSAoMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcXVldWUuc3BsaWNlKDAsIGkgKyAxKSwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlzRmx1c2hpbmcgPSAhMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KEVycm9yKCkpO1xuICAgIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIiksXG4gICAgICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLFxuICAgICAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgICAgIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik7XG4gICAgU3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpO1xuICAgIHZhciBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICAgICAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gICAgICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICAgICAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gICAgICBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSxcbiAgICAgIFJFQUNUX0FDVElWSVRZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuYWN0aXZpdHlcIiksXG4gICAgICBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3IsXG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSB7fSxcbiAgICAgIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0ge1xuICAgICAgICBpc01vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIH0sXG4gICAgICAgIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgICAgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIFwiZm9yY2VVcGRhdGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgICAgICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBcInJlcGxhY2VTdGF0ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICAgICAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgXCJzZXRTdGF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFzc2lnbiA9IE9iamVjdC5hc3NpZ24sXG4gICAgICBlbXB0eU9iamVjdCA9IHt9O1xuICAgIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xuICAgIENvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuICAgIENvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICAgICAgaWYgKFxuICAgICAgICBcIm9iamVjdFwiICE9PSB0eXBlb2YgcGFydGlhbFN0YXRlICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHBhcnRpYWxTdGF0ZSAmJlxuICAgICAgICBudWxsICE9IHBhcnRpYWxTdGF0ZVxuICAgICAgKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcInRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLlwiXG4gICAgICAgICk7XG4gICAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssIFwic2V0U3RhdGVcIik7XG4gICAgfTtcbiAgICBDb21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCBcImZvcmNlVXBkYXRlXCIpO1xuICAgIH07XG4gICAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgICAgICBpc01vdW50ZWQ6IFtcbiAgICAgICAgICBcImlzTW91bnRlZFwiLFxuICAgICAgICAgIFwiSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gY29tcG9uZW50V2lsbFVubW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuXCJcbiAgICAgICAgXSxcbiAgICAgICAgcmVwbGFjZVN0YXRlOiBbXG4gICAgICAgICAgXCJyZXBsYWNlU3RhdGVcIixcbiAgICAgICAgICBcIlJlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzIzNikuXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGZuTmFtZTtcbiAgICBmb3IgKGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcylcbiAgICAgIGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkgJiZcbiAgICAgICAgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7XG4gICAgQ29tcG9uZW50RHVtbXkucHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgICBkZXByZWNhdGVkQVBJcyA9IFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7XG4gICAgZGVwcmVjYXRlZEFQSXMuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50O1xuICAgIGFzc2lnbihkZXByZWNhdGVkQVBJcywgQ29tcG9uZW50LnByb3RvdHlwZSk7XG4gICAgZGVwcmVjYXRlZEFQSXMuaXNQdXJlUmVhY3RDb21wb25lbnQgPSAhMDtcbiAgICB2YXIgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5LFxuICAgICAgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7XG4gICAgICAgIEg6IG51bGwsXG4gICAgICAgIEE6IG51bGwsXG4gICAgICAgIFQ6IG51bGwsXG4gICAgICAgIFM6IG51bGwsXG4gICAgICAgIFY6IG51bGwsXG4gICAgICAgIGFjdFF1ZXVlOiBudWxsLFxuICAgICAgICBpc0JhdGNoaW5nTGVnYWN5OiAhMSxcbiAgICAgICAgZGlkU2NoZWR1bGVMZWdhY3lVcGRhdGU6ICExLFxuICAgICAgICBkaWRVc2VQcm9taXNlOiAhMSxcbiAgICAgICAgdGhyb3duRXJyb3JzOiBbXSxcbiAgICAgICAgZ2V0Q3VycmVudFN0YWNrOiBudWxsLFxuICAgICAgICByZWNlbnRseUNyZWF0ZWRPd25lclN0YWNrczogMFxuICAgICAgfSxcbiAgICAgIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgIGNyZWF0ZVRhc2sgPSBjb25zb2xlLmNyZWF0ZVRhc2tcbiAgICAgICAgPyBjb25zb2xlLmNyZWF0ZVRhc2tcbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9O1xuICAgIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIjogZnVuY3Rpb24gKGNhbGxTdGFja0ZvckVycm9yKSB7XG4gICAgICAgIHJldHVybiBjYWxsU3RhY2tGb3JFcnJvcigpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBkaWRXYXJuQWJvdXRPbGRKU1hSdW50aW1lO1xuICAgIHZhciBkaWRXYXJuQWJvdXRFbGVtZW50UmVmID0ge307XG4gICAgdmFyIHVua25vd25Pd25lckRlYnVnU3RhY2sgPSBkZXByZWNhdGVkQVBJc1tcbiAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJcbiAgICBdLmJpbmQoZGVwcmVjYXRlZEFQSXMsIFVua25vd25Pd25lcikoKTtcbiAgICB2YXIgdW5rbm93bk93bmVyRGVidWdUYXNrID0gY3JlYXRlVGFzayhnZXRUYXNrTmFtZShVbmtub3duT3duZXIpKTtcbiAgICB2YXIgZGlkV2FybkFib3V0TWFwcyA9ICExLFxuICAgICAgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXFwvKy9nLFxuICAgICAgcmVwb3J0R2xvYmFsRXJyb3IgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXBvcnRFcnJvclxuICAgICAgICAgID8gcmVwb3J0RXJyb3JcbiAgICAgICAgICA6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHdpbmRvdyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHdpbmRvdy5FcnJvckV2ZW50XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBldmVudCA9IG5ldyB3aW5kb3cuRXJyb3JFdmVudChcImVycm9yXCIsIHtcbiAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6ICEwLFxuICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogITAsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICA/IFN0cmluZyhlcnJvci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpKSByZXR1cm47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHByb2Nlc3MgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcm9jZXNzLmVtaXRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25cIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0sXG4gICAgICBkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCA9ICExLFxuICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gbnVsbCxcbiAgICAgIGFjdFNjb3BlRGVwdGggPSAwLFxuICAgICAgZGlkV2Fybk5vQXdhaXRBY3QgPSAhMSxcbiAgICAgIGlzRmx1c2hpbmcgPSAhMSxcbiAgICAgIHF1ZXVlU2V2ZXJhbE1pY3JvdGFza3MgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBxdWV1ZU1pY3JvdGFza1xuICAgICAgICAgID8gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IGVucXVldWVUYXNrO1xuICAgIGRlcHJlY2F0ZWRBUElzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICBjOiBmdW5jdGlvbiAoc2l6ZSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VNZW1vQ2FjaGUoc2l6ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZXhwb3J0cy5DaGlsZHJlbiA9IHtcbiAgICAgIG1hcDogbWFwQ2hpbGRyZW4sXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiAoY2hpbGRyZW4sIGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkge1xuICAgICAgICBtYXBDaGlsZHJlbihcbiAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZm9yRWFjaENvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBjb3VudDogZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBuKys7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH0sXG4gICAgICB0b0FycmF5OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgfSkgfHwgW11cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvbmx5OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG4gICAgZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG4gICAgZXhwb3J0cy5Qcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gICAgZXhwb3J0cy5QdXJlQ29tcG9uZW50ID0gUHVyZUNvbXBvbmVudDtcbiAgICBleHBvcnRzLlN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xuICAgIGV4cG9ydHMuU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICAgIGV4cG9ydHMuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFID1cbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuICAgIGV4cG9ydHMuX19DT01QSUxFUl9SVU5USU1FID0gZGVwcmVjYXRlZEFQSXM7XG4gICAgZXhwb3J0cy5hY3QgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHZhciBwcmV2QWN0UXVldWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSxcbiAgICAgICAgcHJldkFjdFNjb3BlRGVwdGggPSBhY3RTY29wZURlcHRoO1xuICAgICAgYWN0U2NvcGVEZXB0aCsrO1xuICAgICAgdmFyIHF1ZXVlID0gKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlID1cbiAgICAgICAgICBudWxsICE9PSBwcmV2QWN0UXVldWUgPyBwcmV2QWN0UXVldWUgOiBbXSksXG4gICAgICAgIGRpZEF3YWl0QWN0Q2FsbCA9ICExO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMucHVzaChlcnJvcik7XG4gICAgICB9XG4gICAgICBpZiAoMCA8IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGgpXG4gICAgICAgIHRocm93IChcbiAgICAgICAgICAocG9wQWN0U2NvcGUocHJldkFjdFF1ZXVlLCBwcmV2QWN0U2NvcGVEZXB0aCksXG4gICAgICAgICAgKGNhbGxiYWNrID0gYWdncmVnYXRlRXJyb3JzKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycykpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoID0gMCksXG4gICAgICAgICAgY2FsbGJhY2spXG4gICAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IHJlc3VsdCAmJlxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcmVzdWx0ICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlc3VsdC50aGVuXG4gICAgICApIHtcbiAgICAgICAgdmFyIHRoZW5hYmxlID0gcmVzdWx0O1xuICAgICAgICBxdWV1ZVNldmVyYWxNaWNyb3Rhc2tzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkaWRBd2FpdEFjdENhbGwgfHxcbiAgICAgICAgICAgIGRpZFdhcm5Ob0F3YWl0QWN0IHx8XG4gICAgICAgICAgICAoKGRpZFdhcm5Ob0F3YWl0QWN0ID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJZb3UgY2FsbGVkIGFjdChhc3luYyAoKSA9PiAuLi4pIHdpdGhvdXQgYXdhaXQuIFRoaXMgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIHRlc3RpbmcgYmVoYXZpb3VyLCBpbnRlcmxlYXZpbmcgbXVsdGlwbGUgYWN0IGNhbGxzIGFuZCBtaXhpbmcgdGhlaXIgc2NvcGVzLiBZb3Ugc2hvdWxkIC0gYXdhaXQgYWN0KGFzeW5jICgpID0+IC4uLik7XCJcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBkaWRBd2FpdEFjdENhbGwgPSAhMDtcbiAgICAgICAgICAgIHRoZW5hYmxlLnRoZW4oXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChyZXR1cm5WYWx1ZSkge1xuICAgICAgICAgICAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpO1xuICAgICAgICAgICAgICAgIGlmICgwID09PSBwcmV2QWN0U2NvcGVEZXB0aCkge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZmx1c2hBY3RRdWV1ZShxdWV1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvciQwKSB7XG4gICAgICAgICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5wdXNoKGVycm9yJDApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGhyb3duRXJyb3IgPSBhZ2dyZWdhdGVFcnJvcnMoXG4gICAgICAgICAgICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoX3Rocm93bkVycm9yKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpO1xuICAgICAgICAgICAgICAgIDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICA/ICgoZXJyb3IgPSBhZ2dyZWdhdGVFcnJvcnMoXG4gICAgICAgICAgICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCA9IDApLFxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpKVxuICAgICAgICAgICAgICAgICAgOiByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciByZXR1cm5WYWx1ZSRqc2NvbXAkMCA9IHJlc3VsdDtcbiAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpO1xuICAgICAgMCA9PT0gcHJldkFjdFNjb3BlRGVwdGggJiZcbiAgICAgICAgKGZsdXNoQWN0UXVldWUocXVldWUpLFxuICAgICAgICAwICE9PSBxdWV1ZS5sZW5ndGggJiZcbiAgICAgICAgICBxdWV1ZVNldmVyYWxNaWNyb3Rhc2tzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRpZEF3YWl0QWN0Q2FsbCB8fFxuICAgICAgICAgICAgICBkaWRXYXJuTm9Bd2FpdEFjdCB8fFxuICAgICAgICAgICAgICAoKGRpZFdhcm5Ob0F3YWl0QWN0ID0gITApLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiQSBjb21wb25lbnQgc3VzcGVuZGVkIGluc2lkZSBhbiBgYWN0YCBzY29wZSwgYnV0IHRoZSBgYWN0YCBjYWxsIHdhcyBub3QgYXdhaXRlZC4gV2hlbiB0ZXN0aW5nIFJlYWN0IGNvbXBvbmVudHMgdGhhdCBkZXBlbmQgb24gYXN5bmNocm9ub3VzIGRhdGEsIHlvdSBtdXN0IGF3YWl0IHRoZSByZXN1bHQ6XFxuXFxuYXdhaXQgYWN0KCgpID0+IC4uLilcIlxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlID0gbnVsbCkpO1xuICAgICAgaWYgKDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoKVxuICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgKChjYWxsYmFjayA9IGFnZ3JlZ2F0ZUVycm9ycyhSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMpKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCA9IDApLFxuICAgICAgICAgIGNhbGxiYWNrKVxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGRpZEF3YWl0QWN0Q2FsbCA9ICEwO1xuICAgICAgICAgIDAgPT09IHByZXZBY3RTY29wZURlcHRoXG4gICAgICAgICAgICA/ICgoUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgPSBxdWV1ZSksXG4gICAgICAgICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjdXJzaXZlbHlGbHVzaEFzeW5jQWN0V29yayhcbiAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlJGpzY29tcCQwLFxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiByZXNvbHZlKHJldHVyblZhbHVlJGpzY29tcCQwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY2FjaGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY2FwdHVyZU93bmVyU3RhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZ2V0Q3VycmVudFN0YWNrID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGdldEN1cnJlbnRTdGFjayA/IG51bGwgOiBnZXRDdXJyZW50U3RhY2soKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY2xvbmVFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChudWxsID09PSBlbGVtZW50IHx8IHZvaWQgMCA9PT0gZWxlbWVudClcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkIFwiICtcbiAgICAgICAgICAgIGVsZW1lbnQgK1xuICAgICAgICAgICAgXCIuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgZWxlbWVudC5wcm9wcyksXG4gICAgICAgIGtleSA9IGVsZW1lbnQua2V5LFxuICAgICAgICBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgaWYgKG51bGwgIT0gY29uZmlnKSB7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICAgIGE6IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgXCJyZWZcIikgJiZcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIFwicmVmXCJcbiAgICAgICAgICAgICkuZ2V0KSAmJlxuICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LmlzUmVhY3RXYXJuaW5nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHZvaWQgMCAhPT0gY29uZmlnLnJlZjtcbiAgICAgICAgfVxuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgJiYgKG93bmVyID0gZ2V0T3duZXIoKSk7XG4gICAgICAgIGhhc1ZhbGlkS2V5KGNvbmZpZykgJiZcbiAgICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KSwgKGtleSA9IFwiXCIgKyBjb25maWcua2V5KSk7XG4gICAgICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKVxuICAgICAgICAgICFoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpIHx8XG4gICAgICAgICAgICBcImtleVwiID09PSBwcm9wTmFtZSB8fFxuICAgICAgICAgICAgXCJfX3NlbGZcIiA9PT0gcHJvcE5hbWUgfHxcbiAgICAgICAgICAgIFwiX19zb3VyY2VcIiA9PT0gcHJvcE5hbWUgfHxcbiAgICAgICAgICAgIChcInJlZlwiID09PSBwcm9wTmFtZSAmJiB2b2lkIDAgPT09IGNvbmZpZy5yZWYpIHx8XG4gICAgICAgICAgICAocHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXSk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcE5hbWUgPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICAgIGlmICgxID09PSBwcm9wTmFtZSkgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIGVsc2UgaWYgKDEgPCBwcm9wTmFtZSkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBBcnJheShwcm9wTmFtZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcE5hbWU7IGkrKylcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgICAgICBwcm9wcy5jaGlsZHJlbiA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICAgIH1cbiAgICAgIHByb3BzID0gUmVhY3RFbGVtZW50KFxuICAgICAgICBlbGVtZW50LnR5cGUsXG4gICAgICAgIGtleSxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIG93bmVyLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgZWxlbWVudC5fZGVidWdTdGFjayxcbiAgICAgICAgZWxlbWVudC5fZGVidWdUYXNrXG4gICAgICApO1xuICAgICAgZm9yIChrZXkgPSAyOyBrZXkgPCBhcmd1bWVudHMubGVuZ3RoOyBrZXkrKylcbiAgICAgICAgKG93bmVyID0gYXJndW1lbnRzW2tleV0pLFxuICAgICAgICAgIGlzVmFsaWRFbGVtZW50KG93bmVyKSAmJiBvd25lci5fc3RvcmUgJiYgKG93bmVyLl9zdG9yZS52YWxpZGF0ZWQgPSAxKTtcbiAgICAgIHJldHVybiBwcm9wcztcbiAgICB9O1xuICAgIGV4cG9ydHMuY3JlYXRlQ29udGV4dCA9IGZ1bmN0aW9uIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgICBfY3VycmVudFZhbHVlMjogZGVmYXVsdFZhbHVlLFxuICAgICAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgICAgIFByb3ZpZGVyOiBudWxsLFxuICAgICAgICBDb25zdW1lcjogbnVsbFxuICAgICAgfTtcbiAgICAgIGRlZmF1bHRWYWx1ZS5Qcm92aWRlciA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIGRlZmF1bHRWYWx1ZS5Db25zdW1lciA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlNVTUVSX1RZUEUsXG4gICAgICAgIF9jb250ZXh0OiBkZWZhdWx0VmFsdWVcbiAgICAgIH07XG4gICAgICBkZWZhdWx0VmFsdWUuX2N1cnJlbnRSZW5kZXJlciA9IG51bGw7XG4gICAgICBkZWZhdWx0VmFsdWUuX2N1cnJlbnRSZW5kZXJlcjIgPSBudWxsO1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgaXNWYWxpZEVsZW1lbnQobm9kZSkgJiYgbm9kZS5fc3RvcmUgJiYgKG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IDEpO1xuICAgICAgfVxuICAgICAgaSA9IHt9O1xuICAgICAgbm9kZSA9IG51bGw7XG4gICAgICBpZiAobnVsbCAhPSBjb25maWcpXG4gICAgICAgIGZvciAocHJvcE5hbWUgaW4gKGRpZFdhcm5BYm91dE9sZEpTWFJ1bnRpbWUgfHxcbiAgICAgICAgICAhKFwiX19zZWxmXCIgaW4gY29uZmlnKSB8fFxuICAgICAgICAgIFwia2V5XCIgaW4gY29uZmlnIHx8XG4gICAgICAgICAgKChkaWRXYXJuQWJvdXRPbGRKU1hSdW50aW1lID0gITApLFxuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiWW91ciBhcHAgKG9yIG9uZSBvZiBpdHMgZGVwZW5kZW5jaWVzKSBpcyB1c2luZyBhbiBvdXRkYXRlZCBKU1ggdHJhbnNmb3JtLiBVcGRhdGUgdG8gdGhlIG1vZGVybiBKU1ggdHJhbnNmb3JtIGZvciBmYXN0ZXIgcGVyZm9ybWFuY2U6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvbmV3LWpzeC10cmFuc2Zvcm1cIlxuICAgICAgICAgICkpLFxuICAgICAgICBoYXNWYWxpZEtleShjb25maWcpICYmXG4gICAgICAgICAgKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSksIChub2RlID0gXCJcIiArIGNvbmZpZy5rZXkpKSxcbiAgICAgICAgY29uZmlnKSlcbiAgICAgICAgICBoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmXG4gICAgICAgICAgICBcImtleVwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICAgICAgXCJfX3NlbGZcIiAhPT0gcHJvcE5hbWUgJiZcbiAgICAgICAgICAgIFwiX19zb3VyY2VcIiAhPT0gcHJvcE5hbWUgJiZcbiAgICAgICAgICAgIChpW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV0pO1xuICAgICAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gICAgICBpZiAoMSA9PT0gY2hpbGRyZW5MZW5ndGgpIGkuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIGVsc2UgaWYgKDEgPCBjaGlsZHJlbkxlbmd0aCkge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpLCBfaSA9IDA7XG4gICAgICAgICAgX2kgPCBjaGlsZHJlbkxlbmd0aDtcbiAgICAgICAgICBfaSsrXG4gICAgICAgIClcbiAgICAgICAgICBjaGlsZEFycmF5W19pXSA9IGFyZ3VtZW50c1tfaSArIDJdO1xuICAgICAgICBPYmplY3QuZnJlZXplICYmIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICAgIGkuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpXG4gICAgICAgIGZvciAocHJvcE5hbWUgaW4gKChjaGlsZHJlbkxlbmd0aCA9IHR5cGUuZGVmYXVsdFByb3BzKSwgY2hpbGRyZW5MZW5ndGgpKVxuICAgICAgICAgIHZvaWQgMCA9PT0gaVtwcm9wTmFtZV0gJiYgKGlbcHJvcE5hbWVdID0gY2hpbGRyZW5MZW5ndGhbcHJvcE5hbWVdKTtcbiAgICAgIG5vZGUgJiZcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIoXG4gICAgICAgICAgaSxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlXG4gICAgICAgICAgICA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IFwiVW5rbm93blwiXG4gICAgICAgICAgICA6IHR5cGVcbiAgICAgICAgKTtcbiAgICAgIHZhciBwcm9wTmFtZSA9IDFlNCA+IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnJlY2VudGx5Q3JlYXRlZE93bmVyU3RhY2tzKys7XG4gICAgICByZXR1cm4gUmVhY3RFbGVtZW50KFxuICAgICAgICB0eXBlLFxuICAgICAgICBub2RlLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgZ2V0T3duZXIoKSxcbiAgICAgICAgaSxcbiAgICAgICAgcHJvcE5hbWUgPyBFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKSA6IHVua25vd25Pd25lckRlYnVnU3RhY2ssXG4gICAgICAgIHByb3BOYW1lID8gY3JlYXRlVGFzayhnZXRUYXNrTmFtZSh0eXBlKSkgOiB1bmtub3duT3duZXJEZWJ1Z1Rhc2tcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZVJlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZWZPYmplY3QgPSB7IGN1cnJlbnQ6IG51bGwgfTtcbiAgICAgIE9iamVjdC5zZWFsKHJlZk9iamVjdCk7XG4gICAgICByZXR1cm4gcmVmT2JqZWN0O1xuICAgIH07XG4gICAgZXhwb3J0cy5mb3J3YXJkUmVmID0gZnVuY3Rpb24gKHJlbmRlcikge1xuICAgICAgbnVsbCAhPSByZW5kZXIgJiYgcmVuZGVyLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEVcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCByZWNlaXZlZCBhIGBtZW1vYCBjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgbWVtbyhmb3J3YXJkUmVmKC4uLikpLlwiXG4gICAgICAgICAgKVxuICAgICAgICA6IFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHJlbmRlclxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuXCIsXG4gICAgICAgICAgICAgIG51bGwgPT09IHJlbmRlciA/IFwibnVsbFwiIDogdHlwZW9mIHJlbmRlclxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogMCAhPT0gcmVuZGVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgMiAhPT0gcmVuZGVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzXCIsXG4gICAgICAgICAgICAgIDEgPT09IHJlbmRlci5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IFwiRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyP1wiXG4gICAgICAgICAgICAgICAgOiBcIkFueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgIG51bGwgIT0gcmVuZGVyICYmXG4gICAgICAgIG51bGwgIT0gcmVuZGVyLmRlZmF1bHRQcm9wcyAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IGRlZmF1bHRQcm9wcy4gRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD9cIlxuICAgICAgICApO1xuICAgICAgdmFyIGVsZW1lbnRUeXBlID0geyAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSwgcmVuZGVyOiByZW5kZXIgfSxcbiAgICAgICAgb3duTmFtZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgXCJkaXNwbGF5TmFtZVwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIG93bk5hbWUgPSBuYW1lO1xuICAgICAgICAgIHJlbmRlci5uYW1lIHx8XG4gICAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICAgIChPYmplY3QuZGVmaW5lUHJvcGVydHkocmVuZGVyLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KSxcbiAgICAgICAgICAgIChyZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGVsZW1lbnRUeXBlO1xuICAgIH07XG4gICAgZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuICAgIGV4cG9ydHMubGF6eSA9IGZ1bmN0aW9uIChjdG9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgICAgICBfcGF5bG9hZDogeyBfc3RhdHVzOiAtMSwgX3Jlc3VsdDogY3RvciB9LFxuICAgICAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gICAgICB9O1xuICAgIH07XG4gICAgZXhwb3J0cy5tZW1vID0gZnVuY3Rpb24gKHR5cGUsIGNvbXBhcmUpIHtcbiAgICAgIG51bGwgPT0gdHlwZSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwibWVtbzogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBjb21wb25lbnQuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzXCIsXG4gICAgICAgICAgbnVsbCA9PT0gdHlwZSA/IFwibnVsbFwiIDogdHlwZW9mIHR5cGVcbiAgICAgICAgKTtcbiAgICAgIGNvbXBhcmUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGNvbXBhcmU6IHZvaWQgMCA9PT0gY29tcGFyZSA/IG51bGwgOiBjb21wYXJlXG4gICAgICB9O1xuICAgICAgdmFyIG93bk5hbWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29tcGFyZSwgXCJkaXNwbGF5TmFtZVwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIG93bk5hbWUgPSBuYW1lO1xuICAgICAgICAgIHR5cGUubmFtZSB8fFxuICAgICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgICAgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KSxcbiAgICAgICAgICAgICh0eXBlLmRpc3BsYXlOYW1lID0gbmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb21wYXJlO1xuICAgIH07XG4gICAgZXhwb3J0cy5zdGFydFRyYW5zaXRpb24gPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQsXG4gICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uID0ge307XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gY3VycmVudFRyYW5zaXRpb247XG4gICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IHNjb3BlKCksXG4gICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgICAgICBudWxsICE9PSBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCAmJlxuICAgICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKGN1cnJlbnRUcmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgICAgIG51bGwgIT09IHJldHVyblZhbHVlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUudGhlbiAmJlxuICAgICAgICAgIHJldHVyblZhbHVlLnRoZW4obm9vcCwgcmVwb3J0R2xvYmFsRXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVwb3J0R2xvYmFsRXJyb3IoZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbnVsbCA9PT0gcHJldlRyYW5zaXRpb24gJiZcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyAmJlxuICAgICAgICAgICgoc2NvcGUgPSBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5zaXplKSxcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5jbGVhcigpLFxuICAgICAgICAgIDEwIDwgc2NvcGUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgXCJEZXRlY3RlZCBhIGxhcmdlIG51bWJlciBvZiB1cGRhdGVzIGluc2lkZSBzdGFydFRyYW5zaXRpb24uIElmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuIE90aGVyd2lzZSBjb25jdXJyZW50IG1vZGUgZ3VhcmFudGVlcyBhcmUgb2ZmIHRoZSB0YWJsZS5cIlxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbik7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUNhY2hlUmVmcmVzaCgpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2UgPSBmdW5jdGlvbiAodXNhYmxlKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2UodXNhYmxlKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlQWN0aW9uU3RhdGUgPSBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUsIHBlcm1hbGluaykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlQWN0aW9uU3RhdGUoXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICBwZXJtYWxpbmtcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUNhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUNvbnRleHQgPSBmdW5jdGlvbiAoQ29udGV4dCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgICAgQ29udGV4dC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgYnVncy4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkP1wiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlci51c2VDb250ZXh0KENvbnRleHQpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VEZWZlcnJlZFZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUVmZmVjdCA9IGZ1bmN0aW9uIChjcmVhdGUsIGNyZWF0ZURlcHMsIHVwZGF0ZSkge1xuICAgICAgbnVsbCA9PSBjcmVhdGUgJiZcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiUmVhY3QgSG9vayB1c2VFZmZlY3QgcmVxdWlyZXMgYW4gZWZmZWN0IGNhbGxiYWNrLiBEaWQgeW91IGZvcmdldCB0byBwYXNzIGEgY2FsbGJhY2sgdG8gdGhlIGhvb2s/XCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB1cGRhdGUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwidXNlRWZmZWN0IENSVUQgb3ZlcmxvYWQgaXMgbm90IGVuYWJsZWQgaW4gdGhpcyBidWlsZCBvZiBSZWFjdC5cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRWZmZWN0KGNyZWF0ZSwgY3JlYXRlRGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUlkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlSWQoKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZSA9IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUluc2VydGlvbkVmZmVjdCA9IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIG51bGwgPT0gY3JlYXRlICYmXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIlJlYWN0IEhvb2sgdXNlSW5zZXJ0aW9uRWZmZWN0IHJlcXVpcmVzIGFuIGVmZmVjdCBjYWxsYmFjay4gRGlkIHlvdSBmb3JnZXQgdG8gcGFzcyBhIGNhbGxiYWNrIHRvIHRoZSBob29rP1wiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgbnVsbCA9PSBjcmVhdGUgJiZcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiUmVhY3QgSG9vayB1c2VMYXlvdXRFZmZlY3QgcmVxdWlyZXMgYW4gZWZmZWN0IGNhbGxiYWNrLiBEaWQgeW91IGZvcmdldCB0byBwYXNzIGEgY2FsbGJhY2sgdG8gdGhlIGhvb2s/XCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VNZW1vID0gZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VPcHRpbWlzdGljID0gZnVuY3Rpb24gKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlUmVkdWNlciA9IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VSZWYgPSBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlU3RhdGUgPSBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IGZ1bmN0aW9uIChcbiAgICAgIHN1YnNjcmliZSxcbiAgICAgIGdldFNuYXBzaG90LFxuICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICApIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlVHJhbnNpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVRyYW5zaXRpb24oKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudmVyc2lvbiA9IFwiMTkuMS4wXCI7XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AoRXJyb3IoKSk7XG4gIH0pKCk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.development.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js":
/*!*********************************************************************!*\
!*** ./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js ***!
\*********************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSwyS0FBc0Q7QUFDeEQiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/index.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js":
/*!***************************************************************************!*\
!*** ./node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js ***!
\***************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-runtime.development.js */ \"(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react-jsx-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL3JlYWN0L2pzeC1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSxtTUFBa0U7QUFDcEUiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvcmVhY3QvanN4LXJ1bnRpbWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/scheduler@0.26.0/node_modules/scheduler/cjs/scheduler.development.js":
/*!*************************************************************************************************!*\
!*** ./node_modules/.pnpm/scheduler@0.26.0/node_modules/scheduler/cjs/scheduler.development.js ***!
\*************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("/**\n * @license React\n * scheduler.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 function performWorkUntilDeadline() {\n needsPaint = !1;\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime &&\n shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n }\n function push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node),\n (heap[index] = parent),\n (index = parentIndex);\n else break a;\n }\n }\n function peek(heap) {\n return 0 === heap.length ? null : heap[0];\n }\n function pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex);\n else break a;\n }\n }\n return first;\n }\n function compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n }\n function advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n }\n function handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n }\n }\n function shouldYieldToHost() {\n return needsPaint\n ? !0\n : exports.unstable_now() - startTime < frameInterval\n ? !1\n : !0;\n }\n function requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n exports.unstable_now = void 0;\n if (\n \"object\" === typeof performance &&\n \"function\" === typeof performance.now\n ) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n } else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n }\n var taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n needsPaint = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout =\n \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate =\n \"undefined\" !== typeof setImmediate ? setImmediate : null,\n isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\n if (\"function\" === typeof localSetImmediate)\n var schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\n else if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n } else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\n exports.unstable_IdlePriority = 5;\n exports.unstable_ImmediatePriority = 1;\n exports.unstable_LowPriority = 4;\n exports.unstable_NormalPriority = 3;\n exports.unstable_Profiling = null;\n exports.unstable_UserBlockingPriority = 2;\n exports.unstable_cancelCallback = function (task) {\n task.callback = null;\n };\n exports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n };\n exports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n };\n exports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n exports.unstable_requestPaint = function () {\n needsPaint = !0;\n };\n exports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n exports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n ) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0),\n schedulePerformWorkUntilDeadline())));\n return priorityLevel;\n };\n exports.unstable_shouldYield = shouldYieldToHost;\n exports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9zY2hlZHVsZXJAMC4yNi4wL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxnQkFBZ0I7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLG9CQUFvQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxvQkFBb0I7QUFDMUI7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTSxvQkFBb0I7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJLDZCQUE2QjtBQUNqQyxJQUFJLGtDQUFrQztBQUN0QyxJQUFJLDRCQUE0QjtBQUNoQyxJQUFJLCtCQUErQjtBQUNuQyxJQUFJLDBCQUEwQjtBQUM5QixJQUFJLHFDQUFxQztBQUN6QyxJQUFJLCtCQUErQjtBQUNuQztBQUNBO0FBQ0EsSUFBSSwrQkFBK0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx3Q0FBd0M7QUFDNUM7QUFDQTtBQUNBLElBQUkscUJBQXFCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLElBQUksNkJBQTZCO0FBQ2pDO0FBQ0E7QUFDQSxJQUFJLGdDQUFnQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLElBQUksaUNBQWlDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLDRCQUE0QjtBQUNoQyxJQUFJLDZCQUE2QjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUciLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvbm9kZV9tb2R1bGVzLy5wbnBtL3NjaGVkdWxlckAwLjI2LjAvbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHNjaGVkdWxlci5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUoKSB7XG4gICAgICBuZWVkc1BhaW50ID0gITE7XG4gICAgICBpZiAoaXNNZXNzYWdlTG9vcFJ1bm5pbmcpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICAgIHZhciBoYXNNb3JlV29yayA9ICEwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITE7XG4gICAgICAgICAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkICYmXG4gICAgICAgICAgICAgICgoaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICExKSxcbiAgICAgICAgICAgICAgbG9jYWxDbGVhclRpbWVvdXQodGFza1RpbWVvdXRJRCksXG4gICAgICAgICAgICAgICh0YXNrVGltZW91dElEID0gLTEpKTtcbiAgICAgICAgICAgIGlzUGVyZm9ybWluZ1dvcmsgPSAhMDtcbiAgICAgICAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50VGFzayAmJlxuICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPiBjdXJyZW50VGltZSAmJlxuICAgICAgICAgICAgICAgICAgICBzaG91bGRZaWVsZFRvSG9zdCgpXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50VGFzay5jYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFRhc2sucHJpb3JpdHlMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRpbnVhdGlvbkNhbGxiYWNrID0gY2FsbGJhY2soXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGludWF0aW9uQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IGNvbnRpbnVhdGlvbkNhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgIGhhc01vcmVXb3JrID0gITA7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFzayA9PT0gcGVlayh0YXNrUXVldWUpICYmIHBvcCh0YXNrUXVldWUpO1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBwb3AodGFza1F1ZXVlKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudFRhc2spIGhhc01vcmVXb3JrID0gITA7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBmaXJzdFRpbWVyICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUaW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGhhc01vcmVXb3JrID0gITE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAoY3VycmVudFRhc2sgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWwpLFxuICAgICAgICAgICAgICAgIChpc1BlcmZvcm1pbmdXb3JrID0gITEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFzTW9yZVdvcmsgPSB2b2lkIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGhhc01vcmVXb3JrXG4gICAgICAgICAgICA/IHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKClcbiAgICAgICAgICAgIDogKGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gITEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2goaGVhcCwgbm9kZSkge1xuICAgICAgdmFyIGluZGV4ID0gaGVhcC5sZW5ndGg7XG4gICAgICBoZWFwLnB1c2gobm9kZSk7XG4gICAgICBhOiBmb3IgKDsgMCA8IGluZGV4OyApIHtcbiAgICAgICAgdmFyIHBhcmVudEluZGV4ID0gKGluZGV4IC0gMSkgPj4+IDEsXG4gICAgICAgICAgcGFyZW50ID0gaGVhcFtwYXJlbnRJbmRleF07XG4gICAgICAgIGlmICgwIDwgY29tcGFyZShwYXJlbnQsIG5vZGUpKVxuICAgICAgICAgIChoZWFwW3BhcmVudEluZGV4XSA9IG5vZGUpLFxuICAgICAgICAgICAgKGhlYXBbaW5kZXhdID0gcGFyZW50KSxcbiAgICAgICAgICAgIChpbmRleCA9IHBhcmVudEluZGV4KTtcbiAgICAgICAgZWxzZSBicmVhayBhO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgICAgIHJldHVybiAwID09PSBoZWFwLmxlbmd0aCA/IG51bGwgOiBoZWFwWzBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3AoaGVhcCkge1xuICAgICAgaWYgKDAgPT09IGhlYXAubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBmaXJzdCA9IGhlYXBbMF0sXG4gICAgICAgIGxhc3QgPSBoZWFwLnBvcCgpO1xuICAgICAgaWYgKGxhc3QgIT09IGZpcnN0KSB7XG4gICAgICAgIGhlYXBbMF0gPSBsYXN0O1xuICAgICAgICBhOiBmb3IgKFxuICAgICAgICAgIHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGhlYXAubGVuZ3RoLCBoYWxmTGVuZ3RoID0gbGVuZ3RoID4+PiAxO1xuICAgICAgICAgIGluZGV4IDwgaGFsZkxlbmd0aDtcblxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgbGVmdEluZGV4ID0gMiAqIChpbmRleCArIDEpIC0gMSxcbiAgICAgICAgICAgIGxlZnQgPSBoZWFwW2xlZnRJbmRleF0sXG4gICAgICAgICAgICByaWdodEluZGV4ID0gbGVmdEluZGV4ICsgMSxcbiAgICAgICAgICAgIHJpZ2h0ID0gaGVhcFtyaWdodEluZGV4XTtcbiAgICAgICAgICBpZiAoMCA+IGNvbXBhcmUobGVmdCwgbGFzdCkpXG4gICAgICAgICAgICByaWdodEluZGV4IDwgbGVuZ3RoICYmIDAgPiBjb21wYXJlKHJpZ2h0LCBsZWZ0KVxuICAgICAgICAgICAgICA/ICgoaGVhcFtpbmRleF0gPSByaWdodCksXG4gICAgICAgICAgICAgICAgKGhlYXBbcmlnaHRJbmRleF0gPSBsYXN0KSxcbiAgICAgICAgICAgICAgICAoaW5kZXggPSByaWdodEluZGV4KSlcbiAgICAgICAgICAgICAgOiAoKGhlYXBbaW5kZXhdID0gbGVmdCksXG4gICAgICAgICAgICAgICAgKGhlYXBbbGVmdEluZGV4XSA9IGxhc3QpLFxuICAgICAgICAgICAgICAgIChpbmRleCA9IGxlZnRJbmRleCkpO1xuICAgICAgICAgIGVsc2UgaWYgKHJpZ2h0SW5kZXggPCBsZW5ndGggJiYgMCA+IGNvbXBhcmUocmlnaHQsIGxhc3QpKVxuICAgICAgICAgICAgKGhlYXBbaW5kZXhdID0gcmlnaHQpLFxuICAgICAgICAgICAgICAoaGVhcFtyaWdodEluZGV4XSA9IGxhc3QpLFxuICAgICAgICAgICAgICAoaW5kZXggPSByaWdodEluZGV4KTtcbiAgICAgICAgICBlbHNlIGJyZWFrIGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gICAgICB2YXIgZGlmZiA9IGEuc29ydEluZGV4IC0gYi5zb3J0SW5kZXg7XG4gICAgICByZXR1cm4gMCAhPT0gZGlmZiA/IGRpZmYgOiBhLmlkIC0gYi5pZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSkge1xuICAgICAgZm9yICh2YXIgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpOyBudWxsICE9PSB0aW1lcjsgKSB7XG4gICAgICAgIGlmIChudWxsID09PSB0aW1lci5jYWxsYmFjaykgcG9wKHRpbWVyUXVldWUpO1xuICAgICAgICBlbHNlIGlmICh0aW1lci5zdGFydFRpbWUgPD0gY3VycmVudFRpbWUpXG4gICAgICAgICAgcG9wKHRpbWVyUXVldWUpLFxuICAgICAgICAgICAgKHRpbWVyLnNvcnRJbmRleCA9IHRpbWVyLmV4cGlyYXRpb25UaW1lKSxcbiAgICAgICAgICAgIHB1c2godGFza1F1ZXVlLCB0aW1lcik7XG4gICAgICAgIGVsc2UgYnJlYWs7XG4gICAgICAgIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlVGltZW91dChjdXJyZW50VGltZSkge1xuICAgICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICExO1xuICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkKVxuICAgICAgICBpZiAobnVsbCAhPT0gcGVlayh0YXNrUXVldWUpKVxuICAgICAgICAgIChpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9ICEwKSxcbiAgICAgICAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nIHx8XG4gICAgICAgICAgICAgICgoaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSAhMCksIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKCkpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gICAgICAgICAgbnVsbCAhPT0gZmlyc3RUaW1lciAmJlxuICAgICAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KFxuICAgICAgICAgICAgICBoYW5kbGVUaW1lb3V0LFxuICAgICAgICAgICAgICBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZFlpZWxkVG9Ib3N0KCkge1xuICAgICAgcmV0dXJuIG5lZWRzUGFpbnRcbiAgICAgICAgPyAhMFxuICAgICAgICA6IGV4cG9ydHMudW5zdGFibGVfbm93KCkgLSBzdGFydFRpbWUgPCBmcmFtZUludGVydmFsXG4gICAgICAgICAgPyAhMVxuICAgICAgICAgIDogITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3RIb3N0VGltZW91dChjYWxsYmFjaywgbXMpIHtcbiAgICAgIHRhc2tUaW1lb3V0SUQgPSBsb2NhbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWxsYmFjayhleHBvcnRzLnVuc3RhYmxlX25vdygpKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydCAmJlxuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydChFcnJvcigpKTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IHZvaWQgMDtcbiAgICBpZiAoXG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcGVyZm9ybWFuY2UgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHBlcmZvcm1hbmNlLm5vd1xuICAgICkge1xuICAgICAgdmFyIGxvY2FsUGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTtcbiAgICAgIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxQZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsb2NhbERhdGUgPSBEYXRlLFxuICAgICAgICBpbml0aWFsVGltZSA9IGxvY2FsRGF0ZS5ub3coKTtcbiAgICAgIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpIC0gaW5pdGlhbFRpbWU7XG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgdGFza1F1ZXVlID0gW10sXG4gICAgICB0aW1lclF1ZXVlID0gW10sXG4gICAgICB0YXNrSWRDb3VudGVyID0gMSxcbiAgICAgIGN1cnJlbnRUYXNrID0gbnVsbCxcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gMyxcbiAgICAgIGlzUGVyZm9ybWluZ1dvcmsgPSAhMSxcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITEsXG4gICAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gITEsXG4gICAgICBuZWVkc1BhaW50ID0gITEsXG4gICAgICBsb2NhbFNldFRpbWVvdXQgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBzZXRUaW1lb3V0ID8gc2V0VGltZW91dCA6IG51bGwsXG4gICAgICBsb2NhbENsZWFyVGltZW91dCA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNsZWFyVGltZW91dCA/IGNsZWFyVGltZW91dCA6IG51bGwsXG4gICAgICBsb2NhbFNldEltbWVkaWF0ZSA9XG4gICAgICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBzZXRJbW1lZGlhdGUgPyBzZXRJbW1lZGlhdGUgOiBudWxsLFxuICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSAhMSxcbiAgICAgIHRhc2tUaW1lb3V0SUQgPSAtMSxcbiAgICAgIGZyYW1lSW50ZXJ2YWwgPSA1LFxuICAgICAgc3RhcnRUaW1lID0gLTE7XG4gICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGxvY2FsU2V0SW1tZWRpYXRlKVxuICAgICAgdmFyIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBsb2NhbFNldEltbWVkaWF0ZShwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUpO1xuICAgICAgfTtcbiAgICBlbHNlIGlmIChcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCksXG4gICAgICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmU7XG4gICAgICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgIH07XG4gICAgfSBlbHNlXG4gICAgICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG9jYWxTZXRUaW1lb3V0KHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSwgMCk7XG4gICAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfSWRsZVByaW9yaXR5ID0gNTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5ID0gMTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5ID0gNDtcbiAgICBleHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5ID0gMztcbiAgICBleHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZyA9IG51bGw7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSA9IDI7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayA9IGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICB0YXNrLmNhbGxiYWNrID0gbnVsbDtcbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbiAoZnBzKSB7XG4gICAgICAwID4gZnBzIHx8IDEyNSA8IGZwc1xuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCBmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZFwiXG4gICAgICAgICAgKVxuICAgICAgICA6IChmcmFtZUludGVydmFsID0gMCA8IGZwcyA/IE1hdGguZmxvb3IoMWUzIC8gZnBzKSA6IDUpO1xuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfbmV4dCA9IGZ1bmN0aW9uIChldmVudEhhbmRsZXIpIHtcbiAgICAgIHN3aXRjaCAoY3VycmVudFByaW9yaXR5TGV2ZWwpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICBjYXNlIDI6XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB2YXIgcHJpb3JpdHlMZXZlbCA9IDM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgfVxuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5lZWRzUGFpbnQgPSAhMDtcbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5ID0gZnVuY3Rpb24gKHByaW9yaXR5TGV2ZWwsIGV2ZW50SGFuZGxlcikge1xuICAgICAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICBjYXNlIDM6XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHByaW9yaXR5TGV2ZWwgPSAzO1xuICAgICAgfVxuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoXG4gICAgICBwcmlvcml0eUxldmVsLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBvcHRpb25zXG4gICAgKSB7XG4gICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiYgbnVsbCAhPT0gb3B0aW9uc1xuICAgICAgICA/ICgob3B0aW9ucyA9IG9wdGlvbnMuZGVsYXkpLFxuICAgICAgICAgIChvcHRpb25zID1cbiAgICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBvcHRpb25zICYmIDAgPCBvcHRpb25zXG4gICAgICAgICAgICAgID8gY3VycmVudFRpbWUgKyBvcHRpb25zXG4gICAgICAgICAgICAgIDogY3VycmVudFRpbWUpKVxuICAgICAgICA6IChvcHRpb25zID0gY3VycmVudFRpbWUpO1xuICAgICAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB2YXIgdGltZW91dCA9IC0xO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdGltZW91dCA9IDI1MDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHRpbWVvdXQgPSAxMDczNzQxODIzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgdGltZW91dCA9IDFlNDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aW1lb3V0ID0gNWUzO1xuICAgICAgfVxuICAgICAgdGltZW91dCA9IG9wdGlvbnMgKyB0aW1lb3V0O1xuICAgICAgcHJpb3JpdHlMZXZlbCA9IHtcbiAgICAgICAgaWQ6IHRhc2tJZENvdW50ZXIrKyxcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICBwcmlvcml0eUxldmVsOiBwcmlvcml0eUxldmVsLFxuICAgICAgICBzdGFydFRpbWU6IG9wdGlvbnMsXG4gICAgICAgIGV4cGlyYXRpb25UaW1lOiB0aW1lb3V0LFxuICAgICAgICBzb3J0SW5kZXg6IC0xXG4gICAgICB9O1xuICAgICAgb3B0aW9ucyA+IGN1cnJlbnRUaW1lXG4gICAgICAgID8gKChwcmlvcml0eUxldmVsLnNvcnRJbmRleCA9IG9wdGlvbnMpLFxuICAgICAgICAgIHB1c2godGltZXJRdWV1ZSwgcHJpb3JpdHlMZXZlbCksXG4gICAgICAgICAgbnVsbCA9PT0gcGVlayh0YXNrUXVldWUpICYmXG4gICAgICAgICAgICBwcmlvcml0eUxldmVsID09PSBwZWVrKHRpbWVyUXVldWUpICYmXG4gICAgICAgICAgICAoaXNIb3N0VGltZW91dFNjaGVkdWxlZFxuICAgICAgICAgICAgICA/IChsb2NhbENsZWFyVGltZW91dCh0YXNrVGltZW91dElEKSwgKHRhc2tUaW1lb3V0SUQgPSAtMSkpXG4gICAgICAgICAgICAgIDogKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSAhMCksXG4gICAgICAgICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgb3B0aW9ucyAtIGN1cnJlbnRUaW1lKSkpXG4gICAgICAgIDogKChwcmlvcml0eUxldmVsLnNvcnRJbmRleCA9IHRpbWVvdXQpLFxuICAgICAgICAgIHB1c2godGFza1F1ZXVlLCBwcmlvcml0eUxldmVsKSxcbiAgICAgICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCB8fFxuICAgICAgICAgICAgaXNQZXJmb3JtaW5nV29yayB8fFxuICAgICAgICAgICAgKChpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9ICEwKSxcbiAgICAgICAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nIHx8XG4gICAgICAgICAgICAgICgoaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSAhMCksXG4gICAgICAgICAgICAgIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKCkpKSk7XG4gICAgICByZXR1cm4gcHJpb3JpdHlMZXZlbDtcbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBzaG91bGRZaWVsZFRvSG9zdDtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3dyYXBDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgdmFyIHBhcmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwYXJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AoRXJyb3IoKSk7XG4gIH0pKCk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/scheduler@0.26.0/node_modules/scheduler/cjs/scheduler.development.js\n"));
/***/ }),
/***/ "(pages-dir-browser)/./node_modules/.pnpm/scheduler@0.26.0/node_modules/scheduler/index.js":
/*!*****************************************************************************!*\
!*** ./node_modules/.pnpm/scheduler@0.26.0/node_modules/scheduler/index.js ***!
\*****************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ \"(pages-dir-browser)/./node_modules/.pnpm/scheduler@0.26.0/node_modules/scheduler/cjs/scheduler.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9zY2hlZHVsZXJAMC4yNi4wL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLDJMQUEwRDtBQUM1RCIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9ub2RlX21vZHVsZXMvLnBucG0vc2NoZWR1bGVyQDAuMjYuMC9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/.pnpm/scheduler@0.26.0/node_modules/scheduler/index.js\n"));
/***/ }),
/***/ "?32d9":
/*!*****************************************************!*\
!*** private-next-instrumentation-client (ignored) ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
/* (ignored) */
/***/ })
},
/******/ __webpack_require__ => { // webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
/******/ var __webpack_exports__ = (__webpack_exec__("(pages-dir-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/next-dev.js"));
/******/ _N_E = __webpack_exports__;
/******/ }
]);